libwww/0040755000076400001440000000000007422617441011563 5ustar danieluserslibwww/CVS/0040755000076400001440000000000007405517602012215 5ustar danieluserslibwww/CVS/Root0100644000076400001440000000005607405517320013056 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/CVS/Repository0100644000076400001440000000000707405517320014306 0ustar danieluserslibwww libwww/CVS/Entries0100644000076400001440000000145407405517602013552 0ustar danielusers/.cvsignore/1.3/Sat Dec 5 05:03:50 1998// /COPYRIGH/1.2/Sat Aug 29 16:49:56 1998// /COPYRIGHT.html/1.8/Thu Aug 20 00:51:05 1998// /ChangeLog/1.32/Thu Aug 30 13:41:03 2001// /INSTALL.html/1.32/Thu Aug 3 14:41:50 2000// /LICENSE.html/1.1/Thu Aug 20 00:51:06 1998// /Makefile.am/1.38/Fri Sep 1 12:18:52 2000// /NEWS.html/1.7/Thu Aug 3 14:41:50 2000// /PATCHES.html/1.1/Fri May 19 00:58:52 1995// /README.html/1.23/Thu Aug 3 14:41:50 2000// /acconfig.h/1.26/Thu Jan 6 10:48:49 2000// /acinclude.m4/1.6/Wed Jun 3 15:58:09 1998// /configure.in/1.89/Thu Dec 14 11:49:06 2000// /libwww-config.in/1.6/Wed Jun 23 18:05:01 1999// /w3c-libwww.spec.in/1.2/Fri Aug 4 13:11:06 2000// D/Bin//// D/ComLine//// D/Icons//// D/Library//// D/LineMode//// D/PICS-client//// D/Robot//// D/WinCom//// D/config//// D/modules//// libwww/Bin/0040755000076400001440000000000007405517322012271 5ustar danieluserslibwww/Bin/CVS/0040755000076400001440000000000007405517322012724 5ustar danieluserslibwww/Bin/CVS/Root0100644000076400001440000000005607405517322013570 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Bin/CVS/Repository0100644000076400001440000000001307405517322015015 0ustar danieluserslibwww/Bin libwww/Bin/CVS/Entries0100644000076400001440000000005507405517322014255 0ustar danielusers/.cvsignore/1.1/Sat Dec 5 05:03:51 1998// D libwww/Bin/.cvsignore0100644000076400001440000000000206632137267014265 0ustar danielusers* libwww/.cvsignore0100644000076400001440000000005206632137266013561 0ustar danielusersconfigure stamp-h.in Makefile.in Makefile libwww/COPYRIGH0100644000076400001440000000323606572030464012732 0ustar danielusers libwww Copyright Notice [This notice should be placed within redistributed or derivative software code when appropriate. This particular formulation of W3C's notice for inclusion in libwww code became active on August 14 1998.] LIBWWW COPYRIGHT NOTICE libwww: W3C's implementation of HTTP can be found at: http://www.w3.org/Library/ Copyright ¨ 1995-1998 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. This program is distributed under the W3C's Intellectual Property License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more details. Copyright ¨ 1995 CERN. "This product includes computer software created and made available by CERN. This acknowledgment shall be mentioned in full in any product which includes the CERN computer software included herein or parts thereof." libwww/COPYRIGHT.html0100644000076400001440000000326606566671371014037 0ustar danielusers libwww Copyright Notice

[This notice should be placed within redistributed or derivative software code when appropriate. This particular formulation of W3C's notice for inclusion in libwww code became active on August 14 1998.]

libwww Copyright Notice

libwww: W3C's implementation of HTTP can be found at: http://www.w3.org/Library/

Copyright ¨ 1995-1998 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. This program is distributed under the W3C's Intellectual Property License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more details.
Copyright ¨ 1995 CERN. "This product includes computer software created and made available by CERN. This acknowledgment shall be mentioned in full in any product which includes the CERN computer software included herein or parts thereof."
libwww/ChangeLog0100644000076400001440000002743107343441157013342 0ustar danielusersChanges with libwww 5.3.3 2025-08-30 Jose Kahan * Added a new field in the HTRequest structure for specifying a user defined Content-Location. This allows to use the library functions to access a resource, while in fact the request sent to the server is made to the value of the user defined Content-Location. This sound silly, but it allows to keep the libwww state coherent and it doesn't break the requests like the previous (and banned since long time) real content-location handling. To avoid confusion, this field is called default_put_name. See HTReqMan.h for the name of the functions that handle this field. * New public function in HTCache.c to reset the value of a cache entry and delete the cached file. This is interesting when we want to keep a cache entry, but force the cache entry to be refreshed. HTCache_resetMeta (). 2025-08-14 Jose Kahan * HTProfile_newPreemptiveClient wasn't intializing the default event loop in all cases (bug reported by Olivier Steinau). 2025-03-14 Jose Kahan * Digest authentication didn't work well with pipelining requests. Only one of such requests got the stale nonce. The other 401 were being re-interpreted as if the user had given a wrong login name or password. To fix this, we try to infer a stale nonce if the previous nonce and the new one sent by the server are different and a wrong login name/password if they are the same. The patch is in HTAABrow.c. I also added a second bug fix in the same patch as not all pipelined requests seem to go thru the first authentication filter. 2025-03-09 Jose Kahan * Digest authentication wasn't being compiled by default in Win32 because windows/config.h was missing the HT_MD5 define. 2025-03-06 Serge Adda * HTAnchor bug. HTAnchor_delete wasn't removing the reference to the deleted anchor. This caused a bug whenever requesting another anchor for the same URL. Thanks to Anton Belov for having reported the problem and to Serge for his patch. See http://lists.w3.org/Archives/Public/www-lib/2001JanMar/0133.html. 2025-03-06 Stefan Wiesner * Timer bug. There was a bug in the code of function HTTimer_new if a timer is already expired when HTTimer_new is called. See http://lists.w3.org/Archives/Public/www-lib/2001JanMar/0123.html for the full analysis. 2025-02-26 Jose Kahan * Cache bug. An HTResponse object was being freed repetively inside a while loop, when reading a cached metadata in meta_read(). I moved the delete to outside this function. Changes with libwww 5.3.2 2025-12-19 Jose Kahan * Compilation fix: two prototypes in HTResponse.html were declared as PUBLIC, instead of as external. Updated the copyright date of the WinCommander Fixed runtime crashes with the following example applications: chunk.c chunkbody.c getheaders.c head.c multichunk.c 2025-12-18 Jose Kahan * Compilation fix: The HTMIME_anchor2response() function added a dependency between the cache and mime mini-libs. I changed the call to a stream converter (HTCacheCopyHeaders) to make it optional and to avoid the dependency. The converter is initialized in HTInit.c:HTConverterInit. 2025-12-14 Jose Kahan * Bug fix: make dist didn't work because of a recurrent rule in the ComLine make file (it tried to use www to create a documentation file). 2025-12-13 Jose Kahan * Bug fix: When objects were retrieved from the cache, the response object didn't have a copy of the request headers. These headers were only found in the anchor associated to the request. In order to make a coherent behavior, I made a new function HTMIME.c:HTMIME_anchor2response() that copies the headers from one object to the other. Well, more than a copy, it adds a link to the headers. I call this function in HTCache:CacheCleanup when it succesfully retrieved an object from the cache. Result, you can now use the response object in both cases. 2025-10-30 Jose Kahan * Enhancement, added a new field to the HTResponse object to store the HTTP reason sent by the server. Two new functions to get it/set it: HTResponse_reason(), HTResponse_setReason() 2025-09-01 Wayne Davison * HTAccess.c: Typo fix * HTChunk.c, HTChunk.html: new function, HTChunk_fromBuffer for creating a chunk from an existing block of memory, without having to allocate more memory. 2025-09-01 Peter Stamfest * Makefile.am: corrected a DESTDIR problem 2025-09-01 Jose Kahan * config.h: Updated the libwww version 2025-09-01 Zhu Qun-Ying * config.h: BUG FIX: wrong closing comment 2025-08-30 Arthur Barstow * HTRDF.c: BUG FIX: nested typedNode constructs with attributes caused re-using a free'd pointer. * HTRDF.c: per a request from the Redland RDF project, added a void * context parameter to HTRDF_parse{File,Buffer}. The application-specific context will be available in the triple callback handler. * HTRDF.html - updated to API changes mentioned above * Library/Examples/ updated rdf_parse_{file,buffer} programs to reflect the above API changes. 2025-08-29 Jose Kahan * Temporarily commented the XML structured stream in HTXML.c (HTXMLStructured_new) and its related code, as it creates a dependency with the libwwwxml mini-library. If this code is still useful, it should go into another module, HTSXML.c to avoid the forced dependency. 2025-08-28 Jose Kahan * Updated expat to the test version 19990728, as this version adds some interesting API extensions and is now being widely used by other projects, including the Perl XML modules. The previous version is CVS tagged as expat-1-1. 2025-08-18 Arthur Barstow * HTRDF.c: Added a new public API HTRDF_parseBuffer. It parses an arbitrary buffer (char *) of RDF. * HTRDF.c: Changed the name of HTRDFParseFile to HTRDF_parseFile. it now returns BOOL instead of char * to be consistent with other RDF parser APIs. * HTRDF.html - updated to HTRDF.c changes mentioned above * Library/Examples/: added two new example programs: 1. rdf_parse_file - demos/tests HTRDF_parseFile() 2. rdf_parse_buffer - demos/tests HTRDF_parseBuffer() * configure.in - added the two new programs above * Library/Examples/Makefile.am - added the two new programs 2025-08-17 Arthur Barstow * HTRDF.c: Fixed a memory leak. (HTElement structures for elements within a property with parseType="Literal" were not free'd after the parser was done.) * HTRDF.c: Bug fixes. Added code to circumvent calls to HTSAlloc (via StrAllocCopy) when the src and dest were identical (this causes a free'd pointer to be used) or both NULL. * HTRDF.c: Changed addMarkup{Add,End} to make one call to StrAllocMCat instead of multiple StrAllocCat calls. 2025-08-11 Jose Kahan * Memory leak. The HTPlain (HTPlain.c) stream wasn't freeing the HTTextImp (me->text) object in the HTPlain_free and HTPlain_abort. I found the bug while running the robot thru Insure and found the fix by seeing what was being done in the HTML (HTML.c) stream. * The make dist command wasn't copying the .c, .files, and .mak files found in the Library/src/windows. As a result, the tar files created with this command were missing those files. The problem came from some wrong assumptions in the Makefile.am of the windows directory. 2025-08-11 Wayne Davison * Added two new functions to HTHash.c, HTHashtable_removeObject() and HTHashTable_walk. The first one allows to delete individual elements from a hash-table, the second one allows to walk throug all associated elements in a table without having to ask for a list of all keys and then looking each one up. See http://lists.w3.org/Archives/Public/www-lib/2000JulSep/0146.html for a more detaile description on how to use these functions. * I got rid of a few useless variable initializations in HTHash.c (when the variables were being set to a value immediately following the init value). * I removed some superfluous spaces that I saw. 2025-08-10 Wayne Davison * Since "cvs update" was complaining about a bunch of generated files in the Library/src dir, I tweaked it to ignore the *.la files and the .libs dir. 2025-08-10 Jose Kahan * Because (IMO) of a very imbricated protocol stack, the Robot could hang when accessing local files, as it become starved on its own sockets. I fixed the problem by adding a new state in HTFile:FileEvent() to take into account the case when a request goes pending. This is mostly based on a previous (not commited) patch by Kinuko Yasuda, plus some long debugging to find out what was happening and a fix to a memory bug that the other patch had. 2025-08-08 Wayne Davison * New HTChunk_setSize function to allow to set the size of a chunk object upwards or downwards. (HTChunk_truncate() still exists and still enforces the sizing of the string downwards.) Both these string-sizing functions only zero the relevant bytes in the "size" region (if the string is being shortened). Note that HTChunk_clear() was left unchanged -- it still clears all of the Chunk's allocated memory. * Fixed the HT_OUTOFMEM() calls in HTChunk_ensure() to have the proper location string. * Some code in HTBind.c was optimized to use HTChunk_truncate(). * HTFTP.c and HTNews.c was optimized to use HTChunk_setSize() rather than using HTChunk_ensure() and writing data past the "size". * Optimized the code in HTMIME.c and HTML.c to use HTChunk_truncate(chunk,0) rather than HTChunk_clear(chunk). * Documented the new HTChunk_setSize() function. * Improved the comments for HTChunk_clear(). * Fixed the comments for HTChunk_ensure() (it was describing the extra-size parameter incorrectly). * Fixed the comments for HTChunk_toString() (to indicate that the function destroys the chunk when handing off the CString data). * Fixed a few spelling errors in HTChunk.html. * Note: There are probably other places in the code that could be optimized to use truncate rather than clear, but I didn't have time to check each one to see if the chunk's data was properly respecting the size indicator or not. 2025-08-09 Jose Kahan * Updated the "how to bootstrap section" with instructions on what to do if libtool and aclocal are installed in different directories. Thanks to Ken Olum and James Henstrige for the tips. 2025-08-08 Jens Meggers * The cache garbage collector (HTCacheGarbage()) could go into an endless loop when it tried to removed locked entries. The problem was that it wasn't checking the return code of HTCache_remove(). 2025-08-07 Wayne Davison * Changed the macro argument from "data" to "dp" in HTArray_firstObject() and HTArray_nextObject(). These macros are defined such that if the caller doesn't pass in a variable named exactly "data" as the second parameter, there will either be a syntax error generated during the compilation OR the wrong structure element will get referenced. This is because the macro argument "data" was the same name as the HTArray structure element that was being referenced in the macro. Changes with previous versions * No info available (this log was started with version 5.3.2) libwww/INSTALL.html0100644000076400001440000004135507142302256013556 0ustar danielusers Libwww - the W3C Sample Code Library Installation

Libwww - the W3C Sample Code Library Installation

         (c) COPYRIGHT MIT 1995.
         Please first read the full copyright statement in the file COPYRIGH.
 

First, if you got libwww directly from CVS then you must bootstrap the code before compiling. If you have already done that or if you started from a distribution file then you can continue installation here:


Building on Windows using MSVC

Note that you can also use the Cygwin environment which is a Win32 port of the popular GNU development tools for Windows NT, 95, and 98 which allows us to use autoconf, automake, and libtool.

Vladimir Kozlov provides fresh binaries for wintel and MSVC makefiles are part of the distribution package.

You can also get the latest MSVC makefiles (PGP signature) which are in sync with the current CVS source tree (not the distribution package!). The makesfiles are not in CVS themselves as they constantly cause CVS conflicts. Unzip them on top (directly in the libwww folder) of your checked out CVS tree and repeat the bootstrap mechanism.

Regardless of whether you are using the CVS tree directly or got the distribution package, you can compile by opening the libwww/windows/world.dsw workspace and do a batch build of the whole thing.

You can configure libwww in windows config.h and if you are interested in the details of how we build libwww on Windows then please read the documentation on how to install on Windows. Libwww can work with several external software packages of which some you get by default. Here is the current list:

Zlib Support

If HT_ZLIB is defined in the windows config.h file then libwww can use the zlib library for handling the deflate content-encoding. This may cause better performance as we then can inflate a compressed document on the fly. A version of the precompiled zlib DLL for Win32 is already included in the w3c-libwww distribution file.

  1. Define HT_ZLIB in windows config.h file
  2. Copy zlib.dll into a location where Windows can find it, for example .\Bin\Debug\

Regular Expressions

If HT_POSIX_REGEX is defined in the windows config.h file then libwww can use posix compliant regular expressions, for example to handle URI matching. This is for example used in the webbot which can handle regular expressions when matching which URIs to check. The library has been tested with the GNU regular expression library for Win32.

  1. Define HT_POSIX_REGEX in windows config.h file
  2. Copy regex.h into .\Library\External and name it rxposix.h
  3. Add gnu_regex.lib to the robot project (or whatever application you are building)
  4. Copy gnu_regex.dll into a location where Windows can find it, for example .\Bin\Debug\

SQL Access

 HT_MYSQL is defined in the windows config.h file then libwww can use a MySQL database for handling logging instead of plain text files. This has a huge set of advantages.

SOCKS Support

If either SOCKS and either SOCKS4 or SOCKS5 is defined in the windows config.h file then libwww can use SOCKS to go through firewalls. The SOCKS handling code in libwww can be found in wwwsys.h.

Building on Unix and in the Cygwin Environment

You probably need the GNU version of make in order to build libwww. The reason is that some of the make files contain some syntax that most other makefiles don't understand. These installation instructions are based on the suggested instructions provided with GNU Autoconf.

The Cygwin environment is a Win32 port of the popular GNU development tools for Windows NT, 95, and 98. They function through the use of the Cygwin library which provides a UNIX-like API on top of the Win32 API.

The configure shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' and a `wwwconf.h' file containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging configure).

The simplest way to compile this package on a Unix platform is:

  1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute configure itself. Running configure takes awhile. While running, it prints some messages telling which features for which it is checking.
  2. Type `make' to compile the package.
  3. Type `make install' to install the library.
  4. You can remove the library and object files from the source directory by typing `make clean.' To also remove the files that configure created (so you can compile the package for a different kind of computer), type `make distclean.'

Compilers and Options

Some systems require unusual options for compilation or linking that the configure script does not know about. You can give configure initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this:

      CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure

Or on systems that have the `env' program, you can do it like this:

      env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure

Using a Different Build Directory

You can compile the package in a directory different from the one containing the source code. Doing so allows you to compile it on more than one kind of computer at the same time. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make.' `cd' to the directory where you want to object files and library to go and run the configure script (i.e., go `../src/configure'). configure automatically checks for source code in the directory that configure is in and in `..' as well.

Installation Names

By default, `make install' will install the library in `/usr/local/lib'. You can specify an installation prefix other than `/usr/local' by giving configure the option `--prefix=PATH'. You can cause the library to be installed with an extra prefix or suffix on its name by giving configure the options `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.

Extra Features and Packages

There are a set of options you can give to configure in addition to those understood by all GNU Autoconf configure scripts. This is how you can enable, disable, include, or exclude them:

--disable-FEATURE
do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG]
include FEATURE [ARG=yes]
--with-PACKAGE[=ARG]
use PACKAGE [ARG=yes]
--without-PACKAGE
do not use PACKAGE (same as --with-PACKAGE=no)

Options for Handling Shared/Static Linking

Solaris 2.5.x has serious problems handling shared libraries (the linker dumps core) and therefore you MUST use the --disable-shared when compiling on this platform.

Libwww uses GNU Libtool to build shared libraries on a variety of systems. While this is very nice for making usable binaries, it can be a pain when trying to debug a program. For that reason, compilation of shared libraries can be turned off by specifying the --disable-shared option to configure.

--with-gnu-ld
assume the C compiler uses GNU ld [default=no]
--enable-shared
Build shared libraries [default=yes]
--enable-static
Build static libraries [default=yes]

Highly Recommended Packages!

These provide very useful added functionality in the libwww and the libwww applications

--with-expat[=PATH]
Compile a libwww XML parser wrapper for the Expat library and enable it as a libwww converter stream. This is on by default as the code is incorporated into the libwww codebase!
--with-md5[=PATH]
Compile a MD5 library which is required in order to handle HTTP digest authentication etc. This is on by default as the code is incorporated into the libwww codebase!
--with-mysql[=PATH]
Compile with support for MySQL database access used for Webbot logging etc.
--with-regex[=PATH]
Compile with POSIX regex library support used for regular expession matching of URIs
--with-ssl[=path]
Libwww can be set up to use SSL as a transport, for example in order to deal with the https URI access scheme. This requires the OpenSSL library, for example.
--with-zlib[=PATH]
Compile with zlib compress/decompress support used for compressing HTML etc.

Other Packages

These are less used packages (or less tested packages, I should say)

--with-socks
Compile with SOCKS firewall traversal support.
--with-socks5[=PATH]
Compile with SOCKS5 firewall traversal support.
--with-socks4[=PATH]
Compile with SOCKS4 firewall traversal support.
--with-wais[=PATH]
Compile with support for direct WAIS access.

Less Used Libwww Configuration Options

Normally, you don't have to change the default settings here

--disable-nagle
Turning off Nagle's algorithm. Nagle is off by default
--disable-pipelining
Turning off HTTP/1.1 Pipelining. Pipelining is on by default
--enable-reentrant
Define _REENTRANT to enable reentrant system calls. Off by default
--enable-signals
Use internal libwww signal handler. Off by default
--enable-posix
Define _POSIX_SOURCE. Off by default
--enable-cyrillic
Include support for Cyrillic in Line Mode browser

Location of X Files

As libwww doesn't use X, this is not really used.

--x-includes=DIR
X include files are in DIR
--x-libraries=DIR
X library files are in DIR
--with-x
Use the X Window System

Specifying the System Type

There may be some features configure can not figure out automatically, but needs to determine by the type of host the package will run on. Usually configure can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields:

      CPU-COMPANY-SYSTEM

See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type.

If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package.

Sharing Defaults

If you want to set default values for configure scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. configure looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all configure scripts look for a site script.

Operation Controls

configure recognizes the following options to control how it operates.

--cache-file=FILE
Save the results of the tests in FILE instead of `config.cache'. Set FILE to `/dev/null' to disable caching, for debugging configure.
--help
Print a summary of the options to configure, and exit.
--quiet, --silent
Do not print messages saying which checks are being made.
--srcdir=DIR
Look for the package's source code in directory DIR. Usually configure can determine that directory automatically.
--version
Print the version of Autoconf used to generate the configure script, and exit.

configure also accepts some other, not widely useful, options.


Jose Kahan,
@(#) $Id: INSTALL.html,v 1.32 2025/08/03 14:41:50 kahan Exp $
libwww/LICENSE.html0100644000076400001440000001007606566671372013547 0ustar danielusers W3C IPR SOFTWARE NOTICE

W3C IPR SOFTWARE NOTICE

Copyright ¨ 1995-1998 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/

This W3C work (including software, documents, or other related items) is being provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:

Permission to use, copy, and modify this software and its documentation, with or without modification,  for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make:

  1. The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
  2. Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright ¨ World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/"
  3. Notice of any changes or modifications to the W3C files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived).

In addition, creators of derivitive works must include the full text of this NOTICE in a location viewable to users of the derivitive work.

THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.

COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.

The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders.

____________________________________

This formulation of W3C's notice and license became active on August 14 1998. See the older formulation for the policy prior to this date. Please see our Copyright FAQ for common questions about using materials from our site, including specific terms and conditions for packages like libwww, Amaya, and Jigsaw. Other questions about this notice can be directed to site-policy@w3.org .
 

 

webmaster
(last updated 14-Aug-1998)
libwww/Makefile.am0100644000076400001440000000603207153717254013621 0ustar danielusers# Process this file with Automake to create Makefile.in. # (c) COPYRIGHT MIT 1995. # Please first read the full copyright statement in the file COPYRIGH. # @(#) $Id: Makefile.am,v 1.38 2025/09/01 12:18:52 kahan Exp $ # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .html BUILT_SOURCES = \ COPYRIGH legal : $(BUILT_SOURCES) @echo Generated built sources EXTRA_DIST = \ $(BUILT_SOURCES) \ README.html \ INSTALL.html \ COPYRIGHT.html \ PATCHES.html \ LICENSE.html # We need to install the config.h header file as well. As this file # is platform specific, we do not install it with the other libwww include files install-exec-local: @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(includedir) $(INSTALL_DATA) $(top_builddir)/$(CONFIG_HEADER) $(DESTDIR)$(includedir)/$(CONFIG_HEADER); # This is our install script provided by Soren Sandmann bin_SCRIPTS = libwww-config # We do not have _all_ GNU files so add this to avoid warnings AUTOMAKE_OPTIONS = foreign # These are the sub directories SUBDIRS = config modules Library PICS-client LineMode Robot ComLine WinCom Icons # Extra distribution files in zip format and in compress dist-hook: chmod -R a+r $(distdir) zip -rq $(distdir).zip $(distdir) $(TAR) chof $(distdir).tar $(distdir) compress -f $(distdir).tar # Tag before making distribution. Also, don't make a distribution if # checks fail. CVSSTUFF = config modules Library PICS-client LineMode Robot ComLine WinCom Icons \ Makefile.am acconfig.h acinclude.m4 aclocal.m4 wwwconf.h.in configure.in # If not indicated otherwise then use this to make the CVS diff with PREVIOUS_VERSION = @PREVIOUS_VERSION@ cvs-tag: cvs -q tag -F `echo "Release-$(VERSION)" | sed 's/\./-/g'` $(CVSSTUFF) cvs-export-member: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ rm -rf $$subdir/member; \ cvs export -d $$subdir/member \ -r `echo "Release-$(VERSION)" | sed 's/\./-/g'` WWW/$$subdir; \ done && test -z "$$fail" cvs-export-pub: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ rm -rf $$subdir/pub; \ cvs export -d $$subdir/pub \ -r `echo "Release-$(VERSION)" | sed 's/\./-/g'` WWW/$$subdir; \ done && test -z "$$fail" cvs-diff: thisver=`echo "Release-$(VERSION)" | sed 's/\./-/g'`; \ prevver=`echo "Release-$(PREVIOUS_VERSION)" | sed 's/\./-/g'`; \ cvs -f diff -w -c -r $$prevver -r $$thisver $(CVSSTUFF) \ > $(PACKAGE)-$(PREVIOUS_VERSION)-$(VERSION).diff # Generate the include files (normally done automaticly) inc: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ (cd $$subdir/src && $(MAKE) $$target) \ || case "$(MFLAGS)" in *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" # # Hypertext supplied in text format # $(top_srcdir)/COPYRIGH : $(top_srcdir)/COPYRIGHT.html ifdef WWW -$(WWW) -p -na $(top_srcdir)/COPYRIGHT.html \ -o $(top_srcdir)/COPYRIGH endif libwww/NEWS.html0100644000076400001440000000052207142302256013213 0ustar danielusers W3C Libwww NEWS

Please read the release notes in the libwww release notes


Jose Kahan,
@(#) $Id: NEWS.html,v 1.7 2025/08/03 14:41:50 kahan Exp $
libwww/PATCHES.html0100644000076400001440000000203005756766514013546 0ustar danielusers Corrections, Modifications, and Patches

Corrections, Modifications, and Patches

Corrections, modifications, patches and the like will not be incorporated into the W3C software distributions unless accompanied by the following statement:

MIT is hereby permitted to distribute these contributions as part of its W3C software distributions at no cost to MIT or its licensed users.

I the undersigned represent that I either own the copyright, or have the authority to grant these rights:

Name		___________________________________
Title		___________________________________
Signature	___________________________________
Date		___________________________________
Until further notice, please print, sign and send by postal mail to the following address:
	World-Wide Web Consortium
	LCS/MIT 545 Technology Square
	Cambridge, MA 02139
	USA


webmaster@w3.org, May 1995
libwww/README.html0100644000076400001440000000053507142302256013400 0ustar danielusers W3C Libwww README

Please read the latest information on libwww at W3C libwww overview


Jose Kahan,
@(#) $Id: README.html,v 1.23 2025/08/03 14:41:50 kahan Exp $
libwww/acconfig.h0100644000076400001440000001140407035071421013472 0ustar danielusers/* Define to enable direct WAIS access. */ #undef HT_DIRECT_WAIS /* Define to enable mysql access. */ #undef HT_MYSQL /* Define to enable MD5 for HTTP access authentication. */ #undef HT_MD5 /* Define to enable expat XML parser. */ #undef HT_EXPAT /* Define to enable Zlib compression / decompression support. */ #undef HT_ZLIB /* Define to enable POSIX RegEx support. */ #undef HT_POSIX_REGEX /* Define to enable support for enabling a rules file w/o user interaction. */ #undef HT_AUTOMATIC_RULES /* Define to enable SOCKS firewall-breaching code. */ #undef SOCKS #undef SOCKS4 #undef SOCKS5 /* Define to enable TcL testing code. */ #undef LIBTCL /* Define to build Cyrillic version. */ #undef CYRILLIC /* Define to use internal signal handler */ #undef WWWLIB_SIG /* Define to build using reentrant system calls. */ #undef HT_REENTRANT /* Define to use the two-argument variant of ctime_r */ #undef HAVE_CTIME_R_2 /* Define to use the three-argument variant of ctime_r */ #undef HAVE_CTIME_R_3 /* Define to use the two-argument variant of readdir_r */ #undef HAVE_READDIR_R_2 /* Define to use the three-argument variant of readdir_r */ #undef HAVE_READDIR_R_3 /* Define to use the three-argument variant of gethostbyname_r */ #undef HAVE_GETHOSTBYNAME_R_3 /* Define to use the five-argument variant of gethostbyname_r */ #undef HAVE_GETHOSTBYNAME_R_5 /* Define to use the six-argument variant of gethostbyname_r */ #undef HAVE_GETHOSTBYNAME_R_6 /* Define to use the five-argument variant of gethostbyaddr_r */ #undef HAVE_GETHOSTBYADDR_R_5 /* Define to use the seven-argument variant of gethostbyaddr_r */ #undef HAVE_GETHOSTBYADDR_R_7 /* Define to use the eight-argument variant of gethostbyaddr_r */ #undef HAVE_GETHOSTBYADDR_R_8 /* Define if getlogin_r returns an integer */ #undef GETLOGIN_R_RETURNS_INT /* Define if getlogin_r returns a pointer */ #undef GETLOGIN_R_RETURNS_POINTER /* Define to be the package name. */ #undef W3C_PACKAGE /* Define to be the version. */ #undef W3C_VERSION /* Define to be the location of the W3C Icons */ #undef W3C_ICONS /* Define this to be the prefix for cache files. */ #undef CACHE_FILE_PREFIX /* Define this if we can select on stdin. */ #undef TTY_IS_SELECTABLE /* Define this if the platform uses EBCDIC instead of ASCII. */ #undef NOT_ASCII /* Define to disable Nagle's algorithm */ #undef HT_NO_NAGLE /* Define to disable HTTP/1.1 pipelining */ #undef HT_NO_PIPELINING /* Define to force use of HTTP/1.0 */ #undef HT_FORCE_10 /* Define to disable HTTP/1.1 pipelining */ #undef HT_NO_PIPELINING /* Define to enable MUX as HTTP transport */ #undef HT_MUX /* Define this if a typedef'd function definition may not be preceeded by its ``extern'' declaration. */ #undef NO_EXTERN_TYPEDEF_FUNC /* Define this if the compiler doesn't like pointers to undefined structs. */ #undef NO_PTR_UNDEF_STRUCT /* Define this if it's not typedef'd automatically. */ #undef BOOLEAN /* Define this to be the location of the resolver configuration file. */ #undef RESOLV_CONF /* Define this to be the rlogin program name. */ #undef RLOGIN_PROGRAM /* Define this to be the telnet program name. */ #undef TELNET_PROGRAM /* Define this to be the tn3270 program name. */ #undef TN3270_PROGRAM /* Define this if your telnet accepts the -l option */ #undef TELNET_MINUS_L /* Define this if it isn't in the header files. */ #undef u_char /* For removing a file */ #undef unlink /* Define this if it isn't in the header files. */ #undef u_short /* Define this if it isn't in the header files. */ #undef u_long /* Define if type_t is of type long */ #undef HAVE_LONG_TIME_T /* Define if size_t is of type long */ #undef HAVE_LONG_SIZE_T @BOTTOM@ /* Define this if you have the external variable 'socket_errno'. */ #undef HAVE_SOCKET_ERRNO /* Define this if you have the external variable 'sys_errlist'. */ #undef HAVE_SYS_ERRLIST /* Define this if you have the external variable 'sys_nerr'. */ #undef HAVE_SYS_NERR /* Define this if you have the external variable 'timezone' */ #undef HAVE_TIMEZONE /* Define this if you have the external variable 'altzone' */ #undef HAVE_ALTZONE /* Define this if you have the external variable 'altzone' */ #undef HAVE_DAYLIGHT /* Define this if you have the uxc$inetdef.h header file. */ #undef HAVE_UXC_INETDEF_H /* Define this if directory entries have inodes. */ #undef HAVE_DIRENT_INO /* Define this if tm structure includes a tm_gmtoff entry. */ #undef HAVE_TM_GMTOFF /* Define this if your ioctl understands the winsize structure. */ #undef HAVE_WINSIZE /* Define this if the extern timezone is negative. */ #undef NEGATIVE_TIMEZONE /* Define this if sys_errlist must be declared (if it exists). */ #undef NEED_SYS_ERRLIST_DECLARED /* Define this if sys_nerr must be declared (if it exists). */ #undef NEED_SYS_NERR_DECLARED libwww/acinclude.m40100644000076400001440000005122006535271221013745 0ustar danielusersAC_DEFUN(AC_SYS_AFS_SYSNAME, [ AC_CHECK_PROG(ac_afsws_fs_found, fs, yes) AC_MSG_CHECKING(AFS system name) AC_CACHE_VAL(ac_cv_sys_afs_sysname, [ if test -n $ac_afsws_fs_found ; then ac_cv_sys_afs_sysname=`fs sysname|tr "'" " "|sed -e 's/Current sysname is //' -e 's/ //'` if test -z $ac_cv_sys_afs_sysname ; then ac_cv_sys_afs_sysname=bad_sysname fi else ac_cv_sys_afs_sysname=unknown_sysname fi ]) ac_sys_afs_sysname=$ac_cv_sys_afs_sysname AC_MSG_RESULT($ac_sys_afs_sysname) AC_SUBST(ac_sys_afs_sysname)dnl ])dnl dnl --------------------------------------------------------- ## dnl Use AC_PROG_INSTALL, supplementing it with INSTALL_SCRIPT ## dnl substitution. ## dnl --------------------------------------------------------- ## dnl AC_DEFUN(fp_PROG_INSTALL, dnl [AC_PROG_INSTALL dnl test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL} -m 755' dnl AC_SUBST(INSTALL_SCRIPT)dnl dnl ]) dnl AC_PATH_WAIS(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) AC_DEFUN(AC_PATH_WAIS, [ AC_MSG_CHECKING(for WAIS) AC_CACHE_VAL(ac_cv_path_wais, [ WAISPATH="$WAISPATH ${srcdir}/*WAIS* ${srcdir}/*wais* ${srcdir}/../*WAIS* ${srcdir}/../../*WAIS* ${srcdir}/../../../*WAIS* ${srcdir}/../*wais* ${srcdir}/../../*wais* ${srcdir}/../../../*wais*" for ac_dir in $WAISPATH ; do if test -f ${ac_dir}/include/wais.h; then ac_cv_path_wais=$ac_dir break; fi done ]) ac_path_wais=$ac_cv_path_wais test -z "$ac_path_wais" && ac_path_wais=missing AC_MSG_RESULT($ac_path_wais) if test -n "$ac_cv_path_wais"; then LIBS="$LIBS $ac_path_wais/bin/client.a $ac_path_wais/bin/wais.a" ifelse([$1], , :, [$1]) ifelse([$2], , , [else $2 ])dnl fi ]) dnl AC_PATH_TCL(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) AC_DEFUN(AC_PATH_TCL, [ AC_MSG_CHECKING(for TCL) AC_CACHE_VAL(ac_cv_path_tcl, [ TCLLIB="$TCLLIB /usr/local/lib/libtcl*.a" for ac_dir in $TCLLIB ; do if test -f $ac_dir; then ac_cv_path_tcl=$ac_dir break; fi done ]) LIBTCL="" ac_path_tcl=$ac_cv_path_tcl test -z "$ac_path_tcl" && ac_path_tcl=missing AC_MSG_RESULT($ac_path_tcl) if test -n "$ac_cv_path_tcl"; then LIBTCL="$ac_path_tcl" ifelse([$1], , :, [$1]) ifelse([$2], , , [else $2 ])dnl fi ]) dnl AC_PATH_SOCKS(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) AC_DEFUN(AC_PATH_SOCKS, [ AC_MSG_CHECKING(for SOCKS) AC_CACHE_VAL(ac_cv_path_socks, [ AC_CHECK_LIB(socks, main, ac_cv_path_socks=installed, [ SOCKSPATH="$SOCKSPATH ${srcdir}/../*SOCKS* ${srcdir}/../../*SOCKS* ${srcdir}/../../../*SOCKS* ${srcdir}/../*socks* ${srcdir}/../../*socks* ${srcdir}/../../../*socks*" for ac_dir in $SOCKSPATH; do if test -f $ac_dir/lib/libsocks.a ; then ac_cv_path_socks=$ac_dir/lib break; fi done ]) ]) ac_path_socks=$ac_cv_path_socks test -z "$ac_path_socks" && ac_path_socks=missing AC_MSG_RESULT($ac_path_socks) if test -n "$ac_cv_path_socks" && test "$ac_path_socks" != installed ; then LIBS="$LIBS $ac_path_socks/libsocks.a" fi; if test -n $ac_cv_path_socks; then ifelse([$1], , :, [$1]) ifelse([$2], , , [else $2 ])dnl fi ]) dnl AC_PROG_CC_STATIC AC_DEFUN(AC_PROG_CC_STATIC, [AC_REQUIRE([AC_PROG_CC])dnl AC_MSG_CHECKING(if the C compiler accepts -static) AC_CACHE_VAL(ac_cv_prog_cc_static, [ ac_save_cflags="$CFLAGS" CFLAGS="-static" AC_TRY_LINK(,[int main(){return(0);}], ac_cv_prog_cc_static=yes,ac_cv_prog_cc_static=no) CFLAGS="$ac_save_cflags" ])dnl AC_MSG_RESULT($ac_cv_prog_cc_static) if test $ac_cv_prog_cc_static = yes; then CFLAGS="$CFLAGS -static" fi ]) dnl AC_PROG_CC_DEBUG AC_DEFUN(AC_PROG_CC_DEBUG, [AC_REQUIRE([AC_PROG_CC])dnl AC_MSG_CHECKING(if the C compiler accepts -g) AC_CACHE_VAL(ac_cv_prog_cc_debug, [ ac_save_cflags="$CFLAGS" CFLAGS="-g" AC_TRY_LINK(,[int main(){return(0);}], ac_cv_prog_cc_debug=yes,ac_cv_prog_cc_debug=no) CFLAGS="$ac_save_cflags" ])dnl AC_MSG_RESULT($ac_cv_prog_cc_debug) if test $ac_cv_prog_cc_debug = yes; then CFLAGS="$CFLAGS -g" fi ]) dnl AC_TYPE_FD_SET AC_DEFUN(AC_TYPE_FD_SET, [AC_MSG_CHECKING(for fd_set) AC_CACHE_VAL(ac_cv_type_fd_set, [ AC_HEADER_INCLUDE(tmp_inc_select, sys/select.h select.h) AC_EGREP_CPP(fd_set, [$tmp_inc_select #include #ifdef STDC_HEADERS #include #endif ], ac_cv_type_fd_set=yes, ac_cv_type_fd_set=no)])dnl AC_MSG_RESULT($ac_cv_type_fd_set) if test $ac_cv_type_fd_set = no; then AC_DEFINE(fd_set, unsigned int) fi ]) dnl AC_C_EXTERN_TYPEDEF_FUNC AC_DEFUN(AC_C_EXTERN_TYPEDEF_FUNC, [AC_MSG_CHECKING(if an extern declaration of a typedefed function may precede its definition) AC_CACHE_VAL(ac_cv_c_extern_typedef_func, [AC_TRY_COMPILE([ typedef int foo_t(); extern foo_t foo; int foo() { return 0; } ], , ac_cv_c_extern_typedef_func=yes, ac_cv_c_extern_typedef_func=no)])dnl AC_MSG_RESULT($ac_cv_c_extern_typedef_func) if test $ac_cv_c_extern_typedef_func = no ; then AC_DEFINE(NO_EXTERN_TYPEDEF_FUNC) fi ]) dnl AC_C_PTR_UNDEF_STRUCT AC_DEFUN(AC_C_PTR_UNDEF_STRUCT, [AC_MSG_CHECKING(if pointers to undefined structures are allowed) AC_CACHE_VAL(ac_cv_c_ptr_undef_struct, [AC_TRY_COMPILE([typedef struct _foo foo; extern foo *bar();], bar();, ac_cv_c_ptr_undef_struct=yes, ac_cv_c_ptr_undef_struct=no)])dnl AC_MSG_RESULT($ac_cv_c_ptr_undef_struct) if test $ac_cv_c_ptr_undef_struct = no; then AC_DEFINE(NO_PTR_UNDEF_STRUCT) fi ]) dnl AC_PROG_TELNET_L dnl Ok, it's a hack of a method. Got anything better? AC_DEFUN(AC_PROG_TELNET_L, [ AC_MSG_CHECKING(if telnet accepts the -l flag) AC_CACHE_VAL(ac_cv_prog_telnet_l, [ if test -r `which telnet` \ && strings `which telnet` | egrep 'usage.*-l' > /dev/null ; then ac_cv_prog_telnet_l=yes else ac_cv_prog_telnet_l=no fi])dnl AC_MSG_RESULT($ac_cv_prog_telnet_l) if test $ac_cv_prog_telnet_l = yes; then AC_DEFINE(TELNET_MINUS_L) fi ]) dnl AC_FILE_RESOLV_CONF dnl Yeah, it should be very general. So sue me. AC_DEFUN(AC_FILE_RESOLV_CONF, [ AC_MSG_CHECKING(for resolver configuration file) AC_CACHE_VAL(ac_cv_file_resolv_conf, [ if test -f /etc/resolv.conf; then ac_cv_file_resolv_conf=/etc/resolv.conf fi])dnl AC_MSG_RESULT($ac_cv_file_resolv_conf) if test -n $ac_cv_file_resolv_conf; then AC_DEFINE_UNQUOTED(RESOLV_CONF, "$ac_cv_file_resolv_conf") fi ]) dnl AC_CHECK_EXTERN(EXTERN, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) AC_DEFUN(AC_CHECK_EXTERN, [ AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(ac_cv_extern_$1, [ AC_TRY_LINK(ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus extern "C" #endif ])dnl [extern char * $1; ], [ * $1 = '\0'; ], eval "ac_cv_extern_$1=yes", eval "ac_cv_extern_$1=no")])dnl if eval "test \"`echo '$ac_cv_extern_'$1`\" = yes"; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) ifelse([$3], , , [$3 ])dnl fi ]) dnl AC_CHECK_EXTERNS(EXTERN... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) AC_DEFUN(AC_CHECK_EXTERNS, [for ac_exter in $1 do AC_CHECK_EXTERN($ac_exter, [changequote(, )dnl ac_tr_exter=HAVE_`echo $ac_exter | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` changequote([, ])dnl AC_DEFINE_UNQUOTED($ac_tr_exter) $2], $3)dnl done ]) dnl AC_C_VOLATILE AC_DEFUN(AC_C_VOLATILE, [ AC_MSG_CHECKING([for working volatile]) AC_CACHE_VAL(ac_cv_c_volatile, [ AC_TRY_COMPILE(,[ extern volatile int errno; ], ac_cv_c_volatile=yes, ac_cv_c_volatile=no)])dnl AC_MSG_RESULT($ac_cv_c_volatile) if test $ac_cv_c_volatile = no; then AC_DEFINE(volatile, ) fi ]) dnl AC_C_NOSHARE AC_DEFUN(AC_C_NOSHARE, [ AC_MSG_CHECKING([for working noshare]) AC_CACHE_VAL(ac_cv_c_noshare, [ AC_TRY_COMPILE(,[ extern noshare int errno; ], ac_cv_c_noshare=yes, ac_cv_c_noshare=no)])dnl AC_MSG_RESULT($ac_cv_c_noshare) if test $ac_cv_c_noshare = no; then AC_DEFINE(noshare, ) fi ]) dnl AC_HEADER_INCLUDE(VARIABLE, INCLUDES) AC_DEFUN(AC_HEADER_INCLUDE, [ $1="" for ac_hdr in $2; do AC_TRY_CPP([#include <$ac_hdr>], [ $1="[#]include <$ac_hdr>" break]) done ]) dnl AC_WEIRD_ACCEPT dnl I couldn't even think of an appropriate name for this macro. dnl On some platforms (e.g., Sequent/Dynix), the accept(2) call dnl must be called on nonblocking sockets for the remote dnl connect(2) call to complete. Their man page says: dnl dnl NOTES dnl In DYNIX/ptx, the accept call actually completes the network dnl connect. BSD systems typically complete the connection dnl independently of the accept call. This can have the effect dnl of blocking the remote connect call until the accept call is dnl executed. dnl dnl The below program tests for this behaivour. If it exits zero, dnl then it would appear we're on one of these screwed machines; dnl a negative code means we're on a normal machine and a positive dnl means the test failed but we'll assume normal behaviour. dnl dnl I would like to thank Bill Rushka for his kind help dnl in working this out. Any problems with this macro or program are dnl strictly my () fault. dnl AC_DEFUN(AC_WEIRD_ACCEPT, [ AC_MSG_CHECKING(for unusual accept call) AC_CACHE_VAL(ac_cv_weird_accept, [ AC_HEADER_INCLUDE(tmp_inc_types, sys/types.h types.h) AC_HEADER_INCLUDE(tmp_inc_socket, sys/socket.h socket.h) AC_HEADER_INCLUDE(tmp_inc_in, netinet/in.h in.h) AC_HEADER_INCLUDE(tmp_inc_inet, arpa/inet.h inet.h) AC_HEADER_INCLUDE(tmp_inc_fcntl, sys/fcntl.h fcntl.h) AC_HEADER_INCLUDE(tmp_inc_file, sys/file.h file.h) AC_HEADER_INCLUDE(tmp_inc_time, sys/time.h time.h) AC_HEADER_INCLUDE(tmp_inc_wait, sys/wait.h wait.h) AC_TRY_RUN([ #include $tmp_inc_types $tmp_inc_socket $tmp_inc_in $tmp_inc_inet $tmp_inc_fcntl $tmp_inc_file $tmp_inc_time $tmp_inc_wait #ifndef INADDR_LOOPBACK #define INADDR_LOOPBACK 0x7F000001 #endif int main() { int s, t, f, a; struct sockaddr_in sin, tin; int sin_len, tin_len; struct timeval v; fd_set d; sin_len = tin_len = sizeof(struct sockaddr_in); if( (s = socket(AF_INET, SOCK_STREAM, 0)) == -1 ) exit(1); if( (f = fcntl(s, F_GETFL, 0)) == -1 ) exit(2); f |= FNDELAY; if( fcntl(s, F_SETFL, f) == -1 ) exit(3); sin.sin_family = AF_INET; sin.sin_port = htons(0); sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if( bind(s, (struct sockaddr *)&sin, sin_len) == -1 ) exit(4); if( getsockname(s, (struct sockaddr *)&sin, &sin_len) == -1 ) exit(5); if( listen(s, 2) == -1 ) exit(6); switch( fork() ) { case -1: exit(7); case 0: break; default: (void)wait(&a); exit(((int)a) >> 8); } (void)close(s); if( (t = socket(AF_INET, SOCK_STREAM, 0)) == -1 ) exit(8); if( (f = fcntl(t, F_GETFL, 0)) == -1 ) exit(9); f |= FNDELAY; if( fcntl(t, F_SETFL, f) == -1 ) exit(10); tin.sin_family = AF_INET; tin.sin_port = sin.sin_port; tin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if( connect(t, (struct sockaddr *)&tin, tin_len) != -1 ) exit(-1); v.tv_sec = 2; v.tv_usec = 0; FD_SET(t, &d); switch( select(sizeof(int), 0, &d, 0, &v) ) { case -1: exit(11); case 0: exit(0); case 1: exit(-2); } return -1; } ], ac_cv_weird_accept=yes, ac_cv_weird_accept=no, ac_cv_weird_accept=xcc)]) AC_MSG_RESULT($ac_cv_weird_accept) if test $ac_cv_weird_accept = yes; then AC_DEFINE(WEIRD_ACCEPT) fi ]) dnl AC_HEADER_TIOCGWINSZ AC_DEFUN(AC_HEADER_TIOCGWINSZ, [ AC_MSG_CHECKING([for TIOCGWINSZ get-window-size capability]) AC_CACHE_VAL(ac_cv_header_tiocgwinsz, [ AC_HEADER_INCLUDE(tmp_inc_termios, sys/termios.h termios.h) AC_EGREP_HEADER(yes, [ $tmp_inc_termios #ifdef TIOCGWINSZ yes #endif ], ac_cv_header_tiocgwinsz=yes, ac_cv_header_tiocgwinsz=no)])dnl AC_MSG_RESULT($ac_cv_header_tiocgwinsz) if test $ac_cv_header_tiocgwinsz = yes; then AC_DEFINE(GET_SCREEN_SIZE) fi ]) dnl AC_SYS_NEED_SIGNAL_RESET dnl If signal handlers need to be reset, define NEED_SIGNAL_RESET AC_DEFUN(AC_SYS_NEED_SIGNAL_RESET, [ AC_MSG_CHECKING(if signal handlers need to be reset) AC_CACHE_VAL(ac_cv_sys_need_signal_reset, [ AC_TRY_RUN( [ handle_hup(){return;} main(){signal(1, handle_hup);kill(getpid(),1); exit(((int *)signal(1, handle_hup))==((int *)handle_hup));}], ac_cv_sys_need_signal_reset=yes, ac_cv_sys_need_signal_reset=no, ac_cv_sys_need_signal_reset=cross-compiling) ]) AC_MSG_RESULT($ac_cv_sys_need_signal_reset) if test $ac_cv_sys_need_signal_reset = yes; then AC_DEFINE(NEED_SIGNAL_RESET) fi ])dnl dnl AC_TYPE_STATUS_T dnl Define status_t to be whatever wait/wait3/waitpid want. AC_DEFUN(AC_TYPE_STATUS_T, [ AC_MSG_CHECKING(for what the wait calls want) AC_CACHE_VAL(ac_cv_type_status_t, [ AC_TRY_COMPILE([#include #include ], [union wait x; wait3(&x, 0, NULL);], ac_cv_type_status_t="union wait", ac_cv_type_status_t=int)]) AC_MSG_RESULT($ac_cv_type_status_t) AC_DEFINE_UNQUOTED(status_t, $ac_cv_type_status_t) ])dnl dnl AC_STRUCT_GMTOFF dnl If struct tm contains tm_gmtoff, define HAVE_TM_GMTOFF. Otherwise, dnl if timezone and/or altzone exist, define HAVE_TIMEZONE and/or dnl HAVE_ALTZONE respectively. Finally, if the timezone value is dnl backwards, define NEGATIVE_TIMEZONE. AC_DEFUN(AC_STRUCT_GMTOFF, [ AC_REQUIRE([AC_STRUCT_TM])dnl AC_MSG_CHECKING([for tm_gmtoff in struct tm]) AC_CACHE_VAL(ac_cv_struct_gmtoff, [ AC_TRY_COMPILE([#include #include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;], ac_cv_struct_gmtoff=yes, ac_cv_struct_gmtoff=no)]) AC_MSG_RESULT($ac_cv_struct_gmtoff) if test $ac_cv_struct_gmtoff = yes; then AC_DEFINE(HAVE_TM_GMTOFF) fi AC_MSG_CHECKING(for time.h that defines timezone) AC_CACHE_VAL(ac_cv_extern_timezone, [AC_TRY_COMPILE([#include ], [return timezone;], ac_cv_extern_timezone=yes, ac_cv_extern_timezone=no)]) AC_MSG_RESULT($ac_cv_extern_timezone) if test $ac_cv_extern_timezone = yes; then AC_DEFINE(HAVE_TIMEZONE) fi dnl Borrowed from the Python distribution... AC_MSG_CHECKING(for time.h that defines altzone) AC_CACHE_VAL(ac_cv_extern_altzone, [AC_TRY_COMPILE([#include ], [return altzone;], ac_cv_extern_altzone=yes, ac_cv_extern_altzone=no)]) AC_MSG_RESULT($ac_cv_extern_altzone) if test $ac_cv_extern_altzone = yes; then AC_DEFINE(HAVE_ALTZONE) fi AC_MSG_CHECKING(for time.h that defines daylight) AC_CACHE_VAL(ac_cv_extern_daylight, [AC_TRY_COMPILE([#include ], [return daylight;], ac_cv_extern_daylight=yes, ac_cv_extern_daylight=no)]) AC_MSG_RESULT($ac_cv_extern_daylight) if test $ac_cv_extern_daylight = yes; then AC_DEFINE(HAVE_DAYLIGHT) fi if test $ac_cv_extern_timezone = yes; then AC_REQUIRE([AC_ISC_POSIX])dnl AC_MSG_CHECKING(if timezone is backwards) AC_CACHE_VAL(ac_cv_backwards_timezone, dnl Bletcherosity alert! This will work for the USA and Europe, and dnl countries sharing their timezones. It will be exactly wrong for dnl the Atlantic ocean, bits of Russia, and minor third-world dnl countries. The far East will default to "no," regardless of dnl platform. If you can come up with something better, great -- dnl Please let me know! [ AC_TRY_RUN([main(){ extern long timezone; switch( timezone/3600 ) { /* OK: */ case 5: case 6: case 7: case 8: /* USA */ case 0: case -1: case -2: /* Europe */ exit(0); /* Backwards: */ case -5: case -6: case -7: case -8: /* USA */ case 1: case 2: /* Europe */ exit(1); /* Other country -- default to ok: */ default: exit(0); } return 0;}], ac_cv_backwards_timezone=no, ac_cv_backwards_timezone=yes, ac_cv_backwards_timezone=cross-compiling)]) AC_MSG_RESULT($ac_cv_backwards_timezone) if test $ac_cv_backwards_timezone = yes; then AC_DEFINE(NEGATIVE_TIMEZONE) fi fi ])dnl dnl AC_OUTPUT_PARALLEL(DIRECTORY...) define(AC_OUTPUT_PARALLEL, [ define([AC_LIST_PARALLEL_DIRS], [$1])dnl subdirs="AC_LIST_PARALLEL_DIRS" AC_SUBST(subdirs)dnl if test "$no_recursion" != yes; then # Remove --cache-file and --srcdir arguments so they do not pile up. ac_sub_configure_args= ac_prev= for ac_arg in $ac_configure_args; do if test -n "$ac_prev"; then ac_prev= continue fi case "$ac_arg" in -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; esac done for ac_config_dir in $1; do # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. if test ! -d ${srcdir}/../$ac_config_dir; then continue fi echo configuring in $ac_config_dir ac_pd=`pwd` ac_bn=`basename $ac_pd` AC_SUBST(ac_bn) case "${srcdir}" in .) ;; *) if test -d ${srcdir}/../$ac_config_dir/$ac_bn || mkdir ${srcdir}/../$ac_config_dir/$ac_bn; then :; else AC_MSG_ERROR(can not create `pwd`/${srcdir}/../$ac_config_dir/$bn) fi ;; esac ac_popdir=`pwd` cd ${srcdir}/../$ac_config_dir/$ac_bn ac_sub_srcdir=${srcdir} # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_sub_srcdir/configure; then ac_sub_configure=$ac_sub_srcdir/configure elif test -f $ac_sub_srcdir/configure.in; then ac_sub_configure=$ac_configure else AC_MSG_WARN(no configuration information is in $ac_sub_srcdir) dnl AC_MSG_WARN(no configuration information is in $ac_config_dir) ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then echo "[running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args ] --srcdir=$ac_sub_srcdir" # The eval makes quoting arguments work. if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --srcdir=$ac_sub_srcdir then : else AC_MSG_ERROR($ac_sub_configure failed for $ac_config_dir) fi fi cd $ac_popdir done fi ]) dnl AC_STRUCT_DIRENT_INO AC_DEFUN(AC_STRUCT_DIRENT_INO, [ AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(if directory entries have inodes) AC_CACHE_VAL(ac_cv_struct_dirent_ino, [ AC_TRY_COMPILE([#if HAVE_DIRENT_H #include #else #define dirent direct #if HAVE_SYS_NDIR_H #include #endif #if HAVE_SYS_DIR_H #include #endif #if HAVE_DIR_H #include #endif #endif ], [struct dirent foo; foo.d_ino;], ac_cv_struct_dirent_ino=yes, ac_cv_struct_dirent_ino=no)]) AC_MSG_RESULT($ac_cv_struct_dirent_ino) if test $ac_cv_struct_dirent_ino = yes ; then AC_DEFINE(HAVE_DIRENT_INO) fi ]) dnl AC_STRUCT_WINSIZE AC_DEFUN(AC_STRUCT_WINSIZE, [ AC_CACHE_CHECK(for winsize structure, ac_cv_struct_winsize, [ AC_TRY_COMPILE([ #ifdef HAVE_TERMIOS_H #include #endif #ifdef HAVE_SYS_IOCTL_H #include #endif ], [struct winsize foo;], ac_cv_struct_winsize=yes, ac_cv_struct_winsize=no)]) if test $ac_cv_struct_winsize = yes ; then AC_DEFINE(HAVE_WINSIZE) fi ]) dnl AC_CHECK_SIZEOF_TYPE_T AC_DEFUN(AC_CHECK_SIZEOF_TIME_T, [AC_CACHE_CHECK(for whether time_t is long, ac_cv_c_long_time_t, [AC_TRY_RUN([ #include int main() { exit(sizeof(time_t) == sizeof(long)); }], ac_cv_c_long_time_t=no, ac_cv_c_long_time_t=yes) ]) if test $ac_cv_c_long_time_t = yes; then AC_DEFINE(HAVE_LONG_TIME_T) fi ]) dnl AC_CHECK_SIZEOF_SIZE_T AC_DEFUN(AC_CHECK_SIZEOF_SIZE_T, [AC_CACHE_CHECK(for whether size_t is long, ac_cv_c_long_size_t, [AC_TRY_RUN([ #include int main() { exit(sizeof(size_t) == sizeof(int)); }], ac_cv_c_long_size_t=yes, ac_cv_c_long_size_t=no) ]) if test $ac_cv_c_long_size_t = yes; then AC_DEFINE(HAVE_LONG_SIZE_T) fi ]) dnl AC_ADDLIB AC_DEFUN(AC_ADDLIB, [ AC_MSG_CHECKING([for $1]) LP=`dirname $1` LN=`basename $1 | sed 's/lib\(.*\)\.a/\1/g'` AC_MSG_RESULT([-L$LP -l$LN]) LIBS="$LIBS -L$LP -l$LN" ]) dnl AC_DECL_NEED_SYS_ERR (Let me know if you have a better name.) dnl Some systems don't have strerror; *do* have sys_errlist and sys_nerr, dnl but don't declare them. SunOS, for instance. dnl This isn't a perfect test, but we can combine it with HAVE_STRERROR, dnl HAVE_SYS_ERRLIST and HAVE_SYS_NERR. AC_DEFUN(AC_DECL_NEED_SYS_ERR, [ AC_MSG_CHECKING(if sys_errlist must be declared) AC_CACHE_VAL(ac_cv_decl_need_sys_errlist, [ AC_HEADER_INCLUDE(tmp_inc_errno, errno.h sys/errno.h) AC_TRY_COMPILE([$tmp_inc_errno], [*sys_errlist;], ac_cv_decl_need_sys_errlist=no, ac_cv_decl_need_sys_errlist=yes)]) AC_MSG_RESULT($ac_cv_decl_need_sys_errlist) if test $ac_cv_decl_need_sys_errlist = yes ; then AC_DEFINE(NEED_SYS_ERRLIST_DECLARED) fi AC_MSG_CHECKING(if sys_nerr must be declared) AC_CACHE_VAL(ac_cv_decl_need_sys_nerr, [ AC_HEADER_INCLUDE(tmp_inc_errno, errno.h sys/errno.h) AC_TRY_COMPILE([$tmp_inc_errno], [sys_nerr;], ac_cv_decl_need_sys_nerr=no, ac_cv_decl_need_sys_nerr=yes)]) AC_MSG_RESULT($ac_cv_decl_need_sys_nerr) if test $ac_cv_decl_need_sys_nerr = yes ; then AC_DEFINE(NEED_SYS_NERR_DECLARED) fi ])dnl libwww/configure.in0100644000076400001440000006330107216131662014071 0ustar danielusersdnl Process this file with Autoconf to create configure dnl (c) COPYRIGHT MIT 1995. dnl Please first read the full copyright statement in the file COPYRIGH. dnl @(#) $Id: configure.in,v 1.89 2025/12/14 11:49:06 kahan Exp $ AC_REVISION([$Id: configure.in,v 1.89 2025/12/14 11:49:06 kahan Exp $]) AC_PREREQ(2.13) AC_INIT(Library) AC_CONFIG_AUX_DIR(config) AC_CANONICAL_SYSTEM AC_ARG_PROGRAM dnl Initialize Automake. PACKAGE=w3c-libwww AC_SUBST(PACKAGE) AC_DEFINE_UNQUOTED(W3C_PACKAGE, "$PACKAGE") VERSION=5.3.2 AC_SUBST(VERSION) AC_DEFINE_UNQUOTED(W3C_VERSION, "$VERSION") #dnl for CVS to be able to make a release diff PREVIOUS_VERSION=5.3.1 AC_SUBST(PREVIOUS_VERSION) AM_INIT_AUTOMAKE($PACKAGE, $VERSION) AM_CONFIG_HEADER(wwwconf.h) dnl Regular configure... AC_PROG_CC AC_ISC_POSIX dnl AC_PROG_CXX Caused problems and is not needed... AC_CYGWIN dnl You should probably AC_MINGW32 dnl use all three of these AC_EXEEXT dnl for maximum portability AM_PROG_LIBTOOL AC_PROG_MAKE_SET AC_PROG_INSTALL dnl Remove next line and you get an error -- autoconf dnl should deal with this automatically. AC_PATH_X dnl AC_PATH_XTRA Causes problems... dnl Default location of icons icondir=$datadir/$PACKAGE AC_SUBST(icondir) dnl Location for purify cache PURIFY_CACHE=/tmp/purify.cache AC_SUBST(PURIFY_CACHE) dnl Various compiler directives AC_MSG_CHECKING(whether to define additional compiler specific flags) case "$target" in alpha-dec*) if test "$CC" = "cc"; then CFLAGS="$CFLAGS -std1" AC_MSG_RESULT(Digital Unix's cc) fi ;; hp*) if test "$CC" = "cc"; then CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE" AC_MSG_RESULT(HT-UX's cc) fi ;; i386-next-nextstep*) CFLAGS="$CFLAGS -D_POSIX_SOURCE" AC_MSG_RESULT(NextStep and OpenStep require _POSIX_SOURCE defined. This may cause some compilation warnings about pre-compiled headers but that should be OK) ;; *) AC_MSG_RESULT(no) ;; esac dnl Checks for programs. AC_CHECK_PROGS(have_telnet, telnet) if test -n "$have_telnet" ; then AC_DEFINE_UNQUOTED(TELNET_PROGRAM, "$have_telnet") fi AC_CHECK_PROGS(have_rlogin, rlogin) if test -n "$have_rlogin" ; then AC_DEFINE_UNQUOTED(RLOGIN_PROGRAM, "$have_rlogin") fi AC_CHECK_PROGS(have_tn3270, tn3270 x3270) if test -n "$have_tn3270" ; then AC_DEFINE_UNQUOTED(TN3270_PROGRAM, "$have_tn3270") fi AC_CHECK_PROGS(have_perl, perl) if test ! -n "$have_perl" ; then AC_MSG_ERROR("Perl needs to be installed in order to compile libwww") fi AC_PATH_PROG(RM, rm, rm) AC_PATH_PROG(AR, ar, ar) AC_PATH_PROG(MKDIR, mkdir, mkdir) AC_PATH_PROG(CHMOD, chmod, chmod) AC_PATH_PROG(CP, cp, cp) AC_PATH_PROG(TAR, tar, tar) AC_PATH_PROG(CVS, cvs, cvs) AC_PATH_PROG(SED, sed, sed) AC_PATH_PROGS(COMPRESS, gzip compress, compress) dnl JK 26/July/2000: desactivated the use of the www tool, as it's faster to dnl use perl dnl AC_PATH_PROGS(WWW, www, [""]) AC_PROG_LN_S dnl Checks for misc files dnl Resolv.conf AC_PATH_PROG(have_resolv_conf, resolv.conf, , /etc, /usr/etc) if test -n "$have_resolv_conf" ; then AC_DEFINE_UNQUOTED(RESOLV_CONF, "$have_resolv_conf") fi dnl This is the standard UNIX value AC_DEFINE(CACHE_FILE_PREFIX, "/usr/wsrc/") dnl Checks for libraries: dnl AC_CHECK_LIB(ICE, IceConnectionNumber) AC_CHECK_LIB(socket, socket) AC_CHECK_LIB(inet, connect) AC_CHECK_LIB(nsl, t_accept) AC_CHECK_LIB(dl, dlopen) dnl Checks for header files: AC_CHECK_HEADERS(appkit/appkit.h appkit.h) AC_CHECK_HEADERS(arpa/inet.h inet.h) AC_CHECK_HEADERS(net/errno.h sys/errno.h errno.h) AC_CHECK_HEADERS(netinet/in.h in.h) AC_CHECK_HEADERS(netinet/tcp.h tcp.h) AC_CHECK_HEADERS(sys/fcntl.h fcntl.h) AC_CHECK_HEADERS(sys/file.h) AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/ipc.h) AC_CHECK_HEADERS(sys/limits.h limits.h) AC_CHECK_HEADERS(sys/machine.h) AC_CHECK_HEADERS(sys/resource.h resource.h) AC_CHECK_HEADERS(sys/select.h select.h) AC_CHECK_HEADERS(sys/socket.h socket.h) AC_CHECK_HEADERS(sys/stat.h stat.h) AC_CHECK_HEADERS(sys/syslog syslog.h) AC_CHECK_HEADERS(sys/systeminfo.h) AC_CHECK_HEADERS(sys/time.h time.h) AC_CHECK_HEADERS(sys/types.h types.h) AC_CHECK_HEADERS(sys/unistd.h unistd.h) AC_CHECK_HEADERS(wais/wais.h wais.h) AC_CHECK_HEADERS(bsdtime.h) AC_CHECK_HEADERS(bsdtypes.h) AC_CHECK_HEADERS(ctype.h) AC_CHECK_HEADERS(cursesX.h curses.h) AC_CHECK_HEADERS(dn.h) AC_CHECK_HEADERS(dnetdb.h) AC_CHECK_HEADERS(grp.h) AC_CHECK_HEADERS(libc.h) AC_CHECK_HEADERS(malloc.h) AC_CHECK_HEADERS(manifest.h) AC_CHECK_HEADERS(memory.h) AC_CHECK_HEADERS(netdb.h) AC_CHECK_HEADERS(pwd.h) AC_CHECK_HEADERS(rxposix.h regex.h) AC_CHECK_HEADERS(stdefs.h) AC_CHECK_HEADERS(stdio.h) AC_CHECK_HEADERS(stdlib.h) AC_CHECK_HEADERS(string.h strings.h) AC_CHECK_HEADERS(termios.h) AC_CHECK_HEADERS(unixlib.h) AC_HEADER_DIRENT AC_CHECK_HEADERS(dir.h direct.h) dnl AC_HEADER_DIRENT only checks for some.. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_HEADER_TIME AC_HEADER_STAT dnl Checks for typedefs, structures, and compiler characteristics: AC_TYPE_UID_T AC_TYPE_PID_T AC_TYPE_GETGROUPS AC_TYPE_MODE_T AC_TYPE_SIZE_T AC_TYPE_SIGNAL AC_CHECK_TYPE(BOOLEAN, char) AC_CHECK_TYPE(u_char, unsigned char) AC_CHECK_TYPE(u_short, unsigned short) AC_CHECK_TYPE(u_long, unsigned long) AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(char *) AC_CHECK_SIZEOF(int,4) AC_CHECK_SIZEOF(long,4) AC_CHECK_SIZEOF_TIME_T AC_CHECK_SIZEOF_SIZE_T AC_C_CONST AC_C_BIGENDIAN AC_C_CHAR_UNSIGNED AC_C_LONG_DOUBLE AC_STRUCT_TM AC_STRUCT_GMTOFF AC_STRUCT_TIMEZONE AC_STRUCT_WINSIZE dnl Checks for library functions: AC_FUNC_VPRINTF AC_FUNC_STRFTIME AC_CHECK_FUNCS(getcwd gethostname getdomainname getwd \ select socket strerror strtol opendir getpid strchr memcpy \ getlogin getpass fcntl readdir sysinfo ioctl chdir tempnam \ getsockopt setsockopt \ gettimeofday mktime timegm tzset) AC_CHECK_FUNC(unlink, , AC_CHECK_FUNC(remove, AC_DEFINE(unlink, remove))) dnl Checks for configuration arguments AC_MSG_CHECKING(whether to support direct WAIS access.) AC_ARG_WITH(wais, [ --with-wais[=PATH] Compile with support for direct WAIS access.], [ case "$withval" in no) AC_MSG_RESULT(no) HTWAIS="" WWWWAIS="" LWWWWAIS="" LIBWWWWAIS="" ;; *) AC_MSG_RESULT(yes) if test "x$withval" = "xyes"; then withval="/usr/local/lib/wais/wais.a /usr/local/lib/wais/client.a" fi LIBS="$withval -lm $LIBS" AC_DEFINE(HT_DIRECT_WAIS) AC_TRY_LINK([], [ makeDocID(); ], [], [ AC_MSG_ERROR(Could not find one or more of the $withval libraries. You must first install WAIS.) ]) HTWAIS="HTWAIS.lo" WWWWAIS="libwwwwais.la" LWWWWAIS="-lwwwwais.la" LIBWWWWAIS='${top_builddir}/Library/src/libwwwwais.la' ;; esac ], AC_MSG_RESULT(no) HTWAIS="" WWWWAIS="" LWWWWAIS="" LIBWWWWAIS="" ) AC_SUBST(HTWAIS) AC_SUBST(WWWWAIS) AC_SUBST(LWWWWAIS) AC_SUBST(LIBWWWWAIS) AC_MSG_CHECKING(whether to support zlib compress/decompress) AC_ARG_WITH(zlib, [ --with-zlib[=PATH] Compile with zlib compress/decompress support.], [ case "$withval" in no) AC_MSG_RESULT(no) HTZLIB="" WWWZIP="" LWWWZIP="" LIBWWWZIP="" ;; *) AC_MSG_RESULT(yes) if test "x$withval" = "xyes"; then withval="-lz" LIBS="$LIBS $withval" else AC_ADDLIB($withval) fi AC_DEFINE(HT_ZLIB) AC_TRY_LINK([], [ zlibVersion(); ], [], [ AC_MSG_ERROR(Could not find the $withval library. You must first install zlib.) ]) HTZLIB="HTZip.lo" WWWZIP="libwwwzip.la" LWWWZIP="-lwwwzip" LIBWWWZIP='${top_builddir}/Library/src/libwwwzip.la' ;; esac ], AC_MSG_RESULT(no) HTZLIB="" WWWZIP="" LWWWZIP="" LIBWWWZIP="" ) AC_SUBST(HTZLIB) AC_SUBST(WWWZIP) AC_SUBST(LWWWZIP) AC_SUBST(LIBWWWZIP) AC_MSG_CHECKING(whether to support POSIX regex) AC_ARG_WITH(regex, [ --with-regex[=PATH] Compile with POSIC regex library support.], [ case "$withval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) AC_DEFINE(HT_POSIX_REGEX) if test "x$withval" = "xyes"; then AC_CHECK_LIB(rx, regexec, [ LIBS="-lrx $LIBS" ] ) else AC_ADDLIB($withval) AC_TRY_LINK([], [ regexec(); ], [], [ AC_MSG_ERROR(Could not find the $withval library. You must first install regex.) ] ) fi ;; esac ], AC_MSG_RESULT(no) ) # borrowed from SSH - thanks! AC_MSG_CHECKING(whether to support SOCKS) AC_ARG_WITH(socks, [ --with-socks Compile with SOCKS firewall traversal support.], [ case "$withval" in no) AC_MSG_RESULT(no) ;; yes) AC_MSG_RESULT(yes) AC_CHECK_LIB(socks5, SOCKSconnect, [ socks=5 LIBS="-lsocks5 $LIBS"], [ AC_CHECK_LIB(socks, Rconnect, [ socks=4 LIBS="-lsocks $LIBS"], [ AC_MSG_ERROR(Could not find socks library. You must first install socks.) ] ) ] ) ;; esac ], AC_MSG_RESULT(no) ) if test "x$socks" = "x"; then AC_MSG_CHECKING(whether to support SOCKS5) AC_ARG_WITH(socks5, [ --with-socks5[=PATH] Compile with SOCKS5 firewall traversal support.], [ case "$withval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) socks=5 if test "x$withval" = "xyes"; then withval="-lsocks5" LIBS="$withval $LIBS" else AC_ADDLIB($withval) fi AC_TRY_LINK([], [ SOCKSconnect(); ], [], [ AC_MSG_ERROR(Could not find the $withval library. You must first install socks5.) ]) ;; esac ], AC_MSG_RESULT(no) ) fi if test "x$socks" = "x"; then AC_MSG_CHECKING(whether to support SOCKS4) AC_ARG_WITH(socks4, [ --with-socks4[=PATH] Compile with SOCKS4 firewall traversal support.], [ case "$withval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) socks=4 if test "x$withval" = "xyes"; then withval="-lsocks" LIBS="$withval $LIBS" else AC_ADDLIB($withval) fi AC_TRY_LINK([], [ Rconnect(); ], [], [ AC_MSG_ERROR(Could not find the $withval library. You must first install socks.) ]) ;; esac ], AC_MSG_RESULT(no) ) fi if test "x$socks" = "x4"; then AC_DEFINE(SOCKS) AC_DEFINE(SOCKS4) fi if test "x$socks" = "x5"; then AC_DEFINE(SOCKS) AC_DEFINE(SOCKS5) fi AC_MSG_CHECKING(whether to support mysql access.) AC_ARG_WITH(mysql, [ --with-mysql[=PATH] Compile with support for mysql access.], [ case "$withval" in no) AC_MSG_RESULT(no) HTSQL="" HTSQLLOG="" WWWSQL="" LWWWSQL="" LIBWWWSQL="" CVS2SQL="" ;; *) AC_MSG_RESULT(yes) if test "x$withval" = "xyes"; then if test -f '/usr/local/lib/mysql/libmysqlclient.a'; then AC_ADDLIB("/usr/local/lib/mysql/libmysqlclient.a") elif test -f '/usr/lib/mysql/libmysqlclient.a'; then AC_ADDLIB("/usr/lib/mysql/libmysqlclient.a") else AC_MSG_ERROR(Could not find the mysql client library.) fi else AC_ADDLIB($withval) fi AC_DEFINE(HT_MYSQL) HTSQL="HTSQL.lo" HTSQLLOG="HTSQLLog.lo" WWWSQL="libwwwsql.la" LWWWSQL="-lwwwsql" LIBWWWSQL='${top_builddir}/Library/src/libwwwsql.la' CVS2SQL="cvs2sql" ;; esac ], AC_MSG_RESULT(no) HTSQL="" HTSQLLOG="" WWWSQL="" LWWWSQL="" LIBWWWSQL="" CVS2SQL="" ) AC_SUBST(HTSQL) AC_SUBST(HTSQLLOG) AC_SUBST(WWWSQL) AC_SUBST(LWWWSQL) AC_SUBST(LIBWWWSQL) AC_SUBST(CVS2SQL) AC_MSG_CHECKING(whether we include the Expat XML parser.) AC_ARG_WITH(expat, [ --with-expat[=PATH] Compile with support for expat.], [ case "$withval" in no) AC_MSG_RESULT(no) HTXML="" HTLIBXML="" XMLTOK="" XMLPARSE="" WWWXML="" LWWWXML="" LIBWWWXML="" SHOWXML="" ;; *) AC_MSG_RESULT(yes) AC_DEFINE(HT_EXPAT) HTXML="HTXML.lo" HTLIBXML='${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la' XMLTOK="libxmltok.la" XMLPARSE="libxmlparse.la" WWWXML="libwwwxml.la" LWWWXML="-lwwwxml -lxmltok -lxmlparse" LIBWWWXML='${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la' SHOWXML="showxml ptri stri rdf_parse_file rdf_parse_buffer" ;; esac ], AC_MSG_RESULT(yes) AC_DEFINE(HT_EXPAT) HTXML="HTXML.lo" HTLIBXML='${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la' XMLTOK="libxmltok.la" XMLPARSE="libxmlparse.la" WWWXML="libwwwxml.la" LWWWXML="-lwwwxml -lxmltok -lxmlparse" LIBWWWXML='${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la' SHOWXML="showxml ptri stri rdf_parse_file rdf_parse_buffer" ) AC_SUBST(HTXML) # for old style big library AC_SUBST(HTLIBXML) # for old style big library AC_SUBST(XMLTOK) AC_SUBST(XMLPARSE) AC_SUBST(WWWXML) AC_SUBST(LWWWXML) AC_SUBST(LIBWWWXML) AC_SUBST(SHOWXML) AC_MSG_CHECKING(whether we include MD5 support for HTTP Digest Authentication.) AC_ARG_WITH(md5, [ --with-md5[=PATH] Compile with support for md5.], [ case "$withval" in no) AC_MSG_RESULT(no) WWWMD5="" LWWWMD5="" LIBWWWMD5="" ;; *) AC_MSG_RESULT(yes) AC_DEFINE(HT_MD5) WWWMD5="libmd5.la" LWWWMD5="-lmd5" LIBWWWMD5='${top_builddir}/modules/md5/libmd5.la' ;; esac ], AC_MSG_RESULT(yes) AC_DEFINE(HT_MD5) WWWMD5="libmd5.la" LWWWMD5="-lmd5" LIBWWWMD5='${top_builddir}/modules/md5/libmd5.la' ) AC_SUBST(WWWMD5) AC_SUBST(LWWWMD5) AC_SUBST(LIBWWWMD5) dnl Checks for libwww and OpenSSL: AC_MSG_CHECKING(whether we can find OpenSSL) dnl find the ssl library dir (empirical) if test -d '/usr/local/ssl/lib'; then ssllib="-L/usr/local/ssl/lib -lssl -lcrypto" else ssllib="-L/usr/lib -lssl -lcrypto" fi dnl find the ssl include dir (empirical) if test -d '/usr/local/ssl/include'; then sslinc="-I/usr/local/ssl/include" elif test -d '/usr/local/openssl/include'; then sslinc="-I/usr/local/openssl/include" elif test -d '/usr/local/include/openssl'; then sslinc="-I/usr/local/include/openssl" elif test -d '/usr/include/ssl'; then sslinc="-I/usr/include/ssl" elif test -d '/usr/include/openssl'; then sslinc="-I/usr/include/openssl" else sslinc="" fi WWWSSL="" SSLINC="" LIBSSL="" LWWWSSL="" LIBWWWSSL="" WWWSSLEX="" AC_ARG_WITH(ssl, [ --with-ssl[=PATH] Link with OpenSSL.], [ case "$withval" in no) AC_MSG_RESULT(no) ;; *) if test "x$withval" = "xyes"; then withval=$ssllib SSLINC=$sslinc fi LIBS="$LIBS $withval" AC_TRY_LINK([], [ SSL_library_init(); ], [], [ AC_MSG_ERROR(Could not find the $withval libraries. You must first install openSSL.) ]) AC_MSG_RESULT(yes) WWWSSL="libwwwssl.la" LWWWSSL="-lwwwssl" LIBWWWSSL='${top_builddir}/Library/src/SSL/libwwwssl.la' WWWSSLEX="wwwssl" ;; esac ], [ AC_MSG_RESULT(no) ]) AC_SUBST(WWWSSL) AC_SUBST(SSLINC) AC_SUBST(LWWWSSL) AC_SUBST(LIBWWWSSL) AC_SUBST(WWWSSLEX) AC_MSG_CHECKING(whether to use internal signal handlers) AC_ARG_ENABLE(signals, [ --enable-signals use internal libwww signal handler.], [ case "${enableval}" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) AC_DEFINE(WWWLIB_SIG) ;; esac ], AC_MSG_RESULT(no) ) AC_MSG_CHECKING(whether to disable Nagle's algorithm) AC_ARG_ENABLE(nagle, [ --disable-nagle Turning off Nagle's algorithm.], [ case "${enableval}" in no) AC_MSG_RESULT(yes) AC_DEFINE(HT_NO_NAGLE) ;; *) AC_MSG_RESULT(no) ;; esac ], AC_MSG_RESULT(yes) AC_DEFINE(HT_NO_NAGLE) ) AC_MSG_CHECKING(whether to accept new rule files without asking an end user.) AC_ARG_ENABLE(autorules, [ --enable-autorules Enabling acceptance of rule files without user interaction.], [ case "${enableval}" in yes) AC_MSG_RESULT(yes) AC_DEFINE(HT_AUTOMATIC_RULES) ;; *) AC_MSG_RESULT(no) ;; esac ], AC_MSG_RESULT(no) ) AC_MSG_CHECKING(whether to disable HTTP/1.1 pipelining) AC_ARG_ENABLE(pipelining, [ --disable-pipelining Turning off HTTP/1.1 Pipelining.], [ case "${enableval}" in no) AC_MSG_RESULT(yes) AC_DEFINE(HT_NO_PIPELINING) ;; *) AC_MSG_RESULT(no) ;; esac ], AC_MSG_RESULT(no) ) AC_MSG_CHECKING(whether to use MUX as transport for HTTP.) AC_ARG_ENABLE(mux, [ --enable-mux Enabling MUX as transport for HTTP.], [ case "${enableval}" in yes) AC_MSG_RESULT(yes) AC_DEFINE(HT_MUX) ;; *) AC_MSG_RESULT(no) ;; esac ], AC_MSG_RESULT(no) ) AC_MSG_CHECKING(whether to define _REENTRANT) AC_ARG_ENABLE(reentrant, [ --enable-reentrant define _REENTRANT to enable reentrant system calls], [ case "${enableval}" in no) AC_MSG_RESULT(no) ac_cv_reentrant=no ;; *) AC_MSG_RESULT(yes) AC_DEFINE(HT_REENTRANT) [CFLAGS="$CFLAGS -D_REENTRANT"] ac_cv_reentrant=yes ;; esac ], AC_MSG_RESULT(no) ) if test "$ac_cv_reentrant" = "yes"; then AC_MSG_CHECKING(for ctime_r) if test -z "$ac_cv_ctime_args"; then AC_TRY_COMPILE( [#include ], [ time_t clock; char buf[26]; ctime_r(&clock, buf); ], ac_cv_ctime_args=2) fi if test -z "$ac_cv_ctime_args" ; then AC_TRY_COMPILE( [#include ], [ time_t clock; char buf[26]; ctime_r(&clock, buf, 26); ], ac_cv_ctime_args=3) fi if test -z "$ac_cv_ctime_args"; then AC_MSG_RESULT(no) have_missing_r_funcs="$have_missing_r_funcs ctime_r" else if test "$ac_cv_ctime_args" = 2; then AC_DEFINE(HAVE_CTIME_R_2) elif test "$ac_cv_ctime_args" = 3; then AC_DEFINE(HAVE_CTIME_R_3) fi AC_MSG_RESULT([yes, and it takes $ac_cv_ctime_args arguments]) fi AC_MSG_CHECKING(for readdir_r) if test -z "$ac_cv_readdir_args"; then AC_TRY_COMPILE( [ #include #if defined(HAVE_DIRENT_H) # include # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if defined(HAVE_SYS_NDIR_H) # include # endif # if defined(HAVE_SYS_DIR_H) # include # endif # if defined(HAVE_NDIR_H) # include # endif #endif ], [ struct dirent dir, *dirp; DIR *mydir; dirp = readdir_r(mydir, &dir); ], ac_cv_readdir_args=2) fi if test -z "$ac_cv_readdir_args"; then AC_TRY_COMPILE( [ #include #if defined(HAVE_DIRENT_H) # include # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if defined(HAVE_SYS_NDIR_H) # include # endif # if defined(HAVE_SYS_DIR_H) # include # endif # if defined(HAVE_NDIR_H) # include # endif #endif ], [ struct dirent dir, *dirp; DIR *mydir; int rc; rc = readdir_r(mydir, &dir, &dirp); ], ac_cv_readdir_args=3) fi if test -z "$ac_cv_readdir_args"; then AC_MSG_RESULT(no) have_missing_r_funcs="$have_missing_r_funcs readdir_r" else if test "$ac_cv_readdir_args" = 2; then AC_DEFINE(HAVE_READDIR_R_2) elif test "$ac_cv_readdir_args" = 3; then AC_DEFINE(HAVE_READDIR_R_3) fi AC_MSG_RESULT([yes, and it takes $ac_cv_readdir_args arguments]) fi AC_MSG_CHECKING(for gethostbyname_r) if test -z "$ac_cv_gethostbyname_args"; then AC_TRY_COMPILE( [ #include #include ], [ struct hostent *hp; struct hostent h; char *name; char buffer[10]; int h_errno; hp = gethostbyname_r(name, &h, buffer, 10, &h_errno);], ac_cv_gethostbyname_args=5) fi if test -z "$ac_cv_gethostbyname_args"; then AC_TRY_COMPILE( [ #include #include ], [ struct hostent h; struct hostent_data hdata; char *name; int rc; rc = gethostbyname_r(name, &h, &hdata);], ac_cv_gethostbyname_args=3) fi if test -z "$ac_cv_gethostbyname_args"; then AC_TRY_COMPILE( [ #include #include ], [ struct hostent h; struct hostent *hp; char *name; char buf[10]; int rc; int h_errno; rc = gethostbyname_r(name, &h, buf, 10, &hp, &h_errno); ], ac_cv_gethostbyname_args=6) fi if test -z "$ac_cv_gethostbyname_args"; then AC_MSG_RESULT(no) have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r" else if test "$ac_cv_gethostbyname_args" = 3; then AC_DEFINE(HAVE_GETHOSTBYNAME_R_3) elif test "$ac_cv_gethostbyname_args" = 5; then AC_DEFINE(HAVE_GETHOSTBYNAME_R_5) elif test "$ac_cv_gethostbyname_args" = 6; then AC_DEFINE(HAVE_GETHOSTBYNAME_R_6) fi AC_MSG_RESULT([yes, and it takes $ac_cv_gethostbyname_args arguments]) fi AC_MSG_CHECKING(for gethostbyaddr_r) if test -z "$ac_cv_gethostbyaddr_args"; then AC_TRY_COMPILE( [ #include #include ], [ char * address; int length; int type; struct hostent h; struct hostent_data hdata; int rc; rc = gethostbyaddr_r(address, length, type, &h, &hdata); ], ac_cv_gethostbyaddr_args=5) fi if test -z "$ac_cv_gethostbyaddr_args"; then AC_TRY_COMPILE( [ #include #include ], [ char * address; int length; int type; struct hostent h; char buffer[10]; int buflen; int h_errnop; struct hostent * hp; hp = gethostbyaddr_r(address, length, type, &h, buffer, buflen, &h_errnop); ], ac_cv_gethostbyaddr_args=7) fi if test -z "$ac_cv_gethostbyaddr_args"; then AC_TRY_COMPILE( [ #include #include ], [ char * address; int length; int type; struct hostent h; char buffer[10]; int buflen; int h_errnop; struct hostent * hp; int rc; rc = gethostbyaddr_r(address, length, type, &h, buffer, buflen, &hp, &h_errnop); ], ac_cv_gethostbyaddr_args=8) fi if test -z "$ac_cv_gethostbyaddr_args"; then AC_MSG_RESULT(no) have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r" else if test "$ac_cv_gethostbyaddr_args" = 5; then AC_DEFINE(HAVE_GETHOSTBYADDR_R_5) elif test "$ac_cv_gethostbyaddr_args" = 7; then AC_DEFINE(HAVE_GETHOSTBYADDR_R_7) elif test "$ac_cv_gethostbyaddr_args" = 8; then AC_DEFINE(HAVE_GETHOSTBYADDR_R_8) fi AC_MSG_RESULT([yes, and it takes $ac_cv_gethostbyaddr_args arguments]) fi AC_MSG_CHECKING(for getlogin_r) if test -z "$ac_cv_getlogin_r_style"; then AC_TRY_RUN( [ #include int main() { char name[1024]; int len=1024; int rc; char *login; name[0]='\0'; rc = getlogin_r(name, len); if(rc == 0 && name[0] != '\0') { return 0; /* returns zero on success */ } else if(rc != 0 && name[0] == '\0') { return 0; /* returns errno on failure */ } else if(rc == 0 && name[0] == '\0') { return 0; /* can't tell */ } else if(rc != 0 && name[0] != '\0') { return 1; /* returns pointer on success */ } } ], [ ac_cv_getlogin_r_style=1 ], [ ac_cv_getlogin_r_style=2 ]) fi if test -z "$ac_cv_getlogin_r_style"; then AC_MSG_RESULT(no) have_missing_r_funcs="$have_missing_r_funcs getlogin_r" else if test $ac_cv_getlogin_r_style = 1; then AC_DEFINE(GETLOGIN_R_RETURNS_INT) AC_MSG_RESULT([yes, and it returns an int]) elif test $ac_cv_getlogin_r_style = 2; then AC_DEFINE(GETLOGIN_R_RETURNS_POINTER) AC_MSG_RESULT([yes, and it returns a pointer]) else AC_MSG_RESULT(no: result is $ac_cv_getlogin_r_style) have_missing_r_funcs="$have_missing_r_funcs getlogin_r" fi fi if test -n "$have_missing_r_funcs"; then AC_MSG_WARN(missing reentrant functions: $have_missing_r_funcs) fi fi AC_MSG_CHECKING(whether to define _POSIX_SOURCE) AC_ARG_ENABLE(posix, [ --enable-posix define _POSIX_SOURCE], [ case "${enableval}" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) AC_DEFINE(_POSIX_SOURCE) [CFLAGS="$CFLAGS -D_POSIX_SOURCE"] ;; esac ], AC_MSG_RESULT(no) ) AC_ARG_ENABLE(cyrillic, [ --enable-cyrillic include support for Cyrillic in line mode browser], AC_DEFINE(CYRILLIC) A_STDIO="a_stdio.o", A_STDIO="") AC_SUBST(A_STDIO) dnl Create output files AC_OUTPUT([Makefile libwww-config w3c-libwww.spec config/Makefile modules/Makefile modules/expat/Makefile modules/expat/xmltok/Makefile modules/expat/xmlparse/Makefile modules/md5/Makefile Library/Makefile Library/User/Makefile Library/User/Patch/Makefile Library/User/Architecture/Makefile Library/User/Using/Makefile Library/User/Guide/Makefile Library/User/Style/Makefile Library/User/Platform/Makefile Library/Test/Makefile Library/Test/User/Makefile Library/Test/src/Makefile Library/src/Makefile Library/src/windows/Makefile Library/src/vms/Makefile Library/src/SSL/Makefile Library/src/SSL/windows/Makefile Library/Examples/Makefile Library/cvs2sql/Makefile Library/External/Makefile PICS-client/Makefile PICS-client/User/Makefile PICS-client/src/Makefile PICS-client/src/windows/Makefile LineMode/Makefile LineMode/User/Makefile LineMode/src/Makefile LineMode/src/windows/Makefile LineMode/src/vms/Makefile Robot/Makefile Robot/User/Makefile Robot/src/Makefile Robot/tcl/Makefile Robot/src/windows/Makefile ComLine/Makefile ComLine/User/Makefile ComLine/src/Makefile ComLine/src/windows/Makefile WinCom/Makefile WinCom/hlp/Makefile WinCom/res/Makefile Icons/Makefile Icons/WWW/Makefile Icons/32x32/Makefile Icons/internal/Makefile ], date>stamp-h) libwww/libwww-config.in0100644000076400001440000000256406734220715014674 0ustar danielusers#!/bin/sh # (c) COPYRIGHT MIT 1995. # Please first read the full copyright statement in the file COPYRIGH. # @(#) $Id: libwww-config.in,v 1.6 2025/06/23 18:05:01 frystyk Exp $ # # Thanks to Soren Sandmann for providing first version of this script! prefix=@prefix@ exec_prefix=@exec_prefix@ exec_prefix_set=no usage="\ Usage: libwww-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--libs] [--cflags]" if test $# -eq 0; then echo "${usage}" 1>&2 exit 1 fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo $prefix ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo $exec_prefix ;; --version) echo @VERSION@ ;; --cflags) echo -I@includedir@ -I@includedir@/@PACKAGE@ @DEFS@ ;; --libs) echo -L@libdir@ @LWWWXML@ @LWWWZIP@ @LWWWWAIS@ @LWWWSQL@ -lwwwinit -lwwwapp -lwwwhtml -lwwwtelnet -lwwwnews -lwwwhttp -lwwwmime -lwwwgopher -lwwwftp -lwwwfile -lwwwdir -lwwwcache -lwwwstream -lwwwmux -lwwwtrans -lwwwcore -lwwwutils @LWWWMD5@ @LIBS@ ;; *) echo "${usage}" 1>&2 exit 1 ;; esac shift done libwww/w3c-libwww.spec.in0100644000076400001440000000656207142540352015052 0ustar danielusers# Note that this is NOT a relocatable package %define ver @VERSION@ %define rel 3 %define prefix /usr/ Vendor: W3C World Wide Web Consortium Name: @PACKAGE@ Version: %ver Release: %rel Copyright: W3C (see: http://www.w3.org/Consortium/Legal/copyright-software.html), (L)GPL compatible Group: System Environment/Libraries Source: http://www.w3.org/Library/Distribution/w3c-libwww-%{ver}.tar.gz URL: http://www.w3.org/Library BuildRoot: /var/tmp/%{name}-root Icon: Lib48x.gif Packager: someone@w3.org Summary: General-purpose Web API written in C %description Libwww is a general-purpose Web API written in C for Unix and Windows (Win32). With a highly extensible and layered API, it can accommodate many different types of applications including clients, robots, etc. The purpose of libwww is to provide a highly optimized HTTP sample implementation as well as other Internet protocols and to serve as a testbed for protocol experiments. Libwww also supports HTTPS, thru OpenSSL. Because of the US export restrictions, we can't distribute the libwwwssl pre-compiled library. You'll have to compile libwww yourself to use it. %package devel Summary: Libraries and header files for programs that use libwww. Group: Development/Libraries Requires: w3c-libwww %description devel Static libraries and header files for libwww, which are available as public libraries. %package apps Summary: Applications built using Libwww web library: e.g. Robot, command line tool, etc. Group: Applications/Internet Requires: w3c-libwww Icon: robot48x.gif %description apps Web applications built using Libwww: Robot, Command line tool, line mode browser. The Robot can crawl web sites faster, and with lower load, than any other web walker that we know of, due to its extensive pipelining and use of HTTP/1.1. The command line tool (w3c) is very useful for manipulation of Web sites that implement more than just HTTP GET (e.g. PUT, POST, etc.). The line mode browser is a minimal line mode web browser; often useful to convert to ascii text. Currently unavailable until someone updates it to some new interfaces. (hint, hint...) %prep %setup -q %build # for RPM 2.9 and greater #%configure --enable-shared --with-gnu-ld --with-regex --with-zlib [ -f configure.in ] CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --enable-shared --with-gnu-ld --with-regex --with-zlib make %install rm -rf $RPM_BUILD_ROOT make prefix=$RPM_BUILD_ROOT%{prefix} install ( cd $RPM_BUILD_ROOT chmod +x ./usr/lib/lib{www*,xml*,md5}.so.0.* strip ./usr/bin/* || : ) %clean rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files %defattr(-,root,root) %{prefix}/lib/libwww*.so.* %{prefix}/lib/libxml*.so.* %{prefix}/lib/libmd5.so.* %{prefix}/share/w3c-libwww %doc *.html */*.html */*/*.html Icons/*/*.gif %files apps %defattr(-,root,root) %{prefix}/bin/webbot %{prefix}/bin/w3c %files devel %defattr(-,root,root) %{prefix}/bin/libwww-config %{prefix}/lib/lib*.a %{prefix}/lib/lib*.la %{prefix}/lib/lib*.so %{prefix}/include/xmlparse.h %{prefix}/include/w3c-libwww %changelog * Fri Aug 04 2000 Jose Kahan - repackage for Red Hat 6.0. libwww/ComLine/0040755000076400001440000000000007405520576013114 5ustar danieluserslibwww/ComLine/CVS/0040755000076400001440000000000007405517322013542 5ustar danieluserslibwww/ComLine/CVS/Root0100644000076400001440000000005607405517322014406 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/ComLine/CVS/Repository0100644000076400001440000000001707405517322015637 0ustar danieluserslibwww/ComLine libwww/ComLine/CVS/Entries0100644000076400001440000000021107405517322015065 0ustar danielusers/.cvsignore/1.2/Thu Apr 18 01:41:12 1996// /Makefile.am/1.14/Fri Dec 15 18:02:03 2000// /Overview.html/1.20/Tue May 4 13:18:22 1999// D libwww/ComLine/CVS/Entries.Log0100644000076400001440000000004507405517322015612 0ustar danielusersA D/FAQ//// A D/User//// A D/src//// libwww/ComLine/FAQ/0040755000076400001440000000000007405517322013516 5ustar danieluserslibwww/ComLine/FAQ/CVS/0040755000076400001440000000000007405517322014151 5ustar danieluserslibwww/ComLine/FAQ/CVS/Root0100644000076400001440000000005607405517322015015 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/ComLine/FAQ/CVS/Repository0100644000076400001440000000002307405517322016243 0ustar danieluserslibwww/ComLine/FAQ libwww/ComLine/FAQ/CVS/Entries0100644000076400001440000000006007405517322015476 0ustar danielusers/Overview.html/1.2/Mon Dec 9 03:09:35 1996// D libwww/ComLine/FAQ/Overview.html0100644000076400001440000000136006252701357016211 0ustar danielusers W3C Command Line Tool Frequently Asked Questions

Frequently Asked Questions

Some answers to email questions. Most questions are answered in the documentation. You can also look at the very nifty www-lib mailing list archive.


Henrik Frystyk, libwww@w3.org, November 1995
libwww/ComLine/User/0040755000076400001440000000000007405520576014032 5ustar danieluserslibwww/ComLine/User/CVS/0040755000076400001440000000000007405517322014460 5ustar danieluserslibwww/ComLine/User/CVS/Root0100644000076400001440000000005607405517322015324 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/ComLine/User/CVS/Repository0100644000076400001440000000002407405517322016553 0ustar danieluserslibwww/ComLine/User libwww/ComLine/User/CVS/Entries0100644000076400001440000000035007405517322016007 0ustar danielusers/.cvsignore/1.2/Thu Apr 18 01:41:15 1996// /CommandLine.html/1.20/Fri Mar 24 15:32:19 2000// /Features.html/1.4/Sun Feb 16 18:43:52 1997// /Makefile.am/1.4/Thu Mar 5 21:56:28 1998// /Overview.html/1.10/Tue May 4 13:18:22 1999// D libwww/ComLine/User/Makefile0100644000076400001440000001376707405520576015505 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu ComLine/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = ComLine/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ComLine/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/ComLine/User/.cvsignore0100644000076400001440000000002506135316673016024 0ustar danielusersMakefile.in Makefile libwww/ComLine/User/CommandLine.html0100644000076400001440000002303207066705203017076 0ustar danielusers Command Line Syntax for the W3C Command Line Tool

Command Line Syntax


Options

The order of the options is not important and options can in fact be specified on either side of any URIs. Currently available options are:-

Getting Help

-help or -?
Load this file from directly into the browser
-v [ a | b | c | g | p | s | t | u ]
Verbose mode: Gives a running commentary on the program's attempts to read data in various ways. As the amount of verbose output is substantial, the -v option can now be followed by zero, one or more of the following flags (without space) in order to differentiate the verbose output generated:
  • a: Anchor relevant information
  • b: Bindings to local file system
  • c: Cache trace
  • g: SGML trace
  • p: Protocol module information
  • s: SGML/HTML relevant information
  • t: Thread trace
  • u: URI relevant information
-version
Prints out the version number of the software, and the version number of libwww, and exits.

User Interactions

-n
Non-interactive mode - don't ask - don't tell

Configuration File

-r <address>
Rule file, a.k.a. configuration file is a set of rules and configuration options that can be used to map URLs, and to set up other aspects of the behavior of the command line tool. Note that the address must be specified as a URI - and in fact it can be located on HTTP servers etc. as need be. File URIs are parsed relative to the current folder, so a rule file address of "rules.conf" will point to a file in the location where this tool it started. If a local file then the file suffix must be ".conf" - otherwise the media type must be application/x-www-rules

Selecting the HTTP Method

The Command Line Tool supports several HTTP methods. The default value is "GET". These options imply non-interactive execution.

-get
Gets a document. This is the default operation! See Form Submission and Searching for how to submit HTML forms and to issue queries.
-head
Returns the header information (if any) but not the document
-delete
Deletes a resource (or makes it unavailable) for future references.
-put
Uploads a document from either the local file system or a remote HTTP server to a remote HTTP server (destination) using PUT method. You must indicate the destination using the -dest command line option.
-post
Uploads a document from either the local file system or a remote HTTP server to a remote HTTP server (destination) using POST method. You must indicate the destination using the -dest command line option. See Form Submission and Searching for how to submit HTML forms and to issue queries.
-options
Ask for the available options for this URL
-trace
Ask for trace messages for this URL. You can supply the number of hop counts with the additional -maxforwards command line option

Destination for PUT and POST Request

-dest
You can specify a (relative) destination URL, for example for the operations PUT and POST using this flag. For example:
        -dest http://myserver/newfiles/foo.html

Automatic Authentication

-auth
If you are willing to try this then you can include your username, password, and the realm for where to apply it using the -auth command line option. I don't want to hear anything about security, OK? The format is user:password@realm

Data Format Conversions

You can convert the outcome of a request to some other format by using the following flags:

-from [ format ]
Only if the Line mode Browser is executed as a filter (using the "-" option), this option indicates the desired input format. The default value is "text/html".
-to [ format ]
Format is the output format for www. Default value is "www/present" but may be changed according to the HTTP-specifications. Two common output formats are "www/source" that is the source without MIME-headers and "www/mime" that is the source with the MIME-header if any. Though also "text/latex" is possible which generates a LaTeX version of the (HTML) document. This can then be compiled using latex and put out as Postscript. Default value is presenting the output to the user.
-source
Display the original source (without any MIME-headers) of a document instead of parsing it.
-cl
Counting content length of the output. This flag appends the Content-Length counter stream to the output stream so that everything is counted. This works exactly like piping the output into wc.

Setting Input and Ourput Files

-
A minus sign with no trailing characters indicates that the program will accept HTML format input from the standard input. This allows www to be used as a filter from html to plain text for example.
-o [ file ]
Redirects output to specified file. The default value is "w3c.out".

Logging of Requests

-l [ file ]
Specifies a log file with a list of visited documents. The default value is "w3c.log"

Other Options

-maxforwards <n>
Max forwards to be used with the TRACE method
-single
Singlethreaded mode. If this flag is set then the browser uses blocking, non interruptible I/O in interactive mode. Non-interactive mode always uses blocking I/O.
-timeout <n>
Timeout in seconds on open connections. If we don't get a reply within n secs then about the request. Default timeout is 20 secs

URI

If present, the next argument (URI) is the hypertext address, of the document at which you want to start browsing.

Form Submission and Searching

Any further command line arguments are taken as keywords. Keywords can be used for two purposes:

  1. As search tokens in an HTTP request-URI encoded so that all spaces are replaced with "+" and unsafe characters are encoded using the URI "%xx" escape mechanism. This is the default use of keywords.
  2. As form data in an HTTP POST request. Use the -form command line option to treat all keywords as form data. If the method is GET then the data is encoded as for search data, that is as part of the URI. If it is a POST request then the data is encoded as application/x-www-form-urlencoded and sent in the body of the request.

An example of a search query is

  w3c http://... "RECORD=ID" "par1=a" "par2=b" "par3=c" "par4=d"

and of a POST form submission

  w3c -post http://... -form "RECORD=ID" "COL1=a" "COL2=b" "COL3=c" "COL4=d"


Henrik Frystyk Nielsen,
@(#) $Id: CommandLine.html,v 1.20 2025/03/24 15:32:19 vladimir Exp $
libwww/ComLine/User/Features.html0100644000076400001440000000206306301652550016464 0ustar danielusers Change History of W3C Command Line Tool

Change History


Improvements made to the W3C Command Line Tool are listed in reverse chronological order. (See also the bug list.

Many changes to this product stem directly from changes to libwww, and are documented in the W3C Sample Code Library.

Command Line Tool 4.0

First release. The reason why it starts with version number 4.0 is that it follows W3C Sample Code Library closely.


Henrik Frystyk, libwww@w3.org, November 1995
libwww/ComLine/User/Makefile.am0100644000076400001440000000016506477617614016075 0ustar danielusers## Process this file with Automake to create Makefile.in. DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) libwww/ComLine/User/Overview.html0100644000076400001440000000317406713571636016534 0ustar danielusers W3C Command Line Tool Documentation

W3C Command Line Tool Documentation

This is a list of what you will find of documentation describing the W3C Command Line Tool.

Installation Guide
The installation description follows exactly the installation for the W3C Sample Code Library
Release Notes
The release notes for the tool is part of the Library release notes
Command Line Options
Describing the command line options
Known Bugs
Listing what we already know is wrong


Henrik Frystyk Nielsen,
@(#) $Id: Overview.html,v 1.10 2025/05/04 13:18:22 frystyk Exp $
libwww/ComLine/User/Makefile.in0100644000076400001440000001337207405520526016075 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu ComLine/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = ComLine/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ComLine/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/ComLine/.cvsignore0100644000076400001440000000002506135316670015103 0ustar danielusersMakefile.in Makefile libwww/ComLine/Makefile.am0100644000076400001440000000054307216456233015145 0ustar danielusers## Process this file with Automake to create Makefile.in. SUBDIRS = src User #BUILT_SOURCES = \ # README #EXTRA_DIST = \ # $(BUILT_SOURCES) #$(srcdir)/README : $(srcdir)/User/CommandLine.html # ifdef WWW # -$(CP) $(srcdir)/User/CommandLine.html $(srcdir)/README.html # -$(WWW) -p -na $(srcdir)/README.html \ # -o $(srcdir)/README # endif libwww/ComLine/Overview.html0100644000076400001440000000435606713571636015621 0ustar danielusers WebCon - the Libwww Command Line Tool

WebCon - the Libwww Command Line Tool

Basics | Get it!Options | Documentation | Release Notes

WebCon is a simple Web console tool that allows you to perform any HTTP operation automatically like posting data, saving data, deleting documents, etc. The WebCon comes with the libwww codebase. It gives a variety of possibilities for data format conversion, filtering etc. and can easily be used in scripts, cron jobs etc.


The Basics

Author(s)
Henrik Frystyk Nielsen
Status
Used as an example application for the W3C Sample Code Library
Plans
New releases follow the releases of libwww with no exception.
Platforms
It runs on the same platforms as libwww
Getting the Source Code
The w3c tool comes as an integral part of the libwww distribution package.
Forums
Discussions on libwww and its example applications take place on <www-lib@w3.org> (archives). See the documentation for how to subscribe.


Henrik Frystyk Nielsen,
@(#) $Id: Overview.html,v 1.20 2025/05/04 13:18:22 frystyk Exp $
libwww/ComLine/src/0040755000076400001440000000000007422617423013700 5ustar danieluserslibwww/ComLine/src/CVS/0040755000076400001440000000000007405517322014331 5ustar danieluserslibwww/ComLine/src/CVS/Root0100644000076400001440000000005607405517322015175 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/ComLine/src/CVS/Repository0100644000076400001440000000002307405517322016423 0ustar danieluserslibwww/ComLine/src libwww/ComLine/src/CVS/Entries0100644000076400001440000000026007405517322015660 0ustar danielusers/.cvsignore/1.4/Thu Apr 18 01:41:17 1996// /HTLine.c/1.56/Thu Jun 3 18:42:12 1999// /HTLine.html/1.3/Sun Feb 16 18:43:54 1997// /Makefile.am/1.22/Fri Aug 4 09:48:37 2000// D libwww/ComLine/src/CVS/Entries.Log0100644000076400001440000000002007405517322016372 0ustar danielusersA D/windows//// libwww/ComLine/src/windows/0040755000076400001440000000000007405520576015375 5ustar danieluserslibwww/ComLine/src/windows/CVS/0040755000076400001440000000000007405517322016023 5ustar danieluserslibwww/ComLine/src/windows/CVS/Root0100644000076400001440000000005607405517322016667 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/ComLine/src/windows/CVS/Repository0100644000076400001440000000003307405517322020116 0ustar danieluserslibwww/ComLine/src/windows libwww/ComLine/src/windows/CVS/Entries0100644000076400001440000000013107405517322017347 0ustar danielusers/.cvsignore/1.1/Sat Dec 5 05:03:51 1998// /Makefile.am/1.3/Tue Nov 3 23:03:20 1998// D libwww/ComLine/src/windows/Makefile0100644000076400001440000001410007405520576017026 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = $(MAK) $(WIN) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu ComLine/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = ComLine/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ComLine/src/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/ComLine/src/windows/.cvsignore0100644000076400001440000000002506632137267017371 0ustar danielusersMakefile.in Makefile libwww/ComLine/src/windows/Makefile.am0100644000076400001440000000024206617705670017430 0ustar danielusers## Process this file with Automake to create Makefile.in. MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = \ $(MAK) \ $(WIN) libwww/ComLine/src/windows/Makefile.in0100644000076400001440000001350007405520526017431 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = $(MAK) $(WIN) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu ComLine/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = ComLine/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ComLine/src/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/ComLine/src/.cvsignore0100644000076400001440000000005606135316675015703 0ustar danielusers*.h .www_browsable .deps Makefile.in Makefile libwww/ComLine/src/HTLine.c0100644000076400001440000004366006725546204015200 0ustar danielusers/* HTLine.c ** W3C COMMAND LINE TOOL ** ** (c) COPRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTLine.c,v 1.56 2025/06/03 18:42:12 frystyk Exp $ ** ** Authors: ** HFN Henrik Frystyk Nielsen, (frystyk@w3.org) ** ** History: ** Nov 24 95 First version */ #include "WWWLib.h" /* Global Library Include file */ #include "WWWApp.h" #include "WWWMIME.h" /* MIME parser/generator */ #include "WWWHTML.h" /* HTML parser/generator */ #include "WWWNews.h" /* News access module */ #include "WWWHTTP.h" /* HTTP access module */ #include "WWWFTP.h" #include "WWWFile.h" #include "WWWGophe.h" #include "WWWStream.h" #include "WWWTrans.h" #include "WWWInit.h" #include "HTLine.h" /* Implemented here */ #ifndef W3C_VERSION #define W3C_VERSION "unspecified" #endif #define APP_NAME "W3C-WebCon" #define APP_VERSION W3C_VERSION /* Default page for "-help" command line option */ #define W3C_HELP "http://www.w3.org/ComLine/README" #define DEFAULT_OUTPUT_FILE "w3c.out" #define DEFAULT_RULE_FILE "w3c.conf" #define DEFAULT_LOG_FILE "w3c.log" #define MILLIES 1000 #define DEFAULT_TIMEOUT 20 /* timeout in secs */ #define DEFAULT_HOPS 0 #define DEFAULT_FORMAT WWW_SOURCE typedef enum _CLFlags { CL_FILTER = 0x1, CL_COUNT = 0x2, CL_QUIET = 0x4, CL_VALIDATE = 0x8, CL_END_VALIDATE = 0x10, CL_CACHE_FLUSH = 0x20 } CLFlags; #define SHOW_MSG (!(cl->flags & CL_QUIET)) typedef struct _ComLine { HTRequest * request; HTParentAnchor * anchor; HTParentAnchor * dest; /* Destination for PUT etc. */ int timer; /* Timeout on socket */ char * cwd; /* Current dir URL */ char * rules; char * logfile; HTLog * log; char * outputfile; FILE * output; HTFormat format; /* Input format from console */ char * realm; /* For automated authentication */ char * user; char * password; CLFlags flags; } ComLine; HTChunk * post_result = NULL; /* ------------------------------------------------------------------------- */ PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } /* Create a Command Line Object ** ---------------------------- */ PRIVATE ComLine * ComLine_new (void) { ComLine * me; if ((me = (ComLine *) HT_CALLOC(1, sizeof(ComLine))) == NULL) HT_OUTOFMEM("ComLine_new"); me->timer = DEFAULT_TIMEOUT*MILLIES; me->cwd = HTGetCurrentDirectoryURL(); me->output = OUTPUT; /* Bind the ConLine object together with the Request Object */ me->request = HTRequest_new(); HTRequest_setOutputFormat(me->request, DEFAULT_FORMAT); HTRequest_setContext (me->request, me); return me; } /* Delete a Command Line Object ** ---------------------------- */ PRIVATE BOOL ComLine_delete (ComLine * me) { if (me) { HTRequest_delete(me->request); if (me->log) HTLog_close(me->log); if (me->output && me->output != STDOUT) fclose(me->output); HT_FREE(me->cwd); HT_FREE(me); return YES; } return NO; } PRIVATE void Cleanup (ComLine * me, int status) { ComLine_delete(me); HTProfile_delete(); #ifdef VMS exit(status ? status : 1); #else exit(status ? status : 0); #endif } PRIVATE void VersionInfo (const char * name) { HTPrint("\nW3C OpenSource Software"); HTPrint("\n-----------------------\n\n"); HTPrint("\tWebCon version %s\n", APP_VERSION); HTPrint("\tusing the W3C libwww library version %s.\n\n",HTLib_version()); HTPrint("\tTry \"%s -help\" for help\n\n", name ? name : APP_NAME); HTPrint("\tSee \"http://www.w3.org/ComLine/User/\" for user information\n"); HTPrint("\tSee \"http://www.w3.org/ComLine/\" for general information\n\n"); HTPrint("\tPlease send feedback to the mailing list,\n"); HTPrint("\tsee \"http://www.w3.org/Library/#Forums\" for details\n\n"); } /* terminate_handler ** ----------------- ** This function is registered to handle the result of the request */ PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { ComLine * cl = (ComLine *) HTRequest_context(request); if (status == HT_LOADED) { if (cl) { if (cl->flags & CL_COUNT) { HTPrint("Content Length found to be %ld\n", HTAnchor_length(cl->anchor)); } } } else { HTAlertCallback *cbf = HTAlert_find(HT_A_MESSAGE); if (cbf) (*cbf)(request, HT_A_MESSAGE, HT_MSG_NULL, NULL, HTRequest_error(request), NULL); } Cleanup(cl, (status/100 == 2) ? 0 : -1); return HT_OK; } PRIVATE BOOL PromptUsernameAndPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { ComLine * cl = (ComLine *) HTRequest_context(request); char * realm = (char *) input; if (request && cl) { /* ** If we have a realm then check that it matches the realm ** that we got from the server. */ if (realm && cl->realm && !strcmp(cl->realm, realm)) { HTAlert_setReplyMessage(reply, cl->user ? cl->user : ""); HTAlert_setReplySecret(reply, cl->password ? cl->password : ""); return YES; } else { BOOL status = HTPrompt(request, op, msgnum, dfault, input, reply); return status ? HTPromptPassword(request, op, HT_MSG_PW, dfault, input, reply) : NO; } } return NO; } PRIVATE BOOL ParseCredentials (ComLine * cl, char * credentials) { if (cl && credentials) { char * start = credentials; char * end = credentials; /* Make sure we don't get inconsistent sets of information */ cl->realm = NULL; cl->user = NULL; cl->password = NULL; /* Find the username */ while (*end && *end!=':') end++; if (!*end) return NO; *end++ = '\0'; cl->user = start; start = end; /* Find the password */ while (*end && *end!='@') end++; if (!*end) return NO; *end++ = '\0'; cl->password = start; start = end; /* Find the realm */ cl->realm = start; } return YES; } /* ------------------------------------------------------------------------- */ /* MAIN PROGRAM */ /* ------------------------------------------------------------------------- */ int main (int argc, char ** argv) { int status = 0; int arg; int tokencount = 0; BOOL formdata = NO; HTChunk * keywords = NULL; /* From command line */ HTAssocList*formfields = NULL; HTMethod method = METHOD_GET; /* Default value */ ComLine * cl = ComLine_new(); BOOL cache = NO; /* Use persistent cache */ BOOL flush = NO; /* flush the persistent cache */ char * cache_root = NULL; /* Starts Mac GUSI socket library */ #ifdef GUSI GUSISetup(GUSIwithSIOUXSockets); GUSISetup(GUSIwithInternetSockets); #endif #ifdef __MWERKS__ /* STR */ InitGraf((Ptr) &qd.thePort); InitFonts(); InitWindows(); InitMenus(); TEInit(); InitDialogs(nil); InitCursor(); SIOUXSettings.asktosaveonclose = false; argc=ccommand(&argv); #endif /* Initiate W3C Reference Library with a client profile */ HTProfile_newNoCacheClient(APP_NAME, APP_VERSION); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* ** Delete the default Username/password handler so that we can handle ** parameters handed to us from the command line. The default is set ** by the profile. */ HTAlert_deleteOpcode(HT_A_USER_PW); HTAlert_add(PromptUsernameAndPassword, HT_A_USER_PW); /* ** Add default content decoder. We insert a through line as it doesn't ** matter that we get an encoding that we don't know. */ HTFormat_addCoding("*", HTIdentityCoding, HTIdentityCoding, 0.3); /* Scan command Line for parameters */ for (arg=1; arg filter */ if (argv[arg][1] == '\0') { cl->flags |= CL_FILTER; /* -? or -help: show the command line help page */ } else if (!strcmp(argv[arg],"-?") || !strcmp(argv[arg],"-help")) { cl->anchor = (HTParentAnchor *) HTAnchor_findAddress(W3C_HELP); tokencount = 1; /* non-interactive */ } else if (!strcmp(argv[arg], "-n")) { HTAlert_setInteractive(NO); /* Treat the keywords as form data with a "=" */ } else if (!strcmp(argv[arg], "-form")) { formdata = YES; /* from -- Initial represntation (only with filter) */ } else if (!strcmp(argv[arg], "-from")) { cl->format = (arg+1 < argc && *argv[arg+1] != '-') ? HTAtom_for(argv[++arg]) : WWW_HTML; /* to -- Final representation */ } else if (!strcmp(argv[arg], "-to")) { HTFormat format = (arg+1 < argc && *argv[arg+1] != '-') ? HTAtom_for(argv[++arg]) : DEFAULT_FORMAT; HTRequest_setOutputFormat(cl->request, format); /* destination for PUT, POST etc. */ } else if (!strcmp(argv[arg], "-dest")) { if (arg+1 < argc && *argv[arg+1] != '-') { char * dest = HTParse(argv[++arg], cl->cwd, PARSE_ALL); cl->dest = (HTParentAnchor *) HTAnchor_findAddress(dest); HT_FREE(dest); } /* source please */ } else if (!strcmp(argv[arg], "-source")) { HTRequest_setOutputFormat(cl->request, WWW_RAW); /* log file */ } else if (!strcmp(argv[arg], "-l")) { cl->logfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_LOG_FILE; /* Max forward hops in case of TRACE request */ } else if (!strcmp(argv[arg], "-hops") || !strcmp(argv[arg], "-maxforwards")) { int hops = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_HOPS; if (hops >= 0) HTRequest_setMaxForwards(cl->request, hops); /* automated authentication of format user:password@realm */ } else if (!strncmp(argv[arg], "-auth", 5)) { char * credentials = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : NULL; if (credentials) ParseCredentials(cl, credentials); /* rule file */ } else if (!strcmp(argv[arg], "-r")) { cl->rules = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_RULE_FILE; /* output filename */ } else if (!strcmp(argv[arg], "-o")) { cl->outputfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_OUTPUT_FILE; /* timeout -- Change the default request timeout */ } else if (!strcmp(argv[arg], "-timeout")) { int timeout = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_TIMEOUT; if (timeout >= 1) cl->timer = timeout*MILLIES; /* preemptive or non-preemptive access */ } else if (!strcmp(argv[arg], "-single")) { HTRequest_setPreemptive(cl->request, YES); /* content Length Counter */ } else if (!strcmp(argv[arg], "-cl")) { cl->flags |= CL_COUNT; /* print version and exit */ } else if (!strcmp(argv[arg], "-version")) { VersionInfo(argv[0]); Cleanup(cl, 0); /* run in quiet mode */ } else if (!strcmp(argv[arg], "-q")) { cl->flags |= CL_QUIET; /* Start the persistent cache */ } else if (!strcmp(argv[arg], "-cache")) { cache = YES; /* Determine the cache root */ } else if (!strcmp(argv[arg], "-cacheroot")) { cache_root = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : NULL; /* Persistent cache flush */ } else if (!strcmp(argv[arg], "-flush")) { flush = YES; /* Do a cache validation */ } else if (!strcmp(argv[arg], "-validate")) { cl->flags |= CL_VALIDATE; /* Do an end-to-end cache-validation */ } else if (!strcmp(argv[arg], "-endvalidate")) { cl->flags |= CL_END_VALIDATE; /* Force complete reload */ } else if (!strcmp(argv[arg], "-nocache")) { cl->flags |= CL_CACHE_FLUSH; #ifdef WWWTRACE /* trace flags */ } else if (!strncmp(argv[arg], "-v", 2)) { HTSetTraceMessageMask(argv[arg]+2); #endif /* GET method */ } else if (!strcasecomp(argv[arg], "-get")) { method = METHOD_GET; /* HEAD method */ } else if (!strcasecomp(argv[arg], "-head")) { method = METHOD_HEAD; /* DELETE method */ } else if (!strcasecomp(argv[arg], "-delete")) { method = METHOD_DELETE; /* POST Method */ } else if (!strcasecomp(argv[arg], "-post")) { method = METHOD_POST; /* PUT Method */ } else if (!strcasecomp(argv[arg], "-put")) { method = METHOD_PUT; /* OPTIONS Method */ } else if (!strcasecomp(argv[arg], "-options")) { method = METHOD_OPTIONS; /* TRACE Method */ } else if (!strcasecomp(argv[arg], "-trace")) { method = METHOD_TRACE; } else { if (SHOW_MSG) HTPrint("Bad Argument (%s)\n", argv[arg]); } } else { /* If no leading `-' then check for URL or keywords */ if (!tokencount) { char * ref = HTParse(argv[arg], cl->cwd, PARSE_ALL); cl->anchor = (HTParentAnchor *) HTAnchor_findAddress(ref); tokencount = 1; HT_FREE(ref); } else if (formdata) { /* Keywords are form data */ char * string = argv[arg]; if (tokencount++ <= 1) formfields = HTAssocList_new(); HTParseFormInput(formfields, string); } else { /* keywords are search tokens */ char * escaped = HTEscape(argv[arg], URL_XALPHAS); if (tokencount++ <= 1) keywords = HTChunk_new(128); else HTChunk_putc(keywords, ' '); HTChunk_puts(keywords, HTStrip(escaped)); HT_FREE(escaped); } } } if (!tokencount && !cl->flags & CL_FILTER) { VersionInfo(argv[0]); Cleanup(cl, 0); } /* Should we use persistent cache? */ if (cache) { HTCacheInit(cache_root, 20); /* Should we start by flushing? */ if (flush) HTCache_flushAll(); } /* ** Check whether we should do some kind of cache validation on ** the load */ if (cl->flags & CL_VALIDATE) HTRequest_setReloadMode(cl->request, HT_CACHE_VALIDATE); else if (cl->flags & CL_END_VALIDATE) HTRequest_setReloadMode(cl->request, HT_CACHE_END_VALIDATE); else if (cl->flags & CL_CACHE_FLUSH) HTRequest_setReloadMode(cl->request, HT_CACHE_FLUSH); /* Add progress notification */ if (cl->flags & CL_QUIET) HTAlert_deleteOpcode(HT_A_PROGRESS); /* Output file specified? */ if (cl->outputfile) { if ((cl->output = fopen(cl->outputfile, "wb")) == NULL) { if (SHOW_MSG) HTPrint("Can't open `%s'\\n",cl->outputfile); cl->output = OUTPUT; } } /* ** Set up the output. Even though we don't use this explicit, it is ** required in order to show the stream stack that we know that we are ** getting raw data output on the output stream of the request object. */ HTRequest_setOutputStream(cl->request, HTFWriter_new(cl->request, cl->output, YES)); /* Setting event timeout */ HTHost_setEventTimeout(cl->timer); /* ** Make sure that the first request is flushed immediately and not ** buffered in the output buffer */ HTRequest_setFlush(cl->request, YES); /* Log file specifed? */ if (cl->logfile) { cl->log = HTLog_open(cl->logfile, YES, YES); if (cl->log) HTNet_addAfter(HTLogFilter, NULL, cl->log, HT_ALL, HT_FILTER_LATE); } /* Just convert formats */ if (cl->flags & CL_FILTER) { #ifdef STDIN_FILENO HTRequest_setAnchor(cl->request, (HTAnchor *) cl->anchor); HTRequest_setPreemptive(cl->request, YES); HTLoadSocket(STDIN_FILENO, cl->request); #endif Cleanup(cl, 0); } /* Content Length Counter */ if (cl->flags & CL_COUNT) { HTRequest_setOutputStream(cl->request, HTContentCounter(HTBlackHole(), cl->request, 0x2000)); } /* Rule file specified? */ if (cl->rules) { char * rules = HTParse(cl->rules, cl->cwd, PARSE_ALL); if (!HTLoadRulesAutomatically(rules)) if (SHOW_MSG) HTPrint("Can't access rules\n"); HT_FREE(rules); } /* Add our own filter to update the history list */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Start the request */ switch (method) { case METHOD_GET: if (formdata) status = HTGetFormAnchor(formfields, (HTAnchor *) cl->anchor, cl->request); else if (keywords) status = HTSearchAnchor(keywords, (HTAnchor *) cl->anchor, cl->request); else status = HTLoadAnchor((HTAnchor *) cl->anchor, cl->request); break; case METHOD_HEAD: if (formdata) { HTRequest_setMethod(cl->request, METHOD_HEAD); status = HTGetFormAnchor(formfields, (HTAnchor *) cl->anchor, cl->request); } else if (keywords) { HTRequest_setMethod(cl->request, METHOD_HEAD); status = HTSearchAnchor(keywords, (HTAnchor *) cl->anchor, cl->request); } else status = HTHeadAnchor((HTAnchor *) cl->anchor, cl->request); break; case METHOD_DELETE: status = HTDeleteAnchor((HTAnchor *) cl->anchor, cl->request); break; case METHOD_POST: if (formdata) { HTParentAnchor * posted = NULL; #if 1 posted = HTPostFormAnchor(formfields, (HTAnchor *) cl->anchor, cl->request); status = posted ? YES : NO; #else /* If we want output to a chunk instead */ post_result = HTPostFormAnchorToChunk(formfields, (HTAnchor *) cl->anchor, cl->request); status = post_result ? YES : NO; #endif } else { if (SHOW_MSG) HTPrint("Nothing to post to this address\n"); status = NO; } break; case METHOD_PUT: status = HTPutDocumentAnchor(cl->anchor, (HTAnchor *) cl->dest, cl->request); break; case METHOD_OPTIONS: status = HTOptionsAnchor((HTAnchor *) cl->anchor, cl->request); break; case METHOD_TRACE: status = HTTraceAnchor((HTAnchor *) cl->anchor, cl->request); break; default: if (SHOW_MSG) HTPrint("Don't know this method\n"); break; } if (keywords) HTChunk_delete(keywords); if (formfields) HTAssocList_delete(formfields); if (status != YES) { if (SHOW_MSG) HTPrint("Sorry, can't access resource\n"); Cleanup(cl, -1); } /* Go into the event loop... */ HTEventList_loop(cl->request); /* Only gets here if event loop fails */ Cleanup(cl, 0); return 0; } libwww/ComLine/src/HTLine.html0100644000076400001440000000207606301652552015710 0ustar danielusers W3C Command Line Tool

W3C Command Line Tool

/*
**	(c) COPYRIGHT MIT 1995.
**	Please first read the full copyright statement in the file COPYRIGH.
*/
The W3C Command Line Tool is a "proof of concept" application that is using the W3C Sample Code Library. It can be used to perform all kind of Web operations from the command line. It can issue HTTP, FTP, Gopher, local Files, and News request and it can handle PUT, POST, HEAD, GET and a set of other methods depending on the protocol used.

The module is implemented by HTLine.c, and it is a part of the W3C Command Line Tool.

#ifndef HTLINE_H
#define HTLINE_H

Handling of output

#define STDOUT stdout
#define OUTPUT stdout
#endif /* HTLINE_H */
End of HTLine Declaration libwww/ComLine/src/Makefile.am0100644000076400001440000000547407142510565015741 0ustar danielusers## Process this file with Automake to create Makefile.in. bin_PROGRAMS = w3c w3c_LDADD = \ $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la \ -lm @LIBWWWXML@ @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ SUBDIRS = windows INCLUDES = \ -I$(srcdir)/../../Library/src \ -I$(top_srcdir)/modules/expat/xmlparse # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif w3c_SOURCES = \ HTLine.c BUILT_SOURCES = \ HTLine.h DOCS := $(wildcard *.html) EXTRA_DIST = \ $(DOCS) \ $(BUILT_SOURCES) inc: $(BUILT_SOURCES) @echo Generated built sources PURIFY_CACHE = @PURIFY_CACHE@ purify: $(w3c_OBJECTS) $(w3c_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(w3c_OBJECTS) \ -lm \ ../../Library/src/.libs/libwwwinit.a \ ../../Library/src/.libs/libwwwapp.a \ ../../Library/src/.libs/libwwwxml.a \ ../../Library/src/.libs/libwwwhtml.a \ ../../Library/src/.libs/libwwwtelnet.a \ ../../Library/src/.libs/libwwwnews.a \ ../../Library/src/.libs/libwwwhttp.a \ ../../Library/src/.libs/libwwwmime.a \ ../../Library/src/.libs/libwwwgopher.a \ ../../Library/src/.libs/libwwwftp.a \ ../../Library/src/.libs/libwwwdir.a \ ../../Library/src/.libs/libwwwcache.a \ ../../Library/src/.libs/libwwwstream.a \ ../../Library/src/.libs/libwwwfile.a \ ../../Library/src/.libs/libwwwmux.a \ ../../Library/src/.libs/libwwwtrans.a \ ../../Library/src/.libs/libwwwcore.a \ ../../Library/src/.libs/libwwwutils.a \ ../../Library/src/.libs/libwwwzip.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) libwww/ComLine/src/Makefile0100644000076400001440000004161707405520576015351 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ bin_PROGRAMS = w3c w3c_LDADD = $(top_builddir)/Library/src/libwwwinit.la $(top_builddir)/Library/src/libwwwapp.la $(top_builddir)/Library/src/libwwwhtml.la $(top_builddir)/Library/src/libwwwtelnet.la $(top_builddir)/Library/src/libwwwnews.la $(top_builddir)/Library/src/libwwwhttp.la $(top_builddir)/Library/src/libwwwmime.la $(top_builddir)/Library/src/libwwwgopher.la $(top_builddir)/Library/src/libwwwftp.la $(top_builddir)/Library/src/libwwwfile.la $(top_builddir)/Library/src/libwwwdir.la $(top_builddir)/Library/src/libwwwcache.la $(top_builddir)/Library/src/libwwwstream.la $(top_builddir)/Library/src/libwwwmux.la $(top_builddir)/Library/src/libwwwtrans.la $(top_builddir)/Library/src/libwwwcore.la $(top_builddir)/Library/src/libwwwutils.la -lm ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la ${top_builddir}/modules/md5/libmd5.la SUBDIRS = windows INCLUDES = -I$(srcdir)/../../Library/src -I$(top_srcdir)/modules/expat/xmlparse # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html w3c_SOURCES = HTLine.c BUILT_SOURCES = HTLine.h DOCS := $(wildcard *.html) EXTRA_DIST = $(DOCS) $(BUILT_SOURCES) PURIFY_CACHE = /tmp/purify.cache mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = bin_PROGRAMS = w3c$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../.. CPPFLAGS = LDFLAGS = LIBS = -ldl w3c_OBJECTS = HTLine.o w3c_DEPENDENCIES = $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la w3c_LDFLAGS = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/HTLine.P SOURCES = $(w3c_SOURCES) OBJECTS = $(w3c_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu ComLine/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: w3c$(EXEEXT): $(w3c_OBJECTS) $(w3c_DEPENDENCIES) @rm -f w3c$(EXEEXT) $(LINK) $(w3c_LDFLAGS) $(w3c_OBJECTS) $(w3c_LDADD) $(LIBS) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = ComLine/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ComLine/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-recursive all-am: Makefile $(PROGRAMS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ distclean-tags distclean-depend distclean-generic \ clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources purify: $(w3c_OBJECTS) $(w3c_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(w3c_OBJECTS) \ -lm \ ../../Library/src/.libs/libwwwinit.a \ ../../Library/src/.libs/libwwwapp.a \ ../../Library/src/.libs/libwwwxml.a \ ../../Library/src/.libs/libwwwhtml.a \ ../../Library/src/.libs/libwwwtelnet.a \ ../../Library/src/.libs/libwwwnews.a \ ../../Library/src/.libs/libwwwhttp.a \ ../../Library/src/.libs/libwwwmime.a \ ../../Library/src/.libs/libwwwgopher.a \ ../../Library/src/.libs/libwwwftp.a \ ../../Library/src/.libs/libwwwdir.a \ ../../Library/src/.libs/libwwwcache.a \ ../../Library/src/.libs/libwwwstream.a \ ../../Library/src/.libs/libwwwfile.a \ ../../Library/src/.libs/libwwwmux.a \ ../../Library/src/.libs/libwwwtrans.a \ ../../Library/src/.libs/libwwwcore.a \ ../../Library/src/.libs/libwwwutils.a \ ../../Library/src/.libs/libwwwzip.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/ComLine/src/HTLine.h0100644000076400001440000000142107405520457015170 0ustar danielusers/* W3C Command Line Tool !W3C Command Line Tool! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The W3C Command Line Tool is a "proof of concept" application that is using the W3C Sample Code Library. It can be used to perform all kind of Web operations from the command line. It can issue HTTP, FTP, Gopher, local Files, and News request and it can handle PUT, POST, HEAD, GET and a set of other methods depending on the protocol used. The module is implemented by HTLine.c, and it is a part of the W3C Command Line Tool. */ #ifndef HTLINE_H #define HTLINE_H /* .Handling of output. */ #define STDOUT stdout #define OUTPUT stdout /* */ #endif /* HTLINE_H */ /* End of HTLine Declaration */ libwww/ComLine/src/Makefile.in0100644000076400001440000004105407405520526015744 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ bin_PROGRAMS = w3c w3c_LDADD = $(top_builddir)/Library/src/libwwwinit.la $(top_builddir)/Library/src/libwwwapp.la $(top_builddir)/Library/src/libwwwhtml.la $(top_builddir)/Library/src/libwwwtelnet.la $(top_builddir)/Library/src/libwwwnews.la $(top_builddir)/Library/src/libwwwhttp.la $(top_builddir)/Library/src/libwwwmime.la $(top_builddir)/Library/src/libwwwgopher.la $(top_builddir)/Library/src/libwwwftp.la $(top_builddir)/Library/src/libwwwfile.la $(top_builddir)/Library/src/libwwwdir.la $(top_builddir)/Library/src/libwwwcache.la $(top_builddir)/Library/src/libwwwstream.la $(top_builddir)/Library/src/libwwwmux.la $(top_builddir)/Library/src/libwwwtrans.la $(top_builddir)/Library/src/libwwwcore.la $(top_builddir)/Library/src/libwwwutils.la -lm @LIBWWWXML@ @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ SUBDIRS = windows INCLUDES = -I$(srcdir)/../../Library/src -I$(top_srcdir)/modules/expat/xmlparse # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html w3c_SOURCES = HTLine.c BUILT_SOURCES = HTLine.h DOCS := $(wildcard *.html) EXTRA_DIST = $(DOCS) $(BUILT_SOURCES) PURIFY_CACHE = @PURIFY_CACHE@ mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = bin_PROGRAMS = w3c$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ w3c_OBJECTS = HTLine.o w3c_DEPENDENCIES = $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la w3c_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/HTLine.P SOURCES = $(w3c_SOURCES) OBJECTS = $(w3c_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu ComLine/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: w3c$(EXEEXT): $(w3c_OBJECTS) $(w3c_DEPENDENCIES) @rm -f w3c$(EXEEXT) $(LINK) $(w3c_LDFLAGS) $(w3c_OBJECTS) $(w3c_LDADD) $(LIBS) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = ComLine/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ComLine/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-recursive all-am: Makefile $(PROGRAMS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ distclean-tags distclean-depend distclean-generic \ clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources purify: $(w3c_OBJECTS) $(w3c_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(w3c_OBJECTS) \ -lm \ ../../Library/src/.libs/libwwwinit.a \ ../../Library/src/.libs/libwwwapp.a \ ../../Library/src/.libs/libwwwxml.a \ ../../Library/src/.libs/libwwwhtml.a \ ../../Library/src/.libs/libwwwtelnet.a \ ../../Library/src/.libs/libwwwnews.a \ ../../Library/src/.libs/libwwwhttp.a \ ../../Library/src/.libs/libwwwmime.a \ ../../Library/src/.libs/libwwwgopher.a \ ../../Library/src/.libs/libwwwftp.a \ ../../Library/src/.libs/libwwwdir.a \ ../../Library/src/.libs/libwwwcache.a \ ../../Library/src/.libs/libwwwstream.a \ ../../Library/src/.libs/libwwwfile.a \ ../../Library/src/.libs/libwwwmux.a \ ../../Library/src/.libs/libwwwtrans.a \ ../../Library/src/.libs/libwwwcore.a \ ../../Library/src/.libs/libwwwutils.a \ ../../Library/src/.libs/libwwwzip.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/ComLine/src/.deps/0040755000076400001440000000000007405521245014706 5ustar danieluserslibwww/ComLine/src/.deps/HTLine.P0100644000076400001440000003301607405521245016152 0ustar danielusersHTLine.o: HTLine.c ../../Library/src/WWWLib.h ../../Library/src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h \ ../../Library/src/WWWApp.h ../../Library/src/HTEvtLst.h \ ../../Library/src/HTHome.h ../../Library/src/HTDialog.h \ ../../Library/src/HTAccess.h ../../Library/src/HTRules.h \ ../../Library/src/HTProxy.h ../../Library/src/HTFilter.h \ ../../Library/src/HTLog.h ../../Library/src/HTHist.h \ ../../Library/src/WWWMIME.h ../../Library/src/HTMIME.h \ ../../Library/src/HTHeader.h ../../Library/src/HTMIMERq.h \ ../../Library/src/HTMIMImp.h ../../Library/src/HTBound.h \ ../../Library/src/HTMulpar.h ../../Library/src/WWWHTML.h \ ../../Library/src/HTMLPDTD.h ../../Library/src/SGML.h \ ../../Library/src/HTMLGen.h ../../Library/src/HTTeXGen.h \ ../../Library/src/HTPlain.h ../../Library/src/HTML.h \ ../../Library/src/HText.h ../../Library/src/HTHInit.h \ ../../Library/src/HTStyle.h ../../Library/src/WWWNews.h \ ../../Library/src/HTNews.h ../../Library/src/HTNewsRq.h \ ../../Library/src/HTNewsLs.h ../../Library/src/HTNDir.h \ ../../Library/src/WWWHTTP.h ../../Library/src/HTTPUtil.h \ ../../Library/src/HTTP.h ../../Library/src/HTTPServ.h \ ../../Library/src/HTTPGen.h ../../Library/src/HTTPReq.h \ ../../Library/src/HTTPRes.h ../../Library/src/HTTChunk.h \ ../../Library/src/HTPEP.h ../../Library/src/HTAAUtil.h \ ../../Library/src/HTAABrow.h ../../Library/src/HTCookie.h \ ../../Library/src/WWWFTP.h ../../Library/src/HTFTP.h \ ../../Library/src/HTFTPDir.h ../../Library/src/WWWFile.h \ ../../Library/src/HTFile.h ../../Library/src/HTMulti.h \ ../../Library/src/HTBind.h ../../Library/src/HTBInit.h \ ../../Library/src/WWWGophe.h ../../Library/src/HTGopher.h \ ../../Library/src/WWWStream.h ../../Library/src/HTConLen.h \ ../../Library/src/HTFWrite.h ../../Library/src/HTFSave.h \ ../../Library/src/HTGuess.h ../../Library/src/HTTee.h \ ../../Library/src/HTMerge.h ../../Library/src/HTSChunk.h \ ../../Library/src/HTXParse.h ../../Library/src/HTReader.h \ ../../Library/src/HTEPtoCl.h ../../Library/src/HTNetTxt.h \ ../../Library/src/WWWTrans.h ../../Library/src/HTANSI.h \ ../../Library/src/HTLocal.h ../../Library/src/HTTCP.h \ ../../Library/src/HTSocket.h ../../Library/src/HTWriter.h \ ../../Library/src/HTBufWrt.h ../../Library/src/WWWInit.h \ ../../Library/src/HTInit.h ../../Library/src/WWWTelnt.h \ ../../Library/src/HTTelnet.h ../../Library/src/WWWDir.h \ ../../Library/src/HTDir.h ../../Library/src/HTIcons.h \ ../../Library/src/HTDescpt.h ../../Library/src/WWWCache.h \ ../../Library/src/HTCache.h ../../Library/src/WWWXML.h \ ../../Library/src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h \ ../../Library/src/HTRDF.h ../../Library/src/HTHash.h \ ../../Library/src/WWWZip.h ../../Library/src/HTZip.h \ ../../Library/src/HTProfil.h HTLine.h HTLine.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ../../Library/src/WWWApp.h : ../../Library/src/HTEvtLst.h : ../../Library/src/HTHome.h : ../../Library/src/HTDialog.h : ../../Library/src/HTAccess.h : ../../Library/src/HTRules.h : ../../Library/src/HTProxy.h : ../../Library/src/HTFilter.h : ../../Library/src/HTLog.h : ../../Library/src/HTHist.h : ../../Library/src/WWWMIME.h : ../../Library/src/HTMIME.h : ../../Library/src/HTHeader.h : ../../Library/src/HTMIMERq.h : ../../Library/src/HTMIMImp.h : ../../Library/src/HTBound.h : ../../Library/src/HTMulpar.h : ../../Library/src/WWWHTML.h : ../../Library/src/HTMLPDTD.h : ../../Library/src/SGML.h : ../../Library/src/HTMLGen.h : ../../Library/src/HTTeXGen.h : ../../Library/src/HTPlain.h : ../../Library/src/HTML.h : ../../Library/src/HText.h : ../../Library/src/HTHInit.h : ../../Library/src/HTStyle.h : ../../Library/src/WWWNews.h : ../../Library/src/HTNews.h : ../../Library/src/HTNewsRq.h : ../../Library/src/HTNewsLs.h : ../../Library/src/HTNDir.h : ../../Library/src/WWWHTTP.h : ../../Library/src/HTTPUtil.h : ../../Library/src/HTTP.h : ../../Library/src/HTTPServ.h : ../../Library/src/HTTPGen.h : ../../Library/src/HTTPReq.h : ../../Library/src/HTTPRes.h : ../../Library/src/HTTChunk.h : ../../Library/src/HTPEP.h : ../../Library/src/HTAAUtil.h : ../../Library/src/HTAABrow.h : ../../Library/src/HTCookie.h : ../../Library/src/WWWFTP.h : ../../Library/src/HTFTP.h : ../../Library/src/HTFTPDir.h : ../../Library/src/WWWFile.h : ../../Library/src/HTFile.h : ../../Library/src/HTMulti.h : ../../Library/src/HTBind.h : ../../Library/src/HTBInit.h : ../../Library/src/WWWGophe.h : ../../Library/src/HTGopher.h : ../../Library/src/WWWStream.h : ../../Library/src/HTConLen.h : ../../Library/src/HTFWrite.h : ../../Library/src/HTFSave.h : ../../Library/src/HTGuess.h : ../../Library/src/HTTee.h : ../../Library/src/HTMerge.h : ../../Library/src/HTSChunk.h : ../../Library/src/HTXParse.h : ../../Library/src/HTReader.h : ../../Library/src/HTEPtoCl.h : ../../Library/src/HTNetTxt.h : ../../Library/src/WWWTrans.h : ../../Library/src/HTANSI.h : ../../Library/src/HTLocal.h : ../../Library/src/HTTCP.h : ../../Library/src/HTSocket.h : ../../Library/src/HTWriter.h : ../../Library/src/HTBufWrt.h : ../../Library/src/WWWInit.h : ../../Library/src/HTInit.h : ../../Library/src/WWWTelnt.h : ../../Library/src/HTTelnet.h : ../../Library/src/WWWDir.h : ../../Library/src/HTDir.h : ../../Library/src/HTIcons.h : ../../Library/src/HTDescpt.h : ../../Library/src/WWWCache.h : ../../Library/src/HTCache.h : ../../Library/src/WWWXML.h : ../../Library/src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../../Library/src/HTRDF.h : ../../Library/src/HTHash.h : ../../Library/src/WWWZip.h : ../../Library/src/HTZip.h : ../../Library/src/HTProfil.h : HTLine.h : libwww/ComLine/Makefile0100644000076400001440000002407407405520576014560 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ SUBDIRS = src User mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu ComLine/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = ComLine distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ComLine/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean #BUILT_SOURCES = \ # README #EXTRA_DIST = \ # $(BUILT_SOURCES) #$(srcdir)/README : $(srcdir)/User/CommandLine.html # ifdef WWW # -$(CP) $(srcdir)/User/CommandLine.html $(srcdir)/README.html # -$(WWW) -p -na $(srcdir)/README.html \ # -o $(srcdir)/README # endif # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/ComLine/Makefile.in0100644000076400001440000002351407405520526015156 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ SUBDIRS = src User mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu ComLine/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = ComLine distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ComLine/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean #BUILT_SOURCES = \ # README #EXTRA_DIST = \ # $(BUILT_SOURCES) #$(srcdir)/README : $(srcdir)/User/CommandLine.html # ifdef WWW # -$(CP) $(srcdir)/User/CommandLine.html $(srcdir)/README.html # -$(WWW) -p -na $(srcdir)/README.html \ # -o $(srcdir)/README # endif # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Icons/0040755000076400001440000000000007405520577012642 5ustar danieluserslibwww/Icons/CVS/0040755000076400001440000000000007405517322013267 5ustar danieluserslibwww/Icons/CVS/Root0100644000076400001440000000005607405517322014133 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Icons/CVS/Repository0100644000076400001440000000001507405517322015362 0ustar danieluserslibwww/Icons libwww/Icons/CVS/Entries0100644000076400001440000000013107405517322014613 0ustar danielusers/.cvsignore/1.1/Sat Dec 5 05:03:51 1998// /Makefile.am/1.1/Sun Oct 6 19:58:23 1996// D libwww/Icons/CVS/Entries.Log0100644000076400001440000000005307405517323015337 0ustar danielusersA D/32x32//// A D/WWW//// A D/internal//// libwww/Icons/32x32/0040755000076400001440000000000007405520577013423 5ustar danieluserslibwww/Icons/32x32/CVS/0040755000076400001440000000000007405517322014050 5ustar danieluserslibwww/Icons/32x32/CVS/Root0100644000076400001440000000005607405517322014714 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Icons/32x32/CVS/Repository0100644000076400001440000000002307405517322016142 0ustar danieluserslibwww/Icons/32x32 libwww/Icons/32x32/CVS/Entries0100644000076400001440000000034507405517322015403 0ustar danielusers/.cvsignore/1.1/Sat Dec 5 05:03:51 1998// /Makefile.am/1.1/Sun Oct 6 19:58:25 1996// /caution.gif/1.1/Wed Oct 23 18:34:19 1996/-kb/ /smiley.gif/1.1/Wed Oct 23 18:36:03 1996/-kb/ /warning.gif/1.1/Wed Oct 23 18:36:16 1996/-kb/ D libwww/Icons/32x32/Makefile0100644000076400001440000001404307405520577015062 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign ICONS = smiley.gif warning.gif caution.gif EXTRA_DIST = $(ICONS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Icons/32x32/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Icons/32x32 distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Icons/32x32/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Icons/32x32/.cvsignore0100644000076400001440000000002506632137267015416 0ustar danielusersMakefile.in Makefile libwww/Icons/32x32/Makefile.am0100644000076400001440000000023706226007541015445 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign ICONS = smiley.gif \ warning.gif \ caution.gif EXTRA_DIST = $(ICONS) libwww/Icons/32x32/caution.gif0100644000076400001440000000026306233462453015546 0ustar danielusersGIF89a ñÿÿÿüü!ù, „„©Ë ¡›&ÚKÕ ¢wœ=‘G’Q6–ªw6i ­B«Åª%K5·âyP“Í^7]ÅÖ#Èdsyx”P‘p(¯XžP—5QµÖ«ï ,£Ã¬4û3G½NzrÎÍÃñf{uûófX‡¶v6•”èòV´È¸B)6H±±)2·éJQ;libwww/Icons/32x32/smiley.gif0100644000076400001440000000025006233462623015401 0ustar danielusersGIF89a ¡ÿÿÿÿÿ!ù, y„©Ë_›Š‹/¤*äÿ\å¦&NåÉ é²¶ì›Ä²Iö×øŽêé@¢%„ØCÇÌ è‚>N)(Oh½"Y-¦ê½Ã­1™:t^m4v7º­ËJS9'‘¼~¦Ñð†¦Bø•3¸6’äwÇÓ'IYiÙP;libwww/Icons/32x32/warning.gif0100644000076400001440000000026306233462640015547 0ustar danielusersGIF89a ¡ÿÿÿü¾¾¾!ù, „„©ËíMˆô„[ã8» „“ÇlâH&`(¦ê:œ®v;›vÌ¡ä*ر|Sð&û±Ž<\È\v*Шô¹´‰Ÿ¬vH1²„Ùi×K.CÄcd™«òŽåΛî5ÇñM9p×Ö÷fÇ·3xõ‚÷•GT%‡˜‡¸H7u™©¹ÉiÖù :Q;libwww/Icons/32x32/Makefile.in0100644000076400001440000001344607405520527015470 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign ICONS = smiley.gif warning.gif caution.gif EXTRA_DIST = $(ICONS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Icons/32x32/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Icons/32x32 distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Icons/32x32/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Icons/.cvsignore0100644000076400001440000000002506632137267014635 0ustar danielusersMakefile.in Makefile libwww/Icons/Makefile.am0100644000076400001440000000021006226007537014660 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign SUBDIRS = WWW 32x32 internal inc : @echo icons libwww/Icons/WWW/0040755000076400001440000000000007405520577013326 5ustar danieluserslibwww/Icons/WWW/CVS/0040755000076400001440000000000007405517323013754 5ustar danieluserslibwww/Icons/WWW/CVS/Root0100644000076400001440000000005607405517322014617 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Icons/WWW/CVS/Repository0100644000076400001440000000002107405517322016043 0ustar danieluserslibwww/Icons/WWW libwww/Icons/WWW/CVS/Entries0100644000076400001440000000204107405517323015302 0ustar danielusers/.cvsignore/1.1/Sat Dec 5 05:03:51 1998// /Bug48x.gif/1.1/Mon Feb 10 18:46:52 1997/-kb/ /LMB48x.gif/1.1/Mon Feb 10 18:48:41 1997/-kb/ /Lib48x.gif/1.1/Mon Feb 10 18:48:48 1997/-kb/ /Makefile.am/1.2/Mon Dec 23 20:54:18 1996// /Platform48x.gif/1.1/Mon Feb 10 18:50:12 1997/-kb/ /blank48x.gif/1.1/Thu Sep 17 21:08:43 1998/-kb/ /bullet.gif/1.1/Mon Feb 10 18:54:10 1997/-kb/ /design48x.gif/1.1/Mon Feb 10 18:55:24 1997/-kb/ /doc48x.gif/1.1/Mon Feb 10 18:55:46 1997/-kb/ /guide48x.gif/1.1/Mon Feb 10 18:56:49 1997/-kb/ /install48x.gif/1.1/Mon Feb 10 18:57:56 1997/-kb/ /internals48x.gif/1.1/Mon Feb 10 18:58:03 1997/-kb/ /lines48x.gif/1.1/Mon Feb 10 18:59:14 1997/-kb/ /listen48x.gif/1.1/Mon Feb 10 18:59:21 1997/-kb/ /new_red.gif/1.1/Mon Feb 10 19:00:51 1997/-kb/ /progstyle48x.gif/1.1/Mon Feb 10 19:03:03 1997/-kb/ /relnotes48x.gif/1.1/Mon Feb 10 19:03:37 1997/-kb/ /robot48x.gif/1.1/Mon Feb 10 19:03:53 1997/-kb/ /serv48x.gif/1.1/Mon Feb 10 19:04:03 1997/-kb/ /startup48x.gif/1.1/Mon Feb 10 19:05:19 1997/-kb/ /w3c_home.gif/1.2/Mon Dec 9 14:38:26 1996/-kb/ D libwww/Icons/WWW/Makefile0100644000076400001440000001441107405520577014764 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign ICONS = w3c_home.gif Lib48x.gif LMB48x.gif listen48x.gif robot48x.gif lines48x.gif serv48x.gif startup48x.gif Bug48x.gif Platform48x.gif design48x.gif doc48x.gif guide48x.gif internals48x.gif install48x.gif progstyle48x.gif relnotes48x.gif new_red.gif bullet.gif EXTRA_DIST = $(ICONS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Icons/WWW/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Icons/WWW distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Icons/WWW/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Icons/WWW/.cvsignore0100644000076400001440000000002506632137267015321 0ustar danielusersMakefile.in Makefile libwww/Icons/WWW/Bug48x.gif0100644000076400001440000000053206277666434015104 0ustar danielusersGIF89a00¡ª»ÿÿÿ!ù,00þœ©Ëí£œ´:€3¶Üì>†ci2ä´î€«B Bpçø~Ïé€ a‚ŘÐ)y¼"Rò¸l6FèŒBJªM£ÄP9ŸáKó*¾¾ƒ˜™«®· š»4„oì÷N„àÓf°g…Çã6ÈPg•ñØB4$àFӆ褘C·‰I£`FªV*а¹Y¤øö§åQvV9tE{‹õ:‰–±H S{\{YÜù¹ÔeAz6ȼڃ Ç!™l–»f½ ‡—¹õMŠ6•@˜é\>ÎÃ/èkå=­ûîм^¼”tx™a–È ¼³¤«ƒÁU+Qñ6,6D1 c$/—ðYY+HYO¬ ùpËK–ÿΤhò戚:{úü¹²;libwww/Icons/WWW/LMB48x.gif0100644000076400001440000000050306277666611014774 0ustar danielusersGIF89a00òÿÿÿÿïÿ!ù,00þºÜþ0ʃµ4k…yÝ&2¡~Á¨¦‹é²ªï)ÄÛŒ¦.žé' è›Ì‚)bQ¢C MK#ÉÖ+®Õi½bÀWwáu4wËA£ÜÏb_rœt YÛ„ ]%Ó yu|}j4uzƒoc‡‰0,Œi‹7}r-–ƒB“i†-O ¡Ž¤‡™š W£%4 ®`¢¦µf·°¬ºm‰ < †¿‡Â«'^s}‘¾ÃÎKÐ¥\›šÖËvÓÏÐ’ÒkÇ8ˆžÅ Ô"±ç¹ê9à<äºè“ðQ'„Þµ.I⳯Ü%Gu Æ8Å韶uð1¤ƒ¬›-d•è}rˆ qž"Œ CnH;libwww/Icons/WWW/Lib48x.gif0100644000076400001440000000127506277666620015077 0ustar danielusersGIF89a00ôÿÿÿ§}*)”¿’}§§*½ªõ³¡ûÅ¡û»™ÿ»ªÿªªÿ¤¤ây)»»ÿ ¾ÓhÑQ½¾!ù,00þ Ždižhª¦A¬p,¾¤àÖ‚¬ÏC>¶ `îT`kT¤ÐaZˆ[¶¦ø„ˆDâ{€{®Ö¶ë‹ÉŠUÒ5¨Óí0b¿Xì %$WK„uJ8%z {?†t†‚v†PFŒŽ’LsDk'.§Y\>"_ S}q”-JOœEuXD& }Ç&Ix»%½"ÀX'ÄÆÇ ÉÊš›BAu?u®%É Ø„I8PYY˜ƒÓó%78­6&ˆ(ê$ý"ELÏ#¨W~¢Í·pö‘<`yI` qø!˜à £É‡_rÕMX€‡UFÝU6ØÚe‚â…0(B~&ž˜â†„(ãŒ4Öh#!;libwww/Icons/WWW/Makefile.am0100644000076400001440000000065306257570572015367 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign ICONS = w3c_home.gif \ Lib48x.gif \ LMB48x.gif \ listen48x.gif \ robot48x.gif \ lines48x.gif \ serv48x.gif \ startup48x.gif \ Bug48x.gif \ Platform48x.gif \ design48x.gif \ doc48x.gif \ guide48x.gif \ internals48x.gif \ install48x.gif \ progstyle48x.gif \ relnotes48x.gif \ new_red.gif \ bullet.gif EXTRA_DIST = $(ICONS) libwww/Icons/WWW/Platform48x.gif0100644000076400001440000000201206277666744016152 0ustar danielusersGIF89a00ÆÿÿÿUf»=£·R··bÃÃuÇ"»w;Æ;Ã_=·Q(·N;Ã;b±Ã=·z(·Š=·Ž=··˜¬;ÃM·v(¦·@¬@@¬¬bÃb+¬¬--¬e·ŽGŽ0,R·¡|bÃt;±Ã´Ã0Ž0+…¬Ûm$+'œÃŽÿ™Ã°'±ÃNï|xŽr'ÃLЦN±Ã(··-‡ŽtŽv+l¬··pŽ\p¬ÿˆ»ŽŽ‰„¬V¬bœÃ||‡…@˜¬Cˆ;ŸÃŽ-R£·+¬V-}Øè;ÃqW¬_®ÐNÃÃ=’·wÝÿkÙè¬zåóNÈbÇe·eR·ˆÝÿqЪuð„нqнNÚR·Ž(·aîîÿ’ÛÇ€ÛÉnÛ¶qÐÐèÃnËÛ[ÊÛ—ÐÐzÑó!ù,00þ€‚ƒ„…†‡ˆ‰Š‹ŽŒ““–Ž™”„™ ¡ ’ž“¢§ ¥‹–°   «¬‡ ±  ¡½…˜±Â° À™ÌÍ‚Ž ÑÀŽÀ ÜŽà°°ŽÀ™Û½ðÀý8ú D¬tÍ@…KD€HÄ*qÐ/V¢b8 E€P¡ÌQ>O™à¡0°q -Z8r Ä‹X0Ä8ÙÉ‘ ðXÎ`ÁÑG52Ø€u#FŒ8rôrä܉¡'dfªQ#€Ž°xôÈà†TŒÜðá#k€þ?d¨pé, AL2dª¹X(6ð ‚ ŽˆÐ3P¤G"0Ζ²´ã‰•(?2r¤gAò"I’0dÐwïDìØ¡D@%^óDˆ næÜSÁÄn'8„ [b©©O~V\¹XP>!p3Š ŽO•!ã³´ïdH90E L$\ ¢U•V¸“&l‚8S®\aÀ@€€ íõ‚EYx¦E[`ðÓO™†2\ÀE€ÍtáÅ`„!Æc 0S¶ÂeSLÁ…½”aÆh¤‘† &NAÃ\qÙ& `…:‡<¡†k¤Ám0@ &âiçߎ<òÃO¬áÆ”TR‰ß?4éäOVéå”Xr©å \–Éå—n˜Yæ˜j¶é¦šM¾)ç›êÌig›ÍÜ©§™¬ì駘ü)(%‚:I¡ƒЍžž,jgŸŽº9椔Vj饘fª)¥;libwww/Icons/WWW/blank48x.gif0100644000076400001440000000156206600275133015440 0ustar danielusersGIF89a00÷3f™Ìÿ333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌÿ3ÿfÿ™ÿÌÿÿÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌffÿff™f3™ff™f™™fÌ™fÿ™fÌf3ÌffÌf™ÌfÌÌfÿÌfÿf3ÿffÿf™ÿfÌÿfÿÿf™3™f™™™Ì™ÿ™3™33™f3™™3™Ì3™ÿ3™f™3f™ff™™f™Ìf™ÿf™™™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌ™™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿ™Ì3ÌfÌ™ÌÌÌÿÌ3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌffÌ™fÌÌfÌÿfÌ™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÌÿ3ÿfÿ™ÿÌÿÿÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÿ™fÿÌfÿÿfÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿÿÿ!ù×,00O¯ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ ª1 ;libwww/Icons/WWW/bullet.gif0100644000076400001440000000011006277667322015277 0ustar danielusersGIF89aðÿÿÿ»!ù,„©Ëí£œ´Ú ƒwïêyrŽè§,øbO;libwww/Icons/WWW/design48x.gif0100644000076400001440000000074606277667434015650 0ustar danielusersGIF89a00òªªÌª»ÌªªÝ™»Ì"»wÿÿÿ!ù,00@þ H° Áƒ °¡@ @‘bAŠ&2tXP€F… VÜÈ‘`“O9r Æ‘-+Ti%Ƀ+kžœ8ÐbÉ…iÖ4˜ó$ÌŸH“Š$Qà€‘(M(@fBŠRŸ:ôèsêK˜-ÒD9°(Y‚ÙÀÜñng?Øýv¥L/¬|p±~½ùmR]×ýàMWU&à}.ýÇ—Oˆ!Hƒ:!…\j•TÝhÓExš„D­öœu‚ç!ˆ&ÉÆ‡=YU`\²a˜Òˆuá¦aŒ!X[y$1¢o³5d„(ªÖ\–ÑhÝq¶ÕœqPUÓy%1W”XÏE§”•35$•ÚÙeV–/JÇ%^erg%˜tô;libwww/Icons/WWW/doc48x.gif0100644000076400001440000000064706277667462015145 0ustar danielusersGIF89a00ó²<þþ!ºv ³ËºTeºT©í‡þ˜ÿÿÿÙNn˜!ù ,00þ0ÉI«½8ëÍ»ÿ`(Ždižhª®¬¼0¬Æï ø$ûŽ­æÊéz¾PXh†Æ/µ 8Ÿ‡ìá–«•°§5°%ÃŽš28ng_G]º$GÕ«Ù?í&yN/ig„/w"‚m…‡rVŠ$0lOte[}’j!yœde›tle ŸŠu\8~U¨ª–¢v®‘¦Bf© –—/¸p]±§_µLƒ¹v¥Ol¾´ÀL¢º°œÈ‹Ë’t°†ÐUÓßz½BäÜ¿1zåì½[Þ4ÕmX/špÚ¼CÝ.(“–lÇ‚(dCáŸÃ‡#ÒP@Š1^¬¸1#GU ?Š´h1À‚Š NH‰R%Ë•.c¶œ “cI‰8sþÃÁdz~(ƒ§ª¡Ei% ÔÂPPI1mjã(ÀsVSQõ´µ…ׯ`ÊK¶¬Ù³hMD;libwww/Icons/WWW/guide48x.gif0100644000076400001440000000065706277667561015476 0ustar danielusersGIF89a00Âÿÿÿ}Œž"»w»Uf»!ù,00þºÜþ0Ê„½Ø†ÉeÍ Ö̆٠l뾯ÊÁ4-O¬šßQ^Àïá6ZÁÁR\žOEséð9K ¥‘*Õ*RWi’{ôÀÕ19kFÕë±ò܃¯­t¦ŒÏ³{\}gP ZsqSL‡q]Iˆ†H[‚‡?’|˜8š'––žn&ž ?ž`¤¨ ¬(´µ¶··¯½¾¿ÀÀ¸ÃúÁÉÉ´*´ÆÈ*½Ìĸ³ϼÑÊÁÓ×àµ×Ù½Þè¾éÔâ îæèèP… ôÔ n³å»Îm Ï[;pᄌAˆ à1m úÙ¦!–…ÿ¤GupâAaÐ0œ7Pá=|Ú‹—qcI?¿„ f¤Chi. ¸ObÍ–æD†§EB)îÙÔ”#Ò•(e2‹ ï&Duò¹K¯*SœìÖieXœ³T_®rûõ‘„3¢BI|+K¬_€µkéVËŠWY£¿€N;libwww/Icons/WWW/install48x.gif0100644000076400001440000000075106277667664016046 0ustar danielusersGIF89a00ãÿÿÿ˜û˜ R-Í…?‡Îë/OOÿî‚î²""ÿ¥!ù,00þÈI«½8뽃÷\˜}Áô è'®R0¼d€Î)È’—û„GÿµÇS(l­ È jˆF#H·“5¯* 4*õ(}×0Òàš©†´Zþ )[s1F÷¤Ûc²½º2«V«7×@ú;‹êÑ|}cf_`kS ^wuVO‹uaLŒŠK…WHB–”€œ;ž˜šB‘“¢C¤Qr¨Sª«R²S²­`±³®[»¸N±·´°­¿FÁ³ÄÅÃü-ÁÍËÊÎ5ÆÊÙØÆÒÓá⺺âæÑÝÏàçéíçèÂÒë°ñÕ²ñòÝÖÐ۲Ͷq£—ËY´uÛ®$AdýzÛ°„d8B+ãš1Š\ŠŽ€ é¥ä§ëV.[`6hiR¡Ì17ý‰ñœ?9JàLh£¯Ìò¸tdϤüxJKJUA;libwww/Icons/WWW/lines48x.gif0100644000076400001440000000042306277670002015462 0ustar danielusersGIF89a00¡ÿÿÿ»Uf»"»w!ù,00ä„iÁê#bMÚëhÀœëJ_H&cÙ &…¦Âûg+ÁöMc÷ŽçìùÁâpñ)-ƒÈì *TÈ“åQ·k$ÛVW•’ nNXGè!½._6!¸ÌÛ¥×Åw¹Åß‘†—×"6%TB¥¡÷µTw¨Ððˆ¡¡æp‰”pfE16u ¸iãäÉ…©&Jbɇz7ôaª Âh »ËvÛº’‰ò„‹ô ¼ûÖÛ‡ö[kŒ [FÌLk'íÑœçg=‡mèÚÉ{ *îZþ}M ªî\9Úþ Ü&AŸ¯ÏÍÿ0à‘;libwww/Icons/WWW/listen48x.gif0100644000076400001440000000033206277670011015645 0ustar danielusersGIF89a00¡ÿÿÿ»!ù,00«„©Ëí£œ´Ú‹³Þ\…~] ¦#óî®HûÖ¨*Ó¶-®Áô:¿]¨6Ü_IjäâK)t™¤º¦DÐ+kx Un˜:_i˜oì9¨ß‹á<'ÃÌP¶û À'·(¶G(ˆØ•ÂBèãQæóU%„W•é#•‚y“j´˜ÁÉ“ÅÊdªT HjU8cTë„K¹åZ8¹, UT$3MlH@\*‚OZR)NXSWS"jf$ fŠ$Ž|eo¥©¬>,# \°J€¡¥TE%6eº¼#8·0Œ­Å%•L_)§-¹F ÑbÓd$¤-¦>©ÏÈ*´1\×Ô~„º-›·5?„JÍÅ@KãMøúÍ0¹4•X³íE¦lŸvHj!މeV417솷\4~•1$íFµ]>¢±Œ'`þt$4!ÏF§/ãÜ!®E ~W©ªðæX€XJù(Åb¨AÝ\|3è ™–þ"*5§lÐiÛ„ÀŠ «T\É&Ó•Øy`‰«"ˆƒž°2ðjvÐd릻¹gÊ7§ èÂ¥Ý!ÑÔ ¢iì¯)mf>t-Bܶ"±{£ž Ëð¬diв…b©úPUy†ÄÀ–gŽY4î-‰¹Ÿ“ BÂq¨Fa“«–‘ÔÛÉ¥&^ ˆXjŸ DP àBÉÁŠˆyIˆær9<Ë}¬á‡p…¥wŒ Âãñ60¤‹hŠ_~øôõçpr™P €† § xÆ ]U ";libwww/Icons/WWW/relnotes48x.gif0100644000076400001440000000075006277670411016212 0ustar danielusersGIF89a00ãÿÿÿÈßÚUf»"»w»}Œž¿¿¿!ù,00þÈI«½8ëÍ»ÿ@€$'Žej‰‚¨¾§ £/ÉÊ3]wwÞîž^ çj„C¢ÎH"[KcŒˆ›)™¡g šÌI·²X\eM‹0°`&[¡‚9ú²×î¤(.‡¢ëjmly'r|1'€2VcJ{'‡q=Š7Pxw~†’”P=™[¡]'’\W+Soe]Dª§NQ¬~­°¶¡!J­šÂ9¼eMg»T§\¾D’7NòÏj4ÓÔ¦Ú³·Ì®Y°Ú¶×Íeh'æg`,™±×è"æ"ñÝ¿•»þ-ÀܹýŠ…{0J?ƒüð‹õ­~ !ù,00þºÜþ0ʹ‚½êm…ÿ‚µPz"©VÁ‰fëŠÍiLÒ³­^ ¯8̬ 5¸ãަ¼1›DP¬ZeÖìÓ9èz¿à°F›Ï_2'p¶€ÝíåûÒ¦¿å]8zžÆƒ €b€fjHl^€vsƒw‡ŒTޒކ3_”™zy‹–Bž‰¡ˆ^˜šiR4Ÿ³°¨­¦µ]”¯¸·y9ºÀŠ«cª¶±,À^aÏa[ 8{Ö›FÔÍbÝ×Â%¾gÝßËâÜäå{¹á–`ëäíçáhòÞhœé×ú~] ð7@`.`D£R™0 &lèp™ˆ#Ž(&£Ä­yàŸ-(³EJyÅË"J^º›B3;libwww/Icons/WWW/serv48x.gif0100644000076400001440000000063306277670443015343 0ustar danielusersGIF89a00ÂÿÿÿUf»"»w²""»ÿ!ù,00þºÜþ0ÊI«½†Ìëž_g…¹˜ *–Œê®ùÆp#?s¶¸ò4_äŽHdMÅ I!z\1ÎgtJ­vPÙlº ¾°šÜ%ÎôJ½îÝðxB_³¹HyzE8}}lgnqr„6†tˆGc‹Œqc}nbw‰Œ•ƒŽ¡cOˆ”¡gC §›cI­§{¦®šYNoPn”‹­;Œ–š´a¶ š®ÉË£Œ¨‘¬y‚W½½ÙÏ“Øy×@àê¨ìíê6™êáíôïð Ì¢òØÝ×ç¹¹6Þ˜~õ¦í0pÁƒþÜ)Ü5p`»0ÀV9s‚aЦ «¸«¢U§ a •éXe‡ž]˶­Û·+;libwww/Icons/WWW/startup48x.gif0100644000076400001440000000063406277670557016075 0ustar danielusersGIF89a00Âÿÿÿ¢µÍÊâÿ»ÀˆŒU_k‘¢¸!ù,00þºÜþ0ÊI«½8ë=ƒÿ`(Ž^ö B0¬lËhŒÂipyµ7¨üX©"\ÈÕÇÈ$SÍŸ”Wd…ìç0ª’­×›-l)°nÀZ±Úaº®³ïvÑ»|žw¯xyUdq6hP€y‚l„W|riMŒ‹Žpf‘“^•‚KM‡~ožƒ…™£’‰–Ÿ¨†\VЦ{³ˆ±Wmb¡º¤oÄÅÆÄ ©}¬±ÏÑÐÓɲª´MÇÚȹ׻ÃÓÒã՘˛­WÛÚ墨^âñÒíÁÌÃëÆôßÂðäþÝÀöÙˆ/_3wàš@û7ï`=t¼|æP ÄZÎäŨbLN÷ r´vîc:xz+ùä_µHzl™ˆWÌ›W:®‚h§O?¦ñENˆ')Ê(]Êt)¦ 4“6ÚÔƒ¡B¥RÝÊGÕÌ–Eʸ!¶¬‰²E9¨]˶­Û·p)$;libwww/Icons/WWW/w3c_home.gif0100744000076400001440000000160506253022142015502 0ustar danielusersGIF87aH0¥­­­RŒ½{­Îs¥Æ½Öç{{{sssc”ÆcccZœ111ÞÞÞ)))ï÷ÿ!!!ÎçïÎÎΜÆÞ1{­œœœÞï÷ŒŒŒ­ÎçRRRÿÿÿBBBïïïB„µŒµÖ½½½,H0þ@4,Æ$È¡h:ŸÐ¨tJub®Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯ÛÕ‰|"²è^ „…[ X az[|]…›y‡Y ¡DW¤`\z^œ›”X ¢¢ a[«]²› ·· Cb[¿z\ÕyÜܱzYËÌ¡bß \\ªzZ–ÄWÊ¡õ¢È_šz(l gÝIyha!h-K…{´Œã5f^LYæ˜Åâž,þx²D®-ú‘i•çHBá²øÑãåF-C2tITfXþ<™„\bI7vòBl²!–…´ü‰y…? ˆÄAŠe“,Gõ»â3U,YuÂa¨ì&wWØ&Àâ1Á±h)Âx[¨?1h„ë÷m–¬¨àL­*öÀ¦y¾^±IH¡‰ßNð òÜtáfæÉ2`e=’1œ’#znYJ|mª…€ÆÑW.dvãÙÂfÉ /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Icons/internal/0040755000076400001440000000000007405520577014456 5ustar danieluserslibwww/Icons/internal/CVS/0040755000076400001440000000000007405517323015104 5ustar danieluserslibwww/Icons/internal/CVS/Root0100644000076400001440000000005607405517323015750 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Icons/internal/CVS/Repository0100644000076400001440000000002607405517323017201 0ustar danieluserslibwww/Icons/internal libwww/Icons/internal/CVS/Entries0100644000076400001440000000210607405517323016434 0ustar danielusers/.cvsignore/1.1/Mon Dec 23 20:54:19 1996// /Makefile.am/1.4/Sun Mar 22 21:39:56 1998// /back.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /binary.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /binhex.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /blank.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /compressed.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /directory.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /doc.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /dummy.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /ftp.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /gzip.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /image.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /index.xbm/1.1/Wed May 20 22:23:45 1998/-kb/ /index2.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /movie.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /sound.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /tar.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /telnet.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /text.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /unknown.doc.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /unknown.old.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /unknown.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ /uu.xbm/1.1/Wed May 20 22:23:46 1998/-kb/ D libwww/Icons/internal/Makefile0100644000076400001440000001545207405520577016122 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = subdirs = @subdirs@ ICONS := $(notdir $(wildcard $(srcdir)/*.xbm)) icondir = ${prefix}/share/w3c-libwww datadir = $(icondir) data_DATA = $(ICONS) EXTRA_DIST = $(ICONS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DATA = $(data_DATA) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Icons/internal/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status install-dataDATA: $(data_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(datadir) @list='$(data_DATA)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(datadir)/$$p"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(datadir)/$$p; \ else if test -f $$p; then \ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(datadir)/$$p"; \ $(INSTALL_DATA) $$p $(DESTDIR)$(datadir)/$$p; \ fi; fi; \ done uninstall-dataDATA: @$(NORMAL_UNINSTALL) list='$(data_DATA)'; for p in $$list; do \ rm -f $(DESTDIR)$(datadir)/$$p; \ done tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Icons/internal distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Icons/internal/Makefile $(mkinstalldirs) $(distdir)/$(srcdir) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-dataDATA install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-dataDATA uninstall: uninstall-am all-am: Makefile $(DATA) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(datadir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: uninstall-dataDATA install-dataDATA tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Icons/internal/.cvsignore0100644000076400001440000000002506257570573016455 0ustar danielusersMakefile.in Makefile libwww/Icons/internal/Makefile.am0100644000076400001440000000030306505302454016473 0ustar danielusers## Process this file with Automake to create Makefile.in. ICONS := $(notdir $(wildcard $(srcdir)/*.xbm)) icondir = @icondir@ datadir = $(icondir) data_DATA = $(ICONS) EXTRA_DIST = \ $(ICONS) libwww/Icons/internal/back.xbm0100644000076400001440000000065506530653761016071 0ustar danielusers#define back_width 20 #define back_height 23 static char back_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x80,0x0f, 0x00,0x80,0x0f,0x00,0x80,0x0f,0x00,0x80,0x0f,0x00,0x80,0x0f,0x60,0x80,0x0f, 0x70,0x80,0x0f,0x78,0x00,0x00,0xfc,0xff,0x0f,0xfe,0xff,0x07,0xff,0xff,0x03, 0xfe,0xff,0x01,0xfc,0xff,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0x60,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; libwww/Icons/internal/binary.xbm0100644000076400001440000000100006530653761016436 0ustar danielusers#define binary_width 20 #define binary_height 23 static char binary_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0x71, 0x26, 0x01, 0xd9, 0x26, 0x02, 0xd9, 0xe6, 0x07, 0xd9, 0xc6, 0x0f, 0xd9, 0x06, 0x0c, 0x71, 0x06, 0x0c, 0x01, 0x00, 0x0c, 0x99, 0x03, 0x0c, 0xd9, 0x06, 0x0c, 0xd9, 0x06, 0x0c, 0xd9, 0x06, 0x0c, 0xd9, 0x06, 0x0c, 0x99, 0x03, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/binhex.xbm0100644000076400001440000000100006530653761016427 0ustar danielusers#define binhex_width 20 #define binhex_height 23 static char binhex_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0x01, 0x20, 0x01, 0x01, 0x20, 0x02, 0x01, 0xe0, 0x07, 0x01, 0xc0, 0x0f, 0x01, 0x00, 0x0c, 0x6d, 0xb7, 0x0d, 0x6d, 0xb7, 0x0d, 0x6d, 0xb3, 0x0d, 0x7d, 0xf7, 0x0d, 0x7d, 0xe7, 0x0c, 0x6d, 0xb3, 0x0d, 0x6d, 0xb7, 0x0d, 0x6d, 0xb7, 0x0d, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/blank.xbm0100644000076400001440000000066006530653761016254 0ustar danielusers#define blank_width 20 #define blank_height 23 static char blank_bits[] = { 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0, 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0, 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0, 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0, 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0}; libwww/Icons/internal/compressed.xbm0100644000076400001440000000101406530653761017323 0ustar danielusers#define compressed_width 20 #define compressed_height 23 static char compressed_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x20, 0x0c, 0x00, 0x20, 0x14, 0x00, 0x20, 0x24, 0x00, 0x20, 0x7c, 0x00, 0x20, 0x78, 0x00, 0x20, 0x60, 0x00, 0x21, 0x60, 0x08, 0x23, 0x60, 0x0c, 0x27, 0x60, 0x0e, 0x2f, 0x60, 0x0f, 0x27, 0x60, 0x0e, 0x23, 0x60, 0x0c, 0x21, 0x60, 0x08, 0x20, 0x60, 0x00, 0x20, 0x60, 0x00, 0x20, 0x60, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/directory.xbm0100644000076400001440000000101106530653761017160 0ustar danielusers#define directory_width 20 #define directory_height 23 static char directory_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x04, 0x02, 0x00, 0x02, 0x04, 0x00, 0x01, 0xf8, 0x01, 0x01, 0x00, 0x02, 0x01, 0x00, 0x04, 0x01, 0x00, 0x0e, 0x01, 0x00, 0x0d, 0x01, 0x00, 0x0e, 0x01, 0x00, 0x0d, 0x01, 0x00, 0x0e, 0x01, 0x00, 0x0d, 0x01, 0x00, 0x0e, 0x01, 0x00, 0x0d, 0x01, 0x00, 0x0e, 0x55, 0x55, 0x0d, 0xaa, 0xaa, 0x0e, 0xfc, 0xff, 0x07, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/doc.xbm0100644000076400001440000000077406530653761015740 0ustar danielusers#define doc_width 20 #define doc_height 23 static unsigned char doc_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0xa9, 0x2a, 0x01, 0xf9, 0x2f, 0x02, 0x01, 0xe0, 0x07, 0xf9, 0x1f, 0x0f, 0x01, 0x00, 0x0c, 0xf9, 0xff, 0x0c, 0x01, 0x00, 0x0c, 0xf9, 0x7f, 0x0c, 0x01, 0x00, 0x0c, 0xf9, 0x3f, 0x0c, 0x01, 0x00, 0x0c, 0xf9, 0x7f, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; libwww/Icons/internal/dummy.xbm0100644000076400001440000000066006530653761016320 0ustar danielusers#define dummy_width 20 #define dummy_height 23 static char dummy_bits[] = { 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0, 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0, 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0, 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0, 0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,0xf0}; libwww/Icons/internal/ftp.xbm0100644000076400001440000000076706530653761015766 0ustar danielusers#define ftp_width 20 #define ftp_height 23 static char ftp_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x07, 0x02, 0x00, 0x0c, 0xba, 0xf7, 0x0c, 0xba, 0xf7, 0x0d, 0x1a, 0xb3, 0x0d, 0x3a, 0xb3, 0x0d, 0x3a, 0xf3, 0x0d, 0x1a, 0xf3, 0x0c, 0x1a, 0x33, 0x0c, 0x1a, 0x33, 0x0c, 0x02, 0x00, 0x0c, 0xfe, 0xff, 0x0f, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0xfe, 0xff, 0x07, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x07, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/gzip.xbm0100644000076400001440000000077706530653761016147 0ustar danielusers#define gzip_width 20 #define gzip_height 23 static unsigned char gzip_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x40, 0x06, 0x00, 0x40, 0x0a, 0x00, 0x40, 0x12, 0x00, 0x40, 0x3e, 0x00, 0x40, 0x3c, 0x00, 0x40, 0x30, 0x00, 0x41, 0x30, 0x08, 0x43, 0x30, 0x0c, 0x47, 0x30, 0x0e, 0x4f, 0x30, 0x0f, 0x47, 0x30, 0x0e, 0x43, 0x30, 0x0c, 0x41, 0x30, 0x08, 0x40, 0x30, 0x00, 0x40, 0x30, 0x00, 0x40, 0x30, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; libwww/Icons/internal/image.xbm0100644000076400001440000000077506530653761016256 0ustar danielusers#define image_width 20 #define image_height 23 static char image_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x01, 0x00, 0x0c, 0x01, 0x1c, 0x0c, 0x01, 0x22, 0x0c, 0x01, 0x26, 0x0c, 0x01, 0x29, 0x0c, 0x01, 0x19, 0x0c, 0x81, 0x10, 0x0c, 0x81, 0x0c, 0x0c, 0x41, 0x08, 0x0c, 0x41, 0x06, 0x0c, 0xc1, 0x04, 0x0c, 0xc1, 0x03, 0x0c, 0xc1, 0x01, 0x0c, 0xc1, 0x00, 0x0c, 0x41, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/index.xbm0100644000076400001440000000100006530653761016261 0ustar danielusers#define index2_width 20 #define index2_height 23 static char index2_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x01, 0x00, 0x0c, 0xe1, 0x03, 0x0c, 0x31, 0x06, 0x0c, 0x99, 0x0c, 0x0c, 0xc9, 0x09, 0x0c, 0x09, 0x0a, 0x0c, 0x09, 0x08, 0x0c, 0x19, 0x0c, 0x0c, 0x31, 0x16, 0x0c, 0xe1, 0x2f, 0x0c, 0x01, 0x5c, 0x0c, 0x01, 0xb8, 0x0c, 0x01, 0x70, 0x0d, 0x01, 0xe0, 0x0d, 0x01, 0xe0, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/index2.xbm0100644000076400001440000000077506530653762016366 0ustar danielusers#define index_width 20 #define index_height 23 static char index_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x01, 0x00, 0x0c, 0x81, 0x0f, 0x0c, 0x41, 0x18, 0x0c, 0x21, 0x33, 0x0c, 0xa1, 0x25, 0x0c, 0xc1, 0x24, 0x0c, 0x01, 0x32, 0x0c, 0x01, 0x19, 0x0c, 0x81, 0x0c, 0x0c, 0x81, 0x06, 0x0c, 0x01, 0x07, 0x0c, 0x01, 0x07, 0x0c, 0x81, 0x0c, 0x0c, 0x81, 0x0e, 0x0c, 0x01, 0x07, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/movie.xbm0100644000076400001440000000077506530653762016314 0ustar danielusers#define movie_width 20 #define movie_height 23 static char movie_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0xf9, 0xff, 0x0c, 0x19, 0xe0, 0x0c, 0x1f, 0xc0, 0x0f, 0x19, 0xe0, 0x0c, 0x19, 0xc0, 0x0c, 0x1f, 0xe0, 0x0f, 0x59, 0xd5, 0x0c, 0xf9, 0xff, 0x0c, 0xff, 0xff, 0x0f, 0x19, 0xe0, 0x0c, 0x19, 0xc0, 0x0c, 0x1f, 0xe0, 0x0f, 0x19, 0xc0, 0x0c, 0x19, 0xe0, 0x0c, 0x5f, 0xd5, 0x0f, 0xf9, 0xff, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/sound.xbm0100644000076400001440000000077506530653762016325 0ustar danielusers#define sound_width 20 #define sound_height 23 static char sound_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x01, 0x00, 0x0c, 0x01, 0x40, 0x0c, 0x01, 0x91, 0x0c, 0x81, 0x21, 0x0d, 0x41, 0x49, 0x0d, 0x3d, 0x51, 0x0d, 0x05, 0x55, 0x0d, 0x05, 0x55, 0x0d, 0x05, 0x55, 0x0d, 0x3d, 0x55, 0x0d, 0x7d, 0x51, 0x0d, 0xc1, 0x49, 0x0d, 0x81, 0x21, 0x0d, 0x01, 0x91, 0x0c, 0x01, 0x40, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/tar.xbm0100644000076400001440000000076706530653762015764 0ustar danielusers#define tar_width 20 #define tar_height 23 static char tar_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0x01, 0x20, 0x01, 0x01, 0x20, 0x02, 0x01, 0xe0, 0x07, 0x01, 0xc0, 0x0f, 0x01, 0x00, 0x0c, 0xbd, 0xf3, 0x0c, 0xbd, 0xf3, 0x0d, 0xd9, 0xb6, 0x0d, 0xd9, 0xb6, 0x0d, 0xd9, 0xf7, 0x0c, 0xd9, 0xf7, 0x0d, 0xd9, 0xb6, 0x0d, 0xd9, 0xb6, 0x0d, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/telnet.xbm0100644000076400001440000000100006530653762016446 0ustar danielusers#define telnet_width 20 #define telnet_height 23 static char telnet_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x07, 0x02, 0x00, 0x0c, 0x7a, 0x37, 0x0c, 0x7a, 0x37, 0x0c, 0x32, 0x33, 0x0c, 0x32, 0x37, 0x0c, 0x32, 0x37, 0x0c, 0x32, 0x33, 0x0c, 0x32, 0xf7, 0x0c, 0x32, 0xf7, 0x0c, 0x02, 0x00, 0x0c, 0xfe, 0xff, 0x0f, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0xfe, 0xff, 0x07, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x07, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/text.xbm0100644000076400001440000000077206530653762016156 0ustar danielusers#define text_width 20 #define text_height 23 static char text_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0xf9, 0x27, 0x01, 0x01, 0x20, 0x02, 0xf1, 0xe7, 0x07, 0x01, 0xc0, 0x0f, 0xf9, 0x07, 0x0c, 0x01, 0x00, 0x0c, 0xe1, 0x07, 0x0c, 0x01, 0x00, 0x0c, 0xf9, 0x07, 0x0c, 0x01, 0x00, 0x0c, 0xe1, 0x07, 0x0c, 0x01, 0x00, 0x0c, 0xf9, 0x07, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/unknown.doc.xbm0100644000076400001440000000100306530653762017421 0ustar danielusers#define unknown_width 20 #define unknown_height 23 static char unknown_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0x01, 0x20, 0x01, 0x01, 0x20, 0x02, 0x01, 0xe0, 0x07, 0x01, 0xc0, 0x0f, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/unknown.old.xbm0100644000076400001440000000100306530653762017432 0ustar danielusers#define unknown_width 20 #define unknown_height 23 static char unknown_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0x01, 0x20, 0x01, 0x01, 0x20, 0x02, 0x01, 0xe0, 0x07, 0x01, 0xc0, 0x0f, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/unknown.xbm0100644000076400001440000000102406530653762016660 0ustar danielusers#define unknown.doc_width 20 #define unknown.doc_height 23 static unsigned char unknown.doc_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0x01, 0x20, 0x01, 0x01, 0x20, 0x02, 0x81, 0xe7, 0x07, 0xc1, 0xcc, 0x0f, 0xc1, 0x0c, 0x0c, 0x01, 0x06, 0x0c, 0x01, 0x03, 0x0c, 0x01, 0x03, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x03, 0x0c, 0x01, 0x03, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; libwww/Icons/internal/uu.xbm0100644000076400001440000000076406530653762015624 0ustar danielusers#define uu_width 20 #define uu_height 23 static char uu_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x01, 0x60, 0x00, 0x01, 0xa0, 0x00, 0x01, 0x20, 0x01, 0x01, 0x20, 0x02, 0x01, 0xe0, 0x07, 0x01, 0xc0, 0x0f, 0x01, 0x00, 0x0c, 0xb1, 0x6d, 0x0c, 0xb1, 0x6d, 0x0c, 0xb1, 0x6d, 0x0c, 0xb1, 0x6d, 0x0c, 0xb1, 0x6d, 0x0c, 0xb1, 0x6d, 0x0c, 0xf1, 0x7d, 0x0c, 0xe1, 0x38, 0x0c, 0x01, 0x00, 0x0c, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; libwww/Icons/internal/Makefile.in0100644000076400001440000001506307405520527016520 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ subdirs = @subdirs@ ICONS := $(notdir $(wildcard $(srcdir)/*.xbm)) icondir = @icondir@ datadir = $(icondir) data_DATA = $(ICONS) EXTRA_DIST = $(ICONS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DATA = $(data_DATA) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Icons/internal/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status install-dataDATA: $(data_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(datadir) @list='$(data_DATA)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(datadir)/$$p"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(datadir)/$$p; \ else if test -f $$p; then \ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(datadir)/$$p"; \ $(INSTALL_DATA) $$p $(DESTDIR)$(datadir)/$$p; \ fi; fi; \ done uninstall-dataDATA: @$(NORMAL_UNINSTALL) list='$(data_DATA)'; for p in $$list; do \ rm -f $(DESTDIR)$(datadir)/$$p; \ done tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Icons/internal distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Icons/internal/Makefile $(mkinstalldirs) $(distdir)/$(srcdir) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-dataDATA install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-dataDATA uninstall: uninstall-am all-am: Makefile $(DATA) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(datadir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: uninstall-dataDATA install-dataDATA tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Icons/Makefile0100644000076400001440000002354307405520577014306 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign SUBDIRS = WWW 32x32 internal mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Icons/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Icons distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Icons/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean inc : @echo icons # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Icons/Makefile.in0100644000076400001440000002316307405520526014703 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign SUBDIRS = WWW 32x32 internal mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Icons/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Icons distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Icons/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean inc : @echo icons # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/0040755000076400001440000000000007405520567013172 5ustar danieluserslibwww/Library/CVS/0040755000076400001440000000000007405517323013621 5ustar danieluserslibwww/Library/CVS/Root0100644000076400001440000000005607405517323014465 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/CVS/Repository0100644000076400001440000000001707405517323015716 0ustar danieluserslibwww/Library libwww/Library/CVS/Entries0100644000076400001440000000127207405517323015154 0ustar danielusers/.cvsignore/1.3/Tue May 21 01:22:51 1996// /.htaccess/1.1/Fri Aug 17 21:17:55 2001// /Activity.html/1.19/Thu Aug 5 12:16:29 1999// /BeforeCommitting.html/1.7/Wed Jul 12 10:47:06 2000// /Collaborators.html/1.9/Tue Apr 13 18:03:06 1999// /Distribution.html/1.50/Wed Dec 20 15:08:38 2000// /Makefile.am/1.13/Thu Aug 6 01:54:52 1998// /OldEvents.html/1.4/Thu Aug 5 12:16:29 1999// /Overview.html/1.152/Wed Feb 14 10:44:12 2001// /Status.html/1.1/Thu Aug 5 12:16:29 1999// /Survey.html/1.3/Thu Dec 14 12:14:43 2000// /WinCom.html/1.8/Thu Aug 5 12:16:29 1999// /cvs.html/1.37/Wed Aug 9 09:31:45 2000// /libwww-config.html/1.5/Thu Aug 5 12:16:29 1999// /survey.txt/1.1/Fri Sep 22 09:44:40 2000// D libwww/Library/CVS/Entries.Log0100644000076400001440000000015007405517351015667 0ustar danielusersA D/Examples//// A D/External//// A D/Test//// A D/User//// A D/contrib//// A D/cvs2sql//// A D/src//// libwww/Library/Examples/0040755000076400001440000000000007422617425014747 5ustar danieluserslibwww/Library/Examples/CVS/0040755000076400001440000000000007405517324015400 5ustar danieluserslibwww/Library/Examples/CVS/Root0100644000076400001440000000005607405517323016243 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/Examples/CVS/Repository0100644000076400001440000000003007405517323017467 0ustar danieluserslibwww/Library/Examples libwww/Library/Examples/CVS/Entries0100644000076400001440000000304507405517324016733 0ustar danielusers/.cvsignore/1.2/Sun Jun 2 00:34:37 1996// /LoadToFile.c/1.7/Tue Jul 4 15:26:57 2000// /Makefile.am/1.33/Thu Aug 17 19:36:57 2000// /Overview.html/1.25/Fri Aug 4 08:23:11 2000// /chunk.c/1.8/Tue Dec 19 14:50:33 2000// /chunkbody.c/1.8/Tue Dec 19 14:50:33 2000// /cookie.c/1.2/Wed Jun 23 19:14:54 1999// /eventloop.c/1.4/Mon Jan 25 23:27:34 1999// /getheaders.c/1.3/Tue Dec 19 14:50:33 2000// /head.c/1.8/Tue Dec 19 14:50:33 2000// /init.c/1.9/Mon Apr 12 18:57:39 1999// /isredirected.c/1.4/Thu Aug 3 16:01:31 2000// /libapp_1.c/1.4/Wed Jan 6 15:38:47 1999// /libapp_2.c/1.8/Wed Jan 6 15:38:47 1999// /libapp_3.c/1.8/Wed Jan 6 15:38:47 1999// /libapp_4.c/1.8/Mon Jan 25 23:27:34 1999// /listen.c/1.7/Mon Mar 1 13:41:55 1999// /memput.c/1.3/Mon Mar 1 13:41:55 1999// /mget.c/1.6/Wed Jul 7 15:43:27 1999// /multichunk.c/1.5/Tue Dec 19 14:50:33 2000// /post.c/1.4/Mon Mar 1 13:41:55 1999// /postform.c/1.9/Mon Mar 1 13:41:55 1999// /ptri.c/1.3/Sun Apr 18 22:05:34 1999// /put.c/1.7/Fri Apr 2 15:04:02 1999// /range.c/1.6/Tue Feb 23 17:53:30 1999// /rdf_parse_buffer.c/1.4/Wed Aug 30 12:59:16 2000// /rdf_parse_file.c/1.4/Wed Aug 30 12:58:53 2000// /showlinks.c/1.2/Mon Mar 1 13:41:55 1999// /showtags.c/1.3/Wed Mar 3 21:01:24 1999// /showtext.c/1.2/Mon Mar 1 13:41:55 1999// /showxml.c/1.4/Sun Apr 18 20:26:38 1999// /stri.c/1.3/Sun Apr 18 22:05:34 1999// /tiny.c/1.5/Mon Mar 1 13:41:55 1999// /trace.c/1.6/Mon Mar 1 13:41:55 1999// /tzcheck.c/1.4/Mon Mar 1 13:41:55 1999// /upgrade.c/1.2/Mon Mar 1 13:41:55 1999// /wwwssl.c/1.3/Fri Aug 4 10:52:28 2000// D libwww/Library/Examples/CVS/Entries.Log0100644000076400001440000000001407405517324017444 0ustar danielusersA D/RDF//// libwww/Library/Examples/RDF/0040755000076400001440000000000007405517324015360 5ustar danieluserslibwww/Library/Examples/RDF/CVS/0040755000076400001440000000000007405517324016013 5ustar danieluserslibwww/Library/Examples/RDF/CVS/Root0100644000076400001440000000005607405517324016657 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/Examples/RDF/CVS/Repository0100644000076400001440000000003407405517324020107 0ustar danieluserslibwww/Library/Examples/RDF libwww/Library/Examples/RDF/CVS/Entries0100644000076400001440000000036207405517324017345 0ustar danielusers/ex2.rdf/1.1/Sun Apr 18 20:07:58 1999// /ex3.rdf/1.1/Sun Apr 18 20:07:58 1999// /ex4.rdf/1.1/Sun Apr 18 20:07:58 1999// /ex5.rdf/1.1/Sun Apr 18 20:07:58 1999// /ex6.rdf/1.1/Sun Apr 18 20:07:58 1999// /ex7.rdf/1.1/Sun Apr 18 20:07:58 1999// D libwww/Library/Examples/RDF/ex2.rdf0100644000076400001440000000073606706435636016566 0ustar danielusers John Smith 1998-02-06T14:00Z Jane Cooper libwww/Library/Examples/RDF/ex3.rdf0100644000076400001440000000053306706435636016562 0ustar danielusers
  • Ora Lassila libwww/Library/Examples/RDF/ex4.rdf0100644000076400001440000000063706706435636016570 0ustar danielusers libwww/Library/Examples/RDF/ex5.rdf0100644000076400001440000000057506706435636016572 0ustar danielusers
  • libwww/Library/Examples/RDF/ex6.rdf0100644000076400001440000000102106706435636016556 0ustar danielusers Janne Saarela libwww/Library/Examples/RDF/ex7.rdf0100644000076400001440000000066306706435636016572 0ustar danielusers Investigations of e=m2 libwww/Library/Examples/.cvsignore0100644000076400001440000000005606154160635016742 0ustar danielusers*.h .www_browsable .deps Makefile.in Makefile libwww/Library/Examples/LoadToFile.c0100644000076400001440000000701507130401101017047 0ustar danielusers/* ** @(#) $Id: LoadToFile.c,v 1.7 2025/07/04 15:26:57 kahan Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to load a document and save it to local file */ #include "WWWLib.h" /* Global Library Include file */ #include "WWWMIME.h" /* MIME parser/generator */ #include "WWWNews.h" /* News access module */ #include "WWWHTTP.h" /* HTTP access module */ #include "WWWFTP.h" #include "WWWFile.h" #include "WWWGophe.h" #include "WWWInit.h" #define APP_NAME "GETTOOL" #define APP_VERSION "1.0" #define DEFAULT_OUTPUT_FILE "get.out" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } /* ** We get called here from the event loop when we are done ** loading. Here we terminate the program as we have nothing ** better to do. */ int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* Delete our request again */ HTRequest_delete(request); /* Delete our profile */ HTProfile_delete(); exit(status ? status : 0); } int main (int argc, char ** argv) { int arg = 0; char * outputfile = NULL; char * getme = NULL; HTRequest * request = NULL; /* Initiate W3C Reference Library with a client profile */ HTProfile_newNoCacheClient(APP_NAME, APP_VERSION); /* And the traces... */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to terminate the application */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Set the timeout for how long we are going to wait for a response */ HTHost_setEventTimeout(10000); /* Scan command line for parameters */ for (arg=1; arg -o \n", argv[0]); HTPrint("For example, %s http://www.w3.org -o w3chome.html\n", argv[0]); /* Delete our profile if no load */ HTProfile_delete(); } return 0; } libwww/Library/Examples/Makefile.am0100644000076400001440000000363707147037331017005 0ustar danielusers## Process this file with Automake to create Makefile.in. noinst_PROGRAMS = head libapp_1 libapp_2 libapp_3 libapp_4 init \ chunk chunkbody LoadToFile postform multichunk put post trace \ range tzcheck mget isredirected listen eventloop memput \ getheaders showlinks showtags showtext tiny upgrade cookie \ @SHOWXML@ @WWWSSLEX@ EXTRA_PROGRAMS = showxml ptri stri wwwssl rdf_parse_file rdf_parse_buffer LDADD = \ ../src/libwwwinit.la \ ../src/libwwwapp.la \ @LIBWWWXML@ ../src/libwwwhtml.la \ ../src/libwwwtelnet.la \ ../src/libwwwnews.la \ ../src/libwwwhttp.la \ ../src/libwwwmime.la \ ../src/libwwwgopher.la \ ../src/libwwwftp.la \ ../src/libwwwdir.la \ ../src/libwwwcache.la \ ../src/libwwwstream.la \ ../src/libwwwfile.la \ ../src/libwwwmux.la \ ../src/libwwwtrans.la \ ../src/libwwwcore.la \ ../src/libwwwutils.la \ @LIBWWWSSL@ \ -lm @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ INCLUDES = \ -I$(srcdir)/../src \ -I$(top_srcdir)/modules/expat/xmlparse \ -I$(srcdir)/../src/SSL DOCS := $(wildcard *.html) EXTRA_DIST = \ $(DOCS) PURIFY_CACHE = @PURIFY_CACHE@ purify: $(mget_OBJECTS) $(mget_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(mget_OBJECTS) \ -lm \ ../src/.libs/libwwwinit.a \ ../src/.libs/libwwwapp.a \ ../src/.libs/libwwwxml.a \ ../src/.libs/libwwwhtml.a \ ../src/.libs/libwwwtelnet.a \ ../src/.libs/libwwwnews.a \ ../src/.libs/libwwwhttp.a \ ../src/.libs/libwwwmime.a \ ../src/.libs/libwwwgopher.a \ ../src/.libs/libwwwftp.a \ ../src/.libs/libwwwdir.a \ ../src/.libs/libwwwcache.a \ ../src/.libs/libwwwstream.a \ ../src/.libs/libwwwfile.a \ ../src/.libs/libwwwmux.a \ ../src/.libs/libwwwtrans.a \ ../src/.libs/libwwwcore.a \ ../src/.libs/libwwwutils.a \ ../src/.libs/libwwwzip.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) libwww/Library/Examples/Overview.html0100644000076400001440000002346107142476557017456 0ustar danielusers Libwww Ready to go Samples

    Libwww Ready to go Samples

    Initialization | GET | HEAD | PUT | POST | TRACE | OPTIONS | HTML Parsing | XML/RDF ParsingServing Requests | Eventloop | Big sample apps

    This is the list of small examples using the very basic features of the Library. If you have not already compiled the library then please read the Installation guide before you continue. If you want more details of how to use the Library then please read the User's Guide.

    In the example we assume that the compiler knows where to look for libwww include files and the binary library itself.  If you are using the GNU autoconf configure script then the examples are built as part of the overall package. On other platforms, you must provide the make file on your own.

    Initialization Samples

    Start and Stop the Library
    This is a dummy program that just initializes as terminates the Library
    Default Initialization of libwww
    This example shows how to set up all the default handlers, parsers, converters, etc. using the WWWInit interface.
    Specialized Initialization of libwww
    This example show how to register a protocol module and a stream converter
    Timezone sampler
    Figures out what timezone you are in. This is important for libwww to know as the persistent cache and a lot of other things depends on it.

    Client Requests using libwww

    These sample programs are all using libwww as a client side library which is what comes most natural to libwww.

    Samples using GET Requests

    Load a document and headers into memory
    A simple example of how you can create a memory buffer containing the contents of the URL and all the protocol headers.
    Load a document without headers into memory
    This program shows how to load a URL into memory without getting the header information.
    Load a document and count the number of bytes in the body
    This is an example of how you can add streams and then get the desired result. The example shows how to add a content length counter stream and get the result back.
    Load a document and dump to local File
    We here show how to fetch a document using HTTP and to save it to local file. You must specify a local file name on the command line. There are two versions of this program: The preemptive version with no event loop and the non-preemptive version for integration with Windows' event and other event loops.
    Load the same document n times using blocking sockets
    You can use this (but be careful) to beat up a server with the same document as fast as possible.
    Load the same document n times using non-blocking sockets
    Be careful! Also remember that only GET and HEAD requests can be pipelined in HTTP - not POST, for example.
    Range Requests
    Range requests can be used to ask for a part or for several parts of a document from an HTTP server without asking for the whole thing. The output is sent directly to stdout. Run the program without parameters for instructions.
    Simple cookie usage example
    Not that I like cookies - but this is a simple sample app showing how to use cookies with the HTTP Cookie module.

    Samples using HEAD Requests

    Get the header fields of a response
    Prints out and potentially filters the response header fields you are interested
    Issue a HEAD request
    This small example sets up a request and performs a HEAD method on the resource provided on the command line
    Issue a HEAD request and check for redirections
    A small program that sends a request out and checks whether is was redirected. If so then print out the redirected address

    Samples using PUT Requests

    Simple PUT program
    Lets you save a document to an HTTP server. Note that both input and output is a Web address (URI) so you can save a document from anywhere to anywhere.
    Save data from memory to a remote server
    This sample shows you how to use temporary anchors and how to save data from memory using PUT

    Samples using POST Requests

    Post an HTML Form
    Use this example to POST HTML form data to a server
    Post data from memory to a remote server
    This sample shows you how to use temporary anchors and how to POST data from memory

    Samples using TRACE Requests

    Send a TRACE request to a server
    Allows to include the max number of hops (proxies) the request must pass

    Samples using OPTIONS Requests

    Send an OPTIONS request to a server - this is yet an exercise for the user!
    It should allow support for sending OPTIONS on a * URI (although I really don't like that!)

    HTML Parsing

    Three small sample apps that show how to use the new HText interface and the libwww HTML parser.

    showlinks.c
    Parses a document and writes out all the links that it found to stdout
    showtags.c
    Parses a document and writes out all the HTML tags found to stdout
    showtext.c
    Parses a document and writes out all the "plain" text - that is what's between the HTML markup
    tiny.c
    Is a very rudimentary HTTP/HTML browser with no layout engine and no fuzz. It's main feature is that it is small (<200K when stripped on linux).

    XML/RDF Parsing

    Here are some sample apps that show how to use libwww together with James Clark's expat XML parser and John Punin's integration of the SiRPAC RDF parser in libwww. See the XML module for more information

    showxml.c
    A simple program that shows all XML start and end tags and nothing else
    stri.c
    This sample app uses the RDF parser to generate a set of triples and send them to stdout.
    ptri.c
    A sample application using the RDF parser more directly as we control where the triples are sent ourselves

    Server Requests using libwww

    Although libwww is primarily for clients, it is in fact symmetric in that it can handle both client requests and server requests. The way this is handled is that each protocol is registered with both a client handler and a server handler - depending on which type of request you use, one of them is called. Note that in order to be able to serve any document, there actually have to be a server handler. Currently, libwww only comes with a raw socket loader which isn't much of a server.

    Listen on a socket
    This sample program opens a raw socket and listens on that port. Anything arriving is forwarded asis to stdout

    Using the Eventloop

    Libwww is designed using a "coke machine model", in other words using asynchronous requests for most of its operations. For GET and HEAD requests you can also use synchronous requests, but they are not as flexible and requires more care.

    Simple eventloop
    Keeps loading the same file whenever a user enters something. Stop the application by hitting "q"

    Bigger Sample Applications

    You can also have a look at the more complete sample applications which are capable of doing more interesting things. If you have any example code that you would like to share with us then please send us a mail so that we can add it to this page.


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.25 2025/08/04 08:23:11 kahan Exp $
    libwww/Library/Examples/chunk.c0100644000076400001440000000400307217672671016223 0ustar danielusers#include "WWWLib.h" #include "WWWHTTP.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* Check for status */ HTPrint("Load resulted in status %d\n", status); /* we're not handling other requests */ HTEventList_stopLoop (); /* stop here */ return HT_ERROR; } int main (int argc, char ** argv) { HTRequest * request = HTRequest_new(); HTChunk * chunk = NULL; char * url = argc==2 ? argv[1] : NULL; /* Initialize libwww core */ HTProfile_newPreemptiveClient("TestApp", "1.0"); /* Gotta set up our own traces */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Turn on TRACE so we can see what is going on */ #if 0 HTSetTraceMessageMask("sop"); #endif /* We want raw output including headers */ HTRequest_setOutputFormat(request, WWW_RAW); /* Close connection immediately */ HTRequest_addConnection(request, "close", ""); /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); if (url) { char * cwd = HTGetCurrentDirectoryURL(); char * absolute_url = HTParse(url, cwd, PARSE_ALL); chunk = HTLoadToChunk(absolute_url, request); HT_FREE(absolute_url); HT_FREE(cwd); /* If chunk != NULL then we have the data */ if (chunk) { char * string; /* Go into the event loop... */ HTEventList_loop(request); /* print the chunk result */ string = HTChunk_toCString(chunk); HTPrint("%s", string ? string : "no text"); HT_FREE(string); } } else { HTPrint("Type the URL you want to accces on the command line\n"); } /* Clean up the request */ HTRequest_delete(request); /* Terminate the Library */ HTProfile_delete(); return 0; } libwww/Library/Examples/chunkbody.c0100644000076400001440000000731507217672671017112 0ustar danielusers/* ** @(#) $Id: chunkbody.c,v 1.8 2025/12/19 14:50:33 kahan Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Issues a range request to an HTTP server and saves the result in a chunk */ #include "WWWLib.h" #include "WWWHTTP.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* Check for status */ /* HTPrint("Load resulted in status %d\n", status); */ /* we're not handling other requests */ HTEventList_stopLoop (); /* stop here */ return HT_ERROR; } int main (int argc, char ** argv) { HTRequest * request = HTRequest_new(); HTList * converters = HTList_new(); /* List of converters */ HTList * encodings = HTList_new(); /* List of encoders */ HTChunk * chunk = NULL; char * url = argc==2 ? argv[1] : NULL; /* Initialize libwww core */ HTLibInit("TestApp", "1.0"); /* Gotta set up our own traces */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Turn on TRACE so we can see what is going on */ #if 0 HTSetTraceMessageMask("sop"); #endif /* On windows we must always set up the eventloop */ #ifdef WWW_WIN_ASYNC HTEventInit(); #endif /* Register the default set of transport protocols */ HTTransportInit(); /* Register the default set of protocol modules */ HTProtocolInit(); /* Register the default set of BEFORE and AFTER callback functions */ HTNetInit(); /* Register the default set of converters */ HTConverterInit(converters); HTFormat_setConversion(converters); /* Register the default set of transfer encoders and decoders */ HTTransferEncoderInit(encodings); HTFormat_setTransferCoding(encodings); /* Register the default set of MIME header parsers */ HTMIMEInit(); /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Set up the request and pass it to the Library */ HTRequest_setOutputFormat(request, WWW_SOURCE); HTRequest_setPreemptive(request, YES); if (url) { char * cwd = HTGetCurrentDirectoryURL(); char * absolute_url = HTParse(url, cwd, PARSE_ALL); HTAnchor * anchor = HTAnchor_findAddress(absolute_url); chunk = HTLoadAnchorToChunk(anchor, request); HT_FREE(absolute_url); HT_FREE(cwd); /* If chunk != NULL then we have the data */ if (chunk) { char * string; /* wait until the request is over */ HTEventList_loop (request); string = HTChunk_toCString(chunk); HTPrint("%s", string ? string : "no text"); HT_FREE(string); } } else { HTPrint("Type the URL you want to accces on the command line\n"); } /* Clean up the request */ HTRequest_delete(request); HTFormat_deleteAll(); /* On windows, shut down eventloop as well */ #ifdef WWW_WIN_ASYNC HTEventTerminate(); #endif /* Terminate the Library */ HTLibTerminate(); return 0; } libwww/Library/Examples/cookie.c0100644000076400001440000001116406734231056016361 0ustar danielusers/* ** @(#) $Id: cookie.c,v 1.2 2025/06/23 19:14:54 frystyk Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to load a document and save it to local file */ #include "WWWLib.h" /* Global Library Include file */ #include "WWWMIME.h" /* MIME parser/generator */ #include "WWWNews.h" /* News access module */ #include "WWWHTTP.h" /* HTTP access module */ #include "WWWFTP.h" #include "WWWFile.h" #include "WWWGophe.h" #include "WWWInit.h" #define APP_NAME "GETTOOL" #define APP_VERSION "1.0" #define DEFAULT_OUTPUT_FILE "get.out" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE BOOL setCookie (HTRequest * request, HTCookie * cookie, void * param) { if (cookie) { char * addr = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); HTPrint("While accessing `%s\', we received a cookie with parameters:\n", addr); if (HTCookie_name(cookie)) HTPrint("\tName : `%s\'\n", HTCookie_name(cookie)); if (HTCookie_value(cookie)) HTPrint("\tValue : `%s\'\n", HTCookie_value(cookie)); if (HTCookie_domain(cookie)) HTPrint("\tDomain : `%s\'\n", HTCookie_domain(cookie)); if (HTCookie_path(cookie)) HTPrint("\tPath : `%s\'\n", HTCookie_path(cookie)); if (HTCookie_expiration(cookie) > 0) { time_t t = HTCookie_expiration(cookie); HTPrint("\tExpires: `%s\'\n", HTDateTimeStr(&t, NO)); } HTPrint("\tCookie is %ssecure\n\n", HTCookie_isSecure(cookie) ? "" : "not "); HT_FREE(addr); } return YES; } PRIVATE HTAssocList * findCookie (HTRequest * request, void * param) { HTAssocList * alist = HTAssocList_new(); /* Is deleted by the cookie module */ HTAssocList_addObject(alist, "dummy-name", "dummy-value"); return alist; } /* ** We get called here from the event loop when we are done ** loading. Here we terminate the program as we have nothing ** better to do. */ int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* Delete our request again */ HTRequest_delete(request); /* Delete our profile */ HTProfile_delete(); exit(status ? status : 0); } int main (int argc, char ** argv) { int status = 0; int arg = 0; char * outputfile = NULL; char * getme = NULL; HTRequest * request = NULL; /* Initiate W3C Reference Library with a client profile */ HTProfile_newNoCacheClient(APP_NAME, APP_VERSION); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own filter to terminate the application */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Setup cookies */ HTCookie_init(); HTCookie_setCallbacks(setCookie, NULL, findCookie, NULL); /* Set the timeout for long we are going to wait for a response */ HTHost_setEventTimeout(10000); /* Scan command line for parameters */ for (arg=1; arg -o \n", argv[0]); HTPrint("For example, %s http://www.w3.org -o w3chome.html\n", argv[0]); /* Delete our profile if no load */ HTProfile_delete(); } return 0; } libwww/Library/Examples/eventloop.c0100644000076400001440000001037406653176746017143 0ustar danielusers/* ** @(#) $Id: eventloop.c,v 1.4 2025/01/25 23:27:34 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** A very simple event loop demo showing how to write an event driven ** libwww app and also how to use various contexts */ #include "WWWLib.h" #include "WWWInit.h" #include "WWWLib.h" #include "WWWApp.h" #include "WWWInit.h" #ifndef W3C_VERSION #define W3C_VERSION "Unspecified" #endif #define APP_NAME "W3CSample" #define APP_VERSION W3C_VERSION #define ADDRESS "http://www.w3.org/Library/test.html" #if defined(__svr4__) #define CATCH_SIG #endif typedef struct _App { HTRequest * console_request; HTEvent * console_event; HTList * active; /* List of active contexts */ HTAnchor * anchor; /* The only anchor we load */ } App; PRIVATE HTEventCallback console_parser; PRIVATE HTNetAfter request_terminater; /* ------------------------------------------------------------------------- */ PRIVATE HTRequest * Request_new (App * app) { HTRequest * request = HTRequest_new(); HTRequest_setOutputFormat(request, WWW_SOURCE); HTRequest_setOutputStream(request, HTFWriter_new(request, stdout, YES)); if (!app->active) app->active = HTList_new(); HTList_addObject(app->active, request); return request; } PRIVATE BOOL Request_delete (App * app, HTRequest * request) { if (app && app->active && request) { HTList_removeObject(app->active, request); HTRequest_delete(request); return YES; } return NO; } PRIVATE App * App_new (void) { App * me = NULL; if ((me = (App *) HT_CALLOC(1, sizeof(App))) == NULL) HT_OUTOFMEM("App_new"); me->console_request = HTRequest_new(); me->console_event = HTEvent_new(console_parser, me, HT_PRIORITY_MAX, -1); me->active = HTList_new(); /* We repeatedly ask for this single address */ me->anchor = HTAnchor_findAddress(ADDRESS); /* Register stdin as our console */ if (isatty(STDIN_FILENO)) HTEventList_register(STDIN_FILENO, HTEvent_READ, me->console_event); return me; } PRIVATE BOOL App_delete (App * me) { if (me) { /* Kill any remaining active requests */ HTNet_killAll(); /* Now do the rest of the cleanup */ HTRequest_delete(me->console_request); HT_FREE(me); /* Terminate libwww */ HTProfile_delete(); exit(0); } return NO; } /* ------------------------------------------------------------------------- */ PRIVATE int console_parser (SOCKET s, void * param, HTEventType type) { App * app = (App *) param; HTRequest * new_request = NULL; char buf[128]; if (!fgets(buf, sizeof(buf), stdin)) return HT_ERROR; switch (toupper(buf[0])) { case 'Q': /* Quit program ? */ App_delete(app); break; default: new_request = Request_new(app); HTLoadAnchor(app->anchor, new_request); break; } return HT_OK; } PRIVATE int request_terminater (HTRequest * request, HTResponse * response, void * param, int status) { App * app = (App *) param; Request_delete(app, request); return HT_OK; } /* ------------------------------------------------------------------------- */ int main (int argc, char ** argv) { App * app = NULL; HTRequest * request = NULL; /* Initiate libwww */ HTProfile_newNoCacheClient(APP_NAME, APP_VERSION); #if 0 HTSetTraceMessageMask("ot"); #endif /* Add our own request terminate handler */ HTNet_addAfter(request_terminater, NULL, app, HT_ALL, HT_FILTER_LAST); /* Create a new app obect */ app = App_new(); /* Start the first request */ request = Request_new(app); HTLoadAnchor(app->anchor, request); /* Go into the event loop... */ HTEventList_newLoop(); App_delete(app); return 0; } libwww/Library/Examples/getheaders.c0100644000076400001440000000672707217672671017245 0ustar danielusers/* ** @(#) $Id: getheaders.c,v 1.3 2025/12/19 14:50:33 kahan Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c¨ 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** AUTHOR: Vladimir Kozlov ** ** Issues a HEAD request and parses the header information returned in the ** response and prints out the information requested by the caller */ #include "WWWLib.h" #include "WWWApp.h" #include "WWWInit.h" PRIVATE char * match = "*"; PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { HTParentAnchor * anchor = HTRequest_anchor(request); HTAssocList * headers = HTAnchor_header(anchor); /* ** Write out the remaining list of headers that we not already store ** in the index file. */ if (headers) { HTAssocList * cur = headers; HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { char * name = HTAssoc_name(pres); char * value = HTAssoc_value(pres); /* Now see if we have a match for this header field */ if (match && HTStrCaseMatch(match, name)) HTPrint("%s: %s\n", name, value); } } /* stop the event loop */ HTEventList_stopLoop (); /* stop here */ return HT_ERROR; } int main (int argc, char ** argv) { HTRequest * request; HTProfile_newPreemptiveClient("HTTPHeadApplication", "1.0"); request = HTRequest_new(); #if 0 /* Turn on TRACE so we can see what is going on */ HTSetTraceMessageMask("sop"); #endif /* We don't want any progress notifications */ HTAlert_setInteractive(NO); /* Parse the command line options */ if (argc >= 2) { char * url = argv[1]; /* Set the header field match (if any) */ if (argc >= 3) match = argv[2]; /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Set the output format to source and put output to stdout */ HTRequest_setOutputStream(request, HTFWriter_new(request, stdout, YES)); /* Start the load */ if (url && *url) { HTHeadAbsolute(url, request); /* wait until the request has finished */ HTEventList_loop (request); } else HTPrint("Bad parameters - please try again\n"); } else { HTPrint("Type the URL to perform a HEAD request on.\n"); HTPrint("\t%s \n", argv[0]); HTPrint("where is the prefix of the header fields\n"); HTPrint("you want to see, for example 'content*. If no \'*\' is used'\n"); HTPrint("then an exact match is needed. Default value is all header fields'\n"); } HTRequest_delete(request); /* Delete the request object */ HTProfile_delete(); return 0; } libwww/Library/Examples/head.c0100644000076400001440000000535307217672671016025 0ustar danielusers/* ** @(#) $Id: head.c,v 1.8 2025/12/19 14:50:33 kahan Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Issues a HEAD request and parses the header information returned in the ** response */ #include "WWWLib.h" #include "WWWApp.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { HTChunk * chunk = (HTChunk *) HTRequest_context(request); /* Check for status */ HTPrint("Load resulted in status %d\n", status); #if 0 if (status == HT_LOADED && chunk && HTChunk_data(chunk)) HTPrint("%s", HTChunk_data(chunk)); #endif /* Remember to delete our chunk of data */ if (chunk) HTChunk_delete(chunk); /* we're not handling other requests */ HTEventList_stopLoop (); /* stop here */ return HT_ERROR; } int main (int argc, char ** argv) { HTRequest * request; int status; HTProfile_newPreemptiveClient("HTTPHeadApplication", "1.0"); request = HTRequest_new(); if (argc >= 2) { char * url = argv[1]; /* Turn on TRACE so we can see what is going on */ if (argc == 3) HTSetTraceMessageMask(argv[2]); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Set the output format to source and put output to stdout */ HTRequest_setOutputStream(request, HTFWriter_new(request, stdout, YES)); /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Start the load */ if (url && *url) status = HTHeadAbsolute(url, request); else HTPrint("Bad parameters - please try again\n"); } else { HTPrint("Type the URL to perform a HEAD request on.\n"); HTPrint("\t%s \n", argv[0]); } /* Go into the event loop... */ if (status) HTEventList_loop(request); /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); return 0; } libwww/Library/Examples/init.c0100644000076400001440000000424006704441043016044 0ustar danielusers/* ** @(#) $Id: init.c,v 1.9 2025/04/12 18:57:39 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Issues a range request to an HTTP server and saves the result in a chunk */ #include "WWWLib.h" #include "WWWHTTP.h" #include "WWWInit.h" int main() { HTList * converters = HTList_new(); /* List of converters */ HTList * encodings = HTList_new(); /* List of encoders */ /* Set up the application's event loop. We use the example event loop that comes with the Library. */ HTEventInit(); /* Initialize libwww core */ HTLibInit("TestApp", "1.0"); /* Turn on TRACE so we can see what is going on */ HTSetTraceMessageMask("sop"); /* Register the default set of transport protocols */ HTTransportInit(); /* Register the default set of protocol modules */ HTProtocolInit(); /* Register the default set of BEFORE and AFTER filters */ HTNetInit(); /* Register the default set of converters */ HTConverterInit(converters); HTFormat_setConversion(converters); /* Register the default set of transfer encoders and decoders */ HTTransferEncoderInit(encodings); HTFormat_setTransferCoding(encodings); /* Register the default set of file suffix bindings */ HTFileInit(); /* Register the default set of MIME header parsers */ HTMIMEInit(); /* Register the default set of Icons for directory listings */ HTIconInit(NULL); /* Register the default set of messages and dialog functions */ HTAlertInit(); /* Terminate the Library */ HTLibTerminate(); return 0; } libwww/Library/Examples/isredirected.c0100644000076400001440000000665307142313533017560 0ustar danielusers/* ** @(#) $Id: isredirected.c,v 1.4 2025/08/03 16:01:31 kahan Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to use a TRACE request */ #include "WWWLib.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* ** If some sort of redirection then print out the address ** we are redirected to. */ if (status == HT_PERM_REDIRECT || status == HT_FOUND || status == HT_SEE_OTHER || status == HT_PROXY_REDIRECT || status == HT_TEMP_REDIRECT) { char * addr = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); char * re_addr = HTAnchor_address(HTResponse_redirection(response)); time_t retry_after = HTResponse_retryTime(response); HTPrint("The address `%s\' was redirected to `%s\'\n", addr, re_addr ? re_addr : ""); HT_FREE (re_addr); if (retry_after >= 0) HTPrint("A retry after period of %d secs was given\n", retry_after); } else { HTPrint("Request didn't result in a redirection\n"); } /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); /* As we have nothing else todo, we may as well exit */ exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTAnchor * dst = NULL; char * dst_str = NULL; BOOL status = NO; /* Create a new premptive client */ HTProfile_newRobot("catch-redirect", "1.0"); /* Gotta set up our own traces */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Turn on TRACE so we can see what is going on */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Set a timeout to 10 secs */ HTHost_setEventTimeout(10000); /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Handle command line args */ if (argc >= 2) { dst_str = argv[1]; } else { HTPrint("Type the URI of the destination you want to check whether it redirected or not\n"); HTPrint("\t%s
    \n", argv[0]); HTPrint("For example, %s http://www.w3.org\n", argv[0]); return -1; } if (dst_str && *dst_str) { HTPrint("Sending request to %s\n", dst_str); /* Create a request */ request = HTRequest_new(); /* We don't wany any progress notification or other user stuff */ HTAlert_setInteractive(NO); /* Get an anchor object for the destination URI */ dst = HTAnchor_findAddress(dst_str); /* POST the source to the dest */ status = HTHeadAnchor(dst, request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } return 0; } libwww/Library/Examples/libapp_1.c0100644000076400001440000000015106644701607016575 0ustar danielusers#include "WWWLib.h" int main() { HTLibInit("TestApp", "1.0"); HTLibTerminate(); return 0; } libwww/Library/Examples/libapp_2.c0100644000076400001440000000153006644701607016600 0ustar danielusers#include "WWWLib.h" #include "WWWInit.h" #include "WWWHTTP.h" #include "WWWTrans.h" int main() { HTList *converters = HTList_new(); /* Create a list object */ /* Initialize the Library */ HTLibInit("TestApp", "1.0"); /* Register TCP as the transport */ HTTransport_add("buffered_tcp", HT_TP_SINGLE, HTReader_new, HTBufferWriter_new); /* Register the HTTP Module */ HTProtocol_add("http", "buffered_tcp", HTTP_PORT, YES, HTLoadHTTP, NULL); /* Add a conversion to our empty list */ HTConversion_add(converters, "*/*", "www/present", HTSaveLocally, 1.0, 0.0, 0.0); /* Register our list with one conversion */ HTFormat_setConversion(converters); /* Delete the list with one conversion */ HTConversion_deleteAll(converters); /* Terminate the Library */ HTLibTerminate(); return 0; } libwww/Library/Examples/libapp_3.c0100644000076400001440000000166606644701607016613 0ustar danielusers#include "WWWLib.h" #include "WWWStream.h" #include "WWWInit.h" /* ** Loads a URL and count the content length */ int main (int argc, char ** argv) { HTRequest * request; HTProfile_newPreemptiveRobot("TestApp", "1.0"); request = HTRequest_new(); HTRequest_setOutputFormat(request, WWW_SOURCE); if (argc == 2) { char * url = argv[1]; if (url && *url) { HTParentAnchor * anchor=(HTParentAnchor*)HTAnchor_findAddress(url); BOOL status = HTLoadToStream(url, HTContentCounter(HTBlackHole(), request,0x2000), request); if (status) printf("Content length found to be %ld bytes\n", HTAnchor_length(anchor)); else printf("Content length could not be found\n"); } else printf("Bad parameters - please try again\n"); } else { printf("Type the URL to fetch\n"); } HTRequest_delete(request); /* Delete the request object */ HTProfile_delete(); return 0; } libwww/Library/Examples/libapp_4.c0100644000076400001440000000272406653176746016622 0ustar danielusers/* ** @(#) $Id: libapp_4.c,v 1.8 2025/01/25 23:27:34 frystyk Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to load a document and save it to local file using ** blocking I/O */ #include "WWWLib.h" #include "WWWInit.h" /* ** Loads a URL to a local file */ int main (int argc, char ** argv) { HTRequest * request; HTProfile_newPreemptiveClient("TestApp", "1.0"); request = HTRequest_new(); if (argc == 3) { char * url = argv[1]; char * filename = argv[2]; if (url && *url && filename && *filename) HTLoadToFile(url, request, filename); else printf("Bad parameters - please try again\n"); } else { printf("Type the URL to fetch and the name of the local file to put it in\n"); printf("\t%s \n", argv[0]); } HTRequest_delete(request); /* Delete the request object */ HTProfile_delete(); return 0; } libwww/Library/Examples/listen.c0100644000076400001440000001201106666514443016406 0ustar danielusers/* ** SOCKET LISTEN TOOL ** ** (c) COPRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** ** Authors: ** HFN Henrik Frystyk Nielsen (frystyk@w3.org) ** ** History: ** Nov 24 95 First version */ #include "WWWLib.h" /* Global Library Include file */ #include "WWWTrans.h" #include "WWWInit.h" #include "WWWApp.h" #ifndef W3C_VERSION #define W3C_VERSION "unspecified" #endif #define APP_NAME "libwww-listen" #define APP_VERSION W3C_VERSION #define OUTPUT stderr /* output is a global target for output redirection */ #define DEFAULT_PORT 1024 #define DEFAULT_FORMAT WWW_RAW typedef struct _ListenTool { HTRequest * request; int port; } ListenTool; /* ------------------------------------------------------------------------- */ PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } /* Create a Listen Tool Object ** --------------------------- */ PRIVATE ListenTool * ListenTool_new (void) { ListenTool * me; if ((me = (ListenTool *) HT_CALLOC(1, sizeof(ListenTool))) == NULL) HT_OUTOFMEM("ListenTool_new"); me->port = DEFAULT_PORT; return me; } /* Delete a Listen Tool Object ** --------------------------- */ PRIVATE BOOL ListenTool_delete (ListenTool * me) { if (me) { HTRequest_delete(me->request); HT_FREE(me); return YES; } return NO; } PRIVATE void Cleanup (ListenTool * me, int status) { ListenTool_delete(me); HTEventTerminate(); HTLibTerminate(); #ifdef VMS exit(status ? status : 1); #else exit(status ? status : 0); #endif } PRIVATE void VersionInfo (const char * name) { HTPrint("\nW3C OpenSource Software"); HTPrint("\n-----------------------\n\n"); HTPrint("\tListen tool version %s\n", APP_VERSION); HTPrint("\tusing the W3C libwww library version %s.\n\n",HTLib_version()); HTPrint("Format\n\n"); HTPrint("\t%s -port n [-v[sopt]] [-version]\n\n", name ? name : "listen"); HTPrint("Please send feedback to the mailing list,\n"); HTPrint("see \"http://www.w3.org/Library/#Forums\" for details\n\n"); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); if (status == HT_ERROR) HTPrint("Can't listen on this port\n"); /* Terminate libwww */ HTProfile_delete(); exit(0); } /* ------------------------------------------------------------------------- */ /* MAIN PROGRAM */ /* ------------------------------------------------------------------------- */ int main (int argc, char ** argv) { ListenTool * ms = ListenTool_new(); int status = HT_ERROR; int arg = 0; /* ** Initiate libwww. Note that we don't call a profile as these set up ** all the client side specific things. Here we just want a very basic ** server which doesn't do anything but forwarding what it reads to ** stdout. */ HTLibInit(APP_NAME, APP_VERSION); /* Set up default event loop */ HTEventInit(); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Check if we should just provide some help */ if (argc==1) { VersionInfo(argv[0]); Cleanup(ms, 0); } /* Scan command Line for parameters */ for (arg=1; argport = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_PORT; /* Print version and exit */ } else if (!strcmp(argv[arg], "-version")) { VersionInfo(argv[0]); Cleanup(ms, 0); #ifdef HTDEBUG /* trace flags */ } else if (!strncmp(argv[arg], "-v", 2)) { HTSetTraceMessageMask(argv[arg]+2); #endif } else { VersionInfo(argv[0]); Cleanup(ms, 0); } } else { VersionInfo(argv[0]); Cleanup(ms, 0); } } /* Set up a tool to listen on this port */ if (ms->port >= 0) { /* Register TCP as the transport */ HTTransport_add("tcp", HT_TP_SINGLE, HTReader_new, HTWriter_new); /* Register the "noop" application layer protocol for reading */ HTProtocol_add("noop", "tcp", ms->port, NO, NULL, HTLoadSocket); /* Set up the request */ ms->request = HTRequest_new(); HTRequest_setOutputFormat(ms->request, DEFAULT_FORMAT); HTRequest_setOutputStream(ms->request, HTFWriter_new(ms->request, OUTPUT, YES)); /* Start listening on the socket */ HTPrint("Listening on port %d\n", ms->port); if ((status = HTServeAbsolute("noop://localhost", ms->request)) == NO) { HTPrint("Can't listen on port %d\n", ms->port); Cleanup(ms, -1); } /* Go into the event loop... */ if (status == YES) HTEventList_newLoop(); } Cleanup(ms, 0); return 0; } libwww/Library/Examples/memput.c0100644000076400001440000000630106666514443016424 0ustar danielusers/* ** @(#) $Id: memput.c,v 1.3 2025/03/01 13:41:55 frystyk Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to PUT data from memory to an HTTP server */ #include "WWWLib.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTParentAnchor * src = NULL; HTAnchor * dst = NULL; char * dst_str = NULL; char * data = NULL; BOOL status = NO; /* Create a new premptive client */ HTProfile_newNoCacheClient("libwww-PUT", "1.0"); /* Gotta set up our own traces */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to update the history list */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Set trace messages and alert messages*/ #if 0 HTSetTraceMessageMask("p"); #endif /* Handle command line args */ if (argc >= 3) { dst_str = argv[1]; data = argv[2]; } else { HTPrint("Type the URI of the destination you want to create/update and the contents that you want to save.\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example, %s http://myserver/destination.html \"This is some testdata\"\n", argv[0]); return -1; } if (data && *data && dst_str && *dst_str) { HTPrint("Saving to %s\n", dst_str); /* Create a request */ request = HTRequest_new(); /* Get an anchor object for the destination URI */ dst = HTAnchor_findAddress(dst_str); /* ** Dream up a source anchor (an editor can for example use this). ** After creation we associate the data that we want to save and ** set some metadata about what the data is. More formats can be found ** ../src/HTFormat.html */ src = HTTmpAnchor(NULL); HTAnchor_setDocument(src, data); HTAnchor_setFormat(src, WWW_PLAINTEXT); /* ** If not saving to an HTTP/1.1 server then content length MUST be ** there. If HTTP/1.1 then it doesn't matter as we just use chunked ** encoding under the covers */ HTAnchor_setLength(src, strlen(data)); /* PUT the source to the dest */ status = HTPutAnchor(src, dst, request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } return 0; } libwww/Library/Examples/mget.c0100644000076400001440000000720106740672637016054 0ustar danielusers/* ** @(#) $Id: mget.c,v 1.6 2025/07/07 15:43:27 frystyk Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how fire off many GET requests and then enter the event loop ** This does only work on GET and HEAD methods as other methods can't be ** pipelined this way. If issuing lots of POST requests, for example, then ** use the HTTP_setConnectionMode(HTTP_11_NO_PIPELINING) function call */ #include "WWWLib.h" #include "WWWInit.h" #define MAX_COUNT 1024 PRIVATE int remaining = 0; /* ----------------------------------------------------------------- */ PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { HTChunk * chunk = (HTChunk *) HTRequest_context(request); /* Check for status */ HTPrint("Load %d resulted in status %d\n", remaining, status); #if 0 if (status == HT_LOADED && chunk && HTChunk_data(chunk)) HTPrint("%s", HTChunk_data(chunk)); #endif /* Remember to delete our chunk of data */ if (chunk) HTChunk_delete(chunk); /* We are done with this request */ HTRequest_delete(request); if (--remaining <= 0) { /* Terminate libwww */ HTProfile_delete(); exit(0); } return HT_OK; } int main (int argc, char ** argv) { HTRequest * request = NULL; char * addr = NULL; int max_cnt = 0; BOOL status = YES; /* Create a new premptive client */ HTProfile_newNoCacheClient("libwww-MGET", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Turn on tracing */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Handle command line args */ if (argc >= 3) { addr = argv[1]; max_cnt = atoi(argv[2]); if (max_cnt<0 || max_cnt>MAX_COUNT) max_cnt=1; remaining = max_cnt; } else { HTPrint("Type the URI of the destination you want to GET and the number of times you want to get it\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example, %s http://www.w3.org 2\n", argv[0]); return -1; } if (addr && *addr) { HTChunk * chunk; int cnt = 0; /* We don't wany any progress notification or other user stuff */ HTAlert_setInteractive(NO); /* Now issue the requests */ HTPrint("Issuing %d GET request(s) on `%s\'\n", max_cnt, addr); for (cnt=0; cnt \n", argv[0]); } /* Terminate the Library */ HTProfile_delete(); HTPrint("\n"); return 0; } libwww/Library/Examples/post.c0100644000076400001440000000635306666514443016111 0ustar danielusers/* ** @(#) $Id: post.c,v 1.4 2025/03/01 13:41:55 frystyk Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to POST data to an HTTP server */ #include "WWWLib.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTParentAnchor * src = NULL; HTAnchor * dst = NULL; char * dst_str = NULL; char * data = NULL; BOOL status = NO; /* Create a new premptive client */ HTProfile_newNoCacheClient("libwww-POST", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to update the history list */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Handle command line args */ if (argc >= 3) { dst_str = argv[1]; data = argv[2]; } else { HTPrint("Type the URI of the destination you want to POST to and the contents that you want to post.\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example, %s http://myserver/destination.html \"This is some testdata\"\n", argv[0]); return -1; } if (data && *data && dst_str && *dst_str) { /* Make source relative to where we are */ char * cwd = HTGetCurrentDirectoryURL(); HTPrint("Posting to %s\n", dst_str); /* Create a request */ request = HTRequest_new(); /* Get an anchor object for the destination URI */ dst = HTAnchor_findAddress(dst_str); /* ** Dream up a source anchor (an editor can for example use this). ** After creation we associate the data that we want to post and ** set some metadata about what the data is. More formats can be found ** ../src/HTFormat.html */ src = HTTmpAnchor(NULL); HTAnchor_setDocument(src, data); HTAnchor_setFormat(src, WWW_PLAINTEXT); /* ** If not posting to an HTTP/1.1 server then content length MUST be ** there. If HTTP/1.1 then it doesn't matter as we just use chunked ** encoding under the covers */ HTAnchor_setLength(src, strlen(data)); /* POST the source to the dest */ status = HTPostAnchor(src, dst, request); /* We don't need these anymore */ HT_FREE(cwd); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } return 0; } libwww/Library/Examples/postform.c0100644000076400001440000000621106666514443016766 0ustar danielusers/* ** @(#) $Id: postform.c,v 1.9 2025/03/01 13:41:55 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Posts form data to an HTTP server and saves the result in a chunk */ #include "WWWLib.h" #include "WWWInit.h" PRIVATE HTChunk * result = NULL; PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { if (status == HT_LOADED && result && HTChunk_data(result)) { HTPrint("%s", HTChunk_data(result)); HTChunk_delete(result); } /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTAnchor * anchor = NULL; HTAssocList * formfields = NULL; char * uri = NULL; /* Create a new premptive client */ HTProfile_newNoCacheClient("TestApp", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Get trace messages */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own filter to update the history list */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Set the timeout for long we are going to wait for a response */ HTHost_setEventTimeout(20000); /* Handle command line args */ if (argc >= 2) { int arg; uri = argv[1]; for (arg=2; arg 'a=1' 'b=+2+' 'c=3 ...'\n", argv[0]); } return 0; } libwww/Library/Examples/ptri.c0100644000076400001440000001007006706453456016072 0ustar danielusers/* ** @(#) $Id: ptri.c,v 1.3 2025/04/18 22:05:34 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Parses RDF triples and spits out RDF triples. Example RDF files can be ** found in the ./RDF folder and at "http://www.w3.org/Library/Examples/RDF" ** Difference from stri is that we handle the HTRDF Object ourselves here. ** ** Author: John Punin */ #include "WWWLib.h" #include "WWWInit.h" #include "WWWXML.h" PRIVATE HTRDF * rdf_parser = NULL; /* ------------------------------------------------------------------------- */ /* LIBWWW FILTERS */ /* ------------------------------------------------------------------------- */ PRIVATE void new_triple_handler (HTRDF * rdfp, HTTriple * t, void * context) { if (rdfp && t) { HTPrint("Received new triple:\n"); if (HTTriple_predicate(t)) HTPrint("\tPredicate: `%s\'\n", HTTriple_predicate(t)); if (HTTriple_subject(t)) HTPrint("\tSubject : `%s\'\n", HTTriple_subject(t)); if (HTTriple_object(t)) HTPrint("\tObject : `%s\'\n", HTTriple_object(t)); HTPrint("\n"); } } PRIVATE void new_parser_handler (HTStream * me, HTRequest * request, HTFormat target_format, HTStream * target_stream, HTRDF * rdfparser, void * context) { HTPrint("Received new RDF parser instance %p\n", rdfparser); if (rdfparser) { /* Remember the new RDF instance */ rdf_parser = rdfparser; /* Register own triple callback just to follow what is going on */ HTRDF_registerNewTripleCallback (rdf_parser, new_triple_handler, NULL); } } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } /* ------------------------------------------------------------------------- */ PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } int main (int argc, char ** argv) { char * uri = NULL; char * cwd = HTGetCurrentDirectoryURL(); /* Create a new premptive client */ HTProfile_newHTMLNoCacheClient ("ParseRDF", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Set trace messages */ #if 0 HTSetTraceMessageMask("sopx"); #endif /* Add our own termination filter */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Setup a timeout on the request for 15 secs */ HTHost_setEventTimeout(15000); /* Handle command line args */ if (argc >= 2) uri = HTParse(argv[1], cwd, PARSE_ALL); HT_FREE(cwd); /* Set up our RDF To Triple conveter stream */ HTFormat_addConversion("text/rdf", "*/*", HTRDFParser_new, 1.0, 0.0, 0.0); /* Set our new RDF parser instance callback */ HTRDF_registerNewParserCallback (new_parser_handler, NULL); if (uri) { HTRequest * request = HTRequest_new(); HTAnchor * anchor = HTAnchor_findAddress(uri); BOOL status = NO; /* Start the GET request */ status = HTLoadAnchor(anchor, request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } else { HTPrint("Type the URI to parse\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example:\n"); HTPrint("\t%s http://www.yoursite.com/your.rdf\n", argv[0]); } return 0; } libwww/Library/Examples/put.c0100644000076400001440000000560606701156142015720 0ustar danielusers/* ** @(#) $Id: put.c,v 1.7 2025/04/02 15:04:02 frystyk Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to PUT a document to an HTTP server */ #include "WWWLib.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTAnchor * src = NULL; HTAnchor * dst = NULL; char * src_str = NULL; char * dst_str = NULL; BOOL status = NO; /* Create a new premptive client */ HTProfile_newNoCacheClient("libwww-PUT", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* And the traces... */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own filter to update the history list */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Handle command line args */ if (argc >= 3) { src_str = argv[1]; dst_str = argv[2]; } else { HTPrint("Type the URI of the source and the URI of the destination.\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example, %s http://www.w3.org http://myserver/destination.html\n", argv[0]); return -1; } if (src_str && *src_str && dst_str && *dst_str) { /* Make source relative to where we are */ char * cwd = HTGetCurrentDirectoryURL(); char * full_src_str = HTParse(src_str, cwd, PARSE_ALL); HTPrint("Saving %s to %s\n", full_src_str, dst_str); /* Create a request */ request = HTRequest_new(); /* Get an anchor object for the src and dest URIs */ src = HTAnchor_findAddress(full_src_str); dst = HTAnchor_findAddress(dst_str); /* PUT the source to the dest */ status = HTPutDocumentAnchor(HTAnchor_parent(src), dst, request); /* We don't need these anymore */ HT_FREE(cwd); HT_FREE(full_src_str); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } return 0; } libwww/Library/Examples/range.c0100644000076400001440000000774306664565432016226 0ustar danielusers/* ** @(#) $Id: range.c,v 1.6 2025/02/23 17:53:30 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Issues a range request to an HTTP server and saves the result in a chunk */ #include "WWWLib.h" #include "WWWInit.h" PRIVATE HTChunk * result = NULL; PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { if (status == HT_PARTIAL_CONTENT) { HTAssocList * ranges = HTResponse_range(response); if (ranges) { HTAssoc * pres; BOOL first = YES; while ((pres = (HTAssoc *) HTAssocList_nextObject(ranges))) { if (first) { HTPrint("Ranges received: "); first = NO; } else HTPrint(", "); HTPrint("%s %s", HTAssoc_value(pres) ? HTAssoc_value(pres) : "", HTAssoc_value(pres) ? HTAssoc_name(pres) : ""); } } } else if (status == HT_LOADED) HTPrint("Total length of document: %ld", HTResponse_length(response)); if (result && HTChunk_data(result)) { fprintf(stdout, "%s", HTChunk_data(result)); HTChunk_delete(result); } /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTAnchor * anchor = NULL; char * range_unit = NULL; HTChunk * ranges = NULL; char * uri = NULL; /* Create a new premptive client */ HTProfile_newNoCacheClient("RangeApp", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to update the history list */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Set trace messages and alert messages*/ #if 0 HTSetTraceMessageMask("sop"); #endif HTAlert_setInteractive(NO); /* Setup a timeout on the request for 15 secs */ HTHost_setEventTimeout(15000); /* Handle command line args */ if (argc >= 3) { int arg; uri = argv[1]; range_unit = argv[2]; for (arg=3; arg 1*(range-set)\n", argv[0]); HTPrint("where\n"); HTPrint("\trange-unit = bytes | token\n"); HTPrint("\trange-set = (first-byte-pos - [last-byte-pos]) | - suffix-length\n"); HTPrint("For example:\n"); HTPrint("\t%s http://www.w3.org bytes \"0-499\" \"1000-1499\" \"-10\"\n", argv[0]); } return 0; } libwww/Library/Examples/rdf_parse_buffer.c0100644000076400001440000001015507153202444020400 0ustar danielusers/* ** @(#) $Id: rdf_parse_buffer.c,v 1.4 2025/08/30 12:59:16 barstow Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-2000 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Test case for the HTRDF_parseBuffer API. One or more files ** are given via the command line and for each file, it is opened, ** its contents are stored in a buffer and then the API is ** called. Each buffer's triples are output to stdout. ** ** Author: Arthur Barstow */ #include "WWWXML.h" /* * Handle new triple events */ PRIVATE void new_triple_handler (HTRDF * rdfp, HTTriple * t, void * context) { if (rdfp && t) { HTPrint("Received new triple:\n"); if (HTTriple_predicate(t)) HTPrint("\tPredicate: `%s\'\n", HTTriple_predicate(t)); if (HTTriple_subject(t)) HTPrint("\tSubject : `%s\'\n", HTTriple_subject(t)); if (HTTriple_object(t)) HTPrint("\tObject : `%s\'\n", HTTriple_object(t)); HTPrint("\n"); } } /* * Given a file, open it and read all of its contents into a buffer * and then return the buffer and it length. * *@param file_name the name of the file *@param ret_buff MODIFIED the buffer to be filled *@param ret_length MODIFIED the length of the buffer *@return NULL if the file the buffer is successfully processed; otherwise * a pointer to a static error message is returned. */ PRIVATE char * parse_buffer(const char *file_name, char **ret_buff, int *ret_length) { char tmp_buff[512]; FILE *fp; *ret_buff = NULL; *ret_length = 0; /* If the file does not exist, return now */ fp = fopen (file_name, "r"); if (!fp) /* annotation index file doesn't exist */ return "File open failed"; for (;;) { int done; int buff_len; (void) fgets(tmp_buff, sizeof(tmp_buff), fp); if (ferror(fp)) { (void) fclose (fp); return "Error reading file"; } done = feof(fp); if (done) buff_len = 0; else buff_len = strlen (tmp_buff); *ret_length = *ret_length + buff_len; if (*ret_buff == NULL) { if (buff_len > 0) { *ret_buff = HT_MALLOC(buff_len + 1); if (!*ret_buff) { (void) fclose (fp); return "Malloc failure"; } (void) strcpy (*ret_buff, tmp_buff); } } else { if (buff_len > 0) { *ret_buff = HT_REALLOC(*ret_buff, (*ret_length) + 1); if (!*ret_buff) { (void) fclose (fp); return "Malloc failure"; } (void) strcat (*ret_buff, tmp_buff); } } if (done) break; } /* Cleanup */ (void) fclose (fp); } /* * For each file given on the command line, open it, read its * contents into a buffer and then invoke the RDF parser on the * buffer. */ int main (int argc, char ** argv) { BOOL status; char *msg; char *buffer = NULL; int buff_len = 0; int i; if (argc <= 1) { (void) fprintf(stderr, "Usage: %s file_name(s)_to_parse\n", argv[0]); return 1; } for (i=1; i < argc; i++) { msg = parse_buffer(argv[i], &buffer, &buff_len); if (!msg) { status = HTRDF_parseBuffer(buffer, argv[i], buff_len, new_triple_handler, NULL); if (!status) (void) fprintf (stderr, "ERROR parsing the buffer from file: '%s'\n", argv[i]); } else (void) fprintf (stderr, "ERROR creating the buffer: '%s'\n", msg); } return 0; } libwww/Library/Examples/rdf_parse_file.c0100644000076400001440000000366207153202415020051 0ustar danielusers/* ** @(#) $Id: rdf_parse_file.c,v 1.4 2025/08/30 12:58:53 barstow Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-2000 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Parses one or more files of RDF and for each file, its RDF triples ** are output. ** Test case for the HTRDF_parseFile API. One or more files ** are given via the command line and each file is sent to ** the RDF parser. ** ** Author: Arthur Barstow */ #include "WWWXML.h" /* * Handle new triple events */ PRIVATE void new_triple_handler (HTRDF * rdfp, HTTriple * t, void * context) { if (rdfp && t) { HTPrint("Received new triple:\n"); if (HTTriple_predicate(t)) HTPrint("\tPredicate: `%s\'\n", HTTriple_predicate(t)); if (HTTriple_subject(t)) HTPrint("\tSubject : `%s\'\n", HTTriple_subject(t)); if (HTTriple_object(t)) HTPrint("\tObject : `%s\'\n", HTTriple_object(t)); HTPrint("\n"); } } /* * For each file given on the command line, invoke the RDF parser on the * file. */ int main (int argc, char ** argv) { BOOL status; int i; if (argc <= 1) { (void) fprintf(stderr, "Usage: %s file_name(s)_to_parse\n", argv[0]); return 1; } for (i=1; i < argc; i++) { status = HTRDF_parseFile(argv[i], new_triple_handler, NULL); if (!status) (void) fprintf (stderr, "An error occured parsing: '%s'\n", argv[i]); } return 0; } libwww/Library/Examples/showlinks.c0100644000076400001440000000645306666514443017146 0ustar danielusers/* ** @(#) $Id: showlinks.c,v 1.2 2025/03/01 13:41:55 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Parses a HTML document and prints out all the embedded links to stdout */ #include "WWWLib.h" #include "WWWInit.h" #include "WWWHTML.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } PRIVATE void foundLink (HText * text, int element_number, int attribute_number, HTChildAnchor * anchor, const BOOL * present, const char ** value) { if (anchor) { /* ** Find out which link we got. The anchor we are passed is ** a child anchor of the anchor we are current parsing. We ** have to go from this child anchor to the actual destination. */ HTAnchor * dest = HTAnchor_followMainLink((HTAnchor *) anchor); char * address = HTAnchor_address(dest); HTPrint("Found link `%s\'\n", address); HT_FREE(address); } } int main (int argc, char ** argv) { char * uri = NULL; /* Create a new premptive client */ HTProfile_newHTMLNoCacheClient ("ShowLinks", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Set trace messages and alert messages */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own termination filter */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* ** Register our HTML link handler. We don't actually create a HText ** object as this is not needed. We only register the specific link ** callback. */ HText_registerLinkCallback(foundLink); /* Setup a timeout on the request for 15 secs */ HTHost_setEventTimeout(15000); /* Handle command line args */ if (argc >= 2) uri = HTParse(argv[1], NULL, PARSE_ALL); if (uri) { HTRequest * request = NULL; HTAnchor * anchor = NULL; BOOL status = NO; /* Create a request */ request = HTRequest_new(); /* Get an anchor object for the URI */ anchor = HTAnchor_findAddress(uri); /* Issue the GET and store the result in a chunk */ status = HTLoadAnchor(anchor, request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } else { HTPrint("Type the URI to print out a list of embedded links\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example:\n"); HTPrint("\t%s http://www.w3.org\n", argv[0]); } return 0; } libwww/Library/Examples/showtags.c0100644000076400001440000001011106667321444016744 0ustar danielusers/* ** @(#) $Id: showtags.c,v 1.3 2025/03/03 21:01:24 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Parses a HTML document and prints out all the embedded links to stdout */ #include "WWWLib.h" #include "WWWInit.h" #include "WWWHTML.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } PRIVATE void beginElement (HText * text, int element_number, const BOOL * present, const char ** value) { SGML_dtd * dtd = HTML_dtd(); HTTag * tag = SGML_findTag(dtd, element_number); if (tag) { char * tagname = HTTag_name(tag); int maxcnt = HTTag_attributes(tag); BOOL found = NO; int cnt; HTPrint("Begin element: <%s> with attributes:", tagname ? tagname : ""); for (cnt=0; cnt"); if (value[cnt]) HTPrint("=\"%s\"", value[cnt]); } } if (!found) HTPrint(" none"); } HTPrint("\n"); } PRIVATE void endElement (HText * text, int element_number) { SGML_dtd * dtd = HTML_dtd(); char * tagname = SGML_findTagName(dtd, element_number); HTPrint("End element: \n", tagname ? tagname : ""); } PRIVATE void unparsedBeginElement (HText * text, const char * buf, int len) { if (buf) HTPrint("Unknown begin: <%s>\n", buf); } PRIVATE void unparsedEndElement (HText * text, const char * buf, int len) { if (buf) HTPrint("Unknown end: \n", buf); } int main (int argc, char ** argv) { char * uri = NULL; /* Create a new premptive client */ HTProfile_newHTMLNoCacheClient ("ShowTags", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own termination filter */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* ** Register our HTML element handlers. We don't actually create a HText ** object as this is not needed. We only register the specific link ** callback. */ HText_registerElementCallback(beginElement, endElement); HText_registerUnparsedElementCallback(unparsedBeginElement, unparsedEndElement); /* Set trace messages and alert messages */ #if 0 HTSetTraceMessageMask("sop"); #endif HTAlert_setInteractive(NO); /* Setup a timeout on the request for 15 secs */ HTHost_setEventTimeout(15000); /* Handle command line args */ if (argc >= 2) uri = HTParse(argv[1], NULL, PARSE_ALL); if (uri) { HTRequest * request = NULL; HTAnchor * anchor = NULL; BOOL status = NO; /* Create a request */ request = HTRequest_new(); /* Get an anchor object for the URI */ anchor = HTAnchor_findAddress(uri); /* Issue the GET and store the result in a chunk */ status = HTLoadAnchor(anchor, request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } else { HTPrint("Type the URI to print out a list of embedded links\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example:\n"); HTPrint("\t%s http://www.w3.org\n", argv[0]); } return 0; } libwww/Library/Examples/showtext.c0100644000076400001440000000554406666514443017012 0ustar danielusers/* ** @(#) $Id: showtext.c,v 1.2 2025/03/01 13:41:55 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Parses a HTML document and prints out all the text ASIS stdout */ #include "WWWLib.h" #include "WWWInit.h" #include "WWWHTML.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } PRIVATE void addText (HText * text, const char * buf, int len) { if (buf) fwrite(buf, 1, len, stdout); } int main (int argc, char ** argv) { char * uri = NULL; /* Create a new premptive client */ HTProfile_newHTMLNoCacheClient ("ShowTags", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Set trace messages and alert messages */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own termination filter */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* ** Register our HTML element handler. We don't actually create a HText ** object as this is not needed. We only register the specific link ** callback. */ HText_registerTextCallback(addText); /* Setup a timeout on the request for 15 secs */ HTHost_setEventTimeout(15000); /* Handle command line args */ if (argc >= 2) uri = HTParse(argv[1], NULL, PARSE_ALL); if (uri) { HTRequest * request = NULL; HTAnchor * anchor = NULL; BOOL status = NO; /* Create a request */ request = HTRequest_new(); /* Get an anchor object for the URI */ anchor = HTAnchor_findAddress(uri); /* Issue the GET and store the result in a chunk */ status = HTLoadAnchor(anchor, request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } else { printf("Type the URI to print out a list of embedded links\n"); printf("\t%s \n", argv[0]); printf("For example:\n"); printf("\t%s http://www.w3.org\n", argv[0]); } return 0; } libwww/Library/Examples/showxml.c0100644000076400001440000002156706706437776016641 0ustar danielusers/* ** @(#) $Id: showxml.c,v 1.4 2025/04/18 20:26:38 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Parses an XNL element using libwww and expat */ #include "WWWLib.h" #include "WWWInit.h" #include "WWWXML.h" /* ------------------------------------------------------------------------- */ /* EXPAT HANDLERS */ /* ------------------------------------------------------------------------- */ PRIVATE void XML_startElement (void * userData, const XML_Char * name, const XML_Char ** atts) { HTPrint("Start....... %s\n", name ? name : ""); } PRIVATE void XML_endElement (void * userData, const XML_Char * name) { HTPrint("End......... %s\n", name ? name : ""); } PRIVATE void XML_characterData (void * userData, const XML_Char * s, int len) { return; } PRIVATE void XML_processingInstruction (void * userData, const XML_Char * target, const XML_Char * data) { return; } /* ** This is called for any characters in the XML document for ** which there is no applicable handler. This includes both ** characters that are part of markup which is of a kind that is ** not reported (comments, markup declarations), or characters ** that are part of a construct which could be reported but ** for which no handler has been supplied. The characters are passed ** exactly as they were in the XML document except that ** they will be encoded in UTF-8. Line boundaries are not normalized. ** Note that a byte order mark character is not passed to the default handler. ** If a default handler is set, internal entity references ** are not expanded. There are no guarantees about ** how characters are divided between calls to the default handler: ** for example, a comment might be split between multiple calls. */ PRIVATE void XML_default (void * userData, const XML_Char * s, int len) { return; } /* ** This is called for a declaration of an unparsed (NDATA) ** entity. The base argument is whatever was set by XML_SetBase. ** The entityName, systemId and notationName arguments will never be null. ** The other arguments may be. */ PRIVATE void XML_unparsedEntityDecl (void * userData, const XML_Char * entityName, const XML_Char * base, const XML_Char * systemId, const XML_Char * publicId, const XML_Char * notationName) { return; } /* ** This is called for a declaration of notation. ** The base argument is whatever was set by XML_SetBase. ** The notationName will never be null. The other arguments can be. */ PRIVATE void XML_notationDecl (void * userData, const XML_Char * notationName, const XML_Char * base, const XML_Char * systemId, const XML_Char * publicId) { return; } /* ** This is called for a reference to an external parsed general entity. ** The referenced entity is not automatically parsed. ** The application can parse it immediately or later using ** XML_ExternalEntityParserCreate. ** The parser argument is the parser parsing the entity containing the reference; ** it can be passed as the parser argument to XML_ExternalEntityParserCreate. ** The systemId argument is the system identifier as specified in the entity ** declaration; it will not be null. ** The base argument is the system identifier that should be used as the base for ** resolving systemId if systemId was relative; this is set by XML_SetBase; ** it may be null. ** The publicId argument is the public identifier as specified in the entity declaration, ** or null if none was specified; the whitespace in the public identifier ** will have been normalized as required by the XML spec. ** The openEntityNames argument is a space-separated list of the names of the entities ** that are open for the parse of this entity (including the name of the referenced ** entity); this can be passed as the openEntityNames argument to ** XML_ExternalEntityParserCreate; openEntityNames is valid only until the handler ** returns, so if the referenced entity is to be parsed later, it must be copied. ** The handler should return 0 if processing should not continue because of ** a fatal error in the handling of the external entity. ** In this case the calling parser will return an XML_ERROR_EXTERNAL_ENTITY_HANDLING ** error. ** Note that unlike other handlers the first argument is the parser, not userData. */ PRIVATE int XML_externalEntityRef (XML_Parser parser, const XML_Char * openEntityNames, const XML_Char * base, const XML_Char * systemId, const XML_Char * publicId) { return 0; } /* ** This is called for an encoding that is unknown to the parser. ** The encodingHandlerData argument is that which was passed as the ** second argument to XML_SetUnknownEncodingHandler. ** The name argument gives the name of the encoding as specified in ** the encoding declaration. ** If the callback can provide information about the encoding, ** it must fill in the XML_Encoding structure, and return 1. ** Otherwise it must return 0. ** If info does not describe a suitable encoding, ** then the parser will return an XML_UNKNOWN_ENCODING error. */ PRIVATE int XML_unknownEncoding (void * encodingHandlerData, const XML_Char * name, XML_Encoding * info) { return 0; } /* ------------------------------------------------------------------------- */ /* HTXML STREAM HANDLERS */ /* ------------------------------------------------------------------------- */ PRIVATE void HTXML_setHandlers (XML_Parser me) { XML_SetElementHandler(me, XML_startElement, XML_endElement); XML_SetCharacterDataHandler(me, XML_characterData); XML_SetProcessingInstructionHandler(me, XML_processingInstruction); XML_SetDefaultHandler(me, XML_default); XML_SetUnparsedEntityDeclHandler(me, XML_unparsedEntityDecl); XML_SetNotationDeclHandler(me, XML_notationDecl); XML_SetExternalEntityRefHandler(me, XML_externalEntityRef); XML_SetUnknownEncodingHandler(me, XML_unknownEncoding, NULL); } PRIVATE void HTXML_newInstance (HTStream * me, HTRequest * request, HTFormat target_format, HTStream * target_stream, XML_Parser xmlparser, void * context) { if (me && xmlparser) HTXML_setHandlers(xmlparser); } /* ------------------------------------------------------------------------- */ /* LIBWWW FILTERS */ /* ------------------------------------------------------------------------- */ PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); HTPrint("If you didn't see any tags then it is likely that your document wasn't xml\n"); /* Terminate libwww */ HTProfile_delete(); exit(0); } /* ------------------------------------------------------------------------- */ PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } int main (int argc, char ** argv) { char * uri = NULL; /* Create a new premptive client */ HTProfile_newHTMLNoCacheClient ("ShowXML", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Set trace messages */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own termination filter */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Register our new XML Instance handler */ HTXMLCallback_registerNew (HTXML_newInstance, NULL); /* Setup a timeout on the request for 15 secs */ HTHost_setEventTimeout(15000); /* Handle command line args */ if (argc >= 2) uri = HTParse(argv[1], NULL, PARSE_ALL); if (uri) { HTRequest * request = NULL; HTAnchor * anchor = NULL; BOOL status = NO; /* Create a request */ request = HTRequest_new(); /* Get an anchor object for the URI */ anchor = HTAnchor_findAddress(uri); /* Issue the GET and store the result in a chunk */ status = HTLoadAnchor(anchor, request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } else { HTPrint("Type the URI to parse\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example:\n"); HTPrint("\t%s http://www.yoursite.com/your.xml\n", argv[0]); } return 0; } libwww/Library/Examples/stri.c0100644000076400001440000000607106706453456016103 0ustar danielusers/* ** @(#) $Id: stri.c,v 1.3 2025/04/18 22:05:34 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Parses RDF triples and spits out RDF triples. Example RDF files can be ** found in the ./RDF folder and at "http://www.w3.org/Library/Examples/RDF" ** ** Author: John Punin */ #include "WWWLib.h" #include "WWWInit.h" #include "WWWXML.h" /* ------------------------------------------------------------------------- */ /* LIBWWW FILTERS */ /* ------------------------------------------------------------------------- */ PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } /* ------------------------------------------------------------------------- */ PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } int main (int argc, char ** argv) { char * uri = NULL; char * cwd = HTGetCurrentDirectoryURL(); /* Create a new premptive client */ HTProfile_newHTMLNoCacheClient ("ShowRDFTriples", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Set trace messages */ #if 0 HTSetTraceMessageMask("sopx"); #endif /* Add our own termination filter */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Setup a timeout on the request for 15 secs */ HTHost_setEventTimeout(15000); /* Set up our RDF To Triple conveter stream */ HTFormat_addConversion("text/rdf", "*/*", HTRDFToTriples, 1.0, 0.0, 0.0); /* Handle command line args */ if (argc >= 2) uri = HTParse(argv[1], cwd, PARSE_ALL); HT_FREE(cwd); if (uri) { HTRequest * request = HTRequest_new(); HTAnchor * anchor = HTAnchor_findAddress(uri); BOOL status = NO; /* Set the output stream to stdout */ HTRequest_setOutputStream(request, HTFWriter_new(request, stdout, NO)); /* Start the GET request */ status = HTLoadAnchor(anchor, request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } else { HTPrint("Type the URI to parse\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example:\n"); HTPrint("\t%s http://www.yoursite.com/your.rdf\n", argv[0]); } return 0; } libwww/Library/Examples/tiny.c0100644000076400001440000003162006666514443016102 0ustar danielusers/* ** @(#) $Id: tiny.c,v 1.5 2025/03/01 13:41:55 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** A very simple event loop demo showing how to write an event driven ** libwww app and also how to use various contexts and the HTML parser ** ** Compile libwww with these flags: ** CFLAGS='-DLIBWWW_SMALL -DNODEBUG -O2' ** if you want to use the persistent cache and ** CFLAGS='-DLIBWWW_SMALL -DNODEBUG -O2 -DNO_CACHE' ** if not */ #include "WWWLib.h" #include "WWWMIME.h" #include "WWWHTTP.h" #include "HTTCP.h" #include "HTSocket.h" #include "HTReader.h" #include "HTWriter.h" #include "HTBufWrt.h" #include "HTML.h" #include "HText.h" #include "HTEvtLst.h" #ifndef W3C_VERSION #define W3C_VERSION "Unspecified" #endif #define APP_NAME "w3c-tiny" #define APP_VERSION W3C_VERSION #define DEFAULT_HOME "http://www.w3.org/Library/" struct _HText { HTParentAnchor * parent; HTList * kids; /* List of anchors found in this document */ }; typedef struct _App { HTRequest * console_request; HTEvent * console_event; HTList * active; /* List of active contexts */ HText * current; /* Current document */ } App; PRIVATE HTList * documents = NULL; PRIVATE HTEventCallback console_parser; PRIVATE HTNetAfter request_terminater; /* Our HTML parser callbacks */ PRIVATE HText_new text_new; PRIVATE HText_delete text_delete; PRIVATE HText_build text_build; PRIVATE HText_foundLink text_link; PRIVATE HText_addText text_add; /* ------------------------------------------------------------------------- */ /* LIBWWW SETUP */ /* ------------------------------------------------------------------------- */ PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE void mime_setup (void) { struct { char * string; HTParserCallback * pHandler; } fixedHandlers[] = { {"accept", &HTMIME_accept}, {"accept-charset", &HTMIME_acceptCharset}, {"accept-encoding", &HTMIME_acceptEncoding}, {"accept-language", &HTMIME_acceptLanguage}, {"accept-ranges", &HTMIME_acceptRanges}, {"authorization", NULL}, {"cache-control", &HTMIME_cacheControl}, {"connection", &HTMIME_connection}, {"content-encoding", &HTMIME_contentEncoding}, {"content-length", &HTMIME_contentLength}, {"content-range", &HTMIME_contentRange}, {"content-transfer-encoding", &HTMIME_contentTransferEncoding}, {"content-type", &HTMIME_contentType}, {"digest-MessageDigest", &HTMIME_messageDigest}, {"keep-alive", &HTMIME_keepAlive}, {"link", &HTMIME_link}, {"location", &HTMIME_location}, {"max-forwards", &HTMIME_maxForwards}, {"mime-version", NULL}, {"pragma", &HTMIME_pragma}, {"protocol", &HTMIME_protocol}, {"protocol-info", &HTMIME_protocolInfo}, {"protocol-request", &HTMIME_protocolRequest}, {"proxy-authenticate", &HTMIME_authenticate}, {"proxy-authorization", &HTMIME_proxyAuthorization}, {"public", &HTMIME_public}, {"range", &HTMIME_range}, {"referer", &HTMIME_referer}, {"retry-after", &HTMIME_retryAfter}, {"server", &HTMIME_server}, {"trailer", &HTMIME_trailer}, {"transfer-encoding", &HTMIME_transferEncoding}, {"upgrade", &HTMIME_upgrade}, {"user-agent", &HTMIME_userAgent}, {"vary", &HTMIME_vary}, {"via", &HTMIME_via}, {"warning", &HTMIME_warning}, {"www-authenticate", &HTMIME_authenticate}, {"authentication-info", &HTMIME_authenticationInfo}, {"proxy-authentication-info", &HTMIME_proxyAuthenticationInfo} }; int i; for (i = 0; i < sizeof(fixedHandlers)/sizeof(fixedHandlers[0]); i++) HTHeader_addParser(fixedHandlers[i].string, NO, fixedHandlers[i].pHandler); } /* ** This is normally done by the libwww profiles but because we are more ** careful only taking the things we need, we do it by hand */ PRIVATE void libwww_setup (void) { /* Set up TCP as transport */ HTTransport_add("buffered_tcp", HT_TP_SINGLE, HTReader_new, HTBufferWriter_new); /* Set up HTTP as protocol */ HTProtocol_add("http", "buffered_tcp", 80, NO, HTLoadHTTP, NULL); /* Setup up transfer coders */ HTFormat_addTransferCoding("chunked", HTChunkedEncoder, HTChunkedDecoder, 1.0); /* Setup MIME stream converters */ HTFormat_addConversion("message/rfc822", "*/*", HTMIMEConvert, 1.0, 0.0, 0.0); HTFormat_addConversion("message/x-rfc822-foot", "*/*", HTMIMEFooter, 1.0, 0.0, 0.0); HTFormat_addConversion("message/x-rfc822-head", "*/*", HTMIMEHeader, 1.0, 0.0, 0.0); HTFormat_addConversion("message/x-rfc822-cont", "*/*", HTMIMEContinue, 1.0, 0.0, 0.0); HTFormat_addConversion("message/x-rfc822-partial","*/*", HTMIMEPartial, 1.0, 0.0, 0.0); HTFormat_addConversion("multipart/*", "*/*", HTBoundary, 1.0, 0.0, 0.0); /* Setup HTTP protocol stream */ HTFormat_addConversion("text/x-http", "*/*", HTTPStatus_new, 1.0, 0.0, 0.0); /* Setup the HTML parser */ HTFormat_addConversion("text/html", "www/present", HTMLPresent, 1.0, 0.0, 0.0); /* Setup blackhole stream */ HTFormat_addConversion("*/*", "www/debug", HTBlackHoleConverter, 1.0, 0.0, 0.0); HTFormat_addConversion("*/*", "www/present", HTBlackHoleConverter, 0.3, 0.0, 0.0); /* Set max number of sockets we want open simultanously */ HTNet_setMaxSocket(32); /* Register our HTML parser callbacks */ HText_registerCDCallback (text_new, text_delete); HText_registerBuildCallback (text_build); HText_registerTextCallback(text_add); HText_registerLinkCallback (text_link); /* Register the default set of MIME header parsers */ mime_setup(); /* Set up default event loop */ HTEventInit(); } PRIVATE void libwww_terminate (void) { /* Clean up all the global preferences */ HTFormat_deleteAll(); /* Terminate libwww */ HTLibTerminate(); } /* ------------------------------------------------------------------------- */ /* HTML Parser callbacks */ /* ------------------------------------------------------------------------- */ PRIVATE HText * text_new (HTRequest * request, HTParentAnchor * anchor, HTStream * output_stream) { App * app = (App *) HTRequest_context(request); HText * me; if ((me = (HText *) HT_CALLOC(1, sizeof(HText))) == NULL) HT_OUTOFMEM("HText_new"); me->parent = anchor; /* Add to our list of HText objects */ if (!documents) documents = HTList_new(); HTList_addObject(documents, me); /* Associate this object with the anchor object */ HTAnchor_setDocument(anchor, me); /* Now this is the current HText */ if (app && app->current) text_delete(app->current); app->current = me; return me; } PRIVATE BOOL text_delete (HText * me) { if (me) { /* Disassociate from anchor */ HTAnchor_setDocument(me->parent, NULL); /* Delete the object */ if (me->kids) HTList_delete(me->kids); HT_FREE(me); return YES; } return NO; } PRIVATE void text_build (HText * me, HTextStatus status) { if (status==HTEXT_END || status==HTEXT_ABORT) { int kids = HTList_count(me->kids); HTPrint("\n"); if (kids > 0) HTPrint("\nHit a number between [0..%d]: ", kids-1); else HTPrint("\nNo links found\n"); } } PRIVATE void text_add (HText * me, const char * buf, int len) { if (buf) fwrite(buf, 1, len, stdout); } PRIVATE void text_link (HText * me, int element_number, int attribute_number, HTChildAnchor * anchor, const BOOL * present, const char ** value) { if (me && anchor) { if (element_number == HTML_A) { if (!me->kids) me->kids = HTList_new(); HTList_appendObject(me->kids, anchor); HTPrint("[%d]", HTList_count(me->kids)-1); } else if (element_number == HTML_IMG) { if (present[HTML_IMG_ALT] && value[HTML_IMG_ALT]) HTPrint("<%s>", value[HTML_IMG_ALT]); else HTPrint(""); } } } PRIVATE HTAnchor * text_findAnchor (HText * me, int index) { if (me && me->kids) { HTAnchor * anchor = HTList_objectAt(me->kids, index); HTLink * link = HTAnchor_mainLink(anchor); return HTLink_destination(link); } return NULL; } /* ------------------------------------------------------------------------- */ /* THE TINY APPLICATION */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL get_document (HTRequest * request, HTAnchor * anchor) { char * address = HTAnchor_address(anchor); HTPrint("fetching %s\n", address); HT_FREE(address); HTRequest_setAnchor(request, anchor); return HTLoad(request, NO); } PRIVATE HTRequest * Request_new (App * app) { HTRequest * request = HTRequest_new(); if (!app->active) app->active = HTList_new(); HTList_addObject(app->active, request); HTRequest_setContext(request, app); return request; } PRIVATE BOOL Request_delete (App * app, HTRequest * request) { if (app && app->active && request) { /* Remove from our list of requests */ HTList_removeObject(app->active, request); /* Delete the object */ HTRequest_delete(request); return YES; } return NO; } PRIVATE App * App_new (void) { App * me = NULL; if ((me = (App *) HT_CALLOC(1, sizeof(App))) == NULL) HT_OUTOFMEM("App_new"); me->console_request = HTRequest_new(); me->console_event = HTEvent_new(console_parser, me, HT_PRIORITY_MAX, -1); me->active = HTList_new(); /* Register stdin as our console */ #ifdef STDIN_FILENO if (isatty(STDIN_FILENO)) HTEventList_register(STDIN_FILENO, HTEvent_READ, me->console_event); #endif return me; } PRIVATE BOOL App_delete (App * me) { if (me) { if (me->active) HTList_delete(me->active); /* Kill any remaining active requests */ HTNet_killAll(); /* Now do the rest of the cleanup */ HTRequest_delete(me->console_request); HT_FREE(me); /* Terminate libwww */ libwww_terminate(); exit(0); } return NO; } /* ------------------------------------------------------------------------- */ PRIVATE int console_parser (SOCKET s, void * param, HTEventType type) { App * app = (App *) param; HTRequest * new_request = NULL; HTAnchor * anchor = NULL; int index = 0; char buf[32]; if (!fgets(buf, sizeof(buf), stdin)) return HT_ERROR; buf[sizeof(buf)-1] = '\0'; switch (TOUPPER(buf[0])) { case 'Q': /* Quit program ? */ App_delete(app); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': index = atoi(buf); new_request = Request_new(app); if (app->current && (anchor = text_findAnchor(app->current, index))) get_document(new_request, anchor); else HTPrint("Index out of range - try again\n"); break; default: HTPrint("Unknown command - type a number of 'q' for quit\n"); } return HT_OK; } PRIVATE int request_terminater (HTRequest * request, HTResponse * response, void * param, int status) { App * app = (App *) param; if (status!=HT_LOADED) HTPrint("Load couldn't be completed successfully\n"); Request_delete(app, request); return HT_OK; } /* ------------------------------------------------------------------------- */ int main (int argc, char ** argv) { App * app = NULL; HTRequest * request = NULL; HTAnchor * anchor = NULL; /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Handle command line args */ if (argc >= 2) { char * uri = HTParse(argv[1], NULL, PARSE_ALL); if ((anchor = HTAnchor_findAddress(uri)) == NULL) anchor = HTAnchor_findAddress(DEFAULT_HOME); HT_FREE(uri); } else { HTPrint("Type the URI of the first page you want to load\n"); HTPrint("\t%s
    \n", argv[0]); HTPrint("For example, %s http://www.w3.org\n", argv[0]); return -1; } #if 0 HTSetTraceMessageMask("sop"); #endif /* Initiate libwww */ libwww_setup(); /* Create a new app obect */ app = App_new(); /* Add our own request terminate handler */ HTNet_addAfter(request_terminater, NULL, app, HT_ALL, HT_FILTER_LAST); /* Start the first request */ request = Request_new(app); get_document(request, anchor); /* Go into the event loop... */ HTEventList_newLoop(); App_delete(app); return 0; } libwww/Library/Examples/trace.c0100644000076400001440000000613406666514443016217 0ustar danielusers/* ** @(#) $Id: trace.c,v 1.6 2025/03/01 13:41:55 frystyk Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to use a TRACE request */ #include "WWWLib.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTAnchor * dst = NULL; char * dst_str = NULL; int max_forward = 1; BOOL status = NO; /* Create a new premptive client */ HTProfile_newNoCacheClient("libwww-TRACE", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Handle command line args */ if (argc >= 3) { dst_str = argv[1]; max_forward = atoi(argv[2]); if (max_forward<0 || max_forward>10) max_forward=1; } else { HTPrint("Type the URI of the destination you want to TRACE and the max number of hops you want to try\n"); HTPrint("\t%s \n", argv[0]); HTPrint("For example, %s http://www.w3.org 2\n", argv[0]); return -1; } if (dst_str && *dst_str) { /* Make source relative to where we are */ char * cwd = HTGetCurrentDirectoryURL(); HTPrint("Tracing request to %s with %d number of hops\n", dst_str, max_forward); /* Create a request */ request = HTRequest_new(); /* We don't wany any progress notification or other user stuff */ HTAlert_setInteractive(YES); /* Set the output format to source and put output to stdout */ HTRequest_setOutputFormat(request, WWW_SOURCE); HTRequest_setOutputStream(request, HTFWriter_new(request, stdout, YES)); /* Set the max forwards */ HTRequest_setMaxForwards(request, max_forward); /* Get an anchor object for the destination URI */ dst = HTAnchor_findAddress(dst_str); /* POST the source to the dest */ status = HTTraceAnchor(dst, request); /* We don't need these anymore */ HT_FREE(cwd); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } return 0; } libwww/Library/Examples/tzcheck.c0100644000076400001440000000203006666514443016543 0ustar danielusers/* ** @(#) $Id: tzcheck.c,v 1.4 2025/03/01 13:41:55 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Simply prints the timezone reported by the system */ #include "WWWLib.h" #include "WWWInit.h" int main (int argc, char ** argv) { time_t t = 0; HTLibInit("test","1.0"); t = HTGetTimeZoneOffset(); fprintf(stderr, "Timezone offset is %ld seconds or %ld hours\n", t, t/3600); HTLibTerminate(); return 0; } libwww/Library/Examples/upgrade.c0100644000076400001440000000556606666514443016560 0ustar danielusers/* ** @(#) $Id: upgrade.c,v 1.2 2025/03/01 13:41:55 frystyk Exp $ ** ** Other libwww samples can be found at "http://www.w3.org/Library/Examples" ** ** Copyright (c© 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Shows how the HTTP 101 Switching Protocol status code can be used in libwww ** If this program receives a 101 status code then it stops parsing HTTP and ** writes everything ASIS to stdout. */ #include "WWWLib.h" #include "WWWInit.h" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTAnchor * anchor = NULL; char * uri = NULL; /* Create a new premptive client */ HTProfile_newNoCacheClient("UpgradeApp", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Set trace messages and alert messages*/ #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own AFTER filter to terminate the app */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Don't ask - don't tell */ HTAlert_setInteractive(NO); /* Setup a timeout on the request for 15 secs */ HTHost_setEventTimeout(15000); /* Handle command line args */ if (argc >= 2) uri = argv[1]; if (uri && *uri) { /* Create a request */ request = HTRequest_new(); /* Get an anchor object for the URI */ anchor = HTAnchor_findAddress(uri); /* Get the source stream asis */ HTRequest_setOutputFormat(request, WWW_SOURCE); /* Get the source stream asis */ HTRequest_setOutputStream(request, HTFWriter_new(request, stdout, YES)); /* Issue the GET */ if (HTLoadAnchor(anchor, request)) { /* Go into the event loop... */ HTEventList_newLoop(); } } else { HTPrint("Type the URI to get (to test for upgrade).\n"); HTPrint("If an 101 Switching Protocols status is recieved\n"); HTPrint("then print everything following to stdout.\n\n"); HTPrint("\t%s \n", argv[0]); } return 0; } libwww/Library/Examples/wwwssl.c0100644000076400001440000000775707142520154016465 0ustar danielusers/* ** @(#) $Id: wwwssl.c,v 1.3 2025/08/04 10:52:28 kahan Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to use libwww with ssl */ #include "WWWLib.h" /* Global Library Include file */ #include "WWWMIME.h" /* MIME parser/generator */ #include "WWWNews.h" /* News access module */ #include "WWWHTTP.h" /* HTTP access module */ #include "WWWFTP.h" #include "WWWFile.h" #include "WWWGophe.h" #include "WWWInit.h" #include "WWWSSL.h" #define APP_NAME "libwww-ssl" #define APP_VERSION "1.0" #define DEFAULT_OUTPUT_FILE "get.out" PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } /* ** We get called here from the event loop when we are done ** loading. Here we terminate the program as we have nothing ** better to do. */ int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* Delete our request again */ HTRequest_delete(request); /* Close down SSL */ HTSSLhttps_terminate(); /* Delete our profile */ HTProfile_delete(); exit(status ? status : 0); } int main (int argc, char ** argv) { int status = 0; int arg = 0; char * outputfile = NULL; char * getme = NULL; HTRequest * request = NULL; /* Initiate W3C Reference Library with a client profile */ HTProfile_newNoCacheClient(APP_NAME, APP_VERSION); /* And the traces... */ #if 1 HTSetTraceMessageMask("sop"); #endif /* Set the SSL protocol method. By default, it is the highest available protocol. Setting it up to SSL_V23 allows the client to negotiate with the server and set up either TSLv1, SSLv3, or SSLv2 */ HTSSL_protMethod_set (HTSSL_V23); /* Set the certificate verification depth to 2 in order to be able to validate self signed certificates */ HTSSL_verifyDepth_set (2); /* Register SSL stuff for handling ssl access */ HTSSLhttps_init(YES); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to terminate the application */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Set the timeout for long we are going to wait for a response */ HTHost_setEventTimeout(10000); /* Scan command line for parameters */ for (arg=1; arg -o \n", argv[0]); HTPrint("For example, %s http://www.w3.org -o w3chome.html\n", argv[0]); /* Delete our profile if no load */ HTProfile_delete(); } return 0; } libwww/Library/Examples/Makefile0100644000076400001440000010554207405520572016410 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ noinst_PROGRAMS = head libapp_1 libapp_2 libapp_3 libapp_4 init chunk chunkbody LoadToFile postform multichunk put post trace range tzcheck mget isredirected listen eventloop memput getheaders showlinks showtags showtext tiny upgrade cookie showxml ptri stri rdf_parse_file rdf_parse_buffer EXTRA_PROGRAMS = showxml ptri stri wwwssl rdf_parse_file rdf_parse_buffer LDADD = ../src/libwwwinit.la ../src/libwwwapp.la ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la -lm ${top_builddir}/modules/md5/libmd5.la INCLUDES = -I$(srcdir)/../src -I$(top_srcdir)/modules/expat/xmlparse -I$(srcdir)/../src/SSL DOCS := $(wildcard *.html) EXTRA_DIST = $(DOCS) PURIFY_CACHE = /tmp/purify.cache mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = noinst_PROGRAMS = head$(EXEEXT) libapp_1$(EXEEXT) libapp_2$(EXEEXT) \ libapp_3$(EXEEXT) libapp_4$(EXEEXT) init$(EXEEXT) chunk$(EXEEXT) \ chunkbody$(EXEEXT) LoadToFile$(EXEEXT) postform$(EXEEXT) \ multichunk$(EXEEXT) put$(EXEEXT) post$(EXEEXT) trace$(EXEEXT) \ range$(EXEEXT) tzcheck$(EXEEXT) mget$(EXEEXT) isredirected$(EXEEXT) \ listen$(EXEEXT) eventloop$(EXEEXT) memput$(EXEEXT) getheaders$(EXEEXT) \ showlinks$(EXEEXT) showtags$(EXEEXT) showtext$(EXEEXT) tiny$(EXEEXT) \ upgrade$(EXEEXT) cookie$(EXEEXT) showxml ptri stri rdf_parse_file rdf_parse_buffer PROGRAMS = $(noinst_PROGRAMS) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../.. CPPFLAGS = LDFLAGS = LIBS = -ldl showxml_SOURCES = showxml.c showxml_OBJECTS = showxml.o showxml_LDADD = $(LDADD) showxml_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la showxml_LDFLAGS = ptri_SOURCES = ptri.c ptri_OBJECTS = ptri.o ptri_LDADD = $(LDADD) ptri_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la ptri_LDFLAGS = stri_SOURCES = stri.c stri_OBJECTS = stri.o stri_LDADD = $(LDADD) stri_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la stri_LDFLAGS = wwwssl_SOURCES = wwwssl.c wwwssl_OBJECTS = wwwssl.o wwwssl_LDADD = $(LDADD) wwwssl_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la wwwssl_LDFLAGS = rdf_parse_file_SOURCES = rdf_parse_file.c rdf_parse_file_OBJECTS = rdf_parse_file.o rdf_parse_file_LDADD = $(LDADD) rdf_parse_file_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la rdf_parse_file_LDFLAGS = rdf_parse_buffer_SOURCES = rdf_parse_buffer.c rdf_parse_buffer_OBJECTS = rdf_parse_buffer.o rdf_parse_buffer_LDADD = $(LDADD) rdf_parse_buffer_DEPENDENCIES = ../src/libwwwinit.la \ ../src/libwwwapp.la ../src/libwwwhtml.la ../src/libwwwtelnet.la \ ../src/libwwwnews.la ../src/libwwwhttp.la ../src/libwwwmime.la \ ../src/libwwwgopher.la ../src/libwwwftp.la ../src/libwwwdir.la \ ../src/libwwwcache.la ../src/libwwwstream.la ../src/libwwwfile.la \ ../src/libwwwmux.la ../src/libwwwtrans.la ../src/libwwwcore.la \ ../src/libwwwutils.la rdf_parse_buffer_LDFLAGS = head_SOURCES = head.c head_OBJECTS = head.o head_LDADD = $(LDADD) head_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la head_LDFLAGS = libapp_1_SOURCES = libapp_1.c libapp_1_OBJECTS = libapp_1.o libapp_1_LDADD = $(LDADD) libapp_1_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la libapp_1_LDFLAGS = libapp_2_SOURCES = libapp_2.c libapp_2_OBJECTS = libapp_2.o libapp_2_LDADD = $(LDADD) libapp_2_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la libapp_2_LDFLAGS = libapp_3_SOURCES = libapp_3.c libapp_3_OBJECTS = libapp_3.o libapp_3_LDADD = $(LDADD) libapp_3_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la libapp_3_LDFLAGS = libapp_4_SOURCES = libapp_4.c libapp_4_OBJECTS = libapp_4.o libapp_4_LDADD = $(LDADD) libapp_4_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la libapp_4_LDFLAGS = init_SOURCES = init.c init_OBJECTS = init.o init_LDADD = $(LDADD) init_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la init_LDFLAGS = chunk_SOURCES = chunk.c chunk_OBJECTS = chunk.o chunk_LDADD = $(LDADD) chunk_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la chunk_LDFLAGS = chunkbody_SOURCES = chunkbody.c chunkbody_OBJECTS = chunkbody.o chunkbody_LDADD = $(LDADD) chunkbody_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la chunkbody_LDFLAGS = LoadToFile_SOURCES = LoadToFile.c LoadToFile_OBJECTS = LoadToFile.o LoadToFile_LDADD = $(LDADD) LoadToFile_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la LoadToFile_LDFLAGS = postform_SOURCES = postform.c postform_OBJECTS = postform.o postform_LDADD = $(LDADD) postform_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la postform_LDFLAGS = multichunk_SOURCES = multichunk.c multichunk_OBJECTS = multichunk.o multichunk_LDADD = $(LDADD) multichunk_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la multichunk_LDFLAGS = put_SOURCES = put.c put_OBJECTS = put.o put_LDADD = $(LDADD) put_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la put_LDFLAGS = post_SOURCES = post.c post_OBJECTS = post.o post_LDADD = $(LDADD) post_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la post_LDFLAGS = trace_SOURCES = trace.c trace_OBJECTS = trace.o trace_LDADD = $(LDADD) trace_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la trace_LDFLAGS = range_SOURCES = range.c range_OBJECTS = range.o range_LDADD = $(LDADD) range_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la range_LDFLAGS = tzcheck_SOURCES = tzcheck.c tzcheck_OBJECTS = tzcheck.o tzcheck_LDADD = $(LDADD) tzcheck_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la tzcheck_LDFLAGS = mget_SOURCES = mget.c mget_OBJECTS = mget.o mget_LDADD = $(LDADD) mget_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la mget_LDFLAGS = isredirected_SOURCES = isredirected.c isredirected_OBJECTS = isredirected.o isredirected_LDADD = $(LDADD) isredirected_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la isredirected_LDFLAGS = listen_SOURCES = listen.c listen_OBJECTS = listen.o listen_LDADD = $(LDADD) listen_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la listen_LDFLAGS = eventloop_SOURCES = eventloop.c eventloop_OBJECTS = eventloop.o eventloop_LDADD = $(LDADD) eventloop_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la eventloop_LDFLAGS = memput_SOURCES = memput.c memput_OBJECTS = memput.o memput_LDADD = $(LDADD) memput_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la memput_LDFLAGS = getheaders_SOURCES = getheaders.c getheaders_OBJECTS = getheaders.o getheaders_LDADD = $(LDADD) getheaders_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la getheaders_LDFLAGS = showlinks_SOURCES = showlinks.c showlinks_OBJECTS = showlinks.o showlinks_LDADD = $(LDADD) showlinks_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la showlinks_LDFLAGS = showtags_SOURCES = showtags.c showtags_OBJECTS = showtags.o showtags_LDADD = $(LDADD) showtags_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la showtags_LDFLAGS = showtext_SOURCES = showtext.c showtext_OBJECTS = showtext.o showtext_LDADD = $(LDADD) showtext_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la showtext_LDFLAGS = tiny_SOURCES = tiny.c tiny_OBJECTS = tiny.o tiny_LDADD = $(LDADD) tiny_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la tiny_LDFLAGS = upgrade_SOURCES = upgrade.c upgrade_OBJECTS = upgrade.o upgrade_LDADD = $(LDADD) upgrade_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la upgrade_LDFLAGS = cookie_SOURCES = cookie.c cookie_OBJECTS = cookie.o cookie_LDADD = $(LDADD) cookie_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la cookie_LDFLAGS = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/LoadToFile.P .deps/chunk.P .deps/chunkbody.P \ .deps/cookie.P .deps/eventloop.P .deps/getheaders.P .deps/head.P \ .deps/init.P .deps/isredirected.P .deps/libapp_1.P .deps/libapp_2.P \ .deps/libapp_3.P .deps/libapp_4.P .deps/listen.P .deps/memput.P \ .deps/mget.P .deps/multichunk.P .deps/post.P .deps/postform.P \ .deps/ptri.P .deps/put.P .deps/range.P .deps/rdf_parse_buffer.P \ .deps/rdf_parse_file.P .deps/showlinks.P .deps/showtags.P \ .deps/showtext.P .deps/showxml.P .deps/stri.P .deps/tiny.P \ .deps/trace.P .deps/tzcheck.P .deps/upgrade.P .deps/wwwssl.P SOURCES = showxml.c ptri.c stri.c wwwssl.c rdf_parse_file.c rdf_parse_buffer.c head.c libapp_1.c libapp_2.c libapp_3.c libapp_4.c init.c chunk.c chunkbody.c LoadToFile.c postform.c multichunk.c put.c post.c trace.c range.c tzcheck.c mget.c isredirected.c listen.c eventloop.c memput.c getheaders.c showlinks.c showtags.c showtext.c tiny.c upgrade.c cookie.c OBJECTS = showxml.o ptri.o stri.o wwwssl.o rdf_parse_file.o rdf_parse_buffer.o head.o libapp_1.o libapp_2.o libapp_3.o libapp_4.o init.o chunk.o chunkbody.o LoadToFile.o postform.o multichunk.o put.o post.o trace.o range.o tzcheck.o mget.o isredirected.o listen.o eventloop.o memput.o getheaders.o showlinks.o showtags.o showtext.o tiny.o upgrade.o cookie.o all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/Examples/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstPROGRAMS: clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) distclean-noinstPROGRAMS: maintainer-clean-noinstPROGRAMS: .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: showxml$(EXEEXT): $(showxml_OBJECTS) $(showxml_DEPENDENCIES) @rm -f showxml$(EXEEXT) $(LINK) $(showxml_LDFLAGS) $(showxml_OBJECTS) $(showxml_LDADD) $(LIBS) ptri$(EXEEXT): $(ptri_OBJECTS) $(ptri_DEPENDENCIES) @rm -f ptri$(EXEEXT) $(LINK) $(ptri_LDFLAGS) $(ptri_OBJECTS) $(ptri_LDADD) $(LIBS) stri$(EXEEXT): $(stri_OBJECTS) $(stri_DEPENDENCIES) @rm -f stri$(EXEEXT) $(LINK) $(stri_LDFLAGS) $(stri_OBJECTS) $(stri_LDADD) $(LIBS) wwwssl$(EXEEXT): $(wwwssl_OBJECTS) $(wwwssl_DEPENDENCIES) @rm -f wwwssl$(EXEEXT) $(LINK) $(wwwssl_LDFLAGS) $(wwwssl_OBJECTS) $(wwwssl_LDADD) $(LIBS) rdf_parse_file$(EXEEXT): $(rdf_parse_file_OBJECTS) $(rdf_parse_file_DEPENDENCIES) @rm -f rdf_parse_file$(EXEEXT) $(LINK) $(rdf_parse_file_LDFLAGS) $(rdf_parse_file_OBJECTS) $(rdf_parse_file_LDADD) $(LIBS) rdf_parse_buffer$(EXEEXT): $(rdf_parse_buffer_OBJECTS) $(rdf_parse_buffer_DEPENDENCIES) @rm -f rdf_parse_buffer$(EXEEXT) $(LINK) $(rdf_parse_buffer_LDFLAGS) $(rdf_parse_buffer_OBJECTS) $(rdf_parse_buffer_LDADD) $(LIBS) head$(EXEEXT): $(head_OBJECTS) $(head_DEPENDENCIES) @rm -f head$(EXEEXT) $(LINK) $(head_LDFLAGS) $(head_OBJECTS) $(head_LDADD) $(LIBS) libapp_1$(EXEEXT): $(libapp_1_OBJECTS) $(libapp_1_DEPENDENCIES) @rm -f libapp_1$(EXEEXT) $(LINK) $(libapp_1_LDFLAGS) $(libapp_1_OBJECTS) $(libapp_1_LDADD) $(LIBS) libapp_2$(EXEEXT): $(libapp_2_OBJECTS) $(libapp_2_DEPENDENCIES) @rm -f libapp_2$(EXEEXT) $(LINK) $(libapp_2_LDFLAGS) $(libapp_2_OBJECTS) $(libapp_2_LDADD) $(LIBS) libapp_3$(EXEEXT): $(libapp_3_OBJECTS) $(libapp_3_DEPENDENCIES) @rm -f libapp_3$(EXEEXT) $(LINK) $(libapp_3_LDFLAGS) $(libapp_3_OBJECTS) $(libapp_3_LDADD) $(LIBS) libapp_4$(EXEEXT): $(libapp_4_OBJECTS) $(libapp_4_DEPENDENCIES) @rm -f libapp_4$(EXEEXT) $(LINK) $(libapp_4_LDFLAGS) $(libapp_4_OBJECTS) $(libapp_4_LDADD) $(LIBS) init$(EXEEXT): $(init_OBJECTS) $(init_DEPENDENCIES) @rm -f init$(EXEEXT) $(LINK) $(init_LDFLAGS) $(init_OBJECTS) $(init_LDADD) $(LIBS) chunk$(EXEEXT): $(chunk_OBJECTS) $(chunk_DEPENDENCIES) @rm -f chunk$(EXEEXT) $(LINK) $(chunk_LDFLAGS) $(chunk_OBJECTS) $(chunk_LDADD) $(LIBS) chunkbody$(EXEEXT): $(chunkbody_OBJECTS) $(chunkbody_DEPENDENCIES) @rm -f chunkbody$(EXEEXT) $(LINK) $(chunkbody_LDFLAGS) $(chunkbody_OBJECTS) $(chunkbody_LDADD) $(LIBS) LoadToFile$(EXEEXT): $(LoadToFile_OBJECTS) $(LoadToFile_DEPENDENCIES) @rm -f LoadToFile$(EXEEXT) $(LINK) $(LoadToFile_LDFLAGS) $(LoadToFile_OBJECTS) $(LoadToFile_LDADD) $(LIBS) postform$(EXEEXT): $(postform_OBJECTS) $(postform_DEPENDENCIES) @rm -f postform$(EXEEXT) $(LINK) $(postform_LDFLAGS) $(postform_OBJECTS) $(postform_LDADD) $(LIBS) multichunk$(EXEEXT): $(multichunk_OBJECTS) $(multichunk_DEPENDENCIES) @rm -f multichunk$(EXEEXT) $(LINK) $(multichunk_LDFLAGS) $(multichunk_OBJECTS) $(multichunk_LDADD) $(LIBS) put$(EXEEXT): $(put_OBJECTS) $(put_DEPENDENCIES) @rm -f put$(EXEEXT) $(LINK) $(put_LDFLAGS) $(put_OBJECTS) $(put_LDADD) $(LIBS) post$(EXEEXT): $(post_OBJECTS) $(post_DEPENDENCIES) @rm -f post$(EXEEXT) $(LINK) $(post_LDFLAGS) $(post_OBJECTS) $(post_LDADD) $(LIBS) trace$(EXEEXT): $(trace_OBJECTS) $(trace_DEPENDENCIES) @rm -f trace$(EXEEXT) $(LINK) $(trace_LDFLAGS) $(trace_OBJECTS) $(trace_LDADD) $(LIBS) range$(EXEEXT): $(range_OBJECTS) $(range_DEPENDENCIES) @rm -f range$(EXEEXT) $(LINK) $(range_LDFLAGS) $(range_OBJECTS) $(range_LDADD) $(LIBS) tzcheck$(EXEEXT): $(tzcheck_OBJECTS) $(tzcheck_DEPENDENCIES) @rm -f tzcheck$(EXEEXT) $(LINK) $(tzcheck_LDFLAGS) $(tzcheck_OBJECTS) $(tzcheck_LDADD) $(LIBS) mget$(EXEEXT): $(mget_OBJECTS) $(mget_DEPENDENCIES) @rm -f mget$(EXEEXT) $(LINK) $(mget_LDFLAGS) $(mget_OBJECTS) $(mget_LDADD) $(LIBS) isredirected$(EXEEXT): $(isredirected_OBJECTS) $(isredirected_DEPENDENCIES) @rm -f isredirected$(EXEEXT) $(LINK) $(isredirected_LDFLAGS) $(isredirected_OBJECTS) $(isredirected_LDADD) $(LIBS) listen$(EXEEXT): $(listen_OBJECTS) $(listen_DEPENDENCIES) @rm -f listen$(EXEEXT) $(LINK) $(listen_LDFLAGS) $(listen_OBJECTS) $(listen_LDADD) $(LIBS) eventloop$(EXEEXT): $(eventloop_OBJECTS) $(eventloop_DEPENDENCIES) @rm -f eventloop$(EXEEXT) $(LINK) $(eventloop_LDFLAGS) $(eventloop_OBJECTS) $(eventloop_LDADD) $(LIBS) memput$(EXEEXT): $(memput_OBJECTS) $(memput_DEPENDENCIES) @rm -f memput$(EXEEXT) $(LINK) $(memput_LDFLAGS) $(memput_OBJECTS) $(memput_LDADD) $(LIBS) getheaders$(EXEEXT): $(getheaders_OBJECTS) $(getheaders_DEPENDENCIES) @rm -f getheaders$(EXEEXT) $(LINK) $(getheaders_LDFLAGS) $(getheaders_OBJECTS) $(getheaders_LDADD) $(LIBS) showlinks$(EXEEXT): $(showlinks_OBJECTS) $(showlinks_DEPENDENCIES) @rm -f showlinks$(EXEEXT) $(LINK) $(showlinks_LDFLAGS) $(showlinks_OBJECTS) $(showlinks_LDADD) $(LIBS) showtags$(EXEEXT): $(showtags_OBJECTS) $(showtags_DEPENDENCIES) @rm -f showtags$(EXEEXT) $(LINK) $(showtags_LDFLAGS) $(showtags_OBJECTS) $(showtags_LDADD) $(LIBS) showtext$(EXEEXT): $(showtext_OBJECTS) $(showtext_DEPENDENCIES) @rm -f showtext$(EXEEXT) $(LINK) $(showtext_LDFLAGS) $(showtext_OBJECTS) $(showtext_LDADD) $(LIBS) tiny$(EXEEXT): $(tiny_OBJECTS) $(tiny_DEPENDENCIES) @rm -f tiny$(EXEEXT) $(LINK) $(tiny_LDFLAGS) $(tiny_OBJECTS) $(tiny_LDADD) $(LIBS) upgrade$(EXEEXT): $(upgrade_OBJECTS) $(upgrade_DEPENDENCIES) @rm -f upgrade$(EXEEXT) $(LINK) $(upgrade_LDFLAGS) $(upgrade_OBJECTS) $(upgrade_LDADD) $(LIBS) cookie$(EXEEXT): $(cookie_OBJECTS) $(cookie_DEPENDENCIES) @rm -f cookie$(EXEEXT) $(LINK) $(cookie_LDFLAGS) $(cookie_OBJECTS) $(cookie_LDADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/Examples distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/Examples/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(PROGRAMS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstPROGRAMS distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean purify: $(mget_OBJECTS) $(mget_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(mget_OBJECTS) \ -lm \ ../src/.libs/libwwwinit.a \ ../src/.libs/libwwwapp.a \ ../src/.libs/libwwwxml.a \ ../src/.libs/libwwwhtml.a \ ../src/.libs/libwwwtelnet.a \ ../src/.libs/libwwwnews.a \ ../src/.libs/libwwwhttp.a \ ../src/.libs/libwwwmime.a \ ../src/.libs/libwwwgopher.a \ ../src/.libs/libwwwftp.a \ ../src/.libs/libwwwdir.a \ ../src/.libs/libwwwcache.a \ ../src/.libs/libwwwstream.a \ ../src/.libs/libwwwfile.a \ ../src/.libs/libwwwmux.a \ ../src/.libs/libwwwtrans.a \ ../src/.libs/libwwwcore.a \ ../src/.libs/libwwwutils.a \ ../src/.libs/libwwwzip.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/Examples/Makefile.in0100644000076400001440000010470407405520525017012 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ noinst_PROGRAMS = head libapp_1 libapp_2 libapp_3 libapp_4 init chunk chunkbody LoadToFile postform multichunk put post trace range tzcheck mget isredirected listen eventloop memput getheaders showlinks showtags showtext tiny upgrade cookie @SHOWXML@ @WWWSSLEX@ EXTRA_PROGRAMS = showxml ptri stri wwwssl rdf_parse_file rdf_parse_buffer LDADD = ../src/libwwwinit.la ../src/libwwwapp.la @LIBWWWXML@ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la @LIBWWWSSL@ -lm @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ INCLUDES = -I$(srcdir)/../src -I$(top_srcdir)/modules/expat/xmlparse -I$(srcdir)/../src/SSL DOCS := $(wildcard *.html) EXTRA_DIST = $(DOCS) PURIFY_CACHE = @PURIFY_CACHE@ mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = noinst_PROGRAMS = head$(EXEEXT) libapp_1$(EXEEXT) libapp_2$(EXEEXT) \ libapp_3$(EXEEXT) libapp_4$(EXEEXT) init$(EXEEXT) chunk$(EXEEXT) \ chunkbody$(EXEEXT) LoadToFile$(EXEEXT) postform$(EXEEXT) \ multichunk$(EXEEXT) put$(EXEEXT) post$(EXEEXT) trace$(EXEEXT) \ range$(EXEEXT) tzcheck$(EXEEXT) mget$(EXEEXT) isredirected$(EXEEXT) \ listen$(EXEEXT) eventloop$(EXEEXT) memput$(EXEEXT) getheaders$(EXEEXT) \ showlinks$(EXEEXT) showtags$(EXEEXT) showtext$(EXEEXT) tiny$(EXEEXT) \ upgrade$(EXEEXT) cookie$(EXEEXT) @SHOWXML@ @WWWSSLEX@ PROGRAMS = $(noinst_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ showxml_SOURCES = showxml.c showxml_OBJECTS = showxml.o showxml_LDADD = $(LDADD) showxml_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la showxml_LDFLAGS = ptri_SOURCES = ptri.c ptri_OBJECTS = ptri.o ptri_LDADD = $(LDADD) ptri_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la ptri_LDFLAGS = stri_SOURCES = stri.c stri_OBJECTS = stri.o stri_LDADD = $(LDADD) stri_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la stri_LDFLAGS = wwwssl_SOURCES = wwwssl.c wwwssl_OBJECTS = wwwssl.o wwwssl_LDADD = $(LDADD) wwwssl_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la wwwssl_LDFLAGS = rdf_parse_file_SOURCES = rdf_parse_file.c rdf_parse_file_OBJECTS = rdf_parse_file.o rdf_parse_file_LDADD = $(LDADD) rdf_parse_file_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la rdf_parse_file_LDFLAGS = rdf_parse_buffer_SOURCES = rdf_parse_buffer.c rdf_parse_buffer_OBJECTS = rdf_parse_buffer.o rdf_parse_buffer_LDADD = $(LDADD) rdf_parse_buffer_DEPENDENCIES = ../src/libwwwinit.la \ ../src/libwwwapp.la ../src/libwwwhtml.la ../src/libwwwtelnet.la \ ../src/libwwwnews.la ../src/libwwwhttp.la ../src/libwwwmime.la \ ../src/libwwwgopher.la ../src/libwwwftp.la ../src/libwwwdir.la \ ../src/libwwwcache.la ../src/libwwwstream.la ../src/libwwwfile.la \ ../src/libwwwmux.la ../src/libwwwtrans.la ../src/libwwwcore.la \ ../src/libwwwutils.la rdf_parse_buffer_LDFLAGS = head_SOURCES = head.c head_OBJECTS = head.o head_LDADD = $(LDADD) head_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la head_LDFLAGS = libapp_1_SOURCES = libapp_1.c libapp_1_OBJECTS = libapp_1.o libapp_1_LDADD = $(LDADD) libapp_1_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la libapp_1_LDFLAGS = libapp_2_SOURCES = libapp_2.c libapp_2_OBJECTS = libapp_2.o libapp_2_LDADD = $(LDADD) libapp_2_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la libapp_2_LDFLAGS = libapp_3_SOURCES = libapp_3.c libapp_3_OBJECTS = libapp_3.o libapp_3_LDADD = $(LDADD) libapp_3_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la libapp_3_LDFLAGS = libapp_4_SOURCES = libapp_4.c libapp_4_OBJECTS = libapp_4.o libapp_4_LDADD = $(LDADD) libapp_4_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la libapp_4_LDFLAGS = init_SOURCES = init.c init_OBJECTS = init.o init_LDADD = $(LDADD) init_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la init_LDFLAGS = chunk_SOURCES = chunk.c chunk_OBJECTS = chunk.o chunk_LDADD = $(LDADD) chunk_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la chunk_LDFLAGS = chunkbody_SOURCES = chunkbody.c chunkbody_OBJECTS = chunkbody.o chunkbody_LDADD = $(LDADD) chunkbody_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la chunkbody_LDFLAGS = LoadToFile_SOURCES = LoadToFile.c LoadToFile_OBJECTS = LoadToFile.o LoadToFile_LDADD = $(LDADD) LoadToFile_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la LoadToFile_LDFLAGS = postform_SOURCES = postform.c postform_OBJECTS = postform.o postform_LDADD = $(LDADD) postform_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la postform_LDFLAGS = multichunk_SOURCES = multichunk.c multichunk_OBJECTS = multichunk.o multichunk_LDADD = $(LDADD) multichunk_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la multichunk_LDFLAGS = put_SOURCES = put.c put_OBJECTS = put.o put_LDADD = $(LDADD) put_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la put_LDFLAGS = post_SOURCES = post.c post_OBJECTS = post.o post_LDADD = $(LDADD) post_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la post_LDFLAGS = trace_SOURCES = trace.c trace_OBJECTS = trace.o trace_LDADD = $(LDADD) trace_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la trace_LDFLAGS = range_SOURCES = range.c range_OBJECTS = range.o range_LDADD = $(LDADD) range_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la range_LDFLAGS = tzcheck_SOURCES = tzcheck.c tzcheck_OBJECTS = tzcheck.o tzcheck_LDADD = $(LDADD) tzcheck_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la tzcheck_LDFLAGS = mget_SOURCES = mget.c mget_OBJECTS = mget.o mget_LDADD = $(LDADD) mget_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la mget_LDFLAGS = isredirected_SOURCES = isredirected.c isredirected_OBJECTS = isredirected.o isredirected_LDADD = $(LDADD) isredirected_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la isredirected_LDFLAGS = listen_SOURCES = listen.c listen_OBJECTS = listen.o listen_LDADD = $(LDADD) listen_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la listen_LDFLAGS = eventloop_SOURCES = eventloop.c eventloop_OBJECTS = eventloop.o eventloop_LDADD = $(LDADD) eventloop_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la eventloop_LDFLAGS = memput_SOURCES = memput.c memput_OBJECTS = memput.o memput_LDADD = $(LDADD) memput_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la memput_LDFLAGS = getheaders_SOURCES = getheaders.c getheaders_OBJECTS = getheaders.o getheaders_LDADD = $(LDADD) getheaders_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la getheaders_LDFLAGS = showlinks_SOURCES = showlinks.c showlinks_OBJECTS = showlinks.o showlinks_LDADD = $(LDADD) showlinks_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la showlinks_LDFLAGS = showtags_SOURCES = showtags.c showtags_OBJECTS = showtags.o showtags_LDADD = $(LDADD) showtags_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la showtags_LDFLAGS = showtext_SOURCES = showtext.c showtext_OBJECTS = showtext.o showtext_LDADD = $(LDADD) showtext_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la showtext_LDFLAGS = tiny_SOURCES = tiny.c tiny_OBJECTS = tiny.o tiny_LDADD = $(LDADD) tiny_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la tiny_LDFLAGS = upgrade_SOURCES = upgrade.c upgrade_OBJECTS = upgrade.o upgrade_LDADD = $(LDADD) upgrade_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la upgrade_LDFLAGS = cookie_SOURCES = cookie.c cookie_OBJECTS = cookie.o cookie_LDADD = $(LDADD) cookie_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwdir.la ../src/libwwwcache.la \ ../src/libwwwstream.la ../src/libwwwfile.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la cookie_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/LoadToFile.P .deps/chunk.P .deps/chunkbody.P \ .deps/cookie.P .deps/eventloop.P .deps/getheaders.P .deps/head.P \ .deps/init.P .deps/isredirected.P .deps/libapp_1.P .deps/libapp_2.P \ .deps/libapp_3.P .deps/libapp_4.P .deps/listen.P .deps/memput.P \ .deps/mget.P .deps/multichunk.P .deps/post.P .deps/postform.P \ .deps/ptri.P .deps/put.P .deps/range.P .deps/rdf_parse_buffer.P \ .deps/rdf_parse_file.P .deps/showlinks.P .deps/showtags.P \ .deps/showtext.P .deps/showxml.P .deps/stri.P .deps/tiny.P \ .deps/trace.P .deps/tzcheck.P .deps/upgrade.P .deps/wwwssl.P SOURCES = showxml.c ptri.c stri.c wwwssl.c rdf_parse_file.c rdf_parse_buffer.c head.c libapp_1.c libapp_2.c libapp_3.c libapp_4.c init.c chunk.c chunkbody.c LoadToFile.c postform.c multichunk.c put.c post.c trace.c range.c tzcheck.c mget.c isredirected.c listen.c eventloop.c memput.c getheaders.c showlinks.c showtags.c showtext.c tiny.c upgrade.c cookie.c OBJECTS = showxml.o ptri.o stri.o wwwssl.o rdf_parse_file.o rdf_parse_buffer.o head.o libapp_1.o libapp_2.o libapp_3.o libapp_4.o init.o chunk.o chunkbody.o LoadToFile.o postform.o multichunk.o put.o post.o trace.o range.o tzcheck.o mget.o isredirected.o listen.o eventloop.o memput.o getheaders.o showlinks.o showtags.o showtext.o tiny.o upgrade.o cookie.o all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/Examples/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstPROGRAMS: clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) distclean-noinstPROGRAMS: maintainer-clean-noinstPROGRAMS: .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: showxml$(EXEEXT): $(showxml_OBJECTS) $(showxml_DEPENDENCIES) @rm -f showxml$(EXEEXT) $(LINK) $(showxml_LDFLAGS) $(showxml_OBJECTS) $(showxml_LDADD) $(LIBS) ptri$(EXEEXT): $(ptri_OBJECTS) $(ptri_DEPENDENCIES) @rm -f ptri$(EXEEXT) $(LINK) $(ptri_LDFLAGS) $(ptri_OBJECTS) $(ptri_LDADD) $(LIBS) stri$(EXEEXT): $(stri_OBJECTS) $(stri_DEPENDENCIES) @rm -f stri$(EXEEXT) $(LINK) $(stri_LDFLAGS) $(stri_OBJECTS) $(stri_LDADD) $(LIBS) wwwssl$(EXEEXT): $(wwwssl_OBJECTS) $(wwwssl_DEPENDENCIES) @rm -f wwwssl$(EXEEXT) $(LINK) $(wwwssl_LDFLAGS) $(wwwssl_OBJECTS) $(wwwssl_LDADD) $(LIBS) rdf_parse_file$(EXEEXT): $(rdf_parse_file_OBJECTS) $(rdf_parse_file_DEPENDENCIES) @rm -f rdf_parse_file$(EXEEXT) $(LINK) $(rdf_parse_file_LDFLAGS) $(rdf_parse_file_OBJECTS) $(rdf_parse_file_LDADD) $(LIBS) rdf_parse_buffer$(EXEEXT): $(rdf_parse_buffer_OBJECTS) $(rdf_parse_buffer_DEPENDENCIES) @rm -f rdf_parse_buffer$(EXEEXT) $(LINK) $(rdf_parse_buffer_LDFLAGS) $(rdf_parse_buffer_OBJECTS) $(rdf_parse_buffer_LDADD) $(LIBS) head$(EXEEXT): $(head_OBJECTS) $(head_DEPENDENCIES) @rm -f head$(EXEEXT) $(LINK) $(head_LDFLAGS) $(head_OBJECTS) $(head_LDADD) $(LIBS) libapp_1$(EXEEXT): $(libapp_1_OBJECTS) $(libapp_1_DEPENDENCIES) @rm -f libapp_1$(EXEEXT) $(LINK) $(libapp_1_LDFLAGS) $(libapp_1_OBJECTS) $(libapp_1_LDADD) $(LIBS) libapp_2$(EXEEXT): $(libapp_2_OBJECTS) $(libapp_2_DEPENDENCIES) @rm -f libapp_2$(EXEEXT) $(LINK) $(libapp_2_LDFLAGS) $(libapp_2_OBJECTS) $(libapp_2_LDADD) $(LIBS) libapp_3$(EXEEXT): $(libapp_3_OBJECTS) $(libapp_3_DEPENDENCIES) @rm -f libapp_3$(EXEEXT) $(LINK) $(libapp_3_LDFLAGS) $(libapp_3_OBJECTS) $(libapp_3_LDADD) $(LIBS) libapp_4$(EXEEXT): $(libapp_4_OBJECTS) $(libapp_4_DEPENDENCIES) @rm -f libapp_4$(EXEEXT) $(LINK) $(libapp_4_LDFLAGS) $(libapp_4_OBJECTS) $(libapp_4_LDADD) $(LIBS) init$(EXEEXT): $(init_OBJECTS) $(init_DEPENDENCIES) @rm -f init$(EXEEXT) $(LINK) $(init_LDFLAGS) $(init_OBJECTS) $(init_LDADD) $(LIBS) chunk$(EXEEXT): $(chunk_OBJECTS) $(chunk_DEPENDENCIES) @rm -f chunk$(EXEEXT) $(LINK) $(chunk_LDFLAGS) $(chunk_OBJECTS) $(chunk_LDADD) $(LIBS) chunkbody$(EXEEXT): $(chunkbody_OBJECTS) $(chunkbody_DEPENDENCIES) @rm -f chunkbody$(EXEEXT) $(LINK) $(chunkbody_LDFLAGS) $(chunkbody_OBJECTS) $(chunkbody_LDADD) $(LIBS) LoadToFile$(EXEEXT): $(LoadToFile_OBJECTS) $(LoadToFile_DEPENDENCIES) @rm -f LoadToFile$(EXEEXT) $(LINK) $(LoadToFile_LDFLAGS) $(LoadToFile_OBJECTS) $(LoadToFile_LDADD) $(LIBS) postform$(EXEEXT): $(postform_OBJECTS) $(postform_DEPENDENCIES) @rm -f postform$(EXEEXT) $(LINK) $(postform_LDFLAGS) $(postform_OBJECTS) $(postform_LDADD) $(LIBS) multichunk$(EXEEXT): $(multichunk_OBJECTS) $(multichunk_DEPENDENCIES) @rm -f multichunk$(EXEEXT) $(LINK) $(multichunk_LDFLAGS) $(multichunk_OBJECTS) $(multichunk_LDADD) $(LIBS) put$(EXEEXT): $(put_OBJECTS) $(put_DEPENDENCIES) @rm -f put$(EXEEXT) $(LINK) $(put_LDFLAGS) $(put_OBJECTS) $(put_LDADD) $(LIBS) post$(EXEEXT): $(post_OBJECTS) $(post_DEPENDENCIES) @rm -f post$(EXEEXT) $(LINK) $(post_LDFLAGS) $(post_OBJECTS) $(post_LDADD) $(LIBS) trace$(EXEEXT): $(trace_OBJECTS) $(trace_DEPENDENCIES) @rm -f trace$(EXEEXT) $(LINK) $(trace_LDFLAGS) $(trace_OBJECTS) $(trace_LDADD) $(LIBS) range$(EXEEXT): $(range_OBJECTS) $(range_DEPENDENCIES) @rm -f range$(EXEEXT) $(LINK) $(range_LDFLAGS) $(range_OBJECTS) $(range_LDADD) $(LIBS) tzcheck$(EXEEXT): $(tzcheck_OBJECTS) $(tzcheck_DEPENDENCIES) @rm -f tzcheck$(EXEEXT) $(LINK) $(tzcheck_LDFLAGS) $(tzcheck_OBJECTS) $(tzcheck_LDADD) $(LIBS) mget$(EXEEXT): $(mget_OBJECTS) $(mget_DEPENDENCIES) @rm -f mget$(EXEEXT) $(LINK) $(mget_LDFLAGS) $(mget_OBJECTS) $(mget_LDADD) $(LIBS) isredirected$(EXEEXT): $(isredirected_OBJECTS) $(isredirected_DEPENDENCIES) @rm -f isredirected$(EXEEXT) $(LINK) $(isredirected_LDFLAGS) $(isredirected_OBJECTS) $(isredirected_LDADD) $(LIBS) listen$(EXEEXT): $(listen_OBJECTS) $(listen_DEPENDENCIES) @rm -f listen$(EXEEXT) $(LINK) $(listen_LDFLAGS) $(listen_OBJECTS) $(listen_LDADD) $(LIBS) eventloop$(EXEEXT): $(eventloop_OBJECTS) $(eventloop_DEPENDENCIES) @rm -f eventloop$(EXEEXT) $(LINK) $(eventloop_LDFLAGS) $(eventloop_OBJECTS) $(eventloop_LDADD) $(LIBS) memput$(EXEEXT): $(memput_OBJECTS) $(memput_DEPENDENCIES) @rm -f memput$(EXEEXT) $(LINK) $(memput_LDFLAGS) $(memput_OBJECTS) $(memput_LDADD) $(LIBS) getheaders$(EXEEXT): $(getheaders_OBJECTS) $(getheaders_DEPENDENCIES) @rm -f getheaders$(EXEEXT) $(LINK) $(getheaders_LDFLAGS) $(getheaders_OBJECTS) $(getheaders_LDADD) $(LIBS) showlinks$(EXEEXT): $(showlinks_OBJECTS) $(showlinks_DEPENDENCIES) @rm -f showlinks$(EXEEXT) $(LINK) $(showlinks_LDFLAGS) $(showlinks_OBJECTS) $(showlinks_LDADD) $(LIBS) showtags$(EXEEXT): $(showtags_OBJECTS) $(showtags_DEPENDENCIES) @rm -f showtags$(EXEEXT) $(LINK) $(showtags_LDFLAGS) $(showtags_OBJECTS) $(showtags_LDADD) $(LIBS) showtext$(EXEEXT): $(showtext_OBJECTS) $(showtext_DEPENDENCIES) @rm -f showtext$(EXEEXT) $(LINK) $(showtext_LDFLAGS) $(showtext_OBJECTS) $(showtext_LDADD) $(LIBS) tiny$(EXEEXT): $(tiny_OBJECTS) $(tiny_DEPENDENCIES) @rm -f tiny$(EXEEXT) $(LINK) $(tiny_LDFLAGS) $(tiny_OBJECTS) $(tiny_LDADD) $(LIBS) upgrade$(EXEEXT): $(upgrade_OBJECTS) $(upgrade_DEPENDENCIES) @rm -f upgrade$(EXEEXT) $(LINK) $(upgrade_LDFLAGS) $(upgrade_OBJECTS) $(upgrade_LDADD) $(LIBS) cookie$(EXEEXT): $(cookie_OBJECTS) $(cookie_DEPENDENCIES) @rm -f cookie$(EXEEXT) $(LINK) $(cookie_LDFLAGS) $(cookie_OBJECTS) $(cookie_LDADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/Examples distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/Examples/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(PROGRAMS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstPROGRAMS distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean purify: $(mget_OBJECTS) $(mget_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(mget_OBJECTS) \ -lm \ ../src/.libs/libwwwinit.a \ ../src/.libs/libwwwapp.a \ ../src/.libs/libwwwxml.a \ ../src/.libs/libwwwhtml.a \ ../src/.libs/libwwwtelnet.a \ ../src/.libs/libwwwnews.a \ ../src/.libs/libwwwhttp.a \ ../src/.libs/libwwwmime.a \ ../src/.libs/libwwwgopher.a \ ../src/.libs/libwwwftp.a \ ../src/.libs/libwwwdir.a \ ../src/.libs/libwwwcache.a \ ../src/.libs/libwwwstream.a \ ../src/.libs/libwwwfile.a \ ../src/.libs/libwwwmux.a \ ../src/.libs/libwwwtrans.a \ ../src/.libs/libwwwcore.a \ ../src/.libs/libwwwutils.a \ ../src/.libs/libwwwzip.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/Examples/.deps/0040755000076400001440000000000007405521206015750 5ustar danieluserslibwww/Library/Examples/.deps/listen.P0100644000076400001440000002503607405521165017376 0ustar danieluserslisten.o: listen.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h listen.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/head.P0100644000076400001440000002503007405521140016764 0ustar danielusershead.o: head.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWApp.h ../src/HTEvtLst.h ../src/HTHome.h ../src/HTDialog.h \ ../src/HTAccess.h ../src/HTRules.h ../src/HTProxy.h ../src/HTFilter.h \ ../src/HTLog.h ../src/HTHist.h ../src/WWWInit.h ../src/HTInit.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h head.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/init.P0100644000076400001440000002503007405521145017033 0ustar danielusersinit.o: init.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h init.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/libapp_1.P0100644000076400001440000001633007405521141017556 0ustar danieluserslibapp_1.o: libapp_1.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h libapp_1.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : libwww/Library/Examples/.deps/libapp_2.P0100644000076400001440000002504407405521142017562 0ustar danieluserslibapp_2.o: libapp_2.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h libapp_2.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/libapp_3.P0100644000076400001440000002504407405521143017564 0ustar danieluserslibapp_3.o: libapp_3.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWStream.h ../src/HTConLen.h ../src/HTFWrite.h ../src/HTFSave.h \ ../src/HTGuess.h ../src/HTTee.h ../src/HTMerge.h ../src/HTSChunk.h \ ../src/HTXParse.h ../src/HTReader.h ../src/HTEPtoCl.h ../src/HTNetTxt.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTWriter.h ../src/HTBufWrt.h ../src/WWWHTTP.h \ ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h ../src/HTTPGen.h \ ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h ../src/HTPEP.h \ ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h ../src/WWWFile.h \ ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h ../src/HTBInit.h \ ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h ../src/WWWGophe.h \ ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h ../src/WWWNews.h \ ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h ../src/HTNDir.h \ ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h ../src/HTMIMERq.h \ ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h ../src/WWWHTML.h \ ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h ../src/HTTeXGen.h \ ../src/HTPlain.h ../src/HTML.h ../src/HText.h ../src/HTHInit.h \ ../src/HTStyle.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h libapp_3.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTReader.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/libapp_4.P0100644000076400001440000002504407405521144017566 0ustar danieluserslibapp_4.o: libapp_4.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h libapp_4.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/chunk.P0100644000076400001440000002503307405521147017205 0ustar danieluserschunk.o: chunk.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h chunk.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/LoadToFile.P0100644000076400001440000002505207405521151020053 0ustar danielusersLoadToFile.o: LoadToFile.c ../src/WWWLib.h ../src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h ../src/HTMIMERq.h \ ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h ../src/WWWNews.h \ ../src/HTNews.h ../src/HTNewsRq.h ../src/HTAccess.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h \ ../src/HTTPServ.h ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h \ ../src/HTTChunk.h ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h \ ../src/HTCookie.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWInit.h \ ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h ../src/HTHome.h \ ../src/HTDialog.h ../src/HTRules.h ../src/HTProxy.h ../src/HTFilter.h \ ../src/HTLog.h ../src/HTHist.h ../src/WWWTrans.h ../src/HTANSI.h \ ../src/HTLocal.h ../src/HTTCP.h ../src/HTSocket.h ../src/HTReader.h \ ../src/HTWriter.h ../src/HTBufWrt.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h LoadToFile.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTAccess.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/chunkbody.P0100644000076400001440000002504707405521150020062 0ustar danieluserschunkbody.o: chunkbody.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h chunkbody.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/multichunk.P0100644000076400001440000002505207405521154020257 0ustar danielusersmultichunk.o: multichunk.c ../src/WWWLib.h ../src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWApp.h ../src/HTEvtLst.h ../src/HTHome.h ../src/HTDialog.h \ ../src/HTAccess.h ../src/HTRules.h ../src/HTProxy.h ../src/HTFilter.h \ ../src/HTLog.h ../src/HTHist.h ../src/WWWInit.h ../src/HTInit.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h multichunk.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/postform.P0100644000076400001440000002504407405521152017744 0ustar danieluserspostform.o: postform.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h postform.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/put.P0100644000076400001440000002502507405521155016705 0ustar danielusersput.o: put.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h put.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/post.P0100644000076400001440000002503007405521156017057 0ustar danieluserspost.o: post.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h post.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/trace.P0100644000076400001440000002503307405521157017174 0ustar danieluserstrace.o: trace.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h trace.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/range.P0100644000076400001440000002503307405521160017164 0ustar danielusersrange.o: range.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h range.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/mget.P0100644000076400001440000002503007405521163017024 0ustar danielusersmget.o: mget.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h mget.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/tzcheck.P0100644000076400001440000002504107405521162017524 0ustar danieluserstzcheck.o: tzcheck.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h tzcheck.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/rdf_parse_file.P0100644000076400001440000001574407405521205021044 0ustar danielusersrdf_parse_file.o: rdf_parse_file.c ../src/WWWXML.h ../src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/HTXML.h ../src/HTFormat.h ../src/HTUtils.h ../src/HTMemory.h \ ../src/HTStream.h ../src/HTList.h ../src/HTArray.h ../src/HTAtom.h \ ../src/HTAnchor.h ../src/WWWUtil.h ../src/HTAssoc.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTEvent.h ../src/HTReq.h ../src/HTError.h \ ../src/HTNet.h ../src/HTTrans.h ../src/HTIOStream.h ../src/HTChannl.h \ ../src/HTHost.h ../src/HTProt.h ../src/HTTimer.h ../src/HTDNS.h \ ../src/HTUser.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h rdf_parse_file.c : ../src/WWWXML.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/HTXML.h : ../src/HTFormat.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTStream.h : ../src/HTList.h : ../src/HTArray.h : ../src/HTAtom.h : ../src/HTAnchor.h : ../src/WWWUtil.h : ../src/HTAssoc.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTEvent.h : ../src/HTReq.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTUser.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : libwww/Library/Examples/.deps/isredirected.P0100644000076400001440000002506007405521164020542 0ustar danielusersisredirected.o: isredirected.c ../src/WWWLib.h ../src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h isredirected.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/eventloop.P0100644000076400001440000002504707405521167020117 0ustar danieluserseventloop.o: eventloop.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h eventloop.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/memput.P0100644000076400001440000002503607405521170017403 0ustar danielusersmemput.o: memput.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h memput.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/getheaders.P0100644000076400001440000002505207405521171020206 0ustar danielusersgetheaders.o: getheaders.c ../src/WWWLib.h ../src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWApp.h ../src/HTEvtLst.h ../src/HTHome.h ../src/HTDialog.h \ ../src/HTAccess.h ../src/HTRules.h ../src/HTProxy.h ../src/HTFilter.h \ ../src/HTLog.h ../src/HTHist.h ../src/WWWInit.h ../src/HTInit.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h getheaders.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/showlinks.P0100644000076400001440000002504707405521172020121 0ustar danielusersshowlinks.o: showlinks.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h showlinks.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/showtags.P0100644000076400001440000002504407405521173017735 0ustar danielusersshowtags.o: showtags.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h showtags.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/showtext.P0100644000076400001440000002504407405521175017765 0ustar danielusersshowtext.o: showtext.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h showtext.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/tiny.P0100644000076400001440000002040007405521176017053 0ustar danieluserstiny.o: tiny.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h ../src/HTMIMERq.h \ ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h ../src/WWWHTTP.h \ ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h ../src/HTTPGen.h \ ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h ../src/HTPEP.h \ ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/HTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HText.h \ ../src/HTEvtLst.h tiny.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/HTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HText.h : ../src/HTEvtLst.h : libwww/Library/Examples/.deps/upgrade.P0100644000076400001440000002504107405521177017526 0ustar danielusersupgrade.o: upgrade.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h upgrade.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/cookie.P0100644000076400001440000002503607405521200017337 0ustar danieluserscookie.o: cookie.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h ../src/HTMIMERq.h \ ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h ../src/WWWNews.h \ ../src/HTNews.h ../src/HTNewsRq.h ../src/HTAccess.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h \ ../src/HTTPServ.h ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h \ ../src/HTTChunk.h ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h \ ../src/HTCookie.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWInit.h \ ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h ../src/HTHome.h \ ../src/HTDialog.h ../src/HTRules.h ../src/HTProxy.h ../src/HTFilter.h \ ../src/HTLog.h ../src/HTHist.h ../src/WWWTrans.h ../src/HTANSI.h \ ../src/HTLocal.h ../src/HTTCP.h ../src/HTSocket.h ../src/HTReader.h \ ../src/HTWriter.h ../src/HTBufWrt.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h cookie.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTAccess.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/showxml.P0100644000076400001440000002504107405521202017565 0ustar danielusersshowxml.o: showxml.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h showxml.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/ptri.P0100644000076400001440000002503007405521203017041 0ustar danielusersptri.o: ptri.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h ptri.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/stri.P0100644000076400001440000002503007405521204017045 0ustar danielusersstri.o: stri.c ../src/WWWLib.h ../src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/WWWUtil.h ../src/HTUtils.h ../src/HTMemory.h ../src/HTArray.h \ ../src/HTAssoc.h ../src/HTList.h ../src/HTAtom.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/WWWCore.h ../src/HTLib.h \ ../src/HTUser.h ../src/HTReq.h ../src/HTEvent.h ../src/HTFormat.h \ ../src/HTStream.h ../src/HTAnchor.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTError.h ../src/HTNet.h ../src/HTTrans.h \ ../src/HTIOStream.h ../src/HTChannl.h ../src/HTHost.h ../src/HTProt.h \ ../src/HTTimer.h ../src/HTDNS.h ../src/HTParse.h ../src/HTEscape.h \ ../src/HTUTree.h ../src/HTWWWStr.h ../src/HTMemLog.h ../src/HTAlert.h \ ../src/HTStruct.h ../src/HTNoFree.h ../src/HTInet.h ../src/HTHstMan.h \ ../src/WWWInit.h ../src/HTInit.h ../src/WWWApp.h ../src/HTEvtLst.h \ ../src/HTHome.h ../src/HTDialog.h ../src/HTAccess.h ../src/HTRules.h \ ../src/HTProxy.h ../src/HTFilter.h ../src/HTLog.h ../src/HTHist.h \ ../src/WWWTrans.h ../src/HTANSI.h ../src/HTLocal.h ../src/HTTCP.h \ ../src/HTSocket.h ../src/HTReader.h ../src/HTWriter.h ../src/HTBufWrt.h \ ../src/WWWHTTP.h ../src/HTTPUtil.h ../src/HTTP.h ../src/HTTPServ.h \ ../src/HTTPGen.h ../src/HTTPReq.h ../src/HTTPRes.h ../src/HTTChunk.h \ ../src/HTPEP.h ../src/HTAAUtil.h ../src/HTAABrow.h ../src/HTCookie.h \ ../src/WWWFile.h ../src/HTFile.h ../src/HTMulti.h ../src/HTBind.h \ ../src/HTBInit.h ../src/WWWFTP.h ../src/HTFTP.h ../src/HTFTPDir.h \ ../src/WWWGophe.h ../src/HTGopher.h ../src/WWWTelnt.h ../src/HTTelnet.h \ ../src/WWWNews.h ../src/HTNews.h ../src/HTNewsRq.h ../src/HTNewsLs.h \ ../src/HTNDir.h ../src/WWWMIME.h ../src/HTMIME.h ../src/HTHeader.h \ ../src/HTMIMERq.h ../src/HTMIMImp.h ../src/HTBound.h ../src/HTMulpar.h \ ../src/WWWHTML.h ../src/HTMLPDTD.h ../src/SGML.h ../src/HTMLGen.h \ ../src/HTTeXGen.h ../src/HTPlain.h ../src/HTML.h ../src/HText.h \ ../src/HTHInit.h ../src/HTStyle.h ../src/WWWStream.h ../src/HTConLen.h \ ../src/HTFWrite.h ../src/HTFSave.h ../src/HTGuess.h ../src/HTTee.h \ ../src/HTMerge.h ../src/HTSChunk.h ../src/HTXParse.h ../src/HTEPtoCl.h \ ../src/HTNetTxt.h ../src/WWWDir.h ../src/HTDir.h ../src/HTIcons.h \ ../src/HTDescpt.h ../src/WWWCache.h ../src/HTCache.h ../src/WWWXML.h \ ../src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h ../src/WWWZip.h ../src/HTZip.h ../src/HTProfil.h stri.c : ../src/WWWLib.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/WWWUtil.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTArray.h : ../src/HTAssoc.h : ../src/HTList.h : ../src/HTAtom.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/WWWCore.h : ../src/HTLib.h : ../src/HTUser.h : ../src/HTReq.h : ../src/HTEvent.h : ../src/HTFormat.h : ../src/HTStream.h : ../src/HTAnchor.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTParse.h : ../src/HTEscape.h : ../src/HTUTree.h : ../src/HTWWWStr.h : ../src/HTMemLog.h : ../src/HTAlert.h : ../src/HTStruct.h : ../src/HTNoFree.h : ../src/HTInet.h : ../src/HTHstMan.h : ../src/WWWInit.h : ../src/HTInit.h : ../src/WWWApp.h : ../src/HTEvtLst.h : ../src/HTHome.h : ../src/HTDialog.h : ../src/HTAccess.h : ../src/HTRules.h : ../src/HTProxy.h : ../src/HTFilter.h : ../src/HTLog.h : ../src/HTHist.h : ../src/WWWTrans.h : ../src/HTANSI.h : ../src/HTLocal.h : ../src/HTTCP.h : ../src/HTSocket.h : ../src/HTReader.h : ../src/HTWriter.h : ../src/HTBufWrt.h : ../src/WWWHTTP.h : ../src/HTTPUtil.h : ../src/HTTP.h : ../src/HTTPServ.h : ../src/HTTPGen.h : ../src/HTTPReq.h : ../src/HTTPRes.h : ../src/HTTChunk.h : ../src/HTPEP.h : ../src/HTAAUtil.h : ../src/HTAABrow.h : ../src/HTCookie.h : ../src/WWWFile.h : ../src/HTFile.h : ../src/HTMulti.h : ../src/HTBind.h : ../src/HTBInit.h : ../src/WWWFTP.h : ../src/HTFTP.h : ../src/HTFTPDir.h : ../src/WWWGophe.h : ../src/HTGopher.h : ../src/WWWTelnt.h : ../src/HTTelnet.h : ../src/WWWNews.h : ../src/HTNews.h : ../src/HTNewsRq.h : ../src/HTNewsLs.h : ../src/HTNDir.h : ../src/WWWMIME.h : ../src/HTMIME.h : ../src/HTHeader.h : ../src/HTMIMERq.h : ../src/HTMIMImp.h : ../src/HTBound.h : ../src/HTMulpar.h : ../src/WWWHTML.h : ../src/HTMLPDTD.h : ../src/SGML.h : ../src/HTMLGen.h : ../src/HTTeXGen.h : ../src/HTPlain.h : ../src/HTML.h : ../src/HText.h : ../src/HTHInit.h : ../src/HTStyle.h : ../src/WWWStream.h : ../src/HTConLen.h : ../src/HTFWrite.h : ../src/HTFSave.h : ../src/HTGuess.h : ../src/HTTee.h : ../src/HTMerge.h : ../src/HTSChunk.h : ../src/HTXParse.h : ../src/HTEPtoCl.h : ../src/HTNetTxt.h : ../src/WWWDir.h : ../src/HTDir.h : ../src/HTIcons.h : ../src/HTDescpt.h : ../src/WWWCache.h : ../src/HTCache.h : ../src/WWWXML.h : ../src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : ../src/WWWZip.h : ../src/HTZip.h : ../src/HTProfil.h : libwww/Library/Examples/.deps/rdf_parse_buffer.P0100644000076400001440000001575207405521206021376 0ustar danielusersrdf_parse_buffer.o: rdf_parse_buffer.c ../src/WWWXML.h ../src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../src/HTXML.h ../src/HTFormat.h ../src/HTUtils.h ../src/HTMemory.h \ ../src/HTStream.h ../src/HTList.h ../src/HTArray.h ../src/HTAtom.h \ ../src/HTAnchor.h ../src/WWWUtil.h ../src/HTAssoc.h ../src/HTChunk.h \ ../src/HTString.h ../src/HTUU.h ../src/HTLink.h ../src/HTMethod.h \ ../src/HTResponse.h ../src/HTEvent.h ../src/HTReq.h ../src/HTError.h \ ../src/HTNet.h ../src/HTTrans.h ../src/HTIOStream.h ../src/HTChannl.h \ ../src/HTHost.h ../src/HTProt.h ../src/HTTimer.h ../src/HTDNS.h \ ../src/HTUser.h ../../modules/expat/xmlparse/xmlparse.h ../src/HTRDF.h \ ../src/HTHash.h rdf_parse_buffer.c : ../src/WWWXML.h : ../src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../src/HTXML.h : ../src/HTFormat.h : ../src/HTUtils.h : ../src/HTMemory.h : ../src/HTStream.h : ../src/HTList.h : ../src/HTArray.h : ../src/HTAtom.h : ../src/HTAnchor.h : ../src/WWWUtil.h : ../src/HTAssoc.h : ../src/HTChunk.h : ../src/HTString.h : ../src/HTUU.h : ../src/HTLink.h : ../src/HTMethod.h : ../src/HTResponse.h : ../src/HTEvent.h : ../src/HTReq.h : ../src/HTError.h : ../src/HTNet.h : ../src/HTTrans.h : ../src/HTIOStream.h : ../src/HTChannl.h : ../src/HTHost.h : ../src/HTProt.h : ../src/HTTimer.h : ../src/HTDNS.h : ../src/HTUser.h : ../../modules/expat/xmlparse/xmlparse.h : ../src/HTRDF.h : ../src/HTHash.h : libwww/Library/.cvsignore0100644000076400001440000000004006150215353015147 0ustar danielusersMakefile.in Makefile pub member libwww/Library/.htaccess0100644000076400001440000000022207337305003014747 0ustar danielusersRewriteEngine On RewriteBase /Library RewriteRule pub$ http://www.w3.org/Library [P,L] RewriteRule member$ http://www.w3.org/Library [P,L] libwww/Library/Activity.html0100644000076400001440000000575506752300235015655 0ustar danielusers Why libwww?

    Why Libwww?

    Rough consensus and running code is the main idea behind libwww. As for all W3C OpenSource code, the purpose of libwww is to provide an environment for experimenting with extensions and new features. The focus of libwww is performance, modularity, and extensibility. It contains highly efficient code for HTTP and URIs but also for many other parts of the Web, primarily for client side applications like robots, browsers, GUI apps, and automated tools.

    Libwww has been part of the World Wide Web almost from the beginning. Tim Berners-Lee designed and implemented the first version back in November 1992 as part of demonstrating the potential of the Web. Many people have picked up libwww and used it in a variety of contexts. Applications such as Lou Montulli's Lynx character based client, Mosaic Web browser by Marc Andreesen and Eric Bena, and the CERN server by Ari Luotonen were all using later versions of libwww. Later on, applications like the Arena browser by Dave Raggett and Håkon W. Lie have been added to the list.

    Thanks to CERN, libwww was free from the very start and was released on a regular basis to the Web Community. When CERN stopped being the center of the Web in late 1994, libwww moved from CERN to W3C which continued its development. In May 1998, the code base was made even more available in that people now can check it out directly from our CVS codebase. Today, libwww is freely available under W3C Copyright for use by anyone and has a growing OpenSource community helping maintaining it.

    Along with the core library comes set of sample applications that demonstrate how to use libwww but at the same time can perform useful tasks in their own right.

    As all OpenSource software, the growth depends on you - it doesn't happen by itself. Check out what you can do in order to help moving libwww forward and making it stronger and more useful to everybody.


    José Kahan,
    @(#) $Id: Activity.html,v 1.19 2025/08/05 12:16:29 kahan Exp $
    libwww/Library/BeforeCommitting.html0100644000076400001440000000610207133046252017301 0ustar danielusers How to Commit changes and avoid Surprises

    How to Commit changes and avoid Surprises

    CVS is a great tool allowing multiple developers to work simultaneously on the same code base. However, in order to avoid surprises, it is crucial that everybody follows this work policy for how to commit changes to the libwww CVS codebase.

    Before you Start

    Send a mail to <www-lib@w3.org> about what you are working on
    We don't want to do double work!
    Check that the legal stuff is settled!
    Before W3C can accept any diffs we need you to send us this form so that we know we can give out the code for free.
    Do never do any pretty printing of the code
    Read the Programming Style Guide for more details why things are the way they are.

    Preparing the Commit

    Make sure that everything compiles
    Do a "make" on everything in the libwww package and make sure there are no warnings, errors and the like
    Make sure that all changes are the ones you expect
    Do a "cvs diff" between your work version and the repository in order to filter out unwanted comments and other stuff that you may have left
    Resolve any CVS conflicts by sending a mail to <www-lib@w3.org> asking for input
    Don't just remove other people's edits!
    Send a mail to <www-lib@w3.org> when you are ready to commit
    Include the diffs and explain what other people should look out for and ask for feedback

    Doing the Commit

    Do never commit as the last thing Friday night or before a vacation!
    If there are problems then you better be there!
    Document what you have done by writing extensive CVS logs
    Other people must be able to understand it as well
    Add new files to CVS
    You can check this by doing a "cvs update". All unknown files are marked with a "?". Note that .h files are not in CVS - only .html files!

    Again, following the rules are very important in order not to waste any time


    José Kahan,
    @(#) $Id: BeforeCommitting.html,v 1.7 2025/07/12 10:47:06 kahan Exp $
    libwww/Library/Collaborators.html0100644000076400001440000001036106704703332016656 0ustar danielusers Libwww Hackers

    Libwww Hackers

    Sign up | How can I help?Hall of Fame | Alumni

    Writing directly to the CVS repository is reserved for libwww hackers who have intimate knowledge of the code base and have proven their ability to use this privilege to the benefit of the libwww user community. You are of course more than welcome (read strongly encouraged) to submit patches to the <www-lib@w3.org> mailing list regardless of whether you have write access or not. If the patch is good, chances are good that it will be added to the CVS codebase by one of the libwww hackers.


    How can I Sign Up?

    We don't have a formal mechanism but the idea is that you have to prove your hacking ability. The best way to is to start contributing patches based on the latest code base and to be active on the <www-lib@w3.org> mailing list. Make sure that you have read the libwww style guide before you start.

    How can I help?

    We have a very interesting set of things to do - your help is required to make timely progress. Remember that only the sky is the limit - cool ideas are always welcome! Pick a project and don't forget to send mails to <www-lib@w3.org> about what you are up to or to ask questions!

    Hackers' Hall of Fame

    This is the list of very active libwww hackers who have come up with some truly cool stuff

    Olga Antropova
    Provided an SSL transport for libwww and lots of other very cool work
    Jose Kahan
    Integrated libwww with Amaya and provided feedback on client side API
    Vladimir Kozlov
    Provides fresh Wintel binaries directly from the CVS repository and have made a cool libwww install shield
    John Punin
    Worked a lot on the webbot, splitting up the code, introduced Breadth First Search instead of Depth First Search, implemented robot.txt parser, HTTP redirections in the robot any more more really cool things. Has also embedded the expat parser into libwww!
    Bob Racko
    Added Frames support to HTML parser, fixed many bugs on NT, added support for mirroring and improved caching and much more
    Raffaele Sena
    Improved the HTML parser enourmously including adding full HTML/4.0 support! Also found and fixed a lot of very hard bugs

    Alumni

    Eric Prud'hommeaux
    Provided the Windows integration and asynchronous event management along with many other features.
    Anselm Baird-Smith
    Provided lots of help through many white-board discussions, especially on the HTTP/1.1 client side implementation.
    Håkon W. Lie
    Integrated libwww with Arena


    Henrik Frystyk Nielsen,
    @(#) $Id: Collaborators.html,v 1.9 2025/04/13 18:03:06 renaudb Exp $
    libwww/Library/Distribution.html0100644000076400001440000001377507220145566016546 0ustar danielusers Getting the W3C libwww Source

    Getting the Libwww Source

    CVS Checkout (preferred) | CVS Snapshot | RPMs | Tar files | Archives | Contributions

    Libwww source code, documentation and sample applications is made freely available for any purpose - get it in one of the forms below.

    Checkout from CVS (Preferred)

    Checking out the code base directly from our CVS repository allows you to follow the development of libwww closely and to contribute much easier. Also, you will get a lot of bug fixes that are not in the distribution tar ball. In fact, if you intend to provide patches then you should use the CVS repository! If you intend to write code for libwww then have a look at the coding guide lines before you begin.

    CVS Repository Snapshot

    For those who wish to keep up with the source development but do not have direct access to our CVS repository due to firewalls etc., we generate a snapshot tarball of the repository on a daily basis. You can copy this to your system, unpack it, and treat it as your working copy or alternatively you can use the CVS import facility into your own CVS repository.

    We don't promise anything but there is a good chance that it compiles as long as you follow the same instructions as if you did a normal CVS checkout.

    RPMs (Apr 15, 2025)

    These RPMs are out of date. We're now outsourcing their generation to other people. You can use rpmfind to search for them.

    Thanks to Jim Gettys, we now provide RPMs for libwww. All RPM packages are signed with PGP using my own key with ID 1F71508D (also available from the key servers). These packages should always be accompanied by a .sig file containing a valid PGP signature.

    Latest Tar Ball Release (December 20, 2025)

    Occasionally we wrap up the libwww code and produce a new revision, however, this happens much less frequently than updates are committed to the CVS repository.

    When you have downloaded libwww, you are ready to unpack and compile the software. You can find more information on how libwww is designed in the libwww architecture and how to use it in the User's Guide.

    Contributions

    The best thing is if we can incorporate contributions from you into the libwww code base but until this is done, you can have a look at the current set of contributions with new cool features.

    Distribution Archives

    You can find old libwww versions in the distribution archives.


    José Kahan,
    @(#) $Id: Distribution.html,v 1.50 2025/12/20 15:08:38 kahan Exp $
    libwww/Library/Makefile.am0100644000076400001440000000025306562206354015221 0ustar danielusers## Process this file with Automake to create Makefile.in. DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) SUBDIRS = src User Examples External cvs2sql # Test libwww/Library/OldEvents.html0100644000076400001440000001055306752300235015754 0ustar danielusers Libwww Timeline

    Libwww News and Event Timeline

    See also the libwww release history extending all the way back to 1991!


    José Kahan,
    @(#) $Id: OldEvents.html,v 1.4 2025/08/05 12:16:29 kahan Exp $
    libwww/Library/Overview.html0100644000076400001440000002640707242460574015674 0ustar danielusers Libwww - the W3C Sample Code Library

    Libwww - the W3C Protocol Library

    News | Why libwww? | Get it! | Installation | Latest updates | Release Notes | Documentation | Mailing list | Legal | Authors & Hackers

    Libwww is a highly modular, general-purpose client side Web API written in C for Unix and Windows (Win32). It's well suited for both small and large applications, like browser/editors, robots, batch tools, etc. Pluggable modules provided with libwww include complete HTTP/1.1 (with caching, pipelining, PUT, POST, Digest Authentication, deflate, etc), MySQL logging, FTP, HTML/4, XML (expat), RDF (SiRPAC), and much more. The purpose of libwww is to serve as a testbed for protocol experiments.
    • December 20 2000: Release of libwww 5.3.2. This release includes enhancements in the RDF parser and many bug fixes, principally in the cache, the chunk, and the hash modules. Check the release notes for more information.
    • September 22 2000: libwwww survey. We're conducting a survey to try to find out who uses libwww and where should we take libwww next.
      The survey has concluded, but I haven't had time to compile the results. Help is welcome.

    Nearby: Sample Applications | CVS Repository | ToDo | Modules and Packages


    News, Updates, and Events

    See also the libwww timeline for past news items and events

    Libwww Mailinglist

    Please send all requests regarding libwww to <www-lib@w3.org> public mailing list. This list is archived at W3C and also at findmail. Note, you MUST be subscribed in order to post to the mailing list. Follow these shortcuts to quick subscribe or quick unsubscribe or see the information on mailing lists for more details.

    Legal Stuff

    Authors

    The development of libwww depends on YOU! The more people who are contributing and helping the development, the more useful the code base gets. Check out the list of libwww hackers who provide invaluable contributions to the libwww code base and find out how you can help!

    Henrik Frystyk Nielsen
    Designed and implemented libwww from version 2.17 up to version 5.2.8
    Tim Berners-Lee and Jean-Francois Groff
    Came up with the initial design and implementation of libwww


    José Kahan,
    @(#) $Id: Overview.html,v 1.152 2025/02/14 10:44:12 kahan Exp $

    Copyright  ©  1997 W3C (MIT, INRIA, Keio ), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. Your interactions with this site are in accordance with our public and Member privacy statements.

    libwww/Library/Status.html0100755000076400001440000001471606752300235015344 0ustar danielusers Libwww - the W3C Sample Code Library

    Libwww - the W3C Sample Code Library

    News | Why libwww? | Get it! | Latest updates | Sample Apps | Release Notes | Documentation | Mailing list | Legal | Authors & Hackers

    Libwww is a general-purpose Web API written in C for Unix and Windows (Win32). With a highly extensible and layered API, it can accommodate many different types of applications including clients, robots, etc. The purpose of libwww is to provide a highly optimized HTTP sample implementation as well as other Internet protocols and to serve as a testbed for protocol experiments.


    News, Updates, and Events

    Dec 3, 2025
    Number of libwww check-outs from CVS exceeds 700!
    Nov 1, 2025
    Release of libwww 5.2 - a result of close collaboration and extensive testing by the libwww community. Special thanks to Bob Racko, John Punin, Vladimir Kozlov, and Jose Kahan.

    See also the libwww timeline

    Libwww Mailinglist

    Please send all requests regarding libwww to <www-lib@w3.org>. This list is archived at findmail and in the W3C archives. Note, that you MUST be subscribed in order to post to the mailing list. Follow these shortcuts to quick subscribe or quick unsubscribe or see the information on mailing lists for more details.

    Legal Stuff

    Authors

    The development of libwww depends on YOU! The more people who are contributing and helping the development, the more useful the code base gets. Check out the list of libwww hackers who provide invaluable contributions to the libwww code base and find out how you can help!

    Henrik Frystyk Nielsen
    Designed and implemented libwww from version 2.17 up to the latest version
    Tim Berners-Lee and Jean-Francois Groff
    Came up with the initial design and implementation of libwww



    José Kahan,
    @(#) $Id: Status.html,v 1.1 2025/08/05 12:16:29 kahan Exp $

    Copyright  ©  1997 W3C (MIT, INRIA, Keio ), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. Your interactions with this site are in accordance with our public and Member privacy statements. libwww/Library/Survey.html0100755000076400001440000000316207216134663015355 0ustar danielusers Libwww Survey

    Libwww Survey


    The survey is now closed. I haven't found time to compile the results. Help is welcome. I hope to do so in January. You can consult the survey answers in the on-line archive. --jose


    We're conducting a survey so that we can get a better idea of what are libwww's limitations, where new developments/effort should be invested, and how many people are actively using it.

    To participate, please download the survey text form, answer it, and mail it to www-lib-survey@w3.org.
    You can follow the answers to the survey on the dedicated mailing list archive.

    The survey is open from September 22 up to October 6, 2000. The results will be made available on this page, and will also be posted to the regular libwww mailing list.

    Thanks for your comments and views!

    N.B. This survey doesn't mean that W3C plans to invest more resources on libwww or its further development. We expect this effort to come from the open source community.


    Jose Kahan,
    libwww/Library/WinCom.html0100644000076400001440000000132306752300235015240 0ustar danielusers Windows Example PUT Tool

    Windows Example PUT Tool

    This information has now moved to the WinCom home page

    @(#) $Id: WinCom.html,v 1.8 2025/08/05 12:16:29 kahan Exp $


    José Kahan,
    @(#) $Id: WinCom.html,v 1.8 2025/08/05 12:16:29 kahan Exp $
    libwww/Library/cvs.html0100644000076400001440000003047207144222401014640 0ustar danielusers Getting Libwww from the CVS Repository

    Getting Libwww from the CVS Repository


    Libwww Releases

    CVS allows you to use the very latest version of libwww - as soon as a fix or a new feature is commited to the CVS repository then you can update your working version and you will have it right away.

    The purpose of "releases" is to say that now we believe that the code is stable with a well defined set of features. Until now, we have been giving out distribution files every time we announced a release. This will not change, but you can use the CVS repository in exactly the same way - often with much less overhead than dealing with a distribution package.

    Every release is marked in the CVS repository using tags, so that it is possible to retrieve a complete release using the CVS -r option (note that -r is "sticky"). Check out the online CVS log walker for the current set of release tags. We were less strict tagging all the files in early releases so don't go too far back in the past if you expect to be able to compile the code!

    Anonymous CVS Checkout

    Anonymous checkout is read-only access which allows you to get the latest edits and to provide patches to be integrated into the code base. The instructions should work for both Unix and Windows, and may even work for Macs although I am not sure. A couple of notes:

    Start by login as follows:

    % cvs -d :pserver:anonymous@dev.w3.org:/sources/public login

    after which you type "anonymous" as password.

    Checkout the Latest Version

    To get the latest version from the CVS repository, run this command:

    % cvs -d :pserver:anonymous@dev.w3.org:/sources/public -z3 checkout libwww

    After which you will get all the code coming at you, you'd better have at least 10MBytes available on your machine. Now you are ready to getting boot strapped.

    Checkout a Specific Revision

    If you want to get a specific release using CVS tags then you can do this by using the the CVS "-r" option, for example

    % cvs -d :pserver:anonymous@dev.w3.org:/sources/public -z3 -r Release-5-2 checkout libwww

    Check the CVS log walker for the current set of release tags. If you at some point want to revert to the latest untagged version then you should use the following command:

    % cd libwww
    % cvs -z3 update -A

    CVS Write Access

    Only libwww collaborators who have intimate knowledge of the code base and have proven their ability to code libwww have CVS write access. If you are considering becoming a libwww contributor then make sure that you have read the libwww style guide as well as the list of things to do before committing changes to libwww.

    SSH Based CVS Checkout

    Libwww collaborators can get read/write access to the CVS repository using SSH. You setup CVS to use SSH as remote shell by setting the CVS_RSH env variable. Using bash or similar, it looks like this:

    % export CVS_RSH=/usr/local/bin/ssh

    When you are using SSH, you don't need to do a CVS login. Instead you can just go ahead checking out libwww like this

    % cvs -d dev.w3.org:/sources/public checkout libwww

    and you will be prompted for your SSH credentials. Again, if you want a specific revision then use something like this

    % cvs -d dev.w3.org:/sources/public -r Release-5-2 checkout libwww

    The Apache Group has some special notes on how to use SSH for Windows.

    How to Get the Latest Updates

    The big advantage of using CVS is that you easily can keep your version of the code base up to date with the latest edits and changes committed to CVS. Whenever something has been committed, a notification will be sent to the <www-lib@w3.org> mailing list (see here how to subscribe) as well as getting listed on the latest changes page.

    Once you have checked out the libwww CVS tree (not a specific revision), you can get any updates committed to the tree by using the cvs update command like this

    % cd libwww
    % cvs -z3 update -d
    % cd ..

    It is important that you use the "-d" flag so that you get new directories as well as updated files. Now you MUST repeat the compilation bootstrapping procedure.

    Getting Bootstrapped

    When compiling directly from the CVS repository there are a few steps you have to go through which are already done if compiling from a distribution package. Follow these three steps:

    1. Generate include files
    2. Unix only: generate make files
    3. Configure and compile libwww

    1. Generate Include Files (Windows & Unix)

    On both Windows and Unix you can generate the *.h files and the *.def files by running a Perl script provided by Eric Prud'hommeaux. Never mind that it gives a few warnings when it runs - they are all OK. It requires that you have a recent version of Perl on your machine. Run the script like this (note the explicit use of the Perl interpreter):

    % cd libwww
    % perl config/winConfigure.pl

    Windows people are now done and can jump directly to the instructions for how to compile libwww for Windows. On Unix, you need some more...

    2. Generate Makefile (Unix only)

    On Unix you MUST have the following GNU tools installed in order to continue. Check that you have the following programs with the correct version number:

    gcc and GNU make
    Automake relies on features provided by gcc and GNU make that don't come with other compilers and makes. When compiling directly from CVS you MUST use these gcc and gmake.
    GNU automake (version 1.4 or later)
    Automake is a tool for automatically generating Makefile.in's which are used by autoconf
    GNU autoconf (version 2.13 or later, but avoid version 2.14)
    A tool for automatically generating Makefile's which are used by make.
    GNU libtool (version 1.3.4 or later)
    A tool for automatically handling generation of shared libraries. If you upgrade libtool to a new version then you MUST rerun the configure script as some files used by libtool have to be regenerated.

    Now generate the make files as follows - don't worry about the warnings produced by autoconf:

    % aclocal; autoheader; automake; autoconf

    Now you MUST run the configure script as described in the next section on installation instructions.

    If when you run the above commands, you get one or more error messages including one that says:

       macro "AM_PROG_LIBTOOL" not found in library

    it may mean that libtool and automake are not installed under the same prefix. You will then have to run aclocal as:

       aclocal -I /prefix/of/libtool/share/aclocal

    If for some reason you have trouble running the configure script then try and run this command instead

    % make distclean; aclocal; autoheader; automake; autoconf

    3. Configuring and Compiling libwww

    Remember to subscribe to the <www-lib@w3.org> mailing list (findmail archives) for information of new features as well as discussions of problems and ideas.

    Libwww uses GNU Libtool in order to build shared libraries on a variety of systems. While this is very nice for making usable binaries, it can be a pain when trying to debug a program. For that reason, compilation of shared libraries can be turned off by specifying the --disable-shared option to configure.

    Congratulations - you are now ready to configure and compile libwww!


    José Kahan,
    @(#) $Id: cvs.html,v 1.37 2025/08/09 09:31:45 kahan Exp $
    libwww/Library/libwww-config.html0100644000076400001440000000471406752300235016631 0ustar danielusers Compiling and Linking against libwww

    Compiling and Linking against libwww

    After you have installed libwww, you can use it to build Web applications. However, compiling and linking against libwww requires various command line options to be passed to your compiler and linker. These options can be hard to figure out but the libwww-config shell script (installed in $exec_prefix/bin) can help you to do some of the work. This script is based on the GTK gtk-script and is contributed by Søren Sandmann.

    Invoking libwww-config

    After being installed, libwww-config takes the following flags:

    --version
    Prints out the version of libwww installed
    --cflags
    Prints '-I' flags pointing to the installed header files.
    --libs
    Prints out the linker flags necessary to link a program against libwww
    --prefix[=PREFIX]
    If PREFIX is specified, overrides the configured value of $prefix. (And of exec-prefix, unless --exec-prefix is also specified) Otherwise, prints out the configured value of $prefix
    --exec-prefix[=PREFIX]
    If PREFIX is specified, overrides the configured value of $exec_prefix. Otherwise, prints out the configured value of $exec_prefix

    Example of using libwww-config

    libwww-config can be used to compile and link a program from a configure script or directly from the command line. To compile and link a program, say one of the libwww sample programs (although these are compiled already when compiling libwww), you can do the following:

    % cd libwww
    % gcc -o test `libwww-config --cflags` Library/Examples/libapp_1.c `libwww-config --libs`


    José Kahan,
    @(#) $Id: libwww-config.html,v 1.5 2025/08/05 12:16:29 kahan Exp $
    libwww/Library/survey.txt0100644000076400001440000001226607162625010015261 0ustar danielusers===================================== LIBWWW SURVEY ===================================== Opens: September 22, 2025 Ends: October 6, 2025 Goal: Get a clear idea of what the libwww user community would like to do with libwww Means: Mail your responses to this form to www-lib-survey@w3.org --------------------------------------------------------------------- [1.0] Who are you and how do you use libwww --------------------------------------------------------------------- [1.1] Do you develop or have developed applications that use libwww [ ] Yes [ ] No If you didn't answer yes to [1.1], go to section 2. [1.2] What kind of application (you may cite the name too, if you want) [1.2] On which platform and environment (mark all that apply) [ ] X-Windows [ ] Unix (includes Linux, Solaris, ...) [ ] Win32 [ ] GTK [ ] Others (please cite): [1.3] Which language(s) did you use [ ] C [ ] C++ [ ] Others (please cite): [1.4] How do you rate your programming skills [ ] Experience programmer [ ] Average programmer [ ] Beginner [1.5] What parts of libww do you use [ ] XML parser [ ] RDF parser [ ] HTML parser [ ] HTTP [ ] FTP [ ] News [ ] Telnet [ ] Gopher [ ] SSL [ ] Others (please cite): [1.6] What applications of libwww do you use [ ] Examples [ ] Robot [ ] LineMode parser [ ] Command line parser [ ] WinCommander [1.7] What modifications do you make to the code before you use it? [1.8] If you have any tests for libwww code, what parts of libwww do you test and are you willing to contribute the tests to the W3C? [1.9] Anything else you'd like to say --------------------------------------------------------------------- [2.0] Your opinion of libwww --------------------------------------------------------------------- [2.1] In your opinion, libwww is (check all that apply): [ ] useful to write sample code [ ] useful for learning how to program a WWW application [ ] useful to write production code [ ] Other: please cite [2.2] Do you find it useful that libwww is written in C [ ] Yes [ ] No [2.3] Please explain your previous answer [2.4] Do you feel that libwww too big? [ ] Yes [ ] No [2.5] If so, which parts would you like to remove, or move to other libraries [2.6] What are the things that you like the most of libwww [2.7] What are the things that you dislike the most of libwww [2.8] What are the things that you would like to change in libwww [2.9] What are the things you think that libwww are missing [2.10] Anything else you'd like to say --------------------------------------------------------------------- Section 3: The future --------------------------------------------------------------------- --------------------------------------------------------------------- [3.1] Let's continue with libwww --------------------------------------------------------------------- [3.1.1] Do you think it's worth it to have a WWW library? [ ] Yes [ ] No [3.1.2] Do you know of any other similar libraries (please give a URL to the project if possible) [3.1.2] Do you think it's worth it to invest time continuing enhancing libwww and its architecture. [ ] Yes [ ] No [3.1.3] Are you interested in joining the core team of such a project (enhancing libwww)? [ ] Yes [ ] No [3.1.4] If you are willing to write some new documentation or improve existing documentation, which topics are you willing to document? [3.1.5] Anything else you'd like to say --------------------------------------------------------------------- [3.4] Let's invest our forces enhancing an existing project --------------------------------------------------------------------- [3.4.1] Do you think it's better to enhance another existing project (i.e., merge our efforts) [3.4.2] Are you interested in joining the core team of such a project (enhancing an existing project)? [ ] Yes [ ] No [3.4.3] Anything else you'd like to say --------------------------------------------------------------------- [3.5] Let's write it again --------------------------------------------------------------------- [3.5.1] Do you think the project should stop and start again from a clean slate? [ ] Yes [ ] No [3.5.2] Which language would you use and why (please take into account portability among systems)? [3.5.3] Are you interested in joining the core team of such a project (starting a new libwww project)? [ ] Yes [ ] No --------------------------------------------------------------------- [3.6] Where to host it --------------------------------------------------------------------- [3.6.1] Should W3C continue hosting libwww or any other spin-off projects? [ ] Yes [ ] No [3.6.2] SourceForge (SF): How would feel if the W3C transferred libwww to a SF project? [3.6.3] Are you currently involved with any SF projects? [ ] Yes [ ] No [3.6.4] If so, do you think libwww would fit into that developement paradigm? [ ] Yes [ ] No [3.6.5] Do you have other suggestions of where libwww should be hosted? [3.6.6] Anything else you'd like to say --------------------------------------------------------------------- [4.0] Your comments --------------------------------------------------------------------- [4.1] Anything else you'd like to say libwww/Library/External/0040755000076400001440000000000007405520573014751 5ustar danieluserslibwww/Library/External/CVS/0040755000076400001440000000000007405517330015401 5ustar danieluserslibwww/Library/External/CVS/Root0100644000076400001440000000005607405517324016250 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/External/CVS/Repository0100644000076400001440000000003007405517324017474 0ustar danieluserslibwww/Library/External libwww/Library/External/CVS/Entries0100644000076400001440000000116407405517330016734 0ustar danielusers/.cvsignore/1.1/Thu Sep 17 21:08:43 1998// /Makefile.am/1.1/Wed Jan 29 20:07:39 1997// /Overview.html/1.5/Mon Apr 5 17:28:49 1999// /gnu_regex.dll/1.1/Sun Jul 26 16:19:24 1998/-kb/ /gnu_regex.lib/1.1/Sun Jul 26 16:19:24 1998/-kb/ /regex.h/1.1/Sun Jul 26 16:19:24 1998// /xmlparse.dll/1.4/Tue Aug 29 16:44:23 2000/-kb/ /xmlparse.lib/1.3/Wed Aug 30 07:35:34 2000/-kb/ /xmltok.dll/1.4/Tue Aug 29 16:44:23 2000/-kb/ /xmltok.lib/1.3/Wed Aug 30 07:35:34 2000/-kb/ /zconf.h/1.1/Wed Jul 22 16:53:58 1998// /zlib.dll/1.1/Wed Jul 22 16:53:58 1998/-kb/ /zlib.h/1.1/Wed Jul 22 16:53:58 1998// /zlib.lib/1.1/Wed Jul 22 16:53:59 1998/-kb/ D libwww/Library/External/Makefile0100644000076400001440000001413607405520573016413 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ INC := $(wildcard *.h) DLL := $(wildcard *.dll) LIB := $(wildcard *.lib) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = $(INC) $(DLL) $(LIB) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/External/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/External distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/External/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/External/.cvsignore0100644000076400001440000000003306600275133016735 0ustar danielusers.deps Makefile.in Makefile libwww/Library/External/Makefile.am0100644000076400001440000000031706273727013017003 0ustar danielusers## Process this file with Automake to create Makefile.in. INC := $(wildcard *.h) DLL := $(wildcard *.dll) LIB := $(wildcard *.lib) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = \ $(INC) \ $(DLL) \ $(LIB) libwww/Library/External/Overview.html0100644000076400001440000001047306702171321017437 0ustar danielusers External Software Packages

    Libwww and Other Software Packages

    Expat | zlib | regex | MySQL | Socks | MD5 | SSL

    Libwww can work with a set of other software packages which greatly can augmunt the capabilities of libwww and applications that you build on top.

    On Unix, this is all handled very well by the autoconf configure script but on Windows, the setup is somewhat more tricky as you need to manually edit the config.h file and have the right DLLs in the right places. In order to make it easier for you to get bootstrapped on Windows, I have included DLLs for some of these software packages in the libwww CVS tree:

    You should of course always check the web sites for these packages to get up to date information on the latest versions, etc. You can find the full set of supported packages in the detailed installation instructions and also information for how to link libwww with these packages.

    Expat XML Parser

    We use James Clark's expat XML parser and tokenizer for handling XML in libwww. Data is retieved over the network and parsed as soon as it arrives. This is already part of the libwww CVS repository so no external packages are needed.

    Zlib Compression/Decompression

    Libwww can use the zlib library for handling the deflate content and transfer encodings in HTTP. This increases performance as we then can inflate a compressed document on the fly. A version of the precompiled zlib DLL for Win32 is already included in the w3c-libwww distribution file.

    Regular Expressions

    Libwww can use posix compliant regular expressions, for example to handle URI matching. This is for example used in the Webbot which can handle regular expressions when matching which URIs to check. The library has been tested with the GNU regular expression library for Win32.

    MySQL Access

    Libwww can use a MySQL database for logging requests and responses instead of plain text files. The Webbot uses this for creating a map of the resources exported by a server.

    SOCKS Firewall Traversal

    Libwww can use SOCKS to go through firewalls by replacing the socket calls with SOCKS calls.

    MD5 Support

    MD5 is used by the HTTP Digest authentication, for example, but can be used for other things as well. It is taken from the HTTP Digest Authentication specification. This is already part of the libwww CVS repository so no external packages are needed.

    SSL Transport

    Libwww can be set up to use SSL as a transport, for example in order to deal with the https URI access scheme. This requires the OpenSSL library, for example.


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.5 2025/04/05 17:28:49 frystyk Exp $
    libwww/Library/External/gnu_regex.dll0100644000076400001440000015600006556653414017437 0ustar danielusersMZÿÿ¸@€º´ Í!¸LÍ!This program cannot be run in DOS mode. $PEL²Æ33à! ¶6 žÐ0`в( Xà¸.text{µ¶ `.rdataк@@.dataX%à¼@À.idata¸Î@À.relocœ Ô@BU‹ìƒìSVW¡4à‰Eü‹E£4à‹Eüé_^[ÉÃU‹ìƒìDSVWÇEð‹E‹@‰Eì‹E‹‰Eô‹E‹@‰EÌ‹Eô‰Eø‹EÌEô‰EÐÆEÔÆEüjè’‡ƒÄ‰Eàƒ}à… ¸þÿÿÿéÔÇEäÇEèhj‹EìPèú†ƒÄ ‹E‹@ƒÈ‹M‰A‹Eƒ`þ‹EÐ9Eø… ƒ}è„`‹EÐ9Eø…3‹E‹@¾MÔ Áƒà‹M‹Iƒáþ Á‹M‰AÆEÔÿMè‹Eè‹Mà‹‰Eø‹Eø‰EÈÿEø‹EÈ3ÉŠ‰M¼éu‹E‹@ƒÈ‹M‰A3Àé‹Eø3ÉŠH‹EìÆéЋEø3ÉŠÍH‰EÜÿEøéÿM܃}ÜŒC‹EÜ™ƒâÂÁø‹Mø3ÛŠ¾‹EÜ™3Â+ƒà3Â+ŠÈÓæ…Þ„ ‹EÜ‹MìÆé°ÿÿÿéa‹Eø3ÉŠ͉EÜéÿEÜ}Ü‹EÜ‹MìÆéáÿÿÿ‹Eø3ÉŠÍH‰EÜÿEøéÿM܃}ÜŒC‹EÜ™ƒâÂÁø‹Mø3ÛŠ¾‹EÜ™3Â+ƒà3Â+ŠÈÓæ…Þ… ‹EÜ‹MìÆé°ÿÿÿé½ÇEÜéÿEÜ}Ü"‹Eܾ€ñƒø… ‹EÜ‹MìÆéÎÿÿÿézÇEÜéÿEÜ}Ü"‹Eܾ€ñƒø„ ‹EÜ‹MìÆéÎÿÿÿé7ÇEÜéÿEÜ}Ü‹EÜ‹MìÆéáÿÿÿ‹Eö@ @… ‹EìÆ@ é‹Eö@„3ÀééÚénýÿÿ‹Eø3ÉŠ‰MÜ‹Eø3ÉŠHñ€é€ÁáM܃Eø‹EÜEøƒ}ÜŽé1ýÿÿ‹Eø3ÉŠƒù„‹Eø3ÉŠƒù„é ýÿÿÿEø‹Eø3ÉŠ‰MÜ‹Eø3ÉŠHñ€é€ÁáM܃Eø‹EÜEøƒ}è„‹Eè‹Mà‹Uø9Tü…ÿMèé¶üÿÿ‹Eø3ÉŠ‰MÜ‹Eø3ÉŠHñ€é€ÁáM܃Eø‹EÜEø;EЃ±‹Eè9Eä…s‹EðD@ýƒÀ¯|à;Eäƒ ÇEÀé7‹EäÁàP‹EàP讂ƒÄ‰Eàƒ}à… ÇEÀé ÁeäÇEÀƒ}À… ÇEÄé‹EÜEø‹Mè‹Uà‰ŠÿEèÇEă}Ä… ¸þÿÿÿépé‹E‹@ƒÈ‹M‰A¾Eü…À„,‹Eø3ÉŠ‰MØ‹Eø3ÉŠHñ€é€ÁáM؃EøÆEüé‚ûÿÿƒEø‹Eø3ÉŠ‰MØ‹Eø3ÉŠHñ€é€ÁáM؃Eøƒ}Ø… ƒmøÆEüé‰þÿÿé:ûÿÿƒEøé1ûÿÿƒEøé(ûÿÿèté…ƒ}¼‡ìÿÿÿ‹E¼3ÉŠˆ ÿ$½LBïVÅŽ,LQ QL=Q…i¬L— ÆEÔ‹EЉEøéŠúÿÿ‹E‹@¾MÔ Áƒà‹M‹Iƒáþ Á‹M‰A3Àé_^[ÉÃU‹ìSVWƒ}„1‹E‹@ƒàûƒÈ‹M‰A‹E‹M ‰‹E‹M ‰A‹E‹M ‰Aé&‹Eƒ`ù‹E Ç‹E Ç@‹E ‹@‹M ‰A_^[ÉÃU‹ìSVW‹EP‹EP‹EP‹EP‹EP‹E Pjj‹EPè ƒÄ$é_^[ÉÃU‹ìƒì4SVW‹E‹@‰Eì‹E‹@‰Eð‹EE‰Eø‹E E‰Eüƒ}Œ ‹Eø9EŽ ¸ÿÿÿÿéƒ}üÿ¸ÿÿÿÿ+E‰E é‹Eø9EüŽ ‹Eø+E‰E ‹Eƒx†<‹E‹3ÉŠƒù …*ƒ} Ž ƒ}ޏÿÿÿÿé—éÇE ƒ}ì„0‹E‹@Á訅‹EPè8øÿÿƒÄƒøþ… ¸þÿÿÿéQƒ}ì„‹Eø9Eu‹Eö@…hƒ} ŽêÇEà‹E ‰Eä‹E9E‹E E;EŒ‹E ‹M+M+Á‰Eà‹E9EŒ‹E+E‰EØé‹E ‰EØ‹EE؉Eèƒ}ð„@‹Eà9E Ž/‹Eè‰EÔÿEè‹EÔ3ÉŠ‹Eð3ÒŠ‹Eì¾…À…ÿM éÅÿÿÿé3‹Eà9E Ž'‹Eè‰EÐÿEè‹EÐ3ÉŠ‹Eì¾…À…ÿM éÍÿÿÿ‹Eä+E Eétƒ}„ ‹E9EŒ‹E+E‹MŠˆEÜé ‹E‹M ŠˆE܃}ð„3ÀŠEÜ‹Mð¾‰EÌé¾E܉EÌ3ÀŠEÌ‹Mì¾…À…鈃} Œ-‹Eø9E…!ƒ}ì„‹Eö@… ¸ÿÿÿÿé‹E(P‹E$P‹EP‹EP‹EP‹EP‹E P‹EPè£ƒÄ ‰Eôƒ}ôŒ‹EéRƒ}ôþ… ¸þÿÿÿé>ƒ} … é%éƒ} Ž ÿM ÿEéÿE ÿMé¹ýÿÿ¸ÿÿÿÿé_^[ÉÃU‹ìSVW‹EP‹EP‹EP‹EP‹E Pjj‹EPè ƒÄ é_^[ÉÃU‹ììœSVW‹E‹‰Eø‹E‹@Eø‰E‹E‹@‰EÔ‹E‹@@‰EàÇE ÇE´ÇEÜÇE¼jè}ƒÄ‰E¨ƒ}¨… ¸þÿÿÿé0-ÇE¬ÇE°‹Eƒx„-‹EàÁàPèÛ|ƒÄ‰E”‹EàÁàPèÉ|ƒÄ‰EÄ‹EàÁàPè·|ƒÄ‰Eü‹EàÁàPè¥|ƒÄ‰Eè‹EàÁàPè“|ƒÄ‰E¸‹EàÁàPè|ƒÄ‰EЋEàÁàPèo|ƒÄ‰Eì‹EàÁàPè]|ƒÄ‰E¤‹EàÁàPèK|ƒÄ‰Eœƒ}”„Pƒ}Ä„Fƒ}ü„<ƒ}è„2ƒ}ì„(ƒ}¸„ƒ}Єƒ}¤„ ƒ}œ…,ƒ}¨„ ‹E¨PèX|ƒÄÇE¨ƒ}”„ ‹E”Pè;|ƒÄÇE”ƒ}Ä„ ‹EÄPè|ƒÄÇEă}ü„ ‹EüPè|ƒÄÇEüƒ}è„ ‹EèPèä{ƒÄÇEèƒ}¸„ ‹E¸PèÇ{ƒÄÇE¸ƒ}Є ‹EÐPèª{ƒÄÇEЃ}ì„ ‹EìPè{ƒÄÇEìƒ}¤„ ‹E¤Pèp{ƒÄÇE¤ƒ}œ„ ‹EœPèS{ƒÄÇEœ¸þÿÿÿéí*é8ÇE¤‹E¤‰EЋEЉE¸‹E¸‰Eè‹Eè‰Eü‹Eü‰EÄ‹EĉE”ÇEœ‹Eœ‰Eìƒ}Œ‹EE;E,ƒ}¨„ ‹E¨PèÖzƒÄÇE¨ƒ}”„ ‹E”Pè¹zƒÄÇE”ƒ}Ä„ ‹EÄPèœzƒÄÇEă}ü„ ‹EüPèzƒÄÇEüƒ}è„ ‹EèPèbzƒÄÇEèƒ}¸„ ‹E¸PèEzƒÄÇE¸ƒ}Є ‹EÐPè(zƒÄÇEЃ}ì„ ‹EìPè zƒÄÇEìƒ}¤„ ‹E¤PèîyƒÄÇE¤ƒ}œ„ ‹EœPèÑyƒÄÇEœ¸ÿÿÿÿék)ÇE˜éÿE˜‹Eà9E˜ƒ{‹E˜‹MèÇÿÿÿÿ‹E˜‹Mè‹‹M˜‹Uü‰Š‹E˜‹Mü‹‹M˜‹UĉŠ‹E˜‹MÄ‹‹M˜‹U”‰Š‹E˜‹M싃ȋM˜‹U쉊‹E˜‹Mìƒ$û‹E˜‹Mìƒ$÷‹E˜‹Mìƒ$ïévÿÿÿƒ}…$ƒ} „‹E ‰E‹E‰EÇE ÇE‹EE ‰Eô‹EE‰Eä‹E9E$‹E$E ‰EÈ‹E‰EÀé‹Eô‰EÈ‹E$E+E‰EÀƒ}Ž ‹E9E‹EE ‰EØ‹EȉEÌé‹EE+E‰EØ‹EÀ‰EÌ‹Eø9E…‹EØ9EÀ„€ƒ}°„ùƒ}„*‹E¼9E ‡‹EE ;E¼‚Ç…üþÿÿé Ç…üþÿÿ‹EÈ+ẼøÀ÷Ø;…üþÿÿ… ÆEŒéÆEŒƒ}Ü„0¾EŒ…À„ ‹E¼9E؇¾EŒ…À…]‹EÌ9EÈ„QÇEÜ‹E؉E¼ÇE˜éÿE˜‹Eà9E˜ƒ)‹E˜‹M”‹‹M˜‹U¸‰Š‹E˜‹MÄ‹‹M˜‹UЉŠéÈÿÿÿéÚ#é}ƒ}Ü„s‹E¼‰EØ‹EØ9E ‡‹EØ9Eô‚ ‹EȉEÌé‹EÀ‰EÌÇE˜éÿE˜‹Eà9E˜ƒ)‹E˜‹M¸‹‹M˜‹U”‰Š‹E˜‹MЋ‹M˜‹UĉŠéÈÿÿÿƒ} „‹E‹@Á訅ÿ‹E‹@Á訅€‹Eà@ƒø‡¸‹M ‰‹E ‹ÁàPèvƒÄ‹M ‰A‹E ‹ÁàPèùuƒÄ‹M ‰A‹E ƒx„ ‹E ƒx… ¸þÿÿÿéú%‹E‹@ƒàûƒÈ‹M‰Aé‹E‹@Áè$<…}‹E ‹MàA9ƒi‹Eà@‹M ‰‹E ‹ÁàP‹E ‹@Pè¥tƒÄ‹M ‰A‹E ‹ÁàP‹E ‹@Pè‡tƒÄ‹M ‰A‹E ƒx„ ‹E ƒx… ¸þÿÿÿéX%é‹E ƒ8†;‹E‹M ‹I‰‹EÌ9EÈ…‹EØ+E ‹M ‹I‰é‹EØ+EE‹M ‹I‰ÇE˜éÿE˜‹E ‹‹Mà;Á‚‹Á;E˜†$‹E˜‹M”ƒ<ÿ„‹E˜‹Mă<ÿ…-‹E ‹@‹M˜Çˆÿÿÿÿ‹E ‹@‹M˜‹ˆ‹M ‹I‹U˜‰‘éÒƒ}„D‹E˜‹M”‹U 9‚2‹E˜‹M”‹UU 9‡‹E˜‹M”‹+E ‹M ‹I‹U˜‰‘é‹E˜‹M”‹+EE‹M ‹I‹U˜‰‘ƒ}„D‹E˜‹MÄ‹U 9‚2‹E˜‹MÄ‹UU 9‡‹E˜‹MÄ‹+E ‹M ‹I‹U˜‰‘é‹E˜‹MÄ‹+EE‹M ‹I‹U˜‰‘é¾þÿÿ‹Eà‰E˜éÿE˜‹E ‹M˜9†-‹E ‹@‹M˜Çˆÿÿÿÿ‹E ‹@‹M˜‹ˆ‹M ‹I‹U˜‰‘éÂÿÿÿƒ}¨„ ‹E¨Pè´sƒÄÇE¨ƒ}”„ ‹E”Pè—sƒÄÇE”ƒ}Ä„ ‹EÄPèzsƒÄÇEă}ü„ ‹EüPè]sƒÄÇEüƒ}è„ ‹EèPè@sƒÄÇEèƒ}¸„ ‹E¸Pè#sƒÄÇE¸ƒ}Є ‹EÐPèsƒÄÇEЃ}ì„ ‹EìPèérƒÄÇEìƒ}¤„ ‹E¤PèÌrƒÄÇE¤ƒ}œ„ ‹EœPè¯rƒÄÇEœ‹EÌ9EÈ…‹E ‰…øþÿÿé ‹E+E‰…øþÿÿ‹EØ+E+…øþÿÿ‰E˜‹E˜é"‹Eø‰…ôþÿÿÿEø‹…ôþÿÿ3ÉŠ‰lþÿÿé+é´‹Eø3ÉŠ‰M˜ÿEøƒ}Ô„{‹EØ9EÌ…"‹EÌ9EÀ…é…‹E‰EØ‹EÀ‰EÌéÒÿÿÿ‹E؉…ðþÿÿÿEØ‹Eø‰…ìþÿÿÿEø‹…ðþÿÿ3ÉŠ‹EÔ¾‹ìþÿÿ¾ ;Á„é5ÿM˜…Šÿÿÿén‹EØ9EÌ…"‹EÌ9EÀ…é ‹E‰EØ‹EÀ‰EÌéÒÿÿÿ‹E؉…èþÿÿÿEØ‹Eø‰…äþÿÿÿEø‹…èþÿÿ¾‹äþÿÿ¾ ;Á„éÂÿM˜…’ÿÿÿ‹E ‰EˆéÿEˆ‹Eˆ9E´‚/‹Eˆ‹M싃ȋMˆ‹U쉊‹Eˆ‹M싃ȋMˆ‹U쉊éÂÿÿÿéf‹EØ9EÌ…"‹EÌ9EÀ…éN‹E‰EØ‹EÀ‰EÌéÒÿÿÿ‹Eö@ @…<ƒ}Ô„‹EØ3ÉŠ‹EÔ¾‰…àþÿÿé ‹Eؾ‰…àþÿÿƒ½àþÿÿ „I‹Eö@ €„Aƒ}Ô„‹EØ3ÉŠ‹EÔ¾‰…Üþÿÿé ‹Eؾ‰…Üþÿÿƒ½Üþÿÿ…馋E ‰E„éÿE„‹E„9E´‚/‹E„‹M싃ȋM„‹U쉊‹E„‹M싃ȋM„‹U쉊éÂÿÿÿÿEØéP‹Eø3ÉŠHÿƒù… Æ…|ÿÿÿ鯅|ÿÿÿ‹EØ9EÌ…"‹EÌ9EÀ…é‹E‰EØ‹EÀ‰EÌéÒÿÿÿƒ}Ô„‹EØ3ÉŠ‹EÔŠˆE€é‹EØŠˆE€‹Eø3ÉŠÍ3ÉŠM€;Á†U3ÀŠE€Áø‹Mø3ÛŠ\¾3ÀŠE€™3Â+ƒà3Â+ŠÈÓæ…Þ„"¾…|ÿÿÿ…À… Æ…|ÿÿÿ鯅|ÿÿÿ‹Eø3ÉŠAMø¾…|ÿÿÿ…À…éM‹E ‰…xÿÿÿéÿ…xÿÿÿ‹…xÿÿÿ9E´‚;‹…xÿÿÿ‹M싃ȋxÿÿÿ‹U쉊‹…xÿÿÿ‹M싃ȋxÿÿÿ‹U쉊é°ÿÿÿÿEØéâ‹Eø‰Eð‹Eø3ÉŠ‹E싈$<…C‹EìP‹EPEðPèõƒÄ ˆ…Øþÿÿ‹Eø3ÉŠ‹E싈ƒàü¾Øþÿÿƒá Á‹Mø3ÒŠ‹M쉑‹Eø3ÉŠ‹Eìöˆ„H‹Eø3ÉŠ‹E”ƒ<ˆÿ…‹EØ‹Mø3ÒŠ‹Mü‰‘é‹Eø3ÉŠ‹E”‹ˆ‹Mø3ÒŠ‹Mü‰‘é‹Eø3ÉŠ‹E”‹ˆ‹Mø3ÒŠ‹Mü‰‘‹EØ‹Mø3ÒŠ‹M”‰‘‹Eø3ÉŠ‹E싈ƒÈ‹Mø3ÒŠ‹M쉑‹Eø3ÉŠ‹Eìƒ$ˆ÷‹Eø3ÉŠ‰M´} … ‹Eø3ÉŠ‰M ƒEøé§‹Eø3ÉŠ‹Eìöˆ„H‹Eø3ÉŠ‹Eă<ˆÿ…‹EØ‹Mø3ÒŠ‹M艑é‹Eø3ÉŠ‹EÄ‹ˆ‹Mø3ÒŠ‹M艑é‹Eø3ÉŠ‹EÄ‹ˆ‹Mø3ÒŠ‹M艑‹EØ‹Mø3ÒŠ‹Mĉ‘‹Eø3ÉŠ‹Eìƒ$ˆû‹E´9E …ÇE ÇE´ép‹Eø3ÉŠIˆtÿÿÿ3ÀŠ…tÿÿÿ…ÀŽ$3ÀŠ…tÿÿÿ‹Mì‹Á訅 þtÿÿÿéÌÿÿÿ3ÀŠ…tÿÿÿ…À…ÇE ÇE´é 3ÀŠ…tÿÿÿ‰E´‹Eø3ÉŠ‹E싈Á訄‹Eø3ÉŠHýƒù…H‹EøƒÀ;Eƒ9Æ…pÿÿÿ‹EøƒÀ‰EðÇE˜‹Eð‰…ÔþÿÿÿEð‹…Ôþÿÿ3ÉŠ‰hþÿÿéLÆ…pÿÿÿ‹Eð3ÉŠ‰M˜‹Eð3ÉŠHñ€é€ÁáM˜ƒEð¾…pÿÿÿ…À„ƒEðéHéCƒ­hþÿÿ ƒ½hþÿÿ ‡/‹…hþÿÿ3ÉŠˆc-ÿ$S-å,å,Þ,%-‹E˜Eðƒ}˜b‹Eð3ÉŠƒù…R‹Eð3ÉŠHƒù…A‹Eð3ÉŠH‹Eø3ÒŠ;Ê…*‹Eø3ÉŠ‹E싈Á訄–‹Eø3ÉŠ‹Eìƒ$ˆï‹Eø3ÉŠ‰lÿÿÿéÿ…lÿÿÿ‹Eø3ÉŠH‹Eø3ÒŠÊ;lÿÿÿ†S‹…lÿÿÿ‹Mü‹‹lÿÿÿ‹U”‰Š‹…lÿÿÿ‹Mè‹•lÿÿÿ‹]”‹“9Œ‹…lÿÿÿ‹Mè‹‹lÿÿÿ‹UĉŠéŠÿÿÿÿEð‹Eð3ÉŠ‰M˜‹Eð3ÉŠHñ€é€ÁáM˜ƒEð‹E´+E D@ƒÀ‹M¬+M°;Á†‚‹EàD@ýƒÀ¯|à;E¬ƒÇ…Ðþÿÿé=‹E¬ÁàP‹E¨PèNhƒÄ‰E¨ƒ}¨…Ç…ÐþÿÿéÁe¬Ç…Ðþÿÿƒ½Ðþÿÿ… ¸þÿÿÿéécÿÿÿ‹E ‰…hÿÿÿéÿ…hÿÿÿ‹…hÿÿÿ9E´‚M‹…hÿÿÿ‹M”‹‹M°‹U¨‰ŠÿE°‹…hÿÿÿ‹MÄ‹‹M°‹U¨‰ŠÿE°‹…hÿÿÿ‹Mì‹‹M°‹U¨‰ŠÿE°éžÿÿÿ‹E ‹M°‹U¨‰ŠÿE°‹E´‹M°‹U¨‰ŠÿE°‹E˜Eð‹M°‹U¨‰ŠÿE°‹EØ‹M°‹U¨‰ŠÿE°éƒEøé ‹Eø3ÉŠ‰XÿÿÿÿEø‹…Xÿÿÿ‹M”ƒ<ÿ„‹…Xÿÿÿ‹Mă<ÿ…éÔ‹…Xÿÿÿ‹M”‹‰…`ÿÿÿƒ}„<‹…Xÿÿÿ‹M”‹U 9‚'‹…Xÿÿÿ‹M”‹UU 9‡Ç…Ìþÿÿé Ç…Ìþÿÿƒ}„<‹…Xÿÿÿ‹MÄ‹U 9‚'‹…Xÿÿÿ‹MÄ‹UU 9‡Ç…Èþÿÿé Ç…Èþÿÿ‹…Èþÿÿ9…Ìþÿÿ…‹…Xÿÿÿ‹MÄ‹‰…\ÿÿÿé ‹Eȉ…\ÿÿÿ‹…`ÿÿÿ9…\ÿÿÿ…Q‹…\ÿÿÿ9EÀ…é=‹…Xÿÿÿ‹MÄ‹•\ÿÿÿ9…é ‹E‰…`ÿÿÿ‹…Xÿÿÿ‹MÄ‹‰…\ÿÿÿéÿÿÿ‹…`ÿÿÿ9…\ÿÿÿ…é΋EØ9EÌ…"‹EÌ9EÀ…éY‹E‰EØ‹EÀ‰EÌéÒÿÿÿ‹EÌ+E؉E˜‹…\ÿÿÿ+…`ÿÿÿ;E˜‹…\ÿÿÿ+…`ÿÿÿ‰E˜ƒ}Ô„&‹EÔP‹E˜P‹…`ÿÿÿP‹EØP詃ĉ…Äþÿÿé‹E˜P‹…`ÿÿÿP‹EØPè€fƒÄ ‰…Äþÿÿƒ½Äþÿÿ„鼋E˜EØ‹E˜…`ÿÿÿé¸þÿÿ鞃}„‹E ‰…Àþÿÿé ‹E‰…Àþÿÿ‹EØ9…Àþÿÿ„ ƒ}…‹E‹@Á訅éNé&‹Eؾ@ÿƒø …‹E‹@Á訄é#é#‹EØ9Eä…‹E‹@Á訅éüéL‹EØ9Eô…‹E¾‰…¼þÿÿé ‹Eؾ‰…¼þÿÿƒ½¼þÿÿ …‹E‹@Á訄é«é«ƒ}„‹E ‰…¸þÿÿé ‹E‰…¸þÿÿ‹EØ9…¸þÿÿ„ ƒ}…égég‹EØ9Eä…éQéQ‹Eø3ÉŠ‰M˜‹Eø3ÉŠHñ€é€ÁáM˜ƒEø‹E´+E D@ƒÀ‹M¬+M°;Á†‚‹EàD@ýƒÀ¯|à;E¬ƒÇ…´þÿÿé=‹E¬ÁàP‹E¨PècƒÄ‰E¨ƒ}¨…Ç…´þÿÿéÁe¬Ç…´þÿÿƒ½´þÿÿ… ¸þÿÿÿéÈécÿÿÿ‹E ‰…Tÿÿÿéÿ…Tÿÿÿ‹…Tÿÿÿ9E´‚M‹…Tÿÿÿ‹M”‹‹M°‹U¨‰ŠÿE°‹…Tÿÿÿ‹MÄ‹‹M°‹U¨‰ŠÿE°‹…Tÿÿÿ‹Mì‹‹M°‹U¨‰ŠÿE°éžÿÿÿ‹E ‹M°‹U¨‰ŠÿE°‹E´‹M°‹U¨‰ŠÿE°‹E˜Eø‹M°‹U¨‰ŠÿE°‹E°‹M¨ÇÿE°éÒ‹Eø3ÉŠ‰M˜‹Eø3ÉŠHñ€é€ÁáM˜ƒEø‹Eø‰Eð‹E9Eðƒ‹Eð3ÉŠ…É…ÿEðéÝÿÿÿ‹E9Eðƒ=‹Eð3ÉŠƒù…-‹Eð3ÉŠH‹Eð3ÒŠPʉM´} … ‹Eð3ÉŠH‰M ‹E´+E D@ƒÀ‹M¬+M°;Á†‚‹EàD@ýƒÀ¯|à;E¬ƒÇ…°þÿÿé=‹E¬ÁàP‹E¨Pè"aƒÄ‰E¨ƒ}¨…Ç…°þÿÿéÁe¬Ç…°þÿÿƒ½°þÿÿ… ¸þÿÿÿéÜécÿÿÿ‹E ‰…Lÿÿÿéÿ…Lÿÿÿ‹E´9…Lÿÿÿ‡M‹…Lÿÿÿ‹M”‹‹M°‹U¨‰ŠÿE°‹…Lÿÿÿ‹MÄ‹‹M°‹U¨‰ŠÿE°‹…Lÿÿÿ‹Mì‹‹M°‹U¨‰ŠÿE°éžÿÿÿ‹E ‹M°‹U¨‰ŠÿE°‹E´‹M°‹U¨‰ŠÿE°‹E˜Eø‹M°‹U¨‰ŠÿE°‹EØ‹M°‹U¨‰ŠÿE°éç ‹Eø3ÉŠ‰M˜‹Eø3ÉŠHñ€é€ÁáM˜ƒEø‹Eø‰…Dÿÿÿ‹…DÿÿÿƒÀ;Eƒ2‹…Dÿÿÿ3ÉŠƒù„‹…Dÿÿÿ3ÉŠƒù… ƒ…Dÿÿÿé¼ÿÿÿ‹E9…Dÿÿÿ… ‹EøÆ@ýé…‹…Dÿÿÿ3ÉŠƒù„$‹E‹@Á訄a‹…Dÿÿÿ3ÉŠƒù …N‹…Dÿÿÿ3ÉŠƒù … Æ…@ÿÿÿ é‹…DÿÿÿŠ@ˆ…@ÿÿÿ‹E˜Eø‰Eð‹Eð3ÉŠHƒù…$‹Eð3ÉŠH3ÀŠ…@ÿÿÿ;È„ ‹EøÆ@ýéâ‹Eð3ÉŠHƒù„‹Eð3ÉŠHƒù…À‹Eð3ÉŠHƒù…Ç…<ÿÿÿé Ç…<ÿÿÿ‹Eð3ÉŠHÍ3ÉŠÈ3ÀŠ…@ÿÿÿ;ÈŽ_3ÀŠ…@ÿÿÿÁø‹Mð3ÛŠ\¾3ÀŠ…@ÿÿÿ™3Â+ƒà3Â+ŠÈÓæ…Þ„&ƒ½<ÿÿÿ…Ç…<ÿÿÿé Ç…<ÿÿÿƒ½<ÿÿÿ…‹EøÆ@ýƒmø‹Eø3ÉŠHÿƒù„ ‹EøÆ@ÿ é×ÿM°‹E°‹M¨‹‰…$ÿÿÿƒ½$ÿÿÿ„ ‹…$ÿÿÿ‰…8ÿÿÿÿM°‹E°‹M¨‹‰…4ÿÿÿÿM°‹E°‹M¨‹‰…0ÿÿÿÿM°‹E°‹M¨‹‰…,ÿÿÿ‹…0ÿÿÿ‰…(ÿÿÿéÿ(ÿÿÿ‹…(ÿÿÿ9…,ÿÿÿ‡MÿM°‹E°‹M¨‹‹(ÿÿÿ‹Uœ‰ŠÿM°‹E°‹M¨‹‹(ÿÿÿ‹U¤‰ŠÿM°‹E°‹M¨‹‹(ÿÿÿ‹U¤‰Šé›ÿÿÿ‹Eø3ÉŠ‰M˜‹Eø3ÉŠHñ€é€ÁáM˜ƒEø‹E˜Eøé§ éÈÿÿÿ‹E´+E D@ƒÀ‹M¬+M°;Á†‚‹EàD@ýƒÀ¯|à;E¬ƒÇ…¬þÿÿé=‹E¬ÁàP‹E¨PèŒ\ƒÄ‰E¨ƒ}¨…Ç…¬þÿÿéÁe¬Ç…¬þÿÿƒ½¬þÿÿ… ¸þÿÿÿéF écÿÿÿ‹E ‰… ÿÿÿéÿ… ÿÿÿ‹… ÿÿÿ9E´‚M‹… ÿÿÿ‹M”‹‹M°‹U¨‰ŠÿE°‹… ÿÿÿ‹MÄ‹‹M°‹U¨‰ŠÿE°‹… ÿÿÿ‹Mì‹‹M°‹U¨‰ŠÿE°éžÿÿÿ‹E ‹M°‹U¨‰ŠÿE°‹E´‹M°‹U¨‰ŠÿE°‹E°‹M¨ÇÿE°‹E°‹M¨ÇÿE°éxþÿÿ‹E´+E D@ƒÀ‹M¬+M°;Á†‚‹EàD@ýƒÀ¯|à;E¬ƒÇ…¨þÿÿé=‹E¬ÁàP‹E¨Pè<[ƒÄ‰E¨ƒ}¨…Ç…¨þÿÿéÁe¬Ç…¨þÿÿƒ½¨þÿÿ… ¸þÿÿÿéö écÿÿÿ‹E ‰…ÿÿÿéÿ…ÿÿÿ‹…ÿÿÿ9E´‚M‹…ÿÿÿ‹M”‹‹M°‹U¨‰ŠÿE°‹…ÿÿÿ‹MÄ‹‹M°‹U¨‰ŠÿE°‹…ÿÿÿ‹Mì‹‹M°‹U¨‰ŠÿE°éžÿÿÿ‹E ‹M°‹U¨‰ŠÿE°‹E´‹M°‹U¨‰ŠÿE°‹E°‹M¨ÇÿE°‹E°‹M¨ÇÿE°é‹Eø3ÉŠH‰M˜‹Eø3ÉŠHñ€é€ÁáM˜ƒ}˜Ž!ÿM˜ƒEøŠE˜‹Møˆ‹E˜‹MøˆaƒEøéƒ}˜…‹EøÆ@‹EøÆ@éÃ÷ÿÿé‹Eø3ÉŠH‰M˜‹Eø3ÉŠHñ€é€ÁáM˜ƒ}˜„ÿM˜ŠE˜‹MøˆA‹E˜‹MøˆaémüÿÿéƒEøé9‹Eø3ÉŠ‰M˜‹Eø3ÉŠHñ€é€ÁáM˜ƒEø‹E˜Eø‰Eð‹Eø3ÉŠ‰M˜‹Eø3ÉŠHñ€é€ÁáM˜ƒEøŠE˜‹Mðˆ‹E˜‹Mðˆaéʃ}„‹E ‰…¤þÿÿé ‹E‰…¤þÿÿ‹EØ9…¤þÿÿ„݃}„Ó‹EØ9Eä„Ç‹EØH;Eô…‹E¾‰… þÿÿé/‹EØH‹MI;Á…‹Eô¾@ÿ‰… þÿÿé ‹Eؾ@ÿ‰… þÿÿ‹EØ9Eô…‹E¾‰…œþÿÿé+‹EH;EØ…‹Eô¾@ÿ‰…œþÿÿé ‹Eؾ‰…œþÿÿ‹… þÿÿ¾€ñHƒøÀ÷Ø‹œþÿÿ¾‰ñIƒùÉ÷Ù;Á„é¸é¸ƒ}„‹E ‰…˜þÿÿé ‹E‰…˜þÿÿ‹EØ9…˜þÿÿ„݃}„Ó‹EØ9Eä„Ç‹EØH;Eô…‹E¾‰…”þÿÿé/‹EØH‹MI;Á…‹Eô¾@ÿ‰…”þÿÿé ‹Eؾ@ÿ‰…”þÿÿ‹EØ9Eô…‹E¾‰…þÿÿé+‹EH;EØ…‹Eô¾@ÿ‰…þÿÿé ‹Eؾ‰…þÿÿ‹…”þÿÿ¾€ñHƒøÀ÷Ø‹þÿÿ¾‰ñIƒùÉ÷Ù;Á„é¦éœ‹EØ9Eô…‹E¾‰…Œþÿÿé+‹EH;EØ…‹Eô¾@ÿ‰…Œþÿÿé ‹Eؾ‰…Œþÿÿ‹…Œþÿÿ¾€ñƒø…¢ƒ}„‹E ‰…ˆþÿÿé ‹E‰…ˆþÿÿ‹EØ9…ˆþÿÿ„mƒ}„c‹EØH;Eô…‹E¾‰…„þÿÿé/‹EØH‹MI;Á…‹Eô¾@ÿ‰…„þÿÿé ‹Eؾ@ÿ‰…„þÿÿ‹…„þÿÿ¾€ñƒø„éœéœƒ}„‹E ‰…€þÿÿé ‹E‰…€þÿÿ‹EØ9…€þÿÿ„܃}„Ò‹EØH;Eô…‹E¾‰…|þÿÿé/‹EØH‹MI;Á…‹Eô¾@ÿ‰…|þÿÿé ‹Eؾ@ÿ‰…|þÿÿ‹…|þÿÿ¾€ñƒø…o‹EØ9Eô…‹E¾‰…xþÿÿé+‹EH;EØ…‹Eô¾@ÿ‰…xþÿÿé ‹Eؾ‰…xþÿÿ‹…xþÿÿ¾€ñƒø… ‹EØ9Eä…é‹é‹‹EØ9EÌ…"‹EÌ9EÀ…én‹E‰EØ‹EÀ‰EÌéÒÿÿÿ‹EØ9Eô…‹E¾‰…tþÿÿé+‹EH;EØ…‹Eô¾@ÿ‰…tþÿÿé ‹Eؾ‰…tþÿÿ‹…tþÿÿ¾€ñƒø„éú‹E ‰…ÿÿÿéÿ…ÿÿÿ‹E´9…ÿÿÿ‡;‹…ÿÿÿ‹M싃ȋÿÿÿ‹U쉊‹…ÿÿÿ‹M싃ȋÿÿÿ‹U쉊é°ÿÿÿÿEØé‹EØ9EÌ…"‹EÌ9EÀ…éw‹E‰EØ‹EÀ‰EÌéÒÿÿÿ‹EØ9Eô…‹E¾‰…pþÿÿé+‹EH;EØ…‹Eô¾@ÿ‰…pþÿÿé ‹Eؾ‰…pþÿÿ‹…pþÿÿ¾€ñƒø…é‹E ‰… ÿÿÿéÿ… ÿÿÿ‹E´9… ÿÿÿ‡;‹… ÿÿÿ‹M싃ȋ ÿÿÿ‹U쉊‹… ÿÿÿ‹M싃ȋ ÿÿÿ‹U쉊é°ÿÿÿÿEØé˜è±R鎃½lþÿÿ‡éÿÿÿ‹…lþÿÿÿ$…~D9&>&Œ'¢(¢(*K+è/T2Ô2L33:K: 5¦3A9 7P: ;ð<b=¹=lBcCV@[A(>??éÛÿÿƒ}°„èÿM°‹E°‹M¨‹‰…ÿÿÿƒ½ÿÿÿ„ ‹…ÿÿÿ‰EØÿM°‹E°‹M¨‹‰EøÿM°‹E°‹M¨‹‰E´ÿM°‹E°‹M¨‹‰E ‹E´‰…ÿÿÿéÿÿÿÿ‹…ÿÿÿ9E ‡MÿM°‹E°‹M¨‹‹ÿÿÿ‹U쉊ÿM°‹E°‹M¨‹‹ÿÿÿ‹UĉŠÿM°‹E°‹M¨‹‹ÿÿÿ‹U”‰Šéžÿÿÿƒ}ø…é"ÿÿÿ‹Eø9E†åÆ…ÿÿÿ‹Eø3ÉŠ‰dþÿÿ鉯…ÿÿÿ‹Eø@‰Eð‹Eð3ÉŠ‰M˜‹Eð3ÉŠHñ€é€ÁáM˜ƒEð‹E˜Eð¾…ÿÿÿ…À„‹Eð3ÉŠƒù„¾…ÿÿÿ…À…‹Eð3ÉŠƒù…é~þÿÿéHéCƒ­dþÿÿ ƒ½dþÿÿ ‡/‹…dþÿÿ3ÉŠˆ¼Fÿ$¬FFFúE~F‹EØ9E ‡‹EØ9Eô‚‹EȉEÌéééÙÿÿƒ}Ü„é*Úÿÿƒ}¨„ ‹E¨PèkQƒÄÇE¨ƒ}”„ ‹E”PèNQƒÄÇE”ƒ}Ä„ ‹EÄPè1QƒÄÇEă}ü„ ‹EüPèQƒÄÇEüƒ}è„ ‹EèPè÷PƒÄÇEèƒ}¸„ ‹E¸PèÚPƒÄÇE¸ƒ}Є ‹EÐPè½PƒÄÇEЃ}ì„ ‹EìPè PƒÄÇEìƒ}¤„ ‹E¤PèƒPƒÄÇE¤ƒ}œ„ ‹EœPèfPƒÄÇEœ¸ÿÿÿÿé_^[ÉÃU‹ìƒì SVW‹E‹ƒÀ‰Eü‹E 9Eüƒ¢‹Eü3ÉŠ‰MôéuÿEü‹Eü3ÉŠ‰Mø‹Eü3ÉŠHñ€é€ÁáMøƒEüƒ}øŒþ‹Eø‹Mü3ÒŠTýƒú …•‹EP‹EøEüƒèP‹EüPè>ƒÄ ¾À…À…2Àé$‹EøEü‹Eü3ÉŠƒù„éNÿEü‹Eü3ÉŠ‰Mø‹Eü3ÉŠHñ€é€ÁáMøƒEü‹Eø‹Mü3ÒŠTýƒú „ ƒmüééVÿÿÿ‹Eü3ÉŠHþ‰Mø‹Eü3ÉŠHÿñ€é€ÁáMø‹EP‹EøEüP‹EüPè‡ƒÄ ¾À…À…2Àém‹EøEüéV‹EüƒÀ‹M‰°éP‹EP‹E PEüPèïƒÄ ¾À…À…2Àé*éƒ}ô„¹ÿÿÿƒ}ô„wþÿÿé¼ÿÿÿéRþÿÿ2Àé_^[ÉÃU‹ìƒì SVW‹E‰Eü‹Eü9E †„‹Eü3ÉŠ‰MôéaÿEü‹Eü3ÉŠ‰Mø‹Eü3ÉŠHñ€é€ÁáMøƒEü‹EøEüé:‹EP‹E PEüPè:ƒÄ ¾À…À…2Àé éƒ}ô„•ÿÿÿéÆÿÿÿépÿÿÿ°é_^[ÉÃU‹ìƒìSVW‹E‹‰Eü‹Eü‰EìÿEü‹Eì3ÉŠ‰Mèéa鹋Eü3ÉŠ‰Mø‹EP‹E PEüPè>ýÿÿƒÄ ˆEô‹Eø‹M‹$<…‹Eø‹M‹ƒàü¾Môƒá Á‹Mø‹U‰Š¾Eô…À…2ÀécéO‹Eü3ÉŠ‰Mð‹Eü3ÉŠHñ€é€ÁáMðƒEüƒ}ðŒ ‹EðEüé2ÀééƒEü‹Eü3ÉŠ‰Mð‹Eü3ÉŠHñ€é€ÁáMðƒEüƒ}ð…7ƒmü‹Eü3ÉŠ‰Mð‹Eü3ÉŠHñ€é€ÁáMðƒEü‹EðEüé2Àé¡é‹Eü3ÉŠ‹Eöˆ…2ÀéémƒEü2Àéqé]ƒ}è‡êÿÿÿ‹Eè3ÉŠˆvLÿ$RLÕJÚJLÕJDKK&LÕJ*L‹Eü‹M‰°é_^[ÉÃU‹ìƒìSVW‹E‰Eü‹E ‰Eøƒ}„H‹Eü‰EôÿEü‹Eø‰EðÿEø‹Eô3ÉŠ‹E¾‹Mð3ÒŠ‹M¾ ;Á„ ¸éÿMé®ÿÿÿ3Àé_^[ÉÃU‹ìƒìSVW‹Eƒ`ù‹Eƒ`ï‹E‹@ €‹M‰A‹EP¡4àP‹E P‹EPèƒÄ‰Eü‹Eü‹…8àé_^[ÉÃU‹ììxSVW‹E‰Eø‹E E‰EÀ‹E‹@‰EèÇEÄÇEÜÇEàÇEÈh€èCJƒÄ‰EЃ}Ð… ¸ éJ>ÇEÔ ÇEØ‹E‹M‰A ‹Eƒ`÷‹Eƒ`¿‹Eƒ`ß‹EÇ@‹EÇ@è >‹Eƒx…U‹Eƒ8„j ‹E‹PèîHƒÄ‹M‰éj èªIƒÄ‹M‰‹Eƒ8… ¸ é­=‹EÇ@ ‹E‹‰Eð‹Eð‰Eü‹Eø9EÀ„2=‹Eø9EÀ… ¸és=‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eì3ÀŠE쉅˜þÿÿé<‹E@;Eø„)öE…‹EP‹EøP‹EPèÞ>ƒÄ ¾À…À„‹Eð‹M+@‹M;A†å‹E‹‰E¼‹Ex… ¸éÓ<‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pè¯GƒÄ‹M‰‹Eƒ8… ¸ é‚<‹E‹M¼9„_3À+E¼‹MEð3À+E¼‹MEüƒ}à„ 3À+E¼‹MEàƒ}Ü„ 3À+E¼‹ME܃}Ä„ 3À+E¼‹MEÄéÿÿÿ‹EðÆÿEðéé7éœ;‹Eø9EÀ„)öE…‹EP‹EÀP‹EøPè/>ƒÄ ¾À…À„‹Eð‹M+@‹M;A†å‹E‹‰E¸‹Ex… ¸éŒ;‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèhFƒÄ‹M‰‹Eƒ8… ¸ é;;‹E‹M¸9„_3À+E¸‹MEð3À+E¸‹MEüƒ}à„ 3À+E¸‹MEàƒ}Ü„ 3À+E¸‹ME܃}Ä„ 3À+E¸‹MEÄéÿÿÿ‹EðÆ ÿEðéé½5éU:öE… öE„éŸ5ƒ}Ü…(öE „¸ éz:éöE…ém5ÆE´ÆE¬ÆE°3ÀŠEìƒø+„¾E¬ ˆE¬é3ÀŠEìƒø?„¾E° ˆE°é‹Eø9EÀ…é‹Eø9EÀ… ¸éû9‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eì3ÀŠEìƒø*„&öE…!3ÀŠEìƒø+„3ÀŠEìƒø?…é¡öE„3ÀŠEìƒø\…‹Eø9EÀ… ¸éq9‹Eø9EÀ… ¸é[9‹EøŠˆEÌÿEøƒ}è„3ÀŠEÌ‹M芈EÌ3ÀŠẼø+„3ÀŠẼø?„ ÿMøÿMøéŠËEìéÿMøééŸþÿÿƒ}Ü…éŽ8¾E°…À„.‹Eð‹M+ƒÀ‹M;A†å‹E‹‰E¨‹Ex… ¸é¥8‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèCƒÄ‹M‰‹Eƒ8… ¸ éT8‹E‹M¨9„_3À+E¨‹MEð3À+E¨‹MEüƒ}à„ 3À+E¨‹MEàƒ}Ü„ 3À+E¨‹ME܃}Ä„ 3À+E¨‹MEÄéÿÿÿƒ}è„‹Eø3ÉŠHþ‹E辉…èþÿÿé ‹Eø¾@þ‰…èþÿÿƒ}è„‹Eè¾@.‰…äþÿÿé Ç…äþÿÿ.‹…äþÿÿ9…èþÿÿ…ª¾E¬…À„ž‹Eø9EÀ†’ƒ}è„‹Eø3ÉŠ‹E辉…àþÿÿé ‹Eø¾‰…àþÿÿƒ}è„‹Eè¾@ ‰…Üþÿÿé Ç…Üþÿÿ ‹…Üþÿÿ9…àþÿÿ…+öE@…!‹EÜ+EðƒèP‹EðPj è7ƒÄ ÆE´é‹E܃è+EðƒèP‹EðPjèy7ƒÄ ƒEð‹Eð‹M+ƒÀ‹M;A†å‹E‹‰E¤‹Ex… ¸éw6‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèSAƒÄ‹M‰‹Eƒ8… ¸ é&6‹E‹M¤9„_3À+E¤‹MEð3À+E¤‹MEüƒ}à„ 3À+E¤‹MEàƒ}Ü„ 3À+E¤‹ME܃}Ä„ 3À+E¤‹MEÄéÿÿÿ‹EðP‹EðƒÀ+E܃èP‹EÜP¾E´ƒøÀƒÀPè«6ƒÄÇEăEð¾E¬…À…‹Eð‹M+ƒÀ‹M;A†å‹E‹‰E ‹Ex… ¸é:5‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pè@ƒÄ‹M‰‹Eƒ8… ¸ éé4‹E‹M 9„_3À+E ‹MEð3À+E ‹MEüƒ}à„ 3À+E ‹MEàƒ}Ü„ 3À+E ‹ME܃}Ä„ 3À+E ‹MEÄéÿÿÿ‹EðP‹E܃À+E܃èP‹EÜPjèy5ƒÄƒEðéó3‹Eð‰EÜ‹Eð‹M+@‹M;A†å‹E‹‰Eœ‹Ex… ¸é4‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pèî>ƒÄ‹M‰‹Eƒ8… ¸ éÁ3‹E‹Mœ9„_3À+Eœ‹MEð3À+Eœ‹MEüƒ}à„ 3À+Eœ‹MEàƒ}Ü„ 3À+Eœ‹ME܃}Ä„ 3À+Eœ‹MEÄéÿÿÿ‹EðÆÿEðéå2ÆE˜‹Eø9EÀ… ¸é'3‹Eð‹M+ƒÀ"‹M;A†å‹E‹‰E”‹Ex… ¸éî2‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèÊ=ƒÄ‹M‰‹Eƒ8… ¸ é2‹E‹M”9„_3À+E”‹MEð3À+E”‹MEüƒ}à„ 3À+E”‹MEàƒ}Ü„ 3À+E”‹ME܃}Ä„ 3À+E”‹MEÄéÿÿÿ‹Eð‰EÜ‹Eð‹M+@‹M;A†å‹E‹‰E‹Ex… ¸éî1‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèÊ<ƒÄ‹M‰‹Eƒ8… ¸ é1‹E‹M9„_3À+E‹MEð3À+E‹MEüƒ}à„ 3À+E‹MEàƒ}Ü„ 3À+E‹ME܃}Ä„ 3À+E‹MEÄéÿÿÿ‹Eø¾ƒø^… ‹EðÆé‹EðÆÿEð‹Eø¾ƒø^…ÿEø‹Eø‰Eô‹Eð‹M+@‹M;A†å‹E‹‰EŒ‹Ex… ¸é¹0‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pè•;ƒÄ‹M‰‹Eƒ8… ¸ éh0‹E‹MŒ9„_3À+EŒ‹MEð3À+EŒ‹MEüƒ}à„ 3À+EŒ‹MEàƒ}Ü„ 3À+EŒ‹ME܃}Ä„ 3À+EŒ‹MEÄéÿÿÿ‹EðÆ ÿEðj j‹EðPè_;ƒÄ ‹Eð3ÉŠHþƒù…öE„‹Eð3ÉŠH€É‹EðˆH‹Eø9EÀ… ¸é›/‹Eø9EÀ… ¸é…/‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈EìöE„¨3ÀŠEìƒø\…š‹Eø9EÀ… ¸é4/‹Eø9EÀ… ¸é/‹EøŠˆEÌÿEøƒ}è„3ÀŠEÌ‹M芈EÌ3ÀŠEÌÁø‹Mð3ÛŠ‰þÿÿ»3ÀŠEÌ™3Â+ƒà3Â+ŠÈÓã‹…þÿÿ Ã3ÉŠMÌÁù‹Uðˆéÿþÿÿ3ÀŠEìƒø]…‹Eô@;Eø„é¨ ¾E˜…À„'3ÀŠEìƒø-…‹Eø¾ƒø]„ ¸ é].3ÀŠEìƒø-…“‹Eøƒè;E‚‹Eø¾@þƒø[„t‹Eøƒè;E‚ ‹Eø¾@ýƒø[…‹Eø¾@þƒø^„E‹Eø¾ƒø]„6‹EðP‹EP‹EèP‹EÀPEøPèÎ1ƒÄ‰Eˆƒ}ˆ„‹EˆéÁ-éÏ ‹Eø¾ƒø-…‹Eø¾@ƒø]„o‹Eø9EÀ… ¸é‡-‹EøŠˆEÌÿEøƒ}è„3ÀŠEÌ‹M芈EÌ‹EðP‹EP‹EèP‹EÀPEøPè@1ƒÄ‰E„ƒ}„„‹E„é3-éA öE„í 3ÀŠEìƒø[…ß ‹Eø¾ƒø:…Ð ‹Eø9EÀ… ¸éñ,‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈EìÆEÌ‹Eø9EÀ… ¸é´,‹Eø9EÀ… ¸éž,‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eì3ÀŠEìƒø:„(3ÀŠEìƒø]„‹Eø9EÀ„3ÀŠẼø…éŠEì3ÉŠM̈„ |ÿÿÿþEÌéuÿÿÿ3ÀŠEÌÆ„|ÿÿÿ3ÀŠEìƒø:…… ‹Eø¾ƒø]…v hâ…|ÿÿÿPè-9ƒÄ…À… Æ…Pÿÿÿ鯅Pÿÿÿh â…|ÿÿÿPèþ8ƒÄ…À… Æ…Tÿÿÿ鯅Tÿÿÿhâ…|ÿÿÿPèÏ8ƒÄ…À… Æ…Hÿÿÿ鯅Hÿÿÿhâ…|ÿÿÿPè 8ƒÄ…À… Æ…xÿÿÿ鯅xÿÿÿh$â…|ÿÿÿPèq8ƒÄ…À… Æ…tÿÿÿ鯅tÿÿÿh,â…|ÿÿÿPèB8ƒÄ…À… Æ…`ÿÿÿ鯅`ÿÿÿh4â…|ÿÿÿPè8ƒÄ…À… Æ…Xÿÿÿ鯅Xÿÿÿh<â…|ÿÿÿPèä7ƒÄ…À… Æ…hÿÿÿ鯅hÿÿÿhDâ…|ÿÿÿPèµ7ƒÄ…À… Æ…\ÿÿÿ鯅\ÿÿÿhLâ…|ÿÿÿPè†7ƒÄ…À… Æ…Lÿÿÿ鯅LÿÿÿhTâ…|ÿÿÿPèW7ƒÄ…À… Æ…dÿÿÿ鯅dÿÿÿh\â…|ÿÿÿPè(7ƒÄ…À… Æ…lÿÿÿ鯅lÿÿÿhdâ…|ÿÿÿPèù6ƒÄ…À„>hlâ…|ÿÿÿPèÝ6ƒÄ…À„"htâ…|ÿÿÿPèÁ6ƒÄ…À„h|â…|ÿÿÿPè¥6ƒÄ…À„êh„â…|ÿÿÿPè‰6ƒÄ…À„ÎhŒâ…|ÿÿÿPèm6ƒÄ…À„²h”â…|ÿÿÿPèQ6ƒÄ…À„–hœâ…|ÿÿÿPè56ƒÄ…À„zh¤â…|ÿÿÿPè6ƒÄ…À„^h¬â…|ÿÿÿPèý5ƒÄ…À„Bh´â…|ÿÿÿPèá5ƒÄ…À„&h¼â…|ÿÿÿPèÅ5ƒÄ…À„ ¸éq(‹Eø9EÀ… ¸é[(‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eì‹Eø9EÀ… ¸é"(Ç…pÿÿÿéÿ…pÿÿÿ½pÿÿÿk¾…Pÿÿÿ…À„g½pÿÿÿ€ƒWƒ=$åŽh‹…pÿÿÿPè_4ƒÄ‰…Øþÿÿé‹…pÿÿÿ‹ ã3Òf‹A≕Øþÿÿƒ½Øþÿÿ…¡¾…Tÿÿÿ…À„g½pÿÿÿ€ƒWƒ=$åŽh‹…pÿÿÿPèé3ƒÄ‰…Ôþÿÿé‹…pÿÿÿ‹ ã3Òf‹A≕Ôþÿÿƒ½Ôþÿÿ…+¾…Hÿÿÿ…À„ƒ½pÿÿÿ „ƒ½pÿÿÿ „¾…xÿÿÿ…À„a½pÿÿÿ€ƒQƒ=$åŽj ‹…pÿÿÿPèM3ƒÄ‰…Ðþÿÿé‹…pÿÿÿ‹ ã3Òf‹Aƒâ ‰•Ðþÿÿƒ½Ðþÿÿ…’¾…tÿÿÿ…À„a½pÿÿÿ€ƒQƒ=$åŽj‹…pÿÿÿPèÝ2ƒÄ‰…Ìþÿÿé‹…pÿÿÿ‹ ã3Òf‹Aƒâ‰•Ìþÿÿƒ½Ìþÿÿ…"¾…`ÿÿÿ…À„g½pÿÿÿ€ƒWƒ=$åŽh‹…pÿÿÿPèj2ƒÄ‰…Èþÿÿé‹…pÿÿÿ‹ ã3Òf‹A≕Èþÿÿƒ½Èþÿÿ…¬¾…Xÿÿÿ…À„a½pÿÿÿ€ƒQƒ=$åŽj‹…pÿÿÿPè÷1ƒÄ‰…Äþÿÿé‹…pÿÿÿ‹ ã3Òf‹Aƒâ‰•Äþÿÿƒ½Äþÿÿ…<¾…hÿÿÿ…À„g½pÿÿÿ€ƒWƒ=$åŽhW‹…pÿÿÿPè„1ƒÄ‰…Àþÿÿé‹…pÿÿÿ‹ ã3Òf‹AâW‰•Àþÿÿƒ½Àþÿÿ…ƾ…\ÿÿÿ…À„a½pÿÿÿ€ƒQƒ=$åŽj‹…pÿÿÿPè1ƒÄ‰…¼þÿÿé‹…pÿÿÿ‹ ã3Òf‹Aƒâ‰•¼þÿÿƒ½¼þÿÿ…V¾…Lÿÿÿ…À„a½pÿÿÿ€ƒQƒ=$åŽj‹…pÿÿÿPè¡0ƒÄ‰…¸þÿÿé‹…pÿÿÿ‹ ã3Òf‹Aƒâ‰•¸þÿÿƒ½¸þÿÿ…æ¾…dÿÿÿ…À„a½pÿÿÿ€ƒQƒ=$åŽj‹…pÿÿÿPè10ƒÄ‰…´þÿÿé‹…pÿÿÿ‹ ã3Òf‹Aƒâ‰•´þÿÿƒ½´þÿÿ…v¾…lÿÿÿ…À„¶½pÿÿÿ€ƒ¦ƒ=$åŽh€‹…pÿÿÿPè¾/ƒÄ‰…°þÿÿé‹…pÿÿÿ‹ ã3Òf‹A •°þÿÿƒ½°þÿÿ„O3ÀŠ…pÿÿÿÁø‹Mð3ÛŠ‰Œþÿÿ»3ÀŠ…pÿÿÿ™3Â+ƒà3Â+ŠÈÓã‹…Œþÿÿ Ã3ÉŠpÿÿÿÁù‹UðˆéúÿÿÆE˜éMþEÌŠË…¬þÿÿþMÌ3ÀŠ…¬þÿÿ…À„ÿMøéÜÿÿÿ‹Eð3ÉŠH €É‹EðˆH ‹Eð3ÉŠH€É‹EðˆHÆE˜éJÆE˜3ÀŠEìÁø‹Mð3ÛŠ‰ˆþÿÿ»3ÀŠEì™3Â+ƒà3Â+ŠÈÓã‹…ˆþÿÿ Ã3ÉŠMìÁù‹Uðˆé7òÿÿ‹Eð3ÉŠHÿ…ÉŽ$‹Eð3ÉŠHÿ‹Eð3ÒŠTÿ…Ò… ‹EðþHÿéÌÿÿÿ‹Eð3ÉŠHÿMðéH!öE „ éÎéé’öE „ é)ééyöE„ é‘éé`öE€„ éxééGöE„öE„ é( éé$‹Eø9EÀ… ¸é!‹Eø9EÀ… ¸éñ ‹EøŠˆEìÿEø3ÀŠE쉅”þÿÿéöE „éã‹Eÿ@ÿEÈ‹EØ9EÔ…1‹EÔ€ÁàP‹EÐPè®+ƒÄ‰EЃ}Ð… ¸ é… ÁeÔ‹Eü‹M+‹MØÁá ‰‹UЉƒ}à„‹Eà‹M+@‹MØÁá ‰‹UЉDé‹EØÁà€‹MÐÇD‹Eð‹M+‹MØÁá ‰‹UЉD ‹EÈ‹MØÁá ‰‹UЉD}Èÿ‡I‹Eð‹M+ƒÀ‹MØÁá ‰‹UЉD‹Eð‹M+ƒÀ‹M;A†ú‹E‹‰…Dÿÿÿ‹Ex… ¸éŸ‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pè{*ƒÄ‹M‰‹Eƒ8… ¸ éN‹E‹Dÿÿÿ9„n3À+…Dÿÿÿ‹MEð3À+…Dÿÿÿ‹MEüƒ}à„3À+…Dÿÿÿ‹MEàƒ}Ü„3À+…Dÿÿÿ‹ME܃}Ä„3À+…Dÿÿÿ‹MEÄéïþÿÿ‹EðÆÿEðŠEÈ‹MðˆÿEð‹EðÆÿEðÿEØÇEàÇEÜ‹Eð‰EüÇEÄéŒöE „é—ƒ}Ø…öE„ é~é ¸éSƒ}à„1‹Eð‹M+@‹M;A†ú‹E‹‰…@ÿÿÿ‹Ex… ¸é‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pèë(ƒÄ‹M‰‹Eƒ8… ¸ 龋E‹@ÿÿÿ9„n3À+…@ÿÿÿ‹MEð3À+…@ÿÿÿ‹MEüƒ}à„3À+…@ÿÿÿ‹MEàƒ}Ü„3À+…@ÿÿÿ‹ME܃}Ä„3À+…@ÿÿÿ‹MEÄéñþÿÿ‹EðÆÿEð‹EðH+EàƒèP‹EàPj èÝƒÄ ƒ}Ø…öE„ éé ¸éðÿMØ‹EØÁà€‹MЋ‹M‰Eü‹EØÁà€‹MЃ|„‹EØÁà€‹MЋD‹MH‰EàéÇEà‹EØÁà€‹MЋD ‹M‰EÜ‹EØÁà€‹MЋD‰…<ÿÿÿÇEĽ<ÿÿÿÿ‡e‹EØÁà€‹MЋD‹M‰…8ÿÿÿ‹EÈ+…<ÿÿÿ‹8ÿÿÿˆ‹Eð‹M+ƒÀ‹M;A†ú‹E‹‰…4ÿÿÿ‹Ex… ¸éí‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèÉ&ƒÄ‹M‰‹Eƒ8… ¸ 霋E‹4ÿÿÿ9„n3À+…4ÿÿÿ‹MEð3À+…4ÿÿÿ‹MEüƒ}à„3À+…4ÿÿÿ‹MEàƒ}Ü„3À+…4ÿÿÿ‹ME܃}Ä„3À+…4ÿÿÿ‹MEÄéïþÿÿ‹EðÆÿEðŠ…<ÿÿÿ‹MðˆÿEð‹EÈ+…<ÿÿÿ‹MðˆÿEðéíöE… öE€„éîöE„éÊ‹Eð‹M+ƒÀ‹M;A†ú‹E‹‰…0ÿÿÿ‹Ex… ¸é‡‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pèc%ƒÄ‹M‰‹Eƒ8… ¸ é6‹E‹0ÿÿÿ9„n3À+…0ÿÿÿ‹MEð3À+…0ÿÿÿ‹MEüƒ}à„3À+…0ÿÿÿ‹MEàƒ}Ü„3À+…0ÿÿÿ‹ME܃}Ä„3À+…0ÿÿÿ‹MEÄéïþÿÿ‹EðP‹EðƒÀ+EüƒèP‹EüPjè´ƒÄÇEăEðƒ}à„‹Eð+EàƒèP‹EàPj è+ƒÄ ‹Eð‰Eà‹Eð‹M+ƒÀ‹M;A†ú‹E‹‰…,ÿÿÿ‹Ex… ¸é$‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pè$ƒÄ‹M‰‹Eƒ8… ¸ éÓ‹E‹,ÿÿÿ9„n3À+…,ÿÿÿ‹MEð3À+…,ÿÿÿ‹MEüƒ}à„3À+…,ÿÿÿ‹MEàƒ}Ü„3À+…,ÿÿÿ‹ME܃}Ä„3À+…,ÿÿÿ‹MEÄéïþÿÿƒEðÇEÜ‹Eð‰Eüé;öE„+„ öE…‹Eøƒè;E…‹Eø9EÀ…éÇ…$ÿÿÿÿÿÿÿÇ…(ÿÿÿÿÿÿÿ‹EøH‰Eä‹Eø9EÀ…öE„ éÖé ¸ 麋Eø9EÀ„‹Eø9EÀ… ¸é˜‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eì3ÀŠEì=€ƒÏƒ=$åŽj3ÀŠEìPèê#ƒÄ‰…¨þÿÿé3ÀŠEì‹ ã3Òf‹Aƒâ‰•¨þÿÿƒ½¨þÿÿ„€ƒ½$ÿÿÿ Ç…$ÿÿÿ3ÀŠEì‹$ÿÿÿ ‰Hƒè0‰…$ÿÿÿ‹Eø9EÀ…é>‹Eø9EÀ… ¸é¾‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eìé!ÿÿÿ3ÀŠEìƒø,…@‹Eø9EÀ„‹Eø9EÀ… ¸éf‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eì3ÀŠEì=€ƒÏƒ=$åŽj3ÀŠEìPè¸"ƒÄ‰…¤þÿÿé3ÀŠEì‹ ã3Òf‹Aƒâ‰•¤þÿÿƒ½¤þÿÿ„€ƒ½(ÿÿÿ Ç…(ÿÿÿ3ÀŠEì‹(ÿÿÿ ‰Hƒè0‰…(ÿÿÿ‹Eø9EÀ…é>‹Eø9EÀ… ¸éŒ‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eìé!ÿÿÿƒ½(ÿÿÿ Ç…(ÿÿÿÿé ‹…$ÿÿÿ‰…(ÿÿÿƒ½$ÿÿÿŒ"½(ÿÿÿÿ‹…$ÿÿÿ9…(ÿÿÿöE„ é é ¸ éïöE…Q3ÀŠEìƒø\„ ¸ éÍ‹Eø9EÀ… ¸é·‹EøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈Eì3ÀŠEìƒø}„öE„ é„é ¸ éhƒ}Ü…3öE „¸ éJéöE„ ‹Eð‰EÜéé8ƒ½(ÿÿÿ…9‹Eð‹M+ƒÀ‹M;A†ú‹E‹‰… ÿÿÿ‹Ex… ¸éâ‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹P较ċM‰‹Eƒ8… ¸ é‘‹E‹ ÿÿÿ9„n3À+… ÿÿÿ‹MEð3À+… ÿÿÿ‹MEüƒ}à„3À+… ÿÿÿ‹MEàƒ}Ü„3À+… ÿÿÿ‹ME܃}Ä„3À+… ÿÿÿ‹MEÄéïþÿÿ‹EðP‹EðƒÀ+E܃èP‹EÜPj èƒÄƒEðéß3Àƒ½(ÿÿÿŸÀ€ÀƒÀ ‰…ÿÿÿ‹Eð‹M+…ÿÿÿ‹M;A†ú‹E‹‰…ÿÿÿ‹Ex… ¸éŒ‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèhƒÄ‹M‰‹Eƒ8… ¸ é;‹E‹ÿÿÿ9„n3À+…ÿÿÿ‹MEð3À+…ÿÿÿ‹MEüƒ}à„3À+…ÿÿÿ‹MEàƒ}Ü„3À+…ÿÿÿ‹ME܃}Ä„3À+…ÿÿÿ‹MEÄéìþÿÿ‹EðP‹…$ÿÿÿP3Àƒ½(ÿÿÿŸÀ€EðƒÀ+E܃èP‹EÜPjèõƒÄƒEð‹EðP‹…$ÿÿÿPj‹EÜPjèփăEðƒ½(ÿÿÿŽL‹…(ÿÿÿHP‹E܃À+EðƒèP‹EðPjèƒÄƒEð‹EðP‹…(ÿÿÿHP‹Eð+EÜP‹EÜPjè}ƒÄƒEðÇEÄÇEäéõ ‹Eä‰EøÇEä‹Eø9EÀ… ¸éЋEøŠˆEìÿEøƒ}è„3ÀŠEì‹M芈EìöE…!‹Eø9Eƒ‹Eø¾@ÿƒø\…éž é„ ‹Eð‰EÜ‹Eð‹M+@‹M;A†ú‹E‹‰…ÿÿÿ‹Ex… ¸é=‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèƒÄ‹M‰‹Eƒ8… ¸ éì‹E‹ÿÿÿ9„n3À+…ÿÿÿ‹MEð3À+…ÿÿÿ‹MEüƒ}à„3À+…ÿÿÿ‹MEàƒ}Ü„3À+…ÿÿÿ‹ME܃}Ä„3À+…ÿÿÿ‹MEÄéñþÿÿ‹EðÆÿEðé\ ‹Eð‰EÜ‹Eð‹M+@‹M;A†ú‹E‹‰…ÿÿÿ‹Ex… ¸é‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèöƒÄ‹M‰‹Eƒ8… ¸ éÉ‹E‹ÿÿÿ9„n3À+…ÿÿÿ‹MEð3À+…ÿÿÿ‹MEüƒ}à„3À+…ÿÿÿ‹MEàƒ}Ü„3À+…ÿÿÿ‹ME܃}Ä„3À+…ÿÿÿ‹MEÄéñþÿÿ‹EðÆÿEðé9 ‹Eð‹M+@‹M;A†ú‹E‹‰… ÿÿÿ‹Ex… ¸éý ‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèكċM‰‹Eƒ8… ¸ é¬ ‹E‹ ÿÿÿ9„n3À+… ÿÿÿ‹MEð3À+… ÿÿÿ‹MEüƒ}à„3À+… ÿÿÿ‹MEàƒ}Ü„3À+… ÿÿÿ‹ME܃}Ä„3À+… ÿÿÿ‹MEÄéñþÿÿ‹EðÆÿEðé‹Eð‹M+@‹M;A†ú‹E‹‰…ÿÿÿ‹Ex… ¸éà ‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹P較ċM‰‹Eƒ8… ¸ é ‹E‹ÿÿÿ9„n3À+…ÿÿÿ‹MEð3À+…ÿÿÿ‹MEüƒ}à„3À+…ÿÿÿ‹MEàƒ}Ü„3À+…ÿÿÿ‹ME܃}Ä„3À+…ÿÿÿ‹MEÄéñþÿÿ‹EðÆÿEðéÿ‹Eð‹M+@‹M;A†ú‹E‹‰…ÿÿÿ‹Ex… ¸éà ‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹P蟃ċM‰‹Eƒ8… ¸ ér ‹E‹ÿÿÿ9„n3À+…ÿÿÿ‹MEð3À+…ÿÿÿ‹MEüƒ}à„3À+…ÿÿÿ‹MEàƒ}Ü„3À+…ÿÿÿ‹ME܃}Ä„3À+…ÿÿÿ‹MEÄéñþÿÿ‹EðÆÿEðéâ‹Eð‹M+@‹M;A†ú‹E‹‰…ÿÿÿ‹Ex… ¸é¦ ‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹P肃ċM‰‹Eƒ8… ¸ éU ‹E‹ÿÿÿ9„n3À+…ÿÿÿ‹MEð3À+…ÿÿÿ‹MEüƒ}à„3À+…ÿÿÿ‹MEàƒ}Ü„3À+…ÿÿÿ‹ME܃}Ä„3À+…ÿÿÿ‹MEÄéñþÿÿ‹EðÆÿEðéÅ‹Eð‹M+@‹M;A†ú‹E‹‰…üþÿÿ‹Ex… ¸é‰ ‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèeƒÄ‹M‰‹Eƒ8… ¸ é8 ‹E‹üþÿÿ9„n3À+…üþÿÿ‹MEð3À+…üþÿÿ‹MEüƒ}à„3À+…üþÿÿ‹MEàƒ}Ü„3À+…üþÿÿ‹ME܃}Ä„3À+…üþÿÿ‹MEÄéñþÿÿ‹EðÆ ÿEð騋Eð‹M+@‹M;A†ú‹E‹‰…øþÿÿ‹Ex… ¸él‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèHƒÄ‹M‰‹Eƒ8… ¸ é‹E‹øþÿÿ9„n3À+…øþÿÿ‹MEð3À+…øþÿÿ‹MEüƒ}à„3À+…øþÿÿ‹MEàƒ}Ü„3À+…øþÿÿ‹ME܃}Ä„3À+…øþÿÿ‹MEÄéñþÿÿ‹EðÆ ÿEðé‹öE@„é3ÀŠEìƒè0ˆEÌ3ÀŠEÌ;EȆ ¸éW3ÀŠEÌP‹EØP‹EÔP‹EÐPè⠃ľÀ…À„é4‹Eð‰EÜ‹Eð‹M+ƒÀ‹M;A†ú‹E‹‰…ôþÿÿ‹Ex… ¸éë‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹PèǃċM‰‹Eƒ8… ¸ éš‹E‹ôþÿÿ9„n3À+…ôþÿÿ‹MEð3À+…ôþÿÿ‹MEüƒ}à„3À+…ôþÿÿ‹MEàƒ}Ü„3À+…ôþÿÿ‹ME܃}Ä„3À+…ôþÿÿ‹MEÄéïþÿÿ‹EðÆÿEðŠEÌ‹MðˆÿEðéÿöE„ éVËÿÿééƒ}è„3ÀŠEì‹M芈EìééÉ鿃­”þÿÿ'ƒ½”þÿÿU‡Åÿÿÿ‹…”þÿÿ3ÉŠˆÍ†ÿ$†{ƒKk—m$†˜„ê}$†AÇ|^‚$€¤{ès6q=†     éƒ}Ä„f‹EÄ3ÉŠMÄA;Mð…R‹EÄ3ÉŠùÿ„?‹Eø¾ƒø*„0‹Eø¾ƒø^„!öE„M‹Eø¾ƒø\…/‹Eø¾@ƒø+„‹Eø¾@ƒø?…Ç… þÿÿé Ç… þÿÿé7‹Eø¾ƒø+„‹Eø¾ƒø?…Ç… þÿÿé Ç… þÿÿƒ½ þÿÿ…†öE„¬öE„-‹Eø¾ƒø{…Ç…œþÿÿé Ç…œþÿÿé8‹Eø¾ƒø\…‹Eø¾@ƒø{…Ç…œþÿÿé Ç…œþÿÿƒ½œþÿÿ„0‹Eð‰EÜ‹Eð‹M+ƒÀ‹M;A†ú‹E‹‰…ðþÿÿ‹Ex… ¸éG‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pè#ƒÄ‹M‰‹Eƒ8… ¸ éö‹E‹ðþÿÿ9„n3À+…ðþÿÿ‹MEð3À+…ðþÿÿ‹MEüƒ}à„3À+…ðþÿÿ‹MEàƒ}Ü„3À+…ðþÿÿ‹ME܃}Ä„3À+…ðþÿÿ‹MEÄéïþÿÿ‹EðÆÿEð‹EðÆÿEð‹EðH‰EÄ‹Eð‹M+@‹M;A†ú‹E‹‰…ìþÿÿ‹Ex… ¸é‹EÁ`‹Ex† ‹EÇ@‹E‹@P‹E‹Pèû ƒÄ‹M‰‹Eƒ8… ¸ é΋E‹ìþÿÿ9„n3À+…ìþÿÿ‹MEð3À+…ìþÿÿ‹MEüƒ}à„3À+…ìþÿÿ‹MEàƒ}Ü„3À+…ìþÿÿ‹ME܃}Ä„3À+…ìþÿÿ‹MEÄéñþÿÿŠEì‹MðˆÿEð‹EÄþéÙéÔƒ­˜þÿÿ ƒ½˜þÿÿr‡#üÿÿ‹…˜þÿÿ3ÉŠˆR‹ÿ$‹¯j)P}j–j‰QpQÒWpQàXkáNájÈj(‡      éÂÂÿÿƒ}à„‹Eð+EàƒèP‹EàPj èúƒÄ ƒ}Ø„ ¸é!‹EÐPèw ƒÄ‹Eð‹M+‹M‰A3Àé_^[ÉÃU‹ìƒìSVWƒ=0à„éhjhñèN ƒÄ ÇEüaéÿEüƒ}üz‹EüÆ€ñéäÿÿÿÇEüAéÿEüƒ}üZ‹EüÆ€ñéäÿÿÿÇEü0éÿEüƒ}ü9‹EüÆ€ñéäÿÿÿÆïñÇ0à_^[ÉÃU‹ìSVWŠE‹M ˆŠE‹M ˆA‹E‹M ˆa_^[ÉÃU‹ìSVWŠE‹M ˆŠE‹M ˆA‹E‹M ˆaŠE‹M ˆA‹E‹M ˆa_^[ÉÃU‹ìƒìSVW‹E‰Eø‹EƒÀ‰Eü‹Eø9E „ÿMüÿMø‹EøŠ‹Müˆéßÿÿÿ‹EP‹E P‹EPèZÿÿÿƒÄ _^[ÉÃU‹ìƒìSVW‹E‰Eø‹EƒÀ‰Eü‹E 9Eø„ÿMüÿMø‹EøŠ‹Müˆéßÿÿÿ‹EP‹EP‹E P‹EPè)ÿÿÿƒÄ_^[ÉÃU‹ìƒìSVW‹E ƒè‰Eø‹E9Eø†‹Eø¾@ÿƒø\… ÆEüéÆEü‹Eø¾ƒø(…öE …1¾Eü…À…%‹Eø¾ƒø|…öE€… ¾Eü…À„°é2Àé_^[ÉÃU‹ìƒìSVW‹E‰Eô‹Eô¾ƒø\… ÆEüéÆEü‹E@;E ‚ ÇEøé‹E@‰EøöE „'‹Eô¾ƒø)… ÇEðéÇEðé8¾Eü…À„%ƒ}ø„‹Eø¾ƒø)… ÇEðéÇEðƒ}ð…söE€„'‹Eô¾ƒø|… ÇEìéÇEìé8¾Eü…À„%ƒ}ø„‹Eø¾ƒø|… ÇEìéÇEìƒ}ì„°é2Àé_^[ÉÃU‹ìƒìSVW‹EH‰EüéÿMüƒ}üŒ%‹EüÁà€‹M‹U9T…°é éÎÿÿÿ2Àé_^[ÉÃU‹ìƒìSVW‹E‹‰Eü‹E 9Eü… ¸ éï‹Eü3ÉŠHþ‰Mô‹Eü3ÉŠ‰Mø‹Eÿ‹Eô9EøöE„ ¸ é3À鮋Eô‰EðéÿEð‹Eð9Eø‚ƒ}„3ÀŠEð‹M¾‰Eìé‹Eð‰Eìƒ}„3ÀŠEð‹M¾‰Eèé‹Eð‰Eè3ÀŠEìÁø‹M3ÛŠ‰]ä»3ÀŠEè™3Â+ƒà3Â+ŠÈÓã‹Eä Ã3ÉŠMìÁù‹Uˆédÿÿÿ3Àé_^[ÉÃU‹ìƒìSVWƒ}…ƒ=ò… ¸Äâéµ3À鮃=ò…\hÈ臃ģòƒ=ò… ¸äâéxÇ”òÈhèTƒÄ£ òƒ= ò… ¸øâéE¡¬ò €£¬òhò¡4àP‹EPèƒÄP‹EPèx»ÿÿƒÄ‰Eü‹Eü‹…8àé_^[ÉÃU‹ìƒìSVW‹EPèɃĉEüj‹EüPj‹EüP‹EPhò膄ÿÿƒÄ…ÀŒ ¸é3Àé_^[ÉÃU‹ìƒìSVWöE„ ÇEüܲéÇEüÆ‹EÇ‹EÇ@‹EÇ@öE„ËhèAƒÄ‹M‰A‹Eƒx… ¸ éBÇEôéÿEô}ôƒ€}ô€ƒ_ƒ=$åŽj‹EôP蠃ĉEðé‹Eô‹ ã3Òf‹Aƒâ‰Uðƒ}ð„‹EôPèƒÄ‹M‹I‹UôˆéŠEô‹M‹I‹Uôˆépÿÿÿé ‹EÇ@öE„!ƒeü¿Mü‹E‹@ €‹M‰Aé ‹E`ÿÿÿöE„‹E‹@ƒÈ‹M‰Aé‹Eƒ`ï‹EP‹EüP‹E PèûƒÄP‹E Pèq¹ÿÿƒÄ‰Eøƒ}ø…ÇEø‹Eøé_^[ÉÃU‹ìƒì<u©€t jèíƒÄhPåÿô…ÀthHåPÿð…Àt jèăÄè|3É‹dåŠÎ‹Â%ÿÿ0åÁê‰ på£lå‰dåÁàÁ£håèR …Àu èY3À ÿì£Pèă=P£4åt%…Àt!èíè˜èèèy¸ è 3À …Àu9¡0å…À~+Hƒ=œå£0åuè–èè, è׸ 3À ƒøu jèÎ ƒÄ¸ ÌÌÌSVW»‹|$U;ûu*0åƒÿtƒÿuP¡T…Àt/‹l$‹t$UWVÿЋØë&…ÿuØ¡0å…À~H£0åëÇ3À]_^[ ‹t$‹l$…Ût"UWVèCþÿÿ‹Øë‹t$‹l$…ÛtUWVè[‹Ø…Ûuƒÿu èk è…ÿtƒÿu"UWVèþÿÿ…Àu3Û…Ût¡T…ÀtUWVÿЋ؋Ã]_^[ ÌÌ¡@åƒøt …Àuƒ=Dåuèt‹D$P誃Ähÿÿ<åƒÄÃÌÌÌÌÌÌÌÌ¡H…ÀtÿÐhàhàèöƒÄhàhàèäƒÄËD$jjPè"ƒÄ ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌjjjèƒÄ ÃÌSVè‰Çœåƒ|$‹\$ˆ˜åu?ƒ=Lt$‹5Dƒî;5Lr‹…ÀtÿЃî;5LsíhàhàèRƒÄh$àh àè@ƒÄ…Ûtè$^[ËD$ Pÿü^[ÃÌÌÌj èɃÄÃÌÌÌÌÌj è)ƒÄÃÌÌÌÌÌVW‹|$‹t$ ;þv‹…ÀtÿЃÆ;þwñ_^Ãì SVW3Û‹|$UGþƒøw3ÉŠˆ(¢ÿ$¢¸ÿÿÿÿ]_^[ƒÄ ÃÇD$ å‹5 åëNèÊ ‹è‹@PPW莋pƒÄƒÀ‰D$ë7ÇD$¬å‹5¬åëÇD$¤å‹5¤åëÇD$¨å‹5¨å»‹l$…Ût jèíƒÄƒþu…Ût jèJƒÄ3À]_^[ƒÄ Ã…öu…Ût jè.ƒÄjè$þÿÿƒÄƒÿt ƒÿ tƒÿu!‹ETƒÿÇET‰D$uK‹EXÇEXŒ‰D$ƒÿu8‹ 0î¡4îÁ;Á~1IÁà‹UPƒÀ AÇDü‹4î0î;Ñáë ‹D$Ç…Ût j蟃ăÿu ‹EXPjÿÖƒÄëWÿփăÿt ƒÿ tƒÿu‹D$ƒÿ‰ETu‹D$‰EX3À]_^[ƒÄ Ñ ¡ ¡ ¡ Á Ñ á „ ÌÌÌ‹D$V‹ð‹T$9VtƒÆ ‹ <î I ˆ;Îwè‹F+ƒøÀ#Æ^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ¡@åƒøt …Àu.ƒ=Dåu%hüèƒÄ¡ è…ÀtÿÐhÿèƒÄÃÌÌÌì¨3À¹èS‹”$°VWU9t ƒÁ@ù èrð9ÅèÅ…§ƒ=@å„_ƒ=@åu ƒ=Då„Iúü„x„$´hP‹- jÿÕ…Àu¾ðè¼$´¹ó¥f¥¤¬$´¼$´¹ÿÿÿÿ+Àò®÷уùUj覃ċð…öt-‹D$ U‹L$ VPQjWÿ$…Àt‹L$$QP‹D$ VPÿ ‹ØVèJòÿÿƒÄ‹Ã]_^[ƒÄÃÌÌÌÌÌÌÌÌÌÌÌÌÌV¡déP‹5(ÿÖ‹ TéQÿÖ¡DéPÿÖ¡$éPÿÖ^ÃÌÌÌÌÌÌSVW‹5,3ÿ½ é‹…Àt"ƒÿtƒÿ tƒÿ tƒÿtPÿÖ‹PèÉñÿÿƒÄGƒÿ0|Ë¡DéPÿÖ¡TéPÿÖ¡déPÿÖ¡$éPÿÖ_^[ÃÌÌÌÌÌÌÌÌÌÌÌÌU‹D$‹ìVW<… éƒ?uFjèôðÿÿƒÄ‹ð…öu jèÔ÷ÿÿƒÄjèÊÿÿÿƒÄƒ?Vu ÿ(‰7ëèBñÿÿƒÄjèƒÄ‹Pÿ0_^]ÃÌÌÌÌÌÌÌÌU‹D$‹ì‹ … éQÿ4]ÃÌÌÌÌÌÌÌÌÌU‹D$‹ì=Èîr=(ñw-ÈîÁøƒÀPèJÿÿÿ‹å]ÃÀ Pÿ0]ÃÌÌÌÌÌÌÌÌÌÌU‹D$‹ìƒø} ƒÀPèÿÿÿ‹å]ËE ƒÀ Pÿ0]ÃÌÌÌÌÌÌÌÌU‹D$‹ì=Èîr=(ñw-ÈîÁøƒÀPèJÿÿÿ‹å]ÃÀ Pÿ4]ÃÌÌÌÌÌÌÌÌÌÌU‹D$‹ìƒø} ƒÀPèÿÿÿ‹å]ËE ƒÀ Pÿ4]ÃÌÌÌÌÌÌÌÌS¡êV…ÀWUuOj‹58jjhéhjÿÖ…Àt¸ë0jjjhéhjÿà…Àt¸ë 3À]_^[Ë58‹|$ £ê…ÿ~‹D$WP趃ċø¡ê£êƒøu!‹D$(‹L$$‹T$P‹D$Q‹L$WRPQÿÖ]_^[ãêƒø…Ò3ö9t$,u ¡øé‰D$,‹D$j‹L$0jWPj Qÿ$‹è…íu3À]_^[ÃmPè¡îÿÿƒÄ‹Ø…Ûu3À]_^[ËD$U‹L$0SWPjQÿ$…ÀtS‹D$j‹L$jUSPQÿà‹ø…ÿt7öD$tI‹D$(…À„»;ø ‹L$P‹D$(‹T$PUSQRÿà…À…—SèŸîÿÿƒÄVè–îÿÿƒÄ3À]_^[Ã}PèÿíÿÿƒÄ‹ð…ötÑ‹D$W‹L$VUSPQÿà…Àt¹‹D$(jj…Àu ‹D$4jj‹-WVh PÿÕ‹ø…ÿu&ë‹L$4P‹D$0‹-PWVh QÿÕ‹ø…ÿ„iÿÿÿSèîÿÿƒÄVèÿíÿÿƒÄ‹Ç]_^[ÃÌÌÌÌÌ‹L$V‹D$ W‹ù…Àpÿt €?t G‹ÖN…Òuó€?u+ù‹Ç_^ÃÌÌÌÌVèŠûÿÿÿH£êƒøÿu3À^Ãjtj轃ċð…öt0V¡êPÿD…ÀtVèMƒÄÿ@‰¸ÇFÿÿÿÿ^Ã3À^Ãè[ûÿÿ¡êƒøÿtPÿLÇêÿÿÿÿÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹D$Ç@P¸íÇ@ÃÌÌÌÌÌÌÌÌÌÌÌÌÌVWÿ‹ð¡êPÿT‹ø…ÿuGjtjè ƒÄ‹ø…ÿt+W¡êPÿD…ÀtWè›ÿÿÿƒÄÿ@‰ÇGÿÿÿÿë jè óÿÿƒÄVÿP‹Ç_^Ã̃=êÿV„‘‹t$…öu¡êPÿT‹ð…öti‹F$…Àt PèkìÿÿƒÄ‹F(…Àt Pè[ìÿÿƒÄ‹F0…Àt PèKìÿÿƒÄ‹F8…Àt Pè;ìÿÿƒÄ‹F@…Àt Pè+ìÿÿƒÄ‹FD…Àt PèìÿÿƒÄVèìÿÿƒÄj¡êPÿD^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̃ìDSVWUh€è_ëÿÿƒÄ‹ð…öu jè?òÿÿƒÄ†€‰5@Ç0 ;Æv(3ɺ ˆNƒÆ$ÇFÜÿÿÿÿˆVá‰Nä¡@€;ÆwßD$Pÿ`fƒ|$B„Õƒ|$D„Ê‹D$D‹(xý\=|½9-0}^¾Dh€è·êÿÿƒÄ…ÀtBˆ€‰ƒ0 ;Èv"3ɈHƒÀ$Ç@ÜÿÿÿÿÆ@á ‰Hä‹€;ÐwàƒÆ9-0|¯ë‹-03ö…í~D‹ƒøÿt4öt/Pÿ\…Àt$‹Æ‹ÎƒàçƒáÁøÁá‹@‹ ÉʉŠˆQFGƒÃ;õ|¼3ö3ÿ‹@Þƒ;ÿuW¸öÿÿÿ…öÆCtGÿƒø¸õÿÿÿƒÐÿPÿƒøÿ‹èt(Uÿ\…Àt%ÿ‰+ƒøu€K@ëƒøu€Kë €K@ë€K€ƒÆ$Gƒþl|¡0PÿX]_^[ƒÄDÃÌÌÌÌÌSVW¾@U‹=,‹…Ût0ƒ€;Ãv3í9ktC Pÿ׃Ã$‹€;Ãwç‹PèÎéÿÿƒÄƒÆþ@r¿]_^[ÃÌÌÌÌÌÌÌÌÌÌ̃ì‹4åSVW3öU€:t€:=tF‹ú¹ÿÿÿÿ+Àò®÷ÑÑ€:uæµPèõèÿÿ£€åƒÄ‹Ø…Ûu j èÐïÿÿƒÄ‹-4å‹Å€}t^‹ý¹ÿÿÿÿ+Àò®÷щL$€}=t=Qè²èÿÿƒÄ‰…Àu j è’ïÿÿƒÄ‹ý¹ÿÿÿÿ+Àò®÷Ñ+ù‹ÁÁé‹÷‹;ƒÃó¥‹Èƒáó¤l$€}u¢¡4åPèæèÿÿƒÄÇ]_^[ƒÄÃÌÌÌÌ̃ìVWh¾óVjÿ ¡P‰5å€8t‹5PD$ L$PQjjVè^‹D$ƒÄÁàD$ PèúçÿÿƒÄ‹ø…ÿu jèÚîÿÿƒÄD$ L$‹T$PQ—PWVè‹D$ƒÄH‰=xå_£tå^ƒÄÃÌÌÌÌÌ‹L$S‹T$V‹t$ W‹D$Uƒ|$ÇÇt ‹T$ƒD$‰€>"tFÿ…ÀtŠˆ@ŠF3ÛŠÚöƒ1êt ÿ…ÀtŠˆ@F€ú t „Òt €ú uË„ÒuNëP…ÀtLÆ@ÿëFF€>"t0Š„Ût*3ÒŠÓö‚1êt ÿ…ÀtŠFˆ@ÿ…ÀtŠˆ@F€>"uÐÿ…ÀtÆ@€>"uF3ÿ€>„芀ú t€ú uFëñ€>„Ѓ|$t ‹T$ƒD$‰‹T$ ÿ»3í€>\uFE€>\tù€>"u$÷Åu…ÿt V€:"u‹òë3Ûƒÿÿ÷ßÁí‹ÕM…Òt…ÀtÆ\@‹ÕÿM…ÒuÒtO…ÿu €ú tF€ú tA…Ût7…Àt!3ÛŠÚöƒ1êtˆF@ÿŠ@FˆPÿÿéoÿÿÿ3ÛŠÚöƒ1êtFÿÿFéWÿÿÿ…ÀtÆ@ÿéÿÿÿƒ|$t ‹T$Ç‹T$ ]_^[ÿÃÌÌÌÌÌÌÌÌÌÌÌÌÌ̃ìSVWUjè²ôÿÿ‹D$0ƒÄPèƒÄ‹è;-4ëujèõÿÿƒÄ3À]_^[ƒÄÃ…íuè›jèäôÿÿƒÄ3À]_^[ƒÄÃÇD$¸Xë9(„›ƒÀ0ÿD$=HìrêD$PUÿdƒø…Y¿0ê3À¹@󫪃|$†t$8D$t,ŠF„Àt%3É3ÒŠŠÐ;Ñr€‰1êA3ÀŠF;ÁsïƒÆ€>uÔ¸€ˆ1ê@=ÿrñU‰-4ëèƒÄ鹿0ê3À¹@󫪋L$It1ŠN„Ét*3Ò3ÛŠŠÙ;ÚrŠˆPëŠ1êB3ÛŠ^;ÚsðƒÆ€>uÏ@ƒørºU‰-4ëèƒÄº@ë£8ë‹D$Áà‹œ@`ëjŒ@\ë‹‹I‰‰Z‰Jè‚óÿÿƒÄ3À]_^[ƒÄÃ3À£4ë¹@ëj£8ë3À‰‰A‰AèSóÿÿƒÄ3À]_^[ƒÄÃ=Lëtèèjè1óÿÿƒÄ3À]_^[ƒÄÃjèóÿÿƒÄ¸ÿÿÿÿ]_^[ƒÄÃÌÌÌÌÌÌÌÌÌÌÌÌÌÇLë‹D$ƒøþuÇLëÿ%lƒøýuÇLëÿ%hƒøüuÇLë¡øéÃÌÌÌ‹D$-¤ƒøw3ÉŠˆü´ÿ$è´3ÀøøøøÃдÖ´Ü´â´Í´ÌW3À¿0ê¹@󫪣@ë¹@ë_£4ë£8ë‰A‰AÃÌÌÌÌjýèéüÿÿƒÄÃÌÌÌÌ̃ìƒ=LìSVWUu@‹5|ÿÖ‹ø…ÿtÇLì‹\$ë0ÿt‹Ø…Ût ÇLìë3À]_^[ƒÄË|$‹\$‹5|ƒ=Lì…¢…ÿuÿÖ‹ø…ÿu 3À]_^[ƒÄÃfƒ?‹÷tƒÆfƒ>u÷ƒÆfƒ>uî+÷jÁþjFjjVWjjÿ‹è…ítAUèïáÿÿƒÄ‹Ø…Ût2jjUSVWjjÿ…Àu SèJâÿÿƒÄ3ÛWÿx‹Ã]_^[ƒÄÃWÿx3À]_^[ƒÄÃ=Lìu{…Ûuÿt‹Ø…Ûu 3À]_^[ƒÄËë€;tE€}uùE€}uò+ëEUèbáÿÿ‰D$ƒÄ…ÀuSÿp3À]_^[ƒÄË|$‹ó‹ÍÁéó¥‹ÍSƒáó¤ÿp‹D$]_^[ƒÄÃ3À]_^[ƒÄÃÌÌÌÌÌ‹D$£DåÃÌÌÌÌÌ̸ ÌÌÌÌÌÌÌÌV芋L$3ö‰¸Pì9t"ƒÀF=¸írñƒùr"ƒù$wèO^Ç ÃèB‹ õTì^‰Ãù¼rùÊw è"^ÇÃè^ÇÃÌÌÌÌÌÌÌÌÌÌÌÌÌèÛóÿÿƒÀÃÌÌÌÌÌÌÌèËóÿÿƒÀ ÃÌÌÌÌÌÌÌSVW3ö95@îuBh|îÿ€‹ø…ÿtnhpî‹ðWÿÓ£@î…ÀtWh`îWÿÓhLî£DîWÿÓ£Hî¡Dî…ÀtÿЋð…ötƒ=Hît VÿHî‹ð‹D$‹L$‹T$PQRVÿ@î_^[Ã3À_^[ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìWV‹u ‹}‹M;þv ‹ÆÁ;ø‚Ž÷ÇuR‹ÑƒâÁéó¥ÿ$•ˆ¸À¸¼¸¬¸˜¸f‹f‰ŠFˆG‹E^_ÉÃf‹f‰‹E^_ÉÃ.‹ÀŠˆ‹E^_ÉÃù v#‹×÷Úƒâ+Ê‹Á‹Êó¤‹ÈƒàÁéó¥ÿ$…ˆ¸.‹Àó¤‹E^_ÉÃ.‹Àýñù÷Çu_‹ÑƒâƒîƒïÁéó¥ÿ$• ¹^¹X¹H¹0¹f‹Ff‰GŠFˆGü‹E^_ÉËÀf‹Ff‰Gü‹E^_ÉÊFˆGü‹E^_ÉËÀNOƒù v%÷Úƒâ+Ê‹Á‹Êó¤‹ÈƒàƒîƒïÁéó¥ÿ$… ¹ó¤ü‹E^_ÉÃÌÌVW‹|$¯|$ …ÿu¿‹5ä¡@ƒÿàv3ÀëWjPÿÖ…Àuƒ= étWèÿêÿÿƒÄ…À¡@uÒ3À_^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌ̃=ôVu Çôëƒ=ô} Çôj¡ôPèjÿÿÿƒÄ£ ô…Àu)ÇôjjèKÿÿÿƒÄ£ ô…Àu jèˆäÿÿƒÄ¹Èî3À‹ ôƒÀ‰LüƒÁ ƒøP|ë3Ò¾Øî‹Â‹ÊƒàçƒáÁøÁá‹€@ É‹ƒøÿt…ÀuÇÿÿÿÿƒÆ Bþ8ïrÉ^ÃÌÌÌÌÌÌÌÌÌèË€=˜åtéÍÃÌÌÌÌÌÌÌÌÌÌÌÌV‹t$Vè5ƒÄ…Àt¸ÿÿÿÿ^ÃöF @t‹FPè8ƒÄƒø¸^ƒÐÿÃ3À^ÃÌÌÌÌSV‹t$ W3ÿ‹F ‹È€á€ùu<©t5‹F‹+Ø…Û~*SP‹FPèƒÄ ;Ãu‹F ¨€tƒàý‰F ë ƒN ¿ÿÿÿÿ‹F‰‹ÇÇF_^[ÃÌÌÌÌÌÌÌÌÌÌÌÌjè ƒÄÃÌÌÌÌ̃ìSVWU3ÿj3ö3Û‰|$è(ëÿÿ‹l$ƒÄ¡ ô‹…Àteö@ ƒt_PVèØëÿÿƒÄ¡ ô‹ ‹A ¨ƒt4ƒýuQèëþÿÿƒÄƒøÿt!Gë…íu¨tQèÒþÿÿƒÄƒøÿuÇD$ÿÿÿÿ¡ ô‹ QVèóëÿÿƒÄƒÃFû|ƒjè ëÿÿƒÄ‹Çƒýt‹D$]_^[ƒÄÃÌÌÌÌÌÌÌU‹ìWV‹}‹×3ÀƒÉÿò®O‹÷‹} W‹Mò®uA+M÷Ù‹þ^󤪋Â^_ÉÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌSVW3öU¿jè.êÿÿƒÄ9=ô~j½ ‹,¡ ô‹(…ÀtGö@ ƒtPèЃăøÿtFƒýP|-¡ ô‹(ƒÀ PÿÓ‹ ô‹)RèeÛÿÿƒÄ‹ ôÇ)ƒÅG;=ô|¡jè"êÿÿƒÄ‹Æ]_^[ÃÌÌÌÌÌÌÌÌSV‹t$ W950v‹ÆƒàçÁø˜@‹Æƒà‹ Áà<ÀöD9t]VèɃċöD8t,V¿èbƒÄPÿ„…Àuÿ‹ø…ÿtèãùÿÿ‰8¿ÿÿÿÿèÇùÿÿÇ VèëƒÄ‹Ç_^[Ãè­ùÿÿ_Ç ¸ÿÿÿÿ^[ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌVW‹t$ 950vL‹Æ‹ÎƒàçƒáÁøÁá‹@ÉöDt,Vè‹D$‹L$ƒÄPQVè9ƒÄ ‹øVènƒÄ‹Ç_^Ãè1ùÿÿÇ è6ùÿÿ_Ǹÿÿÿÿ^ÃÌÌÌÌÌÌÌÌìSVWU3ÿ‹¬$4‰|$ ;ïu 3À]_^[ÄË”$,‹ÂƒàçÁø@‰D$‹Âƒà‹\$Áà À‹‰L$öD t jjRè ƒÄ ‹D$‹L$öA€„ˆÇD$‹œ$0‹Ã+„$0;Ń¡t$$‹Ã+„$0;ÅsŠC< uÆ GFˆF‹ÆL$$+Á=|ÕD$$j+ðL$(D$‹T$PVQ‹‹L$,‹Rÿ…Àt=‹D$D$ ;Æ}‰ë9D$j‹”$4PU‹ RQÿ…ÀtÇD$‹D$‰D$ ë ÿ‰D$ƒ|$ …¡ƒ|$tJƒ|$u&è´÷ÿÿÇ è¹÷ÿÿ‹L$]_‰¸ÿÿÿÿ^[ÄËL$Qè ÷ÿÿƒÄ¸ÿÿÿÿ]_^[ÄËD$‹L$‹öD @t‹„$0€8u 3À]_^[ÄÃèG÷ÿÿÇèL÷ÿÿ]Ǹÿÿÿÿ_^[ÄËD$ ]+Ç_^[ÄÃÌÌÌÌÌV‹t$‹F ¨ƒt+¨t'‹FPèç×ÿÿƒÄÇf ÷ûÿÿÇFÇF^ÃÌÌÌÌÌÌÌVW¿ÿÿÿÿ‹t$ öF @t ÇF ‹Ç_^ÃVèæÿÿƒÄVèƒÄ‹øVèùæÿÿƒÄ‹Ç_^ÃÌVW¿ÿÿÿÿ‹t$ öF ƒtBVèúÿÿƒÄ‹øVè^ÿÿÿƒÄ‹FPèBƒÄ…À}¿ÿÿÿÿë‹F…ÀtPè7×ÿÿÇFƒÄÇF ‹Ç_^ÃÌ‹L$VW9 0ve‹ÁƒàçÁø¸@‹ÁƒàÁà4À‹Æö@tBƒ8ÿt=ƒ=Dåu&…Ét ƒùt ƒùtëjjöë jjõëjjôÿˆ‹_Ç0ÿÿÿÿ3À^Ãè¸õÿÿÇ è½õÿÿ_Ǹÿÿÿÿ^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹L$9 0v"‹ÁƒáÁáƒàçÁøÉ‹€@Âö@t‹Ãè]õÿÿÇ èbõÿÿǸÿÿÿÿÃÌÌÌÌÌÌ‹D$SV‹ÈWƒáçÁùƒàÁà¹@4À‹Þƒ{u'jèqäÿÿƒÄƒ{u C Pÿ(ÿCjèÄäÿÿƒÄ‹ƃÀ Pÿ0_^[ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹L$‹ÁƒáÁáƒàçÁøÉ‹€@ƒÀ Pÿ4ÃÌÌÌÌÌÌÌÌVW‹t$ VèÿÿÿƒÄƒøÿuè‡ôÿÿ_Ç ¸ÿÿÿÿ^ËL$‹T$QjRPÿŒƒøÿ‹ø¸uÿ…ÀtPèÊóÿÿƒÄ¸ÿÿÿÿ_^ËƃæÁæƒàçÁø‹ˆ@ö€dý‹Ç_^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌSV‹D$ Àu‹L$‹D$3Ò÷ñ‹Ø‹D$ ÷ñ‹ÓëA‹È‹\$‹T$‹D$ ÑéÑÛÑêÑØ Éuô÷ó‹ð÷d$‹È‹D$÷æÑr;T$wr;D$ vN3Ò‹Æ^[ÂÌÌÌÌÌÌÌÌS‹D$ Àu‹L$‹D$ 3Ò÷ñ‹D$÷ñ‹Â3ÒëP‹È‹\$‹T$ ‹D$ÑéÑÛÑêÑØ Éuô÷ó‹È÷d$‘÷d$Ñr;T$ wr;D$v+D$T$+D$T$ ÷Ú÷؃Ú[ÂÌÌÌÌÌÌÌÌÌÌÌVW‹t$ 950vB‹Æ‹ÎƒàçƒáÁøÁá‹@ÉöDt"Vè¬ýÿÿƒÄVè3ƒÄ‹øVèþÿÿƒÄ‹Ç_^ÃèËòÿÿÇ èÐòÿÿ_Ǹÿÿÿÿ^ÃÌÌVW‹t$ ƒþtƒþujè ýÿÿƒÄ‹øjèýüÿÿƒÄ;øtVèðüÿÿƒÄPÿ…Àu ÿ‹øë3ÿVè0üÿÿƒÄ…ÿtWèÓñÿÿƒÄ¸ÿÿÿÿ_^ËƃæÁæƒàçÁø_‹ˆ@ö^ÆD3ÀÃÌÌÌÌÌÌÌjèyÙÿÿƒÄÃEEE50P (8PX700WP ``````ppxxxx²Æ33ÄЈРиÐMh’Е&”x–ÒÐåÐñÐùÐÑ ÑGNU_REGEX.dllre_compile_patternre_search_2regcompregerrorregexecregfreeºк€àŒà¨àÄàäàøàá$á8áHá`átáˆá°áÔáðáÐNo matchInvalid regular expressionInvalid collation characterInvalid character class nameTrailing backslashInvalid back referenceUnmatched [ or [^Unmatched ( or \(Unmatched \{Invalid content of \{\}Invalid range endMemory exhaustedInvalid preceding regular expressionPremature end of regular expressionRegular expression too bigUnmatched ) or \)alnumalphablankcntrldigitgraphlowerprintpunctspaceupperxdigitalphaupperlowerdigitalnumxdigitspaceprintpunctgraphcntrlblankNo previous regular expressionMemory exhaustedMemory exhaustedSuccess"ã"ã ((((( H„„„„„„„„„„‚‚‚‚‚‚ .`ŸIsTNTkernel32.dllruntime error TLOSS error SING error DOMAIN error R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data abnormal program termination R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point not loaded ðçÄç ˜ç tçHççôæÈææhæ0æøåxèåyØåzÈåüÄåÿ´åMicrosoft Visual C++ Runtime Library Runtime Error! Program: ...Ðò¸òèòóÿÿÿÿÿÿÿÿ ¤`‚y‚!¦ß¡¥Ÿàü@~€ü¨Á£Ú£ þ@þµÁ£Ú£ þAþ¶Ï¢ä¢å¢è¢[þ@~¡þQQÚ^Ú _ÚjÚ2ÓØÞàù1~þ        ! 5A CPR S WY l m pr € ‚ ƒ„ ‘)ž ¡¤ § ·Î×  À À–ÀÀŽÀÀÀ‘À’À“Àx GetLastActivePopupGetActiveWindowMessageBoxAuser32.dll Assertion failed: %s, file %s, line %d ìèˆîÌè0ô0ô(null)(null)hñXñpÅpÅpÅpÅpÅpÅ(ªà4¦²¾Ðâö".>Tbp‚˜ªÀÜô $˜DZht~Žœ®¼ÎÚäð "<VfzŠœ4¦²¾Ðâö".>Tbp‚˜ªÀÜô $˜DZht~Žœ®¼ÎÚäð "<VfzŠœ\HeapReAllocSHeapAllocYHeapFreeŸGetCommandLineAGetProcAddressëGetModuleHandleA7GetVersionbExitProcessáGetLastErrorOWriteFileGetStdHandleéGetModuleFileNameAUHeapCreateWHeapDestroyGetStringTypeABWideCharToMultiByteGetStringTypeW“MultiByteToWideChardInitializeCriticalSectionDDeleteCriticalSectionOEnterCriticalSectionwLeaveCriticalSectionuLCMapStringAvLCMapStringWÇGetCurrentThreadId"TlsSetValueTlsAlloc TlsFreeýSetLastError!TlsGetValueúSetHandleCountÜGetFileTypeGetStartupInfoA˜GetCPInfo’GetACPöGetOEMCP‹FreeEnvironmentStringsAÐGetEnvironmentStringsŒFreeEnvironmentStringsWÒGetEnvironmentStringsWxLoadLibraryAƒFlushFileBuffersSetStdHandleøSetFilePointerCloseHandleKERNEL32.dll< 00‹2Î2Y4²5¹5½5Á5Å5É5Í5Ñ5Õ5Ù5Ý5á5å5é5í5ñ5õ5ù5ý566 H=O=S=W=[=_=¶>0ö3â5x:È; ?!?@|#080§0D1ë1I2ë2â3z4~4‚4†4Š4Ž4’4–4š4ž4¢4¦4ª4®4²4¶4º4¾4Â4Æ4Ê4Î4Ò4Ö4Ú4Þ4â4æ4ê4î4¡6¨6¬6°6´6¸6G;B;F;J;N;12 303ø5 6a7f7€7“78f8p8Œ8“8Ô8î8r:Å:ï:;$;[;ß<å<ë<= ===8=G=P=U=[=e=~=ƒ=Ž=”=Î=Ù=ß=3>B>`>j>Ö>ñ>? ?1?5[5c5~5ƒ5–5º5Ñ5è56*6R6Y6a6i6q6…6Ž6Á6É6Ñ6Ù6ü617P7j7q7ˆ77–7°7â7ø7ÿ78 8R8b8q8z8™8¦8¾8Ç8à8å89&9A9€9š9Ï9:8:Y:È:Í:î:õ:;&;2;8;W;t;{;‚; ;§;º;Ö;â;÷;þ;t<{<¼<Â<é<ý<4=;=Z=Š=”=­=Ç=è=>>X>_>t>{>º>Õ> ?%??»?Ä?É?Ï?Ú?° <0B0›0ß0Ä1å1R2’2¦2´2Â2ú23(3:3\3z3€3Ÿ3¬3±3¿3È3î3ó3ú34b4u44Š4”4Ÿ4¨4Â4É4è4ì4ð4ô4ø45!5&5,515U5b5p5€5Œ5ª5°56(6>6O6_6l6¬6Ñ6õ67,7Q7·7¾7Ä7Ï7Õ7Ý7æ7î7ó7û788848ƒ8ˆ8Œ88”8é89 9$9(9,99¶9»9Ô9ç9: ::!:,:::D:Y:l:t:Š: :¿:×:Ð;ì;/<Ç<Ô<Ù<ÿ<= =1=Y=i=¤=®=> >¸>o?š?¶?À0h1x1˜1Á122g2Ž2©2×2ã2&383a3x445 5Y5àh 00<0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x033<58$8,848<8D8L8T8\8d8l8t8|8„8Œ8”8œ8$9D9T9d9¸>¼>À>È>Ð>ðp1t1x1|1€1„1ˆ1Œ1libwww/Library/External/gnu_regex.lib0100644000076400001440000001201406556653414017426 0ustar danielusers! / 859031218 0 322 ` ¢8 l ’ °Ðî8 l ’ °Ðî^__IMPORT_DESCRIPTOR_GNU_REGEX__NULL_IMPORT_DESCRIPTOR__imp__re_compile_pattern__imp__re_search_2__imp__regcomp__imp__regerror__imp__regexec__imp__regfree_re_compile_pattern_re_search_2_regcomp_regerror_regexec_regfreeGNU_REGEX_NULL_THUNK_DATA/ 859031218 0 332 ` ¢^’ Ðî° l 8  __IMPORT_DESCRIPTOR_GNU_REGEX__NULL_IMPORT_DESCRIPTOR__imp__re_compile_pattern__imp__re_search_2__imp__regcomp__imp__regerror__imp__regexec__imp__regfree_re_compile_pattern_re_search_2_regcomp_regerror_regexec_regfreeGNU_REGEX_NULL_THUNK_DATAGNU_REGEX.dll/ 859031218 0 600 ` L²Æ33„à .idata$2DX@À.idata$6vX@ À GNU_REGEX.dll.idata$2@Àh.idata$6.idata$4@Àh.idata$5@Àh";V__IMPORT_DESCRIPTOR_GNU_REGEX__NULL_IMPORT_DESCRIPTORGNU_REGEX_NULL_THUNK_DATAGNU_REGEX.dll/ 859031218 0 127 ` L²Æ33P.idata$3<@À__NULL_IMPORT_DESCRIPTOR GNU_REGEX.dll/ 859031218 0 157 ` L²Æ33l.idata$5d@0À.idata$4h@0ÀGNU_REGEX_NULL_THUNK_DATA GNU_REGEX.dll/ 859031218 0 504 ` L²Æ33ö .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%re_compile_pattern.textè.  .idata$5è..idata$4è..idata$6è.<__imp__re_compile_pattern__IMPORT_DESCRIPTOR_GNU_REGEXGNU_REGEX.dll/ 859031218 0 489 ` L²Æ33î .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%re_search_2.textè.  .idata$5è..idata$4è..idata$6è.5__imp__re_search_2__IMPORT_DESCRIPTOR_GNU_REGEX GNU_REGEX.dll/ 859031218 0 481 ` L²Æ33ê .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6 à@ Àÿ%regcomp.textè._regcomp .idata$5è..idata$4è..idata$6 è.1__imp__regcomp__IMPORT_DESCRIPTOR_GNU_REGEX GNU_REGEX.dll/ 859031218 0 484 ` L²Æ33ì .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6 à@ Àÿ%regerror.textè.  .idata$5è..idata$4è..idata$6 è.2__imp__regerror__IMPORT_DESCRIPTOR_GNU_REGEXGNU_REGEX.dll/ 859031218 0 481 ` L²Æ33ê .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6 à@ Àÿ%regexec.textè._regexec .idata$5è..idata$4è..idata$6 è.1__imp__regexec__IMPORT_DESCRIPTOR_GNU_REGEX GNU_REGEX.dll/ 859031218 0 481 ` L²Æ33ê .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6 à@ Àÿ%regfree.textè._regfree .idata$5è..idata$4è..idata$6 è.1__imp__regfree__IMPORT_DESCRIPTOR_GNU_REGEX libwww/Library/External/regex.h0100644000076400001440000004441606556653414016251 0ustar danielusers/* Definitions for data structures and routines for the regular expression library, version 0.12. Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __REGEXP_LIBRARY_H__ #define __REGEXP_LIBRARY_H__ /* POSIX says that must be included (by the caller) before . */ #ifdef VMS /* VMS doesn't have `size_t' in , even though POSIX says it should be there. */ #include #endif /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned reg_syntax_t; /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ #define RE_BACKSLASH_ESCAPE_IN_LISTS (1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ #define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then `{...}' defines an interval, and \{ and \} are literals. If not set, then `\{...\}' defines an interval. */ #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \ matches . If not set, then \ is a back-reference. */ #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ #define RE_SYNTAX_EMACS 0 #define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_UNMATCHED_RIGHT_PAREN_ORD) #define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS) #define RE_SYNTAX_GREP \ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ | RE_NEWLINE_ALT) #define RE_SYNTAX_EGREP \ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ #define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) #define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) #define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */ #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. Some systems (erroneously) define this in other header files, but we want our value, so remove any previous define. */ #ifdef RE_DUP_MAX #undef RE_DUP_MAX #endif #define RE_DUP_MAX ((1 << 15) - 1) /* POSIX `cflags' bits (i.e., information for `regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (REG_EXTENDED << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (REG_ICASE << 1) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (REG_NEWLINE << 1) /* POSIX `eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* If any error codes are removed, changed, or added, update the `re_error_msg' table in regex.c. */ typedef enum { REG_NOERROR = 0, /* Success. */ REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ REG_BADPAT, /* Invalid pattern. */ REG_ECOLLATE, /* Not implemented. */ REG_ECTYPE, /* Invalid character class name. */ REG_EESCAPE, /* Trailing backslash. */ REG_ESUBREG, /* Invalid back reference. */ REG_EBRACK, /* Unmatched left bracket. */ REG_EPAREN, /* Parenthesis imbalance. */ REG_EBRACE, /* Unmatched \{. */ REG_BADBR, /* Invalid contents of \{\}. */ REG_ERANGE, /* Invalid range end. */ REG_ESPACE, /* Ran out of memory. */ REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ REG_EEND, /* Premature end. */ REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields `buffer', `allocated', `fastmap', `translate', and `no_sub' can be set. After the pattern has been compiled, the `re_nsub' field is available. All other fields are private to the regex routines. */ struct re_pattern_buffer { /* [[[begin pattern_buffer]]] */ /* Space that holds the compiled pattern. It is declared as `unsigned char *' because its elements are sometimes used as array indexes. */ unsigned char *buffer; /* Number of bytes to which `buffer' points. */ unsigned long allocated; /* Number of bytes actually used in `buffer'. */ unsigned long used; /* Syntax setting with which the pattern was compiled. */ reg_syntax_t syntax; /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *fastmap; /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ char *translate; /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in `re_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see `re_compile_fastmap' (the `duplicate' case). */ unsigned can_be_null : 1; /* If REGS_UNALLOCATED, allocate space in the `regs' structure for `max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #define REGS_UNALLOCATED 0 #define REGS_REALLOCATE 1 #define REGS_FIXED 2 unsigned regs_allocated : 2; /* Set to zero when `regex_compile' compiles a pattern; set to one by `re_compile_fastmap' if it updates the fastmap. */ unsigned fastmap_accurate : 1; /* If set, `re_match_2' does not return information about subexpressions. */ unsigned no_sub : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned not_bol : 1; /* Similarly for an end-of-line anchor. */ unsigned not_eol : 1; /* If true, an anchor at a newline matches. */ unsigned newline_anchor : 1; /* [[[end pattern_buffer]]] */ }; typedef struct re_pattern_buffer regex_t; /* search.c (search_buffer) in Emacs needs this one opcode value. It is defined both in `regex.c' and here. */ #define RE_EXACTN_VALUE 1 /* Type for byte offsets within the string. POSIX mandates this. */ typedef int regoff_t; /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { unsigned num_regs; regoff_t *start; regoff_t *end; }; /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, `re_match_2' returns information about at least this many registers the first time a `regs' structure is passed. */ #ifndef RE_NREGS #define RE_NREGS 30 #endif /* POSIX specification for registers. Aside from the different names than `re_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ /* To avoid duplicating every routine declaration -- once with a prototype (if we are ANSI), and once without (if we aren't) -- we use the following macro to declare argument types. This unfortunately clutters up the declarations a bit, but I think it's worth it. */ #if __STDC__ #define _RE_ARGS(args) args #else /* not __STDC__ */ #define _RE_ARGS(args) () #endif /* not __STDC__ */ /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the `re_syntax_options' variable. */ extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax)); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global `re_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. */ extern const char *re_compile_pattern _RE_ARGS ((const char *pattern, int length, struct re_pattern_buffer *buffer)); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer)); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern int re_search _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, int length, int start, int range, struct re_registers *regs)); /* Like `re_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern int re_search_2 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, int range, struct re_registers *regs, int stop)); /* Like `re_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern int re_match _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, int length, int start, struct re_registers *regs)); /* Relates to `re_match' as `re_search_2' relates to `re_search'. */ extern int re_match_2 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, struct re_registers *regs, int stop)); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least `NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, unsigned num_regs, regoff_t *starts, regoff_t *ends)); /* 4.2 bsd compatibility. */ extern char *re_comp _RE_ARGS ((const char *)); extern int re_exec _RE_ARGS ((const char *)); /* POSIX compatibility. */ extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags)); extern int regexec _RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags)); extern size_t regerror _RE_ARGS ((int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)); extern void regfree _RE_ARGS ((regex_t *preg)); #endif /* not __REGEXP_LIBRARY_H__ */ /* Local variables: make-backup-files: t version-control: t trim-versions-without-asking: nil End: */ libwww/Library/External/xmlparse.dll0100644000076400001440000015000007152764147017300 0ustar danielusersMZÿÿ¸@ິ Í!¸LÍ!This program cannot be run in DOS mode. $¸~=6üSeüSeüSeXeýSe]eõSeüReÛSež@eþSeYeæSeWeìSeRichüSePELã8à! 0„m  Ðð¨âT¤<À Ä.text¶„ `.rdataÒ   @@.data\ °°@À.reloc8ÀÀ@BQSUVW‹|$‹G…ÀuP‹D$ …Àu_^]3À[YÃjj@èFWƒÄ‰…Àu_^][YËD$ÇG@PÇG è‹OƒÄ‹ðI#ñé ‹\$Sèv‹w‹ƒÄ‹èN‰l$#õ‹²…Àt%‹PSè%ƒÄ…À……öu‹w‹N‹±…ÀuÛ‹D$ …Àu_^]3À[YËG‹O ;Á…¨‹wjÑæVèV‹ØƒÄ…Ûu_^][YËG3É…À‰L$vL‹‹Š…Àt3‹nÿPèÞ#Ńă<ƒt…Àu‹ÅëHƒ<ƒuñ‹‹T$‹ ‘‰ ƒ‹Ê‹GA;ȉL$r¸‹l$‹RèþU‹Æ‰wÑè‰G Fÿ‹ð‰#õƒÄƒ<³t…öu‹ðëNƒ<³uñ‹L$ QjèöU‹ƒÄ‰²‹‹°…Àu_^][YËL$‰‹G@‰G‹_‹²^][YËL$‹T$SŠŠ:Ãu„ÀtŠAŠZAB:Ãtð3À[ø[ËT$3ÀŠ „ÉtV‹ðáÿÁæðñŠJB‹Æ„Éuç^ÃVW‹|$ 3ö‹G…Àv‹‹°…Àt PèUƒÄ‹GF;ðræ‹QèÿTƒÄ_^ËD$3ɉH‰H ‰H‰ËL$‹T$‹‰‹Iˆ‰BËT$V‹r‹;Æt‹ ‹ƒÁ…À‰ u;Îuï3À^ÃUVWhèU‹ð3ÿƒÄ;÷„݆àSPdžðà: ÿ¸  ‰>‰~‰~(‰~,‰~0‰~4‰~8‰~<‰~@‰~D‰~H‰~L‰~P‰~T‰~X‰~\‰~`‰~d‰vh‰~l‰~‰~ ‰~‰~‰~‰~‰¾–¼‰¾ 3ɉ¾‰¾‰¾‰ h‰J‰¾ô‰¾ø‰¾ü‰¾‰¾‰¾ ‰¾ ‰¾¤‰¾¬‰¾¨dž°è0Th‰†¸‰¾´èTžÄ‰F S‰¾ð‰¾ì‰¾ô‰¾Ð‰¾Ü‰¾Ô‰¾ØÆ†ø!‰¾‰¾ü‰¾ÌèLO†ØPè@O‹l$(ƒÄ;ït USènPƒÄë3ÀŽ(‰†ÈQ‰¾œèïIƒÄ…À[tG9¾¸t?‹F ;Çt8;ït9¾Èt,Vp‰F$WFtRPÿ¼  ƒÄ ÿ´  ‰†Ä‹Æ_^]ÃV誃Ä_^3À]ËD$VPèõýÿÿ‹ðƒÄ…öt3NpjVtQRÿ°  ƒÄ džÌÿ¨  ‰†ÄŠD$ ˆ†øhÈ  VèŽFƒÄ…Àu VèAƒÄ3À^ËÆ^ËD$…Àu‹D$ǀȸÃV‹t$PŽÄQèROƒÄ‰†È…À^uÚÃì@SUV‹t$PW‹N,‹V0†(‰L$‹N8‰D$T‹F4‰T$‹V<‰D$‹F@‰L$‹ND‰D$$‹F\‰T$ ‹VX‰D$0‹Fl‰L$(‹N`‹n(‹‰D$<‹Fh‰T$,‹Vd‰L$4‹N‰D$D‹†Ì‰T$8‹–‰L$@‹Žü‰T$H…À‰L$LtŠ–ø‹D$\RPè¥þÿÿƒÄë ‹L$\Qè–üÿÿƒÄ‹ø…ÿu_^][ƒÄ@ËD$‹T$‹L$‰G0‹D$ ‰W,‹T$‰G<‹D$,‰O4‹L$$‰GX‹D$8‰W8‹T$(‰O@‹L$0‰Gd‹D$@‰WD‹T$4‰O\‹L$<;؉o(‰W`‰Ol‰u‰_뉋D$D;Æt‰Gh‹\$X‹T$H‹D$L‰—…Û‰‡ütM‹L$T—(QRè¤HƒÄ…Àt"SWè¶DƒÄ…ÀtLJð  ‹Ç_^][ƒÄ@ÃWèUƒÄ3À_^][ƒÄ@ËD$T(PQè‡G—à‰·Rÿ¬  ¸ƒÄ ‰‡|‰‡ô‹Ç_^][ƒÄ@ÃV‹t$W‹† …Àu‹†¤…Àt;‰† dž¤‹¾ ‹‰† ‹OQèŸO‹W RèæWèOƒÄ 뱋†¬PèÏ‹Ž¨QèÖÄRèL†ØPèûK‹†ƒÄ…Àt)‹Žô…Ét dž|(Ž(PQè˜FƒÄ–(RèÉF‹†¸Pè O‹ŽìQèO‹VRèøN‹F PèïN‹ŽÐQèãN‹†ÜƒÄ…Àt ‹–ÔRÿЃÄVèÄNƒÄ_^ÃV‹t$W‹þ…öt‹G‹vPè˜NWè’NƒÄ‹þ…öuå_^ËD$‰@ËD$‹H‹;Êu ‹L$‰‰HËT$‰ËD$V…Àt'‹t$P†hPè¦KƒÄ…Àu^Ɇœ¸^ËL$¸^ÇœËD$‹€œËD$‹€´ËD$‹L$‹T$ ‰H(‰P,ËL$‹D$‰A0ËL$‹D$‰A4ËL$‹D$‰A8ËD$‹L$‹T$ ‰H<‰P@ËD$‹L$‰HDÇ€ËD$‹L$‰HDÇ€ËD$‹L$‹T$ ‰HH‰PLËL$‹D$‰APËL$‹D$‰ATËD$‹L$‹T$ ‰HX‰P\ËL$‹D$‰A`ËL$‹D$‰AdËD$…Àt‹L$‰AhËD$‰@hËD$‹L$‹T$ ‰Hl‰ØÃ‹L$‹D$‰ü¸ÃSU‹l$VW3ÿ;ïua9|$ u _^]¸[Ët$W‹N‹F QPV‰†‰Nÿ–ðƒÄ;lj†ôu _^]¸[ˆøÇ†ð@K ‰†ü_^]3À[Ë\$‹K ‹C;È…8‹K‹t$‹D$ Í;Ç.‰K‰³‰Ct!WPVSÿ“ðƒÄ;ljƒôu%_^]¸[ÃL$ QPVSÿ“ðƒÄ;ljƒôt‹“ø_^‰“üǃð@K ]3À[ËT$ ‹Cp‹¼Q‹‹RQPÿP4‹L$0ƒÄ+ñõ‰t$„†‹C;Çt ‹S+Ð;ò~P;Çu íUè·KƒÄë íUPèLƒÄ;ljCu'‰»ü‰»ø_^ǃôǃð@K ]3À[Ãè‰k‹{‹Î‹t$ ‹ÁÁéó¥‹Èƒáó¤‹C‹L$‰C Á‰C_^]¸[Ët$USè̋͋ø‹Ñ‹D$(Áéó¥‹ÊPƒáUó¤SèƒÄ_^][ËD$SV‹t$ W‹^‹VØЉ^‹\$‹Ã‹N ÷ØÀ~ ÷Ð#ljŽPRQV‰V‰Vÿ–ðƒÄ‰†ô…Àu(…Ûu‹‹Fp޼Q‹ŽRQPÿP4ƒÄ_^¸[Ë–øÇ†ð@K ‰–ü_^3À[ÃS‹\$UV‹K‹C‹t$‹Ñ+ÐW;òެ‹S ‹é+Â<0‹s+î;ý'PRVèÇK‹C‹s ‹S‹ÈƒÄ +ÎщC _^‰S]‹Â[Ã+Ê‹ñu¾ö;÷|úVèýI‹èƒÄ…íu_^ǃô][Ã.‹s …ö‰St!‹K‹ý+΋ÁÁéó¥‹Èƒáó¤‹KQèIƒÄ‹K ‹C‹Õ‰k+щk ‰C‹C_^][ËD$‹€ôËL$‹‘ø…Òt ‹AV‹q+Æ^ÂÃÈÿËL$‹ü…Àt ‹‰ø…Ét+ÁÃ3ÀÃV‹t$‹Žø…Ét%‹Fp–¼RQ‹ŽQPÿP4‹–øƒÄ‰–‹†¼^@ÃV‹t$‹Žø…Ét%‹Fp–¼RQ‹ŽQPÿP4‹–øƒÄ‰–‹†À^ËD$‹HD…Ét=‹ˆ…Ét‹Q‹ R‹ÄQRPèW4ƒÄˈü‹øQ‹HpRQPè;4ƒÄËD$…À~ ƒøs‹…0° Ã3ÀÃV‹t$VèEƒÄ…Àu"‹D$‹L$‹T$ PQRVdžðà èƒÄ^ÃS‹\$V‹t$W‹|$L$‹GpQSVPÿPƒÄƒøþtKƒøÿt'ƒøu‹t$‹T$LJðp RSVWèFƒÄ_^[ËD$…Àt‰0_^3À[É·ø_^¸[ËD$…Àt‰0_^3À[É·ø_^¸[ÃS‹\$V‹t$ L$ W‹|$‹FpQSWPÿPƒÄƒøþtpƒøÿtLƒø u‹T$RWjV蓃ąÀul‹|$‹D$‹NpPSWQjVdžð0! dž èƒÄ_^[ËD$…Àt‰8_^3À[ɾø_^¸[ËD$…Àt‰8_^3À[ɾø¸_^[ËD$‹L$ ‹T$P‹D$QR‹HpQjPèƒÄÃì‹…Ô‹L$‰…ЋD$‰D$\‰éþÿÿ9}D„ä‹L$éË‹E(…Àu‹D$\jjPVUè‚ ƒÄ…À… ‹¤…Ût ‹ ‰¤ë/j$èøC‹ØƒÄ…Û„ðj èäCƒÄ‰C…À„ÛƒÀ ‰CC ‰D$(Ç‹• ‰‰ ÇC‹FD‹L$\ÁPV‰CÿV ‰C‹D$lƒÄ…ÀtU‹S‹{‹C+×@;Â~$‹s‹ÏÁæVQèäCƒÄ‰C…À„g‹ÐÖ‰S‹K‹s‹{‹ÁÁéó¥‹Èƒáó¤‹K‹t$X‰K‹ ‹E(A…À‰ „¿‹K‹C‰D$$<‹D$d…À‹CtÁ‹S‰D$‰C JD$RPL$,WQVÿV<‹D$8ƒÄ;Çt6‹C‹{+øÑçWPèECƒÄ‰C…À„ȋЋD$d×…À‰St’‹C‰C늋L$‹T$(ƒÃ RÆ‹D$`SPVUèôƒÄ…À…‹¸‹‹EQRPÿU(ÄQè >éÇC ‹ED…À„÷‹T$‹D$\RPéÞ‹E(…ÀuM‹L$\jjQVUèƒÄ…À…*‹E(…Àu+‹E,…Àu$‹ED…À„‹T$‹D$\RPVUèº-ƒÄé‹^D‹T$\ÚÇD$SV½ÄÿV ÃPSVWèK?ƒÄ‰D$0…À„½‹ÐT$‰Ô‹L$\D$0RPQVUèúƒÄ…À…•‹E(‹•Ð…À‰•Ôt‹¸‹T$0Q‹MRQÿÐƒÄ ‹E,…Àt"‹E(…Àt ‹T$ ‹L$‹‰‹T$0‹ERPÿU,ƒÄWèØ<‹D$ ƒÄ…ÀtA‹M\‹Ø…Ét‹‹‹UPRÿÑ‹D$$ƒÄ‹@‹¬‰D$‰K‰¬‹‹C‰B‹D$…Àu¿‹… …À„¿‹D$‹L$‰D$\‰é€úÿÿ‹L$T‹… ;Á„­‹ ‹…¤‹‰• ‰‹T$\‰¤‹ND n> Ô= z> ¢> IC ÍC ®C r< C ðC VE  IE xE S‹\$V‹t$ W‹|$‹NpWD$SPQVè0‹L$(ƒÄ…ÉtWSQVdžð ; è2óÿÿƒÄ_^[ËD$ S‹\$ U‹l$ V‹0W;]pu½øü‰L$‰7ë ‹½W‰T$‹L$ ‰7ÇD$PQVSÿS ‹L$$‹T$(ƒÀƒÄƒø.‰wk3ÒŠôH ÿ$•àH ‹ED…Àt‹D$PVSUè) ƒÄ‹T$‹L$_^]‰ 3À[ËD$‰_^]¸[ËD$$…Àu!_^]¸[ËD$$…Àu_^]¸[Ãéá#‰0_^]3À[ÃI½H «H ›H sH ÏH U‹l$V‹t$ L$ W‹|$‹FpQUWPdžð0I ‰¾øÿ‹L$ ƒÀƒÄƒø‰Žüw}3ÒŠ”J ÿ$•pJ ‹FD…Àt=‹FpQWPVè ƒÄë(Q‹NpWQVèlƒÄ…Àtxë‹VpQWRVèg ƒÄ…Àtc‹L$‹FpT$RUQP‹ù‰Žøÿ‹L$ ƒÀƒÄƒø‰Žüvƒ_^¸ ]ËFD…Àt‹FpUWPV‰®üè  ƒÄ‹D$…Àt‰(_^3À]Ã_^¸]Ã‰Žø_^¸]ËD$…Àt‰8_^3À]Ã_^¸]ËD$…Àt‰8_^3À]Ã_^¸]ÃI÷I J TJ ;J ,J ˜I ­I €I îI ƒìSUV‹t$ W‹|$(L$T$(ÆG‹†‰Ž‹_‹o‰D$3Àë‰D$‰D$‹†ÄRUSP‰|$,ÿ‹L$8‹–ÄjQPUSRVè<ðÿÿ‹L$DƒÄ,ÆG‰Ž_^][ƒÄËD$‹€ôËD$‹L$‹T$V‹t$W‹|$VP‹D$QWRPè[ƒÄ…ÀuB…ÿu‹F ‹V‹È+Êt ŠHÿH€ù u‰F ‹V ‹F;Ðu VèƒÄ…Àt‹F Æ‹F @‰F 3À_^Ã_¸^ËL$S‹\$U‹l$VD$WPQSUÿUƒÀƒÄƒø+‡î‹|$(3ÒŠO ÿ$•ðN SUÿU,ƒÄ…ÀŒT‹L$…Éuƒø u‹O ‹w‹Ñ+Ö„Ó8Aÿ„ÊL$(QPÿœ  ƒÄ‰D$…À„3ö…ÀŽ¥‹W ‹O;ÑuWèHƒÄ…À„‹D$‹O ŠT4(ˆ‹_ CF;ð‰_ |Ìél‹D$ PSUW肃ąÀ„ÑéO‹EDÉD$ ‹D$…Àu‹G ‹W‹È+Ê„.€xÿ „$‹W ‹G;ÐuWèǃąÀ„†‹G Æ ‹G @‰G é÷‹ED‹L$ +ÈÃQPUÿU0ƒÄ ˆD$„Àt0‹W ‹O;ÑuWè~ƒÄ…À„=ŠD$‹O ˆ‹G @‰G é«‹ED‹T$ ‹t$+ÐÃRP†ØUPèðƒÄ…À„ÿjÆ(PVèfÂÿÿ‹T$ ‹ðƒÄ ‹Šè…ö‰Šäu‹‚|…À…ÓëJŠF„À…Û‹F…À…å‹N…É„ï‹FWÁÆFP‹D$$Q‹ŠÄPQRèÎýÿÿƒÄÆF…ÀuF‹D$$‹\$ T$ RPSUÿUƒÀƒÄƒø+‡¹éÊýÿÿ_^]3À[ËD$;hpu ‹L$ ‰ˆø¸_^][ËD$;hpuí_^‰˜ø]¸[ËD$;hpu‰˜ø_^]¸[Ã_^]¸[Ã;jpu‰šø_^]¸ [Ã;jpu‰šø_^]¸ [Ã;jpu‰šø_^]¸[Ã;jpu‰šø_^]¸[ÃéÈI4N ¾L XN ;N ¡L ÇL M L èN ‹L$S‹\$U‹l$ VD$W‹|$PQSWÿWƒÀƒÄƒø ‡¥3ÒŠàQ ÿ$•¼Q ‹……Àu ;}p„ˆ‹GD‹L$+ÈÃQP•ÄWRèÆƒÄ…À„sjP…„Pè<Àÿÿ‹Ô‹ðƒÄ ‰Ð…ö„UŠF„À…_‹F …À…i‹F‹VÐÆFRP‹…ÄPUè2ÿÿÿƒÄÆF…À…€éÏ‹L$…hQSWPèûƒÄ…À„è鬋WDÓ‰T$‹…p‹tµh;ÁuVèVƒÄ…À„³‹N Æ ‹F @‰F ëmSWÿW,ƒÄ…ÀŒäT$RPÿœ  ƒÄ‰D$…À„É3ö…À~<‹p‹•th;ÊuSèïƒÄ…ÀtP‹D$‹S ŠL4ˆ ‹K AF;ð‰K |Ä‹D$ ‹\$T$RPSWÿWƒÀƒÄƒø †[þÿÿé_‰ø^]¸[Ã_^]¸[Ã;}pu‰ø_^]¸ [Ã;}pu‰ø_^]¸ [Ã;}pu‰ø_^]¸ [Ã_^]3À[Ã;}pu‰ø_^]¸[Ã;}pu‰ø¸_^][Ã;}puñ‹L$_‰ø^]¸[ÃqQ EP Q ¢Q "P NP „P }O Q S‹\$UV‹C4W…Àu-‹CD…À„ª‹D$ ‹L$‹T$PQRSèqƒÄ¸_^][Ët$‹L$‹FD,AUVÿV ‹øƒÄýWUVPèþ‹èƒÄ…íu_^][˓ЋL$ ‰“Ô‹FDÑà+ÈQWVÿV$ƒÄ»ÄPVWè‹ðƒÄ…öu_^][ÃVè‹SVURÿS4W迃Ä_^]¸[ËD$Š„Ét2€ù t ŠH@„ÉuóËȊ€ú uÆ ŠPA@€ú uëˆA@€8uáÆÃSVW‹|$‹G8…Àu(‹GD…Àtk‹D$‹L$‹T$PQRWèfƒÄ¸_^[ËL$‹t$ŸÄ‹AD@+ò‹T$V‚PQSèô‹ðƒÄ…öu_^[ÃVèQÿÿÿ‹OVQÿW8SèóƒÄ_^¸[ÃS‹\$ ŠCH„Àu|UV‹t$W;^pu†ü®ø‰D$ë ‹®M‰L$‹|$ ‹V ‹F$L$ ‰T$ PQT$$WRSÿS<‹L$(‹D$0‹T$4‰‹F +ÐRP‹FPÿVD‹L$<ƒÄ ‰M‹D$;Çu¸_^][ËT$‹D$+ÐRP‹D$‹HQÿPDƒÄ [ÃS‹\$V‹t$ W‹|$…Ût‹V3À…Ò~‹N;9t)@ƒÁ ;Â|ô‹F ‹N;ÈuE…Àuj`ÇF èEƒÄë!_^¸[ËNÀ‰F @ÁàPQ薃ąÀ‰Fu_^3À[ËF‹L$…É@‹F‰8‰XˆH¸uˆG‹N_A‰N^[ÃSU‹l$VW‹]Š„À„â‹t$<:…‹};ûtC‹†t‹Žp;ÁuŽhQèlƒÄ…À„¡‹–tŠˆ‹–tBG;û‰–tu½‹Žt‹†p;Èu–hRè)ƒÄ…Àtb‹†tjÆ‹–t‹ŽxB‰–t–XQRè7ºÿÿƒÄ …Àt0‹Žx‹;Ñu‹Žt‰Žx뉎t‰EŠCC„Àt é)ÿÿÿ_^]3À[Ã_^]¸[ÃSUV‹t$W‹†t‹Žp;ÁuŽhQè|ƒÄ…ÀtZ‹–t‹L$ Q‹L$Æ‹†t‹T$ @‰†t†hRQPèô‹øƒÄ…ÿu_^][ÃGj –HWRèf¹ÿÿƒÄ ‰D$…Àu_^]3À[Ã98t‹Žx_‰Žt^][ËŽÌ‹–t…ɉ–x„TŠ€ùxua€mu[€luU€nuO€suIŠW„Òt €ú:u=„ÒuÆ”_‰p^]Æ@ [ÃÇjÆXWVèÒ¸ÿÿ‹L$ ƒÄ ‰A‹Á_^]Æ@ [Ã3í„É„â€ù:tŠL/E„Éuò_^][Ã3Û…í~D‹–t‹†p;Ðu†hPè>ƒÄ…À„ÿÿÿ‹†tŠ ;ˆ‹–tBC;݉–t|¼‹–t‹†p;Ðu†hPèú ƒÄ…À„Ôþÿÿ‹†tj–XÆ‹†t‹Žx@QR‰†tè¸ÿÿ‹L$ ƒÄ ‰A‹Žx9u‹–t‹D$‰–x_^][ËD$‰Žt_^][ÃìSUV‹t$3ÛW‹†˜…À„£‹†Ð‹ŽÌ;ÁuŽÄQèI ƒÄ…À„‹–ÐÆ=‹†Ð‹Ž˜@‰†Ð‹YŠŽø„ÉtK3ÿ…Û~G;†Ìu–ÄRèú ƒÄ…À„ˆ˜‹–ЋHŠ9ˆ‹®ÐEG;û‰®Ð‹Å|¹»ŽXT$QRèa¹ÿÿD$Pèw¹ÿÿ‹èƒÄ …í„L‹E…À„*…Ût=‹ŽÐ‹†Ì;Èu–ÄRèo ƒÄ…À„8‹†ÐÆ ‹†Ð@‰†Ð‹}€?tD‹ŽÐ‹†Ì;Èu–ÄRè* ƒÄ…À„ó‹†ÐŠˆ‹–ÐBG‰–Ѐ?u¼‹–Ћ†Ì;Ðu†ÄPèæ ƒÄ…À„¯‹ŽÐÆ=‹–ÐŠŽøB‰–Ћ‹U„É‹ZtK3ÿ…Û~B;†Ìu†ÄPè˜ ƒÄ…À„a‹M‹†Ð‹QŠ :ˆ‹†Ð@G;û‰†Ð|¾»T$Rè+¸ÿÿ‹èƒÄ…í…´þÿÿ†(L$PQèí·ÿÿT$Rè¸ÿÿ‹øƒÄ …ÿ„³ŠG„À„‘…Ût=‹†Ð‹ŽÌ;ÁuŽÄQèû ƒÄ…À„Ä‹–ÐÆ ‹†Ð@‰†Ð‹?€?tD‹†Ð‹ŽÌ;ÁuŽÄQè· ƒÄ…À„€‹–Њˆ‹–ÐBG‰–Ѐ?u¼»L$QèP·ÿÿ‹øƒÄ…ÿ…Mÿÿÿ‹–Ћ†Ì;Ðu†ÄPèW ƒÄ…Àt$‹ŽÐ_Æ‹†Ð@‰†Ð‹†Ô^][ƒÄÃ_^]3À[ƒÄÃSUVW‹|$‹ï€?„=‹t$ŠE< „¯„À„§<=…]‹†Ð‹–Ô‹È+Êuž”ëw;†Ìu–ÄRèÀ ƒÄ…À„Þ‹†Ðj–XÆ‹ŽÐA‰ŽÐ‹ŽÔQRèʳÿÿ‹ØƒÄ …Û„¦‹†Ô‹ ;Èu‹†Ð‰†Ô뉆ЊE}< tI„ÀtE‹ŽÐ‹†Ì;Èu–ÄRè3 ƒÄ…À„Q‹†ÐŠˆ‹®ÐEG‰®ÐŠ< u·‹–Ћ†Ì;Ðu†ÄPèîƒÄ…À„ ‹ŽÐ–¨RÆ‹†Ð@‰†Ð‹†ÔPjSVè†ÖÿÿƒÄ…À„Ô‹ŽÔ‰ŽÐŠ„ÀtG‹ïé°‹–Ћ†Ì;Ðu†ÄPèuƒÄ…À„“‹ŽÐŠUˆ‹ŽÐAE‰ŽÐën‹†Ð‹ŽÌ;ÁuŽÄQè3ƒÄ…ÀtU‹–ÐjÆ‹ŽÐ‹†ÔA‰ŽÐŽ(PQèA²ÿÿƒÄ …ÀtÆ@€}tE‹–Ô‹ý‰–Ѐ?t éÎýÿÿ_^]3À[Ã_^]¸[ÃV‹t$‹Æ‹Ö€>t;Š €ù t€ù t €ù tˆë ;Æt €xÿ tÆ @ŠJB„ÉuÕ;Æt €xÿ uÆ@ÿ^ÃÆ^ÃV‹t$F@PèVèì³ÿÿNQèã³ÿÿV RèÚ³ÿÿF0PèѳÿÿN\ÇFTQÇFX躳ÿÿƒÄÇFlÇFp¸^ËD$‹T$ƒìt¹VW‹ð|$󥹋ò‹øó¥¹t$‹úó¥_^ƒÄtÃìD$V‹t$W~WPèi³ÿÿL$Qè³ÿÿƒÄ …Àt$‹H …Ét ‹PRèƒÄD$Pè[³ÿÿƒÄ…ÀuÜVèβÿÿN\QèŲÿÿW迲ÿÿV Rè¶²ÿÿF0Pè­²ÿÿƒÆ@VètƒÄ_^ƒÄÃìL$SUV‹t$WF0PQèײÿÿT$Rèí²ÿÿ‹\$(ƒÄ …Àt?{@‹PWèöƒÄ…À„zjK0PQè/°ÿÿƒÄ …À„cT$R課ÿÿƒÄ…ÀuÄF L$PQèu²ÿÿT$R苲ÿÿ‹øƒÄ …ÿ„±‹CL‹KH;ÁuK@Q蛃ąÀ„‹SLK@Æ‹CL@‰CL‹PQègƒÄ…À„ë@j S PR蟯ÿÿ‹ðƒÄ …ö„ÑŠGˆF‹G…Àt-ŠO ‹T$ ˆN ‹ƒÂl;úuClë‹jS0QRè^¯ÿÿƒÄ ‰FD$PèÞ±ÿÿ‹øƒÄ…ÿ…Sÿÿÿ‹t$ NT$QR蟱ÿÿD$Pèµ±ÿÿ‹èƒÄ …í„‹MC@QP軃ąÀ„?jSPRèô®ÿÿ‹øƒÄ …ÿ„&‹E…Àt@ÁàPèÀƒÄ‰G…À„‹E‰G‰G ‹E…Àt‹jS0QR訮ÿÿƒÄ ‰G‹GÇD$…À~{3ö‹Ej‹ C ‹RPè}®ÿÿ‹OƒÄ ‰‹U‹GŠLˆL‹U‹D…Àt!PC@Pè‹OƒÄ‰D‹W‹D…Àt{ë ‹GÇD‹D$‹O@ƒÆ ;Á‰D$|‹‹t$ L$Qèž°ÿÿ‹èƒÄ…í…éþÿÿ{@VWSèFƒÄ …Àt.V\C\RWPè1ƒÄ …Àt‹NT_‰KT‹VX^‰SX]¸[ƒÄÃ_^]3À[ƒÄÃƒì ‹D$SUVWL$3íPQ‰l$è°ÿÿT$Rè°ÿÿ‹ðƒÄ ;õ„È‹\$$‹PSè ƒÄ…À„½‹L$ j PQèX­ÿÿ‹øƒÄ …ÿ„£‹F …ÀtBPSèíƒÄ…À„ЉG ‹F…ÀtD;Åu ‹T$‰Wë7‹èUSèƒąÀtc‰G‰D$ë‹F‹NPQSèôƒÄ …ÀtE‰G‹V‰W‹v…ötVS膃ąÀt'‰GD$PèR¯ÿÿ‹ðƒÄ…ö…<ÿÿÿ_^]¸[ƒÄ Ã_^]3À[ƒÄ ËD$3ɉ‰H‰H‰H ‰HËL$‹A…À‹u‰Aë…ÀtW‹y‹‰8‰A…Ò‹Âuð_ÇÇAÇA ÇAÃSVW‹|$3Û‹;Ãt‹0PèIƒÄ;ó‹Æuï‹G‰;Ãt‹0Pè/ƒÄ;ó‹Æuï‰_‰_ ‰_‰__^[ÃS‹\$UV‹C k …ÀWu SèxƒÄ…ÀtQ‹C‹|$ ‹t$PUL$$WQVÿV<‹D$0ƒÄ;Çt'SèIƒÄ…Àt"‹SD$RUWPVÿV<‹D$0ƒÄ;ÇuÙ‹C_^][Ã_^]3À[ÃV‹t$W‹|$‹F ‹N;Áu VèöƒÄ…Àt‹N Šˆ‹F @G‰F ‹ÈŠGÿ„ÀtëÏ_3À^ËF‰N_^ÃSV‹t$ W‹F …ÀuV謃Ä…Àu_^3À[Ë|$…ÿ~/‹\$‹F ‹N;Áu V胃Ä…Àt׋N Šˆ‹F @OC‰F …ÿÕ‹N ‹F‰N_^[ËD$‹L$ ‹T$V‹t$PQRVè¦þÿÿƒÄ…Àu^ËF ‹N;ÁuVèƒÄ…Àu^ËN Æ‹F @‰F ‹F^ÃS‹\$UV‹CW…À„”‹K…Éu,‰‹‹ ‰C_^Ç‹ ]A‰C‹QЉC ‰S¸[ËS+Ñ‹H;Ñ}U‹‹‰‹C‹s‰K‹K‹ø+΃NjщÁéó¥‹Êƒá󤋋{‹S ‹È+Ï_ƒÁ^ÑH‰S ‰K‹P]Ѹ‰S[Ë…ÀtU‹KP;ÊuK‹s+ñÑæNQPèØƒÄ‰…Àu_^][Ép‹‹k‹K ‹ÐƒÀ+Õ‰CƒÂ_ÊÆ^‰K ‰C]¸[ËC‹S+½=|,EPè ƒÄ…Àu_^][Éh‹ ‰‹s‹K x+Ή‹ÑÁéó¥‹Êƒáó¤‹{‹S ‹È+Ï_ƒÁ^ÑH‰S T(‰K‰S]¸[ÃV‹t$…öt$VèôY…ÀVt PèYY^Ãjÿ5Pº ÿ(  ^ÃSV‹t$ W¯t$ƒþà‹Þw …öuj^ƒÆƒæð3ÿƒþàw*;è² w Sèõ ‹øY…ÿu+Vjÿ5Pº ÿ,  ‹ø…ÿu"ƒ=8µ tVèÙ…ÀYtë¹SjWèqƒÄ ‹Ç_^[Ã3Àëøÿ58µ ÿt$èYYÃ|$àw"ÿt$è…ÀYu9D$tÿt$膅ÀYuÞ3ÀÃV‹t$;5è² w Vè\ …ÀYu…öuj^ƒÆƒæðVjÿ5Pº ÿ,  ^ÃS‹\$UV…ÛWuÿt$èwÿÿÿYé‹t$…öuSè·þÿÿY3Àéê3ÿƒþà‡ÀSè¡‹èY…턌;5è² wDVSUè‘ƒÄ …Àt‹ûë)VèË ‹øY…ÿt$‹CüH;Ær‹ÆPSWèéSU考ąÿ…€…öuj^ƒÆƒæðVjÿ5Pº ÿ,  ‹ø…ÿtA‹CüH;Ær‹ÆPSWè£SUè:ƒÄë…öuj^ƒÆƒæðVSjÿ5Pº ÿ0  ‹ø…ÿuƒ=8µ tVè=…ÀY…ÿÿÿéÿÿÿ‹Ç_^][ÃU‹ìWV‹u ‹M‹}‹Á‹ÑÆ;þv;ø‚x÷ÇuÁéƒâƒùr)ó¥ÿ$•Èj ‹Çºƒér ƒàÈÿ$…ài ÿ$Øj ÿ$\j ði j @j #ÑŠˆŠFˆGŠFÁéˆGƒÆƒÇƒùrÌó¥ÿ$•Èj I#ÑŠˆŠFÁéˆGƒÆƒÇƒùr¦ó¥ÿ$•Èj #ÑŠˆFÁéGƒùrŒó¥ÿ$•Èj I¿j ¬j ¤j œj ”j Œj „j |j ‹DŽä‰Dä‹DŽè‰Dè‹DŽì‰Dì‹DŽð‰Dð‹DŽô‰Dô‹DŽø‰Dø‹DŽü‰Düðøÿ$•Èj ‹ÿØj àj ìj k ‹E^_Éʈ‹E^_ÉʈŠFˆG‹E^_ÉÃIŠˆŠFˆGŠFˆG‹E^_ÉÃt1ü|9ü÷Çu$Áéƒâƒùr ýó¥üÿ$•`l ‹ÿ÷Ùÿ$l I‹Çºƒùr ƒà+Èÿ$…hk ÿ$`l xk ˜k Àk ŠF#шGNÁéOƒùr¶ýó¥üÿ$•`l IŠF#шGŠFÁéˆGƒîƒïƒùrŒýó¥üÿ$•`l ŠF#шGŠFˆGŠFÁéˆGƒîƒïƒù‚Zÿÿÿýó¥üÿ$•`l Il l $l ,l 4l u;Dº u‹Mü; <º uƒ%Dº ‹Mü‰B_^[ÉáHº ‹ 8º VW3ÿ;Áu0D‰PÁàPÿ5Lº Wÿ5Pº ÿ0  ;Çtaƒ8º £Lº ¡Hº ‹ Lº hÄAj€ÿ5Pº 4ÿ,  ;ljFt*jh hWÿH  ;ljF uÿvWÿ5Pº ÿ(  3ÀëƒNÿ‰>‰~ÿHº ‹Fƒÿ‹Æ_^ÃU‹ìQ‹MSVW‹q‹A3Û…À|ÑàCë÷‹Ãj?iÀZ„0D‰Eü‰@‰@ƒÀJuô‹ûjÁçy hh€WÿH  …ÀuƒÈÿé“—p;úwƒøu€N@ëƒøu €Në€N€Cƒû|›ÿ5 º ÿl  _^][ƒÄDÃV¾ ¹ ‹…Àt Pè€ãÿÿƒ&YƒÆþ º |å^ÃS3Û9(º VWuè ‹5$µ 3ÿŠ:Ãt<=tGVè´Ytëè½PèÜãÿÿ‹ðY;ó‰5dµ uj èýéÿÿY‹=$µ 8t9UWèz‹èYE€?=t"Uè§ãÿÿ;ÃY‰uj èÎéÿÿYWÿ6èdYƒÆYý8uÉ]ÿ5$µ èÍâÿÿY‰$µ ‰_^Ç$º [ÃU‹ìQQS3Û9(º VWuèN ¾ µ hVSÿh  ¡Tº ‰5tµ ‹þ8t‹øEøPEüPSSWèM‹Eø‹MüˆPèãÿÿ‹ðƒÄ;óujè,éÿÿYEøPEüP‹Eü†PVWè‹EüƒÄH‰5\µ _^£Xµ [ÉÃU‹ì‹M‹ESVƒ!‹uW‹} Ç‹E…ÿt‰7ƒÇ‰} €8"uDŠP@€ú"t)„Òt%¶Òö‚¸ t ÿ…ötŠˆF@ÿ…ötÕŠˆFëÎÿ…öt€&F€8"uF@ëCÿ…ötŠˆFŠ@¶Úöƒ¸ t ÿ…ötŠˆF@€ú t „Òt €ú uÌ„ÒuHë…öt€fÿƒe€8„àŠ€ú t€ú u@ëñ€8„È…ÿt‰7ƒÇ‰} ‹UÿÇE3Û€8\u@Cë÷€8"u,öÃu%3ÿ9}t €x"Pu‹Âë‰}‹} 3Ò9U”‰UÑë‹ÓK…ÒtC…ötÆ\FÿKuóŠ„ÒtJƒ}u €ú t?€ú t:ƒ}t.…öt¶Úöƒ¸ tˆF@ÿŠˆFë¶Òö‚¸ t@ÿÿ@éXÿÿÿ…öt€&Fÿéÿÿÿ…ÿtƒ'‹E_^[ÿ]ÃQQ¡¤¶ SU‹-„  VW3Û3ö3ÿ;Ãu3ÿÕ‹ð;ót Ǥ¶ ë(ÿ€  ‹ø;û„êǤ¶ éƒø…;óu ÿÕ‹ð;ó„Âf9‹Æt@@f9uù@@f9uò+Æ‹=|  ÑøSS@SSPVSS‰D$4ÿ׋è;ët2Uètàÿÿ;ÃY‰D$t#SSUPÿt$$VSSÿ×…Àuÿt$è¥ßÿÿY‰\$‹\$Vÿx  ‹ÃëSƒøuL;ûu ÿ€  ‹ø;ût<8‹Çt @8uû@8uö+Ç@‹èUè àÿÿ‹ðY;óu3öë UWVèÞòÿÿƒÄ Wÿt  ‹Æë3À_^][YYÃ|$uƒ=Xº u ÿt$ÿˆ  jX S3Û9¬¶ VWuBh¤ ÿ   ‹ø;ûtg‹5$  h ¤ WÿÖ…À£¬¶ tPhü£ WÿÖhè£ W£°¶ ÿÖ£´¶ ¡°¶ …ÀtÿЋ؅Ût¡´¶ …ÀtSÿЋØÿt$ÿt$ÿt$Sÿ¬¶ _^[Ã3ÀëøÌÌÌÌÌÌÌÌÌÌÌÌÌÌW‹|$ëj¤$‹ÿ‹L$W÷ÁtŠA„Àt;÷Áuñ‹ºÿþþ~Ѓðÿ3ƒÁ©tè‹Aü„Àt#„ät©ÿt©ÿtëÍyÿë yþëyýëyü‹L$ ÷ÁtŠA„ÒtdˆG÷Áuî뉃Ǻÿþþ~‹Ѓðÿ3‹ƒÁ©tá„Òt4„öt'÷Âÿt÷Âÿtëlj‹D$_Ãf‰‹D$ÆG_Ãf‰‹D$_È‹D$_ËL$ W…ÉtzVS‹Ù‹t$÷Æ‹|$uÁéuoë!ŠFˆGIt%„Àt)÷Æuë‹ÙÁéuQƒãt ŠFˆG„Àt/Kuó‹D$[^_Ã÷ÇtˆGI„Š÷Çuî‹ÙÁéulˆGKuú[^‹D$_ɃÇIt¯ºÿþþ~‹Ѓðÿ3‹ƒÆ©tÞ„Òt,„öt÷Âÿt ÷ÂÿuƉëâÿÿ‰ëâÿ‰ë3Ò‰ƒÇ3ÀIt 3À‰ƒÇIuøƒãu…‹D$[^_ÃÌÌ‹L$÷ÁtŠA„Àt@÷Áuñ‹ºÿþþ~Ѓðÿ3ƒÁ©tè‹Aü„Àt2„ät$©ÿt©ÿtëÍAÿ‹L$+ÁÃAþ‹L$+ÁÃAý‹L$+ÁÃAü‹L$+ÁÃU‹ìƒìSVWÿu舋ðY;5ä¶ ‰u„j3Û;ó„V3Ò¸´ 90trƒÀ0B=µ |ñEèPVÿ\  ƒø…$j@3ÀY¿¸ ƒ}è‰5ä¶ ó«ª‰¹ †ï€}î„»M҄®¶Aÿ¶Ò;‡“€ˆ¸ @ëîj@3ÀY¿¸ ó«4R‰]üÁ檞(´ €;‹Ët,ŠQ„Òt%¶¶ú;Çw‹UüŠ’´ ¸ @;ÇvõAA€9uÔÿEüƒÃƒ}ürÁ‹EÇü¶ P£ä¶ èÆ¶´ ¿ð¶ ¥¥Y£¹ ¥ëUAA€yÿ…HÿÿÿjX€ˆ¸ @=ÿrñVèŒY£¹ Çü¶ ë‰ü¶ 3À¿ð¶ «««ë 9¸¶ tèŽè²3ÀëƒÈÿ_^[ÉËD$ƒ%¸¶ ƒøþuǸ¶ ÿ%  ƒøýuǸ¶ ÿ%  ƒøüu¡Ô¶ Ǹ¶ ËD$-¤t"ƒètƒè t Ht3ÀøøøøÃWj@Y3À¿¸ ó«ª3À¿ð¶ £ä¶ £ü¶ £¹ «««_ÃU‹ììEìVPÿ5ä¶ ÿ\  ƒø…3À¾ˆ„ìþÿÿ@;ÆrôŠEòÆ…ìþÿÿ „Àt7SWUó¶ ¶À;Áw+ȼìþÿÿA¸ ‹ÙÁéó«‹ËƒáóªBBŠBÿ„ÀuÐ_[j…ìúÿÿÿ5¹ ÿ5ä¶ P…ìþÿÿVPjèQj…ìýÿÿÿ5ä¶ VP…ìþÿÿVPVÿ5¹ èÞj…ìüÿÿÿ5ä¶ VP…ìþÿÿVPhÿ5¹ 趃Ä\3Àìúÿÿf‹öÂt€ˆ¸ Š”ìýÿÿˆ· ëöÂt€ˆ¸ Š”ìüÿÿë〠· @AA;Ær¿ëI3À¾ƒøArƒøZw€ˆ¸ ŠÈ€Á ˆˆ· ëƒøarƒøzw€ˆ¸ ŠÈ€é ëà€ · @;Ær¾^ÉÃ=(º ujýè,üÿÿYÇ(º ÃU‹ìjÿh0¤ hœ“ d¡Pd‰%ƒìSVW‰eè3ÿ9=ܶ uFWWj[Sh(¤ ¾VWÿ  …Àt‰ܶ ë"WWSh$¤ VWÿ   …À„"Çܶ 9}~ÿuÿuèžYY‰E¡Ü¶ ƒøuÿuÿuÿuÿuÿu ÿuÿ   éÞƒø…Ó9} u¡Ô¶ ‰E WWÿuÿu‹E$÷ØÀƒà@Pÿu ÿ  ‹Ø‰]ä;ß„œ‰}üƒÀ$üès‰eè‹Ä‰E܃MüÿëjXËeè3ÿ‰}܃Müÿ‹]ä9}ÜtfSÿuÜÿuÿujÿu ÿ  …ÀtMWWSÿuÜÿu ÿuÿ  ‹ð‰uØ;÷t2öE t@9}„²;uÿuÿuSÿuÜÿu ÿuÿ  …À…3ÀeÈ‹Mðd‰ _^[ÉÃÇEü6ƒÀ$ü迉eè‹Ü‰]àƒMüÿëjXËeè3ÿ3ÛƒMüÿ‹uØ;ßt´VSÿuäÿuÜÿu ÿuÿ  …Àtœ9}WWuWWëÿuÿuVSh ÿu ÿ|  ‹ð;÷„qÿÿÿ‹Æélÿÿÿ‹T$‹D$…ÒVJÿt €8t@‹ñI…öuó€8^u+D$ËÂÃU‹ìjÿhH¤ hœ“ d¡Pd‰%ƒìSVW‰eè¡à¶ 3Û;Ãu>EäPj^Vh(¤ Vÿ  …Àt‹ÆëEäPVh$¤ VSÿ  …À„ÎjX£à¶ ƒøu$‹E;Ãu¡Ä¶ ÿuÿuÿu ÿuPÿ  韃ø…”9]u¡Ô¶ ‰ESSÿuÿu ‹E ÷ØÀƒà@Pÿuÿ  ‰Eà;Ãtc‰]ü<‹ÇƒÀ$üèB‰eè‹ô‰uÜWSVèèÿÿƒÄ ë jXËeè3Û3öƒMüÿ;ót)ÿuàVÿuÿu jÿuÿ  ;ÃtÿuPVÿuÿ  ë3ÀeÌ‹Mðd‰ _^[ÉÃÌU‹ìSVWUjjh¼’ ÿuèô]_^[‹å]ËL$÷A¸t‹D$‹T$‰¸ÃSVW‹D$PjþhÄ’ dÿ5d‰%‹D$ ‹X‹p ƒþÿt.;t$$t(4v‹ ³‰L$‰H ƒ|³uh‹D³è@ÿT³ëÃdƒÄ _^[Ã3Àd‹ yÄ’ u‹Q ‹R 9Qu¸ÃSQ»µ ë SQ»µ ‹M‰K‰C‰k Y[ÂÌÌVC20XC00U‹ìƒìSVWUü‹] ‹E÷@…‚‰Eø‹E‰EüEø‰Cü‹s ‹{ƒþÿta vƒ|tEVUkÿT]^‹] Àt3x<‹{Sè©þÿÿƒÄkVSèÞþÿÿƒÄ vj‹Dèaÿÿÿ‹‰C ÿT‹{ v‹4롸ë¸ëUkjÿSèžþÿÿƒÄ]¸]_^[‹å]ÃU‹L$‹)‹AP‹APèyþÿÿƒÄ]ÂÌÌÌÌÌÌÌÌÌÌÌÌQ=L$ré-…=sì+ȋą‹á‹‹@PÃÌÿ%  ֨Ĩ¢¨’¨²¨p¨f¨|¨J¨8¨†¦’¦ž¦¬¦¾¦Ì¦Ú¦è¦ö¦§§(§Ž§Z¨<§H§X§n§€§ §º§Ô§ê§¨¨(¦^¦B¦ò¥¦¦š¥Î¥º¥T¥„¥r¥xml=http://www.w3.org/XML/1998/namespace#runtime error TLOSS error SING error DOMAIN error R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data abnormal program termination R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point not loaded Microsoft Visual C++ Runtime Library Runtime Error! Program: ...GetLastActivePopupGetActiveWindowMessageBoxAuser32.dllÿÿÿÿ  ÿÿÿÿÏ Ó ÿÿÿÿS’ W’ ¥z¦ ¤â¨ Ö¨Ä¨¢¨’¨²¨p¨f¨|¨J¨8¨†¦’¦ž¦¬¦¾¦Ì¦Ú¦è¦ö¦§§(§Ž§Z¨<§H§X§n§€§ §º§Ô§ê§¨¨(¦^¦B¦ò¥¦¦š¥Î¥º¥T¥„¥r¥XmlGetUtf8InternalEncodingXmlInitEncoding XmlPrologStateInitXmlGetUtf8InternalEncodingNSXmlInitEncodingNS XmlPrologStateInitExternalEntityXmlUtf8EncodeXmlParseXmlDecl XmlParseXmlDeclNSXmlInitUnknownEncodingXmlInitUnknownEncodingNS XmlSizeOfUnknownEncodingxmltok.dllŸHeapFree™HeapAlloc¢HeapReAllocÊGetCommandLineAtGetVersionHeapDestroy›HeapCreate¿VirtualFree»VirtualAlloc}ExitProcessžTerminateProcess÷GetCurrentProcessßWriteFileRGetStdHandle$GetModuleFileNameAmSetHandleCountGetFileTypePGetStartupInfoA²FreeEnvironmentStringsA³FreeEnvironmentStringsWÒWideCharToMultiByteGetEnvironmentStringsGetEnvironmentStringsW]DisableThreadLibraryCalls>GetProcAddressÂLoadLibraryA¿GetCPInfo¹GetACP1GetOEMCPäMultiByteToWideChar¿LCMapStringAÀLCMapStringWSGetStringTypeAVGetStringTypeW/RtlUnwindKERNEL32.dllã8€ª$$©¨©8ª0€p@€pð°`PðàÀÀ`ð°€ Ðð`0€Pp@а0ÐÀª ª°ªÏªÛªéª««4«M«^«}«‡«—«¨«»«Ê«Ö«ñ« ¬#¬9¬U¬o¬…¬•¬µ¬Ø¬ô¬­+­E­i­‡­¨­¸­  !"#xmlparse.dllXML_DefaultCurrentXML_ErrorStringXML_ExternalEntityParserCreateXML_GetBaseXML_GetBufferXML_GetCurrentByteCountXML_GetCurrentByteIndexXML_GetCurrentColumnNumberXML_GetCurrentLineNumberXML_GetErrorCodeXML_GetSpecifiedAttributeCountXML_ParseXML_ParseBufferXML_ParserCreateXML_ParserCreateNSXML_ParserFreeXML_SetBaseXML_SetCdataSectionHandlerXML_SetCharacterDataHandlerXML_SetCommentHandlerXML_SetDefaultHandlerXML_SetDefaultHandlerExpandXML_SetDoctypeDeclHandlerXML_SetElementHandlerXML_SetEncodingXML_SetExternalEntityRefHandlerXML_SetExternalEntityRefHandlerArgXML_SetNamespaceDeclHandlerXML_SetNotStandaloneHandlerXML_SetNotationDeclHandlerXML_SetParamEntityParsingXML_SetProcessingInstructionHandlerXML_SetUnknownEncodingHandlerXML_SetUnparsedEntityDeclHandlerXML_SetUserDataXML_UseParserAsHandlerArgïŽ Ð² À² ¬² œ² Œ² Œ² |² h² L² (² ² ø± ä± ¼±  ± t± 8± $± ð° Ø° ¨° Œ° document is not standaloneerror in processing external entity referenceunclosed CDATA sectionencoding specified in XML declaration is incorrectunknown encodingxml processing instruction not at start of external entityreference to external entity in attributereference to binary entityreference to invalid character numberasynchronous entityrecursive entity referenceundefined entityillegal parameter entity referencejunk after document elementduplicate attributemismatched tagunclosed tokennot well-formedno element foundsyntax errorout of memory2~ ø\£ 0£ £ ࢠ´¢ „¢ `¢ 4¢ ü¡ Ô¡ œ¡ d¡ <¡ x,¡ y¡ z ¡ ü¡ ÿø  ÿÿÿÿ À À–ÀÀŽÀÀÀ‘À’À“À Œ¤`‚y‚!¦ß¡¥Ÿàü@~€ü¨Á£Ú£ þ@þµÁ£Ú£ þAþ¶Ï¢ä¢å¢è¢[þ@~¡þQQÚ^Ú _ÚjÚ2ÓØÞàù1~þ “(ê2ð2—4 4à4ó45÷687N;á;kô>ø>ü>??? ??r?y?Pœ0¼1À1Ä1È1Ì1Ð1Ô1Ø1Ü1`Üc7i7˜7°7¶7Â7î718T8Z8¯8 99L9R9^9¸9Ð9×9ß9ä9è9ì9:;:U:\:`:d:h:l:p:t:x:Â:È:Ì:Ð:Ô::;E;`;g;l;p;t;‘;»;í;ô;ø;ü;<<< <">1>M>g>n>>…>•>œ>£>«>Ò>Þ>è>ð>ø>þ>???$?+?3?9?D?L?p›1©1¯1É1Î1Ý1ã1ó1þ12#2.24292?2L2i2o2z2€2Š22 2¦2ê23}5ˆ55£5©5¿5Æ5Ì5Ö5Ü5á5ç5÷566+616D6¦6©:; ;';/;4;8;<;e;‹;¥;¬;°;´;¸;¼;À;Ä;È;<<< <$<Š<•<°<·<¼<À<Ä<á< ===D=H=L=P=T=X=\=`=ª=°=´=¸=¼=>>> >%>X>d>k>{>>ˆ>’>«>³>¸>Ä>É>ß>å>8?=?E?J?R?W?n?s?¢?¨?³?¹?Î?Ô?æ?þ?€80'080>0D0P0g0x0‡0™0¿0Ì0Ú0å0ø01.1p1„1¢1®1Ê1ß1õ1ü1%2+2I2^22–2«2Ù2ã23363]3k3œ3¢3°3É3Ö3å34'4j4v4€4”4¢4¯4´4º455d5©5Œ6¥6Ú6â6ü677W7§7º7ø788.878=8I8N8X8_8g8m8t8y8Š8¦8A;[;h;u;ˆ;’;›;Í;Û;í;<<5$>7>L>j>x>…>•>¶>Â>Ô>â>ñ>???5?B?O?Y?c?k?y?—?´?Ì?ì?<D0Z00õ01`1e11”1›1­1µ1Å1Ö1é12!2w2‰2°2ñ2Z3t3}3²4 4484@4D4L4P4°\ 04080<0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x0|0€0„0ˆ0à2ô2ü23 333$3,343<3D3L3T3\3d3l3t3|3libwww/Library/External/xmlparse.lib0100644000076400001440000006502607153134506017277 0ustar danielusers! / 939786979 0 2346 ` KÞ‚P4à4à9h9h7"7"NN¾¾gÄgÄe†e†;¦;¦..KÄKÄ@2@2^d^dBˆBˆ=Ü=ÜDÒDÒGGIrIrc$c$Y¼Y¼UUWfWfPLPLRªRª`Ê`Ê\\0p0p2¢2¢ R R+Ð+Ð$Ú$Ú"Œ"Œ)~)~'('(::€€__IMPORT_DESCRIPTOR_xmlparse__NULL_IMPORT_DESCRIPTORxmlparse_NULL_THUNK_DATA_XML_ParserCreate__imp__XML_ParserCreate_XML_ParserFree__imp__XML_ParserFree_XML_ParserCreateNS__imp__XML_ParserCreateNS_XML_SetEncoding__imp__XML_SetEncoding_XML_ExternalEntityParserCreate__imp__XML_ExternalEntityParserCreate_XML_UseParserAsHandlerArg__imp__XML_UseParserAsHandlerArg_XML_SetUserData__imp__XML_SetUserData_XML_SetBase__imp__XML_SetBase_XML_GetBase__imp__XML_GetBase_XML_GetSpecifiedAttributeCount__imp__XML_GetSpecifiedAttributeCount_XML_SetElementHandler__imp__XML_SetElementHandler_XML_SetCharacterDataHandler__imp__XML_SetCharacterDataHandler_XML_SetProcessingInstructionHandler__imp__XML_SetProcessingInstructionHandler_XML_SetCommentHandler__imp__XML_SetCommentHandler_XML_SetCdataSectionHandler__imp__XML_SetCdataSectionHandler_XML_SetDefaultHandler__imp__XML_SetDefaultHandler_XML_SetDefaultHandlerExpand__imp__XML_SetDefaultHandlerExpand_XML_SetDoctypeDeclHandler__imp__XML_SetDoctypeDeclHandler_XML_SetUnparsedEntityDeclHandler__imp__XML_SetUnparsedEntityDeclHandler_XML_SetNotationDeclHandler__imp__XML_SetNotationDeclHandler_XML_SetNamespaceDeclHandler__imp__XML_SetNamespaceDeclHandler_XML_SetNotStandaloneHandler__imp__XML_SetNotStandaloneHandler_XML_SetExternalEntityRefHandler__imp__XML_SetExternalEntityRefHandler_XML_SetExternalEntityRefHandlerArg__imp__XML_SetExternalEntityRefHandlerArg_XML_SetUnknownEncodingHandler__imp__XML_SetUnknownEncodingHandler_XML_SetParamEntityParsing__imp__XML_SetParamEntityParsing_XML_Parse__imp__XML_Parse_XML_ParseBuffer__imp__XML_ParseBuffer_XML_GetBuffer__imp__XML_GetBuffer_XML_GetErrorCode__imp__XML_GetErrorCode_XML_GetCurrentByteIndex__imp__XML_GetCurrentByteIndex_XML_GetCurrentByteCount__imp__XML_GetCurrentByteCount_XML_GetCurrentLineNumber__imp__XML_GetCurrentLineNumber_XML_GetCurrentColumnNumber__imp__XML_GetCurrentColumnNumber_XML_DefaultCurrent__imp__XML_DefaultCurrent_XML_ErrorString__imp__XML_ErrorString/ 939786979 0 2356 ` 'Þ‚Pà4h9"7N¾Äg†e¦;.ÄK2@d^ˆBÜ=ÒDGrI$c¼YUfWLPªRÊ`\p0¢2R Ð+Ú$Œ"~)(':€K&' #"%$!   &' #"%$!   _XML_DefaultCurrent_XML_ErrorString_XML_ExternalEntityParserCreate_XML_GetBase_XML_GetBuffer_XML_GetCurrentByteCount_XML_GetCurrentByteIndex_XML_GetCurrentColumnNumber_XML_GetCurrentLineNumber_XML_GetErrorCode_XML_GetSpecifiedAttributeCount_XML_Parse_XML_ParseBuffer_XML_ParserCreate_XML_ParserCreateNS_XML_ParserFree_XML_SetBase_XML_SetCdataSectionHandler_XML_SetCharacterDataHandler_XML_SetCommentHandler_XML_SetDefaultHandler_XML_SetDefaultHandlerExpand_XML_SetDoctypeDeclHandler_XML_SetElementHandler_XML_SetEncoding_XML_SetExternalEntityRefHandler_XML_SetExternalEntityRefHandlerArg_XML_SetNamespaceDeclHandler_XML_SetNotStandaloneHandler_XML_SetNotationDeclHandler_XML_SetParamEntityParsing_XML_SetProcessingInstructionHandler_XML_SetUnknownEncodingHandler_XML_SetUnparsedEntityDeclHandler_XML_SetUserData_XML_UseParserAsHandlerArg__IMPORT_DESCRIPTOR_xmlparse__NULL_IMPORT_DESCRIPTOR__imp__XML_DefaultCurrent__imp__XML_ErrorString__imp__XML_ExternalEntityParserCreate__imp__XML_GetBase__imp__XML_GetBuffer__imp__XML_GetCurrentByteCount__imp__XML_GetCurrentByteIndex__imp__XML_GetCurrentColumnNumber__imp__XML_GetCurrentLineNumber__imp__XML_GetErrorCode__imp__XML_GetSpecifiedAttributeCount__imp__XML_Parse__imp__XML_ParseBuffer__imp__XML_ParserCreate__imp__XML_ParserCreateNS__imp__XML_ParserFree__imp__XML_SetBase__imp__XML_SetCdataSectionHandler__imp__XML_SetCharacterDataHandler__imp__XML_SetCommentHandler__imp__XML_SetDefaultHandler__imp__XML_SetDefaultHandlerExpand__imp__XML_SetDoctypeDeclHandler__imp__XML_SetElementHandler__imp__XML_SetEncoding__imp__XML_SetExternalEntityRefHandler__imp__XML_SetExternalEntityRefHandlerArg__imp__XML_SetNamespaceDeclHandler__imp__XML_SetNotStandaloneHandler__imp__XML_SetNotationDeclHandler__imp__XML_SetParamEntityParsing__imp__XML_SetProcessingInstructionHandler__imp__XML_SetUnknownEncodingHandler__imp__XML_SetUnparsedEntityDeclHandler__imp__XML_SetUserData__imp__XML_UseParserAsHandlerArgxmlparse_NULL_THUNK_DATAxmlparse.dll/ 939786979 0 616 ` Lã8„à .idata$2DX@0À.idata$6vX@ À xmlparse.dll@comp.idèÿÿ.idata$2@Àh.idata$6.idata$4@Àh.idata$5@Àh!:T__IMPORT_DESCRIPTOR_xmlparse__NULL_IMPORT_DESCRIPTORxmlparse_NULL_THUNK_DATAxmlparse.dll/ 939786979 0 145 ` Lã8P.idata$3<@0À@comp.idèÿÿ__NULL_IMPORT_DESCRIPTOR xmlparse.dll/ 939786979 0 174 ` Lã8l.idata$5d@0À.idata$4h@0À@comp.idèÿÿxmlparse_NULL_THUNK_DATAxmlparse.dll/ 939786979 0 521 ` Lã8ö .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_DefaultCurrent@comp.idèÿÿ.text  .idata$5.idata$4.idata$6;__imp__XML_DefaultCurrent__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 514 ` Lã8ò .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_ErrorString@comp.idèÿÿ.text  .idata$5.idata$4.idata$68__imp__XML_ErrorString__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 545 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6"à@ Àÿ%  XML_ExternalEntityParserCreate@comp.idèÿÿ.text  .idata$5.idata$4.idata$6"*G__imp__XML_ExternalEntityParserCreate__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 506 ` Lã8î .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_GetBase@comp.idèÿÿ.text  .idata$5.idata$4.idata$64__imp__XML_GetBase__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 510 ` Lã8ð .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_GetBuffer@comp.idèÿÿ.text  .idata$5.idata$4.idata$66__imp__XML_GetBuffer__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 530 ` Lã8ú .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_GetCurrentByteCount@comp.idèÿÿ.text  .idata$5.idata$4.idata$6#@__imp__XML_GetCurrentByteCount__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 530 ` Lã8ú .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_GetCurrentByteIndex@comp.idèÿÿ.text  .idata$5.idata$4.idata$6#@__imp__XML_GetCurrentByteIndex__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 537 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_GetCurrentColumnNumber@comp.idèÿÿ.text  .idata$5.idata$4.idata$6&C__imp__XML_GetCurrentColumnNumber__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 533 ` Lã8ü .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_GetCurrentLineNumber@comp.idèÿÿ.text  .idata$5.idata$4.idata$6$A__imp__XML_GetCurrentLineNumber__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 517 ` Lã8ô .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%   XML_GetErrorCode@comp.idèÿÿ.text  .idata$5.idata$4.idata$69__imp__XML_GetErrorCode__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 545 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6"à@ Àÿ%   XML_GetSpecifiedAttributeCount@comp.idèÿÿ.text  .idata$5.idata$4.idata$6"*G__imp__XML_GetSpecifiedAttributeCount__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 502 ` Lã8ì .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6 à@ Àÿ%   XML_Parse@comp.idèÿÿ.text  .idata$5.idata$4.idata$6 2__imp__XML_Parse__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 514 ` Lã8ò .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%   XML_ParseBuffer@comp.idèÿÿ.text  .idata$5.idata$4.idata$68__imp__XML_ParseBuffer__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 517 ` Lã8ô .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%   XML_ParserCreate@comp.idèÿÿ.text  .idata$5.idata$4.idata$69__imp__XML_ParserCreate__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 521 ` Lã8ö .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_ParserCreateNS@comp.idèÿÿ.text  .idata$5.idata$4.idata$6;__imp__XML_ParserCreateNS__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 513 ` Lã8ò .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_ParserFree@comp.idèÿÿ.text  .idata$5.idata$4.idata$67__imp__XML_ParserFree__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 506 ` Lã8î .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetBase@comp.idèÿÿ.text  .idata$5.idata$4.idata$64__imp__XML_SetBase__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 537 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetCdataSectionHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6&C__imp__XML_SetCdataSectionHandler__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 538 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetCharacterDataHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6'D__imp__XML_SetCharacterDataHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 526 ` Lã8ø .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetCommentHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6!>__imp__XML_SetCommentHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 526 ` Lã8ø .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetDefaultHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6!>__imp__XML_SetDefaultHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 538 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetDefaultHandlerExpand@comp.idèÿÿ.text  .idata$5.idata$4.idata$6'D__imp__XML_SetDefaultHandlerExpand__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 534 ` Lã8ü .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetDoctypeDeclHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6%B__imp__XML_SetDoctypeDeclHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 526 ` Lã8ø .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetElementHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6!>__imp__XML_SetElementHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 514 ` Lã8ò .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetEncoding@comp.idèÿÿ.text  .idata$5.idata$4.idata$68__imp__XML_SetEncoding__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 546 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6"à@ Àÿ%  XML_SetExternalEntityRefHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6"+H__imp__XML_SetExternalEntityRefHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 553 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6&à@ Àÿ%  XML_SetExternalEntityRefHandlerArg@comp.idèÿÿ.text  .idata$5.idata$4.idata$6&.K__imp__XML_SetExternalEntityRefHandlerArg__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 538 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetNamespaceDeclHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6'D__imp__XML_SetNamespaceDeclHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 538 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetNotStandaloneHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6'D__imp__XML_SetNotStandaloneHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 537 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetNotationDeclHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6&C__imp__XML_SetNotationDeclHandler__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 534 ` Lã8ü .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XML_SetParamEntityParsing@comp.idèÿÿ.text  .idata$5.idata$4.idata$6%B__imp__XML_SetParamEntityParsing__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 554 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6&à@ Àÿ%  XML_SetProcessingInstructionHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6&/L__imp__XML_SetProcessingInstructionHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 542 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6 à@ Àÿ%   XML_SetUnknownEncodingHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6 )F__imp__XML_SetUnknownEncodingHandler__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 549 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6$à@ Àÿ%  !XML_SetUnparsedEntityDeclHandler@comp.idèÿÿ.text  .idata$5.idata$4.idata$6$,I__imp__XML_SetUnparsedEntityDeclHandler__IMPORT_DESCRIPTOR_xmlparse xmlparse.dll/ 939786979 0 514 ` Lã8ò .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  "XML_SetUserData@comp.idèÿÿ.text  .idata$5.idata$4.idata$68__imp__XML_SetUserData__IMPORT_DESCRIPTOR_xmlparsexmlparse.dll/ 939786979 0 534 ` Lã8ü .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  #XML_UseParserAsHandlerArg@comp.idèÿÿ.text  .idata$5.idata$4.idata$6%B__imp__XML_UseParserAsHandlerArg__IMPORT_DESCRIPTOR_xmlparselibwww/Library/External/xmltok.dll0100644000076400001440000024000007152764147016763 0ustar danielusersMZÿÿ¸@Àº´ Í!¸LÍ!This program cannot be run in DOS mode. $uÆÛ1s¨ˆ1s¨ˆ1s¨ˆÙl¢ˆ2s¨ˆÙl¬ˆ0s¨ˆRich1s¨ˆPELã8à! àPð@@0Ø.textðÑà `.rdataY!ð0ð@@.datap  @À.relocü00@B¸ ‹D$Ç0Ç@ Ç@ÃV‹t$ Fõƒøw3ÉŠˆèÿ$Ì‹T$Ç3À^ËD$^ǸËL$3À^ÇËD$‹T$hðP‹D$ ‹HD JQPÿPƒÄ…Àt‹T$3À^Ç ËD$^ÇÐ#¸ËL$VQèƒÄ^ÃkZLVy«¼V‹t$ FõƒøwR3ÉŠˆ€ÿ$p‹T$‹D$hðR‹HD‹T$ JQPÿPƒÄ…Àt‹T$Ç 3À^ËD$^ÇÐ#¸ËL$VQèvƒÄ^ÃJN_‹D$ƒøt)ƒøtƒø)tP‹D$Pè"ƒÄËL$¸ÇàÃ3ÀÃSU‹l$VWEñƒø ‡†3ÉŠˆ¤ÿ$‹T$_^]ÇÀ3À[ËD$_^]ǰ¸[Ë|$ ‹\$‹t$$h¸ðWSVÿVƒÄ…Àt‹L$_^]Ç@3À[Ãh¤ðWSVÿVƒÄ…Àt‹T$Ç_^]3À[ËD$UPè[ƒÄ_^][ÃIs(z‹L$Aõƒøw"3ÒŠüÿ$•ð3ÀËD$ÇÐ#¸ÃQ‹L$Qè÷ƒÄÃIËÎÞ‹D$ƒøt$ƒøtP‹D$Pè·ƒÄËL$¸Ç@Ã3ÀËD$ƒøt$ƒøtP‹D$P臃ÄËL$¸ÇpÃ3ÀËL$‹Áƒèt#ƒèt!ƒèt‹D$QPèPƒÄËL$ÇÀ3ÀËT$¸Ç°ÃSU‹l$VWEõƒø‡Ú3ÉŠˆØÿ$Ä‹t$$‹\$‹|$ h8ð‹VDWSPVÿVƒÄ…Àt‹L$_^]Ç03À[ËVDhðWSPVÿVƒÄ…Àt‹L$_^]Ç@3À[ËVDhðWSPVÿVƒÄ…Àt‹L$_^]Ç3À[ËVDhðWSPVÿVƒÄ…Àt,‹L$_^]ÇÐ3À[Ã_^]¸3[ËT$Çð_^]3À[ËD$UPè'ƒÄ_^][ÃI§ã“®‹L$‹Áƒèt$ƒèt‹D$QPèÕƒÄËL$¸Ç°Ã3ÀËD$ƒøt#ƒøt!ƒøtP‹D$Pè’ƒÄËL$Çp3ÀËT$¸Ç ËD$ƒøt$ƒøtP‹D$PèWƒÄËL$¸ÇàÃ3ÀÃSU‹l$VƒýWtFƒýtƒýuf‹D$_^]Ç#¸ [Ë|$ ‹\$‹t$$h¸ðWSVÿVƒÄ…Àt‹L$Ç`_^]3À[Ãh¤ðWSVÿVƒÄ…Àt‹T$_^]Ç03À[ËD$UPè¸ ƒÄ_^][ËD$ƒøt$ƒøtP‹D$Pè— ƒÄËL$¸ Ç`Ã3ÀËD$ƒøt$ƒøtP‹D$Pèg ƒÄËL$¸ ÇÃ3ÀÃV‹t$ ‹Æƒèt[ƒèt?Hu,‹D$‹L$htðP‹D$ QPÿPƒÄ…Àt‹T$3À^ǰËD$VPè ƒÄ^ËL$‹A …À¸Àu¸‰3À^ÃV‹t$ Nƒù&wC‹D$3ÒŠ‘ˆÿ$•p‹D$^Ç "3ÀËH…ÉtI‰H3À^ËH…ÉtõVPè• ƒÄ^ËL$‹T$‹D$Q‹L$ RPVQèVüÿÿƒÄ^Ã=9D .P‹D$ƒøt$ƒøtP‹D$Pè ƒÄËL$¸ Ç#Ã3ÀÃSU‹l$VƒýWtFƒýtƒýuf‹D$_^]Ç#¸ [Ë|$ ‹\$‹t$$h¸ðWSVÿVƒÄ…Àt‹L$Ç _^]3À[Ãh¤ðWSVÿVƒÄ…Àt‹T$_^]Çp3À[ËD$UPèx ƒÄ_^][ËD$ƒøt$ƒøtP‹D$PèW ƒÄËL$¸ Ç Ã3ÀËD$ƒøt$ƒøtP‹D$Pè' ƒÄËL$¸ Ç#Ã3ÀËD$ƒøt$ƒøtP‹D$Pè÷ ƒÄËL$¸ ÇÃ3ÀÃSU‹l$VƒýWt-ƒýuR‹|$ ‹\$‹t$$h¸ðWSVÿVƒÄ…Àt‹D$ǰ_^]3À[Ãh¤ðWSVÿVƒÄ…Àt‹L$_^]Ç€3À[ËT$URèq ƒÄ_^][ËD$ƒøt$ƒøtP‹D$PèG ƒÄËL$¸ÇàÃ3ÀËD$ƒøt$ƒøtP‹D$Pè ƒÄËL$¸Ç#Ã3ÀËL$‹ÁƒètFƒèt$ƒè t‹D$QPèà ƒÄËL$¸Ç#ËL$‹A …À¸Àu¸‰¸Ã3ÀËD$ƒøt)ƒøtƒø)tP‹D$Pè‚ ƒÄËL$¸Ç€Ã3ÀËL$Añƒøw93ÒŠäÿ$•Ô‹L$‹A …À¸Àu¸‰3ÀËD$ǸÃQ‹L$Qè ƒÄò›µÅQ‹D$ SUVƒøWtƒøtƒø…Ž‹D$ÇÀ_^]3À[YË|$(‹\$$‹l$ ÇD$¾ ‹QSUWÿWƒÄ…Àu8‹T$ƒÆBþ ‰T$|ÜhðSUWÿWƒÄ…Àt)‹L$_^]Çp3À[YËT$‹D$_^]ǃÀ[YËD$‹T$PRè+ƒÄ_^][YËL$Añƒøw"3ÒŠ ÿ$•3ÀËD$Ç0¸ÃQ‹L$QèçƒÄÃIÛÞî‹D$ƒøt0ƒøt!ƒøtP‹D$Pè’ƒÄËL$3ÀÇËT$ÇÀ3ÀËD$ƒøtƒøtP‹D$PèWƒÄËL$Ç 3ÀËD$ƒøt$ƒøtP‹D$Pè'ƒÄËL$¸ÇÐÃ3ÀËD$ƒøt0ƒøt!ƒøtP‹D$PèòƒÄËL$3ÀÇËT$Ç 3ÀÃSU‹l$VƒýW„¥ƒýtƒý…ž‹D$_^]Ç€¸[Ët$$‹\$‹|$ hdð‹NDWËQVÿVƒÄ…Àt‹T$_^]Ç€¸[ËFDh¬ðÃWPVÿVƒÄ…Àt‹L$_^]Ç€¸[ËVDh@ðÓWRVÿVƒÄ…Àt‹D$Çà_^]3À[ËL$UQèƒÄ_^][ËD$ƒøt$ƒøtP‹D$PèçƒÄËL$¸ Ç€Ã3ÀËD$ƒøt)ƒøtƒø)tP‹D$P貃ÄËL$¸!ÇPÃ3ÀÃSU‹l$VƒýW„ƒýt ƒýus‹D$_^]ÇÇ@¸%[Ë|$ ‹\$‹t$$h$ðWSVÿVƒÄ…Àt‹D$_^]Ç#¸#[ÃhðWSVÿVƒÄ…Àt‹L$_^]Ç#¸"[ËT$URè÷ƒÄ_^][Ã_^]3À[ÃV‹t$ Fñƒø‡£3ÉŠˆäÿ$Ä3À^ËT$‹D$hœðR‹HD‹T$ÊQPÿPƒÄ…Àtm‹T$¸$^Ç ËD$^Ç@Çð ¸%ËD$^ǰ!¸,ËL$¸.^ǰ!ËT$¸-^ǰ!ËD$^ǰ!¸/ËL$VQè!ƒÄ^à p$X’£´‹L$Añƒøw,3ÒŠX ÿ$•H ‹D$Ç#¸'ËL$Çp 3ÀËT$QRèƒÄÃ5 +  8 ‹D$ƒøt)ƒøtƒø)tP‹D$PèRƒÄËL$¸,ǰ Ã3ÀËD$ƒøt3ƒøt$ƒø$tP‹D$PèƒÄËL$¸'Ç#ËT$Çp 3ÀËL$Añƒøwc3ÒŠŒ!ÿ$•p!3ÀËD$‹HA‰H¸%ËD$ǰ!¸,ËL$¸.ǰ!ËT$¸-ǰ!ËD$ǰ!¸/ÃQ‹L$QèvƒÄËÿ !!!/!?!O!_!‹L$Añƒø‡–3ÒŠˆ"ÿ$•h"3ÀËD$‹HI‰HuÇ#¸&ËD$‹HI‰HuÇ#¸'ËD$‹HI‰HuÇ#¸(ËD$‹HI‰HuÇ#¸)ËD$Çð ¸+ËL$¸*Çð ËT$QRèƒÄÃIÏ!F"Ò!"ë!"6"V"SU‹l$VƒýWt-ƒýuR‹|$ ‹\$‹t$$hlðWSVÿVƒÄ…Àt‹D$Ç #_^]3À[Ãh\ðWSVÿVƒÄ…Àt‹L$_^]Ç`#3À[ËT$URèуÄ_^][ËD$ƒøt%ƒøtP‹D$P觃ÄËD$‹HÇA‰H3ÀËD$ƒøt$ƒøtP‹D$PègƒÄËL$¸1ÇÃ3ÀËL$‹Áƒèt+ƒèt‹D$QPè5ƒÄËL$‹A …À¸Àu¸‰3ÀÃ3ÀËD$‹H …Éu ƒ|$u¸2ÃÇÐ#ƒÈÿËD$3ÉÇ0$‰H ‰HËD$‹L$ƒù Çu¸0ËT$R‹T$R‹T$RQPè¡òÿÿƒÄËL$3Ò3ÀSŠQŠ‹Ê‹ÐÁêƒâ3ÛƒàŠšÀö‹ÑÁꘃâƒá[BºÓâ‹…Àð#ÂËT$3É3ÀSŠJŠBŠV‹ñ‹Èƒâ3ÛÁéÁâƒáƒàŠœ Àö‹Îƒá˜‹ÆÁèƒà¾ÓæP‹•Àð#Æ^[ËL$3Ò3ÀSŠQŠ‹Ê‹ÐÁêƒâ3ÛƒàŠšÀõ‹ÑÁꘃâƒá[BºÓâ‹…Àð#ÂËT$3É3ÀSŠJŠBŠV‹ñ‹Èƒâ3ÛÁéÁâƒáƒàŠœ Àõ‹Îƒá˜‹ÆÁèƒà¾ÓæP‹•Àð#Æ^[ËD$Š€ùíu Š@ÁèƒàÀùïu€x¿uŠ@<¿t<¾u¸Ã3ÀËD$€8ôu ö@0t¸Ã3ÀÃSU‹l$V‹t$W;õu _^]¸üÿÿÿ[Ë\$3ÀŠ3ÉŠLL‹Áƒø ‡ÿ$…((F;õu_^]ƒÈÿ[À>]…F;õu_^]ƒÈÿ[À>>tNéè‹T$ F_¸(‰2^][ÃF;õu_^]ƒÈÿ[Ã3ÀŠ€|L uF‹L$ _¸‰1^][ËT$ F_¸‰2^][ËÅ+ƃø} _^]¸þÿÿÿ[ÃVSÿ“dƒÄ…Àt ‹L$ _3À‰1^][ÃÆëi‹Õ+Öƒú} _^]¸þÿÿÿ[ÃVSÿ“hƒÄ…Àt ‹D$ _‰0^]3À[ÃÆë5‹Í+΃ù} _^]¸þÿÿÿ[ÃVSÿ“lƒÄ…Àt ‹T$ _3À‰2^][ÃÆëF;õtt‹ý+þ3É3ÀŠŠDLƒø w[ÿ$…T(ƒÿ|uVSÿ“dƒÄ…ÀufƒÆƒïë:ƒÿ|9VSÿ“hƒÄ…Àu*ƒÆƒïëƒÿ|-VSÿ“lƒÄ…ÀuƒÆƒïëFO;õu‹D$ _‰0^]¸[ËL$ _¸‰1^][ËT$ _¸‰2^][Ã9'9'''j&ã&'K'9'©&Ò&((ò'ò'(ž'º'Ö'(((SUV‹t$W‹|$;÷u _^]¸üÿÿÿ[ËL$3ÀŠ3ÒŠTL‹Âƒø ‡Nÿ$… +‹D$ FPWVQ踃Ä_^][ËT$ FRWVQè’ƒÄ_^][ÃF;÷u _^]¸ýÿÿÿ[Ã3ÀŠ€|L uF‹L$ _¸‰1^][ËT$ F_¸‰2^][ÃF;÷u _^]¸ûÿÿÿ[À>]…ÈF;÷u _^]¸ûÿÿÿ[À>>„œN骋×+Öƒú} _^]¸þÿÿÿ[ÃVQÿ‘dƒÄ…Àt ‹D$ _‰0^]3À[ÃÆëv‹×+Öƒú} _^]¸þÿÿÿ[ÃVQÿ‘hƒÄ…Àt ‹D$ _‰0^]3À[ÃÆëB‹×+Öƒú} _^]¸þÿÿÿ[ÃVQÿ‘lƒÄ…Àt ‹D$ _‰0^]3À[ÃÆë‹L$ _3À‰1^][ÃF;÷„Án^+þ‹D$3ÒŠ3ÉŠLLƒù ‡”ÿ$8+ƒÿŒ¢VPÿdƒÄ…À…ƒÆƒïƒÃƒÅëgƒÿŒ˜VPÿhƒÄ…À……ƒÆƒïƒÃƒÅë=ƒÿ|BVPÿlƒÄ…Àu3ƒÆƒïƒÃƒÅë‹D$;ØtM€;]u ;ètD€}>t.FOCE;t$…Gÿÿÿ‹T$ _¸‰2^][ËD$ _‰0^]¸[ÃÆ‹D$ _‰0^]3À[ËL$ _¸‰1^][Ãô)ô)º(Ð(")X)Œ)À)ô)æ()û*û*û*û*¦*0*Z*„*û*û*û*SU‹l$V‹t$W;õu_^]ƒÈÿ[Ë\$3ÀŠ3ÉŠLL‹ÁƒÀûƒø‡m3ÒŠ<-ÿ$• -Fé‘‹Í+΃ù} _^]¸þÿÿÿ[ÃVSÿ“XƒÄ…Àu ‹T$ _3À‰2^][ÃÆë]‹Å+ƃø} _^]¸þÿÿÿ[ÃVSÿ“\ƒÄ…À„þƒÆë2‹Õ+Öƒú} _^]¸þÿÿÿ[ÃVSÿ“`ƒÄ…Àu ‹D$ _‰0^]3À[ÃÆ;õ„.ÿÿÿ‹ý+þ3É3ÀŠŠDLƒÀûƒø‡oÿÿÿ3ÒŠt-ÿ$•X-FOë^ƒÿ|VSÿ“LƒÄ…Àt~ƒÆƒïëBƒÿ|VSÿ“PƒÄ…À„(ÿÿÿƒÆƒïë"ƒÿŒ]ÿÿÿVSÿ“TƒÄ…À„cÿÿÿƒÆƒï;õ„›þÿÿélÿÿÿ‹L$ F_¸ ‰1^][ËD$ FPUVS臃Ä_^][ËL$ _3À‰1^][Ëÿ¹+í+,û,³+:,-I,›,»,ê,{,:,Û+‹D$V‹t$;ÆtYŠ€ùxu‹L$‹T$Q@VPRèjƒÄ^ËT$áÿSŠ\L€û[t ‹L$^‰3ÀÃ@;Æt3ÉŠŠLL€ùt€ùu @;ÆuéƒÈÿ^ËT$^‰3ÀËL$@^‰¸ ËL$V‹t$;Ît2‹T$3ÀŠŠDL<r'<w#A;Ît3ÀŠŠDL<t<v<w A;ÎuçƒÈÿ^ËT$3À^‰ ËD$A^‰¸ ÃSU‹l$V‹t$W;õu_^]ƒÈÿ[Ë\$3ÀŠ3ÉŠLL‹ÁƒÀûƒø‡®3ÒŠ”2ÿ$•p2Fé‹Í+΃ù} _^]¸þÿÿÿ[ÃVSÿ“XƒÄ…Àu ‹T$ _‰2^][ÃÆë]‹Å+ƃø} _^]¸þÿÿÿ[ÃVSÿ“\ƒÄ…À„AƒÆë2‹Õ+Öƒú} _^]¸þÿÿÿ[ÃVSÿ“`ƒÄ…Àu ‹D$ _‰0^]3À[ÃÆ;õÇD$„V‹ý+þ3É3ÀŠŠDLƒÀûƒø‡3ÒŠØ2ÿ$•°2FOéƒÿŒÉVSÿ“LƒÄ…À„®ƒÆƒïé÷ƒÿŒ¢VSÿ“PƒÄ…À„"ƒÆƒïéЃÿŒ{VSÿ“TƒÄ…À„é©‹D$…À…OFO;õÇD$„™3À3ÉŠŠLL‹ÁƒÀûƒø‡F3ÒŠ 3ÿ$•ô2ƒÿŒVSÿ“XƒÄ…À„ƒÆƒïëFƒÿŒñVSÿ“\ƒÄ…À„փƃïë"ƒÿŒÍVSÿ“`ƒÄ…À„MƒÆƒï;õ„é©þÿÿF;õ„ò3É3ÀŠŠDLƒÀûƒø‡3ÒŠL3ÿ$•(3F;õuÖ_^]ƒÈÿ[ÃFé‹Í+΃ù} _^]¸þÿÿÿ[ÃVSÿ“XƒÄ…Àu ‹T$ _‰2^][ÃÆë]‹Å+ƃø} _^]¸þÿÿÿ[ÃVSÿ“\ƒÄ…À„ƒÆë2‹Õ+Öƒú} _^]¸þÿÿÿ[ÃVSÿ“`ƒÄ…Àu ‹D$ _‰0^]3À[ÃÆ‹L$ QUVSè  ƒÄ_^][ËD$ F_‰0^]¸[ÃF;õu_^]ƒÈÿ[À>>…“‹T$ F_¸‰2^][ÃF;õu_^]ƒÈÿ[Ã3ÉŠŠDL<t'<t ‹T$ _3À‰2^][ËD$ FPUVSèXƒÄ_^][ËL$ FQUVSèRƒÄ_^][ËT$ FRUVSèlƒÄ_^][ËD$ FPUVSèvƒÄ_^][ËL$ _3À‰1^][ÃÉ.û.&/62à1L2Ã.ƒ1b2I˜/¿/æ/Ã0¨1¹1‘/0ƒ1ƒ1    IL0p0”0‘/ý1ƒ1I161a1ñ0¨1¹1þ0ƒ1ý1SU‹l$V‹t$W;õ„¬€>-t ‹D$ _‰0^]3À[ÃF;õ„‘‹\$‹ý+þ3É3ÀŠŠDLƒøwp3ÒŠ4ÿ$•x4ƒÿ|nVSÿ“dƒÄ…Àu°ƒÆƒïëGƒÿ|RVSÿ“hƒÄ…ÀudƒÆƒïë+ƒÿ|6VSÿ“lƒÄ…Àu1ƒÆƒïëFO;õt€>-t+ëFO;õ…wÿÿÿ_^]ƒÈÿ[Ã_^]¸þÿÿÿ[ËT$ _3À‰2^][ÃF;õtÜ€>>t ‹L$ _3À‰1^][ËT$ F_¸ ‰2^][É3Å3á3ý34&4QSU‹l$V‹t$W;õ‰t$u _^]ƒÈÿ[YË\$3ÀŠ3ÉŠLL‹ÁƒÀûƒø‡}3ÒŠ7ÿ$•x7Fé–‹Í+΃ù} _^]¸þÿÿÿ[YÃVSÿ“XƒÄ…Àu‹T$$_3À‰2^][YÃÆë`‹Å+ƃø} _^]¸þÿÿÿ[YÃVSÿ“\ƒÄ…À„ ƒÆë4‹Õ+Öƒú} _^]¸þÿÿÿ[YÃVSÿ“`ƒÄ…Àu‹D$$_‰0^]3À[YÃÆ;õ„§‹ý+þ3É3ÀŠŠDLƒÀûƒø‡š3ÒŠÌ7ÿ$•¬7FOëbƒÿ|›VSÿ“LƒÄ…À„…ƒÆƒïëBƒÿŒwÿÿÿVSÿ“PƒÄ…À„ÿÿÿƒÆƒïëƒÿŒSÿÿÿVSÿ“TƒÄ…Àt+ƒÆƒï;õ„éhÿÿÿ‹T$L$QVRSèÆƒÄ…Àu‹D$$_‰0^]3À[YÃF;õ„Ü‹ý+þ3É3ÀŠŠDLƒø‡„3ÒŠ8ÿ$•è7ƒÿŒÓþÿÿVSÿ“dƒÄ…Àu«ƒÆƒïëWƒÿŒ³þÿÿVSÿ“hƒÄ…À…ƒÆƒïë3ƒÿŒþÿÿVSÿ“lƒÄ…À…4þÿÿƒÆƒïëFO;õtH€>>tëFO;õ…_ÿÿÿ_^]ƒÈÿ[YËL$$‹D$F_‰1^][YËD$T$RVPSèØƒÄ…Àt(F;õu _^]ƒÈÿ[YÀ>>…ûþÿÿ‹T$$‹D$F_‰2^][YËL$$_3À‰1^][YÃIÿ455a5ù4Q6g7IÊ5ê5696'7Æ5Q6Q6IQ6Ž6®6Ò6ö67‹L$ ‹D$V‹t$+È3ÒƒùÇ uKŠ€ùXt €ùxt ¸^úŠH@€ùMt €ùmt ¸^úŠ@3ÒŠ,;ÿ$• ;F;õuÚ_^]ƒÈÿ[ËD$ F_‰0^]¸[ËT$ F_¸‰2^][ËL$ _3À‰1^][Ã9M9x99š9£:I×9÷9:J:’:;:š9š9It::£:‹D$SU‹l$3ÛV;ÅW„Z‹t$3É3ÒŠŠT1L‹ÊƒÁûƒù‡þ3ÒŠ‘Ü?ÿ$•¸?‹Í+ȃùŒ¬PVÿ–Lé“‹Õ+ЃúŒ’PVÿ–P饋Í+ȃùŒxPVÿ–TƒÄ…À„%éÙ…Û…)@»;ʼnD$„¼3Ò3ÉŠŠL2LƒÁûƒù‡3ÒŠ‘@ÿ$•ø?‹Í+ȃùŒPVÿ–XƒÄ…À„Ÿ‹D$ƒÀéu‹Õ+ЃúŒèPVÿ–\ƒÄ…À„„‹D$ƒÀéI‹Í+ȃùŒ¼PVÿ–`ƒÄ…À„ié@;ʼnD$„ 3Ò3ÉŠŠL2Lƒùtƒù Œµƒù ~Öƒù…§ëË3Û@;ʼnD$„Ö3É3ÒŠŠT1L‹úƒÿ tƒÿ tƒÿ Œƒÿ ~σÿ…ëÄ@‰D$;Å„š3É3ÒŠŠT1L‹Ê;Ï„¬ƒùwÚÿ$,@‹Í+ȃùŒ÷PVÿ–dƒÄ…À…“‹D$ƒÀë«‹Õ+ЃúŒÎPVÿ–hƒÄ…À…{‹D$ƒÀë‚‹Í+ȃùŒ¥PVÿ–lƒÄ…À…0‹D$ƒÀéVÿÿÿT$@RUPVè®íÿÿƒÄ…ÀŽÒ‹D$é8ÿÿÿ@;ʼnD$„Í3É3ÒŠŠT1L‹ÊƒÁ÷ƒù ‡Z3ÒŠ‘`@ÿ$•P@@;ʼnD$„™3É3ÒŠŠT1L‹ÊƒÁûƒù‡&3ÒŠ‘”@ÿ$•p@@ëy‹Í+ȃùŒìPVÿ–XƒÄ…À„·‹D$ƒÀëP‹Õ+ЃúŒÃPVÿ–\ƒÄ…À„Ÿ‹D$ƒÀë'‹Í+ȃùŒšPVÿ–`ƒÄ…À„‘‹D$ƒÀ;ʼnD$„êéüÿÿ‹T$ _^]‰3À[ËD$ ‹L$_^‰]3À[ËT$ ‹D$_^‰]3À[ËL$ ‹T$_^]‰3À[ËL$ _^]‰3À[ËD$ ‹L$_^‰]3À[ËT$ ‹D$_^‰]3À[Ã_^]¸þÿÿÿ[ËL$ ‹T$_^]‰3À[ËL$ _^]‰3À[Ã@;ʼnD$tE€8>t ‹T$ _^]‰3À[ËL$ @_^‰]¸[ËT$ @_^‰]¸[Ãu‹L$ ‹T$_^]‰[ÃÈÿ_^][Ã;›;µ;–<Ë<>>Ú;Ë>p?I<E<q<>>Ë> ?IË>Ë>U?´= =6=_=ˆ=Ë> >Ž?b?U?IA>j>“> >Ž?b?>>p?U?SUV‹t$W‹|$;÷u _^]¸üÿÿÿ[Ë\$3ÀŠ3ÉŠLL‹ÁƒÀþƒø"‡3ÒŠXFÿ$•F‹D$ FPWVSj èÛ ƒÄ_^][ËL$ FQWVSj èà ƒÄ_^][ÃF;÷u_^]ƒÈÿ[Ã3Ò3ÀŠŠDLƒÀûƒø‡o3ÉŠˆŒFÿ$|F‹T$ FRWVSèûƒÄ_^][ËD$ FPWVSè5óÿÿƒÄ_^][ËL$ N_¸‰1^][ÃF;Çu _^]¸ñÿÿÿ[ÃF;÷t&N3Ò3ÀŠŠDLƒè t Ht ƒè uë;ÏtFA;÷uÝ‹D$ _‰0^]¸[ËL$ _¸‰1^][ËT$ FRWVS貃Ä_^][ËD$ F_‰0^]¸&[ËL$ F_¸‰1^][ÃF;÷u _^]¸æÿÿÿ[À>]u'F;Çu_^]ƒÈÿ[À8>u‹T$ ƒÆ_¸"‰2^][ËD$ _‰0^]¸[ËL$ F_¸‰1^][ÃF;÷u _^]¸èÿÿÿ[Ã3Ò3ÀŠŠDLƒÀ÷ƒø‡ë3ÉŠˆ¼Fÿ$¨F‹T$ F_¸$‰2^][ËD$ F_‰0^]¸#[ËL$ F_¸%‰1^][ËT$ _¸‰2^][ËL$ F_¸‰1^][ËT$ F_¸‰2^][ËD$ FPWVS襃Ä_^][ËÏ+΃ù} _^]¸þÿÿÿ[ÃVSÿ“XƒÄ…Àt ƒÆ½é¿VSÿ“LƒÄ…À„BƒÆ½韋Ç+ƃø} _^]¸þÿÿÿ[ÃVSÿ“\ƒÄ…Àt ƒÆ½ësVSÿ“PƒÄ…À„3ƒÆ½ëV‹×+Öƒú} _^]¸þÿÿÿ[ÃVSÿ“`ƒÄ…Àt ƒÆ½ë*VSÿ“TƒÄ…À„ŠƒÆ½ë ½ë½F;÷„‹L$‹ù+þ3Ò3ÀŠŠDLƒÀûƒø‡M3ÒŠGÿ$•ØFFOë}ƒÿŒqÿÿÿVSÿ“LƒÄ…À„~ƒÆƒïëYƒÿŒMÿÿÿVSÿ“PƒÄ…À„ƒÆƒïë5ƒÿŒ)ÿÿÿVSÿ“TƒÄ…À„փƃïëFOƒýtƒý)u½‹L$;ñ„éIÿÿÿ;ñ„Sýÿÿ3À3ÉŠ½)ŠLL‹ÁƒÀûƒøwÉ3ÒŠƒÿ|†VSÿ“PƒÄ…À„$ÿÿÿƒÆƒïëƒÿŒbÿÿÿVSÿ“TƒÄ…Àt)ƒÆƒï;õtépÿÿÿ‹L$ _¸‰1^][Ã_^]¸ìÿÿÿ[ËD$ _‰0^]3À[ÃIKMKKK`L`LIßKÿKLFLÛK`L;K‹L$SUV‹t$W;ñ„š‹\$‹l$‹ù+þ3À3ÒŠŠTL‹Âƒø wo3ÒŠ Nÿ$•Nƒÿ|~VSÿ“dƒÄ…À…‚ƒÆƒïëBƒÿ|^VSÿ“hƒÄ…ÀuBƒÆƒïë&ƒÿ|BVSÿ“lƒÄ…Àu=ƒÆƒïë FO;ÅtIëFO‹L$ ;ñ…rÿÿÿ_^]ƒÈÿ[ËL$$_3À‰1^][Ã_^]¸þÿÿÿ[ËT$$_3À‰2^][ËD$$‰0_^]3À[Ã;ñu _^]¸åÿÿÿ[ËL$$3Ò3À‰1ŠŠDLƒÀ÷ƒøwÓ3ÉŠˆ8Nÿ$0N_^]¸[ËÿºM M@M\MxM€M‹ÿüMÀM‹D$U‹l$V;ÅWu _^¸üÿÿÿ]Ët$‹ø3É3ÒŠŠT1L‹ÊƒÁþƒùw3ÒŠ‘dOÿ$•@OƒÀë ƒÀëƒÀë@;ÅuÉ‹L$_^]‰¸Ã;Çuv‹L$@QUPVèªÜÿÿƒÄ_^]ËL$_^]‰3ÀÃ;ÇuÈ‹T$@_^‰¸]Ã;Çu=@;Åu _^¸ýÿÿÿ]Ã3ÒŠ€|2L u@‹L$_^]‰¸Ã;Çu‹L$@_^‰¸']ËT$_^]‰¸ÃIÍN´N‘N–N›NíNÙNO N‹D$UVW‹|$;Çu _^¸üÿÿÿ]Ët$‹è3É3ÒŠŠT1L‹ÊƒÁýƒùw3ÒŠ‘ˆPÿ$•hPƒÀë ƒÀëƒÀë@;ÇuÉ‹T$_^]‰¸Ã;Åuí‹L$@QWPVèzÛÿÿƒÄ_^]Ã;ÅuÔ‹L$@QWPVè¡øÿÿƒÄ_^]Ã;Åu»‹L$@_^‰¸]Ã;Åu)@;Çu _^¸ýÿÿÿ]Ã3ÉŠ€|1L u@‹T$_^]‰¸ËL$_^]‰¸ËÿäOÁOÆOËO*PPýOÐOQS‹\$UV‹t$W;óÇD$„.‹l$‹û+þ3À3ÉŠŠL(L‹Áƒø‡‘ÿ$…RƒÿŒÉVUÿ•dƒÄ…À…σƃïëhƒÿŒ¥VUÿ•hƒÄ…À…„ƒÆƒïëDƒÿŒVUÿ•lƒÄ…Àu}ƒÆƒïë$FO;󄘀>!uFO;󄉀>[uÿD$FO;ó…Pÿÿÿ_^]ƒÈÿ[YÃFO;ótg€>]uäFO;ót\€>>uÙ‹D$FO…ÀtÆF ¹‹D$ G@G‰D$ @‰D$ 릅Éu‹L$$‹D$;Á}‰>ÆF ¹‹D$ ƒÇƒÀG‰D$ @‰D$ érÿÿÿ…Éu‹T$$‹D$;Â}‰>ÆF ¹‹D$ ƒÇƒÀG‰D$ @‰D$ é>ÿÿÿ…É…|‹D$$‹L$;È}‰>ÆF ‹D$ G@¹‰D$ éÿÿÿƒùt/‹L$$‹D$;Á}‹T$ ‰V‹D$ G@¹ÇD$ ‰D$ éÜþÿÿƒ|$ ë9ƒùt/‹L$$‹D$;Á}‹T$ ‰V‹D$ G@¹ÇD$ ‰D$ é¡þÿÿƒ|$ …Ü‹D$‹T$$3É;Â}‰~‹T$‹D$ BƒÆG@‰T$‰D$ éjþÿÿƒùu‹D$ 3ÉG@‰D$ éTþÿÿƒù…‘‹T$$‹\$;ÚŠV „Òtz;~t#< u‹D$ Š€ú tâÿ3ÀŠD*L‹T$;ÂuR‹D$ G@ÆF ‰D$ éùýÿÿƒùu‹D$ 3ÉG@‰D$ éãýÿÿƒùu$‹T$$‹D$;Â}‹D$ G@ÆF ‰D$ é¿ýÿÿƒùu‹D$ G@‰D$ é«ýÿÿ‹D$_^][ƒÄÃ,U7SdS˜SUKUúS5T TÌSPU     VW‹|$3ÀƒÇŠ€ùxuVŠOG€ù;tA¾ÉqЃþ6w&3ÒŠ–lVÿ$•\VÁà ÆëÁàDÉëÁàD©=}@ŠOG€ù;u¿Pè^zƒÄ_^Àù;tï¾É€DAÐ=}ŠOG€ù;uæPè3zƒÄ_^Ã_ƒÈÿ^ÃIõUüUV V‹L$ ‹D$+ȃéthItKIu~Š€ùat#€ùqurŠH@€ùuuiŠH@€ùou`€xtuZ¸"ÊH@€ùpuKŠH@€ùouB€xsu<¸'À8au1ŠH@€ùmu(€xpu"¸&ÀxtuŠÃ3ÀËD$SU‹l$ Š3Û‹ÑVâÿW‹|$Š\*L‹ÓrûƒþwY3ÒŠ–$Xÿ$•XŠG@:ÊumŠŠG@:ÊucŠŠG@:ÊuYŠŠG@:ÊuOëŠ@G:ÑuEŠ3Û‹ÑâÿŠ\*L‹Órûƒþv§ŠŠ:Ñt*áÿ3ÀŠD)LƒÀûƒøw3ÉŠˆHXÿ$@X_^]3À[Ã_^]¸[ÛW‘W‰W±WÓWIþWX‹T$‹L$VŠ‹t$„Àt;Ît8uŠBAB„Àuï3À;Î^”ÀÃ^3ÀËD$3ÉV‹t$Š3ÒW‹øŠT1L‹ÊƒÁûƒùw33ÒŠ‘Yÿ$•YƒÀë ƒÀëƒÀë@3É3ÒŠŠT1L‹ÊƒÁûƒùvÍ+Ç_^ÃßXäXéXîXY‹D$‹T$3ÉŠŠLL€ù r€ù v€ùu@3ÉŠŠLL€ù sèËD$W‹|$;ÇtO‹L$SUV‹t$ƒÍÿ3Ò3ÛŠŠ\2L‹ÓƒÂûƒúwÿ$•ìYƒÀëƒÀëƒÀë ‹‰iC‰@‹YC;ljYuÂ^][_ËB@;ljt 3ÒŠ€|2L u@‰iëÕI¦Y«Y°Y½YÎYµY‹D$‹T$SU‹‹D$VW‹|$ ‹Ø‹ê+Ù‹7+î;Ý~‹Á+ÆÂ;ÈsŠPÿ€âÀ€ú€uH;Áwð;ÈtŠAˆF;Èuö‹D$‰‰7_^][ËT$‰ ‰7_^][ËT$‹D$SU‹ V‹0W;L$„ ‹l$~;t$$„Š3Û‹ÐâÿŠ\*L‹Óƒê„¢JtlJtf¾Àf‰ƒÆƒÇAé«;|$$„¡ŠQƒàÁàƒâ?ƒÆ ŠQÁàƒâ?ƒÇ ŠQÁàƒâ? Â-‹Ð%ÿÁê €ÎØ€ÌÜf‰Vüf‰GüƒÁëUŠQ$f¾À€â?ƒÆf¾ÒÁà ŠQ€â?ƒÇf¾ÒÁà ƒÁf‰Fþë"ŠQ$f¾À€â?ƒÆf¾ÒÁà ƒÇf‰FþƒÁ;L$… ÿÿÿ‹D$_‰‹L$‰1^][É ‰0_^][ËT$‹D$ _‰ ‰0^][ÃS‹\$UV‹t$W9tI‹l$$‹D$ ‹Š öÁ€t"‹8‹Õ+׃ú|-ŠÑ€á?Àê€ÊÀˆ‹B€É€‰ë‹;Õtˆ ‹B‰‹A;ˉu¿_^][ËD$SV‹t$‹W;Ît)‹|$ ‹L$‹;×t‹f¶f‰‹ƒÂ‰‹C‹Ó‰;Öuß_^[ËD$UVW‹|$‹;Ït$‹l$ ‹L$‹1;õt‹Šˆ‹B‰‹0F‹Ö‰0;×uä_^]ÃQ‹D$SU‹l$VW‹};ø„G‹D$$ŠWŠˆT$$ˆL$‹t$$æÿþÛ‡Ñ3ÛŠž$^ÿ$^€ù€s‹‹t$(;Ö„þéã‹0‹\$(+ÞƒûŒè€Êð鳋(‹T$(+ÕƒúŒØ‹T$ƒæâÿƒÇÁêÁæ ÖB‹Ú€âÁû€Ëð€Êøˆ]‹(ŠÙEÀëÀâ€ã‹õ Ó‰(ˆ‹B€á‰Š_€Éø‹òŠ€ãÀá ËŠÚÀáÀë Ë€â?ˆ‹(E€Ê€‹Í‰(‹l$ˆ‹A‰ë@‹0‹\$(+Þƒû|BŠÚ€âÀë€Ëàˆ‹0F€Êà‰0ŠÙ€á?ÀâÀë Óˆ‹B€É€‰ˆ ‹A‰‹L$ ƒÇ;ù…½þÿÿ‰}_^][YËD$‰8_^][YÃî\]]°]‹T$S‹D$ UV‹t$‹W‹.‹ú+ý‹l$‹Ýƒçþ+Ù;ß~Š]ÿ€ãø€ûØuƒí;Ít&‹>;út ‹3ÛŠyŠf‰‹ƒÃ‰‹8ƒÇ‹Ï‰8;ÍuÚ_^][ÃQ‹D$SU‹l$VW‹};ø„G‹D$$ŠŠOˆT$$ˆL$‹t$$æÿþÛ‡Ñ3ÛŠžô`ÿ$ä`€ù€s‹‹t$(;Ö„þéã‹0‹\$(+ÞƒûŒè€Êð鳋(‹T$(+ÕƒúŒØ‹T$ƒæâÿƒÇÁêÁæ ÖB‹Ú€âÁû€Ëð€Êøˆ]‹(ŠÙEÀëÀâ€ã‹õ Ó‰(ˆ‹B€á‰Š€Éø‹òŠW€ãÀá ËŠÚÀáÀë Ë€â?ˆ‹(E€Ê€‹Í‰(‹l$ˆ‹A‰ë@‹0‹\$(+Þƒû|BŠÚ€âÀë€Ëàˆ‹0F€Êà‰0ŠÙ€á?ÀâÀë Óˆ‹B€É€‰ˆ ‹A‰‹L$ ƒÇ;ù…½þÿÿ‰}_^][YËD$‰8_^][Yþ_Ö_ï_€`‹T$S‹D$ UV‹t$‹W‹.‹ú+ý‹l$‹Ýƒçþ+Ù;ß~Š]þ€ãø€ûØuƒÅþ;Ít&‹>;út ‹3ÛŠ9ŠYf‰‹ƒÃ‰‹8ƒÇ‹Ï‰8;ÍuÚ_^][ÃS‹\$UV‹t$W;óu _^]¸üÿÿÿ[ËÃ+ƨtƒàþu_^]ƒÈÿ[Ã0ŠF‹l$„Àu3À3ÉŠŠL(L‹Áë ŠRPèƒÄƒø ‡ ÿ$…PdƒÆ;óu_^]ƒÈÿ[ÊF„À…ë€>]…âƒÆ;óu_^]ƒÈÿ[ÊF„Àu€>>u‹D$ ƒÆ_‰0^]¸([Ãî鬃Æ;óu_^]ƒÈÿ[ÊF„Àu 3É3ÀŠŠD)Lë ŠRP腃ăø uƒÆ‹D$ _‰0^]¸[ËL$ ƒÆ_¸‰1^][ËÓ+Öƒú}G_^]¸þÿÿÿ[ËÃ+ƃø} _^]¸þÿÿÿ[ÃÆë(‹Ë+΃ù} _^]¸þÿÿÿ[ÃÆë‹T$ _3À‰2^][ÃÆ;ó„Š‹û+þŠF„Àu3À3ÉŠŠL(L‹Áë ŠRPèڃăø w ÿ$…|dƒÿ|DƒÆƒï;óuÄ‹L$ _¸‰1^][Ãÿ|5ƒÆƒïë߃ÿ|ƒÆƒïëÒ‹T$ _¸‰2^][ËD$ _‰0^]¸[ËL$ _¸‰1^][Ëÿœcœc©c©c§bYclc„cœccFc.d.dêcêc.dåcdd.d.d.d‹D$%ÿ(ÿÿÿƒø'w*3ÉŠˆeÿ$ôd¸øÊD$<þr<ÿw3ÀøÃÒdØdÞdídSUV‹t$W‹|$;÷u _^]¸üÿÿÿ[ËÇ+ƨtƒàþu_^]ƒÈÿ[ÃƉD$‹øŠF„Àu‹L$3ÀŠ3ÒŠTL‹ÂëŠQPè'ÿÿÿ‹L$ƒÄƒø ‡!ÿ$…¬g‹T$ ƒÆRWVQèƒÄ_^][ËD$ ƒÆPWVQèHƒÄ_^][ÃÆ;÷u _^]¸ýÿÿÿ[ÊF„Àu 3Ò3ÀŠŠD Lë ŠQPè³þÿÿƒÄƒø uƒÆ‹T$ _¸‰2^][ËD$ ƒÆ_‰0^]¸[ÃÆ;÷u _^]¸ûÿÿÿ[ÊF„Àuz€>]uuƒÆ;÷u _^]¸ûÿÿÿ[ÊF„Àu€>>u ‹L$ _3À‰1^][ÃîëF‹×+Öƒú}:_^]¸þÿÿÿ[ËÇ+ƃø} _^]¸þÿÿÿ[ÃÆë‹Ï+΃ù} _^]¸þÿÿÿ[ÃÆëƒÆ;÷„¥n^+þŠF„Àu‹T$3ÀŠ3ÉŠLL‹Áë ŠQPèÁýÿÿƒÄƒø w]ÿ$…Øgƒÿ|wëOƒÿŒŒƒÆƒïƒÃƒÅëDƒÿ|IƒÆƒïƒÃƒÅë1‹D$;ØtcŠN„Éu€;]u;ètSŠF„Àu€}>t6ƒÆƒïƒÃƒÅ;t$…cÿÿÿ‹L$ _¸‰1^][ËT$ _¸‰2^][ÃÆ‹T$ _3À‰2^][ËD$ _‰0^]¸[Ëÿgg e¸e+fwfŠf¢fgÐefšgšgšgšg/gþfggšgšgšgSV‹t$W‹|$;÷u_^ƒÈÿ[ÊF‹\$„Àu3À3ÉŠŠLL‹Áë ŠRPèhüÿÿƒÄƒÀûƒø‡ 3ÉŠˆäiÿ$Èi3Ò3ÉŠVŠ3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$_‰0^3À[ÃÆ;÷„vÿÿÿŠF„ÀuD3É3ÀŠŠDLëD+þƒÿ›_^¸þÿÿÿ[Ã+þƒÿž_^¸þÿÿÿ[Ã+þƒÿ}§_^¸þÿÿÿ[ÊRPè³ûÿÿƒÄƒÀûƒøwq3ÉŠˆjÿ$j3Ò3ÉŠVŠ3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„KÿÿÿƒÆ;÷„ÍþÿÿéRÿÿÿ+þƒÿŒeÿÿÿ‹L$_3À‰1^[Ã+þƒÿŒNÿÿÿ‹T$_3À‰2^[Ã+þƒÿŒ[ÿÿÿ‹D$_‰0^3À[ËL$ƒÆ_¸ ‰1^[ËD$ƒÆPWVS肃Ä_^[ÃI¼hÐhäh®ižhfhbiIWini…iœiGiiyiSV‹t$W‹|$;÷„‘ŠF„Àu"€>xu‹D$‹L$PƒÆWVQèƒÄ_^[ÄÀ‹\$u 3Ò3ÀŠŠDLë ŠQPèúÿÿƒÄƒøt ‹T$_3À‰2^[ÃÆ;÷t2ŠF„Àu3À3ÉŠŠLL‹Áë ŠRPèàùÿÿƒÄƒøtƒøuƒÆ;÷uÎ_^ƒÈÿ[ËD$_‰0^3À[ËL$ƒÆ_¸ ‰1^[ÃS‹\$V‹t$;óWtmŠF‹|$„Àu3À3ÉŠŠL8L‹Áë ŠRPèoùÿÿƒÄƒø|hƒøcƒÆ;ót7ŠF„Àu3À3ÉŠŠL8L‹Áë ŠRPè=ùÿÿƒÄƒøt$ƒø~ƒøƒÆ;óuÉ_^ƒÈÿ[ËD$_‰0^3À[ËL$ƒÆ_¸ ‰1^[ËT$_3À‰2^[ÃSUV‹t$W‹|$;÷u_^]ƒÈÿ[ÊF‹l$„Àu3À3ÉŠŠL(L‹Áë ŠRPè¶øÿÿƒÄƒÀûƒø‡Œ3ÉŠˆÀoÿ$œo3Ò3ÉŠVŠ3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$ _‰0^]3À[ÃÆ3Û;÷„gŠF„Àu!3É3ÀŠŠD)Lë!+þƒÿ_^]¸þÿÿÿ[ÊRPè!øÿÿƒÄƒÀûƒø‡Ž3ÉŠˆpÿ$Üo3Ò3ÉŠVŠ3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„O逅Û…“ƒÆ»;÷„ËŠF„Àu3À3ÉŠŠL(L‹Áë ŠRPè˜÷ÿÿƒÄƒÀûƒø‡3ÉŠˆ8pÿ$ p3Ò3ÉŠVŠ3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðt3ƒÆ;÷„Xéìþÿÿ+þƒÿŒ‹L$ _3À‰1^][Ã+þƒÿŒçþÿÿ‹T$ _3À‰2^][Ã+þƒÿŒÏþÿÿ‹D$ _‰0^]3À[Ã+þƒÿŒ·þÿÿ‹D$ _‰0^]3À[Ã+þƒÿëž+þƒÿ믃Æ;÷„ÚŠF„Àu 3É3ÀŠŠD)Lë ŠRPè©öÿÿƒÄƒÀûƒøwƒ3ÉŠˆxpÿ$TpƒÆ;÷uÃ_^]ƒÈÿ[Ã3Ò3ÉŠVŠ3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$ _‰0^]3À[ËL$ ƒÆQWVUè ƒÄ_^][Ã+þƒÿñþÿÿ_^]¸þÿÿÿ[Ã+þƒÿ‹_^]¸þÿÿÿ[ËD$ ƒÆ_‰0^]¸[ÃÆ;÷u_^]ƒÈÿ[ÊF„À…½þÿÿ€>>…´þÿÿ‹L$ ƒÆ_¸‰1^][ÃÆ;÷u_^]ƒÈÿ[ÊF„Àu 3É3ÀŠŠD)Lë ŠRPè‘õÿÿƒÄƒøt*ƒøt ‹D$ _‰0^]3À[ËL$ ƒÆQWVUèWƒÄ_^][ËT$ ƒÆRWVUè?ƒÄ_^][ËD$ ƒÆPWVUègƒÄ_^][ËL$ ƒÆQWVUè_ƒÄ_^][ÃInql–nioônoQll•mIrmŠm¢màm«n¾nbmâl­l,o    IºmÒmÙmbm6m,oInql–n!n«n¾nin0n•mS‹\$UV‹t$W;ó„ïŠF„À…×€>-…΃Æ;ó„Ћl$‹û+þŠF„Àu3À3ÉŠŠL(L‹Áë ŠRPè·óÿÿƒÄƒøw3ÉŠˆÄqÿ$¬qƒÿ|DƒÆƒï;óu¼_^]ƒÈÿ[Ãÿ|-ƒÆƒïëçƒÿ| ƒÆƒïëڃƃï;ótXŠF„ÀuÉ€>-t ëÂ_^]¸þÿÿÿ[ÃÆ;ót9ŠF„Àu€>>u‹D$ ƒÆ_‰0^]¸ [ËL$ _3À‰1^][ËT$ _3À‰2^][Ã_^]ƒÈÿ[Öqq'q4qAqqS‹\$UV‹t$W;ó‹þu_^]ƒÈÿ[ÊF‹l$„Àu3À3ÉŠŠL(L‹Áë ŠRPè”òÿÿƒÄƒÀûƒø‡'3ÉŠˆŒtÿ$tt3Ò3ÉŠVŠ3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$ _‰0^]3À[ÃÆ;ó„ÅŠF„ÀuG3É3ÀŠŠD)LëG+Þƒûž_^]¸þÿÿÿ[Ã+Þƒû¡_^]¸þÿÿÿ[Ã+Þƒû}¤_^]¸þÿÿÿ[ÊRPèÛñÿÿƒÄƒÀûƒøwZ3ÉŠˆÈtÿ$¨t3Ò3ÉŠVŠ3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„GÿÿÿƒÆ;ó„éOÿÿÿ+ÞƒûŒwÿÿÿ‹L$ _3À‰1^][Ã+ÞƒûŒ_ÿÿÿ‹T$ _3À‰2^][Ã+ÞƒûŒXÿÿÿ‹D$ _‰0^]3À[ÃL$QVWU范ąÀtǃÆ;ó„­‹û+þŠF„Àu3À3ÉŠŠL(L‹Áë ŠRPèøðÿÿƒÄƒøw3ÉŠˆütÿ$ätƒÿŒÙþÿÿƒÆƒï;óu¸_^]ƒÈÿ[ÃÿŒ¾þÿÿƒÆƒïëãƒÿŒ­þÿÿƒÆƒïë҃ƃï;ót-ŠF„ÀuÁ€>>t=ëºL$QVWUè߃Ä…À„ÿÿÿƒÆ;óu_^]ƒÈÿ[ÊF„À…äþÿÿ€>>…Ûþÿÿ‹D$ ƒÆ_‰0‹D$^][ÃI‘r¦r»rsr:rRsI/sGs_sws$tsïr:sIRsÏsêsûs tØs‹L$ ‹D$V‹t$+È3ÒƒùÇ uhŠH„Éua¾ƒùXt ƒùxt ¸^úŠHƒÀ„Éu>¾ƒùMt ƒùmt ¸^úŠHƒÀ„Éu¾ƒøLt ƒølu…Òt3À^ÃÇ ¸^ËD$ ‹L$+ÁSƒø }ƒÈÿ[Ã3ÀŠQ„Òu"ŠŠ˜H:Óu@ƒÁƒø|ä‹T$¸[‰ ËD$[‰3ÀÃSV‹t$W‹|$;÷u_^ƒÈÿ[ÊF‹\$„Àu3À3ÉŠŠLL‹Áë ŠRPèˆîÿÿƒÄƒÀûƒø‡53ÉŠˆxÿ$ìw3Ò3ÉŠVŠ3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àð„öƒÆ;÷t‚ŠF„ÀuP3É3ÀŠŠDLëP+þƒÿ} _^¸þÿÿÿ[ËL$_3À‰1^[Ã+þƒÿž_^¸þÿÿÿ[Ã+þƒÿ¡_^¸þÿÿÿ[ÊRPèÓíÿÿƒÄƒÀûƒøwm3ÉŠˆ@xÿ$ x3Ò3ÉŠVŠ3ÀŠ‚Àö‹ÑÁêƒáºÓâ……ÀðtIƒÆ;÷„ÑþÿÿéJÿÿÿ+þƒÿŒYÿÿÿ‹L$_3À‰1^[Ã+þƒÿŒvÿÿÿ‹T$_3À‰2^[Ã+þƒÿŒ_ÿÿÿ‹D$_‰0^3À[ÃÆ;÷„|þÿÿŠF„Àu 3É3ÀŠŠDLë ŠRPèíÿÿƒÄƒÀ÷ƒø wÂ3ÉŠˆhxÿ$\xƒÆ;÷uÃ_^ƒÈÿ[ËT$ƒÆ_¸‰2^[ËL$ƒÆ_¸‰1^[Ãv¬vÀvvvFvlwI3wJwawxwÙw#w÷vUwI¹wÇwlw‹T$SUVW‹|$3Û;ׄý‹l$ŠB„Àu3À3ÉŠŠL(L‹ÁëŠRPèøëÿÿ‹T$ ƒÄƒÀûƒø‡43ÉŠˆÀ|ÿ$œ|3À3ÉŠBŠ ‹ð3ÀІÀö‹ñÁîƒáƾÓæ…4…Àð„ó飅ۅæƒÂ»;׉T$„fŠB„Àu 3É3ÀŠ ŠD)LëŠRPègëÿÿ‹T$ ƒÄƒÀûƒø‡Ò3ÉŠˆô|ÿ$Ü|3À3ÉŠBŠ ‹ð3ÀІÀõ‹ñÁîƒáƾÓæ…4…Àð„‘éƒÂ;׉T$„âŠB„Àu 3É3ÀŠ ŠD)LëŠRPèãêÿÿ‹T$ ƒÄƒøtƒø Œƒø ~»ƒø…ë°3ÛƒÂ;׉T$„ŠB„Àu3À3ÉŠŠL(L‹ñëŠRPèêÿÿ‹T$ ƒÄ‹ðƒþ tƒþ tƒþ Œñƒþ ~²ƒþ…ã맃‰T$;ׄ7ŠB„Àu3À3ÉŠŠL(L‹ÁëŠRPè6êÿÿ‹T$ ƒÄ;ÆtcƒøwÃÿ$…}‹Ç+ƒøŒÚë­‹Ï+ʃùŒËƒÂëž‹Ç+ƒøŒ¹ƒÂëŒL$ƒÂQWRUè<íÿÿƒÄ…ÀŽ£‹T$élÿÿÿƒÂ;׉T$„œŠB„Àu3À3ÉŠŠL(L‹ÁëŠRPè›éÿÿ‹T$ ƒÄƒÀ÷ƒø ‡×3ÉŠˆD}ÿ$4}ƒÂ;׉T$„MŠB„Àu3À3ÉŠŠL(L‹ÁëŠRPèLéÿÿ‹T$ ƒÄƒÀûƒø‡ˆ3ÉŠˆx}ÿ$T}3À3ÉŠBŠ ‹ð3ÀІÀõ‹ñÁîƒáƾÓæ…4…ÀðtKƒÂ;׉T$„ÐéÒüÿÿ+úƒÿŒ¥‹L$ _^]‰3À[Ã+úƒÿŒ‹D$ _^]‰3À[Ã+úƒÿ|y‹L$ _^]‰3À[Ã+úƒÿ|e‹D$ _^]‰3À[Ã+úƒÿëÖ+úƒÿ|J‹D$ _^]‰3À[ÃÂ;׉T$tMŠB„Àu²€:>u­‹D$ ƒÂ_^‰]¸[ËD$ ƒÂ_^‰]¸[Ã_^]¸þÿÿÿ[Ãu‹L$ ‹T$_^]‰[ÃÈÿ_^][Ã'|È{à{¢yòy´{yÚxÿ{Iø{ | |´{ky.|I.|.|.|ÄzMz‘z z²z.|7{e|;|ÿ{I'|È{à{7{e|;|´{†{ÿ{SUV‹t$W‹|$;÷u _^]¸üÿÿÿ[ËÇ+ƨtƒàþu_^]ƒÈÿ[Ã<0ŠF‹\$„Àu3À3ÉŠŠLL‹Áë ŠRPè¼æÿÿƒÄƒÀþƒø"‡Œ3ÉŠˆÔƒÿ$€ƒ‹T$ ƒÆRWVSj èŒ ƒÄ_^][ËD$ ƒÆPWVSj èr ƒÄ_^][ÃÆ;÷u_^]ƒÈÿ[ÊF„Àu 3É3ÀŠŠDLë ŠRPè?æÿÿƒÄƒÀûƒø‡º3ÉŠˆ„ÿ$øƒ‹T$ ƒÆRWVSèAƒÄ_^][ËD$ ƒÆPWVSè)óÿÿƒÄ_^][ËL$ ƒÆþ_¸‰1^][ÃF;Çu _^]¸ñÿÿÿ[ÃÆ;÷t<ŠF„Àu 3É3ÀŠŠDLë ŠRPèªåÿÿƒÄƒè t Htƒè u ëF;ÇtƒÆ;÷uÄ‹L$ _¸‰1^][ËT$ _¸‰2^][ËD$ ƒÆPWVSè*ƒÄ_^][ËL$ ƒÆ_¸&‰1^][ËT$ ƒÆ_¸‰2^][ÃÆ;÷u _^]¸æÿÿÿ[ÊF„Àu3€>]u.F;Çu_^]ƒÈÿ[ÊN„Éu€8>u‹D$ ƒÆ_‰0^]¸"[ËL$ _¸‰1^][ËT$ ƒÆ_¸‰2^][ÃÆ;÷u _^]¸èÿÿÿ[ÊF„Àu3À3ÉŠŠLL‹Áë ŠRPèäÿÿƒÄƒÀ÷ƒø‡å3ÉŠˆ8„ÿ$$„‹T$ ƒÆ_¸$‰2^][ËD$ ƒÆ_‰0^]¸#[ËL$ ƒÆ_¸%‰1^][ËT$ _¸‰2^][ËL$ ƒÆ_¸‰1^][ËT$ ƒÆ_¸‰2^][ËD$ ƒÆPWVSèâƒÄ_^][Ã+þƒÿ¾_^]¸þÿÿÿ[Ã+þƒÿT_^]¸þÿÿÿ[Ã+þƒÿ_^]¸þÿÿÿ[ýƒÆëb½ƒÆëX3ɺŠN‹é3ÉŠ‹ÁƒáÓâ3ÉŠÀõÁè È…Àðt ƒÆ½ë 3ÉŠÀöÈ……Àð„&ƒÆ½;÷„ýŠF„Àu 3É3ÀŠŠDLë ŠRPèãÿÿƒÄƒÀûƒø‡q3ÉŠˆ€„ÿ$T„3Ò3ÉŠVŠ3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„2ƒÆëƒÆƒýtƒý)u½;÷„térÿÿÿ;÷„™ýÿÿŠF½)„Àu3À3ÉŠŠLL‹Áë ŠRPè~âÿÿƒÄƒÀûƒøw¸3ÉŠˆ¸„ÿ$ „3Ò3ÉŠVŠ3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„¾ƒÆévÿÿÿ+þƒÿŒBþÿÿ‹L$ _3À‰1^][Ã+þƒÿŒ*þÿÿ‹T$ _3À‰2^][Ã+þƒÿŒþÿÿ‹D$ _‰0^]3À[Ã+þƒÿŒúýÿÿ‹D$ _‰0^]3À[Ã+þƒÿëž+þƒÿŒÛýÿÿ‹T$ _3À‰2^][ËL$ _‹Å‰1^][Ãýu ‹D$ _‰0^]3À[ËL$ ƒÆ_¸ ‰1^][Ãýu ‹T$ _3À‰2^][ËD$ ƒÆ_‰0^]¸[Ãý„,ÿÿÿ‹T$ ƒÆ_¸‰2^][Ã_‹Å^]÷Ø[ÃF~„Æ€Û€ð€Ò~ã~›€~,~®€qFßò^ˆ€‚   ¿~§~~:ƒIx€R€?€e€ƒ„‚œ‚´‚ƒZƒãè³5ƒƒƒ      Ì‚ä‚ë‚|‚L‚õSV‹t$W‹|$;÷u_^ƒÈÿ[ÊF‹\$„Àu3À3ÉŠŠLL‹Áë ŠRPè˜ßÿÿƒÄƒÀìƒø‡Úÿ$…†‹D$ƒÆPWVSèbëÿÿƒÄ_^[ËL$ƒÆ_¸!‰1^[ÃÆ;÷tKŠF„Àu 3Ò3ÀŠŠDLë ŠQPè6ßÿÿƒÄƒÀ÷ƒøwp3ÒŠ@†ÿ$•0†ƒÆ;÷uÃ_^ƒÈÿ[ÃF;Çu_^ƒÈÿ[ÊN„Éu 3ÉŠ3ÀŠDLë ŠRQèäÞÿÿƒÄƒÀ÷ƒøw3ÉŠˆ`†ÿ$X†‹D$_‰0^¸[ËL$_3À‰1^[ËT$_3À‰2^[ÃIE…†W…†W…††.…æ…”…¢…õ…‹ÿ†æ…SV‹t$W‹|$;÷u_^ƒÈÿ[ÊF‹\$„Àu3À3ÉŠŠLL‹Áë ŠRPèøÝÿÿƒÄƒÀûƒø‡ 3ÉŠˆLˆÿ$0ˆ3Ò3ÉŠVŠ3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$_‰0^3À[ÃÆ;÷„vÿÿÿŠF„ÀuD3É3ÀŠŠDLëD+þƒÿ›_^¸þÿÿÿ[Ã+þƒÿž_^¸þÿÿÿ[Ã+þƒÿ}§_^¸þÿÿÿ[ÊRPèCÝÿÿƒÄƒÀûƒøwq3ÉŠˆ„ˆÿ$hˆ3Ò3ÉŠVŠ3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„KÿÿÿƒÆ;÷„ÍþÿÿéRÿÿÿ+þƒÿŒeÿÿÿ‹L$_3À‰1^[Ã+þƒÿŒNÿÿÿ‹T$_3À‰2^[Ã+þƒÿŒ[ÿÿÿ‹D$_‰0^3À[ËL$ƒÆ_¸‰1^[ËD$_‰0^¸[ÃI,‡@‡T‡ˆ‡Ö†Ò‡‹ÿLJÞ‡õ‡ ˆ·‡‡‡é‡SV‹t$W‹|$;÷u_^ƒÈÿ[ÊF‹\$„Àu3À3ÉŠŠLL‹Áë ŠRPèØÛÿÿƒÄƒÀûƒø‡53ÉŠˆXŠÿ$@Š3Ò3ÉŠVŠ3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àð„öƒÆ;÷„ŠF„ÀuP3É3ÀŠŠDLëP+þƒÿ} _^¸þÿÿÿ[ËL$_3À‰1^[Ã+þƒÿš_^¸þÿÿÿ[Ã+þƒÿ_^¸þÿÿÿ[ÊRPèÛÿÿƒÄƒÀûƒøwi3ÉŠˆŠÿ$tŠ3Ò3ÉŠVŠ3ÀŠ‚Àö‹ÑÁêƒáºÓâ……ÀðtEƒÆ;÷tYéNÿÿÿ+þƒÿŒ]ÿÿÿ‹L$_3À‰1^[Ã+þƒÿŒzÿÿÿ‹T$_3À‰2^[Ã+þƒÿŒcÿÿÿ‹D$_‰0^3À[ËL$_¸‰1^[Ã_^¸ìÿÿÿ[ÃD‰`‰t‰&‰öˆŠIã‰ú‰Š(Š׉«‰Š‹L$SUV‹t$W;ñ„í‹l$‹\$‹ù+þŠF„Àu3À3ÒŠŠT(L‹ÂëŠQPèÂÙÿÿ‹L$(ƒÄƒø w3ÒŠÔ‹ÿ$•¼‹ƒÿ|8ƒÆƒï;ñu¸_^]ƒÈÿ[Ãÿ|!ƒÆƒïëçƒÿ|ƒÆƒïëڃƃï;ÃtëÎ_^]¸þÿÿÿ[ËD$$‰0_^]3À[Ã;ñu _^]¸åÿÿÿ[ËL$$‰1ŠF„Àu 3Ò3ÀŠŠD*Lë ŠQPè#ÙÿÿƒÄƒÀ÷ƒøw¾3ÒŠì‹ÿ$•ä‹_^]¸[Ã_^]ƒÈÿ[ÃIP‹ ‹ ‹-‹:‹‹‹ÿ§‹V‹S‹\$UV‹t$W;óu _^]¸üÿÿÿ[Ë|$‹îŠF„Àu3À3ÉŠŠL8L‹Áë ŠRPèbØÿÿƒÄƒÀþƒøw3ÉŠˆdÿ$@ƒÆëƒÆëƒÆ;óu·‹L$ _¸‰1^][Ã;õ…Ÿ‹T$ ƒÆRSVWèoÛÿÿƒÄ_^][ËL$ _3À‰1^][Ã;õuv‹T$ ƒÆ_¸‰2^][Ã;õu¨ƒÆ;óu _^]¸ýÿÿÿ[ÊF„Àu 3É3ÀŠŠD9Lë ŠRPè²×ÿÿƒÄƒø uƒÆ‹D$ _‰0^]¸[Ã;õu‹T$ ƒÆ_¸'‰2^][ËD$ _‰0^]¸[錉ŒrŒhŒmŒÍŒ¶ŒrŒS‹\$UV‹t$W;óu _^]¸üÿÿÿ[Ë|$‹îŠF„Àu3À3ÉŠŠL8L‹Áë ŠRPèòÖÿÿƒÄƒÀýƒøw3ÉŠˆØŽÿ$¸ŽƒÆëƒÆëƒÆ;óu·‹L$ _¸‰1^][Ã;õ…§‹T$ ƒÆRSVWèÿÙÿÿƒÄ_^][Ã;õu‹L$ ƒÆQSVWèSøÿÿƒÄ_^][ËT$ _¸‰2^][Ã;õu ‹D$ ƒÆ_‰0^]¸[Ã;õuHƒÆ;óu _^]¸ýÿÿÿ[ÊF„Àu 3Ò3ÀŠŠD:Lë ŠQPè#ÖÿÿƒÄƒø uƒÆ‹T$ _¸‰2^][ËD$ _‰0^]¸[ÃùâØÝ\ŽEŽŽâS‹\$UV‹t$‹Ã+Æ3í¨Wt$þÆ‹Ø;ó„ ‹û+þŠF„Àu‹T$3ÀŠ3ÉŠLL‹Áë ŠQPèfÕÿÿƒÄƒøwÿ$…8ƒÿŒ§ƒÆƒï;óu¼_^]ƒÈÿ[ÃÿŒŒƒÆƒïëãƒÿ|ƒÆƒïëփƃï;ó„ŠF„ÀuÁ€>!u¼ƒÆƒï;ótzŠF„Àu«€>[u¦EëƒÆƒï;ótaŠF„Àu’€>]uƒÆƒï;ótKŠF„À…xÿÿÿ€>>…oÿÿÿƒÆƒï…ítMé_ÿÿÿ_^]¸þÿÿÿ[ËT$ _3À‰2^][ËD$ _‰0^]¸*[Ã_^]ƒÈÿ[Ã’bÅYt…SV‹t$W‹|$ƒÆƒï;÷„•‹\$ŠF„Àu3À3ÉŠŠLL‹Áë ŠRPèÔÿÿƒÄƒÀ÷ƒøw33ÉŠˆ(‘ÿ$‘ŠF„Àu1€> t5ë*ŠF„Àu¾ëƒÈÿ©€ÿÿÿtŠF„Àu"¾ƒø$tƒø@uƒÆ;÷t뇋T$_3À‰2^[ËD$_‰0^3À[Ã_^¸[ÃíµÃÙQSUVW‹|$‹l$$3ۃǾ‰\$G‰D$ŠG„Àu‹T$3ÉŠ3ÀŠDLë ŠQPèÓÿÿƒÄƒÀýƒø‡83ÒŠ”ÿ$•ô“…ö…!;\$ }‰}ÆE ‹D$ƒÇƒÀ¾‰D$똅öu;\$ }‰}ÆE ¾‹D$G@ƒÇ‰D$ƒÀ‰D$éiÿÿÿ…öu;\$ }‰}ÆE ¾‹D$ƒÇƒÀƒÇ‰D$ƒÀ‰D$é6ÿÿÿƒþt+;\$ }‹D$‰E‹D$¾þÆÇD$ ‰D$éÿÿÿƒ|$ …b‹D$ 3ö;Ø}b‹D$‰}CƒÅƒÇƒÀ‰D$é×þÿÿƒþt+;\$ }‹L$‰M‹D$¾þÆÇD$ ‰D$é§þÿÿƒ|$ …‹D$ 3ö;Ø}‰}‹D$CƒÅƒÇƒÀ‰D$éxþÿÿƒþu‹D$3öƒÇƒÀ‰D$é^þÿÿƒþ…¼;\$ ²ŠE „À„§;}tJŠG„ÀuC¾ƒø u;ŠG‹T$„Àu¾ ƒù t(„Àu3À3ÉŠ‹T$ŠLL‹Áë Š QPè8ÑÿÿƒÄ;D$uX‹D$ƒÇƒÀÆE ‰D$éÚýÿÿƒþu‹D$3öƒÇƒÀ‰D$éÀýÿÿƒþu";\$ }‹D$ƒÇƒÀÆE ‰D$éžýÿÿƒþu‹D$ƒÇƒÀ‰D$é†ýÿÿ_^‹Ã][Y÷“°‘Ú‘ ’˜“Ô“<’›’ú’Ù“      V‹t$ ƒÆ3ÉWŠF„Àu^€>xuYŠFƒÆ„ÀuŠ€ú;tv„Àu¾ÂëƒÈÿxЃÿ6w&3ÒŠ—ü”ÿ$•ì”Áá ÏëÁáLÉëÁáL©ù|­_ƒÈÿ^ÊF„ÀuŠ€ú;t „Àu¾ÂëƒÈÿ ‰LHÐù}уÆëÒQèœ;ƒÄ_^Ëÿ‹”’”›”¢”‹D$ ‹L$+Á™+ÂÑøƒè„àH„©H…ÿŠA„À…ô¾ƒøatTƒøq…ãŠAƒÁ„À…Õ€9u…ÌŠAƒÁ„À…¾€9o…µŠAƒÁ„À…§€9t…ž¸"ÊAƒÁ„À…Š€9p…ŠAƒÁ„Àuw€9ourŠAƒÁ„Àuh€9suc¸'ÊA„ÀuV€9auQŠAƒÁ„ÀuG€9muBŠAƒÁ„Àu8€9pu3¸&ÊA„Àu&€ytu ŠA„Àu¾ƒøgt ƒølu ¸<ø>Ã3ÀÃS‹\$V‹t$W‹|$ŠF„Àu3À3ÉŠŠLL‹Áë ŠRPèÎÿÿƒÄƒÀûƒøwO3ÉŠˆP—ÿ$<—ŠŠGF:ÐulŠŠGF:ÊubŠŠGF:ÁuXŠŠGF:ÐuN랊ŠFG:ÊuBŠŠFG:Áu8눊G„Àu 3Ò3ÀŠŠDLë ŠQPèÍÿÿƒÄƒÀûƒøw3ÒŠt—ÿ$•l—_^3À[Ã_^¸[ÃË–Á–·–á–÷–I-—3—‹T$‹L$SVŠ‹t$„Àt;Ît ŠY„Ûu8uŠBƒÁB„Àuæ3À;Î^[”ÀÃ^3À[ÃSV‹t$W‹|$‹ÞŠF„Àu3À3ÉŠŠL8L‹Áë ŠRPèµÌÿÿƒÄƒÀûƒøw3ÉŠˆ<˜ÿ$,˜ƒÆëÃÆ뾃Æ빋Æ_+Ã^[ؘ˜$˜V‹t$ W‹|$ ŠF„Àu3À3ÉŠŠL8L‹Áë ŠRPè(ÌÿÿƒÄƒø |ƒø ~ƒøuƒÆëË‹Æ_^ÃS‹\$V‹t$;ót`U‹l$W‹|$ ŠF„Àu3À3ÉŠŠL(L‹Áë ŠRPèÊËÿÿƒÄƒÀûƒøwÿ$…`™ƒÆëƒÆë‹ÇGÿÿÿÿA‰ƒÆ‹OA;ó‰Ou¬_]^[˃ÆB;ó‰t)ŠF„Àu3À3ÉŠŠL(L‹Áë ŠRPèeËÿÿƒÄƒø uƒÆÇGÿÿÿÿë²™ø˜ý˜™!™™S‹\$UV‹t$W;óu _^]¸üÿÿÿ[ËÃ+ƨtƒàþu_^]ƒÈÿ[Ã0Š‹l$„Àu3À3ÉŠFŠL(L‹Áë ŠVRPèÛÊÿÿƒÄƒø ‡ÿ$…›ƒÆ;óu_^]ƒÈÿ[À>…ì€~]…âƒÆ;óu_^]ƒÈÿ[À>u€~>u‹D$ ƒÆ_‰0^]¸([Ãîé­ƒÆ;óu_^]ƒÈÿ[Ê„Àu 3É3ÀŠNŠD)Lë ŠVRPèEÊÿÿƒÄƒø uƒÆ‹D$ _‰0^]¸[ËL$ ƒÆ_¸‰1^][ËÓ+Öƒú}G_^]¸þÿÿÿ[ËÃ+ƃø} _^]¸þÿÿÿ[ÃÆë(‹Ë+΃ù} _^]¸þÿÿÿ[ÃÆë‹T$ _3À‰2^][ÃÆ;ó„‹‹û+þŠ„Àu3À3ÉŠFŠL(L‹Áë ŠVRPè™ÉÿÿƒÄƒø w ÿ$…¼›ƒÿ|DƒÆƒï;óuËL$ _¸‰1^][Ãÿ|5ƒÆƒïë߃ÿ|ƒÆƒïëÒ‹T$ _¸‰2^][ËD$ _‰0^]¸[ËL$ _¸‰1^][Ãܚܚéšéšè™™š¬šÄšÜš?š†šo›o›+›+›o›&›E›R›o›o›o›SUV‹t$W‹|$;÷u _^]¸üÿÿÿ[ËÇ+ƨtƒàþu_^]ƒÈÿ[ÃƉD$‹øŠ„Àu‹L$3ÀŠF3ÒŠTL‹ÂëŠNQPèfÈÿÿ‹L$ƒÄƒø ‡ ÿ$…lž‹T$ ƒÆRWVQèƒÄ_^][ËD$ ƒÆPWVQèGƒÄ_^][ÃÆ;÷u _^]¸ýÿÿÿ[Ê„Àu 3Ò3ÀŠVŠD Lë ŠNQPèñÇÿÿƒÄƒø uƒÆ‹T$ _¸‰2^][ËD$ ƒÆ_‰0^]¸[ÃÆ;÷u _^]¸ûÿÿÿ[À>uz€~]utƒÆ;÷u _^]¸ûÿÿÿ[À>u€~>u ‹L$ _3À‰1^][ÃîëF‹×+Öƒú}:_^]¸þÿÿÿ[ËÇ+ƃø} _^]¸þÿÿÿ[ÃÆë‹Ï+΃ù} _^]¸þÿÿÿ[ÃÆëƒÆ;÷„¤^n+þŠ„Àu‹T$3ÀŠF3ÉŠLL‹Áë ŠNQPèÇÿÿƒÄƒø w[ÿ$…˜žƒÿ|uëMƒÿŒŠƒÆƒïƒÅƒÃëBƒÿ|GƒÆƒïƒÅƒÃë/‹D$;èta€}u€~]u;ØtQ€;u€~>t6ƒÆƒïƒÅƒÃ;t$…dÿÿÿ‹L$ _¸‰1^][ËT$ _¸‰2^][ÃÆ‹T$ _3À‰2^][ËD$ _‰0^]¸[ÃILžLžaœyœíœ7JbLž‘œÚœYžYžYžYžð¿ÆÝYžYžYžSV‹t$W‹|$;÷u_^ƒÈÿ[Ê‹\$„Àu3À3ÉŠFŠLL‹Áë ŠVRPè§ÅÿÿƒÄƒÀûƒø‡ 3ÉŠˆ¤ ÿ$ˆ 3Ò3ÉŠŠN3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$_‰0^3À[ÃÆ;÷„uÿÿÿŠ„ÀuE3É3ÀŠNŠDLëE+þƒÿœ_^¸þÿÿÿ[Ã+þƒÿŸ_^¸þÿÿÿ[Ã+þƒÿ}§_^¸þÿÿÿ[ÊVRPèñÄÿÿƒÄƒÀûƒøwq3ÉŠˆÜ ÿ$À 3Ò3ÉŠŠN3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„JÿÿÿƒÆ;÷„ËþÿÿéQÿÿÿ+þƒÿŒdÿÿÿ‹L$_3À‰1^[Ã+þƒÿŒMÿÿÿ‹T$_3À‰2^[Ã+þƒÿŒZÿÿÿ‹D$_‰0^3À[ËL$ƒÆ_¸ ‰1^[ËD$ƒÆPWVS考Ä_^[Ã}Ÿ‘Ÿ¥Ÿp _Ÿ'Ÿ$ I 0 G ^   ÙŸ; SV‹t$W‹|$;÷„”Š„Àu#€~xu‹D$‹L$PƒÆWVQèƒÄ_^[ÄÀ‹\$u 3Ò3ÀŠVŠDLë ŠNQPèWÃÿÿƒÄƒøt ‹T$_3À‰2^[ÃÆ;÷t3Š„Àu3À3ÉŠFŠLL‹Áë ŠVRPèÃÿÿƒÄƒøtƒøuƒÆ;÷uÍ_^ƒÈÿ[ËD$_‰0^3À[ËL$ƒÆ_¸ ‰1^[ÃS‹\$V‹t$;óWtoŠ‹|$„Àu3À3ÉŠFŠL8L‹Áë ŠVRPè®ÂÿÿƒÄƒø|iƒødƒÆ;ót8Š„Àu3À3ÉŠFŠL8L‹Áë ŠVRPè{ÂÿÿƒÄƒøt$ƒø~ƒøƒÆ;óuÈ_^ƒÈÿ[ËD$_‰0^3À[ËL$ƒÆ_¸ ‰1^[ËT$_3À‰2^[ÃSUV‹t$W‹|$;÷u_^]ƒÈÿ[Ê‹l$„Àu3À3ÉŠFŠL(L‹Áë ŠVRPèõÁÿÿƒÄƒÀûƒø‡Ž3ÉŠˆ„¦ÿ$`¦3Ò3ÉŠŠN3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$ _‰0^]3À[ÃÆ3Û;÷„jŠ„Àu"3É3ÀŠNŠD)Lë"+þƒÿ_^]¸þÿÿÿ[ÊVRPè_ÁÿÿƒÄƒÀûƒø‡3ÉŠˆÈ¦ÿ$ ¦3Ò3ÉŠŠN3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„Qé…Û…”ƒÆ»;÷„ÍŠ„Àu3À3ÉŠFŠL(L‹Áë ŠVRPèÕÀÿÿƒÄƒÀûƒø‡3ÉŠˆü¦ÿ$ä¦3Ò3ÉŠŠN3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðt3ƒÆ;÷„Yéêþÿÿ+þƒÿŒ‹L$ _3À‰1^][Ã+þƒÿŒåþÿÿ‹T$ _3À‰2^][Ã+þƒÿŒÍþÿÿ‹D$ _‰0^]3À[Ã+þƒÿŒµþÿÿ‹D$ _‰0^]3À[Ã+þƒÿëž+þƒÿ믃Æ;÷„ÛŠ„Àu 3É3ÀŠNŠD)Lë ŠVRPèå¿ÿÿƒÄƒÀûƒøw‚3ÉŠˆ<§ÿ$§ƒÆ;÷uÂ_^]ƒÈÿ[Ã3Ò3ÉŠŠN3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$ _‰0^]3À[ËL$ ƒÆQWVUè# ƒÄ_^][Ã+þƒÿðþÿÿ_^]¸þÿÿÿ[Ã+þƒÿ‹_^]¸þÿÿÿ[ËD$ ƒÆ_‰0^]¸[ÃÆ;÷u_^]ƒÈÿ[À>…¾þÿÿ€~>…´þÿÿ‹L$ ƒÆ_¸‰1^][ÃÆ;÷u_^]ƒÈÿ[Ê„Àu 3É3ÀŠNŠD)Lë ŠVRPè;ÿÿƒÄƒøt*ƒøt ‹D$ _‰0^]3À[ËL$ ƒÆQWVUèSƒÄ_^][ËT$ ƒÆRWVUè[ƒÄ_^][ËD$ ƒÆPWVUècƒÄ_^][ËL$ ƒÆQWVUè{ƒÄ_^][ÃIE¥2£Z¥-¦·¥E¦£Ù¢X¤I5¤M¤e¤£¤o¥‚¥%¤¤£o£ð¥    I}¤•¤œ¤%¤ù£ð¥IE¥2£Z¥å¤o¥‚¥-¥ô¤X¤SU‹l$V‹t$W;õ„í€>…×€~-…̓Æ;õ„Ï‹\$‹ý+þŠ„Àu3À3ÉŠFŠLL‹Áë ŠVRPè÷¼ÿÿƒÄƒøw3ÉŠˆ„¨ÿ$l¨ƒÿ|CƒÆƒï;õu»_^]ƒÈÿ[Ãÿ|,ƒÆƒïëçƒÿ|ƒÆƒïëڃƃï;õtV€>uË€~-t ëÃ_^]¸þÿÿÿ[ÃÆ;õt8€>u€~>u‹D$ ƒÆ_‰0^]¸ [ËL$ _3À‰1^][ËT$ _3À‰2^][Ã_^]ƒÈÿ[ÃIT¨Чç§ô§¨Õ§SU‹l$V‹t$W;õ‹þu_^]ƒÈÿ[Ê„Àu‹\$3ÀŠF3ÉŠLL‹ÁëŠVRPèÓ»ÿÿ‹\$ƒÄƒÀûƒø‡D3ÉŠˆd«ÿ$L«3Ò3ÉŠŠN3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àð„ƒÆ;õ„劄ÀuU3É3ÀŠNŠDLëU+îƒý} _^]¸þÿÿÿ[ËL$ _3À‰1^][Ã+îƒýß_^]¸þÿÿÿ[Ã+îƒý©_^]¸þÿÿÿ[ÊVRPè»ÿÿƒÄƒÀûƒø‡§3ÉŠˆ «ÿ$€«3Ò3ÉŠŠN3ÀŠ‚Àö‹ÑÁêƒáºÓâ……ÀðtKƒÆ;õ„+éAÿÿÿ+îƒýŒPÿÿÿ‹L$ _3À‰1^][Ã+îƒýŒoÿÿÿ‹T$ _3À‰2^][Ã+îƒýŒWÿÿÿ‹D$ _‰0^]3À[ÃL$QVWS袃ąÀu ‹T$ _3À‰2^][ÃÆ;õ„²‹ý³>+þŠ„Àu‹T$3ÀŠF3ÉŠLL‹Áë ŠNQPèºÿÿƒÄƒøw3ÒŠÔ«ÿ$•¼«ƒÿŒÕþÿÿƒÆƒï;õu³_^]ƒÈÿ[ÃÿŒºþÿÿƒÆƒïëãƒÿŒ©þÿÿƒÆƒïë҃ƃï;õt+€>uÃ8^t<ë¼T$RVWSèãƒÄ…À„ÿÿÿƒÆ;õu_^]ƒÈÿ[À>…%ÿÿÿ€~>…ÿÿÿ‹L$ ‹D$ƒÆ_‰1^][ÃM©k©€©/©ÿ¨4ªIù©ª)ªAª«é©½©UªI4ª­ªȪ٪ꪶª‹L$ ‹D$V‹t$+È3ÒƒùÇ ui€8ud¾HƒùXt ƒùxt ¸^úŠHƒÀ„Éu@¾HƒùMt ƒùmt ¸^úŠHƒÀ„Éu¾@ƒøLt ƒølu…Òt3À^ÃÇ ¸^ËD$ ‹L$+ÁSƒø }ƒÈÿ[Ã3À€9u#ŠQŠ˜ :Óu@ƒÁƒø|å‹T$¸[‰ ËD$[‰3ÀÃSV‹t$W‹|$;÷u_^ƒÈÿ[Ê‹\$„Àu3À3ÉŠFŠLL‹Áë ŠVRPè§·ÿÿƒÄƒÀûƒø‡63ÉŠˆè®ÿ$Ю3Ò3ÉŠŠN3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àð„÷ƒÆ;÷tŠ„ÀuQ3É3ÀŠNŠDLëQ+þƒÿ} _^¸þÿÿÿ[ËL$_3À‰1^[Ã+þƒÿŸ_^¸þÿÿÿ[Ã+þƒÿ¢_^¸þÿÿÿ[ÊVRPèñ¶ÿÿƒÄƒÀûƒøwm3ÉŠˆ$¯ÿ$¯3Ò3ÉŠŠN3ÀŠ‚Àö‹ÑÁêƒáºÓâ……ÀðtIƒÆ;÷„ÏþÿÿéIÿÿÿ+þƒÿŒXÿÿÿ‹L$_3À‰1^[Ã+þƒÿŒuÿÿÿ‹T$_3À‰2^[Ã+þƒÿŒ^ÿÿÿ‹D$_‰0^3À[ÃÆ;÷„zþÿÿŠ„Àu 3É3ÀŠNŠDLë ŠVRPè.¶ÿÿƒÄƒÀ÷ƒø wÁ3ÉŠˆL¯ÿ$@¯ƒÆ;÷uÂ_^ƒÈÿ[ËT$ƒÆ_¸‰2^[ËL$ƒÆ_¸‰1^[Ëÿq­­¡­W­'­N®I®,®C®Z®¼®®Ù­7®Iœ®ª®N®‹T$SUVW‹|$3Û;ׄ‹l$Š„Àu3À3ÉŠBŠL(L‹ÁëŠRRPèµÿÿ‹T$ ƒÄƒÀûƒø‡:3ÉŠˆ¨³ÿ$„³3À3ÉŠŠJ‹ð3ÀІÀö‹ñÁîƒáƾÓæ…4…Àð„ùé©…Û…ìƒÂ»;׉T$„kŠ„Àu 3É3ÀŠJŠD)LëŠRRPè…´ÿÿ‹T$ ƒÄƒÀûƒø‡×3ÉŠˆÜ³ÿ$ij3À3ÉŠŠJ‹ð3ÀІÀõ‹ñÁîƒáƾÓæ…4…Àð„–éƒÂ;׉T$„抄Àu 3É3ÀŠJŠD)LëŠRRPè´ÿÿ‹T$ ƒÄƒøtƒø Œ!ƒø ~ºƒø…ë¯3ÛƒÂ;׉T$„“Š„Àu3À3ÉŠBŠL(L‹ñëŠRRP諳ÿÿ‹T$ ƒÄ‹ðƒþ tƒþ tƒþ Œôƒþ ~±ƒþ…æ릃‰T$;ׄ9Š„Àu3À3ÉŠBŠL(L‹ÁëŠRRPèQ³ÿÿ‹T$ ƒÄ;ÆtcƒøwÂÿ$…ø³‹Ç+ƒøŒÛ묋Ï+ʃùŒÌƒÂë‹Ç+ƒøŒºƒÂë‹L$ƒÂQWRUèíÿÿƒÄ…Àޤ‹T$ékÿÿÿƒÂ;׉T$„Š„Àu3À3ÉŠBŠL(L‹ÁëŠRRPèµ²ÿÿ‹T$ ƒÄƒÀ÷ƒø ‡Ø3ÉŠˆ,´ÿ$´ƒÂ;׉T$„MŠ„Àu3À3ÉŠBŠL(L‹ÁëŠRRPèe²ÿÿ‹T$ ƒÄƒÀûƒø‡ˆ3ÉŠˆ`´ÿ$<´3À3ÉŠŠJ‹ð3ÀІÀõ‹ñÁîƒáƾÓæ…4…ÀðtKƒÂ;׉T$„ÏéËüÿÿ+úƒÿŒ¤‹L$ _^]‰3À[Ã+úƒÿŒŒ‹D$ _^]‰3À[Ã+úƒÿ|x‹L$ _^]‰3À[Ã+úƒÿ|d‹D$ _^]‰3À[Ã+úƒÿëÖ+úƒÿ|I‹D$ _^]‰3À[ÃÂ;׉T$tL€:u´€z>u®‹D$ ƒÂ_^‰]¸[ËD$ ƒÂ_^‰]¸[Ã_^]¸þÿÿÿ[Ãu‹L$ ‹T$_^]‰[ÃÈÿ_^][ÃI³¯²Dz„°Õ°›²ò¯»¯æ²Iß²ó²³›²M°³I³³³©±1±v±…±—±³²K³"³æ²I³¯²Dz²K³"³›²m²æ²SUV‹t$W‹|$;÷u _^]¸üÿÿÿ[ËÇ+ƨtƒàþu_^]ƒÈÿ[Ã<0Š‹\$„Àu3À3ÉŠFŠLL‹Áë ŠVRPèÛ¯ÿÿƒÄƒÀþƒø"‡3ÉŠˆ¸ºÿ$dº‹T$ ƒÆRWVSj è› ƒÄ_^][ËD$ ƒÆPWVSj è ƒÄ_^][ÃÆ;÷u_^]ƒÈÿ[Ê„Àu 3É3ÀŠNŠDLë ŠVRPè]¯ÿÿƒÄƒÀûƒø‡¼3ÉŠˆìºÿ$ܺ‹T$ ƒÆRWVSè?ƒÄ_^][ËD$ ƒÆPWVSèóÿÿƒÄ_^][ËL$ ƒÆþ_¸‰1^][ÃF;Çu _^]¸ñÿÿÿ[ÃÆ;÷t=Š„Àu 3É3ÀŠNŠDLë ŠVRPèÇ®ÿÿƒÄƒè t Htƒè u ëF;ÇtƒÆ;÷uËL$ _¸‰1^][ËT$ _¸‰2^][ËD$ ƒÆPWVSè'ƒÄ_^][ËL$ ƒÆ_¸&‰1^][ËT$ ƒÆ_¸‰2^][ÃÆ;÷u _^]¸æÿÿÿ[À>u3€~]u-F;Çu_^]ƒÈÿ[À8u€~>u‹D$ ƒÆ_‰0^]¸"[ËL$ _¸‰1^][ËT$ ƒÆ_¸‰2^][ÃÆ;÷u _^]¸èÿÿÿ[Ê„Àu3À3ÉŠFŠLL‹Áë ŠVRPè­­ÿÿƒÄƒÀ÷ƒø‡ç3ÉŠˆ»ÿ$»‹T$ ƒÆ_¸$‰2^][ËD$ ƒÆ_‰0^]¸#[ËL$ ƒÆ_¸%‰1^][ËT$ _¸‰2^][ËL$ ƒÆ_¸‰1^][ËT$ ƒÆ_¸‰2^][ËD$ ƒÆPWVSèàƒÄ_^][Ã+þƒÿÀ_^]¸þÿÿÿ[Ã+þƒÿV_^]¸þÿÿÿ[Ã+þƒÿ_^]¸þÿÿÿ[ýƒÆëb½ƒÆëX3ɺŠ‹é3ÉŠN‹ÁƒáÓâ3ÉŠÀõÁè È…Àðt ƒÆ½ë 3ÉŠÀöÈ……Àð„(ƒÆ½;÷„ÿŠ„Àu 3É3ÀŠNŠDLë ŠVRPè8¬ÿÿƒÄƒÀûƒø‡r3ÉŠˆd»ÿ$8»3Ò3ÉŠŠN3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„3ƒÆëƒÆƒýtƒý)u½;÷„uéqÿÿÿ;÷„˜ýÿÿн)„Àu3À3ÉŠFŠLL‹Áë ŠVRPèš«ÿÿƒÄƒÀûƒøw·3ÉŠˆœ»ÿ$„»3Ò3ÉŠŠN3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„¾ƒÆéuÿÿÿ+þƒÿŒ@þÿÿ‹L$ _3À‰1^][Ã+þƒÿŒ(þÿÿ‹T$ _3À‰2^][Ã+þƒÿŒþÿÿ‹D$ _‰0^]3À[Ã+þƒÿŒøýÿÿ‹D$ _‰0^]3À[Ã+þƒÿëž+þƒÿŒÙýÿÿ‹T$ _3À‰2^][ËL$ _‹Å‰1^][Ãýu ‹D$ _‰0^]3À[ËL$ ƒÆ_¸ ‰1^][Ãýu ‹T$ _3À‰2^][ËD$ ƒÆ_‰0^]¸[Ãý„,ÿÿÿ‹T$ ƒÆ_¸‰2^][Ã_‹Å^]÷Ø[Ã'µg¶¨·½·Ò·´µŵ}·ó´ µ·T¶ç·ñ·û·)¶À¶Ó¶A¶j·s¹   ¡µ‰µqµºIZ·4·!·G·ù¹h¹€¹˜¹ç¹>ºƸ˸–¸ºô¹ù¹      °¹ȹϹ`¹0¹ظSV‹t$W‹|$;÷u_^ƒÈÿ[Ê‹\$„Àu3À3ÉŠFŠLL‹Áë ŠVRPè·¨ÿÿƒÄƒÀìƒø‡Þÿ$…ô¼‹D$ƒÆPWVSèAëÿÿƒÄ_^[ËL$ƒÆ_¸!‰1^[ÃÆ;÷tLŠ„Àu 3Ò3ÀŠVŠDLë ŠNQPèT¨ÿÿƒÄƒÀ÷ƒøws3ÒŠ$½ÿ$•½ƒÆ;÷uÂ_^ƒÈÿ[ÃF;Çu_^ƒÈÿ[Ê„Àu3À3ÉŠFŠLL‹Áë ŠVRPèÿ§ÿÿƒÄƒÀ÷ƒøw3ÉŠˆD½ÿ$<½‹D$_‰0^¸[ËL$_3À‰1^[ËT$_3À‰2^[Ëÿ&¼æ¼8¼æ¼8¼æ¼æ¼¼˼v¼„¼Ú¼‹ÿæ¼˼SV‹t$W‹|$;÷u_^ƒÈÿ[Ê‹\$„Àu3À3ÉŠFŠLL‹Áë ŠVRPè§ÿÿƒÄƒÀûƒø‡ 3ÉŠˆ,¿ÿ$¿3Ò3ÉŠŠN3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àðu ‹D$_‰0^3À[ÃÆ;÷„uÿÿÿŠ„ÀuE3É3ÀŠNŠDLëE+þƒÿœ_^¸þÿÿÿ[Ã+þƒÿŸ_^¸þÿÿÿ[Ã+þƒÿ}§_^¸þÿÿÿ[ÊVRPèa¦ÿÿƒÄƒÀûƒøwq3ÉŠˆd¿ÿ$H¿3Ò3ÉŠŠN3ÀŠ‚Àö‹ÑÁêƒáºÓâ……Àð„JÿÿÿƒÆ;÷„ËþÿÿéQÿÿÿ+þƒÿŒdÿÿÿ‹L$_3À‰1^[Ã+þƒÿŒMÿÿÿ‹T$_3À‰2^[Ã+þƒÿŒZÿÿÿ‹D$_‰0^3À[ËL$ƒÆ_¸‰1^[ËD$_‰0^¸[à ¾!¾5¾¿ï½·½´¾‹ÿ©¾À¾×¾î¾™¾i¾˾SV‹t$W‹|$;÷u_^ƒÈÿ[Ê‹\$„Àu3À3ÉŠFŠLL‹Áë ŠVRPè÷¤ÿÿƒÄƒÀûƒø‡63ÉŠˆ<Áÿ$$Á3Ò3ÉŠŠN3ÀŠ‚Àõ‹ÑÁêƒáºÓâ……Àð„÷ƒÆ;÷„Š„ÀuQ3É3ÀŠNŠDLëQ+þƒÿ} _^¸þÿÿÿ[ËL$_3À‰1^[Ã+þƒÿ›_^¸þÿÿÿ[Ã+þƒÿž_^¸þÿÿÿ[ÊVRPè=¤ÿÿƒÄƒÀûƒøwi3ÉŠˆtÁÿ$XÁ3Ò3ÉŠŠN3ÀŠ‚Àö‹ÑÁêƒáºÓâ……ÀðtEƒÆ;÷tYéMÿÿÿ+þƒÿŒ\ÿÿÿ‹L$_3À‰1^[Ã+þƒÿŒyÿÿÿ‹T$_3À‰2^[Ã+þƒÿŒbÿÿÿ‹D$_‰0^3À[ËL$_¸‰1^[Ã_^¸ìÿÿÿ[Ëÿ%ÀAÀUÀÀ׿þÀIÅÀÜÀóÀ Á¹ÀÀçÀ‹L$SUV‹t$W;ñ„ï‹l$‹\$‹ù+þŠ„Àu3À3ÒŠFŠT(L‹ÂëŠNQPèÑ¢ÿÿ‹L$(ƒÄƒø w3ÒŠÄÂÿ$•¬Âƒÿ|8ƒÆƒï;ñu·_^]ƒÈÿ[Ãÿ|!ƒÆƒïëçƒÿ|ƒÆƒïëڃƃï;ÃtëÎ_^]¸þÿÿÿ[ËD$$‰0_^]3À[Ã;ñu _^]¸åÿÿÿ[ËL$$‰1Š„Àu 3Ò3ÀŠVŠD*Lë ŠNQPè1¢ÿÿƒÄƒÀ÷ƒøw½3ÒŠÜÂÿ$•ÔÂ_^]¸[Ã_^]ƒÈÿ[ÃAÂúÁÂÂ+ÂÿÁ‹ÿ™ÂGÂS‹\$UV‹t$W;óu _^]¸üÿÿÿ[Ë|$‹îŠ„Àu3À3ÉŠFŠL8L‹Áë ŠVRPèq¡ÿÿƒÄƒÀþƒøw3ÉŠˆXÄÿ$4ăÆëƒÆëƒÆ;óu¶‹L$ _¸‰1^][Ã;õ… ‹T$ ƒÆRSVWè>ÛÿÿƒÄ_^][ËL$ _3À‰1^][Ã;õuw‹T$ ƒÆ_¸‰2^][Ã;õu¨ƒÆ;óu _^]¸ýÿÿÿ[Ê„Àu 3É3ÀŠNŠD9Lë ŠVRPèÀ ÿÿƒÄƒø uƒÆ‹D$ _‰0^]¸[Ã;õu‹T$ ƒÆ_¸'‰2^][ËD$ _‰0^]¸[ËÿšÃzÃcÃYÃ^þçà ÄcÃS‹\$UV‹t$W;óu _^]¸üÿÿÿ[Ë|$‹îŠ„Àu3À3ÉŠFŠL8L‹Áë ŠVRPè ÿÿƒÄƒÀýƒøw3ÉŠˆÌÅÿ$¬ÅƒÆëƒÆëƒÆ;óu¶‹L$ _¸‰1^][Ã;õ…¨‹T$ ƒÆRSVWèÎÙÿÿƒÄ_^][Ã;õu‹L$ ƒÆQSVWèBøÿÿƒÄ_^][ËT$ _¸‰2^][Ã;õu ‹D$ ƒÆ_‰0^]¸[Ã;õuIƒÆ;óu _^]¸ýÿÿÿ[Ê„Àu 3Ò3ÀŠVŠD:Lë ŠNQPè1ŸÿÿƒÄƒø uƒÆ‹T$ _¸‰2^][ËD$ _‰0^]¸[ËÿêÄÓÄÉÄÎÄMÅ6Å ÅÓÄSU‹l$V‹t$‹Å+Æ3Û¨Wt$þÆ‹è;õ„‹ý+þŠ„Àu‹T$3ÀŠF3ÉŠLL‹Áë ŠNQPèužÿÿƒÄƒøwÿ$…$ǃÿŒŸƒÆƒï;õu»_^]ƒÈÿ[ÃÿŒ„ƒÆƒïëãƒÿ|wƒÆƒïëփƃï;õ„ˆ€>uÀ~!u½ƒÆƒï;õts€>u®€~[u¨C럃ƃï;õt[€>u–€~]uƒÆƒï;õtF€>u€~>…wÿÿÿƒÆƒï…ÛtKégÿÿÿ_^]¸þÿÿÿ[ËT$ _3À‰2^][ËD$ _‰0^]¸*[Ã_^]ƒÈÿ[ÃIüÆüƃÆSÆ´ÆJÆeÆvÆüÆUV‹t$W‹|$ƒÆƒï;÷„“‹l$Š„Àu3À3ÉŠFŠL(L‹Áë ŠVRPè$ÿÿƒÄƒÀ÷ƒøw13ÉŠˆÈÿ$È€>u0€~ t3ë(€>u¾FëƒÈÿ©€ÿÿÿt€>u#¾Fƒø$tƒø@uƒÆ;÷t뉋T$_3À‰2^]ËD$_‰0^3À]Ã_^¸]ÃIÛǦdzÇÈÇQSUVW‹|$‹l$$3ۃǾ‰\$G‰D$Š„Àu‹T$3ÉŠO3ÀŠDLë ŠOQPè-œÿÿƒÄƒÀýƒø‡93ÒŠËÿ$•èÊ…ö…";\$ }‰}ÆE ‹D$ƒÇƒÀ¾‰D$ë—…öu;\$ }‰}ÆE ¾‹D$G@ƒÇ‰D$ƒÀ‰D$éhÿÿÿ…öu;\$ }‰}ÆE ¾‹D$ƒÇƒÀƒÇ‰D$ƒÀ‰D$é5ÿÿÿƒþt+;\$ }‹D$‰E‹D$¾þÆÇD$ ‰D$éÿÿÿƒ|$ …c‹D$ 3ö;Ø}b‹D$‰}CƒÅƒÇƒÀ‰D$éÖþÿÿƒþt+;\$ }‹L$‰M‹D$¾þÆÇD$ ‰D$é¦þÿÿƒ|$ …‹D$ 3ö;Ø}‰}‹D$CƒÅƒÇƒÀ‰D$éwþÿÿƒþu‹D$3öƒÇƒÀ‰D$é]þÿÿƒþ…½;\$ ³ŠE „À„¨;}tK€?uF¾Gƒø u=‹T$Š„Àu ¾Oƒù t*„Àu‹T$3ÀŠG3ÉŠLL‹Áë ŠOQPèFšÿÿƒÄ;D$uX‹D$ƒÇƒÀÆE ‰D$éØýÿÿƒþu‹D$3öƒÇƒÀ‰D$é¾ýÿÿƒþu";\$ }‹D$ƒÇƒÀÆE ‰D$éœýÿÿƒþu‹D$ƒÇƒÀ‰D$é„ýÿÿ_^‹Ã][YËÿ©Ê¡ÈËÈúÈŠÊÆÊ-ÉŒÉëÉËÊ      SV‹t$3ɃÆW€>u_€~xuYƒÆ²;Š„ÀuŠ^:Útv„Àu¾ÃëƒÈÿxЃÿ6w&3ÛŠŸôËÿ$äËÁá ÏëÁáLÉëÁáL©ù}AƒÆ묲;Š„ÀuŠ^:Út „Àu¾ÃëƒÈÿ ‰LHÐù}ƒÆëÓQ諃Ä_^[Ã_^ƒÈÿ[Ã|˃ˌ˓ˋD$ ‹L$+Á™+ÂÑøƒè„æH„®H…€9…û¾AƒøatWƒøq…éŠAƒÁ„À…Û€yu…ÑŠAƒÁ„À…Àyo…¹ŠAƒÁ„À…«€yt…¡¸"ÊAƒÁ„À…€yp…ƒŠAƒÁ„Àuy€yousŠAƒÁ„Àui€ysuc¸'À9uX€yauRŠAƒÁ„ÀuH€ymuBŠAƒÁ„Àu8€ypu2¸&ÊA„Àu%€ytu€9u¾Aƒøgt ƒølu ¸<ø>Ã3ÀÃS‹\$V‹t$W‹|$Š„Àu3À3ÉŠFŠLL‹Áë ŠVRPè"—ÿÿƒÄƒÀûƒøwO3ÉŠˆDÎÿ$0ΊŠGF:ÐumŠŠGF:ÊucŠŠGF:ÁuYŠŠGF:ÐuO늊FG:ÊuCŠŠFG:Áu9뇊„Àu 3Ò3ÀŠWŠDLë ŠOQPè«–ÿÿƒÄƒÀûƒøw3ÒŠhÎÿ$•`Î_^3À[Ã_^¸[Ëÿ¼Í²Í¨ÍÒÍèÍIÎ%΋T$‹L$VŠ‹t$„Àt;Ît€9u8AuŠBƒÁB„Àuç3À;Î^”ÀÃ^3ÀÃSV‹t$W‹|$‹ÞŠ„Àu3À3ÉŠFŠL8L‹Áë ŠVRPè´•ÿÿƒÄƒÀûƒøw3ÉŠˆ@Ïÿ$0σÆëƒÆ뽃Æ븋Æ_+Ã^[ÃIÏÏ Ï%ÏV‹t$ W‹|$ Š„Àu3À3ÉŠFŠL8L‹Áë ŠVRPè'•ÿÿƒÄƒø |ƒø ~ƒøuƒÆëÊ‹Æ_^ÃS‹\$V‹t$;ótaU‹l$W‹|$ Š„Àu3À3ÉŠFŠL(L‹Áë ŠVRPèÉ”ÿÿƒÄƒÀûƒøwÿ$…dЃÆëƒÆë‹ÇGÿÿÿÿA‰ƒÆ‹OA;ó‰Ou«_]^[˃ÆB;ó‰t*Š„Àu3À3ÉŠFŠL(L‹Áë ŠVRPèc”ÿÿƒÄƒø uƒÆÇGÿÿÿÿë±IÐùÏþÏÐ"ÐЋD$‹ÈÁùùßùØ}(…Éu'ŠˆDÿ„ÉuƒÈÿÃùÿu=þÿt=ÿÿuƒÈÿËD$…ÀŒ£=€} ‹L$ˆ¸Ã=}‹L$‹ÐÁú$?€ÊÀ €ˆˆA¸Ã=})‹L$‹ÐÁú €Êàˆ‹ÐÁú€â?$?€Ê€ €ˆAˆQ¸Ã=}7‹L$‹ÐÁú€Êðˆ‹ÐÁú €â?€Ê€ˆQ‹ÐÁú€â?$?€Ê€ €ˆAˆQ¸Ã3ÀËD$…À|F=} ‹L$f‰¸Ã=}+‹L$-‹Ð%ÿÁú ê(-$f‰Af‰¸Ã3ÀøxÃì¹øþSUVW‹|$¾p‹Ç+ÏŠˆ@Nu÷‹t$ 3À‹ÖŠˆDÿ€ùt „Ét9…í@ƒÂ=€|Þx‰t$ 3í‰L$·x‹D$ ‹ƒûÿuÆD/LfÇÿÿÆÆFé…Û}ƒûüŒž²*ÓˆT/LÆfÇéòû€}1ŠƒDÿ<t „Àt;Ý…kˆD/LÆ…Ûˆ^u»ÿÿf‰é¹SèœýÿÿƒÄ…À}‹D$ÆD/LfÇÿÿÆÆFéŽûÿÿ‹Ëºƒá‹ÃÓâÁø‰D$‹ÃÁø‰T$‹T$3ɃàŠŠÀõ‹T$ È…ÀðtÆD/Lë(‹T$3ÉŠŠÀöÈ‹L$… …ÀðtÆD/LëÆD/LVRSèIýÿÿˆ‹D$$ƒÄf‰‹L$‹\$ EƒÁƒÃƒÆý‰L$‰\$ Œ©þÿÿ‹D$$‹L$(…À‰t‰‡ptE¸@Ô‰‡L‰‡P‰‡T¸ Ô‰‡X‰‡\‰‡`¸Õ‰‡d‰‡h‰‡lÇG<@ÕÇG@ðÕ‹Ç_^][ƒÄÃ_^]3À[ƒÄËD$P‹D$‹ˆtQÿpƒÄ©ÿÿt3ÀËÐ3ÉÁúV¾ŠŠÀö‹ÐÁúƒâʋȃá‹•ÀðÓæ#Æ^ËD$P‹D$‹ˆtQÿpƒÄ©ÿÿt3ÀËÐ3ÉÁúV¾ŠŠÀõ‹ÐÁúƒâʋȃá‹•ÀðÓæ#Æ^ËD$P‹D$‹ˆtQÿpƒÄ©ÿÿuPèZûÿÿƒÄ…À|3ÀøËD$ SU‹l$VW‹U;Ð„Ž‹\$$‹t$ ‹|$ë‹\$$3ÀŠŒ‡x¾„‡xA…Àu@‹tRQÿ—pT$(RPè6ûÿÿ‹ƒÄ+Ú;Ã@‹m3Ò3ÛL$ ŠUŠ\:LT+ý‹l$ë+;ÃB‰U‹Šˆ‹BAH‰uñ‹U‹D$;Ðu€_^][ËD$ SUV‹t$W‹;Èt_‹|$ ‹l$‹‹T$$;ÂtM3ÒŠf‹„Uxf…Àu#‹…tQPÿ•p‹3ÒƒÄ3ÛŠŠ\*LL ýëA‰‹f‰‹‹D$ƒÁ‰‹;Èu©_^][øüø ËD$ PèVƒÄƒøÿu3ÀËL$ˆAI‹D$Ç€×ÇA°ÙÇA4ÐÖ‰AL‰¸ËD$‹L$ ‹T$PQRh8ù臂ÿÿƒÄÃS‹\$VW…Ûu _^¸[Ã3ÿ¾ ‹PSè,ƒÄ…ÀuƒÆGþ8 |ä_^ƒÈÿ[ËÇ_^[ËT$V‹t$ ŠŠBFþÿÿÿÿÿÿÿÿÿfþÿÿÿÿÿÿÿÿÿÿw  !"#$%&'CDATA[°@€(0&°PPN€OPWpX°X@YàRÀU°VpY0RZ€Z    !"# $p$À$Ð# %p%Ð#Ð#Ð%&°@€(0&°PPN€OPWpX°X@YàRÀU°VpY0RZ€Z    !"# $p$À$Ð# %p%Ð#Ð#Ð%&°@€(0&°PPN€OPWpX°X@YàRÀU°VpY0RZ€Z    !"# $p$À$Ð# %p%Ð#Ð#Ð%&°@€(0&°PPN€OPWpX°X@YàRÀU°VpY0RZ€Z    !"# $p$À$Ð# %p%Ð#Ð#Ð%&°@€(0&°PPN€OPWpX°X@YàRÀU°VpY0RÀ[ \    !"# $°@€(0&°PPN€OPWpX°X@YàRÀU°VpY0RÀ[ \    !"# $°@€(0&°PPN€OPWpX°X@YàRÀU°VpY0R`\ \    !"# $°@€(0&°PPN€OPWpX°X@YàRÀU°VpY0R`\ \    !"# $CDATA[ }0e@bŒ€p–—З`˜P‘@”@•°˜` \_    !"# $ }0e@bŒ€p–—З`˜P‘@”@•°˜` \_    !"# $ }0e@bŒ€p–—З`˜P‘@”@•°˜` \_    !"# $ }0e@bŒ€p–—З`˜P‘@”@•°˜` \_    !"# $CDATA[€´ð›€™ðÅÃpÄ`ÍÎÐÎ`Ï@È0Ë0̰ÏPÇp_Ða    !"# $€´ð›€™ðÅÃpÄ`ÍÎÐÎ`Ï@È0Ë0̰ÏPÇp_Ða    !"# $€´ð›€™ðÅÃpÄ`ÍÎÐÎ`Ï@È0Ë0̰ÏPÇp_Ða    !"# $€´ð›€™ðÅÃpÄ`ÍÎÐÎ`Ï@È0Ë0̰ÏPÇp_Ða    !"# $versionencodingstandaloneyesnoISO-8859-1US-ASCIIUTF-8UTF-16UTF-16BEUTF-16LEã8þh¤à€Ö àpÖàÖ0àÒÀáàÙÐà$ðÑÑÐÐ %C^{‹´ÍÝï#<K xmltok.dllXmlGetUtf16InternalEncodingXmlGetUtf16InternalEncodingNSXmlGetUtf8InternalEncodingXmlGetUtf8InternalEncodingNSXmlInitEncodingXmlInitEncodingNSXmlInitUnknownEncodingXmlInitUnknownEncodingNSXmlParseXmlDeclXmlParseXmlDeclNSXmlPrologStateInitXmlPrologStateInitExternalEntityXmlSizeOfUnknownEncodingXmlUtf16EncodeXmlUtf8Encode ðHðLðTð8ð,ð|ð„ð  (4øþØ8ùˆ ˆ À8ùˆýhÈ÷  PÈ÷T0A0H0R0a0t0‚0¦0²0Ì0Ð0Ô0Ø0Ü0à0ä011%1F1U1p1t1x1|1Í1ø1ÿ1 2252O2X2o22”2˜2œ2 2À2Ç2Ô2ð2ô2ø283h3š3¬3Ø3ß3ð34494E4b4n4‹4£4Ä4È4Ì4Ð4Ô45X5j5˜5À5Ø5ï5û56X6ˆ6­6Ë6ê6ñ677'7p7t7x7|7€7„7Ø788/8;8U8˜8È8ø8969B9\9¨9Ø9::%:m::—:¥:¬:»:Ô:Ø:Ü:à:";C;a;l;†;œ;Ð;×;ä;<<=>t>“>­>¹>Ó>??-?S?f?w??ž?ª?Ä?È?Ì?Ð?Ô?Ø?Ü?à? 00!010H0L0P0T00Ý0è011%1:1J1U1p1t1x1|1€1„1ˆ1Ä1Ë1á1ú12,2<2Q2h2l2p2t2x2|2€2„2¿2Ö2â2ü2F3ˆ3¹3À3ú34=44¯4ê4 5?5_5š5»5f6š7(8,8084888<8@8D8H8L8P8T8X8\8`8d8h8l8p8t8x8|8¶8,: ;;;;; ;$;(;,;0;4;8;<;@;D;H;L;P;T;X;\;`;¨;¯;p¿>†??0ðA0H0æ0í0p2t2x2|2€2„2ˆ2Œ22°2´2¸2¼2À2Ä2È2Ì2Ð2Ô2ô2ø2ü2333(3,3034383<3@3D3H3º3Á3x4|4€4„4ˆ4Œ4î4õ4»5Â5ƒ6Š6x7|7€7„7ˆ7Œ7¬7°7´7¸7¼7À7Ä7È7è7ì7ð7ô7ø7ü7›899Ì9Ó9i:p:°:´:¸:¼:À:Ä:ä:è:ì:ð:ô:ø:ü:; ;$;(;v;};<<2=ÿ=>3>:>¸?¼?À?Ä?È?Ì?Ð?Ô?Ø?ø?ü?@L000 0,0004080<0@0D0H0L0P0T0X0\0p0t0x0|0€0„0ˆ0Œ00ê0ñ0L1S1­2´2K4R4 5566 66666 6$6(6,6064686<6@6D6H6L6P6T6|6€6„6ˆ6¨6¬6°6´6¸6Ø6Ü6à6ä6è6ì6ð6ô6ø6ü67$7(7,7074787“7×7Þ788@8D8H8L8P8T8X8\8`8d8h8l8ˆ8Œ8è8ï8°9·9X:\:`:d:h:l:p::”:˜:œ: :¤:¨:;;Ð;×;p >>>>>0>4>†>>@?D?H?L?P?T?X?\?`?¶?½?P h0l0p0t0x0|0€0„0í022 22222 2$2c2j2¨2¬2°2´2,333l5p5t5x5|5€5„5ˆ5Œ55”5ê5ñ5\6`6d6h6~7…7ó7ú78888 8@8D8Ô8Û89 9999¢9ì9ð9ô9ø9ü9:ã<ê<>>> >³?º?`ìä0è0ì0ð0£2á3P4T4X4\4`4d4h4l4p4t4x4|4€4„4ˆ4Œ44”4˜4œ4 4¤4Ç4Î4ô4ø4ü45œ5ú6¬7°7´7¸7¼7À7Ä7È7Ì7Ð7Ô7Ø7Ü7à7ä7è7ì7ð7ô7ø7ü78[8b8s8Œ8 99$9=9È9Ì9Ð9Ô9Ø9Ü9à9::: :::: <<%<><¢<©<º<Ó<+=2=C=\=>>=>V>œ? ?¤?¨?¬?°?´?¸?¼?Ü?à?ä?è?ì?ð?ô?ø?ü?p0 0$0(0,00040T0X0\0`0d0h0l0p0t01 1¬1°1´1¸1¼1À1/262G2`2ä2ë2ü23Ä3Ë3t4x4|4€4„4ˆ4¨4¬4°4´4¸4¼4À4Ä4ä4è4ì4ð4ô4ø4Â5;6B6S6l6ì6ó677®7µ7ì7ð7ô7ø7ü78 8$8(8,8084888<8\8`8d8Ï8Ö8é89`9g9z9“9:,;3;{;‚;•;®;œ< <¤<¨<¬<°<´<¸<¼<Ü<à<ä<è<ì<ð<==== =$=(=,=0=4=8=<=@=T=X=\=`=d=h=l=p=t=>>„>‹>€D40;041A1U1_1¨1¯1À1Ù1A2H2Y2r2€3„3ˆ3Œ33”3˜3œ3 3¤3¨3¬3°3´3¸3¼3À3Ä3È3Ì3Ð3ø3ü344$4(4,40444T4X4\4`4d4h4l4p4t4x4|4 4¤4¨4¬4°4´4*5‰55Û5â56666 6$6(6,6064686<6X6\6Ë6Ò6ã6ü6|7ƒ7”7­7084888<8@8D8H8h8l8p8t8x8|8€8ë8ò899 9§9¸9Ñ9@:D:H:L:P:T:t:x:|:€:„:ˆ:Œ:þ:;œ;£;¼;À;Ä;È;Ì;Ð;ä;è;]¼>À>Ä>È>Ì>Ð>Ô>U?ì80<0@0D0H0L0P0T0X0ª0±011 1$1¥1¬1ô3ø3ü3444 4444€4‡4ì4ð4ô4ø4¬6³6"7)7<7@7D7H7L7l7p7 88,8084888ô8`9d9h9l9p9t9ä9";;”;˜;œ; ;¤;¨;¬;°;´;¸;¼;À;Ä;È;Ì;Ð;Ô;Ø;Ü;à;ä;]<»=l>p>t>x>|>€>„>ˆ>Œ>>”>˜>œ> >¤>¨>¬>°>´>¸>¼>À>?#?4?M?Î?Õ?æ?ÿ? ˆ0Œ00”0˜0œ0 0À0Ä0È0Ì0Ð0Ô0Ø0Î2Õ2æ2ÿ2d3k3|3•3î3õ344Ú4á455`6d6h6l6p6t6x6|6€6 6¤6¨6¬6°6´6¸6¼6À6Ä6ä6è6ì6ð6ô6ø677 7$7(7,7074787Å7Ì7l8p8t8x8|8€8ô8û8 9%9²9¹9Ê9ã9¢:©:L;P;T;X;\;`;€;„;ˆ;Œ;;”;˜;œ;¼;À;Ä;È;Ì;Ð;¡<=#=4=M=Î=Õ=æ=ÿ=‘>˜>Ð>Ô>Ø>Ü>à>ä>?? ????? ?@?D?H?°?·?Ê?ã?°DB0I0\0u0r122b2i2|2•2„3ˆ3Œ33”3˜3œ3 3¤3Ä3È3Ì3Ð3Ô3Ø3ø3ü3444 44444 4$4(4<4@4D4H4L4P4T4X4\4è4ï4f5m5778#878A8‹8’8£8¼8%9,9=9V9d:h:l:p:t:x:|:€:„:ˆ:Œ::”:˜:œ: :¤:¨:¬:°:´:Ü:à:ä:è:; ;;;;8;<;@;D;H;L;P;T;X;\;`;„;ˆ;Œ;;”;˜; e>v>>???? ?$?(?H?L?P?T?X?\?`?Ì?Ó?ä?ý?ÀÔ‚0‰0š0³0$1(1,1014181X1\1`1d1h1l1p1ï1ö1Ž2•2¬2°2´2¸2¼2À2Ô2Ø2N3U34484<4@4D4H4L4P4T4¾4Å4¬5°5´5¸5¼5À5Ä5È5F6$7(7,7074787<7@7D7›7¢78 888–88è:ì:ð:ô:ø:ü:;;; ;q;x;ä;è;ì;ð;=¤=>>0>4>8><>@>`>d> ??0?4?8?ü>??? ????? ?$?(?,?0?4?8?\h0l0p0t0x0|0€0„0ˆ0Œ00”0˜0œ0 0¤0¨0Ø1Ü1à1ä1è1ì1ð1ô1ø1ü1222 2222P3T3X3\3`3d3h3l3p3t3x3|3€3„3ˆ3Œ33À4Ä4È4Ì4Ð4Ô4Ø4Ü4à4ä4è4ì4ð4ô4ø4ü45064686<6@6D6H6L6P6T6X6\6`6d6h6l6p6 7¤7¨7¬7°7´7¸7¼7À7Ä7È7Ì7Ð7Ô7Ø7Ü7à799 9$9(9,9094989<9@9D9H9L9P9T9X9ˆ:Œ::”:˜:œ: :¤:¨:¬:°:´:¸:¼:À:Ä:È:ø;ü;<<< <<<<< <$<(<,<0<4<8 / 939786979 0 1004 ` !b Î#¢#¢%æ%æ,Ò,Ò*–*–(F(FŠŠbb ¶ ¶&&¶¶  JJ!b!bÖÖ__IMPORT_DESCRIPTOR_xmltok__NULL_IMPORT_DESCRIPTORxmltok_NULL_THUNK_DATA_XmlPrologStateInit__imp__XmlPrologStateInit_XmlPrologStateInitExternalEntity__imp__XmlPrologStateInitExternalEntity_XmlUtf8Encode__imp__XmlUtf8Encode_XmlUtf16Encode__imp__XmlUtf16Encode_XmlSizeOfUnknownEncoding__imp__XmlSizeOfUnknownEncoding_XmlInitUnknownEncoding__imp__XmlInitUnknownEncoding_XmlGetUtf8InternalEncoding__imp__XmlGetUtf8InternalEncoding_XmlGetUtf16InternalEncoding__imp__XmlGetUtf16InternalEncoding_XmlInitEncoding__imp__XmlInitEncoding_XmlParseXmlDecl__imp__XmlParseXmlDecl_XmlGetUtf8InternalEncodingNS__imp__XmlGetUtf8InternalEncodingNS_XmlGetUtf16InternalEncodingNS__imp__XmlGetUtf16InternalEncodingNS_XmlInitEncodingNS__imp__XmlInitEncodingNS_XmlParseXmlDeclNS__imp__XmlParseXmlDeclNS_XmlInitUnknownEncodingNS__imp__XmlInitUnknownEncodingNS/ 939786979 0 1014 ` b Î ¢#æ%Ò,–*F(Šb¶ &¶ Jb!Ö!          _XmlGetUtf16InternalEncoding_XmlGetUtf16InternalEncodingNS_XmlGetUtf8InternalEncoding_XmlGetUtf8InternalEncodingNS_XmlInitEncoding_XmlInitEncodingNS_XmlInitUnknownEncoding_XmlInitUnknownEncodingNS_XmlParseXmlDecl_XmlParseXmlDeclNS_XmlPrologStateInit_XmlPrologStateInitExternalEntity_XmlSizeOfUnknownEncoding_XmlUtf16Encode_XmlUtf8Encode__IMPORT_DESCRIPTOR_xmltok__NULL_IMPORT_DESCRIPTOR__imp__XmlGetUtf16InternalEncoding__imp__XmlGetUtf16InternalEncodingNS__imp__XmlGetUtf8InternalEncoding__imp__XmlGetUtf8InternalEncodingNS__imp__XmlInitEncoding__imp__XmlInitEncodingNS__imp__XmlInitUnknownEncoding__imp__XmlInitUnknownEncodingNS__imp__XmlParseXmlDecl__imp__XmlParseXmlDeclNS__imp__XmlPrologStateInit__imp__XmlPrologStateInitExternalEntity__imp__XmlSizeOfUnknownEncoding__imp__XmlUtf16Encode__imp__XmlUtf8Encodexmltok_NULL_THUNK_DATAxmltok.dll/ 939786979 0 610 ` Lã8‚à .idata$2DX@0À.idata$6 vX@ À xmltok.dll@comp.idèÿÿ.idata$2@Àh.idata$6.idata$4@Àh.idata$5@Àh8P__IMPORT_DESCRIPTOR_xmltok__NULL_IMPORT_DESCRIPTORxmltok_NULL_THUNK_DATAxmltok.dll/ 939786979 0 145 ` Lã8P.idata$3<@0À@comp.idèÿÿ__NULL_IMPORT_DESCRIPTOR xmltok.dll/ 939786979 0 172 ` Lã8l.idata$5d@0À.idata$4h@0À@comp.idèÿÿxmltok_NULL_THUNK_DATAxmltok.dll/ 939786979 0 536 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XmlGetUtf16InternalEncoding@comp.idèÿÿ.text  .idata$5.idata$4.idata$6'B__imp__XmlGetUtf16InternalEncoding__IMPORT_DESCRIPTOR_xmltokxmltok.dll/ 939786979 0 540 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6 à@ Àÿ%  XmlGetUtf16InternalEncodingNS@comp.idèÿÿ.text  .idata$5.idata$4.idata$6 )D__imp__XmlGetUtf16InternalEncodingNS__IMPORT_DESCRIPTOR_xmltokxmltok.dll/ 939786979 0 535 ` Lã8þ .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XmlGetUtf8InternalEncoding@comp.idèÿÿ.text  .idata$5.idata$4.idata$6&A__imp__XmlGetUtf8InternalEncoding__IMPORT_DESCRIPTOR_xmltok xmltok.dll/ 939786979 0 539 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6 à@ Àÿ%  XmlGetUtf8InternalEncodingNS@comp.idèÿÿ.text  .idata$5.idata$4.idata$6 (C__imp__XmlGetUtf8InternalEncodingNS__IMPORT_DESCRIPTOR_xmltok xmltok.dll/ 939786979 0 512 ` Lã8ò .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XmlInitEncoding@comp.idèÿÿ.text  .idata$5.idata$4.idata$66__imp__XmlInitEncoding__IMPORT_DESCRIPTOR_xmltokxmltok.dll/ 939786979 0 516 ` Lã8ô .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XmlInitEncodingNS@comp.idèÿÿ.text  .idata$5.idata$4.idata$68__imp__XmlInitEncodingNS__IMPORT_DESCRIPTOR_xmltokxmltok.dll/ 939786979 0 527 ` Lã8ú .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XmlInitUnknownEncoding@comp.idèÿÿ.text  .idata$5.idata$4.idata$6"=__imp__XmlInitUnknownEncoding__IMPORT_DESCRIPTOR_xmltok xmltok.dll/ 939786979 0 531 ` Lã8ü .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XmlInitUnknownEncodingNS@comp.idèÿÿ.text  .idata$5.idata$4.idata$6$?__imp__XmlInitUnknownEncodingNS__IMPORT_DESCRIPTOR_xmltok xmltok.dll/ 939786979 0 512 ` Lã8ò .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XmlParseXmlDecl@comp.idèÿÿ.text  .idata$5.idata$4.idata$66__imp__XmlParseXmlDecl__IMPORT_DESCRIPTOR_xmltokxmltok.dll/ 939786979 0 516 ` Lã8ô .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%   XmlParseXmlDeclNS@comp.idèÿÿ.text  .idata$5.idata$4.idata$68__imp__XmlParseXmlDeclNS__IMPORT_DESCRIPTOR_xmltokxmltok.dll/ 939786979 0 519 ` Lã8ö .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%   XmlPrologStateInit@comp.idèÿÿ.text  .idata$5.idata$4.idata$69__imp__XmlPrologStateInit__IMPORT_DESCRIPTOR_xmltok xmltok.dll/ 939786979 0 547 ` Lã8 .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6$à@ Àÿ%   XmlPrologStateInitExternalEntity@comp.idèÿÿ.text  .idata$5.idata$4.idata$6$,G__imp__XmlPrologStateInitExternalEntity__IMPORT_DESCRIPTOR_xmltok xmltok.dll/ 939786979 0 531 ` Lã8ü .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%   XmlSizeOfUnknownEncoding@comp.idèÿÿ.text  .idata$5.idata$4.idata$6$?__imp__XmlSizeOfUnknownEncoding__IMPORT_DESCRIPTOR_xmltok xmltok.dll/ 939786979 0 511 ` Lã8ò .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%   XmlUtf16Encode@comp.idèÿÿ.text  .idata$5.idata$4.idata$65__imp__XmlUtf16Encode__IMPORT_DESCRIPTOR_xmltok xmltok.dll/ 939786979 0 508 ` Lã8ð .text´º  `.idata$5ÄÈ@0À.idata$4ÒÖ@0À.idata$6à@ Àÿ%  XmlUtf8Encode@comp.idèÿÿ.text  .idata$5.idata$4.idata$64__imp__XmlUtf8Encode__IMPORT_DESCRIPTOR_xmltoklibwww/Library/External/zconf.h0100644000076400001440000001644106555414446016252 0ustar danielusers/* zconf.h -- configuration of the zlib compression library * Copyright (C) 1995-1998 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id: zconf.h,v 1.1 2025/07/22 16:53:58 frystyk Exp $ */ #ifndef _ZCONF_H #define _ZCONF_H /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. */ #ifdef Z_PREFIX # define deflateInit_ z_deflateInit_ # define deflate z_deflate # define deflateEnd z_deflateEnd # define inflateInit_ z_inflateInit_ # define inflate z_inflate # define inflateEnd z_inflateEnd # define deflateInit2_ z_deflateInit2_ # define deflateSetDictionary z_deflateSetDictionary # define deflateCopy z_deflateCopy # define deflateReset z_deflateReset # define deflateParams z_deflateParams # define inflateInit2_ z_inflateInit2_ # define inflateSetDictionary z_inflateSetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint # define inflateReset z_inflateReset # define compress z_compress # define compress2 z_compress2 # define uncompress z_uncompress # define adler32 z_adler32 # define crc32 z_crc32 # define get_crc_table z_get_crc_table # define Byte z_Byte # define uInt z_uInt # define uLong z_uLong # define Bytef z_Bytef # define charf z_charf # define intf z_intf # define uIntf z_uIntf # define uLongf z_uLongf # define voidpf z_voidpf # define voidp z_voidp #endif #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) # define WIN32 #endif #if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386) # ifndef __32BIT__ # define __32BIT__ # endif #endif #if defined(__MSDOS__) && !defined(MSDOS) # define MSDOS #endif /* * Compile with -DMAXSEG_64K if the alloc function cannot allocate more * than 64k bytes at a time (needed on systems with 16-bit int). */ #if defined(MSDOS) && !defined(__32BIT__) # define MAXSEG_64K #endif #ifdef MSDOS # define UNALIGNED_OK #endif #if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC) # define STDC #endif #if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__) # ifndef STDC # define STDC # endif #endif #ifndef STDC # ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ # define const # endif #endif /* Some Mac compilers merge all .h files incorrectly: */ #if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__) # define NO_DUMMY_DECL #endif /* Borland C incorrectly complains about missing returns: */ #if defined(__BORLANDC__) # define NEED_DUMMY_RETURN #endif /* Maximum value for memLevel in deflateInit2 */ #ifndef MAX_MEM_LEVEL # ifdef MAXSEG_64K # define MAX_MEM_LEVEL 8 # else # define MAX_MEM_LEVEL 9 # endif #endif /* Maximum value for windowBits in deflateInit2 and inflateInit2. * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files * created by gzip. (Files created by minigzip can still be extracted by * gzip.) */ #ifndef MAX_WBITS # define MAX_WBITS 15 /* 32K LZ77 window */ #endif /* The memory requirements for deflate are (in bytes): (1 << (windowBits+2)) + (1 << (memLevel+9)) that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) plus a few kilobytes for small objects. For example, if you want to reduce the default memory requirements from 256K to 128K, compile with make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits that is, 32K for windowBits=15 (default value) plus a few kilobytes for small objects. */ /* Type declarations */ #ifndef OF /* function prototypes */ # ifdef STDC # define OF(args) args # else # define OF(args) () # endif #endif /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, * just define FAR to be empty. */ #if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__) /* MSC small or medium model */ # define SMALL_MEDIUM # ifdef _MSC_VER # define FAR __far # else # define FAR far # endif #endif #if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__)) # ifndef __32BIT__ # define SMALL_MEDIUM # define FAR __far # endif #endif /* Compile with -DZLIB_DLL for Windows DLL support */ #if (defined(_WINDOWS) || defined(WINDOWS)) && defined(ZLIB_DLL) # ifdef FAR # undef FAR # endif # include # define ZEXPORT WINAPI # ifdef WIN32 # define ZEXPORTVA WINAPIV # else # define ZEXPORTVA FAR _cdecl _export # endif #else # if defined (__BORLANDC__) && defined (_Windows) && defined (__DLL__) # define ZEXPORT _export # define ZEXPORTVA _export # else # define ZEXPORT # define ZEXPORTVA # endif #endif #ifndef FAR # define FAR #endif typedef unsigned char Byte; /* 8 bits */ typedef unsigned int uInt; /* 16 bits or more */ typedef unsigned long uLong; /* 32 bits or more */ #if defined(__BORLANDC__) && defined(SMALL_MEDIUM) /* Borland C/C++ ignores FAR inside typedef */ # define Bytef Byte FAR #else typedef Byte FAR Bytef; #endif typedef char FAR charf; typedef int FAR intf; typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC typedef void FAR *voidpf; typedef void *voidp; #else typedef Byte FAR *voidpf; typedef Byte *voidp; #endif #ifdef HAVE_UNISTD_H # include /* for off_t */ # include /* for SEEK_* and off_t */ # define z_off_t off_t #endif #ifndef SEEK_SET # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ #endif #ifndef z_off_t # define z_off_t long #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) # pragma map(deflateInit_,"DEIN") # pragma map(deflateInit2_,"DEIN2") # pragma map(deflateEnd,"DEEND") # pragma map(inflateInit_,"ININ") # pragma map(inflateInit2_,"ININ2") # pragma map(inflateEnd,"INEND") # pragma map(inflateSync,"INSY") # pragma map(inflateSetDictionary,"INSEDI") # pragma map(inflate_blocks,"INBL") # pragma map(inflate_blocks_new,"INBLNE") # pragma map(inflate_blocks_free,"INBLFR") # pragma map(inflate_blocks_reset,"INBLRE") # pragma map(inflate_codes_free,"INCOFR") # pragma map(inflate_codes,"INCO") # pragma map(inflate_fast,"INFA") # pragma map(inflate_flush,"INFLU") # pragma map(inflate_mask,"INMA") # pragma map(inflate_set_dictionary,"INSEDI2") # pragma map(inflate_copyright,"INCOPY") # pragma map(inflate_trees_bits,"INTRBI") # pragma map(inflate_trees_dynamic,"INTRDY") # pragma map(inflate_trees_fixed,"INTRFI") # pragma map(inflate_trees_free,"INTRFR") #endif #endif /* _ZCONF_H */ libwww/Library/External/zlib.dll0100644000076400001440000015000006555414446016405 0ustar danielusersMZÿÿ¸@Ⱥ´ Í!¸LÍ!This program cannot be run in DOS mode. $Ò'~S–F–F–F–F¤F@—FZ—FRich–FPEL5à!  ˜8P§°  À¿Õ4¾<ðhl°\.textÊ—˜ `.rdata•°œ@@.data¬Ð²@À.rsrchðÈ@@.reloc®Ì@B‹T$UWVSƒì4‹ê‹Ut‹]p9„wÁêB‹½ˆ‰T$0‹El;Çs‹ø‰\$(‹u0‹Md‰t$$‰|$ñ‰t$ f‹f‹\3ÿÆf‰T$‰4$‹u$î+Îw3ɉL$,‹U8‰T$ ‹Uhf‹l$‹D$L‰T$‹T$$‹ú|$(‹t$ O‰|$ëNƒD$0„Ñf98t%ÿf‹F;ȃºÿL$0uãé¯f;,uÞéã‹|$%ÿf‹F;ȃƒl$0v¬f98„¬%ÿf‹F;ȃmf98„€%ÿf‹F;ȃRf98„T%ÿf‹F;ȃ7f98„(%ÿf‹F;ȃf98„ü%ÿf‹F;ȃf98„Ð%ÿf‹F;ȃæf98„¤%ÿf‹F;ȃËf98„u%ÿf‹F;ȃ°f98„F%ÿf‹F;ȃ•f98„%ÿf‹F;ȃzf98„è%ÿf‹F;ȃ_f98t}%ÿf‹F;ȃHf98tz%ÿf‹F;ȃ1f98ts%ÿf‹F;ȃf98tl%ÿf‹F;ȃf98te%ÿf‹F;ȃìƒl$0‡Yþÿÿéþÿÿf;,…yÿÿÿƒD$0éf;,u€ƒD$0éf;,u‡ƒD$0éõf;,uŽƒD$0éåf;,u•ƒD$0éÕf;,…ÿÿÿƒD$0éÁf;,…ßþÿÿƒD$0é­f;,…°þÿÿƒD$0é™f;,…þÿÿƒD$0 é…f;,…RþÿÿƒD$0 ëtf;,…&þÿÿƒD$0 ëcf;,…úýÿÿƒD$0 ëRf;,…ÎýÿÿƒD$0 ëAf;,…¢ýÿÿƒD$0ë0f;,…výÿÿƒD$0ëf;,…JýÿÿƒD$0ë‹|$$f;,8…ýÿÿ‹ú‹t$ ø‹V3Wt- Òt¾ëQf Òt¾ëEâÿÿÿt¾ë6¾ë/ƒÇƒÆ¹?ó§tƒî‹Wü3 ÒuFf Òu FâÿÿÿuF+t$ ;t$(w‹t$ ‹L$,‹T$$éŒüÿÿ‰t$(‰D$;t$s"‹L$ ‹T$$ÎòN‰t$f‹Yÿ‹t$ ‹L$,é\üÿÿ‹\$‹l$H‹L$(‰]h‹El;Èw‹ÁƒÄ4[^_]à GVMat32 optimised assembly code written 1996-98 by Gilles Vollant œX‹È5PœX3ÁtQœœY‹Á5 PœX3Át¸¢Ã¸ëø¸ëñÌÌÌV‹t$ W‹|$ ‹ÏáÿÿÁï…öu ¸_^ S‹\$…Û†ïUû°‹Ãr¸°+؃øŒ¡‹èÁí3҃芃ÆÊ3ÒŠVñùÊ3ÒŠVòùÊ3ÒŠVóùÊ3ÒŠVôùÊ3ÒŠVõùÊ3ÒŠVöùÊ3ÒŠV÷ùÊ3ÒŠVøùÊ3ÒŠVùùÊ3ÒŠVúùÊ3ÒŠVûùÊ3ÒŠVüùÊ3ÒŠVýùÊ3ÒŠVþùÊ3ÒŠVÿùÊùM…dÿÿÿ…Àt 3ÒŠÊFùHuô‹Á3Ò¹ñÿ÷ñ‹Ç¿ñÿ‹Ê3Ò÷÷…Û‹ú‡ÿÿÿ]‹Ç[Áà_ Á^ ƒì8‹L$H‹T$<‹D$DVW‹|$H‰L$ ‹L$T‰T$j8‰D$ ‹hÐT$QR‰D$(ÇD$8ÇD$<ÇD$@èK…Àu@D$jPèû‹ðƒþtL$Qèj …ö¸ûÿÿÿt‹Æ_^ƒÄ8‹T$D$P‰èG _^ƒÄ8‹D$‹L$ ‹T$jÿP‹D$ QRPè5ÿÿÿ¡ЅÀt踠äÃVW3ÿ3ÀŠh°¹+ʺÓâ ú@ƒørä3Ò¹ ä‹Â¾¨tÑè3ÇëÑèNuñ‰ƒÁBù è|Ü_ÇÐ^ÃV‹t$ …öu3À^ ¡ÐW…ÀStèÿÿÿ‹T$‹D$ƒú÷Ђì‹úÁï‹È3ÛŠáÿ3Ë‹ØÁë‹ äƒê3ÃF‹È3ÛŠáÿ3Ë3ÛŠ^‹  äÁè3ÈF‹Á%ÿ3Ã3ÛŠ^‹… äÁé3ÁF‹Èáÿ3Ë3ÛŠ^‹  äÁè3ÈF‹Á%ÿ3Ã3ÛŠ^‹… äÁé3ÁF‹Èáÿ3Ë3ÛŠ^‹  äÁè3ÈF‹Á%ÿ3Ã3ÛŠ^‹… äÁé3ÁF‹Èáÿ3ËÁè‹  ä3ÁFO…ÿÿÿ…Òt‹È3ÛŠáÿ3ËÁè‹  ä3ÁFJuâ[_÷Ð^ ‹D$‹L$ ‹T$P‹D$QjjjjRPè‹D$SU3Ò3íV;ÂW„‹ Њ:…ƒ|$08…÷‹|$;úu ¸þÿÿÿ_^][ ‹G ‰W;Âu ÇG @¥‰W(9W$uÇG$`¥‹L$ƒùÿu ÇD$‹L$‹\$ ;Ú}½÷Û‹D$$ƒøŒ†ƒø }ƒ|$…rƒûŒiƒû`;ÊŒXƒù O‹D$(;ÂŒCƒø:‹W(h¼jRÿW ‹ðƒÄ …öu ¸üÿÿÿ_^][ ‰w‰n½‹ËÓå‰^(‹\$$‰>jK‰NH‰n$EÿU‰F,¸ÓàƒÁ‰FDH‰FL¸«ªªª÷áÑê‰VP‹O(QÿW ‹V$ƒÄ ‰F0‹G(jRPÿW ‹NDƒÄ ‰F8‹W(jQRÿW ‰F…Àt:‹ÑWÑêÆFPHȉ–œ‹T$,‰Ž‹L$‰–€‰N|èG_^][ ¡äW‰Gè¸üÿÿÿ_^][ ¸þÿÿÿ_^][ _^]¸úÿÿÿ[ ‹D$SUVW‹|$…À‹ï„Û‹X…Û„Ћt$…ö„ă{*…º‹@0WVPè~ùÿÿƒÿ‹L$‰A0s 3À_^][ ‹C$úþÿÿ;øv‹è+ý÷‹{0‹Í‹Ñ3ÀÁéó¥‹Êƒáó¤‹s0‹KP‰kd‰kTЉC@Óà3ÉŠNuý3Á‹KL#Á3Ò‰C@‹C0‹{@3É‹kLŠL‹Á‹KPÓç3É3Ç‹{<#ʼnC@f‹ G‹{,‹Â#Ç‹{8f‰ G‹K@‹C‹P‹pB‰P_ˆ ‹HA^‰HËD$SVW‹p‹H‹V;Ñv‹Ñ…ÒtT‹v‹x ‹Ê‹ÙÁéó¥‹Ëƒáó¤‹x ‹Hú‰x ‹qò‰q‹X‹x‹HÚ+ú‰X‰x‹q+ò‰q‹@‹H…Éu‹H‰H_^[ÃV‹t$…öW„–‹F…À„‹‹xƒÿ*t ƒÿqtÿšuv‹@…Àt P‹F(PÿV$ƒÄ‹N‹A<…Àt ‹V(PRÿV$ƒÄ‹F‹@8…Àt ‹N(PQÿV$ƒÄ‹V‹B0…Àt P‹F(PÿV$ƒÄ‹N‹V(QRÿV$ƒÄ3ÀƒÿqÇF•ÀH$ý_^Â_¸þÿÿÿ^ÂSUV‹t$…ö‹FW‰D$„š‹l$…턎…À„†¹‹ýó¥‹E(h¼jPÿU ‹ØƒÄ …Ûu ¸üÿÿÿ_^][‹t$¹¯‹û‰]ó¥‹K$‰+‹U(jQRÿU ƒÄ ‰C0‹C$‹M(jPQÿU ‹SDƒÄ ‰C8‹E(jRPÿU ‹‹”ƒÄ ‰C<‹U(jQRÿU ‹{0ƒÄ …ÿ‰C„Ü‹K8…ɄыK<…ɄƅÀ„¾‹K$‹T$Ñá‹r0‹éÁéó¥‹Íƒáó¤‹K$‹r8‹{8Ñá‹éÁéó¥‹Íƒáó¤‹KD‹r<‹{<Ñá‹éÁéó¥‹Íƒáó¤‹K ‹r‹{‹éÁéó¥‹Íƒáó¤‹J‹z‹s+ÏΉK‹‹”‹ÑÑêPNʉƒœ‰‹ƒŒ‹€ “t ‰ƒ ‰‹ ‰“( 3À_^][ÂUè«ýÿÿ¸üÿÿÿ_^][Â_^]¸þÿÿÿ[‹T$SV3ö‹B$‹JDÑà‰B4‹B9®€t WVèƒÄ‰FX‹FXƒøw!ƒ¾€tƒøu‹Nd‹Vh+Êùv‰nX‹Fpƒø‚‰9FX‡€‹Vd‹FlŠNp‹žœlýf‹Fdf+F\‹–˜€éHˆL$f‰S‹–‹ž˜ÿÿˆ ‹–˜‹L$B‰–˜áÿ3ÒŠ‘è»fÿ„–f=Œ–s%ÿÿ3ÉŠˆè¹‹Áë%ÿÿÁè3Ҋ躋Âfÿ„†€ ‹†”‹Ž˜‹VlH3Û;È‹Fp¹”Ã+ÈуÀþ‰Vl‰Fp‹NdA‹Ñ‰Nd;Õw>‹F@‹NP‹~0Óà3ÉŠL‹~L3Á‹N<#Ç3ÿ‰F@f‹u ‹NWQèpƒÄ‹F(ljF4‰F0‹F8ÇF…ÀÇF tjjjÿЉF<‰G0_^ÃSVW‹|$j@j‹G(PÿW ‹ðƒÄ …öu_^[ËO(h jQÿW ƒÄ ‰F$…Àu‹W(VRÿW$ƒÄ3À_^[Ë\$‹G(SjPÿW ƒÄ ‰F(…Àu‹N$‹W(QRÿW$‹G(ƒÄVPÿW$ƒÄ3À_^[ËL$jØWV‰^,‰N8ÇèæþÿÿƒÄ ‹Æ_^[Ãì0‹D$8S‹\$8U‹‹P‹C ‹k‰L$ ‹K4‰D$‹C0V;ÈW‰T$‰L$Ds+ÁHë‹C,+Á‰D$‹ƒø ‡+ ÿ$…|M‹t$ƒýs<‹D$‹|$…À„ 3ÉHŠÇD$L‹Ñ‹ÍÓâƒÅ‰D$ òGƒý‰t$‰|$rÎë‹|$‹Æƒà‹ÈÑèƒáƒø‰Kw‘ÿ$…¤MƒíNj̓áÁîÓî+é‰t$élÿÿÿ‹T$HD$ RL$(PT$0QD$8RPè '‹L$\‹T$4‹D$8ƒÄQ‹L$,R‹T$4PQRè‹ ƒÄ‰C…À„ïÁî‰t$ƒíÇé ÿÿÿÁî‰t$ƒíÇéõþÿÿ‹t$‹|$‹D$ƒý s,3Ò;ú„ 3ɉT$LŠO‹Ñ‹ÍÓâƒÅ‰|$ ò@ƒý ‰D$rÔ‹Ö‹Î÷ÒáÿÿÁê3Ñ…¢3í‹Á;ʼnK‰l$„&¸‰é‚þÿÿ‹T$…Ò„¼‹L$…É…‹s,‹T$D;Öu#‹C0‹{(;Çt‹×;ЉT$Ds+ÂH‹Èë+ò‹Î‰L$…Éug‹D$L‹L$HPQS‰S4è&‹S4‹s0ƒÄ ;Ö‰D$L‰T$Ds‹Î+ÊIë‹K,+Ê‹C,‰L$;Ðu ‹{(;÷t‹×;Ö‰T$Ds+òN‹Îë+‹ȉL$…É„^‹T$‹CÇD$L;Âv‹Â;Áv‹Á‹t$‹|$D‹È‹ÑÁéó¥‹Ê‹T$ƒá+Ðó¤‹L$‹|$‹t$DȉL$‹K+øð+ȉ|$‰t$D‰T$‰K…hýÿÿ‹C÷ØÀƒà‰éWýÿÿ‹t$ƒýs8‹D$‹|$…À„23ÉHŠÇD$L‹Ñ‹ÍÓâƒÅ‰D$ òGƒý‰|$rÒë‹|$‹Æ%ÿ?‹È‰Cƒáƒù‡‹Ðâàú ‡òÁèƒàj„P‹D$P‹H(QÿP ƒÄ ‰C …À„ÁîƒíÇCÇë‹t$‹|$‹S‹CÁê ƒÂ;Âshƒýs2‹D$…À„43ÉHŠÇD$L‹Ñ‹ÍÓâƒÅ‰D$ òGƒý‰|$rÒ‹K‹Æƒàƒí‹(±‹K Á‹SB‰S‹Â‹SÁê ƒÂ;Âr˜‹K¸;Ès!‹K‹(±‹K Ç‘‹SB‹Ê‰S;Èrß‹T$H‹K$RCSQRÇP‹C P詃ĉD$…À…!‰CÇë‹t$‹|$‹C‹K‹ÐÁèƒâƒà„;ȃ{‹C;ès3‹L$…É„;‹Ñ3ÉŠJ‰T$‹Ñ‹ÍƒÅÓâÇD$L òG;è‰|$rÍ‹…Xã‹K#Æ3ÒŠTÁÁ‰T$‹@ƒø‰D$4s‹Ê+ê‹S Óî‹K‰Š‹C@‰Céáƒø¹tHòƒè‰L$÷ØÀÊ$ø‰L$0ƒÀ ;és;‹L$…É„à‹Ñ3ÉŠJ‰T$‹Ñ‹ÍƒÅÓâ‹L$0ÇD$L òG;é‰|$rÉ‹T$‹ÊÓî‹L$‹ Xã#ÎÁ‹L$ÓîÊ+é‹K‰L$‹K‹ÑÁéƒâƒáŒ ‹T$Ð;ч©‹T$4‹L$ƒúu ƒù‚“ƒúu ‹S ‹TŠüë3Ò‹{ AH‰Tüuõ‹|$‰K‹C‹K‹ÐÁèƒâƒà„;È‚…þÿÿ‹L$H‹S$‹CQRL$@T$DQRL$,T$$Q‹K R‹ÐƒàÁêƒâQBRPÇCÇD$8 ÇD$@èùƒÄ$‰D$‹C P‹D$L‹H(QÿP$‹D$ ƒÄ…À…4‹T$H‹D$8‹L$‹S ‹k‰L$‹K4ƒÄ;ȉ|$‰T$‰L$Ds+ÁHë‹C,+Á‰D$‹C…À…ÇéÈøÿÿ‹D$H‰s ‰k‹Ï‹‹h+Ê‹T$Dé‹L$LQPÇ@‰h‰8S‰S4è‚ ƒÄ _^][ƒÄ0ËD$H‹L$Ç ƒÅýÁîÇ@¤Ð‰s ‰k‹h‰H‹‹×jý+Ñ‹L$HêP‰h‰8S‰K4è3 ƒÄ _^][ƒÄ0ËL$H‰s ‰k‹1‹i‰Q‹Ð+Ö‰‹D$Dê‹T$L‰iRQS‰C4èøƒÄ _^][ƒÄ0ËL$HÇ ‹ÐjýÇA„Љs ‰k‹1‹i+ÖꉋD$HQ‰y‰iS‰C4è³ƒÄ _^][ƒÄ0ËL$‹D$H‰K ‹L$‰k‹0‹h‹Ñ+Ö‰‹L$Dê‹T$LÇ@RP‰hS‰K4èlƒÄ _^][ƒÄ0ËD$‹L$H‰C ‹D$‰k‹9‹i‰A‹D$‹ð‰+÷î‰i‰S4‹T$LRQSè)ƒÄ _^][ƒÄ0ËD$H‹T$‰s ‰k‹h‰P‹‹Ï+Ê‹T$DéjüP‰h‰8S‰S4èíƒÄ _^][ƒÄ0ËD$H‹L$Ç ‹×Ç@`Љs ‰k‹h‰H‹+Ñ‹L$DêjýP‰h‰8S‰K4è¤ƒÄ _^][ƒÄ0ËC P‹D$L‹H(QÿP$‹D$ ƒÄƒøýuÇ ‹D$H‹T$‰s ‰k‹h‰P‹‹Ï+Ê‹T$Dé‹L$QP‰h‰8S‰S4èDƒÄ _^][ƒÄ0ËD$H‰s ‰k‹×‹‹h+Ñ‹L$Dê‹T$LRPÇ@‰h‰8S‰K4èƒÄ _^][ƒÄ0ËD$H‰s ‰k‹Ï‹‹h+Ê‹T$Dé‹L$LQPÇ@‰h‰8S‰S4èÆƒÄ _^][ƒÄ0ËD$H‹S R‹H(QÿP$‹D$P‹T$Ç ‹ÏÇ@DЉs ‰k‹h‰P‹ƒÄ+Ê‹T$DéjýP‰h‰8S‰S4èkƒÄ _^][ƒÄ0Ã|$ýuÇ ‹D$H‹L$‰s ‰k‹h‰H‹‹×+Ñ‹L$Dê‹T$RP‰h‰8S‰K4èƒÄ _^][ƒÄ0ËD$H‹L$‰s ‰k‹h‰H‹‹×+Ñ‹L$DêjüP‰h‰8S‰K4èãƒÄ _^][ƒÄ0ËT$HPRSèÌƒÄ _^][ƒÄ0Ãýv ‹T$ƒíBO‰T$Çë ‹L$D‹|$‹t$H‹D$L‰K4PVS茋K4‹S0ƒÄ ;Ñt7‹T$‰k‰S ‹T$‹.‰V‹×P+Õ‹nêV‰n‰>S‰K4èSƒÄ _^][ƒÄ0ÃÇë ‹L$D‹|$‹t$H‹D$‹T$‰C ‰k‹.‹Ç‰V‹V+ÅjÐV‰V‰>S‰K4èƒÄ _^][ƒÄ0ËL$‹D$H‹T$‰K ‹L$‰k‹0‹h‰P‹Ñ+Ö‰‹L$DêjýP‰hS‰K4èÃƒÄ _^][ƒÄ0ËT$‹D$H‹L$‰S ‰k‹0‹h‰H‹L$jþ‹Ñ‰‹L$H+ÖêP‰hS‰K4èƒÄ _^][ƒÄ0ÃA B€B«CZDAEGIL°LôLxA–AøAyHV‹t$ W‹|$ jVWè½ñÿÿ‹G(‹N(ƒÄ PQÿV$‹W$‹F(ƒÄRPÿV$‹N(ƒÄWQÿV$ƒÄ3À_^ËT$ ‹D$‹ÊSV‹t$‹ÙW‹x(Áéó¥‹Ëƒáó¤‹H(_Ê^‰H4‰H0[ËL$3Àƒ9”ÀËD$jj‹H(QÿP ƒÄ …Àt"ŠT$ŠL$ˆP‹T$ ˆH‹L$ljP‰HÃìS‹\$ UV‹t$$‹‹K‰D$(‹V ‹F0‹n‰T$$‹V4W‹~;ЉL$s+ÂHë‹F,+‰D$‹Mƒù ‡äÿ$V=‚ƒ|$ ‚’‹D$(‹L$‰F ‹D$,‰~‹;‰K‹È+Ï‹{ù‰‰{‰V4‹U‹ESVR3ÉŠM3ÒŠUPQRè‹S‹È‹‹~‰D$D‹F ‰T$(‹V4‰D$@‹F0ƒÄ;ЉL$0s+ÂHë‹F,+…ɉD$tI÷ÙɃáƒÁ‰MéEÿÿÿ‹E3ÉŠM‰E‰M ÇE‹E ;øsD‹D$…À„\H3ɉD$‹D$,ÇD$0Š‹Á‹ÏÓà‹L$(ƒÇ È‹E ‰L$(‹L$,A;ø‰L$,r¼‹ …Xã‹D$(#È‹EÈ3ɉD$ŠH‹D$(Óè‰L$‰D$(‹Á‹L$+ø3ÀŠ…Àu‹I‹D$‰MÇEé•þÿÿ¨tƒà‰E‹A‰E‹D$ÇEéuþÿÿ¨@„E¨ „ã‹D$ÇEéUþÿÿ‹E;øsB‹D$…À„‹L$,H‰D$3ÀŠ‹ÏÓà‹L$(ƒÇÇD$0 È‹E‰L$(‹L$,A;ø‰L$,r¾‹…Xã‹L$(#Á‹MÈ‹D$(‰M‹MÓèÇE‰D$(‹Á+ø‹E3ɉEŠM‰M ‹E ;øsD‹D$…À„–H3ɉD$‹D$,ÇD$0Š‹Á‹ÏÓà‹L$(ƒÇ È‹E ‰L$(‹L$,A;ø‰L$,r¼‹ …Xã‹D$(#È‹EÈ3ɉD$ŠH‹D$(Óè‰L$‰D$(‹Á‹L$+ø3ÀЍtƒà‰E‹I‹D$‰M ÇEé0ýÿÿ¨@…ð‰E ‹A Á‹D$‰Méýÿÿ‹E;øsB‹D$…À„Ø‹L$,H‰D$3ÀŠ‹ÏÓà‹L$(ƒÇÇD$0 È‹E‰L$(‹L$,A;ø‰L$,r¾‹…Xã‹L$(#Á‹M È‹D$(‰M ‹MÓèÇE‰D$(‹Á+ø‹F(‹Ê+È‹E ;Ès‹F,‹N(Â+Á‹M +Á‰D$ë‹Ê+ȉL$‹E…À‹D$„–…À…—‹N,;щL$u!‹F0‹N(;Át‹Ñ;Ðs+ÂHë ‹D$+Âë‹D$…Àug‰V4‹T$0RSVè+‹V4‰D$<‹F0ƒÄ ;ЉD$ s+ÂHë‹F,+‹N,‰D$;щL$u"‹N(‹D$ ;Át‹Ñ;Ðs+ÂHë ‹D$+Âë‹D$…À„Û‹L$BÇD$0Š ˆJÿ‹L$AH;N,‰L$‰D$u‹N(‰L$‹MI‰M…(ÿÿÿÇEéûÿÿ…À…—‹N,;щL$u!‹F0‹N(;Át‹Ñ;Ðs+ÂHë ‹D$+Âë‹D$…Àug‰V4‹T$0RSVèG‹V4‰D$<‹F0ƒÄ ;ЉD$ s+ÂHë‹F,+‹N,‰D$;щL$u"‹N(‹D$ ;Át‹Ñ;Ðs+ÂHë ‹D$+Âë‹D$…À„÷ŠMÇD$0ˆ BH‰D$ÇEéÁúÿÿ‹D$(‰~‰F ‹D$,‹+‹{‹ÈÇC+͉ù‰{‰V4‹T$0RSVèœƒÄ _^][ƒÄÃÇE ÇCÐЋD$(‹L$‰F ‹D$,‰~‹+‹{‰K‹Èjý+ÍSù‰‰{V‰V4èRƒÄ _^][ƒÄÃÇE ÇC¸Ðë´‹D$(‰~‰F ‹D$,‹+‹{‹ÈÇC+͉ù‰{‰V4‹T$0RSVèƒÄ _^][ƒÄËD$(‹L$‰F ‹D$,‰~‹+‹{‰K‹È‰+Íù‰{‰V4‹T$0RSVèÄƒÄ _^][ƒÄËD$0‰V4PSV誋V4‹N0ƒÄ ;Êt;‹L$(‰~‰N ‹L$‹+‰K‹L$,P‹ùS+ý‹kï‰ ‰kV‰V4èmƒÄ _^][ƒÄÃÇE‹D$(‹L$‰F ‹D$,‰~‹+‹{‰K‹Èj+ÍSù‰‰{V‰V4è*ƒÄ _^][ƒÄËD$(‹L$‰F ‹D$,‰~‹+‹{‰K‹Èjþ+ÍSù‰‰{V‰V4èîƒÄ _^][ƒÄÃIôN±OŒPQÎQDRbS7U•UmT‹D$P‹D$ ‹H(QÿP$ƒÄÃì‹D$,‹L$(SU‹i4‹Q V‹q0W‹8‹@;î‰D$‹A‰|$s +õN‰t$ë ‹I,+͉L$‹L$(‹ Xã‰L$‹L$,‹ Xã‰L$ ƒøs"‹L$I‰L$3ÉŠ‹ñ‹ÈÓæƒÀ ÖGƒørâ‰|$‹L$‹t$0#Ê3ÛŠÎ4Î…Û„Ž3ÉŠNÓê+Á‰L$(öÃu9öÃ@…#‹ Xã‹^#ÊË3ÛŠÎ4Î…Û„U3ÉŠNÓê+Á‰L$(öÃtǃã+Ë Xã#ÊN‰L$,‹ËÓêƒøs"‹L$I‰L$3ÉŠ‹ñ‹ÈÓæƒÀ ÖGƒørâ‰|$‹L$ ‹t$4#Ê3ÛŠÎ4Î3ÉŠNÓê+Á‰L$(öÃu1öÃ@…‹ Xã‹^#ÊË3ÛŠÎ4Î3ÉŠNÓê+Á‰L$(öÃtσã;Ãs+ë‹|$‹L$I‰L$3ÉŠ‹ù‹ÈÓç‹L$ƒÀ ×A;ÉL$r׋+ÊÁ‰F‰k43À_^][ƒÄÃöà tV‹t$<‹\$‹N+Ë‹ØÁë;Ùs‹Ë‹\$8+ù‰S Í+‰C‹D$‹È‹F‰N‹Ï‰>+ÊÁ‰F‰k4¸_^][ƒÄËL$<‹\$‹qÇAÐÐ+ó‰t$,‹ð‹\$,Áî;ór‹t$,‹\$8+þ‰S õ+‹׉C‹D$ð‹A‰q‹1+Ö‰9Â_‰A‰k4^]¸ýÿÿÿ[ƒÄËD$3Ò;ÂVt3‹H;Êt,‰P‰P‰P‹q ÷ÞöRƒæP‰1‹@‹HQè[åÿÿƒÄ 3À^¸þÿÿÿ^ÂV‹t$…öt:‹F…Àt3‹N$…Ét,‹@…Àt VPèKóÿÿƒÄ‹F‹N(PQÿV$ƒÄÇF3À^¸þÿÿÿ^‹D$ VW3ÿ;Ç„÷ŠŠ Ð:Á…çƒ|$8…Ü‹t$ ;÷u ¸þÿÿÿ_^‹F ‰~;Çu ÇF @¥‰~(9~$uÇF$`¥‹N(jjQÿV ƒÄ ;ljFu ¸üÿÿÿ_^‹L$‰x‹V;ωz } ‹F÷ÙÇ@ ƒù|YƒùT‹V¸Óà‰J‹N‹Q ÷ÚÒP÷Òâ RVè¦äÿÿ‹NƒÄ ‰A‹VV9zuèÏþÿÿ¸üÿÿÿ_^Âèpþÿÿ3À_^ÂVè³þÿÿ¸þÿÿÿ_^Â_¸úÿÿÿ^‹D$ ‹L$‹T$PQjRèÊþÿÿ SUV‹t$…öW„‹F…À„ùƒ>„ð‹T$3Ûƒú¿ûÿÿÿ•ÃK½ƒãû‰\$‹F‹ƒù ‡Äÿ$`‹N…É„ˆI3Ò‰N‹NA‹û‰N‹Š‰P‹F‹‹HƒáB€ù‰tÇ ‹VÇF@щj뢋H‹PÁéƒÁ;ÊvÇ ‹VÇF,щjézÿÿÿÇ‹F…À„H3ɉF‹F@‹û‹^‰F‹3Ò½Š@‰‹CÁàÁ÷õ…Òt!Ç ‹F‹\$½ÇFщhéÿÿÿöÁ …Ç‹\$½éýþÿÿ‹HWVQèãÿÿ‹øƒÄ ƒÿýu‹VÇ ‹FÇ@éÐþÿÿ…ÿu‹ûƒÿ…i‹F‹û‹PHQVRèâÿÿ‹FƒÄ ‹H …Ét Ç é–þÿÿÇ‹F…À„-H‹V‰F‹F@3ɉF‹‹ûŠÁá‰J‹@‰‹FÇ ‹F…À„ø‹V‹HB‰V‰F‹F3ÒŠ‹û‹HÁâʉH‹@‰‹FÇ ‹F…À„¾‹V‹HB‰V‰F‹F3ÒŠ‹û‹HÁâʉH‹@‰‹FÇ ‹F…À„„‹V‹HB‰F‹F‰V3ÒŠ‹HÊ‹û‰H‹@‰‹F‹H‹P;Ê„YÇ ‹VÇFüЉjéýÿÿ‹F‹\$½Ç‹F…Àu ‹Ç_^][‹V‹HB‰V3Ò‰FŠ‹F‹ûÁâ‰P‹‹N@‰Ç‹F…Àu ‹Ç_^][‹H‰F‹F@3ɉF‹FŠ ‹û‹PÁáщP‹‹V@‰Ç‹F…Àu ‹Ç_^][‹H‰F‹F@3Ò‰F‹FŠ‹û‹HÁâʉH‹@‰‹F‰(‹F…Àu ‹Ç_^][‹V‹HB‰F‹F‰V3ÒŠ‹HʉH‹@‰‹F‹H‰N0Ǹ_^][‹VÇ ‹FÇFìÐÇ@¸þÿÿÿ_^][‹Ç_^][‹NÇ ¸_^][¸ýÿÿÿ_^][Â_^]¸þÿÿÿ[Â7\®\¤^Þ^_X_¤_%]’]Ç]^;^Ü_è_SUV‹t$W‹|$…ÿ‹Þte‹G…Àt^ƒ8uY‹l$VUjèµ´ÿÿ;G0t ¸ýÿÿÿ_^][ ‹W¸‰G0‹JÓà;ðrXÿ+óî‹BSUPèníÿÿ‹OƒÄ 3ÀÇ_^][ _^]¸þÿÿÿ[ SUV‹t$…öW„­‹F…À„¢ƒ8 tÇ ‹FÇ@‹~…ÿu ¸ûÿÿÿ_^][‹n‹‹Ó‹Eƒøs"Š :ˆt±u@ë„Ét3Àë ¹+È‹ÁBOuًʉ+Ë‹^Ù‰~‰^ƒø‰Et ¸ýÿÿÿ_^][‹~‹^Vè‹øÿÿ‹V‰~‰^3ÀÇ_^][Â_^]¸þÿÿÿ[‹D$…Àt‹@…Àt‹@…Àt Pè”ìÿÿƒÄ¸þÿÿÿÂQSW‹|$ jjÇD$‹G(PÿW ‹ØƒÄ …Ûu ¸üÿÿÿ_[YËT$‹D$VU‹l$L$SQ‹L$ RUPjjjjQè[‹ðƒÄ(ƒþýu‹W(SRÇGŒâÿW$ƒÄ‹Æ]^_[YÃþûtƒ}u ÇGhâ¾ýÿÿÿ‹W(SRÿW$ƒÄ‹Æ]^_[YÃìð‹Œ$ôSUV‹´$3íW‰l$D‰l$H‰l$L‰l$P‰l$T‰l$X‰l$\‰l$`‰l$d‰l$h‰l$l‰l$p‰l$t‰l$x‰l$|‰¬$€‹Ö‹ƒÁ‹\„DD„DCJ‰uí9t$Du‹Œ$‹”$3À‰)‰*_^][ÄðËœ$¹D$H‹;‰|$9(u AƒÀƒùvó‹Á;ù‰D$s‰L$‹ùº´$€9.uJƒî;Õuô;ú‰T$,v‰T$‹ú¾‰;Óæ;Ês\ŒD+3x%AƒÃÑæ;Êrò •‰L$ \ D‹L D+ñ‰t$@y¸ýÿÿÿ_^][ÄðÃΉ¬$ˆ‰ 3ÉJt3ÛLHƒÃJ‰Œˆuï‹”$3Û‹ ƒÂ;͉T$t"‹”Œ„‹¬$(ŒŒ„‰\•B‰‹T$3틌$C;ÙrÅ‹T$ ‹ß÷Û‹Œ„‹”$(‰Œ$‹L$,;Á‰l$$‰¬$„‰T$ÇD$ÿÿÿÿ‰¬$ĉl$<‹t$4L„D‰L$(‹T$(‹ ‹ÑI…Ò‰L$ „> ;;ÁމL$8ë‹|$‹D$‹T$,‹l$‹L$8ß+ÓEÏ;׉l$‰L$8v‹×‹l$ ‹È+˸Óà};Çv'ƒÏÿ+ý‹l$(Ç;ÊsA;Ês‹}ƒÅÑà;Çv+ÇA;Êrí‹„$$¿Ó狉|$<øÿ ‡ï‹”$ ,‹D$”„Ä‹„$$‰8‹D$…À‰*t8‹t$$ˆL$0‰´„„‹D$‹ËˆD$1+È‹ÆÓè‹Jü‹T$0‹õ+ñÁþ+ð‰Á‰tÁë ‹„$‰(‹L$8‹D$;Áÿþÿÿ‹Œ$(ŠÐ‹|$*ÓˆT$1‹”$ ‘;ùrÆD$0ÀëH‹7‹Œ$ ;ñsþ҃⠃Â`ˆT$0ë +ñ‹Œ$ÁæŠ1‹Œ$€ÂP‹41ˆT$0ƒÇ‰|$‹È‹D$$+˺Óâ‹ËÓè;D$‹×fƒ:t$‹ŽH‰D$A‹è‰ŽH‰„ŽT Æ„0PëfÇB‹L$@ƒÂ;Á|Ä‹ŽHƒù}dƒý}E‹Åë3ÀA‰ŽH‰„ŽT …fÇÆ„0P‹– J…Û‰– t3Àf‹D ‹Ž¤+È‰Ž¤‹ŽHƒù| ‰l$‹L$ ‰i‹†H™+‹ØÑûƒû|SWVè8ƒÄ Kƒû}ï‹D$‰D$‡‰T$‹†H‹žX jW‹Œ†T HV‰ŽX ‰†Hè÷‹–L‹®X ƒÄ J‹Â‰–L‰œ†T ‹ŽLI‹Á‰ŽL‰¬†T f‹¯fŸ‹D$f‰Š„3PŠŒ5P:Ár%ÿëáÿ‹Á‹L$þÀjWˆ„1P‹D$$f‰L¯f‰LŸ‰ŽX AƒÀV‰L$ ‰D$(è\‹†HƒÄ ƒø*ÿÿÿ‹–L‹ŽX J‰–L‹Â‹T$ RV‰Œ†T èã‹D$ƒÄÆ4 VPWèþƒÄ _^][ƒÄËD$‹L$ SU‹¬ˆT ‹HÉV;ÊW‰l$‹|$;Ê}4‹´ˆT ‹¬ˆX f‹¯f‹·f;ÓruŠ”(PŠœ0P:ÓwA‹l$‹´ˆT f‹¯f‹·f;Ór/uŠ”PŠœ0P:Óv‹T$‰L$ÑቴT ‹H;Ê~‡‹L$_^‰¬ˆT ][Ãì‹D$$SUV‹(‹H‹@‰L$W3Û‹‹H‹p‰T$(‹P‰L$$‰T$ ‹T$0¹3Àº4 ‰\$ó«‹‚L‰t$‹Œ‚T f‰\‹šLCû=‰\$4Ó„šT ‰D$0¸=+Ã؉D$‰\$4‹L$03À3Û‹ f‹D<f‹\…‹Ã@;Æ~ ‹\$‹ÆC‰\$‹\$f‰D=;Ë_‹\$ fÿ„B4 3ö;Ë| ‹t$$+Ë‹4Žf‹L=Æáÿÿ‹š ¯ÁØ‹D$(…À‰š t3Ûf‹\8‹‚¤Þ¯ÙÉ‚¤‹t$‹L$0‹D$ƒÁH‰L$0‰D$…Mÿÿÿ‹\$4‹|$…ÿ„ÔFÿfƒ¼B4 ŒB4 u ƒéHfƒ9töfÿŒB4 fƒ„B6 fÿŒr4 ƒï…ÿÁ…ö‹þ„‹´r4 ‰t$3Àf‹…À‰D$0tcœšT ‹t$4‹KüNƒë‰t$4‹t$;Ή\$(9t3Àf‹;Çt#‹ß+Ø3Àf‹D¯Ø‹‚ Ë\$(‰‚ f‰>‹D$0H‰D$0…Àu¨‹\$4‹t$Oƒî…ÿ‰t$u€_^][ƒÄËL$ ƒì 3ÀT$VWƒÁ¾f‹yþƒÁføƒÂÑç‹ÇNf‰Bþuè‹D$0…À|6‹t$,x3Éf‹N…Étf‹TLQ‹Â%ÿÿBPf‰TLè?ƒÄf‰ƒÆOuÑ_^ƒÄ ÃV‹t$‹† ŽŒPQVèg‹– ƒÄ †€ RPVèPƒÄ Ž( QVèúÿÿƒÄ¸3ÒŠØ´fƒ¼–v uHƒø}ç‹– L@щ– ^ÃQ‹D$ S3ÒUf‹PV3öW…ÒÇD$ÿÿÿÿ¹¿u ¹Š¿‹\$ …ÛfÇD˜ÿÿŒCh‰\$‹\$‹Â3Òf‹UF;ñ};Âtn;÷} f´ƒt ë0…Àt;D$tfÿ„ƒt fÿƒ´ ëƒþ  fÿƒ¸ ëfÿƒ¼ 3ö‰D$…Òu ¹Š¿ë;Âu ¹¿ë ¹¿‹D$ƒÅH‰D$…oÿÿÿ_^][YÃSU‹D$V‹t$W‹Ž¸ƒù ~]ÿþÿÿ‹ÐÓâ‹Nf –´‹VŠž´ˆ‹N‹~3ÒŠ–µA‰Nˆ9‹–¸‹nf¹f+ÊEfÓèƒÂõ‰n‰–¸f‰†´ëÿþÿÿÓàf †´ƒÁ‰Ž¸‹Ž¸ƒù ~_‹T$Bÿ‹ÐÓâ‹Nf –´‹VŠž´ˆ‹N‹~3ÒŠ–µA‰Nˆ9‹–¸‹nf¹f+ÊEfÓèƒÂõ‰n‰–¸f‰†´ë‹D$HÓàf †´ƒÁ‰Ž¸‹Ž¸‹l$ ƒù Eü~Z‹ÐÓâ‹Nf –´‹VŠž´ˆ‹V‹~B‰V‹Ê3ÒŠ–µˆ9‹N‹–¸A‰Nf¹f+ÊfÓèƒÂô‰–¸f‰†´ëÓàf †´ƒÁ‰Ž¸3ÿ…펣‹Ž¸ƒù ~l3Ò3ÀŠ—Ø´f‹„–v ‹ÐÓâ‹Nf –´‹VŠž´ˆ‹V‹^B‰V‹Ê3ÒŠ–µˆ‹N‹–¸A‰Nf¹f+ÊfÓèƒÂó‰–¸f‰†´ë#3ÀŠ‡Ø´f‹”†v fÓâf –´ƒÁ‰Ž¸G;ýŒ]ÿÿÿ‹D$ŽŒHPQVè&‹T$(ƒÄ J†€ RPVèƒÄ _^][Ãì‹D$S3ÛUf‹X3ÒVW…ÛÇD$ÿÿÿÿ¹¾u ¹Š¾‹|$$…ÿŒ.ƒÀG‰D$$‹D$‰|$‹|$$‹ë3ÛBf‹;щ\$‰T$ };ë„ä;Ö¬‹ˆ¸3öf‹´¨v ¿+þ;Ï~g3Òf‹”¨t ‹úÓç‹Hf ¸´‹xŠ˜´ˆ9‹x‹X3ÉŠˆµG‰xˆ ‹H‹¸¸A‰Hf¹f+ÏfÓêf‰´T>ð‰¸‹T$ ëf‹¼¨t fÓçf ¸´ñ‰°¸J‰T$ …Yÿÿÿéü…í„Á;l$„¡‹ˆ¸3öf‹´¨v ¿+þ;Ï~g3Òf‹”¨t ‹úÓç‹Hf ¸´‹xŠ˜´ˆ9‹x‹X3ÉŠˆµG‰xˆ ‹H‹¸¸A‰Hf¹f+ÏfÓêf‰´T>ð‰¸‹T$ ëf‹¼¨t fÓçf ¸´ñ‰°¸J‰T$ ‹ˆ¸3öf‹°¶ ¿+þ;Ï~f3Òf‹´ ‹úÓç‹Hf ¸´‹xŠ˜´ˆ9‹x‹X3ÉŠˆµG‰xˆ ‹H‹¸¸A‰Hf¹f+ÏfÓêf‰´T>ð‰¸‹T$ ëf‹¸´ fÓçf ¸´ñ‰°¸‹ˆ¸ƒù~^ƒÂý‹òÓæ‹Hf °´‹pŠ˜´ˆ1‹p‹x3ÉŠˆµF‰pˆ >‹H‹°¸A‰Hf¹f+ÎfÓêƒÆò‰°¸f‰´éGƒÂýÓâf ´ƒÁé-ƒú ‹ˆ¸3öf‹°º ¿+þ;Ï~f3Òf‹¸ ‹úÓç‹Hf ¸´‹xŠ˜´ˆ9‹x‹X3ÉŠˆµG‰xˆ ‹H‹¸¸A‰Hf¹f+ÏfÓêf‰´T>ð‰¸‹T$ ëf‹¸¸ fÓçf ¸´ñ‰°¸‹ˆ¸ƒù ~^ƒÂý‹òÓæ‹Hf °´‹pŠ˜´ˆ1‹p‹x3ÉŠˆµF‰pˆ >‹H‹°¸A‰Hf¹f+ÎfÓêƒÆó‰°¸f‰´é(ƒÂýÓâf ´ƒÁ鋈¸3öf‹°¾ ¿+þ;Ï~f3Òf‹¼ ‹úÓç‹Hf ¸´‹xŠ˜´ˆ9‹x‹X3ÉŠˆµG‰xˆ ‹H‹¸¸A‰Hf¹f+ÏfÓêf‰´T>ð‰¸‹T$ ëf‹¸¼ fÓçf ¸´ñ‰°¸‹ˆ¸ƒù ~[ƒÂõ‹òÓæ‹Hf °´‹pŠ˜´ˆ1‹p‹x3ÉŠˆµF‰pˆ >‹H‹°¸A‰Hf¹f+ÎfÓêƒÆ÷‰°¸f‰´ëƒÂõÓâf ´ƒÁ‰ˆ¸‹\$3Ò…Û‰l$u ¹Š¾ë;ëu ¹¾ë ¹¾‹l$$‹|$ƒÅO‰l$$‰|$…âúÿÿ_^][ƒÄËD$ƒì 3É‹˜SU‹l$VW…Ò„w‹œ3ÿ3Ûf‹ð‰¸ëf‹•fÓâf ´ñ‰°¸3É_f‹^]‰ˆ°[ƒÄ ÃSVW‹|$3ö3ɇŒº3Ûf‹ƒÀËJu󇨺y3Ûf‹ƒÀóJu󇌺€3Ûf‹ƒÀËJuóÁî;ñÀ@ˆG_^[ËT$‹L$V3À‹ñƒæ ÆÑéÑàJ…ÒðÑè^ËD$SV‹ˆ¸ƒùu?‹H‹PŠ˜´ˆ‹P‹pB‰P‹Ê3ÒŠµˆ‹HA‰H3Éf‰ˆ´‰ˆ¸^[Ãù|4‹H‹PŠ˜´ˆ‹P3ÉBŠˆµ‰Pf‰ˆ´‹ˆ¸ƒÁø‰ˆ¸^[ËD$SW‹ˆ¸ƒù~(‹H‹PŠ˜´ˆ‹P‹xB‰P‹Ê3ÒŠµˆë…É~‹H‹PŠ˜´ˆÿ@_fÇ€´Ç€¸[ÃSV‹t$ WVèƒÿÿÿ‹D$ ƒÄ…À‹D$dž°tI‹N‹Vˆ‹V‹~B‰V‹Ê3ÒŠÔˆ‹N‹~ŠÐAöÒ‰Nˆ‹~‹È÷Ñ3ÒGŠÕ‹N‰~ˆ9‹NA‰N‹ÐH…ÒtH‹D$‹V‹~Šˆ:‹^C@I‰^uê_^[Ãì8‹L$H‹D$D‹T$‹”$€;Âs ˆ‹D$<‹ðë‹ò…Àv…Òv‹EPjVQèHƒÄƒøtƒËÿ+þ‰|$…Ûu~‹¬$„…íts‹D$@‹¼$ˆ;Ç‹ðr‹÷‹L$…Ét#jQ‹L$x‹RèJƒÄ …Àu‰D$ëƒËÿ‹D$@…Àv#…ÿv‹D$p‹QjVUè҃ăøtƒËÿ‹D$@‹L$+ÆȉL$ë|$@‰|$…Û…–‹¼$Œ…ÿtb‹D$D‹¬$;Ås ˆ8‹t$Dë‹õ‹D$…Àt‹T$pjP‹PèµƒÄ …ÀtƒËÿ‹D$D…Àv…ív‹L$p‹RjVWèCƒÄƒøtƒËÿ…Ûu%‹|$t…ÿt ¹t$ó¥…Ûu‹D$x…Àt‹L$‰^_‹Ã][ƒÄ\ËL$‹T$‹ÁVÁè‹ðƒæ‰r ‹ðÁè ƒà¼‰B‹ÁÁè ƒàÁî‰B‹ÁƒæƒáÁèNƒà?Ñá‰r‰B‰ ^ÃV‹t$…öu ¸šÿÿÿ^‹F$jjjjjNxjV(QRV‰FÇFèüÿÿƒÄ$3É…À”Á‰N^ÂV‹t$…öu ¸šÿÿÿ^‹F…Àu ¸œÿÿÿ^‹F‹N@;Áu ¸œÿÿÿ^‹NP‹VLÊ‹VHjjL.‹VÑj‰Vj‰FjVxjF(RPVè†ûÿÿƒÄ$3É…À”Á‰N^ÂìSUV‹´$…öWu¸šÿÿÿ_^][Ä ‹œ$ ƒÉÿ‹û3Àò®÷ÑIùr¸šÿÿÿ_^][Ä ‹F…Àu¸œÿÿÿ_^][Ä ‹F‹nV‰D$è³þÿÿ…Àu;‹¼$$jjjjL$$hQjVèŽúÿÿWT$SRèBõÿÿ…Àt!VèÈþÿÿ…ÀtÌ‹L$‰n‰N_^][Ä _^]3À[Ä ƒìSVW‹|$3Û;ûu¸šÿÿÿ_^[ƒÄÂ9_u¸šÿÿÿ_^[ƒÄÂ9_|tWè$D$ L$PT$QRWèïƒÄ…Àt¸™ÿÿÿ_^[ƒÄÂjlèq‹ðƒÄ;óu¸˜ÿÿÿ_^[ƒÄÂh@èP‰‹L$‰ND‹T$ƒÄ;ÉVH‰^LuVèNƒÄ¸˜ÿÿÿ_^[ƒÄ‰^@‹G4‹W<3É;ÉVT”Á‹Á‰^P‹O4;ÉNd‹‰V`‹O ‰Nh‰^u&j8hÐVjñR‰^$‰^(‰^,èæÇÿÿ;ÃuÇF@‹G@‰FX‹OD‰N\‹Wx‹D$‰^L3À‰N<‰w|_^[ƒÄ‹D$ ‹L$ƒì U‹l$V3öW‹|$‰u‰0‰1‹W ‹Ox‹ÑVRPèËƒÄ …Àt ƒÈÿ_^]ƒÄ ËL$QRèöÿÿƒÄ…ÀtƒÎÿë|$PKt¾™ÿÿÿ‹D$ PQèÉõÿÿƒÄ…ÀtƒÎÿ‹T$RPè²õÿÿƒÄ…ÀtƒÎÿ‹L$ QRè›õÿÿƒÄ…ÀtƒÎÿë…öu%‹D$ ‹O4;Át¾™ÿÿÿ…öu‹G4…Àt ƒøt¾™ÿÿÿ‹L$ QRèéõÿÿƒÄ…ÀtƒÎÿ‹D$ PQèÒõÿÿƒÄ…ÀtƒÎÿë…öu‹T$ ‹G<;Ðt öD$u¾™ÿÿÿ‹D$ PQèžõÿÿƒÄ…ÀtƒÎÿë…öu‹T$ ‹G@;Ðt öD$u¾™ÿÿÿ‹D$ PQèjõÿÿƒÄ…ÀtƒÎÿë…öu‹T$ ‹GD;Ðt öD$u¾™ÿÿÿ‹D$ PQè¦ôÿÿƒÄ…À‹D$ tƒÎÿë…öu ;GHt¾™ÿÿÿ‹MT$ÈR‰M‹PèsôÿÿƒÄ…ÀtƒÎÿ‹Ox‹T$ _D ‹L$ ‹T$$‰‹D$‰‹MȋƉM^]ƒÄ Ãì‹D$ SUV…ÀWÇD$ÇD$u¸šÿÿÿ_^][ƒÄ ‹p|…öu¸šÿÿÿ_^][ƒÄ ƒ>u¸œÿÿÿ_^][ƒÄ ‹L$$…Éu 3À_^][ƒÄ ‹D$ ‰N‰F‹F\;Èv‰F‹F…À†<‹F…Àul‹FX…Àve¿@;Çs‹ø…ÿ„1‹Nh‹F<‹V`ÈjQRè,ƒÄ …À…‹F`‹PjWQèÆƒÄƒø…‹N<‹FX‹Ï+ljN<‰FX‰V‰~‹Fd…Àup‹F‹~;Çs‹ø3À…ÿv‹N‹VŠ ˆ @;Çrï‹V‹FPWRPèjÿÿ‹N\‹n‹^‹V‰FP‹F+Ï+ljN\‹N‰F‹D$+ïß×Ïljn‰^‰V‰N‰D$ëG‹^‹nNjQèZÅÿÿ‹~‹VP+û‰D$WURèÿÿ‹^\‰FP‹T$‹D$+ß׃ø‰^\‰T$t…Àu ‹F…À‡Äþÿÿ‹D$…Àu‹D$_^][ƒÄ 3À_^][ƒÄ _^]ƒÈÿ[ƒÄ ‹D$…Àu¸šÿÿÿ‹@|…Àu¸šÿÿÿ‹@‹D$…Àu¸šÿÿÿ‹@|…Àu¸šÿÿÿ‹P\3É…Ò”Á‹Á‹D$SUV…ÀWu ¸šÿÿÿ_^][ ‹p|…öu ¸šÿÿÿ_^][ ‹FL‹~H‹l$+ø…íu ‹Ç_^][ ‹L$‹ß;Ïw‹Ù…Ûu 3À_^][ ‹ND‹V`ÈjQRèƒÄ …Àt ƒÈÿ_^][ ‹F`PjWUè´ ƒÄƒøt ƒÈÿ_^][ _^‹Ã][ UVW‹|$3í…ÿu ¸šÿÿÿ_^]‹w|…öu ¸šÿÿÿ_^]‹F\…Àu‹FP‹NT;Át½—ÿÿÿ‹…Àt PèP ƒÄ‹F@Ç…Àt NQèÛÁÿÿVÇF@è* ƒÄÇG|‹Å_^]ÂSUV‹t$…öWu ¸šÿÿÿ_^][ ‹l$‹F;è‹Ýv‹Ø‹F‹ƒÀjPQè ƒÄ …Àt ƒÈÿ_^][ ‹|$…Ûv!Æ‹RjSWè  ƒÄƒøt ƒÈÿ_^][ …ÿt ‹v;îvÆ7_^‹Ã][ ¸t@è~ ‹„$|@V3öW;Ƹìãt¸èãP‹„$„@Pè! ƒÄ;ƉD$u 3À_^Ät@ÂPèñ ƒÄL$ ‰„$t@‰t$Q‰t$T‰´$|@èNƒÄht@èß ƒÄ;Æu‹T$Rèæ ƒÄ3À_^Ät@¹t$‹øó¥_^Ät@‹D$Ç@ÇÃSUV‹t$…öWu ¸šÿÿÿ_^][Â(‹D$4…Àtƒøt ¸šÿÿÿ_^][Â(ƒ~ uVè…À…2‹D$…ÀuÇD$ðã‹|$0…ÿu‰|$ëƒÉÿ3Àò®÷ÑI‰L$‹|$ƒÉÿ3À‹l$ò®÷Ñ3ÿI;ï‹Ùu‰¾d@ë‹E;Çu WUè?ƒÄ‰†d@‹D$8‰~\ƒøtƒø uÇF\ƒøuƒN\ƒøu‹F\ ‰F\‹‹D$4Q‰¾h@‰F`‰~H‰~Lèm ‹T$‹|$0ӃĉFPD:.P‰FXèn ƒÄ‰FTjhPKPè‹FTƒÄ ƒÀjjP芋NTƒÄ ƒÁjjQèw‹FT‹V\ƒÄ ƒÀjRPèb‹VT‹N`ƒÄ ƒÂ jQRèM‹NT‹†d@ƒÄ ƒÁ jPQè5‹VTƒÄ ƒÂjjRè"‹FTƒÄ ƒÀjjPè‹NTƒÄ ƒÁjjQèü‹VTƒÄ ƒÂjSRèê‹FTƒÄ ƒÀjWPèØ‹VT‹L$ ƒÄ ƒÂ jQRè‹FTƒÄ ƒÀ"jjPè¯ƒÄ …íju ‹NTjƒÁ$Që ‹FT‹UƒÀ$RPè‹ƒÄ …íju ‹NTjƒÁ&Që ‹FT‹U ƒÀ&RPèg‹VT‹NPƒÄ ƒÂ*jQRèRƒÄ 3À…Ûv‹T$‹NTŠˆT.@;Ãrí3À…ÿv‹VT‹l$(‰T$4 Š(‹l$4@;LjT).râ‹L$3À…Év$‹VT‹l$ ‰T$4Š(‹l$4Ï@ˆT).‹L$;ÁrÜ‹FT…Àu ¸˜ÿÿÿ_^][Â(‹jhPKPè‚‹øƒÄ …ÿ…¯‹jjQèi‹øƒÄ …ÿ…–‹V\‹jRPèN‹øƒÄ …ÿu‹N`‹jQRè7‹øƒÄ …ÿuh‹†d@‹jPQè‹øƒÄ …ÿuN‹jPRè ‹øƒÄ …ÿu:jP‹Pèõ‹øƒÄ …ÿu&‹jPQèá‹øƒÄ …ÿu‹jSRèÍ‹øƒÄ …ÿ‹l$$u‹jUPèµƒÄ ‹ø…ÿuB…Ûv‹‹T$QjSR袃ăøtƒÏÿ…ÿu…ív‹‹L$ PjUQèƒÄƒøtƒÏÿ3ÀVd;ø‰FÇF @‰V‰F‰F$u8ƒ~`u2j8hÐP‰F0‰F4‰F8‹D$DjjñjNPQè³zÿÿ‹ø…ÿuÇFH…ÿuÇF ‹Ç_^][Â(‹T$ 3À…Ò~‹L$ˆL Áé@;Â|ô‹D$L$ PjRQèÞƒÄH÷ØÀËT$ 3À…Ò~‹L$V‹t$ˆ 0Áé@;Â|õ^ËT$V‹Jù¼vé¼ëƒùPvƒéP‹B‹rÁàÆ‹2ÁàÑîÆ‹rÁáL1‹r ÁáÎ^Áá ÁÃSUV‹t$3ÛW…öu ¸šÿÿÿ_^][ ‹F …Àu ¸šÿÿÿ_^][ ‹L$‹D$nQP‰N‰E‹†h@Pèxÿÿ‰†h@‹F…À†²‹F …Àu.‹‹VLQ~djRWèäƒÄƒøtƒËÿÇFLÇF @‰~ƒ~`u‹~$jUèÍ}ÿÿ‹Ø‹F$+ÇëS‹F‹N ;Ár‹Á3É…Àv‹U‹~Šˆ9A;Èrï‹N‹~ ‹U+È+øЉN‹N‰~ ‹~‰U‹V$ÈøЉN‰~‰V$‹NLÈ…Û‰NL„Cÿÿÿ_^]3À[ SUV‹t$W3Û3ÿ;óu ¸šÿÿÿ_^][Â9^ u ¸šÿÿÿ_^][‹F`‰^ƒøuNnë3Û9^ u"‹‹NLP~djQWèäƒÄ‰^LÇF @‰~‹^$jUèß|ÿÿ‹V$‹NL+Ó‹øÊ…ÿ‰NLt¹3Ûƒÿu3ÿ‹FL;Ãv;ûu‹VdQjPR蓃ăøtƒÏÿƒ~`u;ûuFPè €ÿÿ‹ø‰^H‹VT‹Žh@jƒÂQRè‘ýÿÿ‹NT‹F$ƒÄ ƒÁjPQè|ýÿÿ‹FT‹VƒÄ ƒÀjRPègýÿÿƒÄ ;ûu‹NX‹VTQFRPè¿ƒÄ ‹ø‹NTQèƒÄ;û…ƒ‹Rè΋‹è‹FPƒÄƒÀSPQè5ƒÄ …ÀtƒÏÿ;ûuD‹–h@‹jRPèºüÿÿ‹øƒÄ ;ûu*‹N$‹jQRè£üÿÿ‹øƒÄ ;ûu‹F‹jPQèŒüÿÿƒÄ ‹ø‹SURèÙƒÄ …ÀtƒÏÿ‹†p@‰^ @‰†p@‹Ç_^][ÂSU‹l$ V…íWu ¸˜ÿÿÿ_^][ËE…Àuèž…À‰E‰Eu ¸˜ÿÿÿ_^][Ë|$‹u‹\$…ÿvm‹F…Àuèo…À‰tQ‹ð‰u‹F;Çr‹Ç‹N…ÀLv‹û‹è+ùŠˆAMu÷‹l$‹|$‹V‹NÐ+ÈØ+ø‰V‰N‰|$u¤3À_^][ø˜ÿÿÿ_^][Ã_^]3À[Ãh脃ąÀtÇÇ@Ç@ðÃQSU‹l$W3ÿ3Û;ï‰|$ u ¸šÿÿÿ_][Y‹E VƒøuUèýÿÿ‹Ø‹t$;÷t‹þƒÉÿ3Àò®÷ÑI‹ù‹EPèðƒÄ‰D$…ÛuD‹u…öt9…Ûu"‹F…Àv‹MVQjPRèíƒÄƒøtƒËÿ‹F‹L$‹6È…ö‰L$uÇ‹t$‹MQèƒÄ…Û…è‹UjhPKRèúÿÿ‹ØƒÄ …Û…ËjP‹EPè„úÿÿ‹ØƒÄ …Û…²‹MjPQèkúÿÿ‹ØƒÄ …Û…™‹•p@‹EjRPèLúÿÿ‹ØƒÄ …Ûu~‹p@‹UjQRè1úÿÿ‹ØƒÄ …Ûuc‹D$‹MjPQèúÿÿ‹ØƒÄ …ÛuJ‹T$‹EjRPèÿùÿÿ‹ØƒÄ …Ûu1‹MjWQèêùÿÿ‹ØƒÄ …Ûu…ÿv‹URjWVèڃăøtƒËÿ‹EPèÒƒÄUèσÄ‹Ã^_][Y‹D$…ÀtV‹0…Àt P觃Ä…ö‹Æuë^øÐËL$¸+Á‹…øã‹D$ ‹L$PQ诃ÄËD$PèBƒÄÃÿ%0°ÿ%°ÿ%°ÿ% °ÿ%°ÿ%°ÿ%°ÿ%°ÿ% °ÿ%$°ÿ%(°ÿ%,°Q‹ÌƒÁ=réƒ -ëé+ȃ ‹Ä‹á‹‹@ÿàÌÿ%°ÿ%4°ÿ%8°ÿ%<°ÿ%@°V‹t$ ƒþu(ÿ˜äƒ=äu;ÿP°<u+©€t$ÿäë"…öuÚƒ=˜ä~ÿ ˜äëÉ3Àéúÿ äƒþ…Žƒ=ä|ƒ=˜ä…Ѓ=ä}h€èÿÿÿƒÄ£¨è…Àu03À鯃=˜äu h€h ÿL°£¨è…Àu3À醡¨èh`°h\°Ç¡¨è£¤èèÒƒÄëX…öuTƒ=ä| ƒ=˜äuBƒ=¨èt9‹5¤èƒî95¨èw‹…ÀtÿЃî95¨èvíƒ=ä~ ¡¨èPÿT°¸^ U‹ìVW¿‹u …öu ƒ=˜äu3ÀëGƒþtƒþuÿuVÿuè€þÿÿ‹ø…ÿtÿuVÿuè,‹ø…ötƒþuÿuVÿuèWþÿÿ…Àu3ÿ‹Ç_^] Ìÿ%D°¸ >¿Ô¾Þ¾è¾ð¾ú¾¿¿¿ ¿*¿2¿Ì¾H¿P¿Z¿b¿x¿’¿ ¿„¿  deflate 1.1.2 Copyright 1995-1998 Jean-loup Gailly @$@'@' @'p* p*€€p* €p* €p* p*     ÿÿ inflate 1.1.2 Copyright 1995-1998 Mark Adler  #+3;CScsƒ£Ããpp !1AaÁ  0@`        ŒLÌ,¬lìœ\Ü<¼|ü‚BÂ"¢bâ’RÒ2²rò ŠJÊ*ªjêšZÚ:ºzú†FÆ&¦fæ–VÖ6¶vöŽNÎ.®nîž^Þ>¾~þAÁ!¡aá‘QÑ1±qñ ‰IÉ)©ié™YÙ9¹yù…EÅ%¥eå•UÕ5µuõ MÍ-­mí]Ý=½}ý  “ “ S S Ó Ó 3 3 ³ ³ s s ó ó  ‹ ‹ K K Ë Ë + + « « k k ë ë   › › [ [ Û Û ; ; » » { { û û   ‡ ‡ G G Ç Ç ' ' § § g g ç ç   — — W W × × 7 7 · · w w ÷ ÷    O O Ï Ï / / ¯ ¯ o o ï ï   Ÿ Ÿ _ _ ß ß ? ? ¿ ¿   ÿ ÿ @ `P0pH(hX8xD$dT4tƒCÃ#£cã         (08@P`p€ Àà  0@`€À€  0@` unzip 0.15 Copyright 1998 Gilles Vollant zip 0.15 Copyright 1998 Gilles Vollant p¾l¿°¼¾®¿L°>¿Ô¾Þ¾è¾ð¾ú¾¿¿¿ ¿*¿2¿Ì¾H¿P¿Z¿b¿x¿’¿ ¿„¿ftelltfprintfZ_fdopensfopenL_errnoªmallocÉsprintffwritexfreadifcloseyfreeóvsprintflfflush}fseekÁrewindufputc]callocCRTDLL.dll†_initterm\GlobalFreeUGlobalAllocLGetVersionKERNEL32.dll5¦ÂT=è¿8Á,  °à!0! ðà``à=3p>:p0`609à[PZ ZÀ[Z@`Ð`†¥Ð90: 8;à<P=p=`3 ¥ a P`:Ð8p‡€‹À‹ð‹ð@°‘•—0—˜ ˜°†À`—0™š@Ÿ` 0£¯ÂÁ·ÂÊÂÐÂØÂäÂïÂý ÃÃ%Ã:ÃHÃPÃXÃ^ÃfÃnÃuÃ|ÃÌÓÚáêñýÃÄÃÌÃÔÃßÃíÃúÃÄÄ(Ä9ÄDÄMÄaÄwċĜIJÄÃÄÓÄáÄéÄüÄÅ(Å/Å7Å>ÅGÅYÅaÅuʼnÅ& % ! ('" $=G?H>K@AJ<BCIFE#SROPQzlib.dlladler32compress2compresscrc32deflatedeflateCopydeflateEnddeflateInit2_deflateInit_deflateParamsdeflateResetdeflateSetDictionaryget_crc_tablegzclosegzdopengzeofgzerrorgzflushgzgetcgzgetsgzopengzprintfgzputcgzputsgzreadgzrewindgzseekgzsetparamsgztellgzwriteinflateinflateEndinflateInit2_inflateInit_inflateResetinflateSetDictionaryinflateSyncinflateSyncPointuncompressunzCloseunzCloseCurrentFileunzGetCurrentFileInfounzGetGlobalCommentunzGetGlobalInfounzGetLocalExtrafieldunzGoToFirstFileunzGoToNextFileunzLocateFileunzOpenunzOpenCurrentFileunzReadCurrentFileunzStringFileNameCompareunzeofunztellzErrorzipClosezipCloseFileInZipzipOpenzipOpenNewFileInZipzipWriteInFileInZipzlibVersion1.1.2Ћ%c%c%c%c%c%c%c%c%c%c: invalid bit length repeattoo many length or distance symbolsinvalid stored block lengthsinvalid block typeinvalid distance codeinvalid literal/length codeneed dictionaryincorrect data checkincorrect header checkinvalid window sizeunknown compression method `PTsRp0 ÀP `  €@ àPX S;x8 ÐQh( °ˆH ðPTUãS+t4 ÈQ d$ ¨„D èP\ ˜TS|< ØRl, ¸ ŒL øPRU£S#r2 ÄQ b" ¤‚B äPZ ”TCz: ÔRj* ´ ŠJ ôPVÀS3v6 ÌQf& ¬†F ìP ^ œTc~> ÜRn. ¼ŽN ü`QUƒRq1 ÂP a! ¢A âPY ’S;y9 ÒQi) ² ‰I òPUPS+u5 ÊQ e% ª…E êP] šTS}= ÚRm- º M úPSUÃS#s3 ÆQ c# ¦ƒC æP[ –TC{; ÖRk+ ¶ ‹K öPWÀS3w7 ÎQg' ®‡G îP _ žTc? ÞRo/ ¾O þ`PTsRp0 ÁP ` ¡€@ áPX ‘S;x8 ÑQh( ±ˆH ñPTUãS+t4 ÉQ d$ ©„D éP\ ™TS|< ÙRl, ¹ ŒL ùPRU£S#r2 ÅQ b" ¥‚B åPZ •TCz: ÕRj* µ ŠJ õPVÀS3v6 ÍQf& ­†F íP ^ Tc~> ÝRn. ½ŽN ý`QUƒRq1 ÃP a! £A ãPY “S;y9 ÓQi) ³ ‰I óPUPS+u5 ËQ e% «…E ëP] ›TS}= ÛRm- » M ûPSUÃS#s3 ÇQ c# §ƒC çP[ —TC{; ×Rk+ · ‹K ÷PWÀS3w7 ÏQg' ¯‡G ïP _ ŸTc? ßRo/ ¿O ÿPWS[QYUA]@PXT!\ R ZVÀ`PWS[QYUa]`PXT1\0R Z VÁÀ`incomplete dynamic bit lengths treeoversubscribed dynamic bit lengths treeincomplete literal/length treeoversubscribed literal/length treeempty distance tree with lengthsincomplete distance treeoversubscribed distance tree?ÿÿÿÿÿÿÿ?ÿÿÿ𴘳p¹´ˆ´rbabwb-ìЄä èxähä\äHä8ä ä èincompatible versionbuffer errorinsufficient memorydata errorstream errorfile errorstream end€0€ H`ð4VS_VERSION_INFO½ïþ?hStringFileInfoD040904E4dFileDescriptionzlib data compression library,FileVersion1.1.2*InternalNamezlib: OriginalFilenamezlib.dll2 ProductNameZLib.DLL‚5CommentsDLL support by Alessandro Iacopetti & Gilles Vollant|,LegalCopyright(C) 1995-1998 Jean-loup Gailly & Mark AdlerDVarFileInfo$Translation äHz6!7/7H7e7‡77°7í7 8(8D8_8{8–8°8Ö869p99!;8=>=`=l={=Š=>ð>?R? $g0ä3ð3ÿ34I8k88Ó;õ; <Î>?0$Ó1/2–2œ2³2+3Ú3÷3‡> >¯>Æ>/?@<1t1·4ì4¦5P689!:W;|=€=„=ˆ=Œ==”=˜=œ= =¤=¨=¬=°=ð>ÿ?PLØ0^12i4³46666 6$6(6,60646¥6´67P7¸78È8¤9´:ê:ù:_;3³?`X000 00000 0$0(0,00040&172W27†7Î7Ó78;8Z8ƒ88Æ8Ñ8ã8é8V:`:p:q<<¤=²=k?p?p|6E9¯9€r001>1Ï1Þ1‹2™266q7š7¢2H9O9a:K> l5.5r5x5~5„5Š55–5œ5¢5¨5®5´5è5î5ô5ú5666606<6E6T6c6l6y6Ž6Ÿ6²6·6Ç6Ì6Ñ6Ü6á6õ6þ6777,747<7C7c7¾7°¸0Ä0Ð0Ü0è0ô01 11$1Ð 0à( 3¤3¸3¼3Ô3ø3ü3444 44444libwww/Library/External/zlib.h0100644000076400001440000012122706555414446016072 0ustar danielusers/* zlib.h -- interface of the 'zlib' general purpose compression library version 1.1.2, March 19th, 1998 Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). */ #ifndef _ZLIB_H #define _ZLIB_H #include "zconf.h" #ifdef __cplusplus extern "C" { #endif #define ZLIB_VERSION "1.1.2" /* The 'zlib' compression library provides in-memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method (deflation) but other algorithms will be added later and will have the same stream interface. Compression can be done in a single step if the buffers are large enough (for example if an input file is mmap'ed), or can be done by repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output (providing more output space) before each call. The library also supports reading and writing files in gzip (.gz) format with an interface similar to that of stdio. The library does not install any signal handler. The decoder checks the consistency of the compressed data, so the library should never crash even in case of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); typedef void (*free_func) OF((voidpf opaque, voidpf address)); struct internal_state; typedef struct z_stream_s { Bytef *next_in; /* next input byte */ uInt avail_in; /* number of bytes available at next_in */ uLong total_in; /* total nb of input bytes read so far */ Bytef *next_out; /* next output byte should be put there */ uInt avail_out; /* remaining free space at next_out */ uLong total_out; /* total nb of bytes output so far */ char *msg; /* last error message, NULL if no error */ struct internal_state FAR *state; /* not visible by applications */ alloc_func zalloc; /* used to allocate the internal state */ free_func zfree; /* used to free the internal state */ voidpf opaque; /* private data object passed to zalloc and zfree */ int data_type; /* best guess about the data type: ascii or binary */ uLong adler; /* adler32 value of the uncompressed data */ uLong reserved; /* reserved for future use */ } z_stream; typedef z_stream FAR *z_streamp; /* The application must update next_in and avail_in when avail_in has dropped to zero. It must update next_out and avail_out when avail_out has dropped to zero. The application must initialize zalloc, zfree and opaque before calling the init function. All other fields are set by the compression library and must not be updated by the application. The opaque value provided by the application will be passed as the first parameter for calls of zalloc and zfree. This can be useful for custom memory management. The compression library attaches no meaning to the opaque value. zalloc must return Z_NULL if there is not enough memory for the object. If zlib is used in a multi-threaded application, zalloc and zfree must be thread safe. On 16-bit systems, the functions zalloc and zfree must be able to allocate exactly 65536 bytes, but will not be required to allocate more than this if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers returned by zalloc for objects of exactly 65536 bytes *must* have their offset normalized to zero. The default allocation function provided by this library ensures this (see zutil.c). To reduce memory requirements and avoid any allocation of 64K objects, at the expense of compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). The fields total_in and total_out can be used for statistics or progress reports. After compression, total_in holds the total size of the uncompressed data and may be saved for use in the decompressor (particularly if the decompressor wants to decompress everything in a single step). */ /* constants */ #define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ #define Z_SYNC_FLUSH 2 #define Z_FULL_FLUSH 3 #define Z_FINISH 4 /* Allowed flush values; see deflate() below for details */ #define Z_OK 0 #define Z_STREAM_END 1 #define Z_NEED_DICT 2 #define Z_ERRNO (-1) #define Z_STREAM_ERROR (-2) #define Z_DATA_ERROR (-3) #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) /* Return codes for the compression/decompression functions. Negative * values are errors, positive values are used for special but normal events. */ #define Z_NO_COMPRESSION 0 #define Z_BEST_SPEED 1 #define Z_BEST_COMPRESSION 9 #define Z_DEFAULT_COMPRESSION (-1) /* compression levels */ #define Z_FILTERED 1 #define Z_HUFFMAN_ONLY 2 #define Z_DEFAULT_STRATEGY 0 /* compression strategy; see deflateInit2() below for details */ #define Z_BINARY 0 #define Z_ASCII 1 #define Z_UNKNOWN 2 /* Possible values of the data_type field */ #define Z_DEFLATED 8 /* The deflate compression method (the only one supported in this version) */ #define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ /* basic functions */ extern const char * ZEXPORT zlibVersion OF((void)); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check is automatically made by deflateInit and inflateInit. */ /* extern int ZEXPORT deflateInit OF((z_streamp strm, int level)); Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default allocation functions. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION requests a default compromise between speed and compression (currently equivalent to level 6). deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if level is not a valid compression level, Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible with the version assumed by the caller (ZLIB_VERSION). msg is set to null if there is no error message. deflateInit does not perform any compression: this will be done by deflate(). */ extern int ZEXPORT deflate OF((z_streamp strm, int flush)); /* deflate compresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. The detailed semantics are as follows. deflate performs one or both of the following actions: - Compress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - Provide more output starting at next_out and update next_out and avail_out accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter should be set only when necessary (in interactive applications). Some output may be provided even if flush is not set. Before the call of deflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more output, and updating avail_in or avail_out accordingly; avail_out should never be zero before the call. The application can consume the compressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. If the parameter flush is set to Z_SYNC_FLUSH, all pending output is flushed to the output buffer and the output is aligned on a byte boundary, so that the decompressor can get all input data available so far. (In particular avail_in is zero after the call if enough output space has been provided before the call.) Flushing may degrade compression for some compression algorithms and so it should be used only when necessary. If flush is set to Z_FULL_FLUSH, all output is flushed as with Z_SYNC_FLUSH, and the compression state is reset so that decompression can restart from this point if previous compressed data has been damaged or if random access is desired. Using Z_FULL_FLUSH too often can seriously degrade the compression. If deflate returns with avail_out == 0, this function must be called again with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero avail_out). If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was enough output space; if deflate returns with Z_OK, this function must be called again with Z_FINISH and more output space (updated avail_out) but no more input data, until it returns with Z_STREAM_END or an error. After deflate has returned Z_STREAM_END, the only possible operations on the stream are deflateReset or deflateEnd. Z_FINISH can be used immediately after deflateInit if all the compression is to be done in a single step. In this case, avail_out must be at least 0.1% larger than avail_in plus 12 bytes. If deflate does not return Z_STREAM_END, then it must be called again as described above. deflate() sets strm->adler to the adler32 checksum of all input read so far (that is, total_in bytes). deflate() may update data_type if it can make a good guess about the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered binary. This field is only for information purposes and does not affect the compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if all input has been consumed and all output has been produced (only when flush is set to Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible. */ extern int ZEXPORT deflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending output. deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent, Z_DATA_ERROR if the stream was freed prematurely (some input or output was discarded). In the error case, msg may be set but then points to a static string (which must not be deallocated). */ /* extern int ZEXPORT inflateInit OF((z_streamp strm)); Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. If next_in is not Z_NULL and avail_in is large enough (the exact value depends on the compression method), inflateInit determines the compression method from the zlib header and allocates all data structures accordingly; otherwise the allocation will be deferred to the first call of inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to use default allocation functions. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the version assumed by the caller. msg is set to null if there is no error message. inflateInit does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) */ extern int ZEXPORT inflate OF((z_streamp strm, int flush)); /* inflate decompresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may some introduce some output latency (reading input without producing any output) except when forced to flush. The detailed semantics are as follows. inflate performs one or both of the following actions: - Decompress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in is updated and processing will resume at this point for the next call of inflate(). - Provide more output starting at next_out and update next_out and avail_out accordingly. inflate() provides as much output as possible, until there is no more input data or no more space in the output buffer (see below about the flush parameter). Before the call of inflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more output, and updating the next_* and avail_* values accordingly. The application can consume the uncompressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of inflate(). If inflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much output as possible to the output buffer. The flushing behavior of inflate is not specified for values of the flush parameter other than Z_SYNC_FLUSH and Z_FINISH, but the current implementation actually flushes as much output as possible anyway. inflate() should normally be called until it returns Z_STREAM_END or an error. However if all decompression is to be performed in a single step (a single call of inflate), the parameter flush should be set to Z_FINISH. In this case all pending input is processed and all pending output is flushed; avail_out must be large enough to hold all the uncompressed data. (The size of the uncompressed data may have been saved by the compressor for this purpose.) The next operation on this stream must be inflateEnd to deallocate the decompression state. The use of Z_FINISH is never required, but can be used to inform inflate that a faster routine may be used for the single inflate() call. If a preset dictionary is needed at this point (see inflateSetDictionary below), inflate sets strm-adler to the adler32 checksum of the dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise it sets strm->adler to the adler32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described below. At the end of the stream, inflate() checks that its computed adler32 checksum is equal to that saved by the compressor and returns Z_STREAM_END only if the checksum is correct. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has been reached and all uncompressed output has been produced, Z_NEED_DICT if a preset dictionary is needed at this point, Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if no progress is possible or if there was not enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR case, the application may then call inflateSync to look for a good compression block. */ extern int ZEXPORT inflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending output. inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent. In the error case, msg may be set but then points to a static string (which must not be deallocated). */ /* Advanced functions */ /* The following functions are needed only in some special applications. */ /* extern int ZEXPORT deflateInit2 OF((z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy)); This is another version of deflateInit with more compression options. The fields next_in, zalloc, zfree and opaque must be initialized before by the caller. The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. The windowBits parameter is the base two logarithm of the window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. Larger values of this parameter result in better compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. The memLevel parameter specifies how much memory should be allocated for the internal compression state. memLevel=1 uses minimum memory but is slow and reduces compression ratio; memLevel=9 uses maximum memory for optimal speed. The default value is 8. See zconf.h for total memory usage as a function of windowBits and memLevel. The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no string match). Filtered data consists mostly of small values with a somewhat random distribution. In this case, the compression algorithm is tuned to compress them better. The effect of Z_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects the compression ratio but not the correctness of the compressed output even if it is not set appropriately. deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid method). msg is set to null if there is no error message. deflateInit2 does not perform any compression: this will be done by deflate(). */ extern int ZEXPORT deflateSetDictionary OF((z_streamp strm, const Bytef *dictionary, uInt dictLength)); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. This function must be called immediately after deflateInit or deflateInit2, before any call of deflate. The compressor and decompressor must use exactly the same dictionary (see inflateSetDictionary). The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly used strings preferably put towards the end of the dictionary. Using a dictionary is most useful when the data to be compressed is short and can be predicted with good accuracy; the data can then be compressed better than with the default empty dictionary. Depending on the size of the compression data structures selected by deflateInit or deflateInit2, a part of the dictionary may in effect be discarded, for example if the dictionary is larger than the window size in deflate or deflate2. Thus the strings most likely to be useful should be put at the end of the dictionary, not at the front. Upon return of this function, strm->adler is set to the Adler32 value of the dictionary; the decompressor may later use this value to determine which dictionary has been used by the compressor. (The Adler32 value applies to the whole dictionary even if only a subset of the dictionary is actually used by the compressor.) deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a parameter is invalid (such as NULL dictionary) or the stream state is inconsistent (for example if deflate has already been called for this stream or if the compression method is bsort). deflateSetDictionary does not perform any compression: this will be done by deflate(). */ extern int ZEXPORT deflateCopy OF((z_streamp dest, z_streamp source)); /* Sets the destination stream as a complete copy of the source stream. This function can be useful when several compression strategies will be tried, for example when there are several ways of pre-processing the input data with a filter. The streams that will be discarded should then be freed by calling deflateEnd. Note that deflateCopy duplicates the internal compression state which can be quite large, so this strategy is slow and can consume lots of memory. deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc being NULL). msg is left unchanged in both source and destination. */ extern int ZEXPORT deflateReset OF((z_streamp strm)); /* This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate all the internal compression state. The stream will keep the same compression level and any other attributes that may have been set by deflateInit2. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). */ extern int ZEXPORT deflateParams OF((z_streamp strm, int level, int strategy)); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2. This can be used to switch between compression and straight copy of the input data, or to switch to a different kind of input data requiring a different strategy. If the compression level is changed, the input available so far is compressed with the old level (and may be flushed); the new level will take effect only at the next call of deflate(). Before the call of deflateParams, the stream state must be set as for a call of deflate(), since the currently available input may have to be compressed and flushed. In particular, strm->avail_out must be non-zero. deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if strm->avail_out was zero. */ /* extern int ZEXPORT inflateInit2 OF((z_streamp strm, int windowBits)); This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. The windowBits parameter is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. The default value is 15 if inflateInit is used instead. If a compressed stream with a larger window size is given as input, inflate() will return with the error code Z_DATA_ERROR instead of trying to allocate a larger window. inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative memLevel). msg is set to null if there is no error message. inflateInit2 does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) */ extern int ZEXPORT inflateSetDictionary OF((z_streamp strm, const Bytef *dictionary, uInt dictLength)); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate if this call returned Z_NEED_DICT. The dictionary chosen by the compressor can be determined from the Adler32 value returned by this call of inflate. The compressor and decompressor must use exactly the same dictionary (see deflateSetDictionary). inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a parameter is invalid (such as NULL dictionary) or the stream state is inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the expected one (incorrect Adler32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). */ extern int ZEXPORT inflateSync OF((z_streamp strm)); /* Skips invalid compressed data until a full flush point (see above the description of deflate with Z_FULL_FLUSH) can be found, or until all available input is skipped. No output is provided. inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the success case, the application may save the current current value of total_in which indicates where valid compressed data was found. In the error case, the application may repeatedly call inflateSync, providing more input each time, until success or end of the input data. */ extern int ZEXPORT inflateReset OF((z_streamp strm)); /* This function is equivalent to inflateEnd followed by inflateInit, but does not free and reallocate all the internal decompression state. The stream will keep attributes that may have been set by inflateInit2. inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). */ /* utility functions */ /* The following utility functions are implemented on top of the basic stream-oriented functions. To simplify the interface, some default options are assumed (compression level and memory usage, standard memory allocation functions). The source code of these utility functions can easily be modified if you need special options. */ extern int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least 0.1% larger than sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. This function can be used to compress a whole file at once if the input file is mmap'ed. compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer. */ extern int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level)); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least 0.1% larger than sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ extern int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.) Upon exit, destLen is the actual size of the compressed buffer. This function can be used to decompress a whole file at once if the input file is mmap'ed. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted. */ typedef voidp gzFile; extern gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); /* Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen ("rb" or "wb") but can also include a compression level ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman only compression as in "wb1h". (See the description of deflateInit2 for more information about the strategy parameter.) gzopen can be used to read a file which is not in gzip format; in this case gzread will directly read from the file without decompression. gzopen returns NULL if the file could not be opened or if there was insufficient memory to allocate the (de)compression state; errno can be checked to distinguish the two cases (if errno is zero, the zlib error is Z_MEM_ERROR). */ extern gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); /* gzdopen() associates a gzFile with the file descriptor fd. File descriptors are obtained from calls like open, dup, creat, pipe or fileno (in the file has been previously opened with fopen). The mode parameter is as in gzopen. The next call of gzclose on the returned gzFile will also close the file descriptor fd, just like fclose(fdopen(fd), mode) closes the file descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). gzdopen returns NULL if there was insufficient memory to allocate the (de)compression state. */ extern int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* Dynamically update the compression level or strategy. See the description of deflateInit2 for the meaning of these parameters. gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not opened for writing. */ extern int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); /* Reads the given number of uncompressed bytes from the compressed file. If the input file was not in gzip format, gzread copies the given number of bytes into the buffer. gzread returns the number of uncompressed bytes actually read (0 for end of file, -1 for error). */ extern int ZEXPORT gzwrite OF((gzFile file, const voidp buf, unsigned len)); /* Writes the given number of uncompressed bytes into the compressed file. gzwrite returns the number of uncompressed bytes actually written (0 in case of error). */ extern int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); /* Converts, formats, and writes the args to the compressed file under control of the format string, as in fprintf. gzprintf returns the number of uncompressed bytes actually written (0 in case of error). */ extern int ZEXPORT gzputs OF((gzFile file, const char *s)); /* Writes the given null-terminated string to the compressed file, excluding the terminating null character. gzputs returns the number of characters written, or -1 in case of error. */ extern char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); /* Reads bytes from the compressed file until len-1 characters are read, or a newline character is read and transferred to buf, or an end-of-file condition is encountered. The string is then terminated with a null character. gzgets returns buf, or Z_NULL in case of error. */ extern int ZEXPORT gzputc OF((gzFile file, int c)); /* Writes c, converted to an unsigned char, into the compressed file. gzputc returns the value that was written, or -1 in case of error. */ extern int ZEXPORT gzgetc OF((gzFile file)); /* Reads one byte from the compressed file. gzgetc returns this byte or -1 in case of end of file or error. */ extern int ZEXPORT gzflush OF((gzFile file, int flush)); /* Flushes all pending output into the compressed file. The parameter flush is as in the deflate() function. The return value is the zlib error number (see function gzerror below). gzflush returns Z_OK if the flush parameter is Z_FINISH and all output could be flushed. gzflush should be called only when strictly necessary because it can degrade compression. */ extern z_off_t ZEXPORT gzseek OF((gzFile file, z_off_t offset, int whence)); /* Sets the starting position for the next gzread or gzwrite on the given compressed file. The offset represents a number of bytes in the uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new starting position. gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in particular if the file is opened for writing and the new starting position would be before the current position. */ extern int ZEXPORT gzrewind OF((gzFile file)); /* Rewinds the given file. This function is supported only for reading. gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) */ extern z_off_t ZEXPORT gztell OF((gzFile file)); /* Returns the starting position for the next gzread or gzwrite on the given compressed file. This position represents a number of bytes in the uncompressed data stream. gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) */ extern int ZEXPORT gzeof OF((gzFile file)); /* Returns 1 when EOF has previously been detected reading the given input stream, otherwise zero. */ extern int ZEXPORT gzclose OF((gzFile file)); /* Flushes all pending output if necessary, closes the compressed file and deallocates all the (de)compression state. The return value is the zlib error number (see function gzerror below). */ extern const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); /* Returns the error message for the last error which occurred on the given compressed file. errnum is set to zlib error number. If an error occurred in the file system and not in the compression library, errnum is set to Z_ERRNO and the application may consult errno to get the exact error code. */ /* checksum functions */ /* These functions are not related to compression but are exported anyway because they might be useful in applications using the compression library. */ extern uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and return the updated checksum. If buf is NULL, this function returns the required initial value for the checksum. An Adler-32 checksum is almost as reliable as a CRC32 but can be computed much faster. Usage example: uLong adler = adler32(0L, Z_NULL, 0); while (read_buffer(buffer, length) != EOF) { adler = adler32(adler, buffer, length); } if (adler != original_adler) error(); */ extern uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running crc with the bytes buf[0..len-1] and return the updated crc. If buf is NULL, this function returns the required initial value for the crc. Pre- and post-conditioning (one's complement) is performed within this function so it shouldn't be done by the application. Usage example: uLong crc = crc32(0L, Z_NULL, 0); while (read_buffer(buffer, length) != EOF) { crc = crc32(crc, buffer, length); } if (crc != original_crc) error(); */ /* various hacks, don't look :) */ /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ extern int ZEXPORT deflateInit_ OF((z_streamp strm, int level, const char *version, int stream_size)); extern int ZEXPORT inflateInit_ OF((z_streamp strm, const char *version, int stream_size)); extern int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size)); extern int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, const char *version, int stream_size)); #define deflateInit(strm, level) \ deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit(strm) \ inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) #define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ (strategy), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit2(strm, windowBits) \ inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) #if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL) struct internal_state {int dummy;}; /* hack for buggy compilers */ #endif extern const char * ZEXPORT zError OF((int err)); extern int ZEXPORT inflateSyncPoint OF((z_streamp z)); extern const uLongf * ZEXPORT get_crc_table OF((void)); #ifdef __cplusplus } #endif #endif /* _ZLIB_H */ libwww/Library/External/zlib.lib0100644000076400001440000010356206555414447016414 0ustar danielusers! / 890902786 0 2838 ` }¶NŒŒ P P""#Ô#Ô%š%š'`'`)*)**ò*ò,¼,¼.„.„223Þ3Þ7`7`9"9">h>hEpEpNBNBPPQÈQÈSŽSŽUXUXW W XèXèZ¸Z¸^J^J…¬…¬@*@*AìAì:ä:äHöHöG2G2L€L€5 5 J¸J¸zøzø\~\~0T0TÆÆC®C®<¦<¦pBpB``gDgDc¢c¢jâjâl®l®rrsÒsÒy6y6wtwtaÔaÔetetu u nxnxii€J€J‚ ‚ ƒÜƒÜ~~~~|º|º__IMPORT_DESCRIPTOR_zlib__NULL_IMPORT_DESCRIPTORzlib_NULL_THUNK_DATA__imp__adler32@12_adler32@12__imp__compress@16_compress@16__imp__crc32@12_crc32@12__imp__deflate@8_deflate@8__imp__deflateCopy@8_deflateCopy@8__imp__deflateEnd@4_deflateEnd@4__imp__deflateInit2_@32_deflateInit2_@32__imp__deflateInit_@16_deflateInit_@16__imp__deflateParams@12_deflateParams@12__imp__deflateReset@4_deflateReset@4__imp__deflateSetDictionary@12_deflateSetDictionary@12__imp__gzclose@4_gzclose@4__imp__gzdopen@8_gzdopen@8__imp__gzerror@8_gzerror@8__imp__gzflush@8_gzflush@8__imp__gzopen@8_gzopen@8__imp__gzread@12_gzread@12__imp__gzwrite@12_gzwrite@12__imp__inflate@8_inflate@8__imp__inflateEnd@4_inflateEnd@4__imp__inflateInit2_@16_inflateInit2_@16__imp__inflateInit_@12_inflateInit_@12__imp__inflateReset@4_inflateReset@4__imp__inflateSetDictionary@12_inflateSetDictionary@12__imp__inflateSync@4_inflateSync@4__imp__uncompress@16_uncompress@16__imp__zlibVersion@0_zlibVersion@0__imp__gzprintf_gzprintf__imp__gzputc@8_gzputc@8__imp__gzgetc@4_gzgetc@4__imp__gzseek@12_gzseek@12__imp__gzrewind@4_gzrewind@4__imp__gztell@4_gztell@4__imp__gzeof@4_gzeof@4__imp__gzsetparams@12_gzsetparams@12__imp__zError@4_zError@4__imp__inflateSyncPoint@4_inflateSyncPoint@4__imp__get_crc_table@0_get_crc_table@0__imp__compress2@20_compress2@20__imp__gzputs@8_gzputs@8__imp__gzgets@12_gzgets@12__imp__unzOpen@4_unzOpen@4__imp__unzClose@4_unzClose@4__imp__unzGetGlobalInfo@8_unzGetGlobalInfo@8__imp__unzGetCurrentFileInfo@32_unzGetCurrentFileInfo@32__imp__unzGoToFirstFile@4_unzGoToFirstFile@4__imp__unzGoToNextFile@4_unzGoToNextFile@4__imp__unzOpenCurrentFile@4_unzOpenCurrentFile@4__imp__unzReadCurrentFile@12_unzReadCurrentFile@12__imp__unztell@4_unztell@4__imp__unzeof@4_unzeof@4__imp__unzCloseCurrentFile@4_unzCloseCurrentFile@4__imp__unzGetGlobalComment@12_unzGetGlobalComment@12__imp__unzStringFileNameCompare@12_unzStringFileNameCompare@12__imp__unzLocateFile@12_unzLocateFile@12__imp__unzGetLocalExtrafield@12_unzGetLocalExtrafield@12__imp__zipOpen@8_zipOpen@8__imp__zipOpenNewFileInZip@40_zipOpenNewFileInZip@40__imp__zipWriteInFileInZip@12_zipWriteInFileInZip@12__imp__zipCloseFileInZip@4_zipCloseFileInZip@4__imp__zipClose@8_zipClose@8/ 890902786 0 2848 ` @¶NŒP "Ô#š%`'*)ò*¼,„.2Þ3`7"9h>pEBNPÈQŽSXU WèX¸ZJ^¬…*@ìAä:öH2G€L 5¸Jøz~\T0Æ®C¦<Bp`Dg¢câj®lrÒs6ytwÔate uxniJ€ ‚܃~~º|}* )%!, +#"&$(.708/;12:-34965'@?<=>* )%!, +#"&$(.708/;12:-34965'@?<=>__IMPORT_DESCRIPTOR_zlib__NULL_IMPORT_DESCRIPTOR__imp__adler32@12__imp__compress2@20__imp__compress@16__imp__crc32@12__imp__deflate@8__imp__deflateCopy@8__imp__deflateEnd@4__imp__deflateInit2_@32__imp__deflateInit_@16__imp__deflateParams@12__imp__deflateReset@4__imp__deflateSetDictionary@12__imp__get_crc_table@0__imp__gzclose@4__imp__gzdopen@8__imp__gzeof@4__imp__gzerror@8__imp__gzflush@8__imp__gzgetc@4__imp__gzgets@12__imp__gzopen@8__imp__gzprintf__imp__gzputc@8__imp__gzputs@8__imp__gzread@12__imp__gzrewind@4__imp__gzseek@12__imp__gzsetparams@12__imp__gztell@4__imp__gzwrite@12__imp__inflate@8__imp__inflateEnd@4__imp__inflateInit2_@16__imp__inflateInit_@12__imp__inflateReset@4__imp__inflateSetDictionary@12__imp__inflateSync@4__imp__inflateSyncPoint@4__imp__uncompress@16__imp__unzClose@4__imp__unzCloseCurrentFile@4__imp__unzGetCurrentFileInfo@32__imp__unzGetGlobalComment@12__imp__unzGetGlobalInfo@8__imp__unzGetLocalExtrafield@12__imp__unzGoToFirstFile@4__imp__unzGoToNextFile@4__imp__unzLocateFile@12__imp__unzOpen@4__imp__unzOpenCurrentFile@4__imp__unzReadCurrentFile@12__imp__unzStringFileNameCompare@12__imp__unzeof@4__imp__unztell@4__imp__zError@4__imp__zipClose@8__imp__zipCloseFileInZip@4__imp__zipOpen@8__imp__zipOpenNewFileInZip@40__imp__zipWriteInFileInZip@12__imp__zlibVersion@0_adler32@12_compress2@20_compress@16_crc32@12_deflate@8_deflateCopy@8_deflateEnd@4_deflateInit2_@32_deflateInit_@16_deflateParams@12_deflateReset@4_deflateSetDictionary@12_get_crc_table@0_gzclose@4_gzdopen@8_gzeof@4_gzerror@8_gzflush@8_gzgetc@4_gzgets@12_gzopen@8_gzprintf_gzputc@8_gzputs@8_gzread@12_gzrewind@4_gzseek@12_gzsetparams@12_gztell@4_gzwrite@12_inflate@8_inflateEnd@4_inflateInit2_@16_inflateInit_@12_inflateReset@4_inflateSetDictionary@12_inflateSync@4_inflateSyncPoint@4_uncompress@16_unzClose@4_unzCloseCurrentFile@4_unzGetCurrentFileInfo@32_unzGetGlobalComment@12_unzGetGlobalInfo@8_unzGetLocalExtrafield@12_unzGoToFirstFile@4_unzGoToNextFile@4_unzLocateFile@12_unzOpen@4_unzOpenCurrentFile@4_unzReadCurrentFile@12_unzStringFileNameCompare@12_unzeof@4_unztell@4_zError@4_zipClose@8_zipCloseFileInZip@4_zipOpen@8_zipOpenNewFileInZip@40_zipWriteInFileInZip@12_zlibVersion@0zlib_NULL_THUNK_DATAzlib.dll/ 890902786 0 604 ` L5€à  .idata$2DX@0À.idata$6 vX@ À zlib.dll@comp.id‡ÿÿ.idata$2@Àh.idata$6.idata$4@Àh.idata$5@Àh6L__IMPORT_DESCRIPTOR_zlib__NULL_IMPORT_DESCRIPTORzlib_NULL_THUNK_DATAzlib.dll/ 890902786 0 145 ` L5P.idata$3<@0À@comp.id‡ÿÿ__NULL_IMPORT_DESCRIPTOR zlib.dll/ 890902786 0 170 ` L5l.idata$5d@0À.idata$4h@0À@comp.id‡ÿÿzlib_NULL_THUNK_DATAzlib.dll/ 890902786 0 391 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4/__imp__adler32@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 393 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%'€'€@comp.id‡ÿÿ.text  .idata$5.idata$41__imp__compress2@20__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 392 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$40__imp__compress@16__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__crc32@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__deflate@8__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 394 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$42__imp__deflateCopy@8__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 393 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$41__imp__deflateEnd@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 397 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$45__imp__deflateInit2_@32__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 396 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$44__imp__deflateInit_@16__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 397 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ% € €@comp.id‡ÿÿ.text  .idata$5.idata$45__imp__deflateParams@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 395 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ% € €@comp.id‡ÿÿ.text  .idata$5.idata$43__imp__deflateReset@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 404 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ% € €@comp.id‡ÿÿ.text  .idata$5.idata$4#<__imp__deflateSetDictionary@12__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 396 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%&€&€@comp.id‡ÿÿ.text  .idata$5.idata$44__imp__get_crc_table@0__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ% € €@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__gzclose@4__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ% € €@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__gzdopen@8__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 388 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%"€"€@comp.id‡ÿÿ.text_gzeof@4 .idata$5.idata$4,__imp__gzeof@4__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__gzerror@8__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__gzflush@8__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__gzgetc@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%)€)€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__gzgets@12__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__gzopen@8__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__gzprintf__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__gzputc@8__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%(€(€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__gzputs@8__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__gzread@12__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 391 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ% € €@comp.id‡ÿÿ.text  .idata$5.idata$4/__imp__gzrewind@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__gzseek@12__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 395 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%#€#€@comp.id‡ÿÿ.text  .idata$5.idata$43__imp__gzsetparams@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%!€!€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__gztell@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 391 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4/__imp__gzwrite@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__inflate@8__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 393 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$41__imp__inflateEnd@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 397 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$45__imp__inflateInit2_@16__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 396 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$44__imp__inflateInit_@12__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 395 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$43__imp__inflateReset@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 404 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$4#<__imp__inflateSetDictionary@12__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 394 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$42__imp__inflateSync@4__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 399 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%%€%€@comp.id‡ÿÿ.text  .idata$5.idata$47__imp__inflateSyncPoint@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 394 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$42__imp__uncompress@16__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 391 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%>€>€@comp.id‡ÿÿ.text  .idata$5.idata$4/__imp__unzClose@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 402 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%H€H€@comp.id‡ÿÿ.text  .idata$5.idata$4!:__imp__unzCloseCurrentFile@4__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 405 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%@€@€@comp.id‡ÿÿ.text  .idata$5.idata$4$=__imp__unzGetCurrentFileInfo@32__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 403 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%I€I€@comp.id‡ÿÿ.text  .idata$5.idata$4";__imp__unzGetGlobalComment@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 399 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%?€?€@comp.id‡ÿÿ.text  .idata$5.idata$47__imp__unzGetGlobalInfo@8__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 405 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%L€L€@comp.id‡ÿÿ.text  .idata$5.idata$4$=__imp__unzGetLocalExtrafield@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 399 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%A€A€@comp.id‡ÿÿ.text  .idata$5.idata$47__imp__unzGoToFirstFile@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 398 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%B€B€@comp.id‡ÿÿ.text  .idata$5.idata$46__imp__unzGoToNextFile@4__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 397 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%K€K€@comp.id‡ÿÿ.text  .idata$5.idata$45__imp__unzLocateFile@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%=€=€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__unzOpen@4__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 401 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%C€C€@comp.id‡ÿÿ.text  .idata$5.idata$4 9__imp__unzOpenCurrentFile@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 402 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%D€D€@comp.id‡ÿÿ.text  .idata$5.idata$4!:__imp__unzReadCurrentFile@12__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 408 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%J€J€@comp.id‡ÿÿ.text  .idata$5.idata$4'@__imp__unzStringFileNameCompare@12__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%G€G€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__unzeof@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%F€F€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__unztell@4__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 389 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%$€$€@comp.id‡ÿÿ.text  .idata$5.idata$4-__imp__zError@4__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 391 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%T€T€@comp.id‡ÿÿ.text  .idata$5.idata$4/__imp__zipClose@8__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 400 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%S€S€@comp.id‡ÿÿ.text  .idata$5.idata$48__imp__zipCloseFileInZip@4__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 390 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%P€P€@comp.id‡ÿÿ.text  .idata$5.idata$4.__imp__zipOpen@8__IMPORT_DESCRIPTOR_zlibzlib.dll/ 890902786 0 403 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%Q€Q€@comp.id‡ÿÿ.text  .idata$5.idata$4";__imp__zipOpenNewFileInZip@40__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 403 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%R€R€@comp.id‡ÿÿ.text  .idata$5.idata$4";__imp__zipWriteInFileInZip@12__IMPORT_DESCRIPTOR_zlib zlib.dll/ 890902786 0 394 ` L5¤ .textŒ’  `.idata$5œ@0À.idata$4 @0Àÿ%€€@comp.id‡ÿÿ.text  .idata$5.idata$42__imp__zlibVersion@0__IMPORT_DESCRIPTOR_zliblibwww/Library/External/Makefile.in0100644000076400001440000001354107405520526017015 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ INC := $(wildcard *.h) DLL := $(wildcard *.dll) LIB := $(wildcard *.lib) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = $(INC) $(DLL) $(LIB) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/External/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/External distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/External/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/Test/0040755000076400001440000000000007405520570014103 5ustar danieluserslibwww/Library/Test/CVS/0040755000076400001440000000000007405517330014536 5ustar danieluserslibwww/Library/Test/CVS/Root0100644000076400001440000000005607405517330015402 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/Test/CVS/Repository0100644000076400001440000000002407405517330016631 0ustar danieluserslibwww/Library/Test libwww/Library/Test/CVS/Entries0100644000076400001440000000020207405517330016061 0ustar danielusers/.cvsignore/1.1/Wed Aug 21 14:12:54 1996// /Makefile.am/1.4/Mon Jul 27 01:42:23 1998// /site.exp/1.3/Mon Jul 27 02:00:51 1998// D libwww/Library/Test/CVS/Entries.Log0100644000076400001440000000007407405517334016614 0ustar danielusersA D/User//// A D/config//// A D/src//// A D/w3clib.test//// libwww/Library/Test/User/0040755000076400001440000000000007405520570015021 5ustar danieluserslibwww/Library/Test/User/CVS/0040755000076400001440000000000007405517331015455 5ustar danieluserslibwww/Library/Test/User/CVS/Root0100644000076400001440000000005607405517330016320 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/Test/User/CVS/Repository0100644000076400001440000000003107405517330017545 0ustar danieluserslibwww/Library/Test/User libwww/Library/Test/User/CVS/Entries0100644000076400001440000000041507405517331017006 0ustar danielusers/.cvsignore/1.1/Wed Aug 21 14:12:57 1996// /Makefile.am/1.1/Mon Aug 5 17:20:49 1996// /Overview.html/1.3/Sun Feb 16 18:41:14 1997// /gluecode.html/1.2/Thu Aug 8 15:31:30 1996// /running.html/1.3/Sun Feb 16 18:41:14 1997// /tests.html/1.5/Mon Jul 27 02:00:52 1998// D libwww/Library/Test/User/Makefile0100644000076400001440000001406307405520570016462 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/Test/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/Test/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/Test/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/Test/User/.cvsignore0100644000076400001440000000002506206614551017014 0ustar danielusersMakefile.in Makefile libwww/Library/Test/User/Makefile.am0100644000076400001440000000022106201426561017043 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) libwww/Library/Test/User/Overview.html0100644000076400001440000000776206301652312017520 0ustar danielusers Testing of the LibWWW

    Core Function Testing (beta version)

    To aid the development and progress of the World Wide Web Sample Code Library, we have added tests to the library. Largely aiding the developers into showing which functions are working and when in fixing the library, which functions break.

    Documentation on this testing is a little sparse and inadequate. Improvements will be made especially concerning documentation.

    Ultimately, core function testing just amounts to writing lots of glue code and scripting. Large chunks are pretty repetitive, while others add lots of variance in patterns. What it amounts to is trying to capture all the possible failures in the glue code, such that the scripting language will not crash while being run in dejagnu. Unfortunately, I haven't been too good at capturing everything, but it suffices to show that the functions work.

    Xing is now here working on the glue code to solidify the functionality between Tcl and C, so that quick implementations can be done using Tk and such. That will also result in a nice testing interface. Currently, my work has caught typos, small bugs and such, with the largest noticable flaw in the core library being in the parsing. The parsing functions do not hold to rfc1808.

    This code is mostly here to show you that the library is functional, and does what it says. It is not a very robust testing method, as it can crash easily with improper setup. Also, a lot of this testing is black box testing...we need to peer into a lot of the data structures to test some of the results. However, I haven't got around to creating functions to output the elements of data structures like HTList for example.

    Also, a lot of functions that have unique data structures (i.e. are the only function or so to use it.) haven't been implemented.

    I've tried to make the glue code as complete as possible for the modules listed. A couple modules were only done simply to get at creation controls to pass them along to other functions.

    Current Modules Supported fully with WWWLib 4.1:

    • HTParse
    • HTEscape
    • HTLink
    • HTAnchor
    • HTRequest

    Current Modules only Partially supported:

    • HTAssoc
    • HTFWriter
    • HTList
    • HTUserProfile


    Current Lingering Problems
    • Parsing Errors. These errors are attributed to the library itself. The code does not support the new rfc concerning relative urls and has trouble simplifying directory structures.
    • Parsing errors due to the method in which tcl handles strings. Have not yet found work around.
    • Avoid HTCleanTelnetString tests. They have characters causing havoc to dejagnu. Either test individual modules or remove it.
    • Showing enumerations: current solution is to output the octal value.
    • functions using (void *) are not currently fully functional.
    • Escape characters are causing problems with tcl/expect. When trying to run HTCleanTelnetString tests, it eventually fails the rest as the program apparently is spewing a specific escape character.
    • extern void HTRequest_setPostCallback (HTRequest * request, HTPostCallback * cbf) not implemented
    • extern HTPostCallback * HTRequest_postCallback (HTRequest * request) not implemented
    • Nagging error with processing HTRequest.exp. Apparently the header functions (i.e. gnhd, rqhd, etc.) are crashing wwwtest. I have yet to isolate the cause.


    alian@mit.edu  (neon@w3.org) Alexander Lian. July 19.1996
    libwww/Library/Test/User/gluecode.html0100644000076400001440000001603206202404122017461 0ustar danielusers Glue code for the LibWWW to Tcl

    Creating glue code for the LibWWW



    Introduction:

    The glue code from C to Tcl of the LibWWW was created to create Tcl scripts to test the Library. The main software tool utilized isDejaGnu. The glue code was created for the testing of individual core functions of the library. With glue code, they became functions in the Tcl interpreter. The Tcl interpreter was altered to include the glue code. Thus, aside from testing, the tcl shell can be used to create small applications using tcl/tk.

    Creating Tcl glue code

    The glue code itself follows a standard format:

    
    int function_name_tcl(ClientData clientData, Tcl_Interp *interp, 
    		      int argc, char **argv) {
        if (argc == 2) {
    	char *str    = argv[1];
    	....variable initialization....
    	....function calls...
    	Tcl_AppendResult(interp, result, NULL);
    	return TCL_OK;
        }
        else {
    	
    	....alert user to improper function call - wrong number of arguments?
    	return TCL_ERROR;
        }
    }
    
    

    The tcl function can be broken up into a number of possible parts:

    Arguments

    Function arguments are treated just like command line arguments for C. To check the function has the right number of parameters, you check argc. Otherwise you return an error statement.

    Variable Intialization

    All variables in connection to the function need to be initialized. This includes all variables for the function parameters and function outputs. Also, there is also the need to initialize enough Tcl hash table pointers for the number of data structures you have.

    Hash Table retrieving

    This is only used if there are data structures that can't be represented by the standard things like numbers, characters or strings. Retrieval involves creating an entry pointer to the hash table with the proper associated keyname. If there is no such keyname, it will return NULL, which should be checked for. Then the structures need to be retrieved out of the table.

    Function calling

    Once the data structures are retrieved, the function can be called with all the necessary parameters.

    Hash Table storing

    If there is an output from the function that is a data structure that needs to be added to the hash table, you store it with a unique keyname. The keyname should be returned to the tcl interpreter, so it may be called again.

    Converting function output to strings for Tcl

    Since the Tcl interpreter always wants a string output, it is necessary to convert outputs to strings. For numbers, this just involves printing the number to a string. For enumerations, the options are to print the associated value, or create a function to return the proper name. For data structures, returning the keyname associated with the hash table is the proper representation.

    Errors

    For any case, where checks do not return the proper boolean, you should always try to output a string the the Tcl Interpreter describing the error.

    Tcl Status

    To properly exit the function, and to give Tcl notification of what kind of failure took place, you should return a Tcl flag. This should be usually TCL_OK or TCL_ERROR. I believe there are others.

    Examples of Tcl glue code.

    Adding to it Tcl Interpreter

    Adding functions to the library involves creating a main program which will be a new Tcl interpreter with your functions. Here's a rough coding of what should be there:

    
    #include "tcl.h" /*This includes the Tcl libraries and Expect Libraries*/
    ...other includes
    Tcl_HashTable hash_table_name   /*Intializing hash tables*/
    typedef struct{
        char           *name;
        Tcl_CmdProc    *proc;
        ClientData     data;
        int            flags;
    } LibraryFunction;
    
    static LibraryFunction www_commands[] = {
        { "C_function_name", C_function_name_tcl,		   NULL, 0 },
    	...other functions...
        {0}
    };
    
    int main_Init(Tcl_Interp *interp) {
        LibraryFunction *c;
        /*Hash Table initialization*/
        Tcl_InitHashTable(&Hash_Table_name, TCL_STRING_KEYS);
        for(c = www_commands; c->name; c++){
    	Tcl_CreateCommand(interp, c->name, c->proc, c->data,
    			  NULL /* delete proc*/);
        }
    }
    void main_Terminate() {
        Tcl_DeleteHashTable(&Hash_Table_name);
    }
    
    
    
    
    

    What's important here is adding the function name to the www_commands[]. This adds your function to the tcl interpreter.


    Standard Methods for variable input/output:

    Boolean Input

    int boolean_var;
    char *boolean_string = argv[?];
    if (Tcl_GetBoolean(interp, boolean_string, &boolean_var)==TCL_OK) {
    ....body....
    }
    

    Integer Input

    int input;

    char *integer_string = argv[?];
    if (Tcl_GetInt(interp, integer_string, &input) == TCL_OK) {
    ....body....
    }
    

    Boolean Output

    BOOL result = Somefunction(some_argument);
    Tcl_AppendResult(interp, result ? "YES" : "NO", NULL);
    

    Setting a Variable passed in the parameters

    In the cases where a pointer to a variable is passed in to a function, and the assignment must be passed out, use this function from Tcl.

    Tcl_SetVar(interp, tcl_var_name, char* newValue, int flags);
    
    alian@mit.edu  (neon@w3.org) Alexander Lian. July 19.1996
    libwww/Library/Test/User/running.html0100644000076400001440000000160206301652312017355 0ustar danielusers Testing of the LibWWW

    Running the Function Testing

    We use the GNU standard setup with Automake and DejaGnu. If you have installed dejagnu into the path, you're set. Otherwise, make sure you set the proper environment variables.

    Installing and Running the Tests

    1. Compile the WWW Sample Code Library and wwwtest
    2. Download dejagnu and follow the compiling/install inistructions
    3. Make sure DEJAGNULIBS points to the directory containing runtest
    4. Run 'make check'

    If you want to specify a module, edit the makefile and replace the TEST_FILES variable to the specific script.


    alian@mit.edu  (neon@w3.org) Alexander Lian. August 20.1996
    libwww/Library/Test/User/tests.html0100644000076400001440000001157106556757524017074 0ustar danielusers Glue code for the LibWWW to Tcl

    Creating glue code for the LibWWW


    Introduction

    The tests are simply scripts run in the Expect/Tcl language. They rely on the glue code which relys on the library, so changes in the library require twice the number of changes to test the basic functions.
    To keep the tests readable, I've kept them in a pretty simple format, and created some standard procedures to run them through their paces.
    There are some problems interfacing with Tcl to C, and vice versa. If the function faults, the whole program is liable to crash. I mostly catch all these problems, but I have yet to create initialization scripts to renew all the variables so that the rest of the tests don't fail. Also, some strings have to be handled oddly, since Tcl is a string based language, while C is not.

    Creating the tests

    If you've never used Tcl before, I'll give you a quick rundown on how things work:

    Assigning variables:

    set var_name value

    Retrieving variable values:

    $var_name

    Assigning the result of a procedure to a variable:

    set var_name [proc_name arguments.....]

    Comments:

    From a '#' to the end of the line

    An Example Test:

    
    #set arguments "$test_anchor $tag"
    set function "HTLib_function"
    set set_function "HTLib_setFunction"
    
    set test  "Hash table check 4"
    set value           $somevalue
    set test_anchor     $Anchor_1
    set expected        $value
    set set_args        "$test_anchor $value"
    set arguments       "$test_anchor"
    
    set_test $set_function $set_args
    runtest $function $arguments $expected $test
    
    


    Standard procedures used in tests:

    Forgive me for my regexp patterns. I've gotten them functional, but they are certainly not that elegant.

    The main save-all function. I tried to generalize it enough to apply to just about anything. Notice I've specified the spawn_id. I did this mostly for changes in the future, where I might have expect go spawn a server and a reader, etc...

    proc runtest { function arguments expected test } {
      global wwwtest_id
      global prompt
      global WWWTEST
      set command "$function $arguments"
      send -i $wwwtest_id "$command\r"
      verbose "$function $arguments" 1
      verbose "	Expected:		$expected" 2
      set command [fix_string $command]
      set error_str "Wrong # of args. "
      set invalid "Invalid variable names or non-existent entries."
      set actual "expect function skipped?!"
      expect {
    	-i $wwwtest_id
    	-re "([fix_string $expected])(.*)($prompt)" {
    		set actual $expected
    		 pass $test
    	}
    	-re "(.*)($invalid)(\r\n)*(.*)($prompt)" {
    		set actual "Improper test setup, invalid variable name.\n"
    		fail $test
    	}
    	-re "(.*)($error_str)(\r\n)*($function)(.*)($prompt)" {
    		set actual "Improper test setup. Wrong # of args.\n"
    		fail $test
    	}
    	-re "($command)\r\n(.*)(\r\n)*($prompt)" {
    		set actual $expect_out(2,string)
    		fail $test
    	}
    	timeout {set actual "Timed out..."
    		 fail $test
    	}
    	eof {set actual "wwwtest crashed"
    		fail $test
    		spawn "./$WWWTEST"
    		set wwwtest_id $spawn_id
    	}
      }
      verbose "	Result:			$actual" 2
      return $actual
    }
    

    Here's the set_test procedure. It mainly tries to deal with the functions which place values in structures.

    proc set_test { function arguments } {
      global wwwtest_id
      global prompt
      set command "$function $arguments"
      send -i $wwwtest_id "$command\r"
      set error_str "Wrong # of args. "
      expect {
    	-i $wwwtest_id
    	-re "(.*)(invalid command name \"$function\")(.*)($prompt)" {
    		send_user "Improper test setup, improper function name.\n"
    	}
    	-re "(.*)($error_str)(\r\n)*($function)(.*)($prompt)" {
    		send_user "Improper test setup. Wrong # args.\n"
    	}
    	-re "($command)\r\n(.*)(\r\n)*($prompt)" {
    		return $expect_out(2,string)
    	}
    	-re "(.*)($prompt)" {
    		send_user "Couldn't set function\n"
    	}
    	timeout {
    		send_user "Timed out...\n"
    	}
    	eof {fail $test
    	     send_user "wwwtest crashed.\n"
    	}
      }
    }
    


    alian@mit.edu  (neon@w3.org) Alexander Lian. July 19.1996
    libwww/Library/Test/User/Makefile.in0100644000076400001440000001346307405520525017072 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/Test/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/Test/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/Test/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/Test/src/0040755000076400001440000000000007405520570014672 5ustar danieluserslibwww/Library/Test/src/CVS/0040755000076400001440000000000007405517334015331 5ustar danieluserslibwww/Library/Test/src/CVS/Root0100644000076400001440000000005607405517331016172 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/Test/src/CVS/Repository0100644000076400001440000000003007405517331017416 0ustar danieluserslibwww/Library/Test/src libwww/Library/Test/src/CVS/Entries0100644000076400001440000000473407405517334016672 0ustar danielusers/.cvsignore/1.1/Tue Aug 20 04:53:21 1996// /Enumerations.c/1.6/Sat Aug 24 18:09:33 1996// /Enumerations.h/1.4/Thu Aug 22 19:09:16 1996// /HTAccess_glue.c/1.6/Tue Aug 20 16:56:39 1996// /HTAccess_glue.h/1.3/Mon Aug 12 15:38:57 1996// /HTAlert_glue.c/1.4/Tue Aug 20 16:56:42 1996// /HTAlert_glue.h/1.1/Fri Aug 16 18:07:52 1996// /HTAnchor_glue.c/1.6/Thu Oct 10 22:30:15 1996// /HTAnchor_glue.h/1.1/Mon Aug 5 17:20:58 1996// /HTAssoc_glue.c/1.2/Tue Aug 6 18:11:10 1996// /HTAssoc_glue.h/1.1/Mon Aug 5 17:21:01 1996// /HTBind_glue.c/1.5/Mon Aug 19 20:51:48 1996// /HTBind_glue.h/1.2/Tue Aug 6 21:23:07 1996// /HTDNS_glue.c/1.1/Thu Aug 22 19:09:16 1996// /HTDNS_glue.h/1.1/Thu Aug 22 19:09:17 1996// /HTError_glue.c/1.1/Fri Aug 16 18:07:53 1996// /HTError_glue.h/1.1/Fri Aug 16 18:07:54 1996// /HTFWriter_glue.c/1.2/Tue Aug 6 18:11:12 1996// /HTFWriter_glue.h/1.1/Mon Aug 5 17:21:03 1996// /HTFormat_glue.c/1.3/Tue Aug 20 16:56:45 1996// /HTFormat_glue.h/1.1/Tue Aug 13 21:43:39 1996// /HTHost_glue.c/1.4/Mon Aug 19 20:51:50 1996// /HTHost_glue.h/1.1/Tue Aug 6 18:11:14 1996// /HTInet_glue.c/1.1/Thu Aug 22 19:09:18 1996// /HTInet_glue.h/1.1/Thu Aug 22 19:09:18 1996// /HTLink_glue.c/1.3/Tue Aug 20 19:28:05 1996// /HTLink_glue.h/1.1/Mon Aug 5 17:21:05 1996// /HTList_glue.c/1.2/Tue Aug 6 18:11:16 1996// /HTList_glue.h/1.1/Mon Aug 5 17:21:07 1996// /HTLog_glue.c/1.2/Mon Aug 19 20:51:51 1996// /HTLog_glue.h/1.1/Fri Aug 16 18:07:59 1996// /HTNet_glue.c/1.1/Thu Aug 22 19:09:19 1996// /HTNet_glue.h/1.1/Thu Aug 22 19:09:21 1996// /HTParse_glue.c/1.3/Tue Aug 20 19:28:06 1996// /HTParse_glue.h/1.1/Mon Aug 5 17:21:10 1996// /HTProt_glue.c/1.3/Tue Aug 20 16:56:47 1996// /HTProt_glue.h/1.1/Tue Aug 13 20:48:59 1996// /HTReq_glue.c/1.4/Tue Aug 20 19:28:07 1996// /HTReq_glue.h/1.1/Mon Aug 5 17:21:12 1996// /HTTrans_glue.c/1.1/Thu Aug 22 19:09:21 1996// /HTTrans_glue.h/1.1/Thu Aug 22 19:09:22 1996// /HTUTree_glue.c/1.1/Thu Aug 22 19:09:23 1996// /HTUTree_glue.h/1.1/Thu Aug 22 19:09:24 1996// /HTUser_glue.c/1.3/Mon Aug 19 20:51:55 1996// /HTUser_glue.h/1.2/Tue Aug 6 18:11:21 1996// /Libdata.c/1.7/Tue Aug 20 19:28:09 1996// /Libdata.h/1.3/Tue Aug 20 19:28:10 1996// /Makefile.am/1.17/Tue May 19 16:49:19 1998// /Tcl_Interface.c/1.2/Wed Aug 21 20:02:55 1996// /Tcl_Interface.h/1.2/Wed Aug 21 20:03:09 1996// /URLgen.c/1.4/Tue Aug 20 19:28:13 1996// /URLgen.h/1.2/Wed Aug 21 20:03:09 1996// /glue.c/1.13/Mon Sep 9 16:22:40 1996// /glue.h/1.2/Tue Aug 20 19:28:15 1996// /tclAppInit.c/1.2/Tue Aug 20 19:28:17 1996// D libwww/Library/Test/src/Makefile0100644000076400001440000002701507405520570016334 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ check_PROGRAMS = w3clib libtcl = @libtcl@ tclinclude = @tclinclude@ w3clib_LDADD = $(libtcl) ../../src/libwww.la -lm w3clib_DEPENDENCIES = $(libtcl) ../../src/libwww.la # For easier use - NOT THE DEFAULT! AUTOMAKE_OPTIONS = foreign INCLUDES = -I$(srcdir)/../../src -I$(tclinclude) w3clib_SOURCES = HTAnchor_glue.c HTAnchor_glue.h HTReq_glue.c HTReq_glue.h HTList_glue.c HTList_glue.h HTHost_glue.c HTHost_glue.h HTLog_glue.c HTLog_glue.h HTFWriter_glue.c HTFWriter_glue.h HTAssoc_glue.c HTAssoc_glue.h HTBind_glue.c HTBind_glue.h HTProt_glue.c HTProt_glue.h HTUser_glue.c HTUser_glue.h HTLink_glue.c HTLink_glue.h HTAccess_glue.c HTAccess_glue.h HTParse_glue.c HTParse_glue.h HTFormat_glue.c HTFormat_glue.h HTError_glue.c HTError_glue.h HTAlert_glue.c HTAlert_glue.h HTDNS_glue.c HTDNS_glue.h HTUTree_glue.c HTUTree_glue.h HTTrans_glue.c HTTrans_glue.h HTNet_glue.c HTNet_glue.h HTInet_glue.c HTInet_glue.h Libdata.c Libdata.h glue.c glue.h URLgen.c URLgen.h Tcl_Interface.c Tcl_Interface.h Enumerations.c Enumerations.h tclAppInit.c mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = check_PROGRAMS = w3clib$(EXEEXT) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../../.. CPPFLAGS = LDFLAGS = LIBS = -ldl w3clib_OBJECTS = HTAnchor_glue.o HTReq_glue.o HTList_glue.o \ HTHost_glue.o HTLog_glue.o HTFWriter_glue.o HTAssoc_glue.o \ HTBind_glue.o HTProt_glue.o HTUser_glue.o HTLink_glue.o HTAccess_glue.o \ HTParse_glue.o HTFormat_glue.o HTError_glue.o HTAlert_glue.o \ HTDNS_glue.o HTUTree_glue.o HTTrans_glue.o HTNet_glue.o HTInet_glue.o \ Libdata.o glue.o URLgen.o Tcl_Interface.o Enumerations.o tclAppInit.o w3clib_LDFLAGS = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/Enumerations.P .deps/HTAccess_glue.P \ .deps/HTAlert_glue.P .deps/HTAnchor_glue.P .deps/HTAssoc_glue.P \ .deps/HTBind_glue.P .deps/HTDNS_glue.P .deps/HTError_glue.P \ .deps/HTFWriter_glue.P .deps/HTFormat_glue.P .deps/HTHost_glue.P \ .deps/HTInet_glue.P .deps/HTLink_glue.P .deps/HTList_glue.P \ .deps/HTLog_glue.P .deps/HTNet_glue.P .deps/HTParse_glue.P \ .deps/HTProt_glue.P .deps/HTReq_glue.P .deps/HTTrans_glue.P \ .deps/HTUTree_glue.P .deps/HTUser_glue.P .deps/Libdata.P \ .deps/Tcl_Interface.P .deps/URLgen.P .deps/glue.P .deps/tclAppInit.P SOURCES = $(w3clib_SOURCES) OBJECTS = $(w3clib_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/Test/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-checkPROGRAMS: clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) distclean-checkPROGRAMS: maintainer-clean-checkPROGRAMS: .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: w3clib$(EXEEXT): $(w3clib_OBJECTS) $(w3clib_DEPENDENCIES) @rm -f w3clib$(EXEEXT) $(LINK) $(w3clib_LDFLAGS) $(w3clib_OBJECTS) $(w3clib_LDADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/Test/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/Test/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-checkPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-checkPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-checkPROGRAMS distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-checkPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-checkPROGRAMS distclean-checkPROGRAMS \ clean-checkPROGRAMS maintainer-clean-checkPROGRAMS mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/Test/src/.cvsignore0100644000076400001440000000005606206242301016657 0ustar danielusers*.h .www_browsable .deps Makefile.in Makefile libwww/Library/Test/src/Enumerations.c0100644000076400001440000002371506207642535017521 0ustar danielusers#include "Enumerations.h" /* Enumeration string lists */ /* ANCHOR ENUMERATIONS */ char *HTLinkResults[] = { "HT_LINK_INVALID", "HT_LINK_NONE", "HT_LINK_ERROR", "HT_LINK_OK", NULL }; /* REQUEST ENUMERATIONS */ char *reload_names[] = { "HT_ANY_VERSION", "HT_MEM_REFRESH", "HT_CACHE_REFRESH", "HT_FORCE_RELOAD", NULL }; char *HTGnHd_names[] = { "HT_G_DATE", "HT_G_FORWARDED", "HT_G_MESSAGE_ID", "HT_G_MIME", "HT_G_CONNECTION", "HT_G_PRAGMA_NO_CACHE", NULL }; char *HTRqHd_names[] = { "HT_C_ACCEPT_TYPE", "HT_C_ACCEPT_CHAR", "HT_C_ACCEPT_ENC", "HT_C_ACCEPT_LAN", "HT_C_FROM", "HT_C_IMS", "HT_C_HOST", "HT_C_REFERER", "HT_C_USER_AGENT", NULL }; char *HTRsHd_names[] = { "HT_S_LOCATION", "HT_S_PROXY_AUTH", "HT_S_PUBLIC", "HT_S_RETRY_AFTER", "HT_S_SERVER", "HT_S_WWW_AUTH", NULL }; char *HTEnHd_names[] = { "HT_E_ALLOW", "HT_E_CONTENT_ENCODING", "HT_E_CONTENT_LANGUAGE", "HT_E_CONTENT_LENGTH", "HT_E_CTE", /* Content-Transfer-Encoding */ "HT_E_CONTENT_TYPE", "HT_E_DERIVED_FROM", "HT_E_EXPIRES", "HT_E_LAST_MODIFIED", "HT_E_LINK", "HT_E_TITLE", "HT_E_URI", "HT_E_VERSION", NULL }; char *HTSeverity_names[] = { "ERR_FATAL", "ERR_NON_FATAL", "ERR_WARN", "ERR_INFO", NULL }; char *HTAlertOpcode_names[] = { "HT_PROG_DNS", "HT_PROG_CONNECT", "HT_PROG_ACCEPT", "HT_PROG_READ", "HT_PROG_WRITE", "HT_PROG_DONE", "HT_PROG_WAIT", "HT_A_PROGRESS", "HT_A_MESSAGE", "HT_A_CONFIRM", "HT_A_PROMPT", "HT_A_SECRET", "HT_A_PROGRESS", NULL }; char *HTPriority_names[] = { "HT_PRIORITY_INV", "HT_PRIORITY_OFF", "HT_PRIORITY_MIN", "HT_PRIORITY_MAX", NULL }; char *HTURIEncoding_names[] = { "URL_XALPHAS", "URL_XPALPHAS", "URL_PATH", NULL }; char *HTTransportMode_names[] = { "HT_TP_SINGLE", "HT_TP_PIPELINE", "HT_TP_INTERLEAVE", NULL }; /* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */ /* Enumerations and name functions */ /* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */ /************************** ** HTANCHOR ** **************************/ HTLinkResult HTLinkResult_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTLinkResults+1))) return HT_LINK_NONE; else if (!strcasecomp(name, *(HTLinkResults+2))) return HT_LINK_ERROR; else if (!strcasecomp(name, *(HTLinkResults+3))) return HT_LINK_OK; } return HT_LINK_INVALID; } char *HTLinkResult_name(HTLinkResult result) { if (result & HT_LINK_NONE) return *(HTLinkResults+1); else if (result == HT_LINK_ERROR) return *(HTLinkResults+2); else if (result == HT_LINK_OK) return *(HTLinkResults+3); else return *HTLinkResults; } /************************** ** HTREQUEST ** **************************/ /* RELOAD */ HTReload HTReload_enum(char *name) { if (name) { if (!strcasecomp(name, *(reload_names+1))) return HT_CACHE_FLUSH_MEM; else if (!strcasecomp(name, *(reload_names+2))) return HT_CACHE_VALIDATE; else if (!strcasecomp(name, *(reload_names+3))) return HT_CACHE_FLUSH; } return HT_CACHE_OK; } /* GNHD */ HTGnHd HTGnHd_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTGnHd_names+1))) return HT_G_FORWARDED; else if (!strcasecomp(name, *(HTGnHd_names+2))) return HT_G_MESSAGE_ID; else if (!strcasecomp(name, *(HTGnHd_names+3))) return HT_G_MIME; else if (!strcasecomp(name, *(HTGnHd_names+4))) return HT_G_CONNECTION; else if (!strcasecomp(name, *(HTGnHd_names+5))) return HT_G_PRAGMA_NO_CACHE; } return HT_G_DATE; } /* RQHD */ HTRqHd HTRqHd_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTRqHd_names+1))) return HT_C_ACCEPT_CHAR; else if (!strcasecomp(name, *(HTRqHd_names+2))) return HT_C_ACCEPT_ENC; else if (!strcasecomp(name, *(HTRqHd_names+3))) return HT_C_ACCEPT_LAN; else if (!strcasecomp(name, *(HTRqHd_names+4))) return HT_C_FROM; else if (!strcasecomp(name, *(HTRqHd_names+5))) return HT_C_IMS; else if (!strcasecomp(name, *(HTRqHd_names+6))) return HT_C_HOST; else if (!strcasecomp(name, *(HTRqHd_names+7))) return HT_C_REFERER; else if (!strcasecomp(name, *(HTRqHd_names+8))) return HT_C_USER_AGENT; } return HT_C_ACCEPT_TYPE; } /* RSHD */ HTRsHd HTRsHd_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTRsHd_names+1))) return HT_S_PROXY_AUTH; else if (!strcasecomp(name, *(HTRsHd_names+2))) return HT_S_PUBLIC; else if (!strcasecomp(name, *(HTRsHd_names+3))) return HT_S_RETRY_AFTER; else if (!strcasecomp(name, *(HTRsHd_names+4))) return HT_S_SERVER; else if (!strcasecomp(name, *(HTRsHd_names+5))) return HT_S_WWW_AUTH; } return HT_S_LOCATION; } /* ENHD */ HTEnHd HTEnHd_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTEnHd_names+1))) return HT_E_CONTENT_ENCODING; else if (!strcasecomp(name, *(HTEnHd_names+2))) return HT_E_CONTENT_LANGUAGE; else if (!strcasecomp(name, *(HTEnHd_names+3))) return HT_E_CONTENT_LENGTH; else if (!strcasecomp(name, *(HTEnHd_names+4))) return HT_E_CTE; else if (!strcasecomp(name, *(HTEnHd_names+5))) return HT_E_CONTENT_TYPE; else if (!strcasecomp(name, *(HTEnHd_names+6))) return HT_E_DERIVED_FROM; else if (!strcasecomp(name, *(HTEnHd_names+7))) return HT_E_EXPIRES; else if (!strcasecomp(name, *(HTEnHd_names+8))) return HT_E_LAST_MODIFIED; else if (!strcasecomp(name, *(HTEnHd_names+9))) return HT_E_LINK; else if (!strcasecomp(name, *(HTEnHd_names+10))) return HT_E_TITLE; else if (!strcasecomp(name, *(HTEnHd_names+11))) return HT_E_URI; else if (!strcasecomp(name, *(HTEnHd_names+12))) return HT_E_VERSION; } return HT_E_ALLOW; } /* HTSEVERITY */ HTSeverity HTSeverity_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTSeverity_names+1))) return ERR_NON_FATAL; else if (!strcasecomp(name, *(HTSeverity_names+2))) return ERR_WARN; else if (!strcasecomp(name, *(HTSeverity_names+3))) return ERR_INFO; } return ERR_FATAL; } HTAlertOpcode HTAlertOpcode_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTAlertOpcode_names+1) )) return HT_PROG_CONNECT; if (!strcasecomp(name, *(HTAlertOpcode_names+2) ) ) return HT_PROG_ACCEPT; if (!strcasecomp(name, *(HTAlertOpcode_names+3) ) ) return HT_PROG_READ; if (!strcasecomp(name, *(HTAlertOpcode_names+4) ) ) return HT_PROG_WRITE; if (!strcasecomp(name, *(HTAlertOpcode_names+5) ) ) return HT_PROG_DONE; if (!strcasecomp(name, *(HTAlertOpcode_names+6) ) ) return HT_PROG_WAIT; if (!strcasecomp(name, *(HTAlertOpcode_names+7))) return HT_A_PROGRESS; if (!strcasecomp(name, *(HTAlertOpcode_names+8) ) ) return HT_A_MESSAGE; if (!strcasecomp(name, *(HTAlertOpcode_names+9) ) ) return HT_A_CONFIRM; if (!strcasecomp(name, *(HTAlertOpcode_names+10) ) ) return HT_A_PROMPT; if (!strcasecomp(name, *(HTAlertOpcode_names+11) ) ) return HT_A_SECRET; if (!strcasecomp(name, *(HTAlertOpcode_names+12) ) ) return HT_A_USER_PW; } return HT_PROG_DNS; } char *HTSeverity_name(HTSeverity severity) { if (severity & ERR_NON_FATAL) return *(HTSeverity_names+1); else if (severity == ERR_WARN) return *(HTSeverity_names+2); else if (severity == ERR_INFO) return *(HTSeverity_names+3); else return *HTSeverity_names; } char * HTAlertOpcode_name(HTAlertOpcode opcode) { if (opcode == HT_PROG_CONNECT) return *(HTAlertOpcode_names+1); if (opcode == HT_PROG_ACCEPT) return *(HTAlertOpcode_names+2); if (opcode == HT_PROG_READ) return *(HTAlertOpcode_names+3); if (opcode == HT_PROG_WRITE) return *(HTAlertOpcode_names+4); if (opcode == HT_PROG_DONE) return *(HTAlertOpcode_names+5); if (opcode == HT_PROG_WAIT) return *(HTAlertOpcode_names+6); if (opcode == HT_A_PROGRESS) return *(HTAlertOpcode_names+7); if (opcode == HT_A_MESSAGE) return *(HTAlertOpcode_names+8); if (opcode == HT_A_CONFIRM) return *(HTAlertOpcode_names+9); if (opcode == HT_A_PROMPT) return *(HTAlertOpcode_names+10); if (opcode == HT_A_SECRET) return *(HTAlertOpcode_names+11); if (opcode == HT_A_USER_PW) return *(HTAlertOpcode_names+12); return *HTAlertOpcode_names; } /* HTPRIORITY */ HTPriority HTPriority_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTPriority_names+1))) return HT_PRIORITY_OFF; else if (!strcasecomp(name, *(HTPriority_names+2))) return HT_PRIORITY_MIN; else if (!strcasecomp(name, *(HTPriority_names+3))) return HT_PRIORITY_MAX; } return HT_PRIORITY_INV; } char *HTPriority_name(HTPriority priority) { if (priority & HT_PRIORITY_OFF) return *(HTPriority_names+1); else if (priority == HT_PRIORITY_MIN) return *(HTPriority_names+2); else if (priority == HT_PRIORITY_MAX) return *(HTPriority_names+3); else return *HTPriority_names; } HTURIEncoding HTURIEncoding_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTURIEncoding_names+1) )) return URL_XPALPHAS; if (!strcasecomp(name, *(HTURIEncoding_names+2) ) ) return URL_PATH; } return URL_XALPHAS; } HTTransportMode HTTransportMode_enum(char *name) { if (name) { if (!strcasecomp(name, *(HTTransportMode_names+1))) return HT_TP_PIPELINE; else if (!strcasecomp(name, *(HTTransportMode_names+2))) return HT_TP_INTERLEAVE; } return HT_TP_SINGLE; } char *HTTransportMode_name(HTTransportMode mode) { if (mode == HT_TP_PIPELINE) return *(HTTransportMode_names+1); else if (mode == HT_TP_INTERLEAVE) return *(HTTransportMode_names+2); else return *HTTransportMode_names; } libwww/Library/Test/src/Enumerations.h0100644000076400001440000000143306207130134017502 0ustar danielusers#include "Libdata.h" #include "WWWLib.h" /* ENUMERATION.H */ extern HTLinkResult HTLinkResult_enum(char *); extern char *HTLinkResult_name(HTLinkResult); extern HTReload HTReload_enum(char *); extern HTGnHd HTGnHd_enum(char *); extern HTRqHd HTRqHd_enum(char *); extern HTRsHd HTRsHd_enum(char *); extern HTEnHd HTEnHd_enum(char *); extern HTSeverity HTSeverity_enum(char *); extern char *HTSeverity_name(HTSeverity); extern HTPriority HTPriority_enum(char *); extern char *HTPriority_name(HTPriority); extern char * HTAlertOpcode_name(HTAlertOpcode opcode); extern HTAlertOpcode HTAlertOpcode_enum(char *name); extern HTURIEncoding HTURIEncoding_enum(char *name); extern HTTransportMode HTTransportMode_enum(char *name); extern char * HTTransportMode_name(HTTransportMode); libwww/Library/Test/src/HTAccess_glue.c0100644000076400001440000013614206206367107017516 0ustar danielusers#include "HTAccess_glue.h" #include "WWWApp.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "Wrong # of args. \n \n" /*************************** * HTAccess * **************************/ Tcl_HashTable HTableUser; Tcl_HashTable HTableReq; Tcl_HashTable HTableAnchor; Tcl_HashTable HTableCallback; Tcl_HashTable HTableStream; Tcl_HashTable HTableChunk; Tcl_HashTable HTableAssoc; /*************************** *Generic Library Functions* **************************/ /*Initializing and Terminating the Library */ int HTLibInit_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { const char *AppName = argv[1]; const char *AppVersion = argv[2]; if (AppName && AppVersion) { BOOL result = HTLibInit (AppName, AppVersion); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLibTerminate_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTLibTerminate(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Library Name and Version*/ int HTLib_name_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { const char * result = HTLib_name(); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLib_version_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { const char *result = HTLib_version(); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Application Name and Version*/ int HTLib_appName_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { const char *result = HTLib_appName(); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLib_appVersion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { const char *result = HTLib_appVersion(); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*accesing the local File system*/ int HTLib_secure_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTLib_secure(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLib_setSecure_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { int mode; int conversion_success = Tcl_GetBoolean(interp, argv[1], &mode); if(conversion_success == TCL_OK) { HTLib_setSecure( (BOOL) mode); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*default User Profile*/ int HTLib_userProfile_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 1) { char *keyname; Tcl_HashEntry *user_entry; HTUserProfile *user = HTLib_userProfile(); user_entry = CreateNewUserEntry("HTUser", &keyname); Tcl_SetHashValue(user_entry, user); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLib_setUserProfile_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc==2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *up = (HTUserProfile *) Tcl_GetHashValue(user_entry); BOOL result = HTLib_setUserProfile(up); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, "No entry", NULL); return TCL_ERROR; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /********************** * Load Request Method * *********************/ /*Request a document from absolute name*/ int HTLoadAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 3) { char *url = argv[1]; char *keyname = argv[2]; if(url && keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); if(request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTLoadAbsolute(url, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Request a document from absolute name to stream */ int HTLoadToStream_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 4) { char *url = argv[1]; char *stream_string = argv[2]; char *keyname = argv[3]; if(url && stream_string && keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); Tcl_HashEntry *stream_entry = Tcl_FindHashEntry(&HTableStream, stream_string); if(stream_entry && request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTStream *stream = Tcl_GetHashValue(stream_entry); BOOL result = HTLoadToStream(url, stream, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*request a document from relative name */ int HTLoadRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *relative = argv[1]; char *base_key = argv[2]; char *request_key = argv[3]; if(relative && base_key && request_key) { Tcl_HashEntry *base_entry = Tcl_FindHashEntry(&HTableAnchor, base_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if(base_entry && request_entry){ HTParentAnchor *base = Tcl_GetHashValue(base_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTLoadRelative(relative, base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Load a Document into Memory*/ int HTLoadToChunk_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { const char * url = argv[1]; char *request_key = argv[2]; if (url && request_key) { Tcl_HashEntry * request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (request_entry) { char * result_key; HTRequest *request = Tcl_GetHashValue(request_entry); HTChunk * result = HTLoadToChunk(url, request); Tcl_HashEntry * result_entry = CreateNewEntry(&HTableChunk, "HTChunk", &result_key); Tcl_SetHashValue(result_entry, result); Tcl_AppendResult(interp, result_key, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Load a Document and Save as a Local File */ int HTLoadToFile_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { const char *url = argv[1]; char *request_key = argv[2]; const char *filename = argv[3]; if (url && request_key && filename) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTLoadToFile(url, request, filename); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*request an anchor*/ int HTLoadAnchor_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_key = argv[1]; char *request_key = argv[2]; if(anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry) { HTAnchor * anchor = Tcl_GetHashValue(anchor_entry); HTRequest * request = Tcl_GetHashValue(request_entry); BOOL result = HTLoadAnchor(anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /*Load a Document into Memory using an Anchor*/ int HTLoadAnchorToChunk_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_key = argv[1]; char *request_key = argv[2]; if(anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if(anchor_entry && request_entry) { char *result_key; HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest *request= Tcl_GetHashValue(request_entry); HTChunk *result = HTLoadAnchorToChunk(anchor, request); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableChunk, "HTChunk", &result_key); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, result_key, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLoadAnchorRecursive_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_key = argv[1]; char *request_key = argv[2]; if(anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry) { HTAnchor * anchor = Tcl_GetHashValue(anchor_entry); HTRequest * request = Tcl_GetHashValue(request_entry); BOOL result = HTLoadAnchorRecursive(anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /* Load a Rule File */ int HTLoadRules_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { const char * url = argv[1]; if (url) { BOOL result = HTLoadRules(url); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*search an anchor*/ /* int HTSearch_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *keywords = argv[1]; char *anchor_key = argv[2]; char *request_key = argv[3]; if(anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry) { HTAnchor * anchor = Tcl_GetHashValue(anchor_entry); HTRequest * request = Tcl_GetHashValue(request_entry); BOOL result = HTSearch(keywords, anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); } } */ /*search a document from absolute name */ int HTSearchAbsolute_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *chunk_key = argv[1]; char *url = argv[2]; char *request_key = argv[3]; if(chunk_key && url && request_key) { Tcl_HashEntry *chunk_entry = Tcl_FindHashEntry(&HTableChunk, chunk_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (chunk_entry && request_entry) { HTChunk * keywords = Tcl_GetHashValue(chunk_entry); HTRequest * request = Tcl_GetHashValue(request_entry); BOOL result = HTSearchAbsolute(keywords, url, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTSearchRelative_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *chunk_key = argv[1]; const char *relative = argv[2]; char * anchor_key = argv[3]; char * request_key = argv[4]; if(chunk_key && relative && anchor_key && request_key) { Tcl_HashEntry *chunk_entry = Tcl_FindHashEntry(&HTableChunk, chunk_key); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (chunk_entry && anchor_entry && request_entry) { HTChunk * keywords = Tcl_GetHashValue(chunk_entry); HTParentAnchor * base =Tcl_GetHashValue(anchor_entry); HTRequest * request = Tcl_GetHashValue(request_entry); BOOL result = HTSearchRelative(keywords, relative, base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Search a Document using an Anchor*/ int HTSearchAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 4) { char *chunk_key = argv[1]; char *anchor_key = argv[2]; char *request_key = argv[3]; if(chunk_key && anchor_key && request_key) { Tcl_HashEntry *chunk_entry = Tcl_FindHashEntry(&HTableChunk, chunk_key); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if(chunk_entry && anchor_entry && request_entry) { HTChunk *keywords = Tcl_GetHashValue(chunk_entry); HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTSearchAnchor(keywords, anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Search a Document using an Anchor Using a String */ int HTSearchString_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 4) { const char *keywords = argv[1]; char *anchor_key = argv[2]; char *request_key = argv[3]; if(keywords && anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if(anchor_entry && request_entry) { HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTSearchString(keywords, anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Send a Form from Absolute URL using GET*/ int HTGetFormAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char * assoc_key = argv[1]; const char * base = argv[2]; char * request_key = argv[3]; if (assoc_key && base && request_key) { Tcl_HashEntry *assoc_entry = Tcl_FindHashEntry(&HTableAssoc, assoc_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (assoc_entry && request_entry) { HTAssocList *formdata = Tcl_GetHashValue(assoc_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTGetFormAbsolute(formdata, base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Send a Form from Relative URL using GET */ int HTGetFormRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *assoc_key = argv[1]; const char * relative = argv[2]; char *anchor_key = argv[3]; char *request_key = argv[4]; if (assoc_key && relative && anchor_key && request_key) { Tcl_HashEntry *assoc_entry = Tcl_FindHashEntry(&HTableAssoc, assoc_key); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (assoc_entry && anchor_entry && request_entry) { HTAssocList *formdata = Tcl_GetHashValue(assoc_entry); HTParentAnchor *base = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTGetFormRelative(formdata, relative, base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Send a Form using an Anchor and the GET Method*/ int HTGetFormAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *assoc_key = argv[1]; char *anchor_key = argv[2]; char *request_key = argv[3]; if (assoc_key && anchor_key && request_key) { Tcl_HashEntry *assoc_entry = Tcl_FindHashEntry(&HTableAssoc, assoc_key); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (assoc_entry && anchor_entry && request_entry) { HTAssocList *formdata = Tcl_GetHashValue(assoc_entry); HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTGetFormAnchor(formdata, anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Handle Forms Using POST Method */ /*send a form from absolte URL using Post*/ int HTPostFormAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *assoc_key = argv[1]; const char *base = argv[2]; char *request_key = argv[3]; if (assoc_key && base && request_key) { Tcl_HashEntry *assoc_entry = Tcl_FindHashEntry(&HTableAssoc, assoc_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (assoc_entry && request_entry) { char *keyname; HTAssocList *formdata = Tcl_GetHashValue(assoc_entry); HTRequest *request = Tcl_GetHashValue(request_entry); HTParentAnchor *result = HTPostFormAbsolute(formdata, base, request); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableAnchor, "ParentAnchor", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Send a form from a relative URL using Post */ int HTPostFormRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *assoc_key = argv[1]; const char *relative = argv[2]; char *anchor_key = argv[3]; char *request_key = argv[4]; if (assoc_key && relative && anchor_key && request_key) { Tcl_HashEntry *assoc_entry = Tcl_FindHashEntry(&HTableAssoc, assoc_key); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (assoc_entry && request_entry) { char *keyname; HTAssocList *formdata = Tcl_GetHashValue(assoc_entry); HTParentAnchor *base = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); HTParentAnchor *result = HTPostFormRelative(formdata, relative, base, request); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableAnchor, "ParentAnchor", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*send a form using anchor and the Post method*/ int HTPostFormAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *assoc_key = argv[1]; char *anchor_key = argv[2]; char *request_key = argv[3]; if (assoc_key && anchor_key && request_key) { Tcl_HashEntry *assoc_entry = Tcl_FindHashEntry(&HTableAssoc, assoc_key); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (assoc_entry && request_entry) { char *keyname; HTAssocList *formdata = Tcl_GetHashValue(assoc_entry); HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); HTParentAnchor *result = HTPostFormAnchor(formdata, anchor, request); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableAnchor, "ParentAnchor", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Get Metainformation about a Document (Method = HEAD) */ /*Get MetainFormation about a Document from Absolute URL */ int HTHeadAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { const char *url = argv[1]; char *request_key = argv[2]; if(url && request_key) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (request_entry){ HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTHeadAbsolute(url, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Get Metainformation about a Document from Relative URL */ int HTHeadRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { const char *relative = argv[1]; char *anchor_key = argv[2]; char *request_key = argv[3]; if(relative && anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTParentAnchor *base = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTHeadRelative(relative, base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTHeadAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_key = argv[1]; char *request_key = argv[2]; if(anchor_key && request_key) { Tcl_HashEntry *anchor_entry =Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTHeadAnchor(anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Delete a Document (Method = DELETE) */ int HTDeleteAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { const char *url = argv[1]; char *request_key = argv[2]; if(url && request_key) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (request_entry){ HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTDeleteAbsolute(url, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTDeleteRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { const char *relative = argv[1]; char *anchor_key = argv[2]; char *request_key = argv[3]; if(relative && anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTParentAnchor *base = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTDeleteRelative(relative, base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTDeleteAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_key = argv[1]; char *request_key = argv[2]; if(anchor_key && request_key) { Tcl_HashEntry *anchor_entry =Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTDeleteAnchor(anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Save a Document ASIS (Method = PUT) */ int HTPutAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *anchor_key = argv[1]; const char *destination = argv[2]; char *request_key = argv[3]; if(anchor_key && destination && request_key) { Tcl_HashEntry *anchor_entry =Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPutAbsolute(source, destination, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPutRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *source_key = argv[1]; const char *relative = argv[2]; char *destination_key = argv[3]; char *request_key = argv[4]; if(source_key && relative && destination_key && request_key) { Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *destination_entry = Tcl_FindHashEntry(&HTableAnchor, destination_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (source_entry && destination_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(source_entry); HTParentAnchor *destination_base = Tcl_GetHashValue(destination_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPutRelative(source, relative, destination_base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPutAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *source_key = argv[1]; char *dest_key = argv[2]; char *request_key = argv[3]; if(source_key && dest_key && request_key) { Tcl_HashEntry *source_entry =Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *dest_entry =Tcl_FindHashEntry(&HTableAnchor, dest_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (source_entry && dest_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(source_entry); HTAnchor *dest = Tcl_GetHashValue(dest_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPutAnchor(source, dest, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* question? can HTCallBack and HTPostCallback be stored in the same hash table? */ /*save a structured Document (using put) */ int HTPutStructuredAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *anchor_key = argv[1]; const char *destination = argv[2]; char *request_key = argv[3]; char *input_key = argv[4]; if(anchor_key && destination && request_key && input_key) { Tcl_HashEntry *anchor_entry =Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *input_entry = Tcl_FindHashEntry(&HTableCallback, input_key); if (input_entry && anchor_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); HTPostCallback *input = (HTPostCallback *) Tcl_GetHashValue(input_entry); BOOL result = HTPutStructuredAbsolute(source, destination, request, input); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPutStructuredRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 6) { char *source_key = argv[1]; const char *relative = argv[2]; char *destination_key = argv[3]; char *request_key = argv[4]; char *input_key = argv[5]; if(source_key && relative && destination_key && request_key && input_key) { Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *destination_entry = Tcl_FindHashEntry(&HTableAnchor, destination_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *input_entry = Tcl_FindHashEntry(&HTableCallback, input_key); if (source_entry && destination_entry && request_entry && input_entry){ HTParentAnchor *source = (HTParentAnchor *) Tcl_GetHashValue(source_entry); HTParentAnchor *destination_base = (HTParentAnchor *) Tcl_GetHashValue(destination_entry); HTRequest *request = (HTRequest *) Tcl_GetHashValue(request_entry); HTPostCallback *input = (HTPostCallback *) Tcl_GetHashValue(input_entry); BOOL result = HTPutStructuredRelative(source, relative, destination_base, request, input); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPutStructuredAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *source_key = argv[1]; char *dest_key = argv[2]; char *request_key = argv[3]; char *input_key = argv[4]; if(source_key && dest_key && request_key && input_key) { Tcl_HashEntry *source_entry =Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *dest_entry =Tcl_FindHashEntry(&HTableAnchor, dest_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *input_entry = Tcl_FindHashEntry(&HTableCallback, input_key); if (source_entry && dest_entry && request_entry && input_entry){ HTParentAnchor *source = Tcl_GetHashValue(source_entry); HTAnchor *dest = Tcl_GetHashValue(dest_entry); HTRequest *request = Tcl_GetHashValue(request_entry); HTPostCallback *input = (HTPostCallback *) Tcl_GetHashValue(input_entry); BOOL result = HTPutStructuredAnchor(source, dest, request, input); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* save a document (Using PUT) */ int HTPutDocumentAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *anchor_key = argv[1]; const char *destination = argv[2]; char *request_key = argv[3]; if(anchor_key && destination && request_key) { Tcl_HashEntry *anchor_entry =Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPutDocumentAbsolute(source, destination, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPutDocumentRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *source_key = argv[1]; const char *relative = argv[2]; char *destination_key = argv[3]; char *request_key = argv[4]; if(source_key && relative && destination_key && request_key) { Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *destination_entry = Tcl_FindHashEntry(&HTableAnchor, destination_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (source_entry && request_entry && destination_entry){ HTParentAnchor *source = Tcl_GetHashValue(source_entry); HTParentAnchor *destination_base = Tcl_GetHashValue(destination_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPutDocumentRelative(source, relative, destination_base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPutDocumentAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *source_key = argv[1]; char *dest_key = argv[2]; char *request_key = argv[3]; if(source_key && dest_key && request_key) { Tcl_HashEntry *source_entry =Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *dest_entry =Tcl_FindHashEntry(&HTableAnchor, dest_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (source_entry && dest_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(source_entry); HTAnchor *dest = Tcl_GetHashValue(dest_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPutDocumentAnchor(source, dest, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Save a Document ASIS (METHOD = POST) */ int HTPostAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *anchor_key = argv[1]; const char *destination = argv[2]; char *request_key = argv[3]; if(anchor_key && destination && request_key) { Tcl_HashEntry *anchor_entry =Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPostAbsolute(source, destination, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPostRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *source_key = argv[1]; const char *relative = argv[2]; char *destination_key = argv[3]; char *request_key = argv[4]; if(source_key && relative && destination_key && request_key) { Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *destination_entry = Tcl_FindHashEntry(&HTableAnchor, destination_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (source_entry && destination_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(source_entry); HTParentAnchor *destination_base = Tcl_GetHashValue(destination_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPostRelative(source, relative, destination_base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPostAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *source_key = argv[1]; char *dest_key = argv[2]; char *request_key = argv[3]; if(source_key && dest_key && request_key) { Tcl_HashEntry *source_entry =Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *dest_entry =Tcl_FindHashEntry(&HTableAnchor, dest_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (source_entry && dest_entry && request_entry){ HTParentAnchor *source = Tcl_GetHashValue(source_entry); HTAnchor *dest = Tcl_GetHashValue(dest_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTPostAnchor(source, dest, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Get Available Options for a document (Method = Options) */ int HTOptionsAbsolute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { const char *url = argv[1]; char *request_key = argv[2]; if(url && request_key) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (request_entry){ HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTOptionsAbsolute(url, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTOptionsRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { const char *relative = argv[1]; char *anchor_key = argv[2]; char *request_key = argv[3]; if(relative && anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTParentAnchor *base = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTOptionsRelative(relative, base, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTOptionsAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_key = argv[1]; char *request_key = argv[2]; if(anchor_key && request_key) { Tcl_HashEntry *anchor_entry =Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry){ HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTOptionsAnchor(anchor, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /************************************* * Save URL to MULTIPle Desinations * *************************************/ /*Copy an anchor */ int HTCopyAnchor_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_key = argv[1]; char *request_key = argv[2]; if(anchor_key && request_key) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (anchor_entry && request_entry) { HTAnchor * src_anchor = Tcl_GetHashValue(anchor_entry); HTRequest * main_req = Tcl_GetHashValue(request_entry); BOOL result = HTCopyAnchor(src_anchor, main_req); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /*Upload an Anchor*/ int HTUploadAnchor_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *source_key = argv[1]; char *request_key = argv[2]; char *callback_key = argv[3]; if(source_key && request_key && callback_key) { Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableAnchor, source_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *callback_entry = Tcl_FindHashEntry(&HTableCallback, callback_key); if (source_entry && request_entry && callback_entry) { HTAnchor * source_anchor = Tcl_GetHashValue(source_entry); HTRequest * request = Tcl_GetHashValue(request_entry); HTPostCallback * callback = (HTPostCallback *) Tcl_GetHashValue(callback_entry); BOOL result = HTUploadAnchor(source_anchor, request, callback); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /*POST Callback Handler*/ int HTUpload_callback_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *request_key = argv[1]; char *target_key = argv[2]; if(request_key && target_key) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *target_entry = Tcl_FindHashEntry(&HTableStream, target_key); if (request_entry && target_entry) { HTRequest * request = Tcl_GetHashValue(request_entry); HTStream * target = Tcl_GetHashValue(target_entry); int result = HTUpload_callback(request, target); char *storage = malloc(max_keyname * sizeof(char)); sprintf(storage, "%d", result); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } libwww/Library/Test/src/HTAccess_glue.h0100644000076400001440000000777406203650021017516 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" /*HTAcess*/ extern int HTLibInit_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLibTerminate_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLib_name_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLib_version_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLib_appName_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLib_appVersion_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLib_secure_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLib_setSecure_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLib_userProfile_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLib_setUserProfile_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadToChunk_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadToFile_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadToStream_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadAnchorToChunk_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadAnchorRecursive_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLoadToChunk_tcl(ClientData, Tcl_Interp *, int, char **); /*extern int HTSearch_tcl(ClientData, Tcl_Interp *, int, char **); */ extern int HTLoadRules_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTSearchAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTSearchRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTSearchAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTSearchString_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetFormAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetFormRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetFormAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPostFormAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPostFormRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPostFormAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTHeadAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTHeadRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTHeadAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTDeleteAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTDeleteRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTDeleteAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutStructuredAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutStructuredRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutStructuredAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutDocumentAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutDocumentRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPutDocumentAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPostAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPostRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPostAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTOptionsAbsolute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTOptionsRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTOptionsAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTCopyAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUploadAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUpload_callback_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTAlert_glue.c0100644000076400001440000003252706206367112017362 0ustar danielusers#include "HTAlert_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /************************ * HTAlert * ************************/ Tcl_HashTable HTableList; Tcl_HashTable HTableAlertCallback; Tcl_HashTable HTableAlertPar; Tcl_HashTable HTableVoid; /*enable or disable messages*/ int HTAlert_setInteractive_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char ** argv) { if(argc == 2) { int interactive; int success = Tcl_GetInt(interp, argv[1], &interactive); if(success == TCL_OK) { HTAlert_setInteractive( (BOOL) interactive); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_interactive_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTAlert_interactive(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlertCall_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *list_key = argv[1]; char *cbf_key = argv[2]; char *opcode_name = argv[3]; if (list_key && cbf_key && opcode_name) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); Tcl_HashEntry *cbf_entry = Tcl_FindHashEntry(&HTableAlertCallback, cbf_key); /*HTAlertOpcode opcode = HTAlertOpcode_enum(opcode_name);*/ if (list_entry && cbf_entry) { /* HTList *list = Tcl_GetHashValue(list_entry); HTAlertCallback *cbf = Tcl_GetHashValue(cbf_entry); BOOL result = HTAlertcall_add(list, cbf, opcode); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); */ return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlertCall_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *list_key = argv[1]; char *cbf_key = argv[2]; if (list_key && cbf_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); Tcl_HashEntry *cbf_entry = Tcl_FindHashEntry(&HTableAlertCallback, cbf_key); if (list_entry && cbf_entry) { /*HTList *list = Tcl_GetHashValue(list_entry); HTAlertCallback *cbf = Tcl_GetHashValue(cbf_entry); BOOL result = HTAlertcall_delete(list, cbf); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); */ return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlertCall_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *list_key = argv[1]; if (list_key ){ Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if (list_entry) { /* HTList *list = Tcl_GetHashValue(list_entry); BOOL result = HTAlertcall_deleteAll(list); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); */ return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlertCall_find_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *list_key = argv[1]; char *opcode_name = argv[2]; if (list_key && opcode_name) { char *keyname; Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); HTAlertOpcode opcode = HTAlertOpcode_enum(opcode_name); if (list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTAlertCallback *result = HTAlertCall_find(list, opcode); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableAlertCallback, "AlertCallback", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_newReply_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTAlertPar *result = HTAlert_newReply(); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableAlertPar, "AlertPar", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_deleteReply_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==2) { char *AlertPar_key = argv[1]; if (AlertPar_key) { Tcl_HashEntry *AlertPar_entry = Tcl_FindHashEntry(&HTableAlertPar, AlertPar_key); if (AlertPar_entry) { HTAlertPar * old = Tcl_GetHashValue(AlertPar_entry); HTAlert_deleteReply(old); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_setReplyMessage_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *AlertPar_key = argv[1]; const char *message = argv[2]; if (AlertPar_key && message) { Tcl_HashEntry *AlertPar_entry = Tcl_FindHashEntry(&HTableAlertPar, AlertPar_key); if(AlertPar_entry) { HTAlertPar * me = Tcl_GetHashValue(AlertPar_entry); BOOL result = HTAlert_setReplyMessage(me, message); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_assignReplyMessage_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==3) { char *AlertPar_key = argv[1]; char *message = argv[2]; if (AlertPar_key && message) { Tcl_HashEntry *AlertPar_entry = Tcl_FindHashEntry(&HTableAlertPar, AlertPar_key); if(AlertPar_entry) { HTAlertPar * me = Tcl_GetHashValue(AlertPar_entry); BOOL result = HTAlert_assignReplyMessage(me, message); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_replyMessage_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==2) { char *AlertPar_key = argv[1]; if (AlertPar_key) { Tcl_HashEntry *AlertPar_entry = Tcl_FindHashEntry(&HTableAlertPar, AlertPar_key); if(AlertPar_entry) { HTAlertPar * me = Tcl_GetHashValue(AlertPar_entry); char *result = HTAlert_replyMessage(me); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_replySecret_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==2) { char *AlertPar_key = argv[1]; if (AlertPar_key) { Tcl_HashEntry *AlertPar_entry = Tcl_FindHashEntry(&HTableAlertPar, AlertPar_key); if(AlertPar_entry) { HTAlertPar * me = Tcl_GetHashValue(AlertPar_entry); char * result = HTAlert_replySecret(me); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_setReplySecret_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==3) { char *AlertPar_key = argv[1]; const char *secret = argv[2]; if (AlertPar_key && secret) { Tcl_HashEntry *AlertPar_entry = Tcl_FindHashEntry(&HTableAlertPar, AlertPar_key); if(AlertPar_entry) { HTAlertPar * me = Tcl_GetHashValue(AlertPar_entry); BOOL result = HTAlert_setReplySecret(me, secret); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_replyOutput_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==2) { char *AlertPar_key = argv[1]; if (AlertPar_key) { Tcl_HashEntry *AlertPar_entry = Tcl_FindHashEntry(&HTableAlertPar, AlertPar_key); if(AlertPar_entry) { char *keyname; HTAlertPar * me = Tcl_GetHashValue(AlertPar_entry); void *result = HTAlert_replyOutput(me); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableVoid, "Output", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_setReplyOutput_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==3) { char *AlertPar_key = argv[1]; char *void_key = argv[2]; if (AlertPar_key && void_key) { Tcl_HashEntry *AlertPar_entry = Tcl_FindHashEntry(&HTableAlertPar, AlertPar_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if(AlertPar_entry && void_entry) { HTAlertPar * me = Tcl_GetHashValue(AlertPar_entry); void *output = Tcl_GetHashValue(void_entry); BOOL result = HTAlert_setReplyOutput(me, output); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Active set of Callback functions*/ int HTAlert_setGlobal_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTAlert_setGlobal(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_global_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTList *list = HTAlert_global(); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableList, "List", &keyname); Tcl_SetHashValue(entryPtr, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==3) { char *cbf_key = argv[1]; char *opcode_name = argv[2]; if (cbf_key && opcode_name) { Tcl_HashEntry *cbf_entry = Tcl_FindHashEntry(&HTableAlertCallback, cbf_key); if (cbf_entry) { HTAlertCallback *cbf = (HTAlertCallback *) Tcl_GetHashValue(cbf_entry); HTAlertOpcode opcode = HTAlertOpcode_enum(opcode_name); BOOL result = HTAlert_add(cbf, opcode); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==2) { char *cbf_key = argv[1]; if (cbf_key) { Tcl_HashEntry *cbf_entry = Tcl_FindHashEntry(&HTableAlertCallback, cbf_key); if (cbf_entry) { HTAlertCallback *cbf = (HTAlertCallback *) Tcl_GetHashValue(cbf_entry); BOOL result = HTAlert_delete(cbf); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTAlert_find_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *opcode_name = argv[1]; if(opcode_name) { char *keyname; HTAlertOpcode opcode = HTAlertOpcode_enum(opcode_name); HTAlertCallback *result = HTAlert_find(opcode); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableAlertCallback, "AlertCallback", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTAlert_glue.h0100644000076400001440000000302206205134370017350 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTAlert_setInteractive_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_interactive_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlertCall_add_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlertCall_delete_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlertCall_deleteAll_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlertCall_find_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_newReply_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_deleteReply_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_setReplyMessage_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_assignReplyMessage_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_replyMessage_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_replySecret_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_setReplySecret_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_replyOutput_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_setReplyOutput_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_setGlobal_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_global_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAlert_add_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_delete_tcl(ClientData, Tcl_Interp *, int, char**); extern int HTAlert_find_tcl(ClientData, Tcl_Interp *, int, char**); libwww/Library/Test/src/HTAnchor_glue.c0100644000076400001440000015076006227274367017541 0ustar danielusers#include "HTAnchor_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /* Hash Tables to store data structures */ Tcl_HashTable HTableAnchor; Tcl_HashTable HTableLink; Tcl_HashTable HTableList; Tcl_HashTable HTableVoid; /***************************** * HTAnchor * *****************************/ /***************************** * Anchor Objects * *****************************/ /* FINDADDRESS */ int HTAnchor_findAddress_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *addr = argv[1]; HTAnchor *anchor = HTAnchor_findAddress(addr); if (anchor) { char *keyname = Keyname_lookupAnchor(anchor); if (!keyname) { Tcl_HashEntry *entryPtr = CreateNewAnchorEntry("Anchor", &keyname); Tcl_SetHashValue(entryPtr, anchor); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " URL", NULL); return TCL_ERROR; } } /* FINDCHILD */ int HTAnchor_findChild_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *parent_key = argv[1]; char *tag = argv[2]; if (parent_key && tag) { Tcl_HashEntry *p_anchorEntry = Tcl_FindHashEntry(&HTableAnchor, parent_key); if (p_anchorEntry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(p_anchorEntry); HTChildAnchor *c_anchor = HTAnchor_findChild(p_anchor, tag); char *keyname = Keyname_lookupAnchor((HTAnchor *) c_anchor); if (!keyname) { Tcl_HashEntry *entryPtr = CreateNewAnchorEntry("Child_Anchor", &keyname); Tcl_SetHashValue(entryPtr, c_anchor); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor tag", NULL); return TCL_ERROR; } } /* FINDCHILDANDLINK */ int HTAnchor_findChildAndLink_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *tag = argv[2]; char *href = argv[3]; char *linktype = argv[4]; if (argv[1] && tag && href && linktype) { Tcl_HashEntry *p_anchor_entry = Tcl_FindHashEntry(&HTableAnchor, argv[1]); HTLinkType link = HTAtom_for(linktype); if (link && p_anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(p_anchor_entry); HTChildAnchor *c_anchor = HTAnchor_findChildAndLink(p_anchor, tag, href, link); char *keyname = Keyname_lookupAnchor((HTAnchor *) c_anchor); if (!keyname) { Tcl_HashEntry *entryPtr = CreateNewAnchorEntry("Child_Anchor", &keyname); Tcl_SetHashValue(entryPtr, c_anchor); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor tag address linktype", NULL); return TCL_ERROR; } } /* DELETE */ int HTAnchor_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableAnchor, keyname); if (entryPtr) { HTParentAnchor *p_anchor = Tcl_GetHashValue(entryPtr); BOOL result = HTAnchor_delete(p_anchor); Tcl_DeleteHashEntry(entryPtr); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor", NULL); return TCL_ERROR; } } /* DELETEALL */ int HTAnchor_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { BOOL result; char *keyname = malloc(50); char *check = malloc(50); HTList *list; char *listname = argv[1]; Tcl_HashSearch search; if (listname) { Tcl_HashEntry *listPtr = Tcl_FindHashEntry(&HTableList, listname); if (listPtr) { list = Tcl_GetHashValue(listPtr); result = HTAnchor_deleteAll(list); } else { listPtr = CreateNewListEntry(listname, &keyname); result = HTAnchor_deleteAll(list); Tcl_SetHashValue(listPtr, list); } for (listPtr = Tcl_FirstHashEntry(&HTableAnchor, &search); listPtr ; listPtr = Tcl_NextHashEntry(&search)) { Tcl_DeleteHashEntry(listPtr); } check = Tcl_SetVar(interp, listname, keyname, 0); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " HTList", NULL); return TCL_ERROR; } } /***************************** * Relate links to anchors * *****************************/ /* MAINLINK */ int HTAnchor_setMainLink_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *linkname = argv[2]; /*Due to the fact that HTAnchor_makeMainLink swaps the pointers, the labels in Tcl are incorrect, thus the complex swapping of names...*/ if (keyname && linkname) { char *oldmainkeyname; Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, keyname); Tcl_HashEntry *link_entry = Tcl_FindHashEntry(&HTableLink, linkname); if (anchor_entry && link_entry) { Tcl_HashEntry *oldlink_entry; HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTLink *link = Tcl_GetHashValue(link_entry); HTLink *oldmain = HTAnchor_mainLink(anchor); BOOL result = HTAnchor_setMainLink(anchor, link); if (oldmain != NULL) { oldmainkeyname = Keyname_lookupLinks(oldmain); oldlink_entry = Tcl_FindHashEntry(&HTableLink, oldmainkeyname); Tcl_SetHashValue(oldlink_entry, link); Tcl_SetHashValue(link_entry, oldmain); } Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor link", NULL); return TCL_ERROR; } } int HTAnchor_mainLink_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname; char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *entryPtr; Tcl_HashEntry *anchorPtr = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchorPtr) { HTAnchor *anchor = Tcl_GetHashValue(anchorPtr); HTLink *result = HTAnchor_mainLink(anchor); if (result) { keyname = Keyname_lookupLinks(result); if (!keyname) { entryPtr = CreateNewLinkEntry("HTLink", &keyname); Tcl_SetHashValue(entryPtr, result); } } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor", NULL); return TCL_ERROR; } } /* FOLLOWMAINLINK */ int HTAnchor_followMainLink_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchorPtr = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchorPtr) { HTAnchor *anchor = Tcl_GetHashValue(anchorPtr); HTAnchor *result = HTAnchor_followMainLink(anchor); char *keyname = Keyname_lookupAnchor(result); if (!keyname) { Tcl_HashEntry *entryPtr = CreateNewAnchorEntry("Anchor", &keyname); Tcl_SetHashValue(entryPtr, result); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor", NULL); return TCL_ERROR; } } /* SUBLINKS */ int HTAnchor_setSubLinks_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *listname = argv[2]; if (keyname && listname) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableAnchor, keyname); Tcl_HashEntry *listPtr = Tcl_FindHashEntry(&HTableList, listname); if (entryPtr && listPtr) { HTAnchor *anchor = Tcl_GetHashValue(entryPtr); HTList *list = Tcl_GetHashValue(listPtr); BOOL result = HTAnchor_setSubLinks(anchor,list); Tcl_SetHashValue(listPtr, list); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor list", NULL); return TCL_ERROR; } } int HTAnchor_subLinks_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableAnchor, keyname); if (entryPtr) { HTAnchor *anchor = Tcl_GetHashValue(entryPtr); HTList *list = HTAnchor_subLinks(anchor); char *listname = Keyname_lookupList(list); if ((!listname) && (list)) { Tcl_HashEntry *listPtr = CreateNewListEntry("HTList", &listname); Tcl_SetHashValue(listPtr, list); } Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor", NULL); return TCL_ERROR; } } /***************************** * Relate child and parents * *****************************/ /* PARENT */ int HTAnchor_parent_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTParentAnchor *result = HTAnchor_parent(anchor); char *keyname = Keyname_lookupAnchor((HTAnchor *) result); if (!keyname) { Tcl_HashEntry *entryPtr = CreateNewAnchorEntry("Parent_Anchor", &keyname); Tcl_SetHashValue(entryPtr, result); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor", NULL); return TCL_ERROR; } } /* HASCHILDREN */ int HTAnchor_hasChildren_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); BOOL result = HTAnchor_hasChildren(p_anchor); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } /***************************** * Addresses * *****************************/ /* ADDRESS */ int HTAnchor_address_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); char *result = HTAnchor_address(anchor); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor", NULL); return TCL_ERROR; } } /* EXPANDEDADDRESS */ int HTAnchor_expandedAddress_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); char *result = HTAnchor_expandedAddress(anchor); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor", NULL); return TCL_ERROR; } } /* PHYSICAL */ int HTAnchor_physical_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); char *result = HTAnchor_physical(p_anchor); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setPhysical_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *physical = argv[2]; if (anchor_name && physical) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setPhysical(p_anchor, physical); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor physical_address", NULL); return TCL_ERROR; } } int HTAnchor_clearPhysical_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_clearPhysical(p_anchor); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } /***************************** * Entity Body * *****************************/ /* DOCUMENT */ int HTAnchor_setDocument_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *doc_name = argv[2]; if (anchor_name && doc_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); Tcl_HashEntry *doc_entry = Tcl_FindHashEntry(&HTableVoid, doc_name); if (anchor_entry && doc_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); void *doc = Tcl_GetHashValue(doc_entry); HTAnchor_setDocument(p_anchor, doc); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor doc", NULL); return TCL_ERROR; } } int HTAnchor_document_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); void *result = HTAnchor_document(p_anchor); char *keyname = Keyname_lookupVoid((void *) result); if (!keyname) { Tcl_HashEntry *entryPtr = CreateNewVoidEntry("Doc", &keyname); Tcl_SetHashValue(entryPtr, result); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } /***************************** * Entity Header * *****************************/ /* CLEARHEADER */ int HTAnchor_clearHeader_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_clearHeader(p_anchor); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } /* CACHEHIT */ #if 0 int HTAnchor_cacheHit_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); BOOL result = HTAnchor_cacheHit(p_anchor); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setCacheHit_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; int cacheHit; if (anchor_name && (Tcl_GetBoolean(interp, argv[2], &cacheHit) == TCL_OK)) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setCacheHit(p_anchor, cacheHit); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor cachehit", NULL); return TCL_ERROR; } } #endif /* INDEX */ int HTAnchor_clearIndex_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_clearIndex(p_anchor); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setIndex_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setIndex(p_anchor); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_isIndex_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); BOOL result = HTAnchor_isIndex(p_anchor); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } /* TITLE */ int HTAnchor_title_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); Tcl_AppendResult(interp, HTAnchor_title(p_anchor), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setTitle_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *title = argv[2]; if (anchor_name && title) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setTitle(p_anchor, title); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor title", NULL); return TCL_ERROR; } } int HTAnchor_appendTitle_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *title = argv[2]; if (anchor_name && title) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_appendTitle(p_anchor, title); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor append_title", NULL); return TCL_ERROR; } } /* BASE */ int HTAnchor_base_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); Tcl_AppendResult(interp, HTAnchor_base(p_anchor), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setBase_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *base = argv[2]; if (anchor_name && base) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); BOOL result = HTAnchor_setBase(p_anchor, base); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor base", NULL); return TCL_ERROR; } } /* LOCATION */ int HTAnchor_location_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); Tcl_AppendResult(interp, HTAnchor_location(p_anchor), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setLocation_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *location = argv[2]; if (anchor_name && location) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); BOOL result = HTAnchor_setLocation(p_anchor, location); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor location", NULL); return TCL_ERROR; } } /* FORMAT */ int HTAnchor_format_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTFormat result = HTAnchor_format(p_anchor); Tcl_AppendResult(interp, HTAtom_name(result), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setFormat_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *format_name = argv[2]; if (anchor_name && format_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTFormat format = HTAtom_for(format_name); HTAnchor_setFormat(p_anchor, format); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor format", NULL); return TCL_ERROR; } } /* FORMATPARAM */ int HTAnchor_formatParam_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_keyname = argv[1]; char *listname = malloc(max_keyname); if (anchor_keyname) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_keyname); Tcl_HashEntry *list_entry; if (anchor_entry) { HTParentAnchor *anchor = (HTParentAnchor *) Tcl_GetHashValue(anchor_entry); HTAssocList *list = HTAnchor_formatParam(anchor); listname = Keyname_lookupAssocList(list); if (listname) { list_entry = CreateNewAssocListEntry("AssocList", &listname); Tcl_SetHashValue(list_entry, list); } Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor", NULL); return TCL_ERROR; } } int HTAnchor_addFormatParam_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *anchor_keyname = argv[1]; char *name = argv[2]; char *value = argv[3]; if (anchor_keyname) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_keyname); if (anchor_entry) { HTParentAnchor *anchor = (HTParentAnchor *) Tcl_GetHashValue(anchor_entry); BOOL result = HTAnchor_addFormatParam(anchor, name, value); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " anchor name value", NULL); return TCL_ERROR; } } /* CHARSET */ int HTAnchor_charset_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTCharset result = HTAnchor_charset(p_anchor); Tcl_AppendResult(interp, HTAtom_name(result), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setCharset_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *charset_name = argv[2]; if (anchor_name && charset_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTCharset charset = HTAtom_for(charset_name); HTAnchor_setCharset(p_anchor, charset); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor charset", NULL); return TCL_ERROR; } } /* LEVEL */ int HTAnchor_level_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTLevel result = HTAnchor_level(p_anchor); Tcl_AppendResult(interp, HTAtom_name(result), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setLevel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *level_name = argv[2]; if (anchor_name && level_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTLevel level = HTAtom_for(level_name); HTAnchor_setLevel(p_anchor, level); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor level", NULL); return TCL_ERROR; } } /* LANGUAGE */ int HTAnchor_language_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { Tcl_HashEntry *listPtr; HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTList *list = HTAnchor_language(p_anchor); char *listname = Keyname_lookupList(list); if ((!listname) && list) { listPtr = CreateNewListEntry("HTList", &listname); Tcl_SetHashValue(listPtr, list); } Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_addLanguage_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *language_name = argv[2]; if (anchor_name && language_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTLanguage language = HTAtom_for(language_name); BOOL result = HTAnchor_addLanguage(p_anchor, language); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor language", NULL); return TCL_ERROR; } } /* ENCODING */ int HTAnchor_encoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { Tcl_HashEntry *listPtr; HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTList *list = HTAnchor_encoding(p_anchor); char *listname = Keyname_lookupList(list); if ((!listname) && (list)) { listPtr = CreateNewListEntry("HTList", &listname); Tcl_SetHashValue(listPtr, list); } Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_addEncoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *encoding_name = argv[2]; if (anchor_name && encoding_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTEncoding encoding = HTAtom_for(encoding_name); BOOL result = HTAnchor_addEncoding(p_anchor, encoding); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor encoding", NULL); return TCL_ERROR; } } /* TRANSFER */ int HTAnchor_transfer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTEncoding result = HTAnchor_transfer(p_anchor); Tcl_AppendResult(interp, HTAtom_name(result), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setTransfer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *transfer_name = argv[2]; if (anchor_name && transfer_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTEncoding encoding = HTAtom_for(transfer_name); HTAnchor_setTransfer(p_anchor, encoding); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor transfer", NULL); return TCL_ERROR; } } /* LENGTH */ int HTAnchor_length_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); long int result = HTAnchor_length(p_anchor); char *string=malloc(sizeof(result)); sprintf(string, "%ld", result); Tcl_AppendResult(interp, string, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setLength_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; if (anchor_name && argv[2]) { long int length = atol(argv[2]); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setLength(p_anchor, length); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor integer", NULL); return TCL_ERROR; } } int HTAnchor_addLength_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; if (anchor_name && argv[2]) { long int length = atol(argv[2]); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_addLength(p_anchor, length); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor integer", NULL); return TCL_ERROR; } } /* MD5 */ int HTAnchor_md5_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); Tcl_AppendResult(interp, HTAnchor_md5(p_anchor), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setMd5_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *md5 = argv[2]; if (anchor_name && md5) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setMd5(p_anchor, md5); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor md5", NULL); return TCL_ERROR; } } /* METHOD */ int HTAnchor_allow_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); int methods = HTAnchor_allow(p_anchor); char *result = malloc(sizeof(methods)); sprintf(result, "%d", methods); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setAllow_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int methods; char *anchor_name = argv[1]; if (anchor_name && (Tcl_GetInt(interp, argv[2], &methods) == TCL_OK)) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setAllow(p_anchor, methods); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor methods", NULL); return TCL_ERROR; } } int HTAnchor_appendMethods_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int methods; char *anchor_name = argv[1]; if (anchor_name && (Tcl_GetInt(interp, argv[2], &methods) == TCL_OK)) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_appendMethods(p_anchor, methods); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor methods", NULL); return TCL_ERROR; } } /* VERSION */ int HTAnchor_version_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); Tcl_AppendResult(interp, HTAnchor_version(p_anchor), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setVersion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *version = argv[2]; if (anchor_name && version) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setVersion(p_anchor, version); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor version", NULL); return TCL_ERROR; } } /* DATE */ int HTAnchor_date_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); time_t date = HTAnchor_date(p_anchor); char *result = malloc(sizeof(date)); sprintf(result, "%ld", date); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setDate_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; if (anchor_name && argv[2]) { time_t date = atol(argv[2]); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setDate(p_anchor, date); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor date", NULL); return TCL_ERROR; } } /* LASTMODIFIED */ int HTAnchor_lastModified_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); time_t date = HTAnchor_lastModified(p_anchor); char *result = malloc(sizeof(date)); sprintf(result, "%ld", date); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setLastModified_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; if (anchor_name && argv[2]) { time_t date = atol(argv[2]); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setLastModified(p_anchor, date); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor date", NULL); return TCL_ERROR; } } /* ETAG */ int HTAnchor_etag_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); Tcl_AppendResult(interp, HTAnchor_etag(p_anchor), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setEtag_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *etag = argv[2]; if (anchor_name && etag) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setEtag(p_anchor, etag); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor etag", NULL); return TCL_ERROR; } } int HTAnchor_isEtagWeak_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); BOOL result = HTAnchor_isEtagWeak(p_anchor); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } /* EXPIRES */ int HTAnchor_expires_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); time_t date = HTAnchor_expires(p_anchor); char *result = malloc(sizeof(date)); sprintf(result, "%ld", date); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setExpires_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; if (anchor_name && argv[2]) { time_t date = atol(argv[2]); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setExpires(p_anchor, date); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor date", NULL); return TCL_ERROR; } } /* DERIVED */ int HTAnchor_derived_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); Tcl_AppendResult(interp, HTAnchor_derived(p_anchor), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_setDerived_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *derived = argv[2]; if (anchor_name && derived) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_setDerived(p_anchor, derived); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor derived_from", NULL); return TCL_ERROR; } } /* EXTRA */ #if 0 int HTAnchor_extra_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_name = argv[1]; if (anchor_name) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTList *list = HTAnchor_Extra(p_anchor); char *keyname = Keyname_lookupList(list); if (!keyname) { Tcl_HashEntry *entryPtr = CreateNewListEntry("HTList", &keyname); Tcl_SetHashValue(entryPtr, list); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor", NULL); return TCL_ERROR; } } int HTAnchor_addExtra_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *anchor_name = argv[1]; char *extra = argv[2]; if (anchor_name && extra) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_name); if (anchor_entry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(anchor_entry); HTAnchor_addExtra(p_anchor, extra); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " parent_anchor extra_header", NULL); return TCL_ERROR; } } #endif /*Do we need HTAnchor_headerParsed? */ libwww/Library/Test/src/HTAnchor_glue.h0100644000076400001440000001245206201426572017526 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" /*HTAnchor*/ extern int HTAnchor_findAddress_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_findChild_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_findChildAndLink_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); /*Relate anchors to links*/ extern int HTAnchor_setMainLink_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_mainLink_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_followMainLink_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setSubLinks_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_subLinks_tcl(ClientData, Tcl_Interp *, int, char **); /* Relate parents to children */ extern int HTAnchor_parent_tcl(ClientData,Tcl_Interp *, int, char **); extern int HTAnchor_hasChildren_tcl(ClientData, Tcl_Interp *, int, char **); /* Addresses */ extern int HTAnchor_address_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_expandedAddress_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_physical_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setPhysical_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_clearPhysical_tcl(ClientData, Tcl_Interp *, int, char **); /* Entity Body */ extern int HTAnchor_setDocument_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_document_tcl(ClientData, Tcl_Interp *, int, char **); /* Entity Header */ extern int HTAnchor_clearHeader_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_cacheHit_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setCacheHit_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_clearIndex_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setIndex_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_isIndex_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_title_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setTitle_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_appendTitle_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_base_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setBase_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_location_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setLocation_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_format_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setFormat_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_formatParam_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_addFormatParam_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_charset_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setCharset_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_level_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setLevel_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_language_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_addLanguage_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_encoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_addEncoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_transfer_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setTransfer_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_length_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setLength_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_addLength_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_md5_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setMd5_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_methods_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setMethods_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_appendMethods_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_version_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setVersion_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_date_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setDate_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_lastModified_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setLastModified_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_etag_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setEtag_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_isEtagWeak_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_expires_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setExpires_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_derived_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_setDerived_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_extra_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAnchor_addExtra_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTAssoc_glue.c0100644000076400001440000000270406201705276017357 0ustar danielusers#include "HTAssoc_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " Tcl_HashTable HTableAssoc; /***************************** * HTAssocList * *****************************/ /* NEW */ int HTAssocList_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTAssocList *list = HTAssocList_new(); Tcl_HashEntry *entryPtr = CreateNewAssocListEntry("HTAssocList", &keyname); if (entryPtr) { Tcl_SetHashValue(entryPtr, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /* DELETE */ int HTAssocList_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableAssoc, keyname); if (entryPtr) { HTAssocList *list = Tcl_GetHashValue(entryPtr); HTAssocList_delete(list); Tcl_DeleteHashEntry(entryPtr); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " associated-list", NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTAssoc_glue.h0100644000076400001440000000032606201426575017364 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTAssocList_new_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTAssocList_delete_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTBind_glue.c0100644000076400001440000002106706206151744017166 0ustar danielusers/*xing's first attempt at writing glue codes*/ /* alex editted for compilation error 8/1/96 */ #include "HTBind_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existant entries" #define err_string "wrong # args: should be " /****************************** * HTBind * *****************************/ Tcl_HashTable HTableAnchor; /*Initialization of the Module*/ int HTBind_int_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTBind_init(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTBind_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTBind_deleteAll(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /*case sensitivity*/ int HTBind_caseSensitive_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { int conversion; int sensitive; conversion = Tcl_GetBoolean(interp, argv[1], &sensitive); if (conversion == TCL_OK) { HTBind_caseSensitive( (BOOL) sensitive); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /*Suffix Delimitters*/ int HTBind_delimiters_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { const char *result=HTBind_delimiters(); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTBind_setDelimiters_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { if(argv[1]){ HTBind_setDelimiters(argv[1]); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /*Set up Bindings Associated with a File Suffix*/ int HTBind_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 7) { char *suffix = argv[1]; char *representation = argv[2]; char *encoding = argv[3]; char *transfer = argv[4]; char *language = argv[5]; int *value = malloc(sizeof(int)); int conversion = Tcl_GetInt(interp, argv[6], value); if (suffix && representation && encoding && transfer && language && (conversion == TCL_OK)) { BOOL result = HTBind_add(suffix, representation, encoding, transfer, language, *value); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTBind_addType_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *suffix = argv[1]; char *format = argv[2]; int *value = malloc(sizeof(int)); int conversion = Tcl_GetInt(interp, argv[3], value); if (suffix && format && (conversion == TCL_OK)) { BOOL result = HTBind_addType(suffix, format, *value); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTBind_addEncoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *suffix = argv[1]; char *encoding = argv[2]; int *value = malloc(sizeof(int)); int conversion = Tcl_GetInt(interp, argv[3], value); if (suffix && encoding && (conversion == TCL_OK)) { BOOL result = HTBind_addType(suffix, encoding, *value); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTBind_addTransfer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *suffix = argv[1]; char *transfer = argv[2]; int *value = malloc(sizeof(int)); int conversion = Tcl_GetInt(interp, argv[3], value); if (suffix && transfer && (conversion == TCL_OK)) { BOOL result = HTBind_addTransfer(suffix, transfer, *value); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTBind_addLanguage_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *suffix = argv[1]; char *language = argv[2]; int *value = malloc(sizeof(int)); int conversion = Tcl_GetInt(interp, argv[3], value); if (suffix && language && (conversion == TCL_OK)) { BOOL result = HTBind_addLanguage(suffix, language, *value); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /****************************** *Determine a suitable suffix * ******************************/ int HTBind_getSuffix_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *parent_key = argv[1]; if (parent_key) { Tcl_HashEntry *p_anchorEntry = Tcl_FindHashEntry(&HTableAnchor, parent_key); if(p_anchorEntry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(p_anchorEntry); char *Result = HTBind_getSuffix (p_anchor); Tcl_AppendResult(interp, Result, NULL); return TCL_OK; } Tcl_AppendResult(interp, "no hash table entry", NULL); return TCL_ERROR; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /*Determine the content of an Anchor */ int HTBind_getBindings_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *parent_key = argv[1]; if (parent_key) { Tcl_HashEntry *p_anchorEntry = Tcl_FindHashEntry(&HTableAnchor, parent_key); if(p_anchorEntry) { HTParentAnchor *p_anchor = Tcl_GetHashValue(p_anchorEntry); BOOL Result = HTBind_getBindings(p_anchor); Tcl_AppendResult(interp, Result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, "no hash table entry", NULL); return TCL_ERROR; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /*Determine the content of File*/ int HTBind_getFormat_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc==7) { double *quality; char *filename = argv[1]; char *format_keyname = argv[2]; char *enc_keyname = argv[3]; char *cte_keyname = argv[4]; char *lang_keyname = argv[5]; char *quality_string = argv[6]; int conversion_success = Tcl_GetDouble(interp, quality_string, quality); if(filename && format_keyname && enc_keyname && cte_keyname && lang_keyname && (conversion_success == TCL_OK)) { HTFormat format = HTAtom_for(format_keyname); HTEncoding enc = HTAtom_for(enc_keyname); HTEncoding cte = HTAtom_for(cte_keyname); HTLanguage lang = HTAtom_for(lang_keyname); BOOL result = HTBind_getFormat(filename, &format, &enc, &cte, &lang, quality); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTBind_glue.h0100644000076400001440000000265306201733673017175 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTBind_int_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_caseSensitive_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_delimiters_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_setDelimiters_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_addType_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_addEncoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_addTransfer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_addLanguage_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_getSuffix_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_getBindings_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTBind_getFormat_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTDNS_glue.c0100644000076400001440000001236606207130134016727 0ustar danielusers#include "HTDNS_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /**************************** * HTDNS * ****************************/ Tcl_HashTable HTableDNS; Tcl_HashTable HTableList; Tcl_HashTable HTableNet; Tcl_HashTable HTableHost; int HTDNS_setTimeout_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { if (argv[1]) { time_t timeout = atol(argv[2]); HTDNS_setTimeout(timeout); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } int HTDNS_timeout_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { if (argv[1]) { time_t timeout = atol(argv[2]); time_t result= HTDNS_timeout(timeout); char *result_string = malloc(sizeof(result)); sprintf(result_string, "%d", (int) result); Tcl_AppendResult(interp, result_string, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } /*not sure how to handel struct hostent */ int HTDNS_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *list_key = argv[1]; char *element_key = argv[2]; char *host=argv[3]; char *homes_name = argv[4]; if (list_key && element_key && host && homes_name) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); Tcl_HashEntry *element_entry = Tcl_FindHashEntry(&HTableHost, element_key); if (list_entry && element_entry) { char *keyname; char *homes_string; int homes; HTList * list = Tcl_GetHashValue(list_entry); struct hostent *element = (struct hostent *) Tcl_GetHashValue(element_entry); HTdns *dns = HTDNS_add(list, element, host, &homes); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableDNS, "DNS", &keyname); Tcl_SetHashValue(entryPtr, dns); homes_string = malloc(sizeof(char) * max_keyname); if(!homes_string) return TCL_ERROR; sprintf(homes_string, "%d", homes); Tcl_SetVar(interp, homes_name, homes_string, 0); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTDNS_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==2) { const char *host = argv[1]; if (host) { BOOL result = HTDNS_delete(host); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTDNS_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTDNS_deleteAll(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTDNS_updateWeigths_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *dns_key = argv[1]; int cur; int success = Tcl_GetInt(interp, argv[2], &cur); char *time_string=argv[4]; if (dns_key && time_string && (success == TCL_OK)) { Tcl_HashEntry *dns_entry = Tcl_FindHashEntry(&HTableDNS, dns_key); time_t deltatime = atol(time_string); if (dns_entry) { HTdns *dns = Tcl_GetHashValue(dns_entry); BOOL result= HTDNS_updateWeigths(dns, cur, deltatime); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTGetHostBySock_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { int soc; int success = Tcl_GetInt(interp, argv[1], &soc); if ( success == TCL_OK) { char *result = HTGetHostBySock(soc); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTGetHostByName_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *net_key = argv[1]; char *host = argv[2]; if ( net_key && host ) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if (net_entry) { struct _HTNet *net = Tcl_GetHashValue(net_entry); int result = HTGetHostByName(net, host); char *result_string = malloc(sizeof(result)); sprintf(result_string, "%d", result); Tcl_AppendResult(interp, result_string, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTDNS_glue.h0100644000076400001440000000116406207130135016727 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTDNS_setTimeout_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTDNS_timeout_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTDNS_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTDNS_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTDNS_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTDNS_updateWeigths_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetHostBySock_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetHostByName_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTError_glue.c0100644000076400001440000002251406205134371017375 0ustar danielusers#include "HTError_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /************************* * HTAnchor * *************************/ Tcl_HashTable HTableList; Tcl_HashTable HTableError; Tcl_HashTable HTableVoid; int HTError_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 8 ) { char *list_key = argv[1]; char *severity_key = argv[2]; int ignore; int success1 = Tcl_GetBoolean(interp, argv[3], &ignore); int element; int success2 = Tcl_GetInt(interp, argv[4], &element); char *void_key = argv[5]; int length; int success3 = Tcl_GetInt(interp, argv[5], &length); char *where = argv[6]; if ( list_key && severity_key && void_key && where && (success1 == TCL_OK) && (success2 == TCL_OK) && (success3 == TCL_OK) ) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); HTSeverity severity = HTSeverity_enum(severity_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if(list_entry && void_entry) { HTList * list = Tcl_GetHashValue(list_entry); void *par = Tcl_GetHashValue(void_entry); BOOL result = HTError_add(list, severity, ignore, element, par, (unsigned int) length, where); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTError_addSystem_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 6) { char * list_key = argv[1]; char * severity_key = argv[2]; int errornumber; int success1 = Tcl_GetInt(interp, argv[3], &errornumber); int ignore; int success2 = Tcl_GetBoolean(interp, argv[4], &ignore); char *syscall = argv[5]; if (list_key && severity_key && syscall && (success1 == TCL_OK) && (success2 == TCL_OK)) { HTSeverity severity = HTSeverity_enum(severity_key); Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if (list_entry) { HTList *list = Tcl_GetHashValue(list_entry); BOOL result= HTError_addSystem(list, severity, errornumber, (BOOL) ignore, syscall); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*delete an entire Error Stack */ int HTError_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char * list_key = argv[1]; if (list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if (list_entry) { HTList *list = Tcl_GetHashValue(list_entry); BOOL result = HTError_deleteAll(list); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*delete lst added entry */ int HTError_deleteLast_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char * list_key = argv[1]; if (list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if (list_entry) { HTList *list = Tcl_GetHashValue(list_entry); BOOL result = HTError_deleteLast(list); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*object methods*/ /*show the error entry*/ int HTError_doShow_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *error_key = argv[1]; if( error_key) { Tcl_HashEntry *error_entry = Tcl_FindHashEntry(&HTableError, error_key); if( error_entry) { HTError *info = Tcl_GetHashValue(error_entry); BOOL result = HTError_doShow(info); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Ignore last added error*/ int HTError_ignoreLast_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *list_key = argv[1]; if( list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if( list_entry) { HTList *list = Tcl_GetHashValue(list_entry); BOOL result = HTError_ignoreLast(list); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTError_setIgnore_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *error_key = argv[1]; if( error_key) { Tcl_HashEntry *error_entry = Tcl_FindHashEntry(&HTableError, error_key); if( error_entry) { HTError *info = Tcl_GetHashValue(error_entry); BOOL result = HTError_setIgnore(info); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTError_index_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *error_key = argv[1]; if( error_key) { Tcl_HashEntry *error_entry = Tcl_FindHashEntry(&HTableError, error_key); if( error_entry) { HTError *info = Tcl_GetHashValue(error_entry); int result = HTError_index(info); char *storage = malloc(result * sizeof(char) ); sprintf(storage, "%d", result); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTError_severity_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *error_key = argv[1]; if(error_key) { Tcl_HashEntry *error_entry = Tcl_FindHashEntry(&HTableError, error_key); if(error_entry){ HTError *info = Tcl_GetHashValue(error_entry); HTSeverity severity = HTError_severity(info); char *result = HTSeverity_name(severity); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTError_hasSeverity_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *list_key = argv[1]; char *severity_name = argv[2]; if( list_key && severity_name) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); HTSeverity severity = HTSeverity_enum(severity_name); if( list_entry) { HTList *list = Tcl_GetHashValue(list_entry); BOOL result = HTError_hasSeverity(list, severity); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*parameter associated with Error*/ /* note to myself, not sure what to do about an integer pointer, do relize that the value might be resulted throught the integer */ int HTError_parameter_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *error_key = argv[1]; int * length = malloc(sizeof(int)); if( error_key) { Tcl_HashEntry *error_entry = Tcl_FindHashEntry(&HTableError, error_key); if( error_entry) { char * storage = malloc(max_keyname * sizeof(char)); HTError *info = Tcl_GetHashValue(error_entry); HTError_parameter(info, length); sprintf(storage, "%d", *length); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* where did it happen */ int HTError_location_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *error_key = argv[1]; if( error_key) { Tcl_HashEntry *error_entry = Tcl_FindHashEntry(&HTableError, error_key); if( error_entry) { HTError *info = Tcl_GetHashValue(error_entry); const char *result = HTError_location(info); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTError_glue.h0100644000076400001440000000165306205134372017404 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTError_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_addSystem_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_deleteLast_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_doShow_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_ignoreLast_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_setIgnore_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_index_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_severity_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_hasSeverity_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_parameter_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTError_location_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTFWriter_glue.c0100644000076400001440000000414106201705300017652 0ustar danielusers#include "HTFWriter_glue.h" #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " Tcl_HashTable HTableStream; Tcl_HashTable HTableReq; int HTBlackHole_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTStream *stream = HTBlackHole(); Tcl_HashEntry *entryPtr = CreateNewStreamEntry("BlackHole", &keyname); Tcl_SetHashValue(entryPtr, stream); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTErrorStream_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTStream *stream = HTErrorStream(); Tcl_HashEntry *entryPtr = CreateNewStreamEntry("ErrorStream", &keyname); Tcl_SetHashValue(entryPtr, stream); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTFWriter_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int leave_open; char *req_keyname = argv[1]; char *filename = argv[2]; char *boolean_str = argv[3]; if (req_keyname && filename && (Tcl_GetBoolean(interp, boolean_str, &leave_open) == TCL_OK)) { char *keyname; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); FILE *fp = fopen(filename, "w"); if (request_entry) { HTRequest *req = Tcl_GetHashValue(request_entry); HTStream *stream = HTFWriter_new(req, fp, leave_open); Tcl_HashEntry *entryPtr = CreateNewStreamEntry("HTFWriter", &keyname); Tcl_SetHashValue(entryPtr, stream); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTFWriter_glue.h0100644000076400001440000000040706201426577017700 0ustar danielusers#include "Libdata.h" extern int HTBlackHole_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTErrorStream_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFWriter_new_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTFormat_glue.c0100644000076400001440000006307706206367115017552 0ustar danielusers#include "HTFormat_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " Tcl_HashTable HTableList; Tcl_HashTable HTableConverter; Tcl_HashTable HTableCoder; Tcl_HashTable HTableStream; Tcl_HashTable HTableReq; Tcl_HashTable HTableVoid; /****************************** * HTFormat * * stream pipe manager * *****************************/ /* Register Presenters */ int HTPresentation_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 8) { char *keyname = argv[1]; const char *representation = argv[2]; const char *command = argv[3]; const char *test_command=argv[4]; double quality; double secs; double secs_per_byte; int success1=Tcl_GetDouble(interp, argv[5], &quality); int success2=Tcl_GetDouble(interp, argv[6], &secs); int success3=Tcl_GetDouble(interp, argv[7], &secs_per_byte); if(keyname && representation && command && test_command && (success1 == TCL_OK) && (success2 == TCL_OK) && (success3 == TCL_OK)) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableList, keyname); if(entryPtr) { HTList * conversions = Tcl_GetHashValue(entryPtr); HTPresentation_add(conversions, representation, command, test_command, quality, secs, secs_per_byte); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTPresentation_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc==2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTPresentation_deleteAll(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else{ Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Register Converters*/ int HTConversion_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 8) { char *list_key = argv[1]; const char *rep_in = argv[2]; const char *rep_out = argv[3]; char *converter_key=argv[4]; double quality; double secs; double secs_per_byte; int success1=Tcl_GetDouble(interp, argv[5], &quality); int success2=Tcl_GetDouble(interp, argv[6], &secs); int success3=Tcl_GetDouble(interp, argv[7], &secs_per_byte); if(list_key && rep_in && rep_out && converter_key && (success1 == TCL_OK) && (success2 == TCL_OK) && (success3 == TCL_OK)) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); Tcl_HashEntry *converter_entry = Tcl_FindHashEntry(&HTableConverter, converter_key); if(list_entry && converter_entry ) { HTList * conversions = Tcl_GetHashValue(list_entry); HTConverter * converter = (HTConverter *) Tcl_GetHashValue(converter_entry); HTConversion_add(conversions, rep_in, rep_out, converter, quality, secs, secs_per_byte); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTConversion_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry * list_entry = Tcl_FindHashEntry(&HTableList, list_key); if (list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTConversion_deleteAll(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Register Content Coders */ /* not really sure about what to do with HTCoding*/ int HTCoding_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv){ if (argc == 6) { char *list_key = argv[1]; const char * encoding = argv[2]; char *encoder_key = argv[3]; char *decoder_key = argv[4]; double quality; int success = Tcl_GetDouble(interp, argv[5], &quality); if(list_key && encoding && encoder_key && decoder_key && (success == TCL_OK)) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); Tcl_HashEntry *encoder_entry = Tcl_FindHashEntry(&HTableCoder, encoder_key); Tcl_HashEntry *decoder_entry = Tcl_FindHashEntry(&HTableCoder, decoder_key); if(list_entry && encoder_entry && decoder_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTCoder *encoder = (HTCoder *) Tcl_GetHashValue(encoder_entry); HTCoder *decoder = (HTCoder *) Tcl_GetHashValue(decoder_entry); BOOL result = HTCoding_add(list, encoding, encoder, decoder, quality); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTCoding_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==2) { char *list_key = argv[1]; if (list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if (list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTCoding_deleteAll(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*this function is not done yet.*/ /*extern const char * HTCoding_name (HTCoding * me);*/ /*Content Charsets */ /*Register a Charset*/ int HTCharset_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *list_key = argv[1]; const char * charset = argv[2]; double quality; int success = Tcl_GetDouble(interp, argv[3], &quality); if(list_key && charset && (success == TCL_OK)) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList * list = Tcl_GetHashValue(list_entry); HTCharset_add(list, charset, quality); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Delete a list of Charsets */ int HTCharset_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList * list = Tcl_GetHashValue(list_entry); HTCharset_deleteAll(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Content Languages */ /* Register a Language */ int HTLanguage_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *list_key = argv[1]; const char * language = argv[2]; double quality; int success = Tcl_GetDouble(interp, argv[3], &quality); if(list_key && language && (success == TCL_OK)) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList * list = Tcl_GetHashValue(list_entry); HTLanguage_add(list, language, quality); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Delete a list of Languages */ extern void HTLanguage_deleteAll (HTList * list); int HTLanguage_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList * list = Tcl_GetHashValue(list_entry); HTLanguage_deleteAll(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Global Preferences*/ /*Converters and Presenters*/ int HTFormat_setConversion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv){ if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTFormat_setConversion(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTFormat_conversion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTList *list = HTFormat_conversion(); Tcl_HashEntry *list_entry = CreateNewListEntry("conversion_list", &keyname); Tcl_SetHashValue(list_entry, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* not sure what to do about the arguement HTConverter */ int HTFormat_addConversion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 7) { const char * input_format = argv[1]; const char * output_format = argv[2]; char * converter_key = argv[3]; double quality; double secs; double secs_per_byte; int success1 = Tcl_GetDouble(interp, argv[4], &quality); int success2 = Tcl_GetDouble(interp, argv[5], &secs); int success3 = Tcl_GetDouble(interp, argv[6], &secs_per_byte); if(input_format && output_format && converter_key && (success1 == TCL_OK) && (success2 == TCL_OK) && (success3 == TCL_OK)) { Tcl_HashEntry *converter_entry = Tcl_FindHashEntry(&HTableConverter, converter_key); if(converter_entry) { HTConverter *converter =(HTConverter *) Tcl_GetHashValue(converter_entry); HTFormat_addConversion(input_format, output_format, converter, quality, secs, secs_per_byte); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Content Codings */ int HTFormat_setContentCoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv){ if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTFormat_setContentCoding(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTFormat_contentCoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTList *list = HTFormat_contentCoding(); Tcl_HashEntry *list_entry = CreateNewListEntry("contentCoding_list", &keyname); Tcl_SetHashValue(list_entry, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTFormat_addCoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char * encoding = argv[1]; char * encoder_key = argv[2]; char * decoder_key = argv[3]; double quality; int success = Tcl_GetDouble(interp, argv[4], &quality); if (encoding && encoder_key && decoder_key && success == TCL_OK ) { Tcl_HashEntry *encoder_entry = Tcl_FindHashEntry (&HTableCoder, encoder_key); Tcl_HashEntry *decoder_entry = Tcl_FindHashEntry (&HTableCoder, decoder_key); if (encoder_entry && decoder_entry) { HTCoder *encoder = (HTCoder *) Tcl_GetHashValue(encoder_entry); HTCoder *decoder = (HTCoder *) Tcl_GetHashValue(decoder_entry); BOOL result = HTFormat_addCoding(encoding, encoder, decoder, quality); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Content Transfer Codings */ int HTFormat_setTransferCoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv){ if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTFormat_setTransferCoding(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTFormat_transferCoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTList *list = HTFormat_transferCoding(); Tcl_HashEntry *list_entry = CreateNewListEntry("transferCoding_list", &keyname); Tcl_SetHashValue(list_entry, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTFormat_addTransferCoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char * encoding = argv[1]; char * encoder_key = argv[2]; char * decoder_key = argv[3]; double quality; int success = Tcl_GetDouble(interp, argv[4], &quality); if (encoding && encoder_key && decoder_key && success == TCL_OK ) { Tcl_HashEntry *encoder_entry = Tcl_FindHashEntry (&HTableCoder, encoder_key); Tcl_HashEntry *decoder_entry = Tcl_FindHashEntry (&HTableCoder, decoder_key); if (encoder_entry && decoder_entry) { HTCoder *encoder = (HTCoder *) Tcl_GetHashValue(encoder_entry); HTCoder *decoder = (HTCoder *) Tcl_GetHashValue(decoder_entry); BOOL result = HTFormat_addTransferCoding(encoding, encoder, decoder, quality); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Content Languages */ int HTFormat_setLanguage_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv){ if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTFormat_setLanguage(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTFormat_language_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTList *list = HTFormat_language(); Tcl_HashEntry *list_entry = CreateNewListEntry("language_list", &keyname); Tcl_SetHashValue(list_entry, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Content Charsets */ int HTFormat_setCharset_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv){ if (argc == 2) { char *list_key = argv[1]; if(list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if(list_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTFormat_setCharset(list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTFormat_charset_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTList *list = HTFormat_charset(); Tcl_HashEntry *list_entry = CreateNewListEntry("charset_list", &keyname); Tcl_SetHashValue(list_entry, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Delete All Global Lists */ int HTFormat_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 1) { HTFormat_deleteAll(); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* The Content Type Stream Stack */ int HTStreamStack_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 6) { char * rep_in_string = argv[1]; char * rep_out_string = argv[2]; char * output_stream_key = argv[3]; char * request_key = argv[4]; int guess; int success = Tcl_GetBoolean(interp, argv[5], &guess); if(rep_in_string && rep_out_string && output_stream_key && request_key && (success == TCL_OK) ) { HTFormat rep_in = HTAtom_for(rep_in_string); HTFormat rep_out = HTAtom_for(rep_out_string); Tcl_HashEntry *output_stream_entry = Tcl_FindHashEntry(&HTableStream, output_stream_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if(output_stream_entry && request_entry) { HTStream * output_stream = Tcl_GetHashValue(output_stream_entry); HTRequest * request = Tcl_GetHashValue(request_entry); HTStream * result = HTStreamStack(rep_in, rep_out, output_stream, request, (BOOL) guess); char *keyname; Tcl_HashEntry *entryPtr = CreateNewStreamEntry("StreamStack", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Cost of a Stream Stack */ int HTStackValue_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 6) { char *list_key = argv[1]; char *format_in_string = argv[2]; char *format_out_string = argv[3]; double initial_value; int success1 = Tcl_GetDouble(interp, argv[5], &initial_value); /* problem: how to get long integer from string */ long int length; int tmp_length; int success2 = Tcl_GetInt(interp, argv[6], &tmp_length); if (list_key && format_in_string && format_out_string && (success1 == TCL_OK) && (success2 == TCL_OK)) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); HTFormat format_in = HTAtom_for(format_in_string); HTFormat format_out = HTAtom_for(format_out_string); length = (long int) tmp_length; if (list_entry) { HTList * conversions = Tcl_GetHashValue(list_entry); double result = HTStackValue(conversions, format_in, format_out, initial_value, length); char *storage = malloc(2 * max_keyname * sizeof(char) ); sprintf(storage, "%f", result); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* question, what to do about HTEncoding, I think it is HTAtom */ int HTContentCodingStack_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 6) { char *coding_key = argv[1]; char *stream_key = argv[2]; char *request_key= argv[3]; char *void_key = argv[4]; int encoding; int success = Tcl_GetBoolean(interp, argv[5], &encoding); if (coding_key && stream_key && request_key && void_key && (success == TCL_OK)) { HTEncoding coding = HTAtom_for(coding_key); Tcl_HashEntry *stream_entry = Tcl_FindHashEntry(&HTableStream, stream_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if(stream_entry && request_entry && void_entry) { char *keyname; HTStream *target = Tcl_GetHashValue(stream_entry); HTRequest *request = Tcl_GetHashValue(request_entry); void *param = Tcl_GetHashValue(void_entry); HTStream *result = HTContentCodingStack(coding, target, request, param, encoding); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableStream, "Stream", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTContentEncodingStack_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 5) { char *list_key = argv[1]; char *stream_key = argv[2]; char *request_key= argv[3]; char *void_key = argv[4]; if (list_key && stream_key && request_key && void_key){ Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); Tcl_HashEntry *stream_entry = Tcl_FindHashEntry(&HTableStream, stream_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if(list_entry && stream_entry && request_entry && void_entry) { char *keyname; HTList *encodings = Tcl_GetHashValue(list_entry); HTStream *target = Tcl_GetHashValue(stream_entry); HTRequest *request = Tcl_GetHashValue(request_entry); void *param = Tcl_GetHashValue(void_entry); HTStream *result = HTContentEncodingStack(encodings, target, request, param); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableStream, "Stream", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTContentDecodingStack_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 5) { char *list_key = argv[1]; char *stream_key = argv[2]; char *request_key= argv[3]; char *void_key = argv[4]; if (list_key && stream_key && request_key && void_key){ Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); Tcl_HashEntry *stream_entry = Tcl_FindHashEntry(&HTableStream, stream_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if(list_entry && stream_entry && request_entry && void_entry) { char *keyname; HTList *encodings = Tcl_GetHashValue(list_entry); HTStream *target = Tcl_GetHashValue(stream_entry); HTRequest *request = Tcl_GetHashValue(request_entry); void *param = Tcl_GetHashValue(void_entry); HTStream *result = HTContentDecodingStack(encodings, target, request, param); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableStream, "Stream", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTTransferCodingStack_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 6) { char *coding_key = argv[1]; char *stream_key = argv[2]; char *request_key= argv[3]; char *void_key = argv[4]; int encoding; int success = Tcl_GetBoolean(interp, argv[5], &encoding); if (coding_key && stream_key && request_key && void_key && (success == TCL_OK)) { HTEncoding coding = HTAtom_for(coding_key); Tcl_HashEntry *stream_entry = Tcl_FindHashEntry(&HTableStream, stream_key); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if(stream_entry && request_entry && void_entry) { char *keyname; HTStream *target = Tcl_GetHashValue(stream_entry); HTRequest *request = Tcl_GetHashValue(request_entry); void *param = Tcl_GetHashValue(void_entry); HTStream *result = HTTransferCodingStack(coding, target, request, param, encoding); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableStream, "Stream", &keyname); Tcl_SetHashValue(entryPtr, result); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTFormat_glue.h0100644000076400001440000000452006204173413017535 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" /*HTFormat*/ extern int HTPresentation_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTPresentation_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTConversion_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTConversion_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTCoding_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTCoding_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTCharset_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTCharset_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLanguage_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLanguage_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_setConversion_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_conversion_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_addConversion_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_setContentCoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_contentCoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_addCoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_setTransferCoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_transferCoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_addTransferCoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_setLanguage_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_language_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_setCharset_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_charset_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTFormat_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTStreamStack_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTStackValue_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTContentCodingStack_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTContentEncodingStack_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTContentDecodingStack_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTTransferCodingStack_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTHost_glue.c0100644000076400001440000002366406206151746017236 0ustar danielusers/*started on Aug 2, 1996, xinger*/ #include "HTHost_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args \n\n" /******************** * HTHOST * *******************/ Tcl_HashTable HTableHost; Tcl_HashTable HTableChannel; /*add a host */ int HTHost_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *name = argv[1]; char *keyname; if(name) { Tcl_HashEntry *host_entry; HTHost *host = HTHost_new(name); host_entry = CreateNewEntry(&HTableHost, name, &keyname); Tcl_SetHashValue(host_entry, host); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " name", NULL); return TCL_ERROR; } } /*Remote Host Class and Version */ int HTHost_class_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char * keyname = argv[1]; if ( keyname ) { Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); if(host_entry) { HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); char *result = HTHost_class(host); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, err_string, argv[0], " HTHost", NULL); return TCL_ERROR; } int HTHost_setClass_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *s_class = argv[2]; if (keyname && s_class) { Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); if(host_entry) { HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); HTHost_setClass(host, s_class); Tcl_AppendResult(interp, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, err_string, argv[0], " HTHost", NULL); return TCL_ERROR; } int HTHost_version_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); if(host_entry) { char *final_result=malloc(max_keyname * sizeof(char)); HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); int result = HTHost_version(host); sprintf(final_result, "%d", result); Tcl_AppendResult(interp, final_result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, err_string, argv[0], " HTHost", NULL); return TCL_ERROR; } int HTHost_setVersion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *string_version = argv[2]; if (keyname && string_version) { int conversion_success; Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); int *version = malloc(sizeof(int)); conversion_success = Tcl_GetInt(interp, string_version, version); if(host_entry && (conversion_success == TCL_OK)) { HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); HTHost_setVersion(host, *version); Tcl_AppendResult(interp, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, err_string, argv[0], " HTHost", NULL); return TCL_ERROR; } /* Register a Persistent Channel */ int HTHost_setChannel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *channel_keyname = argv[2]; if (keyname && channel_keyname) { Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); Tcl_HashEntry *channel_entry = Tcl_FindHashEntry(&HTableChannel, channel_keyname); if(host_entry && channel_entry) { HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); HTChannel *channel = (HTChannel *) Tcl_GetHashValue(channel_entry); BOOL result = HTHost_setChannel(host, channel, HT_TP_SINGLE); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, err_string, argv[0], " HTHost", NULL); return TCL_ERROR; } int HTHost_clearChannel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); if(host_entry) { HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); BOOL result = HTHost_clearChannel(host, HT_OK); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, err_string, argv[0], " HTHost", NULL); return TCL_ERROR; } int HTHost_channel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *channel_entry; Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); if(host_entry) { char *channel_key = malloc(max_keyname * sizeof(char)); int newPtr; HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); HTChannel *channel = HTHost_channel(host); channel_entry = Tcl_CreateHashEntry(&HTableChannel, channel_key, &newPtr); Tcl_SetHashValue(channel_entry, channel); Tcl_AppendResult(interp, channel_key, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, err_string, argv[0], " HTHost", NULL); return TCL_ERROR; } /*Is this host Persistent?*/ int HTHost_isPersistent_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); if(host_entry) { HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); BOOL result = HTHost_isPersistent(host); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, err_string, argv[0], " HTHost", NULL); return TCL_ERROR; } /* Timing Persistent Channels */ int HTHost_persistTimeout_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *time_string = argv[1]; if(time_string) { time_t timeout; int conversion_success; int *time_storage = malloc(sizeof(int)); conversion_success = Tcl_GetInt(interp, time_string, time_storage); if(conversion_success == TCL_OK) { time_t time_output; char *result; timeout = (time_t) *time_storage; time_output = HTHost_persistTimeout(timeout); result = malloc(sizeof(time_output)); sprintf(result, "%d", (int) time_output); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTHost_setPersistTimeout_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *time_string = argv[1]; if(time_string) { time_t timeout; int conversion_success; int *time_storage = malloc(sizeof(int)); conversion_success = Tcl_GetInt(interp, time_string, time_storage); if(conversion_success == TCL_OK) { timeout = (time_t) *time_storage; HTHost_setPersistTimeout(timeout); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTHost_setPersistExpires_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *time_string = argv[2]; if(keyname && time_string) { time_t expires; int conversion_success; int *time_storage = malloc(sizeof(int)); Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); conversion_success = Tcl_GetInt(interp, time_string, time_storage); if(host_entry && conversion_success == TCL_OK) { HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); expires = (time_t) *time_storage; HTHost_setPersistExpires(host, expires); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTHost_persistExpires_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if(keyname) { Tcl_HashEntry *host_entry = Tcl_FindHashEntry(&HTableHost, keyname); if(host_entry) { time_t result_time; char *result; HTHost *host = (HTHost *) Tcl_GetHashValue(host_entry); result_time = HTHost_persistExpires(host); result = malloc(sizeof(result_time)); sprintf(result, "%d", (int) result_time); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /* Catching a Close Event */ /*need to understand what socket , sockops means */ /* extern int HTHost_catchClose (SOCKET soc, HTRequest * request, SockOps ops); int HTHost_catchClose_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc = 4){ SOCKET soc */ libwww/Library/Test/src/HTHost_glue.h0100644000076400001440000000310106201705302017207 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTHost_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) ; extern int HTHost_class_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_setClass_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_version_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_setVersion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_setChannel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_clearChannel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_channel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_isPersistent_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_persistTimeout_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_setPersistTimeout_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_setPersistExpires_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); extern int HTHost_persistExpires_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv); /*one more function unfinished */ /*extern int HTHost_catchClose()*/ libwww/Library/Test/src/HTInet_glue.c0100644000076400001440000000775006207130136017205 0ustar danielusers#include "HTInet_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /************************** * HTInet * *************************/ Tcl_HashTable HTableNet; int HTErrnoString_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { int errnum; if (Tcl_GetInt(interp, argv[1], &errnum) == TCL_OK) { const char * result = HTErrnoString(errnum); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTInetStatus_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { int errnum; char *where = argv[2]; if (where && (Tcl_GetInt(interp, argv[1], &errnum) == TCL_OK) ) { int result = HTInetStatus(errnum, where); char *storage = malloc(sizeof(char) * max_keyname); if(!storage) { return TCL_ERROR; } sprintf(storage, "%d", result); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /*extern unsigned int HTCardinal (int * pstatus, char ** pp, unsigned int max_value); extern const char * HTInetString (struct sockaddr_in * sin); */ int HTParseInet_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; char *host = argv[2]; if ( net_key && host) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); int result = HTParseInet(net, host); char *storage = malloc(sizeof(char) *max_keyname); if (!storage) { return TCL_ERROR;} sprintf(storage, "%d", result); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTGetTimeZoneOffset_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { time_t time = HTGetTimeZoneOffset(); char *storage = malloc(sizeof(char) *max_keyname); if (!storage) { return TCL_ERROR;} sprintf(storage, "%d", (int) time); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTGetHostName_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { char *result = HTGetHostName(); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTGetMailAddress_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc ==1) { char *result = HTGetMailAddress(); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTGetNewsServer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { char *result = HTGetNewsServer(); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTGetTmpFileName_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { const char *dir = argv[1]; if (dir) { char *result = HTGetTmpFileName(dir); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } libwww/Library/Test/src/HTInet_glue.h0100644000076400001440000000116306207130136017202 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTErrnoString_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTInetStatus_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTParseInet_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetTimeZoneOffset_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetHostName_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetMailAddress_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetNewsServer_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTGetTmpFileName_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTLink_glue.c0100644000076400001440000003023006206410705017172 0ustar danielusers#include "HTLink_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " Tcl_HashTable HTableLink; Tcl_HashTable HTableAnchor; /***************************** * HTLink * *****************************/ /* NEW */ int HTLink_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; Tcl_HashEntry *link_entry; HTLink *link = HTLink_new(); link_entry = CreateNewLinkEntry("Link", &keyname); Tcl_SetHashValue(link_entry, link); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /* DELETE */ int HTLink_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *link_keyname = argv[1]; if (link_keyname) { Tcl_HashEntry *link_entry = Tcl_FindHashEntry(&HTableLink, link_keyname); if (link_entry) { HTLink *link = Tcl_GetHashValue(link_entry); BOOL result = HTLink_delete(link); Tcl_DeleteHashEntry(link_entry); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " link", NULL); return TCL_ERROR; } } /* REMOVEALL */ int HTLink_removeAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, keyname); if (anchor_entry) { HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); BOOL result = HTLink_removeAll(anchor); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " source_anchor", NULL); return TCL_ERROR; } } /* ADD */ int HTLink_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *linktype = argv[3]; char *methodname = argv[4]; if (linktype && methodname && argv[1] && argv[2]) { Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableAnchor, argv[1]); Tcl_HashEntry *dest_entry = Tcl_FindHashEntry(&HTableAnchor, argv[2]); HTLinkType link = HTAtom_for(linktype); HTMethod method = HTMethod_enum(methodname); if (source_entry && dest_entry) { HTAnchor *s_anchor = Tcl_GetHashValue(source_entry); HTAnchor *d_anchor = Tcl_GetHashValue(dest_entry); BOOL result = HTLink_add(s_anchor, d_anchor, link, method); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " source_anchor dest_anchor type method", NULL); return TCL_ERROR; } } /* REMOVE */ int HTLink_remove_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *src_anchor = argv[1]; char *dest_anchor = argv[2]; if (src_anchor && dest_anchor) { Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableAnchor, src_anchor); Tcl_HashEntry *dest_entry = Tcl_FindHashEntry(&HTableAnchor, dest_anchor); if (source_entry && dest_entry) { HTAnchor *s_anchor = Tcl_GetHashValue(source_entry); HTAnchor *d_anchor = Tcl_GetHashValue(dest_entry); HTLink *link = HTLink_find(s_anchor, d_anchor); BOOL result = HTLink_remove(s_anchor, d_anchor); Tcl_HashEntry *link_entry = Tcl_FindHashEntry(&HTableLink, Keyname_lookupLinks(link)); Tcl_DeleteHashEntry(link_entry); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " source_anchor dest_anchor", NULL); return TCL_ERROR; } } /* FIND */ int HTLink_find_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *src_anchor = argv[1]; char *dest_anchor = argv[2]; if (src_anchor && dest_anchor) { char *keyname = NULL; Tcl_HashEntry *entryPtr; Tcl_HashEntry *srcPtr = Tcl_FindHashEntry(&HTableAnchor, src_anchor); Tcl_HashEntry *destPtr = Tcl_FindHashEntry(&HTableAnchor, dest_anchor); if (srcPtr && destPtr) { HTAnchor *s_anchor = Tcl_GetHashValue(srcPtr); HTAnchor *p_anchor = Tcl_GetHashValue(destPtr); HTLink *result = HTLink_find(s_anchor, p_anchor); if (result) { keyname = Keyname_lookupLinks(result); if (!keyname) { entryPtr = CreateNewLinkEntry("HTLink", &keyname); Tcl_SetHashValue(entryPtr, result); } } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " source_anchor dest_anchor", NULL); return TCL_ERROR; } } /* DESTINATION */ int HTLink_setDestination_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *link_name = argv[1]; char *anchor_name = argv[2]; if (link_name && anchor_name) { Tcl_HashEntry *anchorPtr = Tcl_FindHashEntry(&HTableAnchor, anchor_name); Tcl_HashEntry *linkPtr = Tcl_FindHashEntry(&HTableLink, link_name); if (anchorPtr && linkPtr) { HTLink *link = Tcl_GetHashValue(linkPtr); HTAnchor *anchor = Tcl_GetHashValue(anchorPtr); BOOL result = HTLink_setDestination(link, anchor); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " link destination", NULL); return TCL_ERROR; } } int HTLink_destination_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *link_name = argv[1]; if (link_name) { Tcl_HashEntry *entryPtr; Tcl_HashEntry *linkPtr = Tcl_FindHashEntry(&HTableLink, link_name); if (linkPtr) { HTLink *link = Tcl_GetHashValue(linkPtr); HTAnchor *result = HTLink_destination(link); /* Standard method to find if a keyname already exists for the destination, otherwise it will create it. */ char *keyname = Keyname_lookupAnchor(result); if (!keyname) { entryPtr = CreateNewAnchorEntry("Anchor", &keyname); Tcl_SetHashValue(entryPtr, result); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " link", NULL); return TCL_ERROR; } } /* TYPE */ int HTLink_setType_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *type_name = argv[2]; if (keyname && type_name) { HTLinkType type = HTAtom_for(type_name); Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableLink, keyname); if (entryPtr) { HTLink *link = Tcl_GetHashValue(entryPtr); BOOL result = HTLink_setType(link, type); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " link type", NULL); return TCL_ERROR; } } int HTLink_type_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableLink, keyname); if (entryPtr) { HTLink *link = Tcl_GetHashValue(entryPtr); HTLinkType link_type = HTLink_type(link); Tcl_AppendResult(interp, HTAtom_name(link_type), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " link", NULL); return TCL_ERROR; } } /* METHOD */ int HTLink_setMethod_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *method_name = argv[2]; if (keyname && method_name) { HTMethod method = HTMethod_enum(method_name); Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableLink, keyname); if (entryPtr) { HTLink *link = Tcl_GetHashValue(entryPtr); BOOL result = HTLink_setMethod(link, method); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " link method", NULL); return TCL_ERROR; } } int HTLink_method_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableLink, keyname); if (entryPtr) { HTLink *link = Tcl_GetHashValue(entryPtr); HTMethod method = HTLink_method(link); Tcl_AppendResult(interp, HTMethod_name(method), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " link", NULL); return TCL_ERROR; } } /* RESULT */ int HTLink_setResult_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *linkresult = argv[2]; if (keyname && linkresult) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableLink, keyname); HTLink *link = Tcl_GetHashValue(entryPtr); HTLinkResult l_result = HTLinkResult_enum(linkresult); BOOL result = HTLink_setResult(link, l_result); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " link link_result", NULL); return TCL_ERROR; } } int HTLink_result_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableLink, keyname); if (entryPtr) { HTLink *link = Tcl_GetHashValue(entryPtr); HTLinkResult linkresult = HTLink_result(link); char *result = HTLinkResult_name(linkresult); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "link", NULL); return TCL_ERROR; } } #if 0 /* MOVEALL */ int HTLink_moveall_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *src_anchor = argv[1]; char *dest_anchor = argv[2]; if (src_anchor && dest_anchor) { Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableAnchor, src_anchor); Tcl_HashEntry *dest_entry = Tcl_FindHashEntry(&HTableAnchor, dest_anchor); if (source_entry && dest_entry) { HTAnchor *s_anchor = Tcl_GetHashValue(source_entry); HTAnchor *d_anchor = Tcl_GetHashValue(dest_entry); BOOL result = HTLink_moveall(s_anchor, d_anchor); BOOL result = TRUE; Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " source_anchor dest_anchor", NULL); return TCL_ERROR; } } #endif libwww/Library/Test/src/HTLink_glue.h0100644000076400001440000000215406201426601017200 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTLink_new_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_removeAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_remove_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_find_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_destination_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_setDestination_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_setType_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_type_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_setMethod_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_method_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_setResult_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLink_result_tcl(ClientData, Tcl_Interp *, int, char **); /*extern int HTLink_moveAll_tcl(ClientData, Tcl_Interp *, int, char **); */ libwww/Library/Test/src/HTList_glue.c0100644000076400001440000000236706201705304017217 0ustar danielusers#include "HTList_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " Tcl_HashTable HTableList; int HTList_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; HTList *list = HTList_new(); Tcl_HashEntry *entryPtr = CreateNewListEntry("List", &keyname); Tcl_SetHashValue(entryPtr, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } int HTList_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&HTableList, keyname); if (entryPtr) { HTList *list = Tcl_GetHashValue(entryPtr); BOOL result = HTList_delete(list); Tcl_DeleteHashEntry(entryPtr); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " list", NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTList_glue.h0100644000076400001440000000024306201426603017215 0ustar danielusers#include "Libdata.h" int HTList_new_tcl(ClientData , Tcl_Interp *, int, char **); int HTList_delete_tcl(ClientData , Tcl_Interp *, int, char **); libwww/Library/Test/src/HTLog_glue.c0100644000076400001440000000451006206151747017030 0ustar danielusers#include "HTLog_glue.h" #include "WWWApp.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be" /***************** * HTLog * *****************/ Tcl_HashTable HTableReq; int HTLog_open_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { const char * filename = argv[1]; int local; int append; int success1 = Tcl_GetBoolean(interp, argv[2], &local); int success2 = Tcl_GetBoolean(interp, argv[3], &append); if (filename && (success1 == TCL_OK) && (success2 == TCL_OK) ) { BOOL result = HTLog_open(filename, (BOOL) local, (BOOL) append); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLog_close_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 1) { BOOL result = HTLog_close(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLog_isOpen_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 1) { BOOL result = HTLog_isOpen(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTLog_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 3) { char * request_key = argv[1]; int status; int success = Tcl_GetInt(interp, argv[2], &status); if(request_key && (success == TCL_OK) ) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTLog_add(request, status); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTLog_glue.h0100644000076400001440000000050206205134377017031 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTLog_open_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLog_close_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLog_isOpen_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTLog_add_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTNet_glue.c0100644000076400001440000007326006207130137017034 0ustar danielusers#include "HTNet_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /*HTNet*/ Tcl_HashTable HTableNet; Tcl_HashTable HTableReq; Tcl_HashTable HTableList; Tcl_HashTable HTableHost; Tcl_HashTable HTableStream; Tcl_HashTable HTableChannel; Tcl_HashTable HTableDNS; Tcl_HashTable HTableTrans; Tcl_HashTable HTableVoid; /*Functions not done yet extern BOOL HTNetCall_add (HTList * list, HTNetCallback *cbf, void * param, int status); extern BOOL HTNetCall_delete (HTList * list, HTNetCallback *cbf); */ int HTNetCall_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char * list_key = argv[1]; if (list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if (list_entry) { HTList *list = Tcl_GetHashValue(list_entry); BOOL result = HTNetCall_deleteAll(list); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNetCall_execute_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 4) { char *list_key = argv[1]; char *request_key = argv[2]; int status; if ( list_key && request_key && ( Tcl_GetInt(interp, argv[3], &status) == TCL_OK) ) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); Tcl_HashEntry *request_entry =Tcl_FindHashEntry(&HTableReq, request_key); if ( list_entry && request_entry) { HTList *list = Tcl_GetHashValue(list_entry); HTRequest *request = Tcl_GetHashValue(request_entry); int result = HTNetCall_execute(list, request, status); char *storage = malloc(sizeof(char) * max_keyname); if ( !storage) {return TCL_ERROR;} sprintf(storage, "%d", result); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /* extern BOOL HTNetCall_addBefore (HTNetCallback *cbf, void * param, int status); extern BOOL HTNetCall_deleteBefore (HTNetCallback * cbf); */ int HTNet_setBefore_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char * list_key = argv[1]; if ( list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if ( list_entry) { HTList *list = Tcl_GetHashValue(list_entry) ; BOOL result = HTNet_setBefore(list); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_before_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { char * keyname; HTList *list= HTNet_before(); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableList, "List", &keyname); Tcl_SetHashValue(entryPtr, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_callBefore_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *request_key = argv[1]; int status; if (request_key && (Tcl_GetInt(interp, argv[2], &status) == TCL_OK) ) { Tcl_HashEntry *request_entry =Tcl_FindHashEntry(&HTableReq, request_key); if ( request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); int result = HTNet_callBefore(request, status); char *storage = malloc(sizeof(char) * max_keyname); if(!storage) { return TCL_ERROR; } sprintf(storage, "%d", result); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /* extern BOOL HTNetCall_addAfter (HTNetCallback *cbf, void * param, int status); extern BOOL HTNetCall_deleteAfter (HTNetCallback * cbf); */ int HTNet_setAfter_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char * list_key = argv[1]; if ( list_key) { Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_key); if ( list_entry) { HTList *list = Tcl_GetHashValue(list_entry) ; BOOL result = HTNet_setAfter(list); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_ERROR; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_after_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { char * keyname; HTList *list= HTNet_after(); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableList, "List", &keyname); Tcl_SetHashValue(entryPtr, list); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_callAfter_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *request_key = argv[1]; int status; if (request_key && (Tcl_GetInt(interp, argv[2], &status) == TCL_OK) ) { Tcl_HashEntry *request_entry =Tcl_FindHashEntry(&HTableReq, request_key); if ( request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); int result = HTNet_callAfter(request, status); char *storage = malloc(sizeof(char) * max_keyname); if(!storage) { return TCL_ERROR; } sprintf(storage, "%d", result); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setMaxSocket_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { int newmax; if (Tcl_GetInt(interp, argv[1], &newmax) == TCL_OK) { BOOL result = HTNet_setMaxSocket(newmax); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_maxSocket_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { int result = HTNet_maxSocket(); char *result_string = malloc(sizeof(char) *max_keyname); if(!result_string) return TCL_ERROR; sprintf(result_string, "%d", result); Tcl_AppendResult(interp, result_string, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_increaseSocket_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { HTNet_increaseSocket(); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_decreaseSocket_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { HTNet_decreaseSocket(); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_availableSockets_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { int result = HTNet_availableSockets(); char *result_string = malloc(sizeof(char) *max_keyname); if(!result_string) return TCL_ERROR; sprintf(result_string, "%d", result); Tcl_AppendResult(interp, result_string, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_increasePersistentSocket_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { HTNet_increasePersistentSocket(); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_decreasePersistentSocket_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { HTNet_decreasePersistentSocket(); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_availablePersistentSockets_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { int result = HTNet_availablePersistentSockets(); char *result_string = malloc(sizeof(char) *max_keyname); if(!result_string) return TCL_ERROR; sprintf(result_string, "%d", result); Tcl_AppendResult(interp, result_string, NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_isIdle_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTNet_isIdle(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_activeQueue_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==1) { /* char * keyname; HTList *list = HTNet_activeQueue(); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableList, "List", &keyname); Tcl_SetHashValue(entryPtr, list); Tcl_AppendResult(interp, keyname, NULL); */ return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_idle_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { /* BOOL result = HTNet_idle(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); */ return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_isEmpty_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTNet_isEmpty(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_pendingQueue_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==1) { /* HTNet_pendingQueue is not defined in the library ******************************* char * keyname; HTList *list = HTNet_pendingQueue(); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableList, "List", &keyname); Tcl_SetHashValue(entryPtr, list); Tcl_AppendResult(interp, keyname, NULL); */ return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_newClient_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc==2) { char *request_key = argv[1]; if ( request_key){ Tcl_HashEntry *request_entry=Tcl_FindHashEntry(&HTableReq, request_key); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTNet_newClient(request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_newServer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if( argc == 4) { char *request_key = argv[1]; char *net_key = argv[2]; char *access = argv[3]; if ( request_key && net_key && access) { Tcl_HashEntry *request_entry=Tcl_FindHashEntry(&HTableReq, request_key); Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( request_entry && net_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTNet_newServer(request, net, access); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int sockfd; char *request_key = argv[2]; if((Tcl_GetInt(interp, argv[1], &sockfd)==TCL_OK) && request_key) { Tcl_HashEntry *request_entry=Tcl_FindHashEntry(&HTableReq, request_key); if ( request_entry) { char *keyname; HTRequest *request = Tcl_GetHashValue(request_entry); HTNet *net = HTNet_new((SOCKET) sockfd, request); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableNet, "Net", &keyname); Tcl_SetHashValue(entryPtr, net); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_dup_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *src_key = argv[1]; if (src_key) { Tcl_HashEntry *src_entry = Tcl_FindHashEntry(&HTableNet, src_key); if ( src_entry) { char *keyname; HTNet *src = Tcl_GetHashValue(src_entry); HTNet *net = HTNet_dup(src); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableNet, "Net", &keyname); Tcl_SetHashValue(entryPtr, net); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_start_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTNet_start(net); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; int status; if (net_key && (Tcl_GetInt(interp, argv[2], &status) ==TCL_OK )) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *me = Tcl_GetHashValue(net_entry); BOOL result = HTNet_delete(me, status); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { BOOL result = HTNet_deleteAll(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_wait_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { /* HTNet_wait not defined HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTNet_wait(net); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); */ return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_priority_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); HTPriority priority = HTNet_priority(net); char *name = HTPriority_name(priority); Tcl_AppendResult(interp, name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setPriority_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; char *priority_name = argv[2]; if (net_key && priority_name) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); HTPriority priority = HTPriority_enum(priority_name); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTNet_setPriority(net, priority); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_persistent_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTNet_persistent(net); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setPersistent_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 4) { char *net_key = argv[1]; int persistent; int mode; if (net_key && (Tcl_GetBoolean(interp, argv[2], &persistent)==TCL_OK) && (Tcl_GetInt(interp, argv[3], &mode) == TCL_OK)) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTNet_setPersistent(net, (BOOL) persistent, (HTTransportMode) mode); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_kill_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTNet_kill(net); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_killAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 1) { BOOL result = HTNet_killAll(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } /*functions not done: extern HTInputStream * HTNet_getInput (HTNet * net, HTStream * target, void * param, int mode); extern HTOutputStream * HTNet_getOutput (HTNet * net, void * param, int mode); */ int HTNet_setContext_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; char *void_key =argv[2]; if (net_key && void_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if ( net_entry && void_entry) { HTNet *net = Tcl_GetHashValue(net_entry); void *context = Tcl_GetHashValue(void_entry); BOOL result = HTNet_setContext(net, context); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_context_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { char *keyname; HTNet *net = Tcl_GetHashValue(net_entry); void *context = HTNet_context(net); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableVoid, "context", &keyname); Tcl_SetHashValue(entryPtr, context); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setSocket_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; int sockfd; if (net_key && (Tcl_GetInt(interp, argv[2], &sockfd) == TCL_OK)) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTNet_setSocket(net, (SOCKET) sockfd); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_socket_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); SOCKET sock = HTNet_socket(net); char *storage = malloc(sizeof(char) * max_keyname); if (!storage) return TCL_ERROR; sprintf(storage, "%d", (int) sock); Tcl_AppendResult(interp, storage, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setRequest_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; char *request_key = argv[2]; if (net_key && request_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); Tcl_HashEntry *request_entry =Tcl_FindHashEntry(&HTableReq, request_key); if ( net_entry && request_entry) { HTNet *net = Tcl_GetHashValue(net_entry); HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTNet_setRequest(net, request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_request_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { char *keyname; HTNet *net = Tcl_GetHashValue(net_entry); HTRequest *request = HTNet_request(net); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableReq, "Request", &keyname); Tcl_SetHashValue(entryPtr, request); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setTransport_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; char *transport_key = argv[2]; if (net_key && transport_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); Tcl_HashEntry *transport_entry =Tcl_FindHashEntry(&HTableTrans, transport_key); if ( net_entry && transport_entry) { HTNet *net = Tcl_GetHashValue(net_entry); HTTransport *tp = Tcl_GetHashValue(transport_entry); BOOL result = HTNet_setTransport(net, tp); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_transport_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { char *keyname; HTNet *net = Tcl_GetHashValue(net_entry); HTTransport *transport = HTNet_transport(net); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableTrans, "Transport", &keyname); Tcl_SetHashValue(entryPtr, transport); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setChannel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; char *channel_key = argv[2]; if (net_key && channel_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); Tcl_HashEntry *channel_entry =Tcl_FindHashEntry(&HTableChannel, channel_key); if ( net_entry && channel_entry) { HTNet *net = Tcl_GetHashValue(net_entry); HTChannel *channel = Tcl_GetHashValue(channel_entry); BOOL result = HTNet_setChannel(net, channel); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_channel_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { char *keyname; HTNet *net = Tcl_GetHashValue(net_entry); HTChannel *channel = HTNet_channel(net); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableChannel, "Channel", &keyname); Tcl_SetHashValue(entryPtr, channel); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setHost_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; char *host_key = argv[2]; if (net_key && host_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); Tcl_HashEntry *host_entry =Tcl_FindHashEntry(&HTableHost, host_key); if ( net_entry && host_entry) { HTNet *net = Tcl_GetHashValue(net_entry); HTHost *host = Tcl_GetHashValue(host_entry); BOOL result = HTNet_setHost(net, host); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_host_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { char *keyname; HTNet *net = Tcl_GetHashValue(net_entry); HTHost *host = HTNet_host(net); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableHost, "Host", &keyname); Tcl_SetHashValue(entryPtr, host); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_setDns_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *net_key = argv[1]; char *dns_key = argv[2]; if (net_key && dns_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); Tcl_HashEntry *dns_entry =Tcl_FindHashEntry(&HTableDNS, dns_key); if ( net_entry && dns_entry) { HTNet *net = Tcl_GetHashValue(net_entry); HTdns *dns = Tcl_GetHashValue(dns_entry); BOOL result = HTNet_setDns(net, dns); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_dns_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { char *keyname; HTNet *net = Tcl_GetHashValue(net_entry); HTdns *dns = HTNet_dns(net); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableDNS, "Dns", &keyname); Tcl_SetHashValue(entryPtr, dns); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTNet_home_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 2) { char *net_key = argv[1]; if (net_key) { Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_key); if ( net_entry) { HTNet *net = Tcl_GetHashValue(net_entry); int result = HTNet_home(net); char *result_string = malloc(sizeof(char) *max_keyname); if (!result_string) return TCL_ERROR; sprintf(result_string, "%d", result); Tcl_AppendResult(interp, result_string, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } libwww/Library/Test/src/HTNet_glue.h0100644000076400001440000000717606207130141017037 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTNetCall_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNetCall_execute_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setBefore_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_before_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_callBefore_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setAfter_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_after_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_callAfter_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setMaxSocket_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_maxSocket_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_increaseSocket_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_decreaseSocket_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_availableSockets_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_increasePersistentSocket_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_decreasePersistentSocket_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_availablePersistentSockets_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_isIdle_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_activeQueue_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_idle_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_isEmpty_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_pendingQueue_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_newClient_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_newServer_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_new_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_dup_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_start_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_wait_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_priority_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setPriority_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_persistent_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setPersistent_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_kill_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_killAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setContext_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_context_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setSocket_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_socket_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setRequest_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_request_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setTransport_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_transport_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setChannel_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_channel_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setHost_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_host_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_setDns_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_dns_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTNet_home_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTParse_glue.c0100644000076400001440000000453606206410706017362 0ustar danielusers#include "HTParse_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /* HTParse */ int HTParse_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc > 2 && argc < 5) { char *aName = argv[1]; char *relatedName = argv[2]; if (aName && relatedName) { char *result; int bitflag = -1; /* Don't know how to check otherwise, so dummy statement at end */ if ((argc == 4) && (Tcl_GetInt(interp, argv[3], &bitflag) == TCL_OK)) { } result = HTParse(aName, relatedName, bitflag); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " a_address absolute_address bit-flags", NULL); return TCL_ERROR; } } int HTSimplify_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *str = argv[1]; if (str) { char *result = HTSimplify(&str); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "string", NULL); return TCL_ERROR; } } int HTRelative_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *aname = argv[1]; char *bname = argv[2]; if (aname && bname) { char *result = HTRelative(aname, bname); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " absolute_address absolute_address", NULL); return TCL_ERROR; } } int HTCleanTelnetString_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *str = argv[1]; if (str) { BOOL result = HTCleanTelnetString(str); Tcl_AppendResult(interp, result ? "YES" : "NO", str, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " string", NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTParse_glue.h0100644000076400001440000000045306201426606017362 0ustar danielusers#include "Libdata.h" extern int HTParse_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTSimplify_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRelative_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTCleanTelnetString_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTProt_glue.c0100644000076400001440000001557506206367117017250 0ustar danielusers#include "HTProt_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "Wrong # of args. \n\n" /*************************** * HTProt * **************************/ Tcl_HashTable HTableReq; Tcl_HashTable HTableProt; Tcl_HashTable HTableCallback; /*add an protocol*/ int HTProtocol_add_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 6) { const char *name = argv[1]; const char *transport = argv[2]; int preemptive; int conversion_success = Tcl_GetBoolean(interp, argv[3], &preemptive); char *client_keyname = argv[4]; char *server_keyname = argv[5]; if( name && transport && (conversion_success == TCL_OK) && client_keyname && server_keyname) { Tcl_HashEntry *client_entry = Tcl_FindHashEntry(&HTableCallback, client_keyname); Tcl_HashEntry *server_entry = Tcl_FindHashEntry(&HTableCallback, server_keyname); if(client_entry && server_entry){ HTEventCallback *client = (HTEventCallback *) Tcl_GetHashValue(client_entry); HTEventCallback *server = (HTEventCallback *) Tcl_GetHashValue(server_entry); BOOL result = HTProtocol_add(name, transport, (BOOL) preemptive, client, server); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*delete a protocol*/ int HTProtocol_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc ==2) { char *name = argv[1]; if(name) { BOOL result = HTProtocol_delete(name); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*remove all registered protocols*/ int HTProtocol_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc==1) { BOOL result = HTProtocol_deleteAll(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*find a protocol object*/ int HTProtocol_find_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *request_key = argv[1]; const char *access = argv[2]; if (request_key && access) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_key); if(request_entry) { char *keyname; HTRequest *request = Tcl_GetHashValue(request_entry); HTProtocol *protocol = HTProtocol_find(request, access); Tcl_HashEntry *protocol_entry = CreateNewEntry(&HTableProt,"Protocol", &keyname); Tcl_SetHashValue(protocol_entry, protocol); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*get callback functions */ int HTProtocol_client_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *protocol_key = argv[1]; if (protocol_key) { Tcl_HashEntry *protocol_entry = Tcl_FindHashEntry(&HTableProt, protocol_key); if (protocol_entry) { char *client_key; HTProtocol *protocol = Tcl_GetHashValue(protocol_entry); HTEventCallback *client = HTProtocol_client(protocol); Tcl_HashEntry *client_entry = CreateNewEntry(&HTableCallback, "client", &client_key); Tcl_SetHashValue (client_entry, client); Tcl_AppendResult(interp, client_key, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTProtocol_server_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *protocol_key = argv[1]; if (protocol_key) { Tcl_HashEntry *protocol_entry = Tcl_FindHashEntry(&HTableProt, protocol_key); if (protocol_entry) { char *server_key; HTProtocol *protocol = Tcl_GetHashValue(protocol_entry); HTEventCallback *server = HTProtocol_server(protocol); Tcl_HashEntry *server_entry = CreateNewEntry(&HTableCallback, "server", &server_key); Tcl_SetHashValue (server_entry, server); Tcl_AppendResult(interp, server_key, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /* Is Access Scheme Preemptive */ int HTProtocol_preemptive_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *protocol_key = argv[1]; if (protocol_key) { Tcl_HashEntry *protocol_entry = Tcl_FindHashEntry(&HTableProt, protocol_key); if(protocol_entry) { HTProtocol *protocol = Tcl_GetHashValue(protocol_entry); BOOL result = HTProtocol_preemptive(protocol); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } /*Binding to the Transport Class */ int HTProtocol_setTransport_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *protocol_key = argv[1]; const char *transport = argv[2]; if (protocol_key && transport) { Tcl_HashEntry *protocol_entry = Tcl_FindHashEntry(&HTableProt, protocol_key); if(protocol_entry) { HTProtocol *protocol = Tcl_GetHashValue(protocol_entry); BOOL result = HTProtocol_setTransport(protocol, transport); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } int HTProtocol_transport_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *protocol_key = argv[1]; if(protocol_key) { Tcl_HashEntry *protocol_entry = Tcl_FindHashEntry(&HTableProt, protocol_key); if(protocol_entry) { HTProtocol *protocol = Tcl_GetHashValue(protocol_entry); const char * result = HTProtocol_transport(protocol); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } } libwww/Library/Test/src/HTProt_glue.h0100644000076400001440000000134106204165073017232 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTProtocol_add_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTProtocol_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTProtocol_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTProtocol_find_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTProtocol_client_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTProtocol_server_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTProtocol_preemptive_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTProtocol_setTransport_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTProtocol_transport_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTReq_glue.c0100644000076400001440000024700706206410707017042 0ustar danielusers#include "HTReq_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " Tcl_HashTable HTableReq; Tcl_HashTable HTableAnchor; Tcl_HashTable HTableLink; Tcl_HashTable HTableList; Tcl_HashTable HTableStream; Tcl_HashTable HTableAssoc; Tcl_HashTable HTableVoid; Tcl_HashTable HTableUser; Tcl_HashTable HTableMIMEParseSet; Tcl_HashTable HTableCallback; Tcl_HashTable HTableNet; /***************************** * HTRequest * *****************************/ /* HTLOAD */ int HTLoad_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *bool_str = argv[2]; int recursive; if (keyname && (Tcl_GetBoolean(interp, bool_str, &recursive) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTLoad(request, recursive); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request boolean", NULL); return TCL_ERROR; } } /* KILL */ int HTRequest_kill_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_kill(request); Tcl_DeleteHashEntry(request_entry); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* NEW */ int HTRequest_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { char *keyname; Tcl_HashEntry *request_entry; HTRequest *request = HTRequest_new(); request_entry = CreateNewRequestEntry("Request", &keyname); Tcl_SetHashValue(request_entry, request); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /* CLEAR */ int HTRequest_clear_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_clear(request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* DUP */ int HTRequest_dup_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); if (request_entry) { Tcl_HashEntry *request_entry2; HTRequest *original = Tcl_GetHashValue(request_entry); HTRequest *request = HTRequest_dup(original); request_entry2 = CreateNewRequestEntry("Request", &keyname); Tcl_SetHashValue(request_entry2, request); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " source_request", NULL); return TCL_ERROR; } } /* DUPINTERNAL */ int HTRequest_dupInternal_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); if (request_entry) { Tcl_HashEntry *request_entry2; HTRequest *original = Tcl_GetHashValue(request_entry); HTRequest *request = HTRequest_dupInternal(original); request_entry2 = CreateNewRequestEntry("Request", &keyname); Tcl_SetHashValue(request_entry2, request); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " source_request", NULL); return TCL_ERROR; } } /* DELETE */ int HTRequest_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_delete(request); Tcl_DeleteHashEntry(request_entry); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* USERPROFILE */ int HTRequest_setUserProfile_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *user_name = argv[2]; if (req_keyname && user_name) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, user_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry && user_entry) { HTUserProfile *user = Tcl_GetHashValue(user_entry); HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setUserProfile(request, user); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request userprofile", NULL); return TCL_ERROR; } } int HTRequest_userProfile_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq,req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTUserProfile *user = HTRequest_userProfile(request); char *user_name = Keyname_lookupUser(user); if (!user_name) { Tcl_HashEntry *user_entry = CreateNewUserEntry("User", &user_name); Tcl_SetHashValue(user_entry, user); } Tcl_AppendResult(interp, user_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* METHOD */ int HTRequest_setMethod_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *method_name = argv[2]; if (req_keyname && method_name) { HTMethod method = HTMethod_enum(method_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setMethod(request, method); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request method", NULL); return TCL_ERROR; } } int HTRequest_method_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *method_name; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq,req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTMethod method = HTRequest_method(request); sprintf(method_name, "%x", method); Tcl_AppendResult(interp, method_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* RELOADMODE */ int HTRequest_setReloadMode_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTReload reload = HTReload_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setReloadMode(request, reload); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTReload_mode", NULL); return TCL_ERROR; } } int HTRequest_reloadMode_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; char *mode_name; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTReload reload = HTRequest_reloadMode(request); sprintf(mode_name, "%x", reload); Tcl_AppendResult(interp, mode_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* REDIRECTION */ int HTRequest_setRedirection_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *anchor_keyname = argv[2]; if (req_keyname && anchor_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_keyname); if (request_entry && anchor_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); BOOL result = HTRequest_setRedirection(request, anchor); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request anchor", NULL); return TCL_ERROR; } } int HTRequest_redirection_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *anchor_entry; if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTAnchor *anchor = HTRequest_redirection(request); char *keyname = Keyname_lookupAnchor(anchor); if (!keyname) { anchor_entry = CreateNewAnchorEntry("Anchor", &keyname); Tcl_SetHashValue(anchor_entry, anchor); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /******************************** * Access Authentication * ********************************/ /* CHALLENGE */ int HTRequest_addChallenge_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *token = argv[2]; char *value = argv[3]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_addChallenge(request, token, value); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request challenge_list", NULL); return TCL_ERROR; } } int HTRequest_deleteChallenge_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_deleteChallenge(request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } int HTRequest_challenge_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; char *listname = malloc(max_keyname); if (req_keyname) { Tcl_HashEntry *list_entry; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTAssocList *list = HTRequest_challenge(request); listname = Keyname_lookupAssocList(list); if (!listname) { list_entry = CreateNewAssocListEntry("AssocList", &listname); Tcl_SetHashValue(list_entry, list); } Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* CREDENTIALS */ int HTRequest_addCredentials_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *req_keyname = argv[1]; char *token = argv[2]; char *value = argv[3]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_addCredentials(request, token, value); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request token value", NULL); return TCL_ERROR; } } int HTRequest_deleteCredentials_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_deleteCredentials(request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } int HTRequest_credentials_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; char *listname = malloc(max_keyname); if (req_keyname) { Tcl_HashEntry *list_entry; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTAssocList *list = HTRequest_credentials(request); listname = Keyname_lookupAssocList(list); if (!listname) { list_entry = CreateNewAssocListEntry("AssocList", &listname); Tcl_SetHashValue(list_entry, list); } Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* REALM */ int HTRequest_setRealm_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *realm = argv[2]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_setRealm(request, realm); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request realm", NULL); return TCL_ERROR; } } int HTRequest_realm_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); CONST char *realm = HTRequest_realm(request); Tcl_AppendResult(interp, realm, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* SCHEME */ int HTRequest_setScheme_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *scheme = argv[2]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_setScheme(request, scheme); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request scheme", NULL); return TCL_ERROR; } } int HTRequest_scheme_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); CONST char *scheme = HTRequest_scheme(request); Tcl_AppendResult(interp, scheme, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* MAXRETRY */ int HTRequest_setMaxRetry_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { int maxretry; if (Tcl_GetInt(interp, argv[1], &maxretry) == TCL_OK) { BOOL result = HTRequest_setMaxRetry(maxretry); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " max_retry", NULL); return TCL_ERROR; } } int HTRequest_maxRetry_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { int maxretry = HTRequest_maxRetry(); char *result=malloc(sizeof(maxretry)); sprintf(result, "%d", maxretry); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /* RETRY */ int HTRequest_retrys_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); int result = HTRequest_retrys(request); char *output; sprintf(output, "%d", result); Tcl_AppendResult(interp, output, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } int HTRequest_doRetry_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_doRetry(request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* RETRYTIME */ int HTRequest_retryTime_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); time_t time = HTRequest_retryTime(request); char *result = malloc(sizeof(time)); sprintf(result, "%ld", time); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* CONVERSION */ int HTRequest_setConversion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { int override; char *req_keyname = argv[1]; char *list_keyname = argv[2]; char *override_str = argv[3]; if (req_keyname && list_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_keyname); if (request_entry && list_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = Tcl_GetHashValue(list_entry); HTRequest_setConversion(request, list, override); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request conversion_list override", NULL); return TCL_ERROR; } } int HTRequest_conversion_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *listname = malloc(max_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_conversion(request); listname = Keyname_lookupList(list); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* ENCODING */ int HTRequest_setEncoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { int override; char *req_keyname = argv[1]; char *list_keyname = argv[2]; char *override_str = argv[3]; if (req_keyname && list_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_keyname); if (request_entry && list_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = Tcl_GetHashValue(list_entry); HTRequest_setEncoding(request, list, override); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request encoding_list override", NULL); return TCL_ERROR; } } int HTRequest_encoding_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; char *listname = malloc(max_keyname); if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_encoding(request); listname = Keyname_lookupList(list); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* TRANSFER */ int HTRequest_setTransfer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { int override; char *req_keyname = argv[1]; char *list_keyname = argv[2]; char *override_str = argv[3]; if (req_keyname && list_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_keyname); if (request_entry && list_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = Tcl_GetHashValue(list_entry); HTRequest_setTransfer(request, list, override); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request transfer_list override", NULL); return TCL_ERROR; } } int HTRequest_transfer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; char *listname = malloc(max_keyname); if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_transfer(request); listname = Keyname_lookupList(list); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* LANGUAGE */ int HTRequest_setLanguage_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { int override; char *req_keyname = argv[1]; char *list_keyname = argv[2]; char *override_str = argv[3]; if (req_keyname && list_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_keyname); if (request_entry && list_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = Tcl_GetHashValue(list_entry); HTRequest_setLanguage(request, list, override); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request language_list override", NULL); return TCL_ERROR; } } int HTRequest_language_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *listname = malloc(max_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_language(request); listname = Keyname_lookupList(list); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* CHARSET */ int HTRequest_setCharset_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { int override; char *req_keyname = argv[1]; char *list_keyname = argv[2]; char *override_str = argv[3]; if (req_keyname && list_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_keyname); if (request_entry && list_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = Tcl_GetHashValue(list_entry); HTRequest_setCharset(request, list, override); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request charset_list override", NULL); return TCL_ERROR; } } int HTRequest_charset_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *listname = malloc(max_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_charset(request); listname = Keyname_lookupList(list); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /***************************** * Handling Metainformation * ****************************/ /* GNHD */ int HTRequest_setGnHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTGnHd gnHd = HTGnHd_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setGnHd(request, gnHd); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTGnHd_mode", NULL); return TCL_ERROR; } } int HTRequest_addGnHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTGnHd gnHd = HTGnHd_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_addGnHd(request, gnHd); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTGnHd_mode", NULL); return TCL_ERROR; } } int HTRequest_gnHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *mode_name; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTGnHd gnHd = HTRequest_gnHd(request); sprintf(mode_name, "%x", gnHd); Tcl_AppendResult(interp, mode_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* RQHD */ int HTRequest_setRqHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTRqHd rqhd = HTRqHd_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setRqHd(request, rqhd); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTRqHd_mode", NULL); return TCL_ERROR; } } int HTRequest_addRqHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTRqHd rqhd = HTRqHd_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_addRqHd(request, rqhd); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTRqHd_mode", NULL); return TCL_ERROR; } } int HTRequest_rqHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *mode_name; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRqHd rqhd = HTRequest_rqHd(request); sprintf(mode_name, "%x", rqhd); Tcl_AppendResult(interp, mode_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* RSHD */ int HTRequest_setRsHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTRsHd rsHd = HTRsHd_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setRsHd(request, rsHd); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTRsHd_mode", NULL); return TCL_ERROR; } } int HTRequest_addRsHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTRsHd rsHd = HTRsHd_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_addRsHd(request, rsHd); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTRsHd_mode", NULL); return TCL_ERROR; } } int HTRequest_rsHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *mode_name; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRsHd rsHd = HTRequest_rsHd(request); sprintf(mode_name, "%x", rsHd); Tcl_AppendResult(interp, mode_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTRsHd_mode", NULL); return TCL_ERROR; } } /* ENHD */ int HTRequest_setEnHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTEnHd enHd = HTEnHd_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setEnHd(request, enHd); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTEnHd_mode", NULL); return TCL_ERROR; } } int HTRequest_addEnHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *mode_name = argv[2]; if (req_keyname && mode_name) { HTEnHd enHd = HTEnHd_enum(mode_name); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_addEnHd(request, enHd); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request HTEnHd_mode", NULL); return TCL_ERROR; } } int HTRequest_enHd_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *mode_name; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTEnHd enHd = HTRequest_enHd(request); sprintf(mode_name, "%x", enHd); Tcl_AppendResult(interp, mode_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* PARENT */ int HTRequest_setParent_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *anchor_keyname = argv[2]; if (req_keyname && anchor_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_keyname); if (request_entry && anchor_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest_setParent(request, (HTParentAnchor *) anchor); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request anchor", NULL); return TCL_ERROR; } } int HTRequest_parent_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *anchor_keyname = malloc(max_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTParentAnchor *anchor = HTRequest_parent(request); anchor_keyname = Keyname_lookupAnchor((HTAnchor *) anchor); Tcl_AppendResult(interp, anchor_keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* GENERATOR */ int HTRequest_setGenerator_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { int override; char *req_keyname = argv[1]; char *list_keyname = argv[2]; char *override_str = argv[3]; if (req_keyname && list_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_keyname); if (request_entry && list_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = Tcl_GetHashValue(list_entry); HTRequest_setGenerator(request, list, override); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request generator_list override", NULL); return TCL_ERROR; } } int HTRequest_generator_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { BOOL override; char *req_keyname = argv[1]; char *override_str = argv[2]; if (req_keyname && override_str) { char *listname = malloc(max_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_generator(request, &override); listname = Keyname_lookupList(list); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* MIMEParseSet */ int HTRequest_setMIMEParseSet_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { int override; char *req_keyname = argv[1]; char *set_keyname = argv[2]; char *override_str = argv[3]; if (req_keyname && set_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *set_entry = Tcl_FindHashEntry(&HTableMIMEParseSet, set_keyname); if (request_entry && set_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTMIMEParseSet *set = Tcl_GetHashValue(set_entry); HTRequest_setMIMEParseSet(request, set, override); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request parser_list override", NULL); return TCL_ERROR; } } int HTRequest_MIMEParseSet_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { BOOL local; char *req_keyname = argv[1]; char *local_str = argv[2]; if (req_keyname && local_str) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTMIMEParseSet *set = HTRequest_MIMEParseSet(request, &local); char *setname = Keyname_lookupHTMIMEParseSet(set); char *check = Tcl_SetVar(interp, local_str, local ? "YES" : "NO", 0); if (check) Tcl_AppendResult(interp, setname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /******************************** * Sending Data to the Network * ********************************/ /************************************************** typedef int HTPostCallback (HTRequest * request, HTStream * target); extern void HTRequest_setPostCallback (HTRequest * request, HTPostCallback * cbf); extern HTPostCallback * HTRequest_postCallback (HTRequest * request); */ /* ENTITYANCHOR */ int HTRequest_setEntityAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *anchor_keyname = argv[2]; if (req_keyname && anchor_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_keyname); if (request_entry && anchor_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest_setEntityAnchor(request, (HTParentAnchor *) anchor); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request anchor", NULL); return TCL_ERROR; } } int HTRequest_entityAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *anchor_keyname = malloc(max_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTParentAnchor *anchor = HTRequest_entityAnchor(request); anchor_keyname = Keyname_lookupAnchor((HTAnchor *) anchor); Tcl_AppendResult(interp, anchor_keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* INPUTSTREAM */ int HTRequest_setInputStream_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *stream_keyname = argv[2]; if (req_keyname && stream_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *stream_entry = Tcl_FindHashEntry(&HTableStream, stream_keyname); if (request_entry && stream_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTStream *stream = Tcl_GetHashValue(stream_entry); HTRequest_setInputStream(request, stream); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request stream", NULL); return TCL_ERROR; } } int HTRequest_inputStream_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *stream_name; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTStream *stream = HTRequest_inputStream(request); stream_name = Keyname_lookupStream(stream); Tcl_AppendResult(interp, stream_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* ISPOSTWEB */ int HTRequest_isPostWeb_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_isPostWeb(request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* SOURCE */ int HTRequest_setSource_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *source = argv[2]; if (keyname && source) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); Tcl_HashEntry *source_entry = Tcl_FindHashEntry(&HTableReq, source); if (request_entry && source_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest *source = Tcl_GetHashValue(source_entry); BOOL result = HTRequest_setSource(request, source); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request source_request", NULL); return TCL_ERROR; } } int HTRequest_source_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest *source = HTRequest_source(request); char *source_name = Keyname_lookupRequest(source); if (!source_name) { Tcl_HashEntry *source_entry = CreateNewRequestEntry("Request", &source_name); Tcl_SetHashValue(source_entry, source); } Tcl_AppendResult(interp, source_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request source_request", NULL); return TCL_ERROR; } } /******************************** * From network to application * ********************************/ /* OUTPUTSTREAM */ int HTRequest_setOutputStream_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *stream_keyname = argv[2]; if (req_keyname && stream_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *stream_entry = Tcl_FindHashEntry(&HTableStream, stream_keyname); if (request_entry && stream_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTStream *stream = Tcl_GetHashValue(stream_entry); HTRequest_setOutputStream(request, stream); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request stream", NULL); return TCL_ERROR; } } int HTRequest_outputStream_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *stream_name; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTStream *stream = HTRequest_outputStream(request); stream_name = Keyname_lookupStream(stream); Tcl_AppendResult(interp, stream_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* OUTPUTCONNECTED */ int HTRequest_setOutputConnected_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int Connected; char *req_keyname = argv[1]; char *outputConnected_str = argv[2]; if (req_keyname && (Tcl_GetBoolean(interp, outputConnected_str, &Connected) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setOutputConnected(request, Connected); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request outputConnected?", NULL); return TCL_ERROR; } } int HTRequest_outputConnected_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL outputConnected = HTRequest_outputConnected(request); Tcl_AppendResult(interp, outputConnected ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* OUTPUTFORMAT */ int HTRequest_setOutputFormat_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *format_keyname = argv[2]; if (req_keyname && format_keyname) { HTFormat format = HTAtom_for(format_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setOutputFormat(request, format); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request format", NULL); return TCL_ERROR; } } int HTRequest_outputFormat_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTFormat format = HTRequest_outputFormat(request); Tcl_AppendResult(interp, HTAtom_name(format), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* DEBUGSTREAM */ int HTRequest_setDebugStream_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *stream_keyname = argv[2]; if (req_keyname && stream_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *stream_entry = Tcl_FindHashEntry(&HTableStream, stream_keyname); if (request_entry && stream_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTStream *stream = Tcl_GetHashValue(stream_entry); HTRequest_setDebugStream(request, stream); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request stream", NULL); return TCL_ERROR; } } int HTRequest_debugStream_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *stream_name; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTStream *stream = HTRequest_debugStream(request); stream_name = Keyname_lookupStream(stream); Tcl_AppendResult(interp, stream_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* DEBUGFORMAT */ int HTRequest_setDebugFormat_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *format_keyname = argv[2]; if (req_keyname && format_keyname) { HTFormat Format = HTAtom_for(format_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setDebugFormat(request, Format); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request format", NULL); return TCL_ERROR; } } int HTRequest_debugFormat_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTFormat format = HTRequest_debugFormat(request); Tcl_AppendResult(interp, HTAtom_name(format), NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /******************************** * Before and After filters * ********************************/ /* BEFORE */ int HTRequest_addBefore_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int override; int status; char *req_keyname = argv[1]; char *net_keyname = argv[2]; char *param_keyname = argv[3]; char *status_str = argv[4]; char *override_str = argv[5]; if (req_keyname && net_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK) && (Tcl_GetInt(interp, status_str, &status) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, param_keyname); if (request_entry && void_entry) { HTNetCallback *filter; HTRequest *request = Tcl_GetHashValue(request_entry); void *param = Tcl_GetHashValue(void_entry); BOOL result = HTRequest_addBefore(request, filter, param, status, override); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request netcallback param status override", NULL); return TCL_ERROR; } } int HTRequest_deleteBefore_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 6) { char *req_keyname = argv[1]; char *net_keyname = argv[2]; if (req_keyname && net_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTNetCallback *filter; HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_deleteBefore(request, filter); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request netcallback", NULL); return TCL_ERROR; } } int HTRequest_deleteBeforeAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_deleteBeforeAll(request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } int HTRequest_before_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { BOOL override; char *req_keyname = argv[1]; char *override_str = argv[2]; if (req_keyname && override_str) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_before(request, &override); char *listname = Keyname_lookupList(list); Tcl_SetVar(interp, override_str, override ? "YES" : "NO", 0); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request override", NULL); return TCL_ERROR; } } /* AFTER */ int HTRequest_addAfter_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int override; int status; char *req_keyname = argv[1]; char *net_keyname = argv[2]; char *param_keyname = argv[3]; char *status_str = argv[4]; char *override_str = argv[5]; if (req_keyname && net_keyname && (Tcl_GetBoolean(interp, override_str, &override) == TCL_OK) && (Tcl_GetInt(interp, status_str, &status) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, param_keyname); if (request_entry && void_entry) { HTNetCallback *filter; HTRequest *request = Tcl_GetHashValue(request_entry); void *param = Tcl_GetHashValue(void_entry); BOOL result = HTRequest_addAfter(request, filter, param, status, override); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request netcallback param status override", NULL); return TCL_ERROR; } } int HTRequest_deleteAfter_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 6) { char *req_keyname = argv[1]; char *net_keyname = argv[2]; if (req_keyname && net_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTNetCallback *filter; HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_deleteAfter(request, filter); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request netcallback", NULL); return TCL_ERROR; } } int HTRequest_deleteAfterAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_deleteAfterAll(request); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } int HTRequest_after_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { BOOL override; char *req_keyname = argv[1]; char *override_str = argv[2]; if (req_keyname && override_str) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_after(request, &override); char *listname = Keyname_lookupList(list); Tcl_SetVar(interp, override_str, override ? "YES" : "NO", 0); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request override", NULL); return TCL_ERROR; } } /******************************** * Context Swapping * ********************************/ /* CALLBACK */ int HTRequest_setCallback_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *callback_keyname = argv[2]; if (req_keyname && callback_keyname) { Tcl_HashEntry *callback_entry = Tcl_FindHashEntry(&HTableCallback, callback_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry && callback_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequestCallback *callback = Tcl_GetHashValue(callback_entry); HTRequest_setCallback(request, callback); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request callback", NULL); return TCL_ERROR; } } int HTRequest_callback_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequestCallback *callback = HTRequest_callback(request); char *callback_str = Keyname_lookupCallback(callback); Tcl_AppendResult(interp, callback_str, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* CONTEXT */ int HTRequest_setContext_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *request_name = argv[1]; char *context_name = argv[2]; if (request_name && context_name) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_name); Tcl_HashEntry *context_entry = Tcl_FindHashEntry(&HTableVoid, context_name); if (request_entry && context_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); void *context = Tcl_GetHashValue(context_entry); HTRequest_setContext(request, context); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " request context", NULL); return TCL_ERROR; } } int HTRequest_context_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *request_name = argv[1]; if (request_name) { Tcl_HashEntry *context_entry; Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, request_name); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); void *result = HTRequest_context(request); char *keyname = Keyname_lookupVoid((void *) result); if (!keyname) { context_entry = CreateNewVoidEntry("Context", &keyname); Tcl_SetHashValue(context_entry, result); } Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp,err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* PREEMPTIVE */ int HTRequest_setPreemptive_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int preemptive; char *req_keyname = argv[1]; char *preemptive_str = argv[2]; if (req_keyname && (Tcl_GetBoolean(interp, preemptive_str, &preemptive) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setPreemptive(request, preemptive); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request preemptive?", NULL); return TCL_ERROR; } } int HTRequest_preemptive_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL preemptive = HTRequest_preemptive(request); Tcl_AppendResult(interp, preemptive ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* PRIORITY */ int HTRequest_setPriority_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *priority_str = argv[2]; if (req_keyname && priority_str) { HTPriority priority = HTPriority_enum(priority_str); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_setPriority(request, priority); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request priority", NULL); return TCL_ERROR; } } int HTRequest_priority_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTPriority priority = HTRequest_priority(request); Tcl_AppendResult(interp, HTPriority_name(priority) , NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* ANCHOR */ int HTRequest_setAnchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *anchor_keyname = argv[2]; if (req_keyname && anchor_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *anchor_entry = Tcl_FindHashEntry(&HTableAnchor, anchor_keyname); if (request_entry && anchor_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTAnchor *anchor = Tcl_GetHashValue(anchor_entry); HTRequest_setAnchor(request, anchor); Tcl_AppendResult(interp, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request anchor", NULL); return TCL_ERROR; } } int HTRequest_anchor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *anchor_keyname = malloc(max_keyname); char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTParentAnchor *anchor = HTRequest_anchor(request); anchor_keyname = Keyname_lookupAnchor((HTAnchor *) anchor); Tcl_AppendResult(interp, anchor_keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } /* NET */ int HTRequest_setNet_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *net_keyname = argv[2]; if (req_keyname && net_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *net_entry = Tcl_FindHashEntry(&HTableNet, net_keyname); if (request_entry && net_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTNet *net = Tcl_GetHashValue(net_entry); BOOL result = HTRequest_setNet(request, net); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request HTNet", NULL); return TCL_ERROR; } } int HTRequest_net_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTNet *net = HTRequest_net(request); char *net_str = Keyname_lookupNet(net); Tcl_AppendResult(interp, net_str, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* NEGOTIATION */ int HTRequest_setNegotiation_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int negotiation; char *req_keyname = argv[1]; char *neg_str = argv[2]; if (req_keyname && (Tcl_GetBoolean(interp, neg_str, &negotiation) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setNegotiation(request, negotiation); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request negotiation", NULL); return TCL_ERROR; } } int HTRequest_negotiation_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL negotiation = HTRequest_negotiation(request); Tcl_AppendResult(interp, negotiation ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* FULLURI */ int HTRequest_setFullURI_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int FullURI; char *req_keyname = argv[1]; char *FullURI_str = argv[2]; if (req_keyname && (Tcl_GetBoolean(interp, FullURI_str, &FullURI) == TCL_OK)) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setFullURI(request, FullURI); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request FullURI?", NULL); return TCL_ERROR; } } int HTRequest_fullURI_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL FullURI = HTRequest_fullURI(request); Tcl_AppendResult(interp, FullURI ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* ERROR */ int HTRequest_error_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { char *listname = malloc(max_keyname); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = HTRequest_error(request); listname = Keyname_lookupList(list); Tcl_AppendResult(interp, listname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } int HTRequest_setError_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *list_keyname = argv[2]; if (req_keyname && list_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); Tcl_HashEntry *list_entry = Tcl_FindHashEntry(&HTableList, list_keyname); if (request_entry && list_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTList *list = Tcl_GetHashValue(list_entry); HTRequest_setError(request, list); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request error_list", NULL); return TCL_ERROR; } } int HTRequest_addError_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 8) { int ignore, element, length; char *req_keyname = argv[1]; char *severity_string = argv[2]; char *ignore_string = argv[3]; char *par_string = argv[5]; char *where = argv[7]; if (req_keyname && severity_string && par_string && where \ && (Tcl_GetBoolean(interp, ignore_string,&ignore) == TCL_OK) \ && (Tcl_GetInt(interp, argv[4], &element) == TCL_OK) \ && (Tcl_GetInt(interp, argv[6], &length) == TCL_OK)) { HTSeverity severity = HTSeverity_enum(severity_string); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_addError(request, severity, ignore, element, NULL, length, where); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request severity ignore_boolean element par length where", NULL); return TCL_ERROR; } } /* SYSTEMERROR */ int HTRequest_addSystemError_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 6) { int ignore, errornumber; char *req_keyname = argv[1]; char *severity_string = argv[2]; char *ignore_string = argv[4]; char *syscall = argv[5]; if (req_keyname && severity_string && syscall \ && (Tcl_GetBoolean(interp, ignore_string, &ignore) == TCL_OK) \ && (Tcl_GetInt(interp, argv[3], &errornumber) == TCL_OK)) { HTSeverity severity = HTSeverity_enum(severity_string); Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); BOOL result = HTRequest_addSystemError(request, severity, errornumber, ignore, syscall); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request severity errornumber ignore_boolean syscall", NULL); return TCL_ERROR; } } /* BYTESREAD */ int HTRequest_bytesRead_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *result_string; char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); long result = HTRequest_bytesRead(request); sprintf(result_string, "%ld", result); Tcl_AppendResult(interp, result_string, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* BYTESWRITTEN */ int HTRequest_bytesWritten_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *result_string; char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); long result = HTRequest_bytesWritten(request); sprintf(result_string, "%ld", result); Tcl_AppendResult(interp, result_string, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], "request", NULL); return TCL_ERROR; } } /* Internal Request Objects The library may under certain circumstances create its own Request objects. These are all handled internal and does not show up on the application side at all. extern BOOL HTRequest_setInternal (HTRequest * request, BOOL mode); extern BOOL HTRequest_internal (HTRequest * request); */ #if 0 /* ACCESS */ int HTRequest_setAccess_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *req_keyname = argv[1]; char *access = argv[2]; if (req_keyname && access) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); HTRequest_setAccess(request, access); /* Only for servers...*/ return TCL_ERROR; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " request access", NULL); return TCL_ERROR; } int HTRequest_access_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *req_keyname = argv[1]; if (req_keyname) { Tcl_HashEntry *request_entry = Tcl_FindHashEntry(&HTableReq, req_keyname); if (request_entry) { HTRequest *request = Tcl_GetHashValue(request_entry); char *access = HTRequest_access(request); Tcl_AppendResult(interp, access, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " request", NULL); return TCL_ERROR; } } #endif libwww/Library/Test/src/HTReq_glue.h0100644000076400001440000002022606201426610017032 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTLoad_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_kill_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_new_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_clear_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_dup_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_dupInternal_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setUserProfile_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_userProfile_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setMethod_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_method_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setReloadMode_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_reloadMode_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setRedirection_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_redirection_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addChallenge_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_deleteChallenge_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_challenge_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addCredentials_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_deleteCredentials_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_credentials_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setRealm_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_realm_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setScheme_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_scheme_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setMaxRetry_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_maxRetry_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_retrys_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_doRetry_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_retryTime_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setConversion_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_conversion_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setEncoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_encoding_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setTransfer_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_transfer_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setLanguage_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_language_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setCharset_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_charset_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setGnHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addGnHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_gnHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setRqHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addRqHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_rqHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setRsHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addRsHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_rsHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setEnHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addEnHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_enHd_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setParent_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_parent_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setGenerator_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_generator_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setMIMEParseSet_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_MIMEParseSet_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setEntityAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_entityAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setInputStream_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_inputStream_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_isPostWeb_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setSource_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_source_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setOutputStream_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_outputStream_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setOutputConnected_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_outputConnected_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setOutputFormat_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_outputFormat_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setDebugStream_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_debugStream_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setDebugFormat_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_debugFormat_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addBefore_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_deleteBefore_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_deleteBeforeAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_before_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addAfter_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_deleteAfter_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_deleteAfterAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_after_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setCallback_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_callback_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setContext_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_context_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setPreemptive_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_preemptive_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_priority_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setPriority_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setAnchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_anchor_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_net_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setNet_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setNegotiation_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_negotiation_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setFullURI_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_fullURI_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_error_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setError_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addError_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_addSystemError_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_bytesRead_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_bytesWritten_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_setAccess_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTRequest_access_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTTrans_glue.c0100644000076400001440000000651206207130141017364 0ustar danielusers#include "HTTrans_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /***************** * HTTrans * *****************/ Tcl_HashTable HTableTrans; Tcl_HashTable HTableReq; /* extern BOOL HTTransport_add (const char * name, HTTransportMode mode, HTInput_new * get_input, HTOutput_new * get_output); */ int HTTransport_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { const char *name = argv[1]; if (name){ BOOL result = HTTransport_delete(name); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTTransport_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTTransport_deleteAll(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTTransport_find_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if ( argc == 3) { char *request_key = argv[1]; const char *name = argv[2]; if ( request_key && name) { Tcl_HashEntry *request_entry=Tcl_FindHashEntry(&HTableReq, request_key); if(request_entry) { char *keyname; HTRequest *request = Tcl_GetHashValue(request_entry); HTTransport *transport = HTTransport_find(request, name); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableTrans, "Transport", &keyname); Tcl_SetHashValue(entryPtr, transport); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTTransport_mode_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *tp_key = argv[1]; if (tp_key){ Tcl_HashEntry *tp_entry = Tcl_FindHashEntry(&HTableTrans, tp_key); if(tp_entry) { HTTransport *tp = Tcl_GetHashValue(tp_entry); HTTransportMode mode = HTTransport_mode(tp); char *mode_name = HTTransportMode_name(mode); Tcl_AppendResult(interp, mode_name, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTTransport_setMode_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *tp_key = argv[1]; char *mode_name = argv[2]; if (tp_key && mode_name){ Tcl_HashEntry *tp_entry = Tcl_FindHashEntry(&HTableTrans, tp_key); HTTransportMode mode = HTTransportMode_enum(mode_name); if(tp_entry) { HTTransport *tp = Tcl_GetHashValue(tp_entry); BOOL result = HTTransport_setMode(tp, mode); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } libwww/Library/Test/src/HTTrans_glue.h0100644000076400001440000000065406207130142017373 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTTransport_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTTransport_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTTransport_find_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTTransport_mode_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTTransport_setMode_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTUTree_glue.c0100644000076400001440000001324406207130143017323 0ustar danielusers#include "HTUTree_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " /************************ * HTUTree * ************************/ Tcl_HashTable HTableUTree; Tcl_HashTable HTableVoid; /*not sure how to handel HTUTree_gc, which is the type a fucntion that returns an integer */ int HTUTree_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if(argc == 5) { const char * root = argv[1]; const char * host = argv[2]; int port; int success = Tcl_GetInt(interp, argv[3], &port); char *gc_name = argv[5]; if ( root && host && (success == TCL_OK) && gc_name) { /* char *keyname; HTUTree_gc *gc = HTUTree * utree = HTUTree_new(root, host, port, gc); Tcl_HashEntry *entryPtr = CreateNewEntry(&HTableUTree, "UTree", &keyname); Tcl_SetHashValue(entryPtr, utree); Tcl_AppendResult(interp, keyname, NULL); */ return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTUTree_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char ** argv) { if (argc == 4) { const char *root = argv[1]; const char *host = argv[2]; int port; int success = Tcl_GetInt(interp, argv[3], &port); if (root && host && (success == TCL_OK) ) { BOOL result = HTUTree_delete(root, host, port); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTUTree_deleteAll_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { BOOL result = HTUTree_deleteAll(); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTUTree_find_tcl (ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { const char * root = argv[1]; const char * host = argv[2]; int port; if ( root && host && (Tcl_GetInt(interp, argv[3], &port) == TCL_OK)) { char *keyname; HTUTree *utree = HTUTree_find(root, host, port); Tcl_HashEntry *entryPtr =CreateNewEntry(&HTableUTree, "UTree", &keyname); Tcl_SetHashValue(entryPtr, utree); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, NULL); return TCL_ERROR; } int HTUTree_findNode_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *tree_key = argv[1]; const char *realm = argv[2]; const char *path = argv[3]; if ( tree_key && realm && path) { Tcl_HashEntry *tree_entry = Tcl_FindHashEntry(&HTableUTree, tree_key); if ( tree_entry) { HTUTree *tree = Tcl_GetHashValue(tree_entry); HTUTree_findNode(tree, realm, path); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } int HTUTree_addNode_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *tree_key = argv[1]; const char *realm = argv[2]; const char *path = argv[3]; char *void_key = argv[4]; if ( tree_key && realm && path) { Tcl_HashEntry *tree_entry = Tcl_FindHashEntry(&HTableUTree, tree_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if ( tree_entry && void_entry ) { HTUTree *tree = Tcl_GetHashValue(tree_entry); void *context = Tcl_GetHashValue(void_entry); BOOL result = HTUTree_addNode(tree, realm, path, context); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } int HTUTree_replaceNode_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 5) { char *tree_key = argv[1]; const char *realm = argv[2]; const char *path = argv[3]; char *void_key = argv[4]; if ( tree_key && realm && path) { Tcl_HashEntry *tree_entry = Tcl_FindHashEntry(&HTableUTree, tree_key); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_key); if ( tree_entry && void_entry ) { HTUTree *tree = Tcl_GetHashValue(tree_entry); void *context = Tcl_GetHashValue(void_entry); BOOL result = HTUTree_replaceNode(tree, realm, path, context); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } int HTUTree_deleteNode_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { char *tree_key = argv[1]; const char *realm = argv[2]; const char *path = argv[3]; if ( tree_key && realm && path) { Tcl_HashEntry *tree_entry = Tcl_FindHashEntry(&HTableUTree, tree_key); if ( tree_entry) { HTUTree *tree = Tcl_GetHashValue(tree_entry); BOOL result = HTUTree_deleteNode(tree, realm, path); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } libwww/Library/Test/src/HTUTree_glue.h0100644000076400001440000000117306207130144017327 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTUTree_new_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUTree_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUTree_deleteAll_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUTree_find_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUTree_findNode_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUTree_addNode_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUTree_replaceNode_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUTree_deleteNode_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/HTUser_glue.c0100644000076400001440000002611706206151753017231 0ustar danielusers#include "HTUser_glue.h" #define max_keyname 20 #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " Tcl_HashTable HTableUser; Tcl_HashTable HTableVoid; /***************************** * HTUser * *****************************/ /* NEW */ int HTUserProfile_new_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *name = argv[1]; char *void_keyname = argv[2]; char *keyname; if (name && void_keyname) { Tcl_HashEntry *user_entry; Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, void_keyname); if (void_entry) { void *void_obj = (void *) Tcl_GetHashValue(void_entry); HTUserProfile *user = HTUserProfile_new(name, void_obj); user_entry = CreateNewUserEntry("HTUser", &keyname); Tcl_SetHashValue(user_entry, user); Tcl_AppendResult(interp, keyname, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " name void_object", NULL); return TCL_ERROR; } /* LOCALIZE */ int HTUserProfile_localize_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); BOOL result = HTUserProfile_localize(user); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile", NULL); return TCL_ERROR; } /* DELETE */ int HTUserProfile_delete_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); BOOL result = HTUserProfile_delete(user); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile", NULL); return TCL_ERROR; } /* FQDN */ int HTUserProfile_fqdn_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); char *result = HTUserProfile_fqdn(user); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile", NULL); return TCL_ERROR; } int HTUserProfile_setFqdn_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *fqdn = argv[2]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); BOOL result = HTUserProfile_setFqdn(user, fqdn); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile fqdn", NULL); return TCL_ERROR; } /* EMAIL */ int HTUserProfile_email_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); char *result = HTUserProfile_email(user); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile", NULL); return TCL_ERROR; } int HTUserProfile_setEmail_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *email = argv[2]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); BOOL result = HTUserProfile_setEmail(user, email); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile email", NULL); return TCL_ERROR; } /* NEWS */ int HTUserProfile_news_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); char *result = HTUserProfile_news(user); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile", NULL); return TCL_ERROR; } int HTUserProfile_setNews_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *news = argv[2]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); BOOL result = HTUserProfile_setNews(user, news); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile news", NULL); return TCL_ERROR; } /* TMP */ int HTUserProfile_tmp_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); char *result = HTUserProfile_tmp(user); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile", NULL); return TCL_ERROR; } int HTUserProfile_setTmp_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *tmp = argv[2]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); BOOL result = HTUserProfile_setTmp(user, tmp); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile tmp", NULL); return TCL_ERROR; } /* TIMEZONE */ int HTUserProfile_timezone_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); time_t timezone = HTUserProfile_timezone(user); char *result = malloc(sizeof(timezone)); sprintf(result, "%d", (int) timezone); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile", NULL); return TCL_ERROR; } int HTUserProfile_setTimezone_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *timezone_name = argv[2]; if (keyname && timezone) { time_t timezone = atol(timezone_name); Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); BOOL result = HTUserProfile_setTimezone(user, timezone); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile timezone", NULL); return TCL_ERROR; } /* CONTEXT */ int HTUserProfile_context_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *keyname = argv[1]; if (keyname) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); if (user_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); time_t *context = HTUserProfile_context(user); char *result = malloc(sizeof(context)); sprintf(result, "%d", (int) context); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile", NULL); return TCL_ERROR; } int HTUserProfile_setContext_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *keyname = argv[1]; char *context = argv[2]; if (keyname && context) { Tcl_HashEntry *user_entry = Tcl_FindHashEntry(&HTableUser, keyname); Tcl_HashEntry *void_entry = Tcl_FindHashEntry(&HTableVoid, context); if (user_entry && void_entry) { HTUserProfile *user = (HTUserProfile *) Tcl_GetHashValue(user_entry); void *void_obj = (void *) Tcl_GetHashValue(void_entry); BOOL result = HTUserProfile_setContext(user, void_obj); Tcl_AppendResult(interp, result ? "YES" : "NO", NULL); return TCL_OK; } } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " HTUserProfile context", NULL); return TCL_ERROR; } libwww/Library/Test/src/HTUser_glue.h0100644000076400001440000000231006201705311017211 0ustar danielusers#include "Libdata.h" #include "Enumerations.h" extern int HTUserProfile_new_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_localize_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_delete_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_fqdn_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_setFqdn_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_email_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_setEmail_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_news_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_setNews_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_tmp_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_setTmp_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_timezone_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_setTimezone_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_context_tcl(ClientData, Tcl_Interp *, int, char **); extern int HTUserProfile_setContext_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/Libdata.c0100644000076400001440000002326106206410711016370 0ustar danielusers#include "Libdata.h" #define max_keyname 20 Tcl_HashTable HTableAnchor; Tcl_HashTable HTableAssoc; Tcl_HashTable HTableLink; Tcl_HashTable HTableList; Tcl_HashTable HTableReq; Tcl_HashTable HTableStream; Tcl_HashTable HTableVoid; Tcl_HashTable HTableUser; Tcl_HashTable HTableProt; Tcl_HashTable HTableCallback; Tcl_HashTable HTableMIMEParseSet; /*This function has limited use to lookup a keyname given an anchor. if there is no associated keyname, NULL is returned */ char *Keyname_lookupAnchor(HTAnchor *anchor) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTAnchor *anchor_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableAnchor, &search); entryPtr ; entryPtr = Tcl_NextHashEntry(&search)) { anchor_obj = (HTAnchor *) Tcl_GetHashValue(entryPtr); if (anchor_obj == anchor) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableAnchor, entryPtr)); } return keyname; } char *Keyname_lookupAssocList(HTAssocList *list) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTAssocList *list_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableAssoc, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { list_obj = (HTAssocList *) Tcl_GetHashValue(entryPtr); if (list_obj == list) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableAssoc, entryPtr)); } return keyname; } char *Keyname_lookupLinks(HTLink *link) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTLink *link_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableLink, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { link_obj = (HTLink *) Tcl_GetHashValue(entryPtr); if (link_obj == link) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableLink, entryPtr)); } return keyname; } char *Keyname_lookupList(HTList *list) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTList *list_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableList, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { list_obj = (HTList *) Tcl_GetHashValue(entryPtr); if (list_obj == list) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableList, entryPtr)); } return keyname; } char *Keyname_lookupRequest(HTRequest *request) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTRequest *request_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableReq, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { request_obj = (HTRequest *) Tcl_GetHashValue(entryPtr); if (request_obj == request) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableReq, entryPtr)); } return keyname; } char *Keyname_lookupStream(HTStream *stream) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTStream *stream_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableStream, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { stream_obj = (HTStream *) Tcl_GetHashValue(entryPtr); if (stream_obj == stream) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableStream, entryPtr)); } return keyname; } char *Keyname_lookupVoid(void *obj) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; void *void_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableVoid, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { void_obj = (void *) Tcl_GetHashValue(entryPtr); if (void_obj == obj) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableVoid, entryPtr)); } return keyname; } char *Keyname_lookupUser(HTUserProfile *obj) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTUserProfile *user_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableUser, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { user_obj = (HTUserProfile *) Tcl_GetHashValue(entryPtr); if (user_obj == obj) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableUser, entryPtr)); } return keyname; } char *Keyname_lookupHTMIMEParseSet(HTMIMEParseSet *obj) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTMIMEParseSet *user_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableUser, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { user_obj = (HTMIMEParseSet *) Tcl_GetHashValue(entryPtr); if (user_obj == obj) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableUser, entryPtr)); } return keyname; } char *Keyname_lookupCallback(HTRequestCallback *obj) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTRequestCallback *user_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableUser, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { user_obj = (HTRequestCallback *) Tcl_GetHashValue(entryPtr); if (user_obj == obj) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableUser, entryPtr)); } return keyname; } char *Keyname_lookupNet(HTNet *obj) { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; HTNet *user_obj; char *keyname = NULL; for (entryPtr = Tcl_FirstHashEntry(&HTableUser, &search); entryPtr; entryPtr = Tcl_NextHashEntry(&search)) { user_obj = (HTNet *) Tcl_GetHashValue(entryPtr); if (user_obj == obj) StrAllocCopy(keyname, Tcl_GetHashKey(&HTableUser, entryPtr)); } return keyname; } Tcl_HashEntry *CreateNewAnchorEntry(char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableAnchor, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewListEntry(char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(sizeof(name)+5); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableList, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewLinkEntry(char *name, char **final_keyname) { int new = 0; int id; Tcl_HashEntry *entryPtr; char *keyname = malloc(sizeof(name)+5); for(id=0; (!new); ++id) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableLink, keyname, &new); } *final_keyname = keyname; return entryPtr; } /* Yields an entry with a new unique name, given a base to describe the keyname. To retrieve the keyname, the string is contained in final_keyname*/ Tcl_HashEntry *CreateNewRequestEntry(char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableReq, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewStreamEntry(char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableStream, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewProtocolEntry(char *name, char **final_keyname) { int new =0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableProt, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewVoidEntry(char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableVoid, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewUserEntry(char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableUser, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewAssocListEntry(char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableAssoc, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewCallbackEntry(char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(&HTableCallback, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *CreateNewEntry(Tcl_HashTable *table, char *name, char **final_keyname) { int new = 0; int id = 0; Tcl_HashEntry *entryPtr; char *keyname = malloc(max_keyname); while (!new) { sprintf(keyname, "%s_%d", name, id); entryPtr = Tcl_CreateHashEntry(table, keyname, &new); ++id; } *final_keyname = keyname; return entryPtr; } Tcl_HashEntry *FindVoidEntry(char *void_key) { Tcl_HashEntry *entryPtr; entryPtr = Tcl_FindHashEntry(&HTableAnchor, void_key); if (!entryPtr) return entryPtr; entryPtr = Tcl_FindHashEntry(&HTableReq, void_key); if (!entryPtr) return entryPtr; return NULL; } libwww/Library/Test/src/Libdata.h0100644000076400001440000000241106206410712016370 0ustar danielusers/*Common functions to retrieve data structures out of tcl hash tables*/ /*Began implementation on 11/2/95*/ #include "tcl.h" #include "WWWLib.h" extern char *Keyname_lookupAnchor(HTAnchor *); extern char *Keyname_lookupAssocList(HTAssocList *); extern char *Keyname_lookupLinks(HTLink *); extern char *Keyname_lookupList(HTList *); extern char *Keyname_lookupRequest(HTRequest *); extern char *Keyname_lookupStream(HTStream *); extern char *Keyname_lookupVoid(void *); extern char *Keyname_lookupUser(HTUserProfile *); extern char *Keyname_lookupHTMIMEParseSet(HTMIMEParseSet *); extern char *Keyname_lookupCallback(HTRequestCallback *); extern char *Keyname_lookupNet(HTNet *); extern Tcl_HashEntry *CreateNewEntry(Tcl_HashTable *table, char *name, char **final_keyname); extern Tcl_HashEntry *CreateNewAnchorEntry(char *, char **); extern Tcl_HashEntry *CreateNewListEntry(char *, char **); extern Tcl_HashEntry *CreateNewLinkEntry(char *, char **); extern Tcl_HashEntry *CreateNewRequestEntry(char *, char **); extern Tcl_HashEntry *CreateNewStreamEntry(char *, char **); extern Tcl_HashEntry *CreateNewVoidEntry(char *, char **); extern Tcl_HashEntry *CreateNewUserEntry(char *, char **); extern Tcl_HashEntry *CreateNewAssocListEntry(char *, char **); libwww/Library/Test/src/Makefile.am0100644000076400001440000000242306530334017016721 0ustar danielusers## Process this file with Automake to create Makefile.in. ## ## This is not up-to-date with the latest API so we skip it for now ## check_PROGRAMS = w3clib libtcl = @libtcl@ tclinclude = @tclinclude@ w3clib_LDADD = \ $(libtcl) \ ../../src/libwww.la -lm w3clib_DEPENDENCIES = \ $(libtcl) \ ../../src/libwww.la # For easier use - NOT THE DEFAULT! AUTOMAKE_OPTIONS = foreign INCLUDES = -I$(srcdir)/../../src -I$(tclinclude) w3clib_SOURCES = \ HTAnchor_glue.c HTAnchor_glue.h \ HTReq_glue.c HTReq_glue.h \ HTList_glue.c HTList_glue.h \ HTHost_glue.c HTHost_glue.h \ HTLog_glue.c HTLog_glue.h \ HTFWriter_glue.c HTFWriter_glue.h \ HTAssoc_glue.c HTAssoc_glue.h \ HTBind_glue.c HTBind_glue.h \ HTProt_glue.c HTProt_glue.h \ HTUser_glue.c HTUser_glue.h \ HTLink_glue.c HTLink_glue.h \ HTAccess_glue.c HTAccess_glue.h \ HTParse_glue.c HTParse_glue.h \ HTFormat_glue.c HTFormat_glue.h \ HTError_glue.c HTError_glue.h \ HTAlert_glue.c HTAlert_glue.h \ HTDNS_glue.c HTDNS_glue.h \ HTUTree_glue.c HTUTree_glue.h \ HTTrans_glue.c HTTrans_glue.h \ HTNet_glue.c HTNet_glue.h \ HTInet_glue.c HTInet_glue.h \ Libdata.c Libdata.h \ glue.c glue.h \ URLgen.c URLgen.h \ Tcl_Interface.c Tcl_Interface.h \ Enumerations.c Enumerations.h \ tclAppInit.c libwww/Library/Test/src/Tcl_Interface.c0100644000076400001440000003164606206665557017564 0ustar danielusers#include "HText.h" #include "WWWApp.h" #include "WWWInit.h" #include "Tcl_Interface.h" #define bad_vars "Invalid variable names or non-existent entries." #define err_string "wrong # args: should be " #define DEFAULT_FORMAT WWW_SOURCE #define STDOUT stdout #define OUTPUT stdout #define DEFAULT_TIMEOUT 10 /* timeout in seconds */ #define SHOW_MSG (WWWTRACE || HTAlert_interactive()) typedef struct _Robot { HTRequest * request; HTRequest * timeout; /* Until we get a server eventloop */ HTParentAnchor * anchor; HTList * urilist; int count; HText * htext; struct timeval * tv; /* Timeout on socket */ char * cwd; /* Current dir URL */ char * outputfile; FILE * output; } Robot; typedef struct _TextAnchor { struct _TextAnchor * next; int number; /* For user interface */ HTChildAnchor * anchor; } TextAnchor; struct _HText { HTRequest * request; TextAnchor * first_anchor; TextAnchor * last_anchor; int anchors; }; /* ------------------------------------------------------------------------- */ /* HTEXT INTERFACE */ /* ------------------------------------------------------------------------- */ int HText_sourceAnchors (HText * text) { return (text ? text->anchors : -1); } HTChildAnchor * HText_childNumber (HText * text, int number) { TextAnchor * a; for (a = text->first_anchor; a; a = a->next) { if (a->number == number) return a->anchor; } return (HTChildAnchor *)0; /* Fail */ } HText * HText_new2 (HTRequest * request, HTParentAnchor * anchor, HTStream * stream) { HText * me; Robot * mr = (Robot *) HTRequest_context(request); if ((me = (HText *) HT_CALLOC(1, sizeof(HText))) == NULL) HT_OUTOFMEM("HText_new2"); /* Bind the HText object together with the Request Object */ me->request = request; me->first_anchor = me->last_anchor = 0; me->anchors = 0; /* Add this HText object to our list */ mr->htext = me; return me; } void HText_free (HText * me) { if (me) HT_FREE (me); } void HText_beginAnchor (HText * text, HTChildAnchor * anchor) { TextAnchor * a; if (text && anchor) { Robot * mr = (Robot *) HTRequest_context(text->request); HTAnchor * dest = HTAnchor_followMainLink((HTAnchor *) anchor); HTParentAnchor * dest_parent = HTAnchor_parent(dest); char * uri = HTAnchor_address((HTAnchor *) dest_parent); #if 0 if (SHOW_MSG) HTTrace("Robot....... Found `%s\' \n", uri ? uri : "NULL"); #endif if (uri) { HTList_addObject(mr->urilist, (void *) uri); mr->count++; } if ((a = (TextAnchor *) HT_MALLOC(sizeof(*a))) == NULL) HT_OUTOFMEM("HText_beginAnchor"); if (text->last_anchor) { text->last_anchor->next = a; } else { text->first_anchor = a; } a->next = 0; a->anchor = anchor; text->last_anchor = a; if (HTAnchor_followMainLink((HTAnchor*)anchor)) { a->number = ++(text->anchors); } else { a->number = 0; } } } void HText_appendImage (HText * text, HTChildAnchor * anchor, const char *alt, const char * align, BOOL isMap) { if (text && anchor) { HTParentAnchor * dest = (HTParentAnchor *) HTAnchor_followMainLink((HTAnchor *) anchor); char * uri = HTAnchor_address((HTAnchor *) dest); if (SHOW_MSG) { HTTrace("Image %s", uri); } HT_FREE(uri); } } void HText_endAnchor (HText * text) {} void HText_appendText (HText * text, const char * str) {} void HText_appendCharacter (HText * text, char ch) {} void HText_endAppend (HText * text) {} void HText_setStyle (HText * text, HTStyle * style) {} void HText_beginAppend (HText * text) {} void HText_appendParagraph (HText * text) {} PRIVATE Robot * Robot_new (void) { Robot * me; if ((me = (Robot *) HT_CALLOC(1, sizeof(Robot))) == NULL || (me->tv = (struct timeval*) HT_CALLOC(1, sizeof(struct timeval))) == NULL) HT_OUTOFMEM("Robot_new"); me->htext = 0; me->tv->tv_sec = DEFAULT_TIMEOUT; me->cwd = HTGetCurrentDirectoryURL(); me->output = OUTPUT; me->urilist = HTList_new(); me->count = 0; /* We keep an extra timeout request object for the timeout_handler */ me->timeout = HTRequest_new(); /* Bind the Robot object together with the Request Object */ me->request = HTRequest_new(); HTRequest_setContext (me->request, me); HTRequest_setPreemptive(me->request, YES); /* Make a new profile */ HTProfile_newPreemptiveRobot ("w3clibtcl", "1.0"); return me; } /* Delete a Command Line Object ** ---------------------------- */ PRIVATE BOOL Robot_delete (Robot * me) { if (me) { if (me->urilist) { HTList *cur = me->urilist; char *temp; while ((temp = (char *) HTList_nextObject(cur))) { HT_FREE(temp); } HTList_delete(cur); } if (me->htext) { HText_free(me->htext); } if (me->output && me->output != STDOUT) fclose(me->output); HT_FREE(me->cwd); HT_FREE(me->tv); /* Delete the profile */ #if 0 HTProfile_delete(); #endif HT_FREE(me); return YES; } return NO; } /* MAIN TCL PROCS */ #if 0 char *Reference_List (HText *text, BOOL titles) { char *temp = malloc(1000); char *output = malloc(1000); int refs = HText_sourceAnchors(text); if (refs <= 0) { return("\n\nThere are no references from this document.\n\n"); } else { int cnt; StrAllocCat(output,"\n*** References from this document ***\n"); for (cnt=1; cnt<=refs; cnt++) { HTAnchor *dest = HTAnchor_followMainLink((HTAnchor *) HText_childNumber(text, cnt)); HTParentAnchor * parent = HTAnchor_parent(dest); char * address = HTAnchor_address(dest); const char * title = titles ? HTAnchor_title(parent) : NULL; sprintf(temp, "[%d] ", cnt); StrAllocCat(output, temp); sprintf(temp, "%s\n", (char *)(title ? title : address)); StrAllocCat(output, temp); HT_FREE(address); } } } #endif #if 1 char *Reference_List (Robot *mr) { HTList *copy = mr->urilist; char *output = NULL; char *number = malloc(sizeof("9999 :")); char *index = malloc(1000); int i = 1; int refs = HText_sourceAnchors(mr->htext); if (refs <= 0) { return("\n\nThere are no references from this document.\n\n"); } else { StrAllocCat(output, "List of references: \n"); sprintf(number, "%d total references\n", mr->count); while ((index = (char *) HTList_nextObject(copy))) { sprintf(number, "[%d] : ", i++); StrAllocCat(output, number); StrAllocCat(output, index); StrAllocCat(output, "\n"); HT_FREE(index); } HTList_delete(copy); return(output); } } #endif int getURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc >= 3) { char *listcheck = argv[1]; char *url = argv[2]; char * traceflags = argc==4 ? argv[3] : ""; if (url && (strcmp(listcheck, "listrefs")==0)) { /* Create a new robot object */ Robot *robot = Robot_new(); /* Turn on trace messages */ if (argc==4) HTSetTraceMessageMask(traceflags); /* Set up the HTML parser */ { HTList * converters = HTFormat_conversion(); HTMLInit(converters); } /* Find an anchor and load it */ robot->anchor = (HTParentAnchor *) HTAnchor_findAddress(url); HTLoadAnchor((HTAnchor *) robot->anchor, robot->request); /* Update TcL return */ Tcl_AppendResult(interp, Reference_List(robot), NULL); Robot_delete(robot); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } if (argc == 2) { char *url = argv[1]; if (url) { /* Create a new robot object */ Robot *robot = Robot_new(); HTChunk *chunk = 0; /* Find an anchor and load it */ HTRequest_setOutputFormat(robot->request, WWW_SOURCE); chunk = HTLoadToChunk(url, robot->request); /* Update TcL return */ Tcl_AppendResult(interp, HTChunkData(chunk), NULL); Robot_delete(robot); HTChunk_delete(chunk); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } Tcl_AppendResult(interp, err_string, argv[0], " [listrefs] url traceflags", NULL); return TCL_ERROR; } int putURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *url = argv[1]; char *dest = argv[2]; if (url && dest) { HTParentAnchor *source = (HTParentAnchor *) HTAnchor_findAddress(url); HTRequest *req = HTRequest_new(); HTChunk *chunk = HTChunk_new(0x2000); HTStream *stream = HTStreamToChunk(req, &chunk, 0); BOOL work; HTRequest_setOutputFormat(req, DEFAULT_FORMAT); HTRequest_setOutputStream(req, stream); HTRequest_setPreemptive(req, YES); work = HTPutAbsolute (source, dest, req); Tcl_AppendResult(interp, work ? "YES" : "NO", HTChunkData(chunk), NULL); HT_FREE(url); HTRequest_kill(req); HTAnchor_delete(source); HT_FREE(stream); HTChunkFree(chunk); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " url destination", NULL); return TCL_ERROR; } } int deleteURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *url = argv[1]; if (url) { HTRequest *req = HTRequest_new(); HTChunk *chunk = HTChunk_new(0x2000); HTStream *stream = HTStreamToChunk(req, &chunk, 0); BOOL work; HTRequest_setOutputFormat(req, DEFAULT_FORMAT); HTRequest_setOutputStream(req, stream); HTRequest_setPreemptive(req, YES); work = HTDeleteAbsolute(url, req); Tcl_AppendResult(interp, work ? "YES" : "NO", HTChunkData(chunk), NULL); HT_FREE(url); HTRequest_kill(req); HT_FREE(stream); HTChunkFree(chunk); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " url", NULL); return TCL_ERROR; } } int postURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { char *url = argv[1]; char *dest = argv[2]; if (url && dest) { HTParentAnchor *source = (HTParentAnchor *) HTAnchor_findAddress(url); HTRequest *req = HTRequest_new(); HTChunk *chunk = HTChunk_new(0x2000); HTStream *stream = HTStreamToChunk(req, &chunk, 0); BOOL work; HTRequest_setOutputFormat(req, DEFAULT_FORMAT); HTRequest_setOutputStream(req, stream); HTRequest_setPreemptive(req, YES); work = HTPostAbsolute (source, dest, req); Tcl_AppendResult(interp, work ? "YES" : "NO", HTChunkData(chunk), NULL); HT_FREE(url); HTRequest_kill(req); HTAnchor_delete(source); HT_FREE(stream); HTChunkFree(chunk); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " url destination", NULL); return TCL_ERROR; } } int traceURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *url = argv[1]; if (url) { HTRequest *req = HTRequest_new(); BOOL work; HTChunk *chunk = HTChunk_new(0x2000); HTStream *stream = HTStreamToChunk(req, &chunk, 0); HTRequest_setOutputFormat(req, DEFAULT_FORMAT); /* HTRequest_setOutputStream(req, stream);*/ HTRequest_setPreemptive(req, YES); work = HTTraceAbsolute(url, req); Tcl_AppendResult(interp, work ? "YES" : "NO", HTChunkData(chunk), NULL); HT_FREE(url); HTRequest_kill(req); HT_FREE(stream); HTChunkFree(chunk); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " url", NULL); return TCL_ERROR; } } int optionsURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *url = argv[1]; if (url) { HTRequest *req = HTRequest_new(); BOOL work; HTChunk *chunk = HTChunk_new(0x2000); HTStream *stream = HTStreamToChunk(req, &chunk, 0); HTRequest_setOutputFormat(req, DEFAULT_FORMAT); HTRequest_setOutputStream(req, stream); HTRequest_setPreemptive(req, YES); work = HTOptionsAbsolute(url, req); Tcl_AppendResult(interp, work ? "YES" : "NO", HTChunkData(chunk), NULL); HT_FREE(url); HTRequest_kill(req); HT_FREE(stream); HTChunkFree(chunk); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " url", NULL); return TCL_ERROR; } } libwww/Library/Test/src/Tcl_Interface.h0100644000076400001440000000065706206665575017567 0ustar danielusers#include "tcl.h" #include "WWWLib.h" extern int getURL_tcl(ClientData, Tcl_Interp *, int, char **); extern int putURL_tcl(ClientData, Tcl_Interp *, int, char **); extern int deleteURL_tcl(ClientData, Tcl_Interp *, int, char **); extern int postURL_tcl(ClientData, Tcl_Interp *, int, char **); extern int optionsURL_tcl(ClientData, Tcl_Interp *, int, char **); extern int traceURL_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/URLgen.c0100644000076400001440000002353606206410715016175 0ustar danielusers#include #include #include"tcl.h" #include"WWWLib.h" /* Additional function to create random urls according to rfc1738 */ /* Also, try to make it, such that it returns the component parts. */ #define lowalpha "abcdefghijklmnopqrstuvwxyz" #define highalpha "ABCDEFGHIJKLMNOPQRSTUVWXYZ" #define alpha "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" #define digit "0123456789" #define alphadigit "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" #define safe "$-_.+" #define extra "!*'()," #define national "{}|\\^~[]`" #define punctuation "<>#%\"" #define hex "0123456789ABCDEFabcdef" #define reserved ";/?:@&=" char *unreserved; int unreserved_length = 73; int HTRandom(int); void init_strings() { unreserved = malloc(73); StrAllocCat(unreserved, alpha); StrAllocCat(unreserved, digit); StrAllocCat(unreserved, safe); StrAllocCat(unreserved, extra); } char *generate_char(char *str) { int index = HTRandom((int) strlen(str)); char *result = malloc(sizeof(str[index])); sprintf(result, "%c", str[index]); return (result); } char *generate_escape() { char *escape=malloc(3); StrAllocCat(escape, "%"); if (HTRandom(1)) { StrAllocCat(escape, generate_char("0123456789ABCDEF")); StrAllocCat(escape, generate_char("0123456789ABCDEF")); } else { StrAllocCat(escape, generate_char("0123456789abcdef")); StrAllocCat(escape, generate_char("0123456789abcdef")); } return (escape); } char *generate_unreserved() { int index = HTRandom((int) strlen(unreserved)); char *result = malloc(sizeof(unreserved[index])); sprintf(result, "%c", unreserved[index]); return (result); } char *generate_uchar(char *addition) { char *result = malloc(3); int len = (int) strlen(addition); char *str = malloc(unreserved_length+len); int total = unreserved_length + len + 50; int index = HTRandom(total); if (index > (unreserved_length+len)) { result = generate_escape(); } else { StrAllocCat(str, unreserved); StrAllocCat(str, addition); sprintf(result, "%c", str[index]); } return (result); } char *generate_xchar() { char *result = malloc(3); char *str = malloc(unreserved_length+7); int total = unreserved_length + 7 + 50; int index = HTRandom(total); if (index > (unreserved_length+7)) { result = generate_escape(); } else { StrAllocCat(str, unreserved); StrAllocCat(str, reserved); sprintf(result, "%c", str[index]); } return (result); } char *add_item(int size, char *start, char *str) { char *search = malloc(size); int length = HTRandom(size); int i; StrAllocCat(search, start); if (!length) length = 1; for (i = 1; i <= length; i++) { StrAllocCat(search, generate_char(str)); } return(search); } char *add_uitem(int size, char *start, char *str) { char *search = malloc(size); int length = HTRandom(size); int i; StrAllocCat(search, start); /* if (!length) length = 1;*/ for (i = 1; i <= length; i++) { StrAllocCat(search, generate_uchar(str)); } return(search); } char *add_xitem(int size, char *start) { char *search = malloc(size); int length = HTRandom(size); int i; StrAllocCat(search, start); if (!length) length = 1; for (i = 1; i <= length; i++) { StrAllocCat(search, generate_xchar()); } return(search); } char *generate_scheme() { char *gen_str = malloc(sizeof(lowalpha)+13); StrAllocCat(gen_str, lowalpha); StrAllocCat(gen_str, digit); StrAllocCat(gen_str, "+-."); return(add_item(10, "", gen_str)); } char *generate_host() { char *host = malloc(91); int i, j, length; int num = HTRandom(5); /*Domain label, alphadigit | alphadigit *[ alphadigit } "-" ] alphadigit */ for (i = 1; i < num; i++) { if (HTRandom(1)) StrAllocCat(host, generate_char(alphadigit)); else { StrAllocCat(host, generate_char(alphadigit)); length = HTRandom(13); for (j = 1; j <= length; j++) { if (HTRandom(10) > 9) StrAllocCat(host, "-"); else StrAllocCat(host, generate_char(alphadigit)); } StrAllocCat(host, generate_char(alphadigit)); StrAllocCat(host, "."); } } /* Top Label, alpha | alpha *[ alphadigit | "-" ] alphadigit */ if (HTRandom(1)) StrAllocCat(host, generate_char(alpha)); else { StrAllocCat(host, generate_char(alpha)); length = HTRandom(13); for (j = 1; j <= length; j++) { if (HTRandom(10) > 9) StrAllocCat(host, "-"); else StrAllocCat(host, generate_char(alphadigit)); } StrAllocCat(host, generate_char(alphadigit)); } return(host); } char *generate_hostport() { char *hostport = malloc(100); char *nums = malloc(sizeof("255.255.255.255")); /*for address */ if (HTRandom(3)) { StrAllocCat(hostport, generate_host()); } /* for actual ip numbers */ else { sprintf(nums, "%d.%d.%d.%d",HTRandom(255),HTRandom(255),HTRandom(255),HTRandom(255)); StrAllocCat(hostport, nums); } /* For port num */ if (HTRandom(1)) { sprintf(nums, ":%d",HTRandom(9999)); StrAllocCat(hostport, nums); } return(hostport); } char *generate_login() { char *login = malloc(150); /* char *port = malloc(sizeof("9999"));*/ /* int parts = HTRandom(4);*/ /* user and password */ if (HTRandom(1)) { StrAllocCat(login, add_uitem(15,"",";?&=")); if (HTRandom(1)) { StrAllocCat(login, add_uitem(15,":",";?&=")); } StrAllocCat(login, "@"); } StrAllocCat(login, generate_hostport()); return(login); } int generate_login_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { Tcl_AppendResult(interp, generate_login(), NULL); return TCL_OK; } return TCL_ERROR; } char *generate_urlpath(int size) { /* char *path = malloc(size);*/ return(add_xitem(HTRandom(size),"")); } char *ftpURL() { char *url = malloc(200); int number = HTRandom(8); int i; StrAllocCat(url, "ftp://"); StrAllocCat(url, generate_login()); /* fpath */ if (HTRandom(1)) { if (!number) number = 1; for (i = 1; i <= number; i++) { StrAllocCat(url, "/"); StrAllocCat(url, generate_uchar("?:@&=")); } /* ftptype */ if (HTRandom(5) > 4) { StrAllocCat(url, ";type="); StrAllocCat(url, generate_char("AIDaid")); } } return(url); } char *httpURL() { char *url = malloc(200); int number = HTRandom(8); int i; StrAllocCat(url, "http://"); StrAllocCat(url, generate_hostport()); /* hpath */ if (HTRandom(1)) { if (!number) number = 1; for (i = 1; i <= number; i++) { StrAllocCat(url, "/"); StrAllocCat(url, generate_uchar(";:@&=")); } /* search */ if (HTRandom(5) > 4) { StrAllocCat(url, "?"); StrAllocCat(url, generate_uchar(";:@&=")); } } return(url); } char *gopherURL() { char *url = malloc(200); StrAllocCat(url, "gopher://"); StrAllocCat(url, generate_hostport()); if (HTRandom(1)) { StrAllocCat(url, "/"); if (HTRandom(2)) { /* gtype */ StrAllocCat(url, generate_xchar()); if (HTRandom(2)) { /* selector */ StrAllocCat(url, add_xitem(15,"")); if (HTRandom(1)) { StrAllocCat(url, "%09"); if (HTRandom(5) > 4) { StrAllocCat(url, "?"); StrAllocCat(url, generate_uchar(";:@&=")); if (HTRandom(1)) { StrAllocCat(url, "%09"); StrAllocCat(url, add_xitem(15,"")); } } } } } } return(url); } char *telnetURL() { char *url = malloc(200); StrAllocCat(url, "telnet://"); StrAllocCat(url, generate_login()); StrAllocCat(url, "/"); return(url); } /********************************/ int HTRandom(int n) { return rand() % (n + 1); } void random_seed() { srand(time(NULL)); } int generate_char_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *str = argv[1]; Tcl_AppendResult(interp, generate_char(str), NULL); return TCL_OK; } return TCL_ERROR; } /* TCL versions of functions */ int random_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { int n; char *result = malloc(50); if (Tcl_GetInt(interp, argv[1], &n) == TCL_OK) { sprintf(result, "%d", rand() % n); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } } return TCL_ERROR; } int add_item_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 4) { int size; char *int_str = argv[1]; char *start = argv[2]; char *str = argv[3]; if (start && str && (Tcl_GetInt(interp, int_str, &size) == TCL_OK)) { Tcl_AppendResult(interp, add_item(size,start,str), NULL); return TCL_OK; } } return TCL_ERROR; } int generate_genericurl_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { Tcl_AppendResult(interp, generate_scheme(),"://",generate_login(), "/",\ generate_urlpath(50), NULL); return TCL_OK; } return TCL_ERROR; } int ftpURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { Tcl_AppendResult(interp, ftpURL(), NULL); return TCL_OK; } return TCL_ERROR; } int httpURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { Tcl_AppendResult(interp, httpURL(), NULL); return TCL_OK; } return TCL_ERROR; } int gopherURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { Tcl_AppendResult(interp, gopherURL(), NULL); return TCL_OK; } return TCL_ERROR; } int telnetURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { Tcl_AppendResult(interp, telnetURL(), NULL); return TCL_OK; } return TCL_ERROR; } int generateURL_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { return TCL_OK; } libwww/Library/Test/src/URLgen.h0100644000076400001440000000124506206665575016213 0ustar danielusersextern void init_strings(void); extern int random_tcl(ClientData, Tcl_Interp *, int, char **); extern int generate_char_tcl(ClientData, Tcl_Interp *, int, char **); extern int add_item_tcl(ClientData, Tcl_Interp *, int, char **); extern int generate_login_tcl(ClientData, Tcl_Interp *, int, char **); extern int generate_genericurl_tcl(ClientData, Tcl_Interp *, int, char **); extern void random_seed(void); extern int ftpURL_tcl(ClientData, Tcl_Interp *, int, char **); extern int httpURL_tcl(ClientData, Tcl_Interp *, int, char **); extern int gopherURL_tcl(ClientData, Tcl_Interp *, int, char **); extern int telnetURL_tcl(ClientData, Tcl_Interp *, int, char **); libwww/Library/Test/src/glue.c0100644000076400001440000011534306215042120015762 0ustar danielusers#include "tcl.h" #include "WWWLib.h" #include "WWWInit.h" #include "HText.h" #include "HTParse_glue.h" #include "HTAnchor_glue.h" #include "HTReq_glue.h" #include "HTLink_glue.h" #include "HTList_glue.h" #include "HTFWriter_glue.h" #include "HTAssoc_glue.h" #include "HTUser_glue.h" #include "HTAccess_glue.h" #include "HTBind_glue.h" #include "HTHost_glue.h" #include "URLgen.h" #include "Tcl_Interface.h" #include "HTFormat_glue.h" #include "HTProt_glue.h" #include "HTLog_glue.h" #include "HTError_glue.h" #include "HTAlert_glue.h" #include "HTDNS_glue.h" #include "HTUTree_glue.h" #include "HTTrans_glue.h" #include "HTNet_glue.h" #include "HTInet_glue.h" #define CMDLINE 1 #define APP_NAME "WWWtest" #define APP_VERSION "1.0" #define bad_vars "Invalid variable names or non-existent entries." #define err_string "Wrong # of args\n" char *HTAppVersion = NULL; char *HTApp_Name = NULL; HTStyleSheet *styleSheet = NULL; Tcl_HashTable HTableAnchor; Tcl_HashTable HTableLink; Tcl_HashTable HTableList; Tcl_HashTable HTableReq; Tcl_HashTable HTableStream; Tcl_HashTable HTableVoid; Tcl_HashTable HTableUser; Tcl_HashTable HTableAssoc; Tcl_HashTable HTableCallback; Tcl_HashTable HTableHost; Tcl_HashTable HTableChannel; Tcl_HashTable HTableChunk; Tcl_HashTable HTableProt; Tcl_HashTable HTableConverter; Tcl_HashTable HTableCoder; Tcl_HashTable HTableAlertCallback; Tcl_HashTable HTableAlertPar; Tcl_HashTable HTableError; Tcl_HashTable HTableMIMEParseSet; Tcl_HashTable HTableCallback; Tcl_HashTable HTableNet; Tcl_HashTable HTableDNS; Tcl_HashTable HTableTrans; typedef struct{ char *name; Tcl_CmdProc *proc; ClientData data; int flags; } LibraryFunction; static int version_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 1) { Tcl_AppendResult(interp, APP_NAME , APP_VERSION, NULL); return TCL_OK; } else { Tcl_AppendResult(interp, err_string, argv[0], NULL); return TCL_ERROR; } } /*HTEscape*/ static int HTEscape_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 3) { int mask; char *str = argv[1]; if (str && (Tcl_GetInt(interp, argv[2], &mask) == TCL_OK)) { char *result = HTEscape(str, mask); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " string mask", NULL); return TCL_ERROR; } } static int HTUnEscape_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) { if (argc == 2) { char *str = argv[1]; if (str) { char *result = HTUnEscape(str); Tcl_AppendResult(interp, result, NULL); return TCL_OK; } Tcl_AppendResult(interp, bad_vars, NULL); return TCL_ERROR; } else { Tcl_AppendResult(interp, err_string, argv[0], " string", NULL); return TCL_ERROR; } } static LibraryFunction www_commands[] = { /* TCL INTERFACE */ { "getURL", getURL_tcl, NULL, 0 }, { "putURL", putURL_tcl, NULL, 0 }, { "deleteURL", deleteURL_tcl, NULL, 0 }, { "postURL", postURL_tcl, NULL, 0 }, { "optionsURL", optionsURL_tcl, NULL, 0 }, { "traceURL", traceURL_tcl, NULL, 0 }, /* RANDOM GENERAL FUNCTIONS */ { "version", version_tcl, NULL, 0 }, { "random", random_tcl, NULL, 0 }, { "generate_char", generate_char_tcl, NULL, 0 }, { "add_item", add_item_tcl, NULL, 0 }, { "generate_login", generate_login_tcl, NULL, 0 }, { "generate_genericurl", generate_genericurl_tcl, NULL, 0 }, { "ftpURL", ftpURL_tcl, NULL, 0 }, { "httpURL", httpURL_tcl, NULL, 0 }, { "gopherURL", gopherURL_tcl, NULL, 0 }, { "telnetURL", telnetURL_tcl, NULL, 0 }, /*HTParse*/ { "HTParse" , HTParse_tcl, NULL, 0 }, { "HTSimplify", HTSimplify_tcl, NULL, 0 }, { "HTRelative", HTRelative_tcl, NULL, 0 }, { "HTCleanTelnetString", HTCleanTelnetString_tcl, NULL, 0 }, /*HTEscape*/ { "HTEscape" , HTEscape_tcl, NULL, 0 }, { "HTUnEscape", HTUnEscape_tcl, NULL, 0 }, /*HTAnchor*/ { "HTAnchor_findAddress", HTAnchor_findAddress_tcl, NULL, 0 }, { "HTAnchor_findChild", HTAnchor_findChild_tcl, NULL, 0 }, { "HTAnchor_findChildAndLink",HTAnchor_findChildAndLink_tcl, NULL, 0 }, { "HTAnchor_delete", HTAnchor_delete_tcl, NULL, 0 }, { "HTAnchor_deleteAll", HTAnchor_deleteAll_tcl, NULL, 0 }, { "HTAnchor_setMainLink", HTAnchor_setMainLink_tcl, NULL, 0 }, { "HTAnchor_mainLink", HTAnchor_mainLink_tcl, NULL, 0 }, { "HTAnchor_followMainLink", HTAnchor_followMainLink_tcl, NULL, 0 }, { "HTAnchor_setSubLinks", HTAnchor_setSubLinks_tcl, NULL, 0 }, { "HTAnchor_subLinks", HTAnchor_subLinks_tcl, NULL, 0 }, { "HTAnchor_parent", HTAnchor_parent_tcl, NULL, 0 }, { "HTAnchor_hasChildren", HTAnchor_hasChildren_tcl, NULL, 0 }, { "HTAnchor_address", HTAnchor_address_tcl, NULL, 0 }, { "HTAnchor_expandedAddress", HTAnchor_expandedAddress_tcl, NULL, 0 }, { "HTAnchor_physical", HTAnchor_physical_tcl, NULL, 0 }, { "HTAnchor_setPhysical", HTAnchor_setPhysical_tcl, NULL, 0 }, { "HTAnchor_clearPhysical", HTAnchor_clearPhysical_tcl, NULL, 0 }, { "HTAnchor_setDocument", HTAnchor_setDocument_tcl, NULL, 0 }, { "HTAnchor_document", HTAnchor_document_tcl, NULL, 0 }, { "HTAnchor_clearHeader", HTAnchor_clearHeader_tcl, NULL, 0 }, #if 0 { "HTAnchor_cacheHit", HTAnchor_cacheHit_tcl, NULL, 0 }, { "HTAnchor_setCacheHit", HTAnchor_setCacheHit_tcl, NULL, 0 }, #endif { "HTAnchor_clearIndex", HTAnchor_clearIndex_tcl, NULL, 0 }, { "HTAnchor_setIndex", HTAnchor_setIndex_tcl, NULL, 0 }, { "HTAnchor_isIndex", HTAnchor_isIndex_tcl, NULL, 0 }, { "HTAnchor_title", HTAnchor_title_tcl, NULL, 0 }, { "HTAnchor_setTitle", HTAnchor_setTitle_tcl, NULL, 0 }, { "HTAnchor_appendTitle", HTAnchor_appendTitle_tcl, NULL, 0 }, { "HTAnchor_base", HTAnchor_base_tcl, NULL, 0 }, { "HTAnchor_setBase", HTAnchor_setBase_tcl, NULL, 0 }, { "HTAnchor_location", HTAnchor_location_tcl, NULL, 0 }, { "HTAnchor_setLocation", HTAnchor_setLocation_tcl, NULL, 0 }, { "HTAnchor_format", HTAnchor_format_tcl, NULL, 0 }, { "HTAnchor_setFormat", HTAnchor_setFormat_tcl, NULL, 0 }, { "HTAnchor_formatParam", HTAnchor_formatParam_tcl, NULL, 0 }, { "HTAnchor_addFormatParam", HTAnchor_addFormatParam_tcl, NULL, 0 }, { "HTAnchor_charset", HTAnchor_charset_tcl, NULL, 0 }, { "HTAnchor_setCharset", HTAnchor_setCharset_tcl, NULL, 0 }, { "HTAnchor_level", HTAnchor_level_tcl, NULL, 0 }, { "HTAnchor_setLevel", HTAnchor_setLevel_tcl, NULL, 0 }, { "HTAnchor_language", HTAnchor_language_tcl, NULL, 0 }, { "HTAnchor_addLanguage", HTAnchor_addLanguage_tcl, NULL, 0 }, { "HTAnchor_encoding", HTAnchor_encoding_tcl, NULL, 0 }, { "HTAnchor_addEncoding", HTAnchor_addEncoding_tcl, NULL, 0 }, { "HTAnchor_transfer", HTAnchor_transfer_tcl, NULL, 0 }, { "HTAnchor_setTransfer", HTAnchor_setTransfer_tcl, NULL, 0 }, { "HTAnchor_length", HTAnchor_length_tcl, NULL, 0 }, { "HTAnchor_setLength", HTAnchor_setLength_tcl, NULL, 0 }, { "HTAnchor_addLength", HTAnchor_addLength_tcl, NULL, 0 }, { "HTAnchor_md5", HTAnchor_md5_tcl, NULL, 0 }, { "HTAnchor_setMd5", HTAnchor_setMd5_tcl, NULL, 0 }, { "HTAnchor_methods", HTAnchor_methods_tcl, NULL, 0 }, { "HTAnchor_setMethods", HTAnchor_setMethods_tcl, NULL, 0 }, { "HTAnchor_appendMethods", HTAnchor_appendMethods_tcl, NULL, 0 }, { "HTAnchor_version", HTAnchor_version_tcl, NULL, 0 }, { "HTAnchor_setVersion", HTAnchor_setVersion_tcl, NULL, 0 }, { "HTAnchor_date", HTAnchor_date_tcl, NULL, 0 }, { "HTAnchor_setDate", HTAnchor_setDate_tcl, NULL, 0 }, { "HTAnchor_lastModified", HTAnchor_lastModified_tcl, NULL, 0 }, { "HTAnchor_setLastModified", HTAnchor_setLastModified_tcl, NULL, 0 }, { "HTAnchor_etag", HTAnchor_etag_tcl, NULL, 0 }, { "HTAnchor_setEtag", HTAnchor_setEtag_tcl, NULL, 0 }, { "HTAnchor_isEtagWeak", HTAnchor_isEtagWeak_tcl, NULL, 0 }, { "HTAnchor_expires", HTAnchor_expires_tcl, NULL, 0 }, { "HTAnchor_setExpires", HTAnchor_setExpires_tcl, NULL, 0 }, { "HTAnchor_derived", HTAnchor_derived_tcl, NULL, 0 }, { "HTAnchor_setDerived", HTAnchor_setDerived_tcl, NULL, 0 }, #if 0 { "HTAnchor_extra", HTAnchor_extra_tcl, NULL, 0 }, { "HTAnchor_addExtra", HTAnchor_addExtra_tcl, NULL, 0 }, #endif /*Do we need HTAnchor_headerParsed???*/ /*HTLink -> Mostly removed from HTAnchor */ { "HTLink_new", HTLink_new_tcl, NULL, 0 }, { "HTLink_delete", HTLink_delete_tcl, NULL, 0 }, { "HTLink_removeAll", HTLink_removeAll_tcl, NULL, 0 }, { "HTLink_add", HTLink_add_tcl, NULL, 0 }, { "HTLink_remove", HTLink_remove_tcl, NULL, 0 }, { "HTLink_find", HTLink_find_tcl, NULL, 0 }, { "HTLink_setDestination", HTLink_setDestination_tcl, NULL, 0 }, { "HTLink_destination", HTLink_destination_tcl, NULL, 0 }, { "HTLink_setType", HTLink_setType_tcl, NULL, 0 }, { "HTLink_type", HTLink_type_tcl, NULL, 0 }, { "HTLink_setMethod", HTLink_setMethod_tcl, NULL, 0 }, { "HTLink_method", HTLink_method_tcl, NULL, 0 }, { "HTLink_setResult", HTLink_setResult_tcl, NULL, 0 }, { "HTLink_result", HTLink_result_tcl, NULL, 0 }, /* HTLink_moveAll is public, just not in the .h file...perhaps next time. */ /* { "HTLink_moveAll", HTLink_moveAll_tcl, NULL, 0 },*/ /*HTList -> Just to create and utilize empty lists*/ { "HTList_new", HTList_new_tcl, NULL, 0 }, { "HTList_delete", HTList_delete_tcl, NULL, 0 }, /*HTFWriter -> Just to create and utilize streams*/ { "HTBlackHole", HTBlackHole_tcl, NULL, 0 }, { "HTErrorStream", HTErrorStream_tcl, NULL, 0 }, { "HTFWriter_new", HTFWriter_new_tcl, NULL, 0 }, /*HTReq*/ { "HTLoad", HTLoad_tcl, NULL, 0 }, { "HTRequest_kill", HTRequest_kill_tcl, NULL, 0 }, { "HTRequest_new", HTRequest_new_tcl, NULL, 0 }, { "HTRequest_clear", HTRequest_clear_tcl, NULL, 0 }, { "HTRequest_dup", HTRequest_dup_tcl, NULL, 0 }, { "HTRequest_dupInternal", HTRequest_dupInternal_tcl, NULL, 0 }, { "HTRequest_delete", HTRequest_delete_tcl, NULL, 0 }, { "HTRequest_setUserProfile",HTRequest_setUserProfile_tcl, NULL, 0 }, { "HTRequest_userProfile", HTRequest_userProfile_tcl, NULL, 0 }, { "HTRequest_setMethod", HTRequest_setMethod_tcl, NULL, 0 }, { "HTRequest_method", HTRequest_method_tcl, NULL, 0 }, { "HTRequest_setReloadMode",HTRequest_setReloadMode_tcl, NULL, 0 }, { "HTRequest_reloadMode", HTRequest_reloadMode_tcl, NULL, 0 }, { "HTRequest_setRedirection",HTRequest_setRedirection_tcl, NULL, 0 }, { "HTRequest_redirection", HTRequest_redirection_tcl, NULL, 0 }, { "HTRequest_addChallenge", HTRequest_addChallenge_tcl, NULL, 0 }, { "HTRequest_deleteChallenge",HTRequest_deleteChallenge_tcl,NULL, 0 }, { "HTRequest_challenge", HTRequest_challenge_tcl, NULL, 0 }, { "HTRequest_addCredentials",HTRequest_addCredentials_tcl, NULL, 0 }, { "HTRequest_deleteCredentials",HTRequest_deleteCredentials_tcl,NULL, 0 }, { "HTRequest_credentials", HTRequest_credentials_tcl, NULL, 0 }, { "HTRequest_setRealm", HTRequest_setRealm_tcl, NULL, 0 }, { "HTRequest_realm", HTRequest_realm_tcl, NULL, 0 }, { "HTRequest_setScheme", HTRequest_setScheme_tcl, NULL, 0 }, { "HTRequest_scheme", HTRequest_scheme_tcl, NULL, 0 }, { "HTRequest_setMaxRetry", HTRequest_setMaxRetry_tcl, NULL, 0 }, { "HTRequest_maxRetry", HTRequest_maxRetry_tcl, NULL, 0 }, { "HTRequest_retrys", HTRequest_retrys_tcl, NULL, 0 }, { "HTRequest_doRetry", HTRequest_doRetry_tcl, NULL, 0 }, { "HTRequest_retryTime", HTRequest_retryTime_tcl, NULL, 0 }, { "HTRequest_setConversion",HTRequest_setConversion_tcl, NULL, 0 }, { "HTRequest_conversion", HTRequest_conversion_tcl, NULL, 0 }, { "HTRequest_setEncoding", HTRequest_setEncoding_tcl, NULL, 0 }, { "HTRequest_encoding", HTRequest_encoding_tcl, NULL, 0 }, { "HTRequest_setLanguage", HTRequest_setLanguage_tcl, NULL, 0 }, { "HTRequest_language", HTRequest_language_tcl, NULL, 0 }, { "HTRequest_setCharset", HTRequest_setCharset_tcl, NULL, 0 }, { "HTRequest_charset", HTRequest_charset_tcl, NULL, 0 }, { "HTRequest_setGnHd", HTRequest_setGnHd_tcl, NULL, 0 }, { "HTRequest_addGnHd", HTRequest_addGnHd_tcl, NULL, 0 }, { "HTRequest_gnHd", HTRequest_gnHd_tcl, NULL, 0 }, { "HTRequest_setRqHd", HTRequest_setRqHd_tcl, NULL, 0 }, { "HTRequest_addRqHd", HTRequest_addRqHd_tcl, NULL, 0 }, { "HTRequest_rqHd", HTRequest_rqHd_tcl, NULL, 0 }, { "HTRequest_setRsHd", HTRequest_setRsHd_tcl, NULL, 0 }, { "HTRequest_addRsHd", HTRequest_addRsHd_tcl, NULL, 0 }, { "HTRequest_rsHd", HTRequest_rsHd_tcl, NULL, 0 }, { "HTRequest_setEnHd", HTRequest_setEnHd_tcl, NULL, 0 }, { "HTRequest_addEnHd", HTRequest_addEnHd_tcl, NULL, 0 }, { "HTRequest_enHd", HTRequest_enHd_tcl, NULL, 0 }, { "HTRequest_setParent", HTRequest_setParent_tcl, NULL, 0 }, { "HTRequest_parent", HTRequest_parent_tcl, NULL, 0 }, { "HTRequest_setGenerator", HTRequest_setGenerator_tcl, NULL, 0 }, { "HTRequest_generator", HTRequest_generator_tcl, NULL, 0 }, { "HTRequest_setMIMEParseSet",HTRequest_setMIMEParseSet_tcl,NULL, 0 }, { "HTRequest_MIMEParseSet", HTRequest_MIMEParseSet_tcl, NULL, 0 }, { "HTRequest_setEntityAnchor",HTRequest_setEntityAnchor_tcl,NULL, 0 }, { "HTRequest_entityAnchor", HTRequest_entityAnchor_tcl, NULL, 0 }, { "HTRequest_setInputStream",HTRequest_setInputStream_tcl, NULL, 0 }, { "HTRequest_inputStream", HTRequest_inputStream_tcl, NULL, 0 }, { "HTRequest_isPostWeb", HTRequest_isPostWeb_tcl, NULL, 0 }, { "HTRequest_setSource", HTRequest_setSource_tcl, NULL, 0 }, { "HTRequest_source", HTRequest_source_tcl, NULL, 0 }, { "HTRequest_setOutputStream",HTRequest_setOutputStream_tcl,NULL, 0 }, { "HTRequest_outputStream", HTRequest_outputStream_tcl, NULL, 0 }, { "HTRequest_setOutputConnected",HTRequest_setOutputConnected_tcl,NULL, 0 }, { "HTRequest_outputConnected",HTRequest_outputConnected_tcl,NULL, 0 }, { "HTRequest_setOutputFormat",HTRequest_setOutputFormat_tcl,NULL, 0 }, { "HTRequest_outputFormat", HTRequest_outputFormat_tcl, NULL, 0 }, { "HTRequest_setDebugStream",HTRequest_setDebugStream_tcl, NULL, 0 }, { "HTRequest_debugStream", HTRequest_debugStream_tcl, NULL, 0 }, { "HTRequest_setDebugFormat",HTRequest_setDebugFormat_tcl, NULL, 0 }, { "HTRequest_debugFormat", HTRequest_debugFormat_tcl, NULL, 0 }, { "HTRequest_addBefore", HTRequest_addBefore_tcl, NULL, 0 }, { "HTRequest_deleteBefore", HTRequest_deleteBefore_tcl, NULL, 0 }, { "HTRequest_deleteBeforeAll",HTRequest_deleteBeforeAll_tcl,NULL, 0 }, { "HTRequest_before", HTRequest_before_tcl, NULL, 0 }, { "HTRequest_addAfter", HTRequest_addAfter_tcl, NULL, 0 }, { "HTRequest_deleteAfter", HTRequest_deleteAfter_tcl, NULL, 0 }, { "HTRequest_deleteAfterAll",HTRequest_deleteAfterAll_tcl, NULL, 0 }, { "HTRequest_after", HTRequest_after_tcl, NULL, 0 }, { "HTRequest_callback", HTRequest_callback_tcl, NULL, 0 }, { "HTRequest_setCallback", HTRequest_setCallback_tcl, NULL, 0 }, { "HTRequest_setContext", HTRequest_setContext_tcl, NULL, 0 }, { "HTRequest_context", HTRequest_context_tcl, NULL, 0 }, { "HTRequest_setPreemptive",HTRequest_setPreemptive_tcl, NULL, 0 }, { "HTRequest_preemptive", HTRequest_preemptive_tcl, NULL, 0 }, { "HTRequest_setPriority", HTRequest_setPriority_tcl, NULL, 0 }, { "HTRequest_priority", HTRequest_priority_tcl, NULL, 0 }, { "HTRequest_setAnchor", HTRequest_setAnchor_tcl, NULL, 0 }, { "HTRequest_anchor", HTRequest_anchor_tcl, NULL, 0 }, { "HTRequest_net", HTRequest_net_tcl, NULL, 0 }, { "HTRequest_setNet", HTRequest_setNet_tcl, NULL, 0 }, { "HTRequest_setNegotiation",HTRequest_setNegotiation_tcl, NULL, 0 }, { "HTRequest_negotiation", HTRequest_negotiation_tcl, NULL, 0 }, { "HTRequest_setFullURI", HTRequest_setFullURI_tcl, NULL, 0 }, { "HTRequest_fullURI", HTRequest_fullURI_tcl, NULL, 0 }, { "HTRequest_setError", HTRequest_setError_tcl, NULL, 0 }, { "HTRequest_error", HTRequest_error_tcl, NULL, 0 }, { "HTRequest_addError", HTRequest_addError_tcl, NULL, 0 }, { "HTRequest_addSystemError",HTRequest_addSystemError_tcl, NULL, 0 }, { "HTRequest_bytesRead", HTRequest_bytesRead_tcl, NULL, 0 }, { "HTRequest_bytesWritten", HTRequest_bytesWritten_tcl, NULL, 0 }, #if 0 { "HTRequest_setAccess", HTRequest_setAccess_tcl, NULL, 0 }, { "HTRequest_access", HTRequest_access_tcl, NULL, 0 }, #endif /* HTAssoc */ { "HTAssocList_new", HTAssocList_new_tcl, NULL, 0 }, { "HTAssocList_delete", HTAssocList_delete_tcl, NULL, 0 }, /* HTUser */ { "HTUserProfile_new", HTUserProfile_new_tcl, NULL, 0 }, { "HTUserProfile_new", HTUserProfile_new_tcl, NULL, 0 }, { "HTUserProfile_localize", HTUserProfile_localize_tcl, NULL, 0 }, { "HTUserProfile_delete", HTUserProfile_delete_tcl, NULL, 0 }, { "HTUserProfile_fqdn", HTUserProfile_fqdn_tcl, NULL, 0 }, { "HTUserProfile_setFqdn", HTUserProfile_setFqdn_tcl, NULL, 0 }, { "HTUserProfile_email", HTUserProfile_email_tcl, NULL, 0 }, { "HTUserProfile_setEmail", HTUserProfile_setEmail_tcl, NULL, 0 }, { "HTUserProfile_news", HTUserProfile_news_tcl, NULL, 0 }, { "HTUserProfile_setNews", HTUserProfile_setNews_tcl, NULL, 0 }, { "HTUserProfile_tmp", HTUserProfile_tmp_tcl, NULL, 0 }, { "HTUserProfile_setTmp", HTUserProfile_setTmp_tcl, NULL, 0 }, { "HTUserProfile_timezone", HTUserProfile_timezone_tcl, NULL, 0 }, { "HTUserProfile_setTimezone",HTUserProfile_setTimezone_tcl, NULL, 0 }, { "HTUserProfile_context", HTUserProfile_context_tcl, NULL, 0 }, { "HTUserProfile_setContext", HTUserProfile_setContext_tcl, NULL, 0 }, /* HTBind */ { "HTBind_int", HTBind_int_tcl, NULL, 0 }, { "HTBind_deleteAll", HTBind_deleteAll_tcl, NULL, 0 }, { "HTBind_caseSensitive", HTBind_caseSensitive_tcl, NULL, 0 }, { "HTBind_setDelimiters", HTBind_setDelimiters_tcl, NULL, 0 }, { "HTBind_add", HTBind_add_tcl, NULL, 0 }, { "HTBind_addType", HTBind_addType_tcl, NULL, 0 }, { "HTBind_addEncoding", HTBind_addEncoding_tcl, NULL, 0 }, { "HTBind_addTransfer", HTBind_addTransfer_tcl, NULL, 0 }, { "HTBind_addLanguage", HTBind_addLanguage_tcl, NULL, 0 }, { "HTBind_getSuffix", HTBind_getSuffix_tcl, NULL, 0 }, { "HTBind_getBindings", HTBind_getBindings_tcl, NULL, 0 }, { "HTBind_getFormat", HTBind_getFormat_tcl, NULL, 0 }, /*HTHost*/ {"HTHost_new", HTHost_new_tcl, NULL, 0 }, {"HTHost_class", HTHost_class_tcl, NULL, 0 }, {"HTHost_setClass", HTHost_setClass_tcl, NULL, 0 }, {"HTHost_version", HTHost_version_tcl, NULL, 0 }, {"HTHost_setVersion", HTHost_setVersion_tcl, NULL, 0 }, {"HTHost_setChannel", HTHost_setChannel_tcl, NULL, 0 }, {"HTHost_clearChannel", HTHost_clearChannel_tcl, NULL, 0 }, {"HTHost_channel", HTHost_channel_tcl, NULL, 0 }, {"HTHost_isPersistent", HTHost_isPersistent_tcl, NULL, 0 }, {"HTHost_persistTimeout", HTHost_persistTimeout_tcl, NULL, 0 }, {"HTHost_setPersistTimeout", HTHost_setPersistTimeout_tcl, NULL, 0 }, {"HTHost_setPersistExpires", HTHost_setPersistExpires_tcl, NULL, 0 }, {"HTHost_persistExpires", HTHost_persistExpires_tcl, NULL, 0 }, /* HTAccess */ { "HTLibInit", HTLibInit_tcl, NULL, 0 }, { "HTLibTerminate", HTLibTerminate_tcl, NULL, 0 }, { "HTLib_name", HTLib_name_tcl, NULL, 0 }, { "HTLib_version", HTLib_version_tcl, NULL, 0 }, { "HTLib_appVersion", HTLib_appVersion_tcl, NULL, 0 }, { "HTLib_secure", HTLib_secure_tcl, NULL, 0 }, { "HTLib_setSecure", HTLib_setSecure_tcl, NULL, 0 }, { "HTLib_userProfile", HTLib_userProfile_tcl, NULL, 0 }, { "HTLib_setUserProfile", HTLib_setUserProfile_tcl, NULL, 0 }, { "HTLoadAbsolute", HTLoadAbsolute_tcl, NULL, 0 }, { "HTLoadRelative", HTLoadRelative_tcl, NULL, 0 }, { "HTLoadToChunk", HTLoadToChunk_tcl, NULL, 0 }, { "HTLoadToFile", HTLoadToFile_tcl, NULL, 0 }, { "HTLoadToStream", HTLoadToStream_tcl, NULL, 0 }, { "HTLoadAnchor", HTLoadAnchor_tcl, NULL, 0 }, { "HTLoadAnchorToChunk", HTLoadAnchorToChunk_tcl, NULL, 0 }, { "HTLoadAnchorRecursive", HTLoadAnchorRecursive_tcl, NULL, 0 }, { "HTLoadRules", HTLoadRules_tcl, NULL, 0 }, { "HTSearchAbsolute", HTSearchAbsolute_tcl, NULL, 0 }, { "HTSearchRelative", HTSearchRelative_tcl, NULL, 0 }, { "HTSearchAnchor", HTSearchAnchor_tcl, NULL, 0 }, { "HTSearchString", HTSearchString_tcl, NULL, 0 }, { "HTGetFormAbsolute", HTGetFormAbsolute_tcl, NULL, 0 }, { "HTGetFormRelative", HTGetFormRelative_tcl, NULL, 0 }, { "HTGetFormAnchor", HTGetFormAnchor_tcl, NULL, 0 }, { "HTPostFormAbsolute", HTPostFormAbsolute_tcl, NULL, 0 }, { "HTPostFormRelative", HTPostFormRelative_tcl, NULL, 0 }, { "HTPostFormAnchor", HTPostFormAnchor_tcl, NULL, 0 }, { "HTHeadAbsolute", HTHeadAbsolute_tcl, NULL, 0 }, { "HTHeadRelative", HTHeadRelative_tcl, NULL, 0 }, { "HTHeadAnchor", HTHeadAnchor_tcl, NULL, 0 }, { "HTDeleteAbsolute", HTDeleteAbsolute_tcl, NULL, 0 }, { "HTDeleteRelative", HTDeleteRelative_tcl, NULL, 0 }, { "HTDeleteAnchor", HTDeleteAnchor_tcl, NULL, 0 }, { "HTPutAbsolute", HTPutAbsolute_tcl, NULL, 0 }, { "HTPutRelative", HTPutRelative_tcl, NULL, 0 }, { "HTPutAnchor", HTPutAnchor_tcl, NULL, 0 }, { "HTPutStructuredAbsolute",HTPutStructuredAbsolute_tcl, NULL, 0 }, { "HTPutStructuredRelative",HTPutStructuredRelative_tcl, NULL, 0 }, { "HTPutStructuredAnchor", HTPutStructuredAnchor_tcl, NULL, 0 }, { "HTPutDocumentAbsolute", HTPutDocumentAbsolute_tcl, NULL, 0 }, { "HTPutDocumentRelative", HTPutDocumentRelative_tcl, NULL, 0 }, { "HTPutDocumentAnchor", HTPutDocumentAnchor_tcl, NULL, 0 }, { "HTPostAbsolute", HTPostAbsolute_tcl, NULL, 0 }, { "HTPostRelative", HTPostRelative_tcl, NULL, 0 }, { "HTPostAnchor", HTPostAnchor_tcl, NULL, 0 }, { "HTOptionsAbsolute", HTOptionsAbsolute_tcl, NULL, 0 }, { "HTOptionsRelative", HTOptionsRelative_tcl, NULL, 0 }, { "HTOptionsAnchor", HTOptionsAnchor_tcl, NULL, 0 }, /* { "HTSearch", HTSearch_tcl, NULL, 0 }, */ { "HTCopyAnchor", HTCopyAnchor_tcl, NULL, 0 }, { "HTUploadAnchor", HTUploadAnchor_tcl, NULL, 0 }, { "HTUpload_callback", HTUpload_callback_tcl, NULL, 0 }, /*HTProt */ { "HTProtocol_add", HTProtocol_add_tcl, NULL, 0 }, { "HTProtocol_delete", HTProtocol_delete_tcl, NULL, 0 }, { "HTProtocol_deleteAll", HTProtocol_deleteAll_tcl, NULL, 0 }, { "HTProtocol_find", HTProtocol_find_tcl, NULL, 0 }, { "HTProtocol_client", HTProtocol_client_tcl, NULL, 0 }, { "HTProtocol_server", HTProtocol_server_tcl, NULL, 0 }, { "HTProtocol_preemptive", HTProtocol_preemptive_tcl, NULL, 0 }, { "HTProtocol_setTransport",HTProtocol_setTransport_tcl, NULL, 0 }, { "HTProtocol_transport", HTProtocol_transport_tcl, NULL, 0 }, /*HTFormat*/ { "HTPresentation_add", HTPresentation_add_tcl, NULL, 0 }, { "HTPresentation_deleteAll",HTPresentation_deleteAll_tcl, NULL, 0 }, { "HTConversion_add", HTConversion_add_tcl, NULL, 0 }, { "HTConversion_deleteAll", HTConversion_deleteAll_tcl, NULL, 0 }, { "HTCoding_add", HTCoding_add_tcl, NULL, 0 }, { "HTCoding_deleteAll", HTCoding_deleteAll_tcl, NULL, 0 }, { "HTCharset_add", HTCharset_add_tcl, NULL, 0 }, { "HTCharset_deleteAll", HTCharset_deleteAll_tcl, NULL, 0 }, { "HTLanguage_add", HTLanguage_add_tcl, NULL, 0 }, { "HTLanguage_deleteAll", HTLanguage_deleteAll_tcl, NULL, 0 }, { "HTFormat_setConversion", HTFormat_setConversion_tcl, NULL, 0 }, { "HTFormat_conversion", HTFormat_conversion_tcl, NULL, 0 }, { "HTFormat_addConversion", HTFormat_addConversion_tcl, NULL, 0 }, { "HTFormat_setContentCoding",HTFormat_setContentCoding_tcl,NULL, 0 }, { "HTFormat_contentCoding", HTFormat_contentCoding_tcl, NULL, 0 }, { "HTFormat_addCoding", HTFormat_addCoding_tcl, NULL, 0 }, { "HTFormat_setTransferCoding",HTFormat_setTransferCoding_tcl, NULL, 0}, { "HTFormat_transferCoding",HTFormat_transferCoding_tcl, NULL, 0 }, { "HTFormat_addTransferCoding", HTFormat_addTransferCoding_tcl, NULL, 0}, { "HTFormat_setLanguage", HTFormat_setLanguage_tcl, NULL, 0 }, { "HTFormat_language", HTFormat_language_tcl, NULL, 0 }, { "HTFormat_setCharset", HTFormat_setCharset_tcl, NULL, 0 }, { "HTFormat_charset", HTFormat_charset_tcl, NULL, 0 }, { "HTFormat_deleteAll", HTFormat_deleteAll_tcl, NULL, 0 }, { "HTStreamStack", HTStreamStack_tcl, NULL, 0 }, { "HTStackValue", HTStackValue_tcl, NULL, 0 }, { "HTContentCodingStack", HTContentCodingStack_tcl, NULL, 0 }, { "HTContentEncodingStack", HTContentEncodingStack_tcl, NULL, 0 }, { "HTContentDecodingStack", HTContentDecodingStack_tcl, NULL, 0 }, { "HTTransferCodingStack", HTTransferCodingStack_tcl, NULL, 0 }, /*HTLog*/ { "HTLog_open", HTLog_open_tcl, NULL, 0 }, { "HTLog_close", HTLog_close_tcl, NULL, 0 }, { "HTLog_isOpen", HTLog_isOpen_tcl, NULL, 0 }, { "HTLog_add", HTLog_add_tcl, NULL, 0 }, /*HTAlert*/ { "HTAlert_setInteractive", HTAlert_setInteractive_tcl, NULL, 0 }, { "HTAlert_interactive", HTAlert_interactive_tcl, NULL, 0 }, { "HTAlertCall_add", HTAlertCall_add_tcl, NULL, 0 }, { "HTAlertCall_delete", HTAlertCall_delete_tcl, NULL, 0 }, { "HTAlertCall_deleteAll", HTAlertCall_deleteAll_tcl, NULL, 0 }, { "HTAlertCall_find", HTAlertCall_find_tcl, NULL, 0 }, { "HTAlert_newReply", HTAlert_newReply_tcl, NULL, 0 }, { "HTAlert_deleteReply", HTAlert_deleteReply_tcl, NULL, 0 }, { "HTAlert_setReplyMessage",HTAlert_setReplyMessage_tcl, NULL, 0 }, { "HTAlert_assignReplyMessage",HTAlert_assignReplyMessage_tcl,NULL, 0}, { "HTAlert_replyMessage", HTAlert_replyMessage_tcl, NULL, 0 }, { "HTAlert_replySecret", HTAlert_replySecret_tcl, NULL, 0 }, { "HTAlert_setReplySecret", HTAlert_setReplySecret_tcl, NULL, 0 }, { "HTAlert_replyOutput", HTAlert_replyOutput_tcl, NULL, 0 }, { "HTAlert_setReplyOutput", HTAlert_setReplyOutput_tcl, NULL, 0 }, { "HTAlert_setGlobal", HTAlert_setGlobal_tcl, NULL, 0 }, { "HTAlert_global", HTAlert_global_tcl, NULL, 0 }, { "HTAlert_add", HTAlert_add_tcl, NULL, 0 }, { "HTAlert_delete", HTAlert_delete_tcl, NULL, 0 }, { "HTAlert_find", HTAlert_find_tcl, NULL, 0 }, /*HTError*/ { "HTError_add", HTError_add_tcl, NULL, 0 }, { "HTError_addSystem", HTError_addSystem_tcl, NULL, 0 }, { "HTError_deleteAll", HTError_deleteAll_tcl, NULL, 0 }, { "HTError_deleteLast", HTError_deleteLast_tcl, NULL, 0 }, { "HTError_doShow", HTError_doShow_tcl, NULL, 0 }, { "HTError_ignoreLast", HTError_ignoreLast_tcl, NULL, 0 }, { "HTError_setIgnore", HTError_setIgnore_tcl, NULL, 0 }, { "HTError_index", HTError_index_tcl, NULL, 0 }, { "HTError_severity", HTError_severity_tcl, NULL, 0 }, { "HTError_hasSeverity", HTError_hasSeverity_tcl, NULL, 0 }, { "HTError_parameter", HTError_parameter_tcl, NULL, 0 }, { "HTError_location", HTError_location_tcl, NULL, 0 }, /*HTDNS*/ { "HTDNS_setTimeout", HTDNS_setTimeout_tcl, NULL, 0 }, { "HTDNS_timeout", HTDNS_timeout_tcl, NULL, 0 }, { "HTDNS_add", HTDNS_add_tcl, NULL, 0 }, { "HTDNS_delete", HTDNS_delete_tcl, NULL, 0 }, { "HTDNS_deleteAll", HTDNS_deleteAll_tcl, NULL, 0 }, { "HTDNS_updateWeigths", HTDNS_updateWeigths_tcl, NULL, 0 }, { "HTGetHostBySock", HTGetHostBySock_tcl, NULL, 0 }, { "HTGetHostByName", HTGetHostByName_tcl, NULL, 0 }, /*HTUTree*/ { "HTUTree_delete", HTUTree_delete_tcl, NULL, 0 }, { "HTUTree_deleteAll", HTUTree_deleteAll_tcl, NULL, 0 }, { "HTUTree_find", HTUTree_find_tcl, NULL, 0 }, { "HTUTree_findNode", HTUTree_findNode_tcl, NULL, 0 }, { "HTUTree_addNode", HTUTree_addNode_tcl, NULL, 0 }, { "HTUTree_replaceNode", HTUTree_replaceNode_tcl, NULL, 0 }, { "HTUTree_deleteNode", HTUTree_deleteNode_tcl, NULL, 0 }, /*HTTrans*/ { "HTTransport_delete", HTTransport_delete_tcl, NULL, 0 }, { "HTTransport_deleteAll", HTTransport_deleteAll_tcl, NULL, 0 }, { "HTTransport_find", HTTransport_find_tcl, NULL, 0 }, { "HTTransport_mode", HTTransport_mode_tcl, NULL, 0 }, { "HTTransport_setMode", HTTransport_setMode_tcl, NULL, 0 }, /*HTNet*/ { "HTNetCall_deleteAll", HTNetCall_deleteAll_tcl, NULL, 0 }, { "HTNetCall_execute", HTNetCall_execute_tcl, NULL, 0 }, { "HTNet_setBefore", HTNet_setBefore_tcl, NULL, 0 }, { "HTNet_before", HTNet_before_tcl, NULL, 0 }, { "HTNet_callBefore", HTNet_callBefore_tcl, NULL, 0 }, { "HTNet_setAfter", HTNet_setAfter_tcl, NULL, 0 }, { "HTNet_after", HTNet_after_tcl, NULL, 0 }, { "HTNet_callAfter", HTNet_callAfter_tcl, NULL, 0 }, { "HTNet_setMaxSocket", HTNet_setMaxSocket_tcl, NULL, 0 }, { "HTNet_maxSocket", HTNet_maxSocket_tcl, NULL, 0 }, { "HTNet_increaseSocket", HTNet_increaseSocket_tcl, NULL, 0 }, { "HTNet_decreaseSocket", HTNet_decreaseSocket_tcl, NULL, 0 }, { "HTNet_availableSockets", HTNet_availableSockets_tcl, NULL, 0 }, { "HTNet_increasePersistentSocket",HTNet_increasePersistentSocket_tcl, NULL, 0 }, { "HTNet_decreasePersistentSocket", HTNet_decreasePersistentSocket_tcl, NULL, 0 }, { "HTNet_availablePersistentSockets", HTNet_availablePersistentSockets_tcl, NULL, 0 }, { "HTNet_isIdle", HTNet_isIdle_tcl, NULL, 0 }, { "HTNet_activeQueue", HTNet_activeQueue_tcl, NULL, 0 }, { "HTNet_idle", HTNet_idle_tcl, NULL, 0 }, { "HTNet_isEmpty", HTNet_isEmpty_tcl, NULL, 0 }, { "HTNet_pendingQueue", HTNet_pendingQueue_tcl, NULL, 0 }, { "HTNet_newClient", HTNet_newClient_tcl, NULL, 0 }, { "HTNet_newServer", HTNet_newServer_tcl, NULL, 0 }, { "HTNet_new", HTNet_new_tcl, NULL, 0 }, { "HTNet_dup", HTNet_dup_tcl, NULL, 0 }, { "HTNet_start", HTNet_start_tcl, NULL, 0 }, { "HTNet_delete", HTNet_delete_tcl, NULL, 0 }, { "HTNet_deleteAll", HTNet_deleteAll_tcl, NULL, 0 }, { "HTNet_wait", HTNet_wait_tcl, NULL, 0 }, { "HTNet_priority", HTNet_priority_tcl, NULL, 0 }, { "HTNet_setPriority", HTNet_setPriority_tcl, NULL, 0 }, { "HTNet_persistent", HTNet_persistent_tcl, NULL, 0 }, { "HTNet_setPersistent", HTNet_setPersistent_tcl, NULL, 0 }, { "HTNet_kill", HTNet_kill_tcl, NULL, 0 }, { "HTNet_killAll", HTNet_killAll_tcl, NULL, 0 }, { "HTNet_setContext", HTNet_setContext_tcl, NULL, 0 }, { "HTNet_context", HTNet_context_tcl, NULL, 0 }, { "HTNet_setSocket", HTNet_setSocket_tcl, NULL, 0 }, { "HTNet_socket", HTNet_socket_tcl, NULL, 0 }, { "HTNet_setRequest", HTNet_setRequest_tcl, NULL, 0 }, { "HTNet_request", HTNet_request_tcl, NULL, 0 }, { "HTNet_setTransport", HTNet_setTransport_tcl, NULL, 0 }, { "HTNet_transport", HTNet_transport_tcl, NULL, 0 }, { "HTNet_setChannel", HTNet_setChannel_tcl, NULL, 0 }, { "HTNet_channel", HTNet_channel_tcl, NULL, 0 }, { "HTNet_setHost", HTNet_setHost_tcl, NULL, 0 }, { "HTNet_host", HTNet_host_tcl, NULL, 0 }, { "HTNet_setDns", HTNet_setDns_tcl, NULL, 0 }, { "HTNet_dns", HTNet_dns_tcl, NULL, 0 }, { "HTNet_home", HTNet_home_tcl, NULL, 0 }, /*HTInet*/ { "HTErrnoString", HTErrnoString_tcl, NULL, 0 }, { "HTInetStatus", HTInetStatus_tcl, NULL, 0 }, { "HTParseInet", HTParseInet_tcl, NULL, 0 }, { "HTGetTimeZoneOffset", HTGetTimeZoneOffset_tcl, NULL, 0 }, { "HTGetHostName", HTGetHostName_tcl, NULL, 0 }, { "HTGetMailAddress", HTGetMailAddress_tcl, NULL, 0 }, { "HTGetNewsServer", HTGetNewsServer_tcl, NULL, 0 }, { "HTGetTmpFileName", HTGetTmpFileName_tcl, NULL, 0 }, { 0 } }; int WWWLib_Init(Tcl_Interp *interp) { LibraryFunction *c; #ifdef CMDLINE HTProfile_newClient(APP_NAME, APP_VERSION); #else HTLibInit(APP_NAME, APP_VERSION); #endif Tcl_InitHashTable(&HTableAnchor, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableLink, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableList, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableReq, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableStream, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableVoid, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableAssoc, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableUser, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableCallback, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableHost, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableChunk, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableProt, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableConverter, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableCoder, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableAlertCallback, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableAlertPar, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableError, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableMIMEParseSet, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableCallback, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableNet, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableDNS, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableTrans, TCL_STRING_KEYS); Tcl_InitHashTable(&HTableChannel, TCL_STRING_KEYS); random_seed(); init_strings(); for(c = www_commands; c->name; c++){ Tcl_CreateCommand(interp, c->name, c->proc, c->data, NULL /* delete proc???*/); } return TCL_OK; } void WWWLib_Terminate() { HTLibTerminate(); Tcl_DeleteHashTable(&HTableAnchor); Tcl_DeleteHashTable(&HTableLink); Tcl_DeleteHashTable(&HTableList); Tcl_DeleteHashTable(&HTableReq); Tcl_DeleteHashTable(&HTableStream); Tcl_DeleteHashTable(&HTableVoid); Tcl_DeleteHashTable(&HTableAssoc); Tcl_DeleteHashTable(&HTableUser); Tcl_DeleteHashTable(&HTableCallback); Tcl_DeleteHashTable(&HTableHost); Tcl_DeleteHashTable(&HTableChannel); Tcl_DeleteHashTable(&HTableChunk); Tcl_DeleteHashTable(&HTableProt); Tcl_DeleteHashTable(&HTableCoder); Tcl_DeleteHashTable(&HTableAlertCallback); Tcl_DeleteHashTable(&HTableAlertPar); Tcl_DeleteHashTable(&HTableError); Tcl_DeleteHashTable(&HTableMIMEParseSet); Tcl_DeleteHashTable(&HTableCallback); Tcl_DeleteHashTable(&HTableNet); Tcl_DeleteHashTable(&HTableDNS); Tcl_DeleteHashTable(&HTableTrans); } /*=================================================*/ #if 0 void HText_beginAppend (HText * text) { } void HText_endAppend(HText *text) { } void HText_appendCharacter (HText * text, char ch) { } void HText_setStyle (HText * text, HTStyle * style) { } void HText_appendText (HText * text, CONST char * str) { } void HText_appendParagraph (HText * text) { } void HText_appendImage (HText * text, HTChildAnchor * anc, CONST char * alternative_text, CONST char * alignment, BOOL isMap) { } void HText_beginAnchor (HText * text, HTChildAnchor * anc) { } void HText_endAnchor (HText * text) { } #endif void HText_appendLineBreak (HText * text) { } void HText_appendHorizontalRule (HText * text) { } void HText_setNextId (HText * text, CONST char * s) { } BOOL HText_selectAnchor(HText * text, HTChildAnchor* anchor) { return YES; } BOOL HText_select (HText * text) { return YES; } libwww/Library/Test/src/glue.h0100644000076400001440000000012106206410717015765 0ustar danielusersextern int WWWLib_Init(Tcl_Interp *interp); extern void WWWLib_Terminate(void); libwww/Library/Test/src/tclAppInit.c0100644000076400001440000000545206206410721017102 0ustar danielusers/* * tclAppInit.c -- * * Provides a default version of the main program and Tcl_AppInit * procedure for Tcl applications (without Tk). * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ static char sccsid[] = "@(#) tclAppInit.c 1.13 95/06/08 10:55:54"; #include "tcl.h" #include "glue.h" /* * The following variable is a special hack that is needed in order for * Sun shared libraries to be used for Tcl. */ extern int matherr(); int *tclDummyMathPtr = (int *) matherr; /* *---------------------------------------------------------------------- * * main -- * * This is the main program for the application. * * Results: * None: Tcl_Main never returns here, so this procedure never * returns either. * * Side effects: * Whatever the application does. * *---------------------------------------------------------------------- */ int main(argc, argv) int argc; /* Number of command-line arguments. */ char **argv; /* Values of command-line arguments. */ { Tcl_Main(argc, argv, Tcl_AppInit); return 0; /* Needed only to prevent compiler warning. */ } /* *---------------------------------------------------------------------- * * Tcl_AppInit -- * * This procedure performs application-specific initialization. * Most applications, especially those that incorporate additional * packages, will have their own version of this procedure. * * Results: * Returns a standard Tcl completion code, and leaves an error * message in interp->result if an error occurs. * * Side effects: * Depends on the startup script. * *---------------------------------------------------------------------- */ int Tcl_AppInit(interp) Tcl_Interp *interp; /* Interpreter for application. */ { if (Tcl_Init(interp) == TCL_ERROR) { return TCL_ERROR; } /* * Call the init procedures for included packages. Each call should * look like this: * * if (Mod_Init(interp) == TCL_ERROR) { * return TCL_ERROR; * } * * where "Mod" is the name of the module. */ /* INITIALIZE LIBRARY */ WWWLib_Init(interp); /* * Call Tcl_CreateCommand for application-specific commands, if * they weren't already created by the init procedures called above. */ /* * Specify a user-specific startup file to invoke if the application * is run interactively. Typically the startup file is "~/.apprc" * where "app" is the name of the application. If this line is deleted * then no user-specific startup file will be run under any conditions. */ /* Tcl_RcFileName = "~/.tclshrc";*/ return TCL_OK; } libwww/Library/Test/src/Makefile.in0100644000076400001440000002643207405520525016743 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ check_PROGRAMS = w3clib libtcl = @libtcl@ tclinclude = @tclinclude@ w3clib_LDADD = $(libtcl) ../../src/libwww.la -lm w3clib_DEPENDENCIES = $(libtcl) ../../src/libwww.la # For easier use - NOT THE DEFAULT! AUTOMAKE_OPTIONS = foreign INCLUDES = -I$(srcdir)/../../src -I$(tclinclude) w3clib_SOURCES = HTAnchor_glue.c HTAnchor_glue.h HTReq_glue.c HTReq_glue.h HTList_glue.c HTList_glue.h HTHost_glue.c HTHost_glue.h HTLog_glue.c HTLog_glue.h HTFWriter_glue.c HTFWriter_glue.h HTAssoc_glue.c HTAssoc_glue.h HTBind_glue.c HTBind_glue.h HTProt_glue.c HTProt_glue.h HTUser_glue.c HTUser_glue.h HTLink_glue.c HTLink_glue.h HTAccess_glue.c HTAccess_glue.h HTParse_glue.c HTParse_glue.h HTFormat_glue.c HTFormat_glue.h HTError_glue.c HTError_glue.h HTAlert_glue.c HTAlert_glue.h HTDNS_glue.c HTDNS_glue.h HTUTree_glue.c HTUTree_glue.h HTTrans_glue.c HTTrans_glue.h HTNet_glue.c HTNet_glue.h HTInet_glue.c HTInet_glue.h Libdata.c Libdata.h glue.c glue.h URLgen.c URLgen.h Tcl_Interface.c Tcl_Interface.h Enumerations.c Enumerations.h tclAppInit.c mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = check_PROGRAMS = w3clib$(EXEEXT) DEFS = @DEFS@ -I. -I$(srcdir) -I../../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ w3clib_OBJECTS = HTAnchor_glue.o HTReq_glue.o HTList_glue.o \ HTHost_glue.o HTLog_glue.o HTFWriter_glue.o HTAssoc_glue.o \ HTBind_glue.o HTProt_glue.o HTUser_glue.o HTLink_glue.o HTAccess_glue.o \ HTParse_glue.o HTFormat_glue.o HTError_glue.o HTAlert_glue.o \ HTDNS_glue.o HTUTree_glue.o HTTrans_glue.o HTNet_glue.o HTInet_glue.o \ Libdata.o glue.o URLgen.o Tcl_Interface.o Enumerations.o tclAppInit.o w3clib_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/Enumerations.P .deps/HTAccess_glue.P \ .deps/HTAlert_glue.P .deps/HTAnchor_glue.P .deps/HTAssoc_glue.P \ .deps/HTBind_glue.P .deps/HTDNS_glue.P .deps/HTError_glue.P \ .deps/HTFWriter_glue.P .deps/HTFormat_glue.P .deps/HTHost_glue.P \ .deps/HTInet_glue.P .deps/HTLink_glue.P .deps/HTList_glue.P \ .deps/HTLog_glue.P .deps/HTNet_glue.P .deps/HTParse_glue.P \ .deps/HTProt_glue.P .deps/HTReq_glue.P .deps/HTTrans_glue.P \ .deps/HTUTree_glue.P .deps/HTUser_glue.P .deps/Libdata.P \ .deps/Tcl_Interface.P .deps/URLgen.P .deps/glue.P .deps/tclAppInit.P SOURCES = $(w3clib_SOURCES) OBJECTS = $(w3clib_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/Test/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-checkPROGRAMS: clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) distclean-checkPROGRAMS: maintainer-clean-checkPROGRAMS: .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: w3clib$(EXEEXT): $(w3clib_OBJECTS) $(w3clib_DEPENDENCIES) @rm -f w3clib$(EXEEXT) $(LINK) $(w3clib_LDFLAGS) $(w3clib_OBJECTS) $(w3clib_LDADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/Test/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/Test/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-checkPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-checkPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-checkPROGRAMS distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-checkPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-checkPROGRAMS distclean-checkPROGRAMS \ clean-checkPROGRAMS maintainer-clean-checkPROGRAMS mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/Test/.cvsignore0100644000076400001440000000002506206614546016102 0ustar danielusersMakefile.in Makefile libwww/Library/Test/Makefile.am0100644000076400001440000000017306556755377016162 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = dejagnu DEJATOOL=w3clib SUBDIRS = src User libwww/Library/Test/site.exp0100644000076400001440000000101006556757523015572 0ustar danielusers## these variables are automatically generated by make ## # Do not edit here. If you wish to override these values # Edit the last section set tool w3clib set srcdir . set objdir /nfs/usr/frystyk/WWW-frystyk/WWW/Library/Test set host_alias sparc-sun-solaris2.5 set host_triplet sparc-sun-solaris2.5 set target_alias sparc-sun-solaris2.5 set target_triplet sparc-sun-solaris2.5 set build_alias sparc-sun-solaris2.5 set build_triplet sparc-sun-solaris2.5 ## All variables above are generated by configure. Do Not Edit ## libwww/Library/Test/config/0040755000076400001440000000000007405517331015351 5ustar danieluserslibwww/Library/Test/config/CVS/0040755000076400001440000000000007405517331016004 5ustar danieluserslibwww/Library/Test/config/CVS/Root0100644000076400001440000000005607405517331016650 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/Test/config/CVS/Repository0100644000076400001440000000003307405517331020077 0ustar danieluserslibwww/Library/Test/config libwww/Library/Test/config/CVS/Entries0100644000076400001440000000005307405517331017333 0ustar danielusers/unix.exp/1.1/Mon Aug 5 17:21:30 1996// D libwww/Library/Test/config/unix.exp0100644000076400001440000001075106201426632017047 0ustar danielusers if ![info exists prompt] then { set prompt "% " } # # wwwtest_version -- extract and print the version number of wwwtest # proc wwwtest_version {} { global WWWTEST global prompt clone_output "[which $WWWTEST] version 1.0\n" } # wwwtest_load -- loads the program proc wwwtest_load { } { } # # wwwtest_exit -- quit and cleanup # proc wwwtest_exit {} { send "exit\r" } # # wwwtest_start -- start wwwtest running # proc wwwtest_start {} { global WWWTEST global prompt global spawn_id global verbose global wwwtest_id global eol if { $verbose > 1 } { send_user "starting $WWWTEST\n" } send_user "Spawning $WWWTEST..." spawn "./$WWWTEST" set wwwtest_id $spawn_id send_user "$WWWTEST active.\n" expect { -i $wwwtest_id -re "No such file.*" { error "Can't start $WWWTEST"; exit 1 } -re "$prompt$" { } timeout { error "Failed to spawn $WWWTEST (timeout)"; exit 1 } } send -i $wwwtest_id "\r" expect { -i $wwwtest_id -re "($prompt)(.*)($prompt)" {set eol $expect_out(2,string)} timeout { } } } # # To deal with unfriendly characters in reg expressions... # proc fix_string { str } { for {set i 0} {$i <= [string length $str]} {incr i} { if {[regexp {[\-\*\.\$\+\?\|\^\\]} [set character [string index $str $i]]] == 1} { lappend new_str "\\$character" } else { lappend new_str $character } } return [join $new_str ""] } # # Test the # of args for a function # proc test_args { function } { global wwwtest_id global prompt verbose "Argument # test: $function" 1 set test "$function 0" set command "$function" set error_str "Wrong # of args. " send -i $wwwtest_id "$command\r" expect { -i $wwwtest_id -re "(.*)($error_str)(\r\n)*($function )(.*)(\r\n)*($prompt)" { verbose "Arguments: $expect_out(4,string)" 2 pass $test} -re "(.*)\r\n(.*)\r\n($prompt)" {send_user "Unexpected argument number. Check test.\n" xpass $test} timeout {fail $test} } } # # To generalize code and reduce large repetition # proc runtest { function arguments expected test } { global wwwtest_id global prompt global WWWTEST set command "$function $arguments" send -i $wwwtest_id "$command\r" verbose "$function $arguments" 1 verbose " Expected: $expected" 2 set command [fix_string $command] set error_str "Wrong # of args. " set invalid "Invalid variable names or non-existent entries." set actual "expect function skipped?!" expect { -i $wwwtest_id -re "([fix_string $expected])(.*)($prompt)" { set actual $expected pass $test } -re "(.*)($invalid)(\r\n)*(.*)($prompt)" { set actual "Improper test setup, invalid variable name.\n" fail $test } -re "(.*)($error_str)(\r\n)*($function)(.*)($prompt)" { set actual "Improper test setup. Wrong # of args.\n" fail $test } -re "($command)\r\n(.*)(\r\n)*($prompt)" { set actual $expect_out(2,string) fail $test } timeout {set actual "Timed out..." fail $test } eof {set actual "wwwtest crashed" fail $test spawn "./$WWWTEST" set wwwtest_id $spawn_id } } verbose " Result: $actual" 2 return $actual } # # For the set functions # proc set_test { function arguments } { global wwwtest_id global prompt set command "$function $arguments" send -i $wwwtest_id "$command\r" set error_str "Wrong # of args. " expect { -i $wwwtest_id -re "(.*)(invalid command name \"$function\")(.*)($prompt)" { send_user "Improper test setup, improper function name.\n" } -re "(.*)($error_str)(\r\n)*($function)(.*)($prompt)" { send_user "Improper test setup. Wrong # args.\n" } -re "($command)\r\n(.*)(\r\n)*($prompt)" { return $expect_out(2,string) } -re "(.*)($prompt)" { send_user "Couldn't set function\n" } timeout { send_user "Timed out...\n" } eof {fail $test send_user "wwwtest crashed.\n" } } } proc get_data { tcl_name identifier } { global wwwtest_id global prompt send -i $wwwtest_id "set $tcl_name\r" expect { -i $wwwtest_id -re "(.*)(($identifier)(.*))\r\n($prompt)" {return $expect_out(2,string)} } return "couldn't find it" } proc new_item { command } { global wwwtest_id global prompt send -i $wwwtest_id "$command\r" expect { -i $wwwtest_id -re "($command)\r\n((\[A-Za-z_ ]*)(\[0-9]*))(.*)($prompt)" { return $expect_out(2,string) } } } proc run_command { command } { global wwwtest_id global prompt send -i $wwwtest_id "$command\r" expect { -i $wwwtest_id -re "($command)\r\n((\[A-Za-z_ ]*)(\[0-9]*))(.*)($prompt)" { return $expect_out(2,string) timeout {return "Did not work."} } } } wwwtest_start libwww/Library/Test/w3clib.test/0040755000076400001440000000000007405517337016253 5ustar danieluserslibwww/Library/Test/w3clib.test/CVS/0040755000076400001440000000000007405517337016706 5ustar danieluserslibwww/Library/Test/w3clib.test/CVS/Root0100644000076400001440000000005607405517334017547 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/Test/w3clib.test/CVS/Repository0100644000076400001440000000004007405517334020774 0ustar danieluserslibwww/Library/Test/w3clib.test libwww/Library/Test/w3clib.test/CVS/Entries0100644000076400001440000000100607405517337020234 0ustar danielusers/HOWTO.tests/1.1/Mon Aug 5 17:21:33 1996// /HTAnchor.exp/1.4/Wed Aug 21 04:52:23 1996// /HTCleanTelnetString.tests/1.1/Mon Aug 5 17:21:35 1996// /HTEscape.exp/1.2/Wed Aug 21 03:36:45 1996// /HTEscape.tests/1.1/Mon Aug 5 17:21:37 1996// /HTLink.exp/1.2/Wed Aug 21 04:52:24 1996// /HTParse.exp/1.3/Wed Aug 21 04:52:25 1996// /HTParse.tests/1.1/Mon Aug 5 17:21:41 1996// /HTRelative.tests/1.1/Mon Aug 5 17:21:43 1996// /HTRequest.exp/1.3/Wed Aug 21 04:52:25 1996// /HTSimplify.tests/1.1/Mon Aug 5 17:21:45 1996// D libwww/Library/Test/w3clib.test/HOWTO.tests0100644000076400001440000000103706201426635020226 0ustar danielusersThe tests are set up pretty simply. Adding more to the suite is easy, unfortunately, since I'm not a great programmer, I can't give much freedom in the format of the test files.... as long as you follow the examples you're pretty safe. Just some hints: For those that have spaces within the text use quotes. Avoid the dollar sign with text directly following it. Also, the format requires there to be a space between the descriptive tag (i.e. access: ) and the data. Between every test set, use the delimiting * barrier. It should be 11. libwww/Library/Test/w3clib.test/HTAnchor.exp0100644000076400001440000004737506206513007020440 0ustar danielusers################################################################################# # HTANCHOR.EXP # ################################################################################# send_user "Creating anchors for testing.....\n" ########################### # Setting Local variables # ########################### set listnum 0 # To check the functions for arg numbers, need string to check against. # Zero test always will check args set error_str "Wrong # of args. " set canchor_id "ChildAnchor_" set anchor_id "Anchor_" proc init_anchors { } { global prompt global address global child_tag global link_address global Anchor global ChildAnchor # # Addresses, links and tags for anchor and link creations # set address(1) "http://www.w3.org/" set address(2) "http://www.foobar.com/" set address(3) "http://www.mit.edu:8001/" set address(4) "ftp://to.be.deleted.com/" set address(5) "http://web.mit.edu/" set child_tag(1) "html3" set child_tag(2) "foo" set child_tag(3) "bar" set link_address(1) "http://www.w3.org/pub/info" set link_address(2) "news://news.mit.edu/" set link_address(3) "ftp://ftp.nic.net/" set link_address(4) "http://www.to.be.deleted.com/" # # Creating Anchors # set function HTAnchor_findAddress for {set test_num 1} {$test_num <= 5} {incr test_num} { set test "HTAnchor_findAddress $test_num" send_user "HTAnchor_findAddress $address($test_num)\n" set Anchor($test_num) [new_item "HTAnchor_findAddress $address($test_num)"] } set function HTAnchor_findChild for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "HTAnchor_findChild $test_num" send_user "HTAnchor_findChild $Anchor($test_num) $child_tag($test_num)\n" set ChildAnchor($test_num) [new_item "HTAnchor_findChild $Anchor($test_num) $child_tag($test_num)"] } } proc init_links { } { global Anchor global ChildAnchor global Linktype global Method global Link global source_list global dest_list set function HTLink_add set Linktype(1) standard set Linktype(2) not-standard set Linktype(3) child set Method(1) PUT set Method(2) POST set source_list(1) $Anchor(1) set source_list(2) $Anchor(1) set source_list(3) $Anchor(2) set source_list(4) $Anchor(3) set source_list(5) $Anchor(3) set source_list(6) $Anchor(1) set dest_list(1) $Anchor(2) set dest_list(2) $Anchor(3) set dest_list(3) $Anchor(5) set dest_list(4) $Anchor(1) set dest_list(5) $Anchor(2) set dest_list(6) $ChildAnchor(1) set link_args(1) "$Anchor(1) $Anchor(2) $Linktype(1) $Method(1)" set link_args(2) "$Anchor(1) $Anchor(3) $Linktype(2) $Method(1)" set link_args(3) "$Anchor(2) $Anchor(5) $Linktype(1) $Method(1)" set link_args(4) "$Anchor(3) $Anchor(1) $Linktype(2) $Method(2)" set link_args(5) "$Anchor(3) $Anchor(2) $Linktype(2) $Method(2)" set link_args(6) "$Anchor(1) $ChildAnchor(1) $Linktype(3) $Method(2)" for {set test_num 1} {$test_num <= 6} {incr test_num} { send_user "HTLink_add $link_args($test_num)\n" run_command "$function $link_args($test_num)" set Link($test_num) [new_item "HTLink_find $source_list($test_num) $dest_list($test_num)"] } } #set ChildAnchor(4) [HTAnchor_findChildAndLink $Anchor(1) $child_tag(3) $Anchor(4) linktype??] #send_user "HTAnchor_findChildAndLink Anchor(1) $child_tag(3) $Anchor(4) linktype??" ################################### # Initialize and start the tests. # ################################### init_anchors init_links send_user "\n\nRunning Tests:\n\n" # # Hash Checking for HTAnchor_findAddress # set function HTAnchor_findAddress test_args $function for {set test_num 1} {$test_num <= 5} {incr test_num} { set test "Hash table check $test_num" set addr $address($test_num) set test_anchor $Anchor($test_num) set expected $test_anchor set arguments "$addr" runtest $function "$arguments" $expected $test # -re "(.*)(($anchor_id)(.*))\r\n($prompt)" {set actual $expect_out(2,string) # fail $test} } # # Hash Checking for HTAnchor_findAddress # set function HTAnchor_findChild test_args $function for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "Hash table check [expr $test_num+5]" set addr $address($test_num) set test_anchor $Anchor($test_num) set test_canchor $ChildAnchor($test_num) set expected $test_canchor set arguments "$test_anchor $child_tag($test_num)" runtest $function "$arguments" $expected $test } set function HTAnchor_findChildAndLink set test "HTAnchor_findChildAndLink" set test_anchor $Anchor(1) set tag $child_tag(1) set addr $address(3) set new_anchor $Anchor(3) set linktype linktype set old_child $ChildAnchor(1) set expected $old_child set arguments "$test_anchor $tag $addr $linktype" set command "HTAnchor_findChildAndLink $test_anchor $tag $addr $linktype" send "$command\r" verbose "$function $arguments" 1 verbose " Expected: $expected" 2 expect { -re "$old_child" {set actual $old_child pass $test} -re "(.*)(($canchor_id)(.*))\r\n($prompt)" {set actual $expect_out(2,string) fail $test} } verbose " Result: $actual" 2 set command "set ChildAnchor(4) \[HTAnchor_findChild $new_anchor $tag]" send "$command\r" verbose "HTAnchor_findChild $new_anchor $tag" 1 verbose " Expected: $expected" 2 expect { -re "(.*)(($canchor_id)(.*))\r\n($prompt)" {set actual $expect_out(2,string) pass $test} -re "$old_child" {set actual $old_child fail $test} } verbose " Result: $actual" 2 # # Delete some Anchors # set function HTAnchor_delete set test "HTAnchor_delete 1" set test_anchor $Anchor(4) set expected YES set arguments "$test_anchor" runtest $function "$arguments" $expected $test set test "HTAnchor_delete 2" send "set test_anchor \[HTAnchor_findAddress ftp://ftp.foobar.com/]\r" expect "$prompt$" set test_anchor $test_anchor set expected YES set arguments "$test_anchor" runtest $function "$arguments" $expected $test # #HTAnchor_deleteAll at end..... # # # PARENT # set function HTAnchor_parent for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "HTAnchor_parent $test_num" set test_anchor $Anchor($test_num) set parent $Anchor($test_num) set expected $parent set arguments "$test_anchor" runtest $function "$arguments" $expected $test } for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "HTAnchor_parent [expr $test_num + 3]" set test_anchor $ChildAnchor($test_num) set parent $Anchor($test_num) set expected "$parent" set arguments "$test_anchor" runtest $function "$arguments" $expected $test } # # HASCHILDREN # set function HTAnchor_hasChildren for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "HTAnchor_hasChildren $test_num" set test_anchor $Anchor($test_num) set expected YES set arguments "$test_anchor" runtest $function "$arguments" $expected $test } set test "HTAnchor_hasChildren 4" set test_anchor $Anchor(5) set expected NO set arguments "$test_anchor" runtest $function "$arguments" $expected $test # #HTAnchor_document can now be checked. #Though, it still does not work. # set function HTAnchor_document set test "HTAnchor_document 1" set test_anchor $Anchor(1) set doc $Anchor(2) set expected $doc set arguments "$test_anchor $doc" #expected to fail #runtest $function "$arguments" $expected $test # # ADDRESS # set function HTAnchor_address for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "HTAnchor_address $test_num" set test_anchor $Anchor($test_num) set addr $address($test_num) set expected $addr set arguments "$test_anchor" runtest $function "$arguments" $expected $test } set test "HTAnchor_address 4" #FIX #set test_anchor $Anchor(5) #set addr $address(5) #set expected $addr #set arguments "$test_anchor" #runtest $function "$arguments" $expected $test for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "HTAnchor_address [expr $test_num+4]" set test_anchor $ChildAnchor($test_num) set tag $child_tag($test_num) set addr $address($test_num) set expected "$addr#$tag" set arguments "$test_anchor" runtest $function "$arguments" $expected $test } set test "HTAnchor_address 8" #FIX #set test_anchor $ChildAnchor(4) #set tag $child_tag(3) #set addr $address(3) #set expected "$addr#$tag" #set arguments "$test_anchor" #runtest $function "$arguments" $expected $test # # CACHEHIT # set function HTAnchor_cacheHit for {set test_num 1} {$test_num <= 3} {incr test_num} { set set_function HTAnchor_setCacheHit set test "HTAnchor_cacheHit $test_num.1" set test_anchor $Anchor($test_num) set input YES set expected YES set set_args "$test_anchor $input" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set test "HTAnchor_cacheHit $test_num.2" set test_anchor $Anchor($test_num) set input NO set expected NO set set_args "$test_anchor $input" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test } set test "HTAnchor_cacheHit 3.1" set test_anchor $ChildAnchor(1) set input YES set expected YES set set_args "$test_anchor $input" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set test "HTAnchor_cacheHit 3.2" set test_anchor $ChildAnchor(1) set input FALSE set expected NO set set_args "$test_anchor $input" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # PHYSICAL # set function HTAnchor_physical set set_function HTAnchor_setPhysical set test "HTAnchor_physical 1.1" set test_anchor $Anchor(1) set physical "http://www.foobar.com/" set expected $physical set set_args "$test_anchor $physical" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set test "HTAnchor_physical 1.2" set test_anchor $Anchor(1) set physical "ftp://ftp.net.org/" set expected $physical set set_args "$test_anchor $physical" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set test "HTAnchor_physical 2.1" set test_anchor $Anchor(2) set physical $address(1) set expected $physical set set_args "$test_anchor $physical" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set test "HTAnchor_physical 2.2" set test_anchor $Anchor(2) set physical $address(2) set expected $physical set set_args "$test_anchor $physical" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # ISINDEX # set function HTAnchor_isIndex for {set test_num 1} {$test_num <= 3} {incr test_num} { set set_function HTAnchor_setIndex set test "HTAnchor_isIndex $test_num.1" set test_anchor $Anchor($test_num) set expected YES set set_args "$test_anchor" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set test "HTAnchor_isIndex $test_num.2" set set_function HTAnchor_clearIndex set test_anchor $Anchor($test_num) set expected NO set set_args "$test_anchor" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test } # # TITLE # set function HTAnchor_title for {set test_num 1} {$test_num <= 2} {incr test_num} { set set_function HTAnchor_setTitle set test "HTAnchor_title $test_num" set test_anchor $Anchor($test_num) set str "Title $test_num for testing" set expected $str set set_args "$test_anchor \"$str\"" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set test "HTAnchor_appendTitle $test_num" set set_function HTAnchor_appendTitle set test_anchor $Anchor($test_num) set appended " with appended title" set expected "$str$appended" set set_args "$test_anchor \"$appended\"" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test } set test "HTAnchor_appendTitle 3" set test_anchor $Anchor(2) set appended " and another appended title" set old " with appended title" set expected "$str$old$appended" set set_args "$test_anchor \"$appended\"" set arguments "$test_anchor " set_test $set_function $set_args runtest $function "$arguments" $expected $test # # FORMAT # set f(1) www/void set f(2) */* set f(3) www/present set f(4) www/debug set f(5) www/unknown set f(6) text/html set f(7) text/plain set f(8) message/rfc822 set function HTAnchor_format set set_function HTAnchor_setFormat for {set test_num 1} {$test_num <= 8} {incr test_num} { set test "HTAnchor_format $test_num" set format $f($test_num) set test_anchor $Anchor([expr ($test_num / 3)+1]) set expected $format set set_args "$test_anchor $format" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test } # # CHARSET # set function HTAnchor_charset set set_function HTAnchor_setCharset set c(1) US set c(2) ASCII for {set test_num 1} {$test_num <= 2} {incr test_num} { set test "HTAnchor_charset $test_num" set test_anchor $Anchor(1) set charset $c($test_num) set expected $charset set set_args "$test_anchor $charset" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test } # # LEVEL # set function HTAnchor_level set set_function HTAnchor_setLevel set test "HTAnchor_level" set test_anchor $Anchor(1) set level 5 set expected $level set set_args "$test_anchor $level" set arguments $test_anchor set_test $set_function $set_args runtest $function "$arguments" $expected $test # # LANGUAGE # set function HTAnchor_language set set_function HTAnchor_addLanguage set l(1) US set l(2) Francais for {set test_num 1} {$test_num <= 2} {incr test_num} { set test "HTAnchor_language $test_num" set test_anchor $Anchor(1) set language $l($test_num) set expected HTList_$listnum set set_args "$test_anchor $language" set arguments $test_anchor set_test $set_function $set_args runtest $function "$arguments" $expected $test } incr listnum 1 # # ENCODING # set function HTAnchor_encoding set set_function HTAnchor_addEncoding set e(1) WWW_ENC_7BIT for {set test_num 1} {$test_num <= 1} {incr test_num} { set test "HTAnchor_encoding $test_num" set test_anchor $Anchor(1) set encoding $e($test_num) set expected HTList_$listnum set set_args "$test_anchor $encoding" set arguments $test_anchor incr listnum 1 set_test $set_function $set_args runtest $function "$arguments" $expected $test } # # TRANSFER # set function HTAnchor_transfer set set_function HTAnchor_setTransfer set test "HTAnchor_transfer" set test_anchor $Anchor(1) set transfer RSA set expected $transfer set set_args "$test_anchor $transfer" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # LENGTH # set function HTAnchor_length set set_function HTAnchor_setLength set test "HTAnchor_length" set test_anchor $Anchor(1) set length 32768 set expected $length set set_args "$test_anchor $length" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set set_function HTAnchor_addLength set test "HTAnchor_addLength" set test_anchor $Anchor(1) set addlength 32 set expected [expr $length+$addlength] set set_args "$test_anchor $addlength" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # METHODS # set function HTAnchor_methods set set_function HTAnchor_setMethods set test "HTAnchor_methods" set test_anchor $Anchor(1) set method 45 set expected $method set set_args "$test_anchor $method" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set set_function HTAnchor_appendMethods set test "HTAnchor_appendMethods" set test_anchor $Anchor(1) set method 45 set append 4 set expected [expr $method|$append] set set_args "$test_anchor $append" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # VERSION # set function HTAnchor_version set set_function HTAnchor_setVersion set test "HTAnchor_version" set test_anchor $Anchor(1) set version ver3.0 set expected $version set set_args "$test_anchor $version" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # DATE # set function HTAnchor_date set set_function HTAnchor_setDate set test "HTAnchor_date" set test_anchor $Anchor(1) set date 24332 set expected $date set set_args "$test_anchor $date" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # LASTMODIFIED # set function HTAnchor_lastModified set set_function HTAnchor_setLastModified set test "HTAnchor_lastModified" set test_anchor $Anchor(1) set modified 1235332 set expected $modified set set_args "$test_anchor $modified" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # EXPIRES # set function HTAnchor_expires set set_function HTAnchor_setExpires set test "HTAnchor_expires" set test_anchor $Anchor(1) set expire 12353432 set expected $expire set set_args "$test_anchor $expire" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # DERIVED # set function HTAnchor_derived set set_function HTAnchor_setDerived set test "HTAnchor_derived" set test_anchor $Anchor(1) set derived $Anchor(2) set expected $derived set set_args "$test_anchor $derived" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # EXTRA # set function HTAnchor_extra set set_function HTAnchor_addExtra set test "HTAnchor_extra" set test_anchor $Anchor(1) set extra "Extra Header" set expected HTList_$listnum set set_args "$test_anchor $extra" set arguments "$test_anchor" incr listnum 1 set_test $set_function $set_args runtest $function "$arguments" $expected $test # # MAINLINK # set function HTAnchor_mainLink set set_function HTAnchor_setMainLink set test "HTAnchor_mainLink 1" set link $Link(1) set test_anchor $Anchor(1) set expected $link set set_args "$test_anchor $link" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test set test "HTAnchor_mainLink 2" set link $Link(2) set test_anchor $Anchor(1) set expected $link set set_args "$test_anchor $link" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # FOLLOWMAINLINK # set function HTAnchor_followMainLink set set_function HTAnchor_setMainLink set test "HTAnchor_followMainLink" set link $Link(1) set test_anchor $Anchor(1) set expected $Anchor(3) set set_args "$test_anchor $link" set arguments "$test_anchor" set_test $set_function $set_args runtest $function "$arguments" $expected $test # # SUBLINKS # set function HTAnchor_subLinks set function HTAnchor_setSubLinks set test "HTAnchor_subLinks" set list [new_item "HTList_new"] set test_anchor $Anchor(1) set expected $list set set_args "$test_anchor $list" set arguments "$test_anchor" set_test $set_function $set_args runtest $function $arguments $expected $test # # DELETEALL # set function HTAnchor_deleteAll set test "HTAnchor_deleteAll" set listname "somelist" set expected YES set arguments "$listname" #runtest $function "$arguments" $expected $test libwww/Library/Test/w3clib.test/HTCleanTelnetString.tests0100644000076400001440000000673506201426637023163 0ustar danielusers!!!!!!!!!*****************************00-1F: Inclusive unclean: abc%00def clean: abc *********** unclean: def%01ghi clean: def *********** unclean: ghi%02jkl clean: ghi *********** unclean: jkl%03mno clean: jkl *********** unclean: mno%04pqr clean: mno *********** unclean: pqr%05stu clean: pqr *********** unclean: stu%06vwx clean: stu *********** unclean: vwx%07yz clean: vwx *********** unclean: yz%08ABC clean: yz *********** unclean: ABC%09DEF clean: ABC DEF *********** unclean: DEF%0AGHI clean: DEF *********** unclean: GHI%0BJKL clean: GHI *********** unclean: JKL%0CMNO clean: JKL *********** unclean: MNO%0DPQR clean: MNO *********** unclean: PQR%0ESTU clean: PQR *********** unclean: STU%0FVWX clean: STU *********** unclean: VWX%10YZ clean: VWX *********** unclean: YZ%1101 clean: YZ *********** unclean: 01%1223 clean: 01 *********** unclean: 23%1345 clean: 23 *********** unclean: 45%1467 clean: 45 *********** unclean: 67%1589 clean: 67 *********** unclean: 89%16%20%21 clean: 89 *********** unclean: %20%21%17%5C%22%23 clean: ! *********** unclean: %5C%22%23%5C%22%18%24%25 clean: "#" *********** unclean: %24%25%19%26%27 clean: $% *********** unclean: %26%27%1A%28%29 clean: &' *********** unclean: %28%29%1B%2A%2B clean: () *********** unclean: %2A%2B%1C%2C%2D clean: *+ *********** unclean: %2C%2D%1D%2E%2F clean: ,- *********** unclean: %2E%2F%1E%3A%3B clean: ./ *********** unclean: %3A%3B%1F%3C%3D clean: :; *********** !!!!!!!!******************************** 7F-9F: Inclusive unclean: %3C%3D%7F%3E%3F clean: <= *********** unclean: %3E%3F%80%40%7B clean: >? *********** unclean: %40%7B%81%7C%7D clean: @{ *********** unclean: %7C%7D%82%7E%A0 clean: |} *********** !!!!!!!!!!!!************These are getting truncated! Why?? unclean: %7E%A0%83%A1%A2 clean: ~  *********** unclean: %A1%A2%84%A3%A4 clean: ¡¢ *********** unclean: %A3%A4%85%A5%A6 clean: £¤ *********** unclean: %A5%A6%86%A7%A8 clean: ¥¦ *********** unclean: %A7%A8%87%A9%AA clean: §¨ *********** unclean: %A9%AA%87%AB%AC clean: ©ª *********** unclean: %AB%AC%88%AD%AE clean: «¬ *********** unclean: %AD%AE%89%AF%B0 clean: ­® *********** unclean: %AF%B0%8A%B1%B2 clean: ¯° *********** unclean: %B1%B2%8B%B1%B2 clean: ±² *********** unclean: %B1%B2%8C%B3%B4 clean: ±² *********** unclean: %B3%B4%8D%B5%B6 clean: ³´ *********** unclean: %B5%B6%8E%B7%B8 clean: µ¶ *********** unclean: %B7%B8%8F%B9%BA clean: ·¸ *********** unclean: %B9%BA%90%BB%BC clean: ¹º *********** unclean: %BB%BC%91%BD%BE clean: »¼ *********** unclean: %BD%BE%92%BF%C0 clean: ½¾ *********** unclean: %BF%C0%93%C1%C2 clean: ¿À *********** unclean: %C1%C2%94%C3%C4 clean: Á *********** unclean: %C3%C4%95%C5%C6 clean: ÃÄ *********** unclean: %C5%C6%96%C7%C8 clean: ÅÆ *********** unclean: %C7%C8%97%C9%CA clean: ÇÈ *********** unclean: %C9%CA%98%CB%CC clean: ÉÊ *********** unclean: %CB%CC%99%CD%CE clean: ËÌ *********** unclean: %CD%CE%9A%CF%D0 clean: ÍÎ *********** unclean: %CF%D0%9B%D1%D2 clean: ÏÐ *********** unclean: %D1%D2%9C%D3%D4 clean: ÑÒ *********** unclean: %D3%D4%9D%D5%D6 clean: ÓÔ *********** unclean: %D5%D6%9E%D7%D8 clean: ÕÖ *********** unclean: %D7%D8%9F%D9%DA clean: ר *********** unclean: %D9%DA%FF%DB%DC clean: ÙÚ *********** unclean: %DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF clean: ÛÜÝÞßàáâãäåæçèéêëìíîï *********** unclean: %F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE clean: ðñòóôõö÷øùúûüýþ *********** libwww/Library/Test/w3clib.test/HTEscape.exp0100644000076400001440000000252006206502115020403 0ustar danielusers#################### # HTEscape # #################### # #For masks # set URL_XALPHAS 1 set URL_XPALPHAS 2 set URL_PATH 4 # #For creating unique test names... # set testnum 0 # #To more easily identify the set it belongs to... # set setnum 0 #Open example file set fp [open "$srcdir/$W3CLIB.test/HTEscape.tests" r] #Since line becomes a flag of sorts for the while loop, initialize it null. set line "" while {![eof $fp]} { #I use the * markers as the point to stop and run the test. # #Read in the data from the testfile # while {(![eof $fp]) && ([string compare $line "***********"] != 0)} { gets $fp line if {[string compare $line ""] != 0} { set ind [string first ": " $line] set type [string range $line 0 [expr $ind-1]] switch $type { "unencoded" {set unencoded [string range $line [expr $ind+2] end]} "mask" {set mask [string range $line [expr $ind+2] end]} "encoded" {set encoded [string range $line [expr $ind+2] end]} } } } # #Run the tests # if {![eof $fp]} { incr setnum 1 incr testnum 1 set test "HTEscape \"$unencoded\" $mask" runtest HTEscape "\"$unencoded\" $mask" "$encoded" "$test" set test "HTUnEscape $encoded" runtest HTUnEscape $encoded $unencoded "$test" } #Reset the line from the * markers set line "" } close $fp libwww/Library/Test/w3clib.test/HTEscape.tests0100644000076400001440000000122006201426641020751 0ustar danielusers unencoded: 234 sd ^%#$% foo.bar mask: 2 encoded: 234%20sd%20%5E%25%23%24%25%20foo.bar *********** unencoded: 231 sd ^%#$% foo.bar mask: 2 encoded: 231%20sd%20%5E%25%23%24%25%20foo.bar *********** unencoded: %20%F3%76^$!foo test< foo1 mask: 1 encoded: %2520%25F3%2576%5E%24%21foo%20test%3C%20foo1 *********** unencoded: ftp ftp.netscape.com:342 mask: 1 encoded: ftp%20ftp.netscape.com%3A342 *********** unencoded: www http://www.w3.org/ mask: 4 encoded: www%20http%3A//www.w3.org/ *********** unencoded: ftp://ftp.foo.com/~foo.bar/foo bar/foo@bar/?:foobar#bar mask: 4 encoded: ftp%3A//ftp.foo.com/%7Efoo.bar/foo%20bar/foo@bar/%3F%3Afoobar%23bar libwww/Library/Test/w3clib.test/HTLink.exp0100644000076400001440000001505106206513010020077 0ustar danielusers# # #HTLink Link Testing # # # # NOTE! NEED ANCHORS FROM ANCHOR TESTS? OR CREATE NEW SET OF ANCHORS 1-5 # proc init_anchors { } { global prompt global address global child_tag global link_address global Anchor global ChildAnchor # # Addresses, links and tags for anchor and link creations # set address(1) "http://www.w3.org/" set address(2) "http://www.foobar.com/" set address(3) "http://www.mit.edu:8001/" set address(4) "ftp://to.be.deleted.com/" set address(5) "http://web.mit.edu/" set child_tag(1) "html3" set child_tag(2) "foo" set child_tag(3) "bar" set link_address(1) "http://www.w3.org/pub/info" set link_address(2) "news://news.mit.edu/" set link_address(3) "ftp://ftp.nic.net/" set link_address(4) "http://www.to.be.deleted.com/" # # Creating Anchors # set function HTAnchor_findAddress for {set test_num 1} {$test_num <= 5} {incr test_num} { set test "HTAnchor_findAddress $test_num" send_user "HTAnchor_findAddress $address($test_num)\n" set Anchor($test_num) [new_item "HTAnchor_findAddress $address($test_num)"] } set function HTAnchor_findChild for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "HTAnchor_findChild $test_num" send_user "HTAnchor_findChild $Anchor($test_num) $child_tag($test_num)\n" set ChildAnchor($test_num) [new_item "HTAnchor_findChild $Anchor($test_num) $child_tag($test_num)"] } } proc init_links { } { global Anchor global ChildAnchor global Linktype global Method global Link global source_list global dest_list set function HTLink_add set Linktype(1) standard set Linktype(2) not-standard set Linktype(3) child set Method(1) PUT set Method(2) POST set source_list(1) $Anchor(1) set source_list(2) $Anchor(1) set source_list(3) $Anchor(2) set source_list(4) $Anchor(3) set source_list(5) $Anchor(3) set source_list(6) $Anchor(1) set dest_list(1) $Anchor(2) set dest_list(2) $Anchor(3) set dest_list(3) $Anchor(5) set dest_list(4) $Anchor(1) set dest_list(5) $Anchor(2) set dest_list(6) $ChildAnchor(1) set link_args(1) "$Anchor(1) $Anchor(2) $Linktype(1) $Method(1)" set link_args(2) "$Anchor(1) $Anchor(3) $Linktype(2) $Method(1)" set link_args(3) "$Anchor(2) $Anchor(5) $Linktype(1) $Method(1)" set link_args(4) "$Anchor(3) $Anchor(1) $Linktype(2) $Method(2)" set link_args(5) "$Anchor(3) $Anchor(2) $Linktype(2) $Method(2)" set link_args(6) "$Anchor(1) $ChildAnchor(1) $Linktype(3) $Method(2)" for {set test_num 1} {$test_num <= 6} {incr test_num} { send_user "HTLink_add $link_args($test_num)\n" run_command "$function $link_args($test_num)" set Link($test_num) [new_item "HTLink_find $source_list($test_num) $dest_list($test_num)"] } } #init_anchors init_links set function HTLink_find set test "Hash Table Check 1" set source $Anchor(1) set dest $Anchor(2) set expected $Link(1) set arguments "$source $dest" runtest $function $arguments $expected $test set test "Hash Table Check 2" set source $Anchor(1) set dest $Anchor(3) set expected $Link(2) set arguments "$source $dest" runtest $function $arguments $expected $test set test "Hash Table Check 3" set source $Anchor(2) set dest $Anchor(5) set expected $Link(3) set arguments "$source $dest" runtest $function $arguments $expected $test set test "Hash Table Check 4" set source $Anchor(3) set dest $Anchor(1) set expected $Link(4) set arguments "$source $dest" runtest $function $arguments $expected $test set test "Hash Table Check 5" set source $Anchor(3) set dest $Anchor(2) set expected $Link(5) set arguments "$source $dest" runtest $function $arguments $expected $test set test "Hash Table Check 6" set source $Anchor(1) set dest $ChildAnchor(1) set expected $Link(6) set arguments "$source $dest" runtest $function $arguments $expected $test set test "Hash Table Check 7" set source $Anchor(2) set dest $Anchor(3) set expected "" set arguments "$source $dest" runtest $function $arguments $expected $test set function HTLink_destination set set_function HTLink_setDestination set test "HTLink_destination" set link $Link(6) set test_anchor $Anchor(1) set new_dest $ChildAnchor(2) set expected $new_dest set set_args "$link $new_dest" set arguments "$link" set_test $set_function $set_args runtest $function $arguments $expected $test set function HTLink_type set set_function HTLink_setType set test "HTLink_type" set link $Link(2) set test_anchor $Anchor(1) set type link_type set expected $type set set_args "$link $type" set arguments "$link" set_test $set_function $set_args runtest $function $arguments $expected $test set function HTLink_method set set_function HTLink_setMethod set test "HTLink_method" set link $Link(6) set method PUT set expected $method set set_args "$link $method" set arguments "$link" set_test $set_function "$set_args" runtest $function $arguments $expected $test set function HTLink_result set set_function HTLink_setResult set test "HTLink_result" set link $Link(1) set test_anchor $Anchor(1) set link_result HT_LINK_OK set expected $link_result set set_args "$link $link_result" set arguments "$link" set_test $set_function $set_args runtest $function $arguments $expected $test set function HTLink_remove set test "HTLink_remove 1.1" set link $Link(3) set source $Anchor(2) set dest $Anchor(5) set expected YES set arguments "$source $dest" runtest $function $arguments $expected $test set test "HTLink_remove 1.2" set function HTLink_find set expected "" set arguments "$source $dest" runtest $function $arguments $expected $test set function HTLink_removeAll set test "HTLink_removeAll 1.1" set test_anchor $Anchor(1) set expected YES set arguments $test_anchor runtest $function $arguments $expected $test set test "HTLink_removeAll 1.2" set function HTAnchor_subLinks set expected "" set arguments $test_anchor runtest $function $arguments $expected $test # MOVEALL is not visible, thus cannot be tested set function HTAnchor_subLinks set set_function HTLink_moveAll set test "HTLink_moveAll 1" set new_anchor $Anchor(5) set test_anchor $Anchor(1) set expected [new_item "HTAnchor_subLinks $test_anchor"] set set_args "$test_anchor $new_anchor" set arguments $new_anchor #set_test $set_function $set_args #runtest $function $arguments $expected $test set test "HTAnchor_moveAllLinks 2" set new_anchor $Anchor(1) set test_anchor $Anchor(5) set expected [new_item "HTAnchor_subLinks $test_anchor"] set set_args "$test_anchor $new_anchor" set arguments $new_anchor #set_test $set_function $set_args #runtest $function $arguments $expected $test libwww/Library/Test/w3clib.test/HTParse.exp0100644000076400001440000001736006206513011020262 0ustar danielusers################################################################################# # HTPARSE.C # ################################################################################# ################################################################################# # HTParse(Aname, Relname, bitflag) # ################################################################################# remove_nulls 0 send_user "Starting HTParse testing...\n" #For bit flags set PARSEACCESS 16 set PARSEHOST 8 set PARSEPATH 4 set PARSEANCHOR 2 set PARSEPUNCTUATION 1 set PARSEALL 31 #For creating unique test names... set testnum 0 #To more easily identify the set it belongs to... set setnum 0 #Open test file send_user "Opening test file......" set fp [open "$srcdir/$W3CLIB.test/HTParse.tests" r] send_user "file opened.\n" #Since line becomes a flag of sorts for the while loop, initialize it null. set line "" set part(2) Anchor set part(4) Path set part(8) Hostport set part(16) Access while {![eof $fp]} { #I use the * markers as the point to stop and run the test. # #Read in the data from the testfile # while {(![eof $fp]) && ([string compare $line "***********"] != 0)} { gets $fp line if {[string compare $line ""] != 0} { set ind [string first ": " $line] set type [string range $line 0 [expr $ind-1]] switch $type { "name" {set name [string range $line [expr $ind+2] end]} "absolutename" {set absname [string range $line [expr $ind+2] end]} "access" {set access [string range $line [expr $ind+2] end]} "hostport" {set hostport [string range $line [expr $ind+2] end]} "path" {set path [string range $line [expr $ind+2] end]} "anchor" {set anchor [string range $line [expr $ind+2] end]} } } } # #Run the tests # if {![eof $fp]} { incr setnum 1 verbose "\nParse set number: $setnum\n Name: $name\n AbsoluteName: $absname" 2 # if {$setnum == 8} {exp_internal 1} for {set i $PARSEANCHOR} {$i <= 16} {incr i $i} { incr testnum 1 switch $i { 2 {set givencompare $anchor} 4 {set givencompare $path} 8 {set givencompare $hostport} 16 {set givencompare $access} } set test HTParse_($setnum)_($i) set command "HTParse \"$name\" \"$absname\" [expr $i+$PARSEPUNCTUATION]" # Have to parse the strings and add slashes for regexp characters that # need to be literals set command_ready [join [list [fix_string "($command)"] "\r\n"] ""] set give_ready [fix_string "($givencompare)"] set both [join [list $command_ready $give_ready] ""] send "$command\r" verbose $test 1 verbose "$part($i):" 2 verbose " Expected: $givencompare" 2 expect { -re "$both\(\r\n)*($prompt)" {set actual $expect_out(2,string) pass $test} -re "$command_ready\(.*)\r\n($prompt)" {set actual $expect_out(2,string) fail $test} timeout {set actual "Timed out..." fail $test} } verbose " Result: $actual" 2 } } #Reset the line from the * markers set line "" } close $fp ################################################################################# # HTRelative(Aname, Relname) # ################################################################################# send_user "Starting HTRelative testing...\n" #For creating unique test names... set testnum 0 #To more easily identify the set it belongs to... set setnum 0 #Open example file send_user "Opening test file......" set fp [open "$srcdir/$W3CLIB.test/HTRelative.tests" r] send_user "file opened.\n" #Since line becomes a flag of sorts for the while loop, initialize it null. set line "" while {![eof $fp]} { #I use the * markers as the point to stop and run the test. # #Read in the data from the testfile # while {(![eof $fp]) && ([string compare $line "***********"] != 0)} { gets $fp line if {[string compare $line ""] != 0} { set ind [string first ": " $line] set type [string range $line 0 [expr $ind-1]] switch $type { "aname" {set aname [string range $line [expr $ind+2] end]} "relname" {set relname [string range $line [expr $ind+2] end]} "relative" {set relative [string range $line [expr $ind+2] end]} } } } # #Run the tests # if {![eof $fp]} { incr setnum 1 incr testnum 1 set test "HTRelative $aname $relname" set command "HTRelative \"$aname\" \"$relname\"" send "$command\r" verbose $test 1 verbose " Expected: $relative" expect { -re "($command)\r\n($relative)(\r\n)*($prompt)" {set actual $expect_out(2,string) pass $test} timeout {send_user "Timed out..." fail $test} } verbose " Result: $actual" 2 } #Reset the line from the * markers set line "" } close $fp ################################################################################# # HTSimplify(string) # ################################################################################# #For creating unique test names... set testnum 0 #To more easily identify the set it belongs to... set setnum 0 #Open example file set fp [open "$srcdir/$W3CLIB.test/HTSimplify.tests" r] #Since line becomes a flag of sorts for the while loop, initialize it null. set line "" while {![eof $fp]} { #I use the * markers as the point to stop and run the test. # #Read in the data from the testfile # while {(![eof $fp]) && ([string compare $line "***********"] != 0)} { gets $fp line if {[string compare $line ""] != 0} { set ind [string first ": " $line] set type [string range $line 0 [expr $ind-1]] switch $type { "string" {set string [string range $line [expr $ind+2] end]} "simplified" {set simplified [string range $line [expr $ind+2] end]} } } } # #Run the tests # if {![eof $fp]} { incr setnum 1 incr testnum 1 set test "HTSimplify $string" send "HTSimplify $string\r" verbose $test 1 verbose " Expected: $simplified" expect { "$simplified" {set actual $expect_out(0,string) pass $test} timeout {set actual "Timed out...." fail $test} } verbose " Result: $actual" 2 } #Reset the line from the * markers set line "" } close $fp ################################################################################# # HTCleanTelnetString(string) # ################################################################################# #exp_internal 1 #For creating unique test names... set testnum 0 #To more easily identify the set it belongs to... set setnum 0 #Open example file set fp [open "$srcdir/$W3CLIB.test/HTCleanTelnetString.tests" r] #Since line becomes a flag of sorts for the while loop, initialize it null. set line "" while {![eof $fp]} { #I use the * markers as the point to stop and run the test. #Read in the data from the testfile # while {(![eof $fp]) && ([string compare $line "***********"] != 0)} { gets $fp line if {[string compare $line ""] != 0} { set ind [string first ": " $line] set type [string range $line 0 [expr $ind-1]] switch $type { "unclean" {set unclean [string range $line [expr $ind+2] end]} "clean" {set clean [string range $line [expr $ind+2] end]} } } } # #Run the tests # if { 0 } { if {![eof $fp]} { incr setnum 1 incr testnum 1 send "HTCleanTelnetString \"\[eval HTUnEscape $unclean\]\"" set test HTCleanTelnetString_($testnum) verbose $test 1 verbose " Expected: $clean" set reg_ready [fix_string $clean] expect { -re "$reg_ready" {set actual $expect_out(0,string) pass $test} timeout {set actual "Timed out..." fail $test} } verbose " Result: $actual" 2 } } #Reset the line from the * markers set line "" } close $fp libwww/Library/Test/w3clib.test/HTParse.tests0100644000076400001440000071524006201426645020645 0ustar danielusersname: absolutename: x-url-access:/name access: x-url-access: hostport: path: /name anchor: *********** name: absolutename: x-urn-access:name access: x-urn-access: hostport: path: name anchor: *********** name: x-access:foo absolutename: name access: x-access: hostport: path: foo anchor: *********** name: absolutename: x-test-access-*.0-9@A-Z_a-z:/name access: x-test-access-*.0-9@A-Z_a-z: hostport: path: /name anchor: *********** name: absolutename: x-test-access:/-*.0-9@A-Z_a-z access: x-test-access: hostport: path: /-*.0-9@A-Z_a-z anchor: *********** name: absolutename: x-test-access:/-*.0-9@A-Z_a-z/-*.0-9@A-Z_a-z access: x-test-access: hostport: path: /-*.0-9@A-Z_a-z/-*.0-9@A-Z_a-z anchor: *********** name: absolutename: x-test-access://-*.0-9@A-Z_a-z/ access: x-test-access: hostport: //-*.0-9@A-Z_a-z path: / anchor: *********** name: absolutename: x-test-access://host/dir/file#-*.0-9@A-Z_a-z access: x-test-access: hostport: //host path: /dir/file anchor: #-*.0-9@A-Z_a-z *********** name: absolutename: x-test-access://slash%3D%2F/ access: x-test-access: hostport: //slash%3D%2F path: / anchor: *********** name: absolutename: x-test-access://host:slash%3D%2F/ access: x-test-access: hostport: //host:slash%3D%2F path: / anchor: *********** name: absolutename: x-test-access:/slash%3D%2F access: x-test-access: hostport: path: /slash%3D%2F anchor: *********** name: absolutename: x-test-access:/slash%3D%2F/slash%3D%2F access: x-test-access: hostport: path: /slash%3D%2F/slash%3D%2F anchor: *********** name: absolutename: x-test-access:/path;slash%3D%2F=slash%3D%2F;slash2%3D%2F=slash2%3D%2F access: x-test-access: hostport: path: /path;slash%3D%2F=slash%3D%2F;slash2%3D%2F=slash2%3D%2F anchor: *********** name: absolutename: x-test-access:/database?slash%3D%2F=slash%3D%2F;slash2%3D%2F=slash2%3D%2F access: x-test-access: hostport: path: /database?slash%3D%2F=slash%3D%2F;slash2%3D%2F=slash2%3D%2F anchor: *********** name: absolutename: x-test-access:/database?slash%3D%2F+slash%3D%2F+slash2%3D%2F+slash2%3D%2F access: x-test-access: hostport: path: /database?slash%3D%2F+slash%3D%2F+slash2%3D%2F+slash2%3D%2F anchor: *********** name: absolutename: x-test-access://host/dir/file#slash%3D%2F access: x-test-access: hostport: //host path: /dir/file anchor: #slash%3D%2F *********** name: absolutename: local-file:/etc/motd access: local-file: hostport: path: /etc/motd anchor: *********** name: absolutename: local-file:/u/connolly/xxx.ps access: local-file: hostport: path: /u/connolly/xxx.ps anchor: *********** name: absolutename: local-file://ulua.hal.com/u/connolly/xxx.ps access: local-file: hostport: //ulua.hal.com path: /u/connolly/xxx.ps anchor: *********** name: absolutename: local-file://foo.com/ access: local-file: hostport: //foo.com path: / anchor: *********** name: absolutename: local-file:/etc/ access: local-file: hostport: path: /etc/ anchor: *********** name: local-file:/dir1/dir2 absolutename: ../foo.html access: local-file: hostport: path: /dir1/dir2 anchor: *********** name: local-file:/dir1/dir2 absolutename: ../dir/foo.html access: local-file: hostport: path: /dir1/dir2 anchor: *********** name: ../dir/foo.html#part1 absolutename: local-file:/dir1/dir2 access: local-file: hostport: path: /dir/foo.html anchor: #part1 *********** name: local-file:/dir1/dir2 absolutename: ../other/dir/ access: local-file: hostport: path: /dir1/dir2 anchor: *********** name: absolutename: anon-ftp://info.cern.ch/pub/ access: anon-ftp: hostport: //info.cern.ch path: /pub/ anchor: *********** name: absolutename: anon-ftp://info.cern.ch/WWW/contrib/foo.tar.Z access: anon-ftp: hostport: //info.cern.ch path: /WWW/contrib/foo.tar.Z anchor: *********** name: absolutename: ftp://user@info.cern.ch/WWW/contrib/foo.tar.Z access: ftp: hostport: //user@info.cern.ch path: /WWW/contrib/foo.tar.Z anchor: *********** name: absolutename: ftp://user*passwd@info.cern.ch/WWW/contrib/foo.tar.Z access: ftp: hostport: //user*passwd@info.cern.ch path: /WWW/contrib/foo.tar.Z anchor: *********** name: absolutename: http://info.cern.ch/default.html access: http: hostport: //info.cern.ch path: /default.html anchor: *********** name: absolutename: http://host.com:100/default.html access: http: hostport: //host.com:100 path: /default.html anchor: *********** name: absolutename: http://host.com:10/file.txt access: http: hostport: //host.com:10 path: /file.txt anchor: *********** name: absolutename: http://host.com/database? access: http: hostport: //host.com path: /database? anchor: *********** name: absolutename: http://host.com/database?word access: http: hostport: //host.com path: /database?word anchor: *********** name: absolutename: http://host.com/database?word1+word2 access: http: hostport: //host.com path: /database?word1+word2 anchor: *********** name: absolutename: http://host.com/database?word1+word2+word%2A%3A33 access: http: hostport: //host.com path: /database?word1+word2+word%2A%3A33 anchor: *********** name: absolutename: gopher://host.org/ access: gopher: hostport: //host.org path: / anchor: *********** name: absolutename: gopher://host.org/7About%20This%20Gopher access: gopher: hostport: //host.org path: /7About%20This%20Gopher anchor: *********** name: absolutename: gopher://host.org/11/stuff/README access: gopher: hostport: //host.org path: /11/stuff/README anchor: *********** name: absolutename: gopher://host.org/II/stuff/foo.gif access: gopher: hostport: //host.org path: /II/stuff/foo.gif anchor: *********** name: absolutename: gopher://host.org/7database?word%20word2 access: gopher: hostport: //host.org path: /7database?word%20word2 anchor: *********** name: absolutename: gopher://host.org/7database?word+word2 access: gopher: hostport: //host.org path: /7database?word+word2 anchor: *********** name: absolutename: wais://ifi.uio.no/comp.text.sgml? access: wais: hostport: //ifi.uio.no path: /comp.text.sgml? anchor: *********** name: absolutename: mailto:connolly@hal.com access: mailto: hostport: path: connolly@hal.com anchor: *********** name: absolutename: x-mailbox:connolly@hal.com access: x-mailbox: hostport: path: connolly@hal.com anchor: *********** name: absolutename: news:comp.infosystems.www access: news: hostport: path: comp.infosystems.www anchor: *********** name: absolutename: news:June-21.12312@ulua.hal.com access: news: hostport: path: June-21.12312@ulua.hal.com anchor: *********** name: message-id:1234 absolutename: June-12.foobar@ulua access: message-id: hostport: path: 1234 anchor: *********** name: absolutename: http://host/1234?Name=foo;Age=21 access: http: hostport: //host path: /1234?Name=foo;Age=21 anchor: *********** name: absolutename: http://host/1234?Name=foo access: http: hostport: //host path: /1234?Name=foo anchor: *********** name: absolutename: http://host/1234?Name+foo access: http: hostport: //host path: /1234?Name+foo anchor: *********** name: absolutename: http://host/1234?Name%20foo access: http: hostport: //host path: /1234?Name%20foo anchor: *********** name: absolutename: http://host/1234?777,888 access: http: hostport: //host path: /1234?777,888 anchor: *********** name: .././././.././i/j/k/foo.html#bar absolutename: http://host/a/b/c/d/e access: http: hostport: //host path: /a/b/i/j/k/foo.html anchor: #bar *********** /*END OF CONNOLLY'S OLD SET*******************************/ /*NEXT SET GENERATED FROM RFC1738*************************/ name: ftp://foo.bar.com absolutename: ftp://foo.bar.com access: ftp: hostport: //foo.bar.com path: / anchor: *********** name: ftp://foo.bar.com;type=a absolutename: ftp://foo.bar.com;type=a access: ftp: hostport: //foo.bar.com;type=a path: / anchor: *********** name: ftp://foo.bar.com;type=d absolutename: ftp://foo.bar.com;type=d access: ftp: hostport: //foo.bar.com;type=d path: / anchor: *********** name: ftp://foo.bar.com;type=i absolutename: ftp://foo.bar.com;type=i access: ftp: hostport: //foo.bar.com;type=i path: / anchor: *********** name: ftp://foo.bar.com/ absolutename: ftp://foo.bar.com/ access: ftp: hostport: //foo.bar.com path: / anchor: *********** name: ftp://foo.bar.com/;type=a absolutename: ftp://foo.bar.com/;type=a access: ftp: hostport: //foo.bar.com path: /;type=a anchor: *********** name: ftp://foo.bar.com/;type=d absolutename: ftp://foo.bar.com/;type=d access: ftp: hostport: //foo.bar.com path: /;type=d anchor: *********** name: ftp://foo.bar.com/;type=i absolutename: ftp://foo.bar.com/;type=i access: ftp: hostport: //foo.bar.com path: /;type=i anchor: *********** name: ftp://foo.bar.com/a/b/c/ absolutename: ftp://foo.bar.com/a/b/c/ access: ftp: hostport: //foo.bar.com path: /a/b/c/ anchor: *********** name: ftp://foo.bar.com/a/b/c/;type=a absolutename: ftp://foo.bar.com/a/b/c/;type=a access: ftp: hostport: //foo.bar.com path: /a/b/c/;type=a anchor: *********** name: ftp://foo.bar.com/a/b/c/;type=d absolutename: ftp://foo.bar.com/a/b/c/;type=d access: ftp: hostport: //foo.bar.com path: /a/b/c/;type=d anchor: *********** name: ftp://foo.bar.com/a/b/c/;type=i absolutename: ftp://foo.bar.com/a/b/c/;type=i access: ftp: hostport: //foo.bar.com path: /a/b/c/;type=i anchor: *********** name: ftp://foo.bar.com/a/b/c absolutename: ftp://foo.bar.com/a/b/c access: ftp: hostport: //foo.bar.com path: /a/b/c anchor: *********** name: ftp://foo.bar.com/a/b/c;type=a absolutename: ftp://foo.bar.com/a/b/c;type=a access: ftp: hostport: //foo.bar.com path: /a/b/c;type=a anchor: *********** name: ftp://foo.bar.com/a/b/c;type=d absolutename: ftp://foo.bar.com/a/b/c;type=d access: ftp: hostport: //foo.bar.com path: /a/b/c;type=d anchor: *********** name: ftp://foo.bar.com/a/b/c;type=i absolutename: ftp://foo.bar.com/a/b/c;type=i access: ftp: hostport: //foo.bar.com path: /a/b/c;type=i anchor: *********** name: ftp://foo.bar.com/../a/b absolutename: ftp://foo.bar.com/../a/b access: ftp: hostport: //foo.bar.com path: /../a/b anchor: *********** name: ftp://foo.bar.com/../a/b;type=a absolutename: ftp://foo.bar.com/../a/b;type=a access: ftp: hostport: //foo.bar.com path: /../a/b;type=a anchor: *********** name: ftp://foo.bar.com/../a/b;type=d absolutename: ftp://foo.bar.com/../a/b;type=d access: ftp: hostport: //foo.bar.com path: /../a/b;type=d anchor: *********** name: ftp://foo.bar.com/../a/b;type=i absolutename: ftp://foo.bar.com/../a/b;type=i access: ftp: hostport: //foo.bar.com path: /../a/b;type=i anchor: *********** name: ftp://foo.bar.com/b/c%20d/!&#/ absolutename: ftp://foo.bar.com/b/c%20d/!&#/ access: ftp: hostport: //foo.bar.com path: /b/c%20d/!& anchor: #/ *********** name: ftp://foo.bar.com/b/c%20d/!&#/;type=a absolutename: ftp://foo.bar.com/b/c%20d/!&#/;type=a access: ftp: hostport: //foo.bar.com path: /b/c%20d/!& anchor: #/;type=a *********** name: ftp://foo.bar.com/b/c%20d/!&#/;type=d absolutename: ftp://foo.bar.com/b/c%20d/!&#/;type=d access: ftp: hostport: //foo.bar.com path: /b/c%20d/!& anchor: #/;type=d *********** name: ftp://foo.bar.com/b/c%20d/!&#/;type=i absolutename: ftp://foo.bar.com/b/c%20d/!&#/;type=i access: ftp: hostport: //foo.bar.com path: /b/c%20d/!& anchor: #/;type=i *********** name: ftp://foo.bar.com:100 absolutename: ftp://foo.bar.com:100 access: ftp: hostport: //foo.bar.com:100 path: / anchor: *********** name: ftp://foo.bar.com:100;type=a absolutename: ftp://foo.bar.com:100;type=a access: ftp: hostport: //foo.bar.com:100;type=a path: / anchor: *********** name: ftp://foo.bar.com:100;type=d absolutename: ftp://foo.bar.com:100;type=d access: ftp: hostport: //foo.bar.com:100;type=d path: / anchor: *********** name: ftp://foo.bar.com:100;type=i absolutename: ftp://foo.bar.com:100;type=i access: ftp: hostport: //foo.bar.com:100;type=i path: / anchor: *********** name: ftp://foo.bar.com:100/ absolutename: ftp://foo.bar.com:100/ access: ftp: hostport: //foo.bar.com:100 path: / anchor: *********** name: ftp://foo.bar.com:100/;type=a absolutename: ftp://foo.bar.com:100/;type=a access: ftp: hostport: //foo.bar.com:100 path: /;type=a anchor: *********** name: ftp://foo.bar.com:100/;type=d absolutename: ftp://foo.bar.com:100/;type=d access: ftp: hostport: //foo.bar.com:100 path: /;type=d anchor: *********** name: ftp://foo.bar.com:100/;type=i absolutename: ftp://foo.bar.com:100/;type=i access: ftp: hostport: //foo.bar.com:100 path: /;type=i anchor: *********** name: ftp://foo.bar.com:100/a/b/c/ absolutename: ftp://foo.bar.com:100/a/b/c/ access: ftp: hostport: //foo.bar.com:100 path: /a/b/c/ anchor: *********** name: ftp://foo.bar.com:100/a/b/c/;type=a absolutename: ftp://foo.bar.com:100/a/b/c/;type=a access: ftp: hostport: //foo.bar.com:100 path: /a/b/c/;type=a anchor: *********** name: ftp://foo.bar.com:100/a/b/c/;type=d absolutename: ftp://foo.bar.com:100/a/b/c/;type=d access: ftp: hostport: //foo.bar.com:100 path: /a/b/c/;type=d anchor: *********** name: ftp://foo.bar.com:100/a/b/c/;type=i absolutename: ftp://foo.bar.com:100/a/b/c/;type=i access: ftp: hostport: //foo.bar.com:100 path: /a/b/c/;type=i anchor: *********** name: ftp://foo.bar.com:100/a/b/c absolutename: ftp://foo.bar.com:100/a/b/c access: ftp: hostport: //foo.bar.com:100 path: /a/b/c anchor: *********** name: ftp://foo.bar.com:100/a/b/c;type=a absolutename: ftp://foo.bar.com:100/a/b/c;type=a access: ftp: hostport: //foo.bar.com:100 path: /a/b/c;type=a anchor: *********** name: ftp://foo.bar.com:100/a/b/c;type=d absolutename: ftp://foo.bar.com:100/a/b/c;type=d access: ftp: hostport: //foo.bar.com:100 path: /a/b/c;type=d anchor: *********** name: ftp://foo.bar.com:100/a/b/c;type=i absolutename: ftp://foo.bar.com:100/a/b/c;type=i access: ftp: hostport: //foo.bar.com:100 path: /a/b/c;type=i anchor: *********** name: ftp://foo.bar.com:100/../a/b absolutename: ftp://foo.bar.com:100/../a/b access: ftp: hostport: //foo.bar.com:100 path: /../a/b anchor: *********** name: ftp://foo.bar.com:100/../a/b;type=a absolutename: ftp://foo.bar.com:100/../a/b;type=a access: ftp: hostport: //foo.bar.com:100 path: /../a/b;type=a anchor: *********** name: ftp://foo.bar.com:100/../a/b;type=d absolutename: ftp://foo.bar.com:100/../a/b;type=d access: ftp: hostport: //foo.bar.com:100 path: /../a/b;type=d anchor: *********** name: ftp://foo.bar.com:100/../a/b;type=i absolutename: ftp://foo.bar.com:100/../a/b;type=i access: ftp: hostport: //foo.bar.com:100 path: /../a/b;type=i anchor: *********** name: ftp://foo.bar.com:100/b/c%20d/!&#/ absolutename: ftp://foo.bar.com:100/b/c%20d/!&#/ access: ftp: hostport: //foo.bar.com:100 path: /b/c%20d/!& anchor: #/ *********** name: ftp://foo.bar.com:100/b/c%20d/!&#/;type=a absolutename: ftp://foo.bar.com:100/b/c%20d/!&#/;type=a access: ftp: hostport: //foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=a *********** name: ftp://foo.bar.com:100/b/c%20d/!&#/;type=d absolutename: ftp://foo.bar.com:100/b/c%20d/!&#/;type=d access: ftp: hostport: //foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=d *********** name: ftp://foo.bar.com:100/b/c%20d/!&#/;type=i absolutename: ftp://foo.bar.com:100/b/c%20d/!&#/;type=i access: ftp: hostport: //foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=i *********** name: ftp://1.1.1.1 absolutename: ftp://1.1.1.1 access: ftp: hostport: //1.1.1.1 path: / anchor: *********** name: ftp://1.1.1.1;type=a absolutename: ftp://1.1.1.1;type=a access: ftp: hostport: //1.1.1.1;type=a path: / anchor: *********** name: ftp://1.1.1.1;type=d absolutename: ftp://1.1.1.1;type=d access: ftp: hostport: //1.1.1.1;type=d path: / anchor: *********** name: ftp://1.1.1.1;type=i absolutename: ftp://1.1.1.1;type=i access: ftp: hostport: //1.1.1.1;type=i path: / anchor: *********** name: ftp://1.1.1.1/ absolutename: ftp://1.1.1.1/ access: ftp: hostport: //1.1.1.1 path: / anchor: *********** name: ftp://1.1.1.1/;type=a absolutename: ftp://1.1.1.1/;type=a access: ftp: hostport: //1.1.1.1 path: /;type=a anchor: *********** name: ftp://1.1.1.1/;type=d absolutename: ftp://1.1.1.1/;type=d access: ftp: hostport: //1.1.1.1 path: /;type=d anchor: *********** name: ftp://1.1.1.1/;type=i absolutename: ftp://1.1.1.1/;type=i access: ftp: hostport: //1.1.1.1 path: /;type=i anchor: *********** name: ftp://1.1.1.1/a/b/c/ absolutename: ftp://1.1.1.1/a/b/c/ access: ftp: hostport: //1.1.1.1 path: /a/b/c/ anchor: *********** name: ftp://1.1.1.1/a/b/c/;type=a absolutename: ftp://1.1.1.1/a/b/c/;type=a access: ftp: hostport: //1.1.1.1 path: /a/b/c/;type=a anchor: *********** name: ftp://1.1.1.1/a/b/c/;type=d absolutename: ftp://1.1.1.1/a/b/c/;type=d access: ftp: hostport: //1.1.1.1 path: /a/b/c/;type=d anchor: *********** name: ftp://1.1.1.1/a/b/c/;type=i absolutename: ftp://1.1.1.1/a/b/c/;type=i access: ftp: hostport: //1.1.1.1 path: /a/b/c/;type=i anchor: *********** name: ftp://1.1.1.1/a/b/c absolutename: ftp://1.1.1.1/a/b/c access: ftp: hostport: //1.1.1.1 path: /a/b/c anchor: *********** name: ftp://1.1.1.1/a/b/c;type=a absolutename: ftp://1.1.1.1/a/b/c;type=a access: ftp: hostport: //1.1.1.1 path: /a/b/c;type=a anchor: *********** name: ftp://1.1.1.1/a/b/c;type=d absolutename: ftp://1.1.1.1/a/b/c;type=d access: ftp: hostport: //1.1.1.1 path: /a/b/c;type=d anchor: *********** name: ftp://1.1.1.1/a/b/c;type=i absolutename: ftp://1.1.1.1/a/b/c;type=i access: ftp: hostport: //1.1.1.1 path: /a/b/c;type=i anchor: *********** name: ftp://1.1.1.1/../a/b absolutename: ftp://1.1.1.1/../a/b access: ftp: hostport: //1.1.1.1 path: /../a/b anchor: *********** name: ftp://1.1.1.1/../a/b;type=a absolutename: ftp://1.1.1.1/../a/b;type=a access: ftp: hostport: //1.1.1.1 path: /../a/b;type=a anchor: *********** name: ftp://1.1.1.1/../a/b;type=d absolutename: ftp://1.1.1.1/../a/b;type=d access: ftp: hostport: //1.1.1.1 path: /../a/b;type=d anchor: *********** name: ftp://1.1.1.1/../a/b;type=i absolutename: ftp://1.1.1.1/../a/b;type=i access: ftp: hostport: //1.1.1.1 path: /../a/b;type=i anchor: *********** name: ftp://1.1.1.1/b/c%20d/!&#/ absolutename: ftp://1.1.1.1/b/c%20d/!&#/ access: ftp: hostport: //1.1.1.1 path: /b/c%20d/!& anchor: #/ *********** name: ftp://1.1.1.1/b/c%20d/!&#/;type=a absolutename: ftp://1.1.1.1/b/c%20d/!&#/;type=a access: ftp: hostport: //1.1.1.1 path: /b/c%20d/!& anchor: #/;type=a *********** name: ftp://1.1.1.1/b/c%20d/!&#/;type=d absolutename: ftp://1.1.1.1/b/c%20d/!&#/;type=d access: ftp: hostport: //1.1.1.1 path: /b/c%20d/!& anchor: #/;type=d *********** name: ftp://1.1.1.1/b/c%20d/!&#/;type=i absolutename: ftp://1.1.1.1/b/c%20d/!&#/;type=i access: ftp: hostport: //1.1.1.1 path: /b/c%20d/!& anchor: #/;type=i *********** name: ftp://1.1.1.1:100 absolutename: ftp://1.1.1.1:100 access: ftp: hostport: //1.1.1.1:100 path: / anchor: *********** name: ftp://1.1.1.1:100;type=a absolutename: ftp://1.1.1.1:100;type=a access: ftp: hostport: //1.1.1.1:100;type=a path: / anchor: *********** name: ftp://1.1.1.1:100;type=d absolutename: ftp://1.1.1.1:100;type=d access: ftp: hostport: //1.1.1.1:100;type=d path: / anchor: *********** name: ftp://1.1.1.1:100;type=i absolutename: ftp://1.1.1.1:100;type=i access: ftp: hostport: //1.1.1.1:100;type=i path: / anchor: *********** name: ftp://1.1.1.1:100/ absolutename: ftp://1.1.1.1:100/ access: ftp: hostport: //1.1.1.1:100 path: / anchor: *********** name: ftp://1.1.1.1:100/;type=a absolutename: ftp://1.1.1.1:100/;type=a access: ftp: hostport: //1.1.1.1:100 path: /;type=a anchor: *********** name: ftp://1.1.1.1:100/;type=d absolutename: ftp://1.1.1.1:100/;type=d access: ftp: hostport: //1.1.1.1:100 path: /;type=d anchor: *********** name: ftp://1.1.1.1:100/;type=i absolutename: ftp://1.1.1.1:100/;type=i access: ftp: hostport: //1.1.1.1:100 path: /;type=i anchor: *********** name: ftp://1.1.1.1:100/a/b/c/ absolutename: ftp://1.1.1.1:100/a/b/c/ access: ftp: hostport: //1.1.1.1:100 path: /a/b/c/ anchor: *********** name: ftp://1.1.1.1:100/a/b/c/;type=a absolutename: ftp://1.1.1.1:100/a/b/c/;type=a access: ftp: hostport: //1.1.1.1:100 path: /a/b/c/;type=a anchor: *********** name: ftp://1.1.1.1:100/a/b/c/;type=d absolutename: ftp://1.1.1.1:100/a/b/c/;type=d access: ftp: hostport: //1.1.1.1:100 path: /a/b/c/;type=d anchor: *********** name: ftp://1.1.1.1:100/a/b/c/;type=i absolutename: ftp://1.1.1.1:100/a/b/c/;type=i access: ftp: hostport: //1.1.1.1:100 path: /a/b/c/;type=i anchor: *********** name: ftp://1.1.1.1:100/a/b/c absolutename: ftp://1.1.1.1:100/a/b/c access: ftp: hostport: //1.1.1.1:100 path: /a/b/c anchor: *********** name: ftp://1.1.1.1:100/a/b/c;type=a absolutename: ftp://1.1.1.1:100/a/b/c;type=a access: ftp: hostport: //1.1.1.1:100 path: /a/b/c;type=a anchor: *********** name: ftp://1.1.1.1:100/a/b/c;type=d absolutename: ftp://1.1.1.1:100/a/b/c;type=d access: ftp: hostport: //1.1.1.1:100 path: /a/b/c;type=d anchor: *********** name: ftp://1.1.1.1:100/a/b/c;type=i absolutename: ftp://1.1.1.1:100/a/b/c;type=i access: ftp: hostport: //1.1.1.1:100 path: /a/b/c;type=i anchor: *********** name: ftp://1.1.1.1:100/../a/b absolutename: ftp://1.1.1.1:100/../a/b access: ftp: hostport: //1.1.1.1:100 path: /../a/b anchor: *********** name: ftp://1.1.1.1:100/../a/b;type=a absolutename: ftp://1.1.1.1:100/../a/b;type=a access: ftp: hostport: //1.1.1.1:100 path: /../a/b;type=a anchor: *********** name: ftp://1.1.1.1:100/../a/b;type=d absolutename: ftp://1.1.1.1:100/../a/b;type=d access: ftp: hostport: //1.1.1.1:100 path: /../a/b;type=d anchor: *********** name: ftp://1.1.1.1:100/../a/b;type=i absolutename: ftp://1.1.1.1:100/../a/b;type=i access: ftp: hostport: //1.1.1.1:100 path: /../a/b;type=i anchor: *********** name: ftp://1.1.1.1:100/b/c%20d/!&#/ absolutename: ftp://1.1.1.1:100/b/c%20d/!&#/ access: ftp: hostport: //1.1.1.1:100 path: /b/c%20d/!& anchor: #/ *********** name: ftp://1.1.1.1:100/b/c%20d/!&#/;type=a absolutename: ftp://1.1.1.1:100/b/c%20d/!&#/;type=a access: ftp: hostport: //1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=a *********** name: ftp://1.1.1.1:100/b/c%20d/!&#/;type=d absolutename: ftp://1.1.1.1:100/b/c%20d/!&#/;type=d access: ftp: hostport: //1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=d *********** name: ftp://1.1.1.1:100/b/c%20d/!&#/;type=i absolutename: ftp://1.1.1.1:100/b/c%20d/!&#/;type=i access: ftp: hostport: //1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=i *********** name: ftp://:@foo.bar.com absolutename: ftp://:@foo.bar.com access: ftp: hostport: //:@foo.bar.com path: / anchor: *********** name: ftp://:@foo.bar.com;type=a absolutename: ftp://:@foo.bar.com;type=a access: ftp: hostport: //:@foo.bar.com;type=a path: / anchor: *********** name: ftp://:@foo.bar.com;type=d absolutename: ftp://:@foo.bar.com;type=d access: ftp: hostport: //:@foo.bar.com;type=d path: / anchor: *********** name: ftp://:@foo.bar.com;type=i absolutename: ftp://:@foo.bar.com;type=i access: ftp: hostport: //:@foo.bar.com;type=i path: / anchor: *********** name: ftp://:@foo.bar.com/ absolutename: ftp://:@foo.bar.com/ access: ftp: hostport: //:@foo.bar.com path: / anchor: *********** name: ftp://:@foo.bar.com/;type=a absolutename: ftp://:@foo.bar.com/;type=a access: ftp: hostport: //:@foo.bar.com path: /;type=a anchor: *********** name: ftp://:@foo.bar.com/;type=d absolutename: ftp://:@foo.bar.com/;type=d access: ftp: hostport: //:@foo.bar.com path: /;type=d anchor: *********** name: ftp://:@foo.bar.com/;type=i absolutename: ftp://:@foo.bar.com/;type=i access: ftp: hostport: //:@foo.bar.com path: /;type=i anchor: *********** name: ftp://:@foo.bar.com/a/b/c/ absolutename: ftp://:@foo.bar.com/a/b/c/ access: ftp: hostport: //:@foo.bar.com path: /a/b/c/ anchor: *********** name: ftp://:@foo.bar.com/a/b/c/;type=a absolutename: ftp://:@foo.bar.com/a/b/c/;type=a access: ftp: hostport: //:@foo.bar.com path: /a/b/c/;type=a anchor: *********** name: ftp://:@foo.bar.com/a/b/c/;type=d absolutename: ftp://:@foo.bar.com/a/b/c/;type=d access: ftp: hostport: //:@foo.bar.com path: /a/b/c/;type=d anchor: *********** name: ftp://:@foo.bar.com/a/b/c/;type=i absolutename: ftp://:@foo.bar.com/a/b/c/;type=i access: ftp: hostport: //:@foo.bar.com path: /a/b/c/;type=i anchor: *********** name: ftp://:@foo.bar.com/a/b/c absolutename: ftp://:@foo.bar.com/a/b/c access: ftp: hostport: //:@foo.bar.com path: /a/b/c anchor: *********** name: ftp://:@foo.bar.com/a/b/c;type=a absolutename: ftp://:@foo.bar.com/a/b/c;type=a access: ftp: hostport: //:@foo.bar.com path: /a/b/c;type=a anchor: *********** name: ftp://:@foo.bar.com/a/b/c;type=d absolutename: ftp://:@foo.bar.com/a/b/c;type=d access: ftp: hostport: //:@foo.bar.com path: /a/b/c;type=d anchor: *********** name: ftp://:@foo.bar.com/a/b/c;type=i absolutename: ftp://:@foo.bar.com/a/b/c;type=i access: ftp: hostport: //:@foo.bar.com path: /a/b/c;type=i anchor: *********** name: ftp://:@foo.bar.com/../a/b absolutename: ftp://:@foo.bar.com/../a/b access: ftp: hostport: //:@foo.bar.com path: /../a/b anchor: *********** name: ftp://:@foo.bar.com/../a/b;type=a absolutename: ftp://:@foo.bar.com/../a/b;type=a access: ftp: hostport: //:@foo.bar.com path: /../a/b;type=a anchor: *********** name: ftp://:@foo.bar.com/../a/b;type=d absolutename: ftp://:@foo.bar.com/../a/b;type=d access: ftp: hostport: //:@foo.bar.com path: /../a/b;type=d anchor: *********** name: ftp://:@foo.bar.com/../a/b;type=i absolutename: ftp://:@foo.bar.com/../a/b;type=i access: ftp: hostport: //:@foo.bar.com path: /../a/b;type=i anchor: *********** name: ftp://:@foo.bar.com/b/c%20d/!&#/ absolutename: ftp://:@foo.bar.com/b/c%20d/!&#/ access: ftp: hostport: //:@foo.bar.com path: /b/c%20d/!& anchor: #/ *********** name: ftp://:@foo.bar.com/b/c%20d/!&#/;type=a absolutename: ftp://:@foo.bar.com/b/c%20d/!&#/;type=a access: ftp: hostport: //:@foo.bar.com path: /b/c%20d/!& anchor: #/;type=a *********** name: ftp://:@foo.bar.com/b/c%20d/!&#/;type=d absolutename: ftp://:@foo.bar.com/b/c%20d/!&#/;type=d access: ftp: hostport: //:@foo.bar.com path: /b/c%20d/!& anchor: #/;type=d *********** name: ftp://:@foo.bar.com/b/c%20d/!&#/;type=i absolutename: ftp://:@foo.bar.com/b/c%20d/!&#/;type=i access: ftp: hostport: //:@foo.bar.com path: /b/c%20d/!& anchor: #/;type=i *********** name: ftp://:@foo.bar.com:100 absolutename: ftp://:@foo.bar.com:100 access: ftp: hostport: //:@foo.bar.com:100 path: / anchor: *********** name: ftp://:@foo.bar.com:100;type=a absolutename: ftp://:@foo.bar.com:100;type=a access: ftp: hostport: //:@foo.bar.com:100;type=a path: / anchor: *********** name: ftp://:@foo.bar.com:100;type=d absolutename: ftp://:@foo.bar.com:100;type=d access: ftp: hostport: //:@foo.bar.com:100;type=d path: / anchor: *********** name: ftp://:@foo.bar.com:100;type=i absolutename: ftp://:@foo.bar.com:100;type=i access: ftp: hostport: //:@foo.bar.com:100;type=i path: / anchor: *********** name: ftp://:@foo.bar.com:100/ absolutename: ftp://:@foo.bar.com:100/ access: ftp: hostport: //:@foo.bar.com:100 path: / anchor: *********** name: ftp://:@foo.bar.com:100/;type=a absolutename: ftp://:@foo.bar.com:100/;type=a access: ftp: hostport: //:@foo.bar.com:100 path: /;type=a anchor: *********** name: ftp://:@foo.bar.com:100/;type=d absolutename: ftp://:@foo.bar.com:100/;type=d access: ftp: hostport: //:@foo.bar.com:100 path: /;type=d anchor: *********** name: ftp://:@foo.bar.com:100/;type=i absolutename: ftp://:@foo.bar.com:100/;type=i access: ftp: hostport: //:@foo.bar.com:100 path: /;type=i anchor: *********** name: ftp://:@foo.bar.com:100/a/b/c/ absolutename: ftp://:@foo.bar.com:100/a/b/c/ access: ftp: hostport: //:@foo.bar.com:100 path: /a/b/c/ anchor: *********** name: ftp://:@foo.bar.com:100/a/b/c/;type=a absolutename: ftp://:@foo.bar.com:100/a/b/c/;type=a access: ftp: hostport: //:@foo.bar.com:100 path: /a/b/c/;type=a anchor: *********** name: ftp://:@foo.bar.com:100/a/b/c/;type=d absolutename: ftp://:@foo.bar.com:100/a/b/c/;type=d access: ftp: hostport: //:@foo.bar.com:100 path: /a/b/c/;type=d anchor: *********** name: ftp://:@foo.bar.com:100/a/b/c/;type=i absolutename: ftp://:@foo.bar.com:100/a/b/c/;type=i access: ftp: hostport: //:@foo.bar.com:100 path: /a/b/c/;type=i anchor: *********** name: ftp://:@foo.bar.com:100/a/b/c absolutename: ftp://:@foo.bar.com:100/a/b/c access: ftp: hostport: //:@foo.bar.com:100 path: /a/b/c anchor: *********** name: ftp://:@foo.bar.com:100/a/b/c;type=a absolutename: ftp://:@foo.bar.com:100/a/b/c;type=a access: ftp: hostport: //:@foo.bar.com:100 path: /a/b/c;type=a anchor: *********** name: ftp://:@foo.bar.com:100/a/b/c;type=d absolutename: ftp://:@foo.bar.com:100/a/b/c;type=d access: ftp: hostport: //:@foo.bar.com:100 path: /a/b/c;type=d anchor: *********** name: ftp://:@foo.bar.com:100/a/b/c;type=i absolutename: ftp://:@foo.bar.com:100/a/b/c;type=i access: ftp: hostport: //:@foo.bar.com:100 path: /a/b/c;type=i anchor: *********** name: ftp://:@foo.bar.com:100/../a/b absolutename: ftp://:@foo.bar.com:100/../a/b access: ftp: hostport: //:@foo.bar.com:100 path: /../a/b anchor: *********** name: ftp://:@foo.bar.com:100/../a/b;type=a absolutename: ftp://:@foo.bar.com:100/../a/b;type=a access: ftp: hostport: //:@foo.bar.com:100 path: /../a/b;type=a anchor: *********** name: ftp://:@foo.bar.com:100/../a/b;type=d absolutename: ftp://:@foo.bar.com:100/../a/b;type=d access: ftp: hostport: //:@foo.bar.com:100 path: /../a/b;type=d anchor: *********** name: ftp://:@foo.bar.com:100/../a/b;type=i absolutename: ftp://:@foo.bar.com:100/../a/b;type=i access: ftp: hostport: //:@foo.bar.com:100 path: /../a/b;type=i anchor: *********** name: ftp://:@foo.bar.com:100/b/c%20d/!&#/ absolutename: ftp://:@foo.bar.com:100/b/c%20d/!&#/ access: ftp: hostport: //:@foo.bar.com:100 path: /b/c%20d/!& anchor: #/ *********** name: ftp://:@foo.bar.com:100/b/c%20d/!&#/;type=a absolutename: ftp://:@foo.bar.com:100/b/c%20d/!&#/;type=a access: ftp: hostport: //:@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=a *********** name: ftp://:@foo.bar.com:100/b/c%20d/!&#/;type=d absolutename: ftp://:@foo.bar.com:100/b/c%20d/!&#/;type=d access: ftp: hostport: //:@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=d *********** name: ftp://:@foo.bar.com:100/b/c%20d/!&#/;type=i absolutename: ftp://:@foo.bar.com:100/b/c%20d/!&#/;type=i access: ftp: hostport: //:@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=i *********** name: ftp://:@1.1.1.1 absolutename: ftp://:@1.1.1.1 access: ftp: hostport: //:@1.1.1.1 path: / anchor: *********** name: ftp://:@1.1.1.1;type=a absolutename: ftp://:@1.1.1.1;type=a access: ftp: hostport: //:@1.1.1.1;type=a path: / anchor: *********** name: ftp://:@1.1.1.1;type=d absolutename: ftp://:@1.1.1.1;type=d access: ftp: hostport: //:@1.1.1.1;type=d path: / anchor: *********** name: ftp://:@1.1.1.1;type=i absolutename: ftp://:@1.1.1.1;type=i access: ftp: hostport: //:@1.1.1.1;type=i path: / anchor: *********** name: ftp://:@1.1.1.1/ absolutename: ftp://:@1.1.1.1/ access: ftp: hostport: //:@1.1.1.1 path: / anchor: *********** name: ftp://:@1.1.1.1/;type=a absolutename: ftp://:@1.1.1.1/;type=a access: ftp: hostport: //:@1.1.1.1 path: /;type=a anchor: *********** name: ftp://:@1.1.1.1/;type=d absolutename: ftp://:@1.1.1.1/;type=d access: ftp: hostport: //:@1.1.1.1 path: /;type=d anchor: *********** name: ftp://:@1.1.1.1/;type=i absolutename: ftp://:@1.1.1.1/;type=i access: ftp: hostport: //:@1.1.1.1 path: /;type=i anchor: *********** name: ftp://:@1.1.1.1/a/b/c/ absolutename: ftp://:@1.1.1.1/a/b/c/ access: ftp: hostport: //:@1.1.1.1 path: /a/b/c/ anchor: *********** name: ftp://:@1.1.1.1/a/b/c/;type=a absolutename: ftp://:@1.1.1.1/a/b/c/;type=a access: ftp: hostport: //:@1.1.1.1 path: /a/b/c/;type=a anchor: *********** name: ftp://:@1.1.1.1/a/b/c/;type=d absolutename: ftp://:@1.1.1.1/a/b/c/;type=d access: ftp: hostport: //:@1.1.1.1 path: /a/b/c/;type=d anchor: *********** name: ftp://:@1.1.1.1/a/b/c/;type=i absolutename: ftp://:@1.1.1.1/a/b/c/;type=i access: ftp: hostport: //:@1.1.1.1 path: /a/b/c/;type=i anchor: *********** name: ftp://:@1.1.1.1/a/b/c absolutename: ftp://:@1.1.1.1/a/b/c access: ftp: hostport: //:@1.1.1.1 path: /a/b/c anchor: *********** name: ftp://:@1.1.1.1/a/b/c;type=a absolutename: ftp://:@1.1.1.1/a/b/c;type=a access: ftp: hostport: //:@1.1.1.1 path: /a/b/c;type=a anchor: *********** name: ftp://:@1.1.1.1/a/b/c;type=d absolutename: ftp://:@1.1.1.1/a/b/c;type=d access: ftp: hostport: //:@1.1.1.1 path: /a/b/c;type=d anchor: *********** name: ftp://:@1.1.1.1/a/b/c;type=i absolutename: ftp://:@1.1.1.1/a/b/c;type=i access: ftp: hostport: //:@1.1.1.1 path: /a/b/c;type=i anchor: *********** name: ftp://:@1.1.1.1/../a/b absolutename: ftp://:@1.1.1.1/../a/b access: ftp: hostport: //:@1.1.1.1 path: /../a/b anchor: *********** name: ftp://:@1.1.1.1/../a/b;type=a absolutename: ftp://:@1.1.1.1/../a/b;type=a access: ftp: hostport: //:@1.1.1.1 path: /../a/b;type=a anchor: *********** name: ftp://:@1.1.1.1/../a/b;type=d absolutename: ftp://:@1.1.1.1/../a/b;type=d access: ftp: hostport: //:@1.1.1.1 path: /../a/b;type=d anchor: *********** name: ftp://:@1.1.1.1/../a/b;type=i absolutename: ftp://:@1.1.1.1/../a/b;type=i access: ftp: hostport: //:@1.1.1.1 path: /../a/b;type=i anchor: *********** name: ftp://:@1.1.1.1/b/c%20d/!&#/ absolutename: ftp://:@1.1.1.1/b/c%20d/!&#/ access: ftp: hostport: //:@1.1.1.1 path: /b/c%20d/!& anchor: #/ *********** name: ftp://:@1.1.1.1/b/c%20d/!&#/;type=a absolutename: ftp://:@1.1.1.1/b/c%20d/!&#/;type=a access: ftp: hostport: //:@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=a *********** name: ftp://:@1.1.1.1/b/c%20d/!&#/;type=d absolutename: ftp://:@1.1.1.1/b/c%20d/!&#/;type=d access: ftp: hostport: //:@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=d *********** name: ftp://:@1.1.1.1/b/c%20d/!&#/;type=i absolutename: ftp://:@1.1.1.1/b/c%20d/!&#/;type=i access: ftp: hostport: //:@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=i *********** name: ftp://:@1.1.1.1:100 absolutename: ftp://:@1.1.1.1:100 access: ftp: hostport: //:@1.1.1.1:100 path: / anchor: *********** name: ftp://:@1.1.1.1:100;type=a absolutename: ftp://:@1.1.1.1:100;type=a access: ftp: hostport: //:@1.1.1.1:100;type=a path: / anchor: *********** name: ftp://:@1.1.1.1:100;type=d absolutename: ftp://:@1.1.1.1:100;type=d access: ftp: hostport: //:@1.1.1.1:100;type=d path: / anchor: *********** name: ftp://:@1.1.1.1:100;type=i absolutename: ftp://:@1.1.1.1:100;type=i access: ftp: hostport: //:@1.1.1.1:100;type=i path: / anchor: *********** name: ftp://:@1.1.1.1:100/ absolutename: ftp://:@1.1.1.1:100/ access: ftp: hostport: //:@1.1.1.1:100 path: / anchor: *********** name: ftp://:@1.1.1.1:100/;type=a absolutename: ftp://:@1.1.1.1:100/;type=a access: ftp: hostport: //:@1.1.1.1:100 path: /;type=a anchor: *********** name: ftp://:@1.1.1.1:100/;type=d absolutename: ftp://:@1.1.1.1:100/;type=d access: ftp: hostport: //:@1.1.1.1:100 path: /;type=d anchor: *********** name: ftp://:@1.1.1.1:100/;type=i absolutename: ftp://:@1.1.1.1:100/;type=i access: ftp: hostport: //:@1.1.1.1:100 path: /;type=i anchor: *********** name: ftp://:@1.1.1.1:100/a/b/c/ absolutename: ftp://:@1.1.1.1:100/a/b/c/ access: ftp: hostport: //:@1.1.1.1:100 path: /a/b/c/ anchor: *********** name: ftp://:@1.1.1.1:100/a/b/c/;type=a absolutename: ftp://:@1.1.1.1:100/a/b/c/;type=a access: ftp: hostport: //:@1.1.1.1:100 path: /a/b/c/;type=a anchor: *********** name: ftp://:@1.1.1.1:100/a/b/c/;type=d absolutename: ftp://:@1.1.1.1:100/a/b/c/;type=d access: ftp: hostport: //:@1.1.1.1:100 path: /a/b/c/;type=d anchor: *********** name: ftp://:@1.1.1.1:100/a/b/c/;type=i absolutename: ftp://:@1.1.1.1:100/a/b/c/;type=i access: ftp: hostport: //:@1.1.1.1:100 path: /a/b/c/;type=i anchor: *********** name: ftp://:@1.1.1.1:100/a/b/c absolutename: ftp://:@1.1.1.1:100/a/b/c access: ftp: hostport: //:@1.1.1.1:100 path: /a/b/c anchor: *********** name: ftp://:@1.1.1.1:100/a/b/c;type=a absolutename: ftp://:@1.1.1.1:100/a/b/c;type=a access: ftp: hostport: //:@1.1.1.1:100 path: /a/b/c;type=a anchor: *********** name: ftp://:@1.1.1.1:100/a/b/c;type=d absolutename: ftp://:@1.1.1.1:100/a/b/c;type=d access: ftp: hostport: //:@1.1.1.1:100 path: /a/b/c;type=d anchor: *********** name: ftp://:@1.1.1.1:100/a/b/c;type=i absolutename: ftp://:@1.1.1.1:100/a/b/c;type=i access: ftp: hostport: //:@1.1.1.1:100 path: /a/b/c;type=i anchor: *********** name: ftp://:@1.1.1.1:100/../a/b absolutename: ftp://:@1.1.1.1:100/../a/b access: ftp: hostport: //:@1.1.1.1:100 path: /../a/b anchor: *********** name: ftp://:@1.1.1.1:100/../a/b;type=a absolutename: ftp://:@1.1.1.1:100/../a/b;type=a access: ftp: hostport: //:@1.1.1.1:100 path: /../a/b;type=a anchor: *********** name: ftp://:@1.1.1.1:100/../a/b;type=d absolutename: ftp://:@1.1.1.1:100/../a/b;type=d access: ftp: hostport: //:@1.1.1.1:100 path: /../a/b;type=d anchor: *********** name: ftp://:@1.1.1.1:100/../a/b;type=i absolutename: ftp://:@1.1.1.1:100/../a/b;type=i access: ftp: hostport: //:@1.1.1.1:100 path: /../a/b;type=i anchor: *********** name: ftp://:@1.1.1.1:100/b/c%20d/!&#/ absolutename: ftp://:@1.1.1.1:100/b/c%20d/!&#/ access: ftp: hostport: //:@1.1.1.1:100 path: /b/c%20d/!& anchor: #/ *********** name: ftp://:@1.1.1.1:100/b/c%20d/!&#/;type=a absolutename: ftp://:@1.1.1.1:100/b/c%20d/!&#/;type=a access: ftp: hostport: //:@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=a *********** name: ftp://:@1.1.1.1:100/b/c%20d/!&#/;type=d absolutename: ftp://:@1.1.1.1:100/b/c%20d/!&#/;type=d access: ftp: hostport: //:@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=d *********** name: ftp://:@1.1.1.1:100/b/c%20d/!&#/;type=i absolutename: ftp://:@1.1.1.1:100/b/c%20d/!&#/;type=i access: ftp: hostport: //:@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=i *********** name: ftp://anonymous:@@foo.bar.com$ absolutename: ftp://anonymous:@@foo.bar.com$ access: ftp: hostport: //anonymous:@@foo.bar.com$ path: / anchor: *********** name: ftp://anonymous:@@foo.bar.com;type=a$ absolutename: ftp://anonymous:@@foo.bar.com;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com;type=a$ path: / anchor: *********** name: ftp://anonymous:@@foo.bar.com;type=d$ absolutename: ftp://anonymous:@@foo.bar.com;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com;type=d$ path: / anchor: *********** name: ftp://anonymous:@@foo.bar.com;type=i$ absolutename: ftp://anonymous:@@foo.bar.com;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com;type=i$ path: / anchor: *********** name: ftp://anonymous:@@foo.bar.com/$ absolutename: ftp://anonymous:@@foo.bar.com/$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/;type=a$ absolutename: ftp://anonymous:@@foo.bar.com/;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /;type=a$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/;type=d$ absolutename: ftp://anonymous:@@foo.bar.com/;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /;type=d$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/;type=i$ absolutename: ftp://anonymous:@@foo.bar.com/;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /;type=i$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/a/b/c/$ absolutename: ftp://anonymous:@@foo.bar.com/a/b/c/$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/a/b/c/;type=a$ absolutename: ftp://anonymous:@@foo.bar.com/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/a/b/c/;type=d$ absolutename: ftp://anonymous:@@foo.bar.com/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/a/b/c/;type=i$ absolutename: ftp://anonymous:@@foo.bar.com/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/a/b/c$ absolutename: ftp://anonymous:@@foo.bar.com/a/b/c$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /a/b/c$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/a/b/c;type=a$ absolutename: ftp://anonymous:@@foo.bar.com/a/b/c;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/a/b/c;type=d$ absolutename: ftp://anonymous:@@foo.bar.com/a/b/c;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/a/b/c;type=i$ absolutename: ftp://anonymous:@@foo.bar.com/a/b/c;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/../a/b$ absolutename: ftp://anonymous:@@foo.bar.com/../a/b$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /../a/b$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/../a/b;type=a$ absolutename: ftp://anonymous:@@foo.bar.com/../a/b;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/../a/b;type=d$ absolutename: ftp://anonymous:@@foo.bar.com/../a/b;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/../a/b;type=i$ absolutename: ftp://anonymous:@@foo.bar.com/../a/b;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@@foo.bar.com/b/c%20d/!&#/$ absolutename: ftp://anonymous:@@foo.bar.com/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@@foo.bar.com/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@@foo.bar.com/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@@foo.bar.com/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@@foo.bar.com/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@@foo.bar.com/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@@foo.bar.com/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@@foo.bar.com:100$ absolutename: ftp://anonymous:@@foo.bar.com:100$ access: ftp: hostport: //anonymous:@@foo.bar.com:100$ path: / anchor: *********** name: ftp://anonymous:@@foo.bar.com:100;type=a$ absolutename: ftp://anonymous:@@foo.bar.com:100;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com:100;type=a$ path: / anchor: *********** name: ftp://anonymous:@@foo.bar.com:100;type=d$ absolutename: ftp://anonymous:@@foo.bar.com:100;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com:100;type=d$ path: / anchor: *********** name: ftp://anonymous:@@foo.bar.com:100;type=i$ absolutename: ftp://anonymous:@@foo.bar.com:100;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com:100;type=i$ path: / anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/$ absolutename: ftp://anonymous:@@foo.bar.com:100/$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/;type=a$ absolutename: ftp://anonymous:@@foo.bar.com:100/;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /;type=a$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/;type=d$ absolutename: ftp://anonymous:@@foo.bar.com:100/;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /;type=d$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/;type=i$ absolutename: ftp://anonymous:@@foo.bar.com:100/;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /;type=i$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/a/b/c/$ absolutename: ftp://anonymous:@@foo.bar.com:100/a/b/c/$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/a/b/c/;type=a$ absolutename: ftp://anonymous:@@foo.bar.com:100/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/a/b/c/;type=d$ absolutename: ftp://anonymous:@@foo.bar.com:100/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/a/b/c/;type=i$ absolutename: ftp://anonymous:@@foo.bar.com:100/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/a/b/c$ absolutename: ftp://anonymous:@@foo.bar.com:100/a/b/c$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/a/b/c;type=a$ absolutename: ftp://anonymous:@@foo.bar.com:100/a/b/c;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/a/b/c;type=d$ absolutename: ftp://anonymous:@@foo.bar.com:100/a/b/c;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/a/b/c;type=i$ absolutename: ftp://anonymous:@@foo.bar.com:100/a/b/c;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/../a/b$ absolutename: ftp://anonymous:@@foo.bar.com:100/../a/b$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /../a/b$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/../a/b;type=a$ absolutename: ftp://anonymous:@@foo.bar.com:100/../a/b;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/../a/b;type=d$ absolutename: ftp://anonymous:@@foo.bar.com:100/../a/b;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/../a/b;type=i$ absolutename: ftp://anonymous:@@foo.bar.com:100/../a/b;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@@foo.bar.com:100/b/c%20d/!&#/$ absolutename: ftp://anonymous:@@foo.bar.com:100/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@@foo.bar.com:100/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@@foo.bar.com:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@@foo.bar.com:100/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@@foo.bar.com:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@@foo.bar.com:100/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@@foo.bar.com:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@@1.1.1.1$ absolutename: ftp://anonymous:@@1.1.1.1$ access: ftp: hostport: //anonymous:@@1.1.1.1$ path: / anchor: *********** name: ftp://anonymous:@@1.1.1.1;type=a$ absolutename: ftp://anonymous:@@1.1.1.1;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1;type=a$ path: / anchor: *********** name: ftp://anonymous:@@1.1.1.1;type=d$ absolutename: ftp://anonymous:@@1.1.1.1;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1;type=d$ path: / anchor: *********** name: ftp://anonymous:@@1.1.1.1;type=i$ absolutename: ftp://anonymous:@@1.1.1.1;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1;type=i$ path: / anchor: *********** name: ftp://anonymous:@@1.1.1.1/$ absolutename: ftp://anonymous:@@1.1.1.1/$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/;type=a$ absolutename: ftp://anonymous:@@1.1.1.1/;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /;type=a$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/;type=d$ absolutename: ftp://anonymous:@@1.1.1.1/;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /;type=d$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/;type=i$ absolutename: ftp://anonymous:@@1.1.1.1/;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /;type=i$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/a/b/c/$ absolutename: ftp://anonymous:@@1.1.1.1/a/b/c/$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/a/b/c/;type=a$ absolutename: ftp://anonymous:@@1.1.1.1/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/a/b/c/;type=d$ absolutename: ftp://anonymous:@@1.1.1.1/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/a/b/c/;type=i$ absolutename: ftp://anonymous:@@1.1.1.1/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/a/b/c$ absolutename: ftp://anonymous:@@1.1.1.1/a/b/c$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/a/b/c;type=a$ absolutename: ftp://anonymous:@@1.1.1.1/a/b/c;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/a/b/c;type=d$ absolutename: ftp://anonymous:@@1.1.1.1/a/b/c;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/a/b/c;type=i$ absolutename: ftp://anonymous:@@1.1.1.1/a/b/c;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/../a/b$ absolutename: ftp://anonymous:@@1.1.1.1/../a/b$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /../a/b$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/../a/b;type=a$ absolutename: ftp://anonymous:@@1.1.1.1/../a/b;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/../a/b;type=d$ absolutename: ftp://anonymous:@@1.1.1.1/../a/b;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/../a/b;type=i$ absolutename: ftp://anonymous:@@1.1.1.1/../a/b;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@@1.1.1.1/b/c%20d/!&#/$ absolutename: ftp://anonymous:@@1.1.1.1/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@@1.1.1.1/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@@1.1.1.1/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@@1.1.1.1/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@@1.1.1.1/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@@1.1.1.1/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@@1.1.1.1/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@@1.1.1.1:100$ absolutename: ftp://anonymous:@@1.1.1.1:100$ access: ftp: hostport: //anonymous:@@1.1.1.1:100$ path: / anchor: *********** name: ftp://anonymous:@@1.1.1.1:100;type=a$ absolutename: ftp://anonymous:@@1.1.1.1:100;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1:100;type=a$ path: / anchor: *********** name: ftp://anonymous:@@1.1.1.1:100;type=d$ absolutename: ftp://anonymous:@@1.1.1.1:100;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1:100;type=d$ path: / anchor: *********** name: ftp://anonymous:@@1.1.1.1:100;type=i$ absolutename: ftp://anonymous:@@1.1.1.1:100;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1:100;type=i$ path: / anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/$ absolutename: ftp://anonymous:@@1.1.1.1:100/$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/;type=a$ absolutename: ftp://anonymous:@@1.1.1.1:100/;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /;type=a$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/;type=d$ absolutename: ftp://anonymous:@@1.1.1.1:100/;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /;type=d$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/;type=i$ absolutename: ftp://anonymous:@@1.1.1.1:100/;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /;type=i$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/a/b/c/$ absolutename: ftp://anonymous:@@1.1.1.1:100/a/b/c/$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/a/b/c/;type=a$ absolutename: ftp://anonymous:@@1.1.1.1:100/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/a/b/c/;type=d$ absolutename: ftp://anonymous:@@1.1.1.1:100/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/a/b/c/;type=i$ absolutename: ftp://anonymous:@@1.1.1.1:100/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/a/b/c$ absolutename: ftp://anonymous:@@1.1.1.1:100/a/b/c$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/a/b/c;type=a$ absolutename: ftp://anonymous:@@1.1.1.1:100/a/b/c;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/a/b/c;type=d$ absolutename: ftp://anonymous:@@1.1.1.1:100/a/b/c;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/a/b/c;type=i$ absolutename: ftp://anonymous:@@1.1.1.1:100/a/b/c;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/../a/b$ absolutename: ftp://anonymous:@@1.1.1.1:100/../a/b$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /../a/b$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/../a/b;type=a$ absolutename: ftp://anonymous:@@1.1.1.1:100/../a/b;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/../a/b;type=d$ absolutename: ftp://anonymous:@@1.1.1.1:100/../a/b;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/../a/b;type=i$ absolutename: ftp://anonymous:@@1.1.1.1:100/../a/b;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@@1.1.1.1:100/b/c%20d/!&#/$ absolutename: ftp://anonymous:@@1.1.1.1:100/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@@1.1.1.1:100/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@@1.1.1.1:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@@1.1.1.1:100/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@@1.1.1.1:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@@1.1.1.1:100/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@@1.1.1.1:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com;type=a$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com;type=d$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com;type=i$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /a/b/c$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/../a/b$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/../a/b$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /../a/b$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/../a/b;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/../a/b;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/../a/b;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/../a/b;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/../a/b;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/../a/b;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=a$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=d$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100;type=i$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/../a/b$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/../a/b$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /../a/b$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1;type=a$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1;type=d$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1;type=i$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/../a/b$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/../a/b$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /../a/b$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/../a/b;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/../a/b;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/../a/b;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/../a/b;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/../a/b;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/../a/b;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=a$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=d$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100;type=i$ path: / anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/../a/b$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/../a/b$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /../a/b$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@foobar@foo.bar.com@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com;type=a$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com;type=d$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com;type=i$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c/$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /a/b/c$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/a/b/c;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/../a/b$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/../a/b$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /../a/b$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/../a/b;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/../a/b;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/../a/b;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/../a/b;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/../a/b;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/../a/b;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100;type=a$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100;type=d$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100;type=i$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c/$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/../a/b$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/../a/b$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /../a/b$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/../a/b;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/../a/b;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/../a/b;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/../a/b;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/../a/b;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/../a/b;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1;type=a$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1;type=d$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1;type=i$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c/$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/a/b/c;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/../a/b$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/../a/b$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /../a/b$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/../a/b;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/../a/b;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/../a/b;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/../a/b;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/../a/b;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/../a/b;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100;type=a$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100;type=d$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100;type=i$ path: / anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c/$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c/$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/../a/b$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/../a/b$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /../a/b$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/../a/b;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/../a/b;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /../a/b;type=a$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/../a/b;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/../a/b;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /../a/b;type=d$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/../a/b;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/../a/b;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /../a/b;type=i$ anchor: *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=a$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=d$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=i$ absolutename: ftp://anonymous:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //anonymous:@sdi3gjdfb@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@@foo.bar.com$ absolutename: ftp://foo.bar:@@foo.bar.com$ access: ftp: hostport: //foo.bar:@@foo.bar.com$ path: / anchor: *********** name: ftp://foo.bar:@@foo.bar.com;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com;type=a$ path: / anchor: *********** name: ftp://foo.bar:@@foo.bar.com;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com;type=d$ path: / anchor: *********** name: ftp://foo.bar:@@foo.bar.com;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com;type=i$ path: / anchor: *********** name: ftp://foo.bar:@@foo.bar.com/$ absolutename: ftp://foo.bar:@@foo.bar.com/$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com/;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /;type=a$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com/;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /;type=d$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com/;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /;type=i$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/a/b/c/$ absolutename: ftp://foo.bar:@@foo.bar.com/a/b/c/$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/a/b/c/;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/a/b/c/;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/a/b/c/;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/a/b/c$ absolutename: ftp://foo.bar:@@foo.bar.com/a/b/c$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/a/b/c;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/a/b/c;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/a/b/c;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/../a/b$ absolutename: ftp://foo.bar:@@foo.bar.com/../a/b$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /../a/b$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/../a/b;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com/../a/b;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/../a/b;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com/../a/b;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/../a/b;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com/../a/b;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@@foo.bar.com/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@@foo.bar.com/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@@foo.bar.com/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@@foo.bar.com/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@@foo.bar.com:100$ absolutename: ftp://foo.bar:@@foo.bar.com:100$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100$ path: / anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com:100;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100;type=a$ path: / anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com:100;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100;type=d$ path: / anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com:100;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100;type=i$ path: / anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/$ absolutename: ftp://foo.bar:@@foo.bar.com:100/$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com:100/;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com:100/;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com:100/;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/a/b/c/$ absolutename: ftp://foo.bar:@@foo.bar.com:100/a/b/c/$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/a/b/c/;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com:100/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/a/b/c/;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com:100/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/a/b/c/;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com:100/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/a/b/c$ absolutename: ftp://foo.bar:@@foo.bar.com:100/a/b/c$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/a/b/c;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com:100/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/a/b/c;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com:100/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/a/b/c;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com:100/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/../a/b$ absolutename: ftp://foo.bar:@@foo.bar.com:100/../a/b$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/../a/b;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com:100/../a/b;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/../a/b;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com:100/../a/b;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/../a/b;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com:100/../a/b;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@@foo.bar.com:100/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@@foo.bar.com:100/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@@foo.bar.com:100/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@@foo.bar.com:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@@foo.bar.com:100/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@@foo.bar.com:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@@foo.bar.com:100/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@@foo.bar.com:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@@1.1.1.1$ absolutename: ftp://foo.bar:@@1.1.1.1$ access: ftp: hostport: //foo.bar:@@1.1.1.1$ path: / anchor: *********** name: ftp://foo.bar:@@1.1.1.1;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1;type=a$ path: / anchor: *********** name: ftp://foo.bar:@@1.1.1.1;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1;type=d$ path: / anchor: *********** name: ftp://foo.bar:@@1.1.1.1;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1;type=i$ path: / anchor: *********** name: ftp://foo.bar:@@1.1.1.1/$ absolutename: ftp://foo.bar:@@1.1.1.1/$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1/;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1/;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1/;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/a/b/c/$ absolutename: ftp://foo.bar:@@1.1.1.1/a/b/c/$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/a/b/c/;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/a/b/c/;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/a/b/c/;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/a/b/c$ absolutename: ftp://foo.bar:@@1.1.1.1/a/b/c$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/a/b/c;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/a/b/c;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/a/b/c;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/../a/b$ absolutename: ftp://foo.bar:@@1.1.1.1/../a/b$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/../a/b;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1/../a/b;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/../a/b;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1/../a/b;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/../a/b;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1/../a/b;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@@1.1.1.1/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@@1.1.1.1/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@@1.1.1.1/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@@1.1.1.1/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@@1.1.1.1:100$ absolutename: ftp://foo.bar:@@1.1.1.1:100$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100$ path: / anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1:100;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100;type=a$ path: / anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1:100;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100;type=d$ path: / anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1:100;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100;type=i$ path: / anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/$ absolutename: ftp://foo.bar:@@1.1.1.1:100/$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1:100/;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1:100/;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1:100/;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/a/b/c/$ absolutename: ftp://foo.bar:@@1.1.1.1:100/a/b/c/$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/a/b/c/;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1:100/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/a/b/c/;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1:100/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/a/b/c/;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1:100/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/a/b/c$ absolutename: ftp://foo.bar:@@1.1.1.1:100/a/b/c$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/a/b/c;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1:100/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/a/b/c;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1:100/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/a/b/c;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1:100/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/../a/b$ absolutename: ftp://foo.bar:@@1.1.1.1:100/../a/b$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/../a/b;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1:100/../a/b;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/../a/b;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1:100/../a/b;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/../a/b;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1:100/../a/b;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@@1.1.1.1:100/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@@1.1.1.1:100/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@@1.1.1.1:100/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@@1.1.1.1:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@@1.1.1.1:100/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@@1.1.1.1:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@@1.1.1.1:100/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@@1.1.1.1:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com;type=a$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com;type=d$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com;type=i$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/../a/b$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/../a/b$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /../a/b$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/../a/b;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/../a/b;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/../a/b;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/../a/b;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/../a/b;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/../a/b;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=a$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=d$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100;type=i$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/../a/b$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/../a/b$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/../a/b;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@foo.bar.com:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1;type=a$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1;type=d$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1;type=i$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/../a/b$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/../a/b$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/../a/b;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/../a/b;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/../a/b;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/../a/b;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/../a/b;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/../a/b;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=a$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=d$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100;type=i$ path: / anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/../a/b$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/../a/b$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/../a/b;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@foobar@foo.bar.com@1.1.1.1:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@foobar@foo.bar.com@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com;type=a$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com;type=d$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com;type=i$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c/$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/../a/b$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/../a/b$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /../a/b$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/../a/b;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/../a/b;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/../a/b;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/../a/b;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/../a/b;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/../a/b;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100;type=a$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100;type=d$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100;type=i$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c/$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/../a/b$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/../a/b$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/../a/b;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/../a/b;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/../a/b;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/../a/b;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/../a/b;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/../a/b;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@foo.bar.com:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@foo.bar.com:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1;type=a$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1;type=d$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1;type=i$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c/$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/../a/b$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/../a/b$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/../a/b;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/../a/b;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/../a/b;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/../a/b;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/../a/b;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/../a/b;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100;type=a$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100;type=d$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100;type=i$ path: / anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c/$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c/$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c/;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c/;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c/;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/a/b/c;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /a/b/c;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/../a/b$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/../a/b$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /../a/b$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/../a/b;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/../a/b;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /../a/b;type=a$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/../a/b;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/../a/b;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /../a/b;type=d$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/../a/b;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/../a/b;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /../a/b;type=i$ anchor: *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /b/c%20d/!& anchor: #/$ *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=a$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=a$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=a$ *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=d$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=d$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=d$ *********** name: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=i$ absolutename: ftp://foo.bar:@sdi3gjdfb@1.1.1.1:100/b/c%20d/!&#/;type=i$ access: ftp: hostport: //foo.bar:@sdi3gjdfb@1.1.1.1:100 path: /b/c%20d/!& anchor: #/;type=i$ *********** name: http://foo.bar.com absolutename: http://foo.bar.com access: http: hostport: //foo.bar.com path: / anchor: *********** name: http://foo.bar.com?foo absolutename: http://foo.bar.com?foo access: http: hostport: //foo.bar.com?foo path: / anchor: *********** name: http://foo.bar.com?asdj2#%%%%^%! absolutename: http://foo.bar.com?asdj2#%%%%^%! access: http: hostport: //foo.bar.com?asdj2 path: / anchor: #%%%%^%! *********** name: http://foo.bar.com/ absolutename: http://foo.bar.com/ access: http: hostport: //foo.bar.com path: / anchor: *********** name: http://foo.bar.com/?foo absolutename: http://foo.bar.com/?foo access: http: hostport: //foo.bar.com path: /?foo anchor: *********** name: http://foo.bar.com/?asdj2#%%%%^%! absolutename: http://foo.bar.com/?asdj2#%%%%^%! access: http: hostport: //foo.bar.com path: /?asdj2 anchor: #%%%%^%! *********** name: http://foo.bar.com/a/b/c/ absolutename: http://foo.bar.com/a/b/c/ access: http: hostport: //foo.bar.com path: /a/b/c/ anchor: *********** name: http://foo.bar.com/a/b/c/?foo absolutename: http://foo.bar.com/a/b/c/?foo access: http: hostport: //foo.bar.com path: /a/b/c/?foo anchor: *********** name: http://foo.bar.com/a/b/c/?asdj2#%%%%^%! absolutename: http://foo.bar.com/a/b/c/?asdj2#%%%%^%! access: http: hostport: //foo.bar.com path: /a/b/c/?asdj2 anchor: #%%%%^%! *********** name: http://foo.bar.com/a/b/c absolutename: http://foo.bar.com/a/b/c access: http: hostport: //foo.bar.com path: /a/b/c anchor: *********** name: http://foo.bar.com/a/b/c?foo absolutename: http://foo.bar.com/a/b/c?foo access: http: hostport: //foo.bar.com path: /a/b/c?foo anchor: *********** name: http://foo.bar.com/a/b/c?asdj2#%%%%^%! absolutename: http://foo.bar.com/a/b/c?asdj2#%%%%^%! access: http: hostport: //foo.bar.com path: /a/b/c?asdj2 anchor: #%%%%^%! *********** name: http://foo.bar.com/../a/b absolutename: http://foo.bar.com/../a/b access: http: hostport: //foo.bar.com path: /../a/b anchor: *********** name: http://foo.bar.com/../a/b?foo absolutename: http://foo.bar.com/../a/b?foo access: http: hostport: //foo.bar.com path: /../a/b?foo anchor: *********** name: http://foo.bar.com/../a/b?asdj2#%%%%^%! absolutename: http://foo.bar.com/../a/b?asdj2#%%%%^%! access: http: hostport: //foo.bar.com path: /../a/b?asdj2 anchor: #%%%%^%! *********** name: http://foo.bar.com/b/c%20d/!&#/ absolutename: http://foo.bar.com/b/c%20d/!&#/ access: http: hostport: //foo.bar.com path: /b/c%20d/!& anchor: #/ *********** name: http://foo.bar.com/b/c%20d/!&#/?foo absolutename: http://foo.bar.com/b/c%20d/!&#/?foo access: http: hostport: //foo.bar.com path: /b/c%20d/!& anchor: #/?foo *********** name: http://foo.bar.com/b/c%20d/!&#/?asdj2#%%%%^%! absolutename: http://foo.bar.com/b/c%20d/!&#/?asdj2#%%%%^%! access: http: hostport: //foo.bar.com path: /b/c%20d/!& anchor: #/?asdj2 *********** name: http://foo.bar.com:100 absolutename: http://foo.bar.com:100 access: http: hostport: //foo.bar.com:100 path: / anchor: *********** name: http://foo.bar.com:100?foo absolutename: http://foo.bar.com:100?foo access: http: hostport: //foo.bar.com:100?foo path: / anchor: *********** name: http://foo.bar.com:100?asdj2#%%%%^%! absolutename: http://foo.bar.com:100?asdj2#%%%%^%! access: http: hostport: //foo.bar.com:100?asdj2 path: / anchor: #%%%%^%! *********** name: http://foo.bar.com:100/ absolutename: http://foo.bar.com:100/ access: http: hostport: //foo.bar.com:100 path: / anchor: *********** name: http://foo.bar.com:100/?foo absolutename: http://foo.bar.com:100/?foo access: http: hostport: //foo.bar.com:100 path: /?foo anchor: *********** name: http://foo.bar.com:100/?asdj2#%%%%^%! absolutename: http://foo.bar.com:100/?asdj2#%%%%^%! access: http: hostport: //foo.bar.com:100 path: /?asdj2 anchor: #%%%%^%! *********** name: http://foo.bar.com:100/a/b/c/ absolutename: http://foo.bar.com:100/a/b/c/ access: http: hostport: //foo.bar.com:100 path: /a/b/c/ anchor: *********** name: http://foo.bar.com:100/a/b/c/?foo absolutename: http://foo.bar.com:100/a/b/c/?foo access: http: hostport: //foo.bar.com:100 path: /a/b/c/?foo anchor: *********** name: http://foo.bar.com:100/a/b/c/?asdj2#%%%%^%! absolutename: http://foo.bar.com:100/a/b/c/?asdj2#%%%%^%! access: http: hostport: //foo.bar.com:100 path: /a/b/c/?asdj2 anchor: #%%%%^%! *********** name: http://foo.bar.com:100/a/b/c absolutename: http://foo.bar.com:100/a/b/c access: http: hostport: //foo.bar.com:100 path: /a/b/c anchor: *********** name: http://foo.bar.com:100/a/b/c?foo absolutename: http://foo.bar.com:100/a/b/c?foo access: http: hostport: //foo.bar.com:100 path: /a/b/c?foo anchor: *********** name: http://foo.bar.com:100/a/b/c?asdj2#%%%%^%! absolutename: http://foo.bar.com:100/a/b/c?asdj2#%%%%^%! access: http: hostport: //foo.bar.com:100 path: /a/b/c?asdj2 anchor: #%%%%^%! *********** name: http://foo.bar.com:100/../a/b absolutename: http://foo.bar.com:100/../a/b access: http: hostport: //foo.bar.com:100 path: /../a/b anchor: *********** name: http://foo.bar.com:100/../a/b?foo absolutename: http://foo.bar.com:100/../a/b?foo access: http: hostport: //foo.bar.com:100 path: /../a/b?foo anchor: *********** name: http://foo.bar.com:100/../a/b?asdj2#%%%%^%! absolutename: http://foo.bar.com:100/../a/b?asdj2#%%%%^%! access: http: hostport: //foo.bar.com:100 path: /../a/b?asdj2 anchor: #%%%%^%! *********** name: http://foo.bar.com:100/b/c%20d/!&#/ absolutename: http://foo.bar.com:100/b/c%20d/!&#/ access: http: hostport: //foo.bar.com:100 path: /b/c%20d/!& anchor: #/ *********** name: http://foo.bar.com:100/b/c%20d/!&#/?foo absolutename: http://foo.bar.com:100/b/c%20d/!&#/?foo access: http: hostport: //foo.bar.com:100 path: /b/c%20d/!& anchor: #/?foo *********** name: http://foo.bar.com:100/b/c%20d/!&#/?asdj2#%%%%^%! absolutename: http://foo.bar.com:100/b/c%20d/!&#/?asdj2#%%%%^%! access: http: hostport: //foo.bar.com:100 path: /b/c%20d/!& anchor: #/?asdj2 *********** name: http://1.1.1.1 absolutename: http://1.1.1.1 access: http: hostport: //1.1.1.1 path: / anchor: *********** name: http://1.1.1.1?foo absolutename: http://1.1.1.1?foo access: http: hostport: //1.1.1.1?foo path: / anchor: *********** name: http://1.1.1.1?asdj2#%%%%^%! absolutename: http://1.1.1.1?asdj2#%%%%^%! access: http: hostport: //1.1.1.1?asdj2 path: / anchor: #%%%%^%! *********** name: http://1.1.1.1/ absolutename: http://1.1.1.1/ access: http: hostport: //1.1.1.1 path: / anchor: *********** name: http://1.1.1.1/?foo absolutename: http://1.1.1.1/?foo access: http: hostport: //1.1.1.1 path: /?foo anchor: *********** name: http://1.1.1.1/?asdj2#%%%%^%! absolutename: http://1.1.1.1/?asdj2#%%%%^%! access: http: hostport: //1.1.1.1 path: /?asdj2 anchor: #%%%%^%! *********** name: http://1.1.1.1/a/b/c/ absolutename: http://1.1.1.1/a/b/c/ access: http: hostport: //1.1.1.1 path: /a/b/c/ anchor: *********** name: http://1.1.1.1/a/b/c/?foo absolutename: http://1.1.1.1/a/b/c/?foo access: http: hostport: //1.1.1.1 path: /a/b/c/?foo anchor: *********** name: http://1.1.1.1/a/b/c/?asdj2#%%%%^%! absolutename: http://1.1.1.1/a/b/c/?asdj2#%%%%^%! access: http: hostport: //1.1.1.1 path: /a/b/c/?asdj2 anchor: #%%%%^%! *********** name: http://1.1.1.1/a/b/c absolutename: http://1.1.1.1/a/b/c access: http: hostport: //1.1.1.1 path: /a/b/c anchor: *********** name: http://1.1.1.1/a/b/c?foo absolutename: http://1.1.1.1/a/b/c?foo access: http: hostport: //1.1.1.1 path: /a/b/c?foo anchor: *********** name: http://1.1.1.1/a/b/c?asdj2#%%%%^%! absolutename: http://1.1.1.1/a/b/c?asdj2#%%%%^%! access: http: hostport: //1.1.1.1 path: /a/b/c?asdj2 anchor: #%%%%^%! *********** name: http://1.1.1.1/../a/b absolutename: http://1.1.1.1/../a/b access: http: hostport: //1.1.1.1 path: /../a/b anchor: *********** name: http://1.1.1.1/../a/b?foo absolutename: http://1.1.1.1/../a/b?foo access: http: hostport: //1.1.1.1 path: /../a/b?foo anchor: *********** name: http://1.1.1.1/../a/b?asdj2#%%%%^%! absolutename: http://1.1.1.1/../a/b?asdj2#%%%%^%! access: http: hostport: //1.1.1.1 path: /../a/b?asdj2 anchor: #%%%%^%! *********** name: http://1.1.1.1/b/c%20d/!&#/ absolutename: http://1.1.1.1/b/c%20d/!&#/ access: http: hostport: //1.1.1.1 path: /b/c%20d/!& anchor: #/ *********** name: http://1.1.1.1/b/c%20d/!&#/?foo absolutename: http://1.1.1.1/b/c%20d/!&#/?foo access: http: hostport: //1.1.1.1 path: /b/c%20d/!& anchor: #/?foo *********** name: http://1.1.1.1/b/c%20d/!&#/?asdj2#%%%%^%! absolutename: http://1.1.1.1/b/c%20d/!&#/?asdj2#%%%%^%! access: http: hostport: //1.1.1.1 path: /b/c%20d/!& anchor: #/?asdj2 *********** name: http://1.1.1.1:100 absolutename: http://1.1.1.1:100 access: http: hostport: //1.1.1.1:100 path: / anchor: *********** name: http://1.1.1.1:100?foo absolutename: http://1.1.1.1:100?foo access: http: hostport: //1.1.1.1:100?foo path: / anchor: *********** name: http://1.1.1.1:100?asdj2#%%%%^%! absolutename: http://1.1.1.1:100?asdj2#%%%%^%! access: http: hostport: //1.1.1.1:100?asdj2 path: / anchor: #%%%%^%! *********** name: http://1.1.1.1:100/ absolutename: http://1.1.1.1:100/ access: http: hostport: //1.1.1.1:100 path: / anchor: *********** name: http://1.1.1.1:100/?foo absolutename: http://1.1.1.1:100/?foo access: http: hostport: //1.1.1.1:100 path: /?foo anchor: *********** name: http://1.1.1.1:100/?asdj2#%%%%^%! absolutename: http://1.1.1.1:100/?asdj2#%%%%^%! access: http: hostport: //1.1.1.1:100 path: /?asdj2 anchor: #%%%%^%! *********** name: http://1.1.1.1:100/a/b/c/ absolutename: http://1.1.1.1:100/a/b/c/ access: http: hostport: //1.1.1.1:100 path: /a/b/c/ anchor: *********** name: http://1.1.1.1:100/a/b/c/?foo absolutename: http://1.1.1.1:100/a/b/c/?foo access: http: hostport: //1.1.1.1:100 path: /a/b/c/?foo anchor: *********** name: http://1.1.1.1:100/a/b/c/?asdj2#%%%%^%! absolutename: http://1.1.1.1:100/a/b/c/?asdj2#%%%%^%! access: http: hostport: //1.1.1.1:100 path: /a/b/c/?asdj2 anchor: #%%%%^%! *********** name: http://1.1.1.1:100/a/b/c absolutename: http://1.1.1.1:100/a/b/c access: http: hostport: //1.1.1.1:100 path: /a/b/c anchor: *********** name: http://1.1.1.1:100/a/b/c?foo absolutename: http://1.1.1.1:100/a/b/c?foo access: http: hostport: //1.1.1.1:100 path: /a/b/c?foo anchor: *********** name: http://1.1.1.1:100/a/b/c?asdj2#%%%%^%! absolutename: http://1.1.1.1:100/a/b/c?asdj2#%%%%^%! access: http: hostport: //1.1.1.1:100 path: /a/b/c?asdj2 anchor: #%%%%^%! *********** name: http://1.1.1.1:100/../a/b absolutename: http://1.1.1.1:100/../a/b access: http: hostport: //1.1.1.1:100 path: /../a/b anchor: *********** name: http://1.1.1.1:100/../a/b?foo absolutename: http://1.1.1.1:100/../a/b?foo access: http: hostport: //1.1.1.1:100 path: /../a/b?foo anchor: *********** name: http://1.1.1.1:100/../a/b?asdj2#%%%%^%! absolutename: http://1.1.1.1:100/../a/b?asdj2#%%%%^%! access: http: hostport: //1.1.1.1:100 path: /../a/b?asdj2 anchor: #%%%%^%! *********** name: http://1.1.1.1:100/b/c%20d/!&#/ absolutename: http://1.1.1.1:100/b/c%20d/!&#/ access: http: hostport: //1.1.1.1:100 path: /b/c%20d/!& anchor: #/ *********** name: http://1.1.1.1:100/b/c%20d/!&#/?foo absolutename: http://1.1.1.1:100/b/c%20d/!&#/?foo access: http: hostport: //1.1.1.1:100 path: /b/c%20d/!& anchor: #/?foo *********** name: http://1.1.1.1:100/b/c%20d/!&#/?asdj2#%%%%^%! absolutename: http://1.1.1.1:100/b/c%20d/!&#/?asdj2#%%%%^%! access: http: hostport: //1.1.1.1:100 path: /b/c%20d/!& anchor: #/?asdj2 *********** name: gopher://foo.bar.com/ absolutename: gopher://foo.bar.com/ access: gopher: hostport: //foo.bar.com path: / anchor: *********** name: gopher://foo.bar.com/00h/ absolutename: gopher://foo.bar.com/00h/ access: gopher: hostport: //foo.bar.com path: /00h/ anchor: *********** name: gopher://foo.bar.com/00h/a/b/c/ absolutename: gopher://foo.bar.com/00h/a/b/c/ access: gopher: hostport: //foo.bar.com path: /00h/a/b/c/ anchor: *********** name: gopher://foo.bar.com/00h/a/b/c absolutename: gopher://foo.bar.com/00h/a/b/c access: gopher: hostport: //foo.bar.com path: /00h/a/b/c anchor: *********** name: gopher://foo.bar.com/00h/../a/b absolutename: gopher://foo.bar.com/00h/../a/b access: gopher: hostport: //foo.bar.com path: /00h/../a/b anchor: *********** name: gopher://foo.bar.com/00h/b/c%20d/!&#/ absolutename: gopher://foo.bar.com/00h/b/c%20d/!&#/ access: gopher: hostport: //foo.bar.com path: /00h/b/c%20d/!& anchor: #/ *********** name: gopher://foo.bar.com/00/ absolutename: gopher://foo.bar.com/00/ access: gopher: hostport: //foo.bar.com path: /00/ anchor: *********** name: gopher://foo.bar.com/00/a/b/c/ absolutename: gopher://foo.bar.com/00/a/b/c/ access: gopher: hostport: //foo.bar.com path: /00/a/b/c/ anchor: *********** name: gopher://foo.bar.com/00/a/b/c absolutename: gopher://foo.bar.com/00/a/b/c access: gopher: hostport: //foo.bar.com path: /00/a/b/c anchor: *********** name: gopher://foo.bar.com/00/../a/b absolutename: gopher://foo.bar.com/00/../a/b access: gopher: hostport: //foo.bar.com path: /00/../a/b anchor: *********** name: gopher://foo.bar.com/00/b/c%20d/!&#/ absolutename: gopher://foo.bar.com/00/b/c%20d/!&#/ access: gopher: hostport: //foo.bar.com path: /00/b/c%20d/!& anchor: #/ *********** name: gopher://foo.bar.com/77g/search?foo absolutename: gopher://foo.bar.com/77g/search?foo access: gopher: hostport: //foo.bar.com path: /77g/search?foo anchor: *********** name: gopher://foo.bar.com/77g/search?bar absolutename: gopher://foo.bar.com/77g/search?bar access: gopher: hostport: //foo.bar.com path: /77g/search?bar anchor: *********** name: gopher://foo.bar.com/77g/search?#$%@#! absolutename: gopher://foo.bar.com/77g/search?#$%@#! access: gopher: hostport: //foo.bar.com path: /77g/search? anchor: #$%@ *********** name: gopher://foo.bar.com/11/ absolutename: gopher://foo.bar.com/11/ access: gopher: hostport: //foo.bar.com path: /11/ anchor: *********** name: gopher://foo.bar.com/11/a/b/c/ absolutename: gopher://foo.bar.com/11/a/b/c/ access: gopher: hostport: //foo.bar.com path: /11/a/b/c/ anchor: *********** name: gopher://foo.bar.com/11/a/b/c absolutename: gopher://foo.bar.com/11/a/b/c access: gopher: hostport: //foo.bar.com path: /11/a/b/c anchor: *********** name: gopher://foo.bar.com/11/../a/b absolutename: gopher://foo.bar.com/11/../a/b access: gopher: hostport: //foo.bar.com path: /11/../a/b anchor: *********** name: gopher://foo.bar.com/11/b/c%20d/!&#/ absolutename: gopher://foo.bar.com/11/b/c%20d/!&#/ access: gopher: hostport: //foo.bar.com path: /11/b/c%20d/!& anchor: #/ *********** name: gopher://foo.bar.com/II/ absolutename: gopher://foo.bar.com/II/ access: gopher: hostport: //foo.bar.com path: /II/ anchor: *********** name: gopher://foo.bar.com/II/a/b/c/ absolutename: gopher://foo.bar.com/II/a/b/c/ access: gopher: hostport: //foo.bar.com path: /II/a/b/c/ anchor: *********** name: gopher://foo.bar.com/II/a/b/c absolutename: gopher://foo.bar.com/II/a/b/c access: gopher: hostport: //foo.bar.com path: /II/a/b/c anchor: *********** name: gopher://foo.bar.com/II/../a/b absolutename: gopher://foo.bar.com/II/../a/b access: gopher: hostport: //foo.bar.com path: /II/../a/b anchor: *********** name: gopher://foo.bar.com/II/b/c%20d/!&#/ absolutename: gopher://foo.bar.com/II/b/c%20d/!&#/ access: gopher: hostport: //foo.bar.com path: /II/b/c%20d/!& anchor: #/ *********** name: gopher://foo.bar.com:100/ absolutename: gopher://foo.bar.com:100/ access: gopher: hostport: //foo.bar.com:100 path: / anchor: *********** name: gopher://foo.bar.com:100/00h/ absolutename: gopher://foo.bar.com:100/00h/ access: gopher: hostport: //foo.bar.com:100 path: /00h/ anchor: *********** name: gopher://foo.bar.com:100/00h/a/b/c/ absolutename: gopher://foo.bar.com:100/00h/a/b/c/ access: gopher: hostport: //foo.bar.com:100 path: /00h/a/b/c/ anchor: *********** name: gopher://foo.bar.com:100/00h/a/b/c absolutename: gopher://foo.bar.com:100/00h/a/b/c access: gopher: hostport: //foo.bar.com:100 path: /00h/a/b/c anchor: *********** name: gopher://foo.bar.com:100/00h/../a/b absolutename: gopher://foo.bar.com:100/00h/../a/b access: gopher: hostport: //foo.bar.com:100 path: /00h/../a/b anchor: *********** name: gopher://foo.bar.com:100/00h/b/c%20d/!&#/ absolutename: gopher://foo.bar.com:100/00h/b/c%20d/!&#/ access: gopher: hostport: //foo.bar.com:100 path: /00h/b/c%20d/!& anchor: #/ *********** name: gopher://foo.bar.com:100/00/ absolutename: gopher://foo.bar.com:100/00/ access: gopher: hostport: //foo.bar.com:100 path: /00/ anchor: *********** name: gopher://foo.bar.com:100/00/a/b/c/ absolutename: gopher://foo.bar.com:100/00/a/b/c/ access: gopher: hostport: //foo.bar.com:100 path: /00/a/b/c/ anchor: *********** name: gopher://foo.bar.com:100/00/a/b/c absolutename: gopher://foo.bar.com:100/00/a/b/c access: gopher: hostport: //foo.bar.com:100 path: /00/a/b/c anchor: *********** name: gopher://foo.bar.com:100/00/../a/b absolutename: gopher://foo.bar.com:100/00/../a/b access: gopher: hostport: //foo.bar.com:100 path: /00/../a/b anchor: *********** name: gopher://foo.bar.com:100/00/b/c%20d/!&#/ absolutename: gopher://foo.bar.com:100/00/b/c%20d/!&#/ access: gopher: hostport: //foo.bar.com:100 path: /00/b/c%20d/!& anchor: #/ *********** name: gopher://foo.bar.com:100/77g/search?foo absolutename: gopher://foo.bar.com:100/77g/search?foo access: gopher: hostport: //foo.bar.com:100 path: /77g/search?foo anchor: *********** name: gopher://foo.bar.com:100/77g/search?bar absolutename: gopher://foo.bar.com:100/77g/search?bar access: gopher: hostport: //foo.bar.com:100 path: /77g/search?bar anchor: *********** name: gopher://foo.bar.com:100/77g/search?#$%@#! absolutename: gopher://foo.bar.com:100/77g/search?#$%@#! access: gopher: hostport: //foo.bar.com:100 path: /77g/search? anchor: #$%@ *********** name: gopher://foo.bar.com:100/11/ absolutename: gopher://foo.bar.com:100/11/ access: gopher: hostport: //foo.bar.com:100 path: /11/ anchor: *********** name: gopher://foo.bar.com:100/11/a/b/c/ absolutename: gopher://foo.bar.com:100/11/a/b/c/ access: gopher: hostport: //foo.bar.com:100 path: /11/a/b/c/ anchor: *********** name: gopher://foo.bar.com:100/11/a/b/c absolutename: gopher://foo.bar.com:100/11/a/b/c access: gopher: hostport: //foo.bar.com:100 path: /11/a/b/c anchor: *********** name: gopher://foo.bar.com:100/11/../a/b absolutename: gopher://foo.bar.com:100/11/../a/b access: gopher: hostport: //foo.bar.com:100 path: /11/../a/b anchor: *********** name: gopher://foo.bar.com:100/11/b/c%20d/!&#/ absolutename: gopher://foo.bar.com:100/11/b/c%20d/!&#/ access: gopher: hostport: //foo.bar.com:100 path: /11/b/c%20d/!& anchor: #/ *********** name: gopher://foo.bar.com:100/II/ absolutename: gopher://foo.bar.com:100/II/ access: gopher: hostport: //foo.bar.com:100 path: /II/ anchor: *********** name: gopher://foo.bar.com:100/II/a/b/c/ absolutename: gopher://foo.bar.com:100/II/a/b/c/ access: gopher: hostport: //foo.bar.com:100 path: /II/a/b/c/ anchor: *********** name: gopher://foo.bar.com:100/II/a/b/c absolutename: gopher://foo.bar.com:100/II/a/b/c access: gopher: hostport: //foo.bar.com:100 path: /II/a/b/c anchor: *********** name: gopher://foo.bar.com:100/II/../a/b absolutename: gopher://foo.bar.com:100/II/../a/b access: gopher: hostport: //foo.bar.com:100 path: /II/../a/b anchor: *********** name: gopher://foo.bar.com:100/II/b/c%20d/!&#/ absolutename: gopher://foo.bar.com:100/II/b/c%20d/!&#/ access: gopher: hostport: //foo.bar.com:100 path: /II/b/c%20d/!& anchor: #/ *********** name: gopher://1.1.1.1/ absolutename: gopher://1.1.1.1/ access: gopher: hostport: //1.1.1.1 path: / anchor: *********** name: gopher://1.1.1.1/00h/ absolutename: gopher://1.1.1.1/00h/ access: gopher: hostport: //1.1.1.1 path: /00h/ anchor: *********** name: gopher://1.1.1.1/00h/a/b/c/ absolutename: gopher://1.1.1.1/00h/a/b/c/ access: gopher: hostport: //1.1.1.1 path: /00h/a/b/c/ anchor: *********** name: gopher://1.1.1.1/00h/a/b/c absolutename: gopher://1.1.1.1/00h/a/b/c access: gopher: hostport: //1.1.1.1 path: /00h/a/b/c anchor: *********** name: gopher://1.1.1.1/00h/../a/b absolutename: gopher://1.1.1.1/00h/../a/b access: gopher: hostport: //1.1.1.1 path: /00h/../a/b anchor: *********** name: gopher://1.1.1.1/00h/b/c%20d/!&#/ absolutename: gopher://1.1.1.1/00h/b/c%20d/!&#/ access: gopher: hostport: //1.1.1.1 path: /00h/b/c%20d/!& anchor: #/ *********** name: gopher://1.1.1.1/00/ absolutename: gopher://1.1.1.1/00/ access: gopher: hostport: //1.1.1.1 path: /00/ anchor: *********** name: gopher://1.1.1.1/00/a/b/c/ absolutename: gopher://1.1.1.1/00/a/b/c/ access: gopher: hostport: //1.1.1.1 path: /00/a/b/c/ anchor: *********** name: gopher://1.1.1.1/00/a/b/c absolutename: gopher://1.1.1.1/00/a/b/c access: gopher: hostport: //1.1.1.1 path: /00/a/b/c anchor: *********** name: gopher://1.1.1.1/00/../a/b absolutename: gopher://1.1.1.1/00/../a/b access: gopher: hostport: //1.1.1.1 path: /00/../a/b anchor: *********** name: gopher://1.1.1.1/00/b/c%20d/!&#/ absolutename: gopher://1.1.1.1/00/b/c%20d/!&#/ access: gopher: hostport: //1.1.1.1 path: /00/b/c%20d/!& anchor: #/ *********** name: gopher://1.1.1.1/77g/search?foo absolutename: gopher://1.1.1.1/77g/search?foo access: gopher: hostport: //1.1.1.1 path: /77g/search?foo anchor: *********** name: gopher://1.1.1.1/77g/search?bar absolutename: gopher://1.1.1.1/77g/search?bar access: gopher: hostport: //1.1.1.1 path: /77g/search?bar anchor: *********** name: gopher://1.1.1.1/77g/search?#$%@#! absolutename: gopher://1.1.1.1/77g/search?#$%@#! access: gopher: hostport: //1.1.1.1 path: /77g/search? anchor: #$%@ *********** name: gopher://1.1.1.1/11/ absolutename: gopher://1.1.1.1/11/ access: gopher: hostport: //1.1.1.1 path: /11/ anchor: *********** name: gopher://1.1.1.1/11/a/b/c/ absolutename: gopher://1.1.1.1/11/a/b/c/ access: gopher: hostport: //1.1.1.1 path: /11/a/b/c/ anchor: *********** name: gopher://1.1.1.1/11/a/b/c absolutename: gopher://1.1.1.1/11/a/b/c access: gopher: hostport: //1.1.1.1 path: /11/a/b/c anchor: *********** name: gopher://1.1.1.1/11/../a/b absolutename: gopher://1.1.1.1/11/../a/b access: gopher: hostport: //1.1.1.1 path: /11/../a/b anchor: *********** name: gopher://1.1.1.1/11/b/c%20d/!&#/ absolutename: gopher://1.1.1.1/11/b/c%20d/!&#/ access: gopher: hostport: //1.1.1.1 path: /11/b/c%20d/!& anchor: #/ *********** name: gopher://1.1.1.1/II/ absolutename: gopher://1.1.1.1/II/ access: gopher: hostport: //1.1.1.1 path: /II/ anchor: *********** name: gopher://1.1.1.1/II/a/b/c/ absolutename: gopher://1.1.1.1/II/a/b/c/ access: gopher: hostport: //1.1.1.1 path: /II/a/b/c/ anchor: *********** name: gopher://1.1.1.1/II/a/b/c absolutename: gopher://1.1.1.1/II/a/b/c access: gopher: hostport: //1.1.1.1 path: /II/a/b/c anchor: *********** name: gopher://1.1.1.1/II/../a/b absolutename: gopher://1.1.1.1/II/../a/b access: gopher: hostport: //1.1.1.1 path: /II/../a/b anchor: *********** name: gopher://1.1.1.1/II/b/c%20d/!&#/ absolutename: gopher://1.1.1.1/II/b/c%20d/!&#/ access: gopher: hostport: //1.1.1.1 path: /II/b/c%20d/!& anchor: #/ *********** name: gopher://1.1.1.1:100/ absolutename: gopher://1.1.1.1:100/ access: gopher: hostport: //1.1.1.1:100 path: / anchor: *********** name: gopher://1.1.1.1:100/00h/ absolutename: gopher://1.1.1.1:100/00h/ access: gopher: hostport: //1.1.1.1:100 path: /00h/ anchor: *********** name: gopher://1.1.1.1:100/00h/a/b/c/ absolutename: gopher://1.1.1.1:100/00h/a/b/c/ access: gopher: hostport: //1.1.1.1:100 path: /00h/a/b/c/ anchor: *********** name: gopher://1.1.1.1:100/00h/a/b/c absolutename: gopher://1.1.1.1:100/00h/a/b/c access: gopher: hostport: //1.1.1.1:100 path: /00h/a/b/c anchor: *********** name: gopher://1.1.1.1:100/00h/../a/b absolutename: gopher://1.1.1.1:100/00h/../a/b access: gopher: hostport: //1.1.1.1:100 path: /00h/../a/b anchor: *********** name: gopher://1.1.1.1:100/00h/b/c%20d/!&#/ absolutename: gopher://1.1.1.1:100/00h/b/c%20d/!&#/ access: gopher: hostport: //1.1.1.1:100 path: /00h/b/c%20d/!& anchor: #/ *********** name: gopher://1.1.1.1:100/00/ absolutename: gopher://1.1.1.1:100/00/ access: gopher: hostport: //1.1.1.1:100 path: /00/ anchor: *********** name: gopher://1.1.1.1:100/00/a/b/c/ absolutename: gopher://1.1.1.1:100/00/a/b/c/ access: gopher: hostport: //1.1.1.1:100 path: /00/a/b/c/ anchor: *********** name: gopher://1.1.1.1:100/00/a/b/c absolutename: gopher://1.1.1.1:100/00/a/b/c access: gopher: hostport: //1.1.1.1:100 path: /00/a/b/c anchor: *********** name: gopher://1.1.1.1:100/00/../a/b absolutename: gopher://1.1.1.1:100/00/../a/b access: gopher: hostport: //1.1.1.1:100 path: /00/../a/b anchor: *********** name: gopher://1.1.1.1:100/00/b/c%20d/!&#/ absolutename: gopher://1.1.1.1:100/00/b/c%20d/!&#/ access: gopher: hostport: //1.1.1.1:100 path: /00/b/c%20d/!& anchor: #/ *********** name: gopher://1.1.1.1:100/77g/search?foo absolutename: gopher://1.1.1.1:100/77g/search?foo access: gopher: hostport: //1.1.1.1:100 path: /77g/search?foo anchor: *********** name: gopher://1.1.1.1:100/77g/search?bar absolutename: gopher://1.1.1.1:100/77g/search?bar access: gopher: hostport: //1.1.1.1:100 path: /77g/search?bar anchor: *********** name: gopher://1.1.1.1:100/77g/search?#$%@#! absolutename: gopher://1.1.1.1:100/77g/search?#$%@#! access: gopher: hostport: //1.1.1.1:100 path: /77g/search? anchor: #$%@ *********** name: gopher://1.1.1.1:100/11/ absolutename: gopher://1.1.1.1:100/11/ access: gopher: hostport: //1.1.1.1:100 path: /11/ anchor: *********** name: gopher://1.1.1.1:100/11/a/b/c/ absolutename: gopher://1.1.1.1:100/11/a/b/c/ access: gopher: hostport: //1.1.1.1:100 path: /11/a/b/c/ anchor: *********** name: gopher://1.1.1.1:100/11/a/b/c absolutename: gopher://1.1.1.1:100/11/a/b/c access: gopher: hostport: //1.1.1.1:100 path: /11/a/b/c anchor: *********** name: gopher://1.1.1.1:100/11/../a/b absolutename: gopher://1.1.1.1:100/11/../a/b access: gopher: hostport: //1.1.1.1:100 path: /11/../a/b anchor: *********** name: gopher://1.1.1.1:100/11/b/c%20d/!&#/ absolutename: gopher://1.1.1.1:100/11/b/c%20d/!&#/ access: gopher: hostport: //1.1.1.1:100 path: /11/b/c%20d/!& anchor: #/ *********** name: gopher://1.1.1.1:100/II/ absolutename: gopher://1.1.1.1:100/II/ access: gopher: hostport: //1.1.1.1:100 path: /II/ anchor: *********** name: gopher://1.1.1.1:100/II/a/b/c/ absolutename: gopher://1.1.1.1:100/II/a/b/c/ access: gopher: hostport: //1.1.1.1:100 path: /II/a/b/c/ anchor: *********** name: gopher://1.1.1.1:100/II/a/b/c absolutename: gopher://1.1.1.1:100/II/a/b/c access: gopher: hostport: //1.1.1.1:100 path: /II/a/b/c anchor: *********** name: gopher://1.1.1.1:100/II/../a/b absolutename: gopher://1.1.1.1:100/II/../a/b access: gopher: hostport: //1.1.1.1:100 path: /II/../a/b anchor: *********** name: gopher://1.1.1.1:100/II/b/c%20d/!&#/ absolutename: gopher://1.1.1.1:100/II/b/c%20d/!&#/ access: gopher: hostport: //1.1.1.1:100 path: /II/b/c%20d/!& anchor: #/ *********** name: mailto:foo@foo.bar.com absolutename: mailto:foo@foo.bar.com access: mailto: hostport: path: foo@foo.bar.com anchor: *********** name: mailto:foo.bar@193.2.45.2 absolutename: mailto:foo.bar@193.2.45.2 access: mailto: hostport: path: foo.bar@193.2.45.2 anchor: *********** name: news:alt.foo.bar absolutename: news:alt.foo.bar access: news: hostport: path: alt.foo.bar anchor: *********** name: news:comp.foo.bar absolutename: news:comp.foo.bar access: news: hostport: path: comp.foo.bar anchor: *********** name: news:alt.foo.!$&$#$@#@/{/} absolutename: news:alt.foo.!$&$#$@#@/{/} access: news: hostport: path: alt.foo.!$&$ anchor: #$@ *********** name: news:<92343@foo.bar.com> absolutename: news:<92343@foo.bar.com> access: news: hostport: path: <92343@foo.bar.com> anchor: *********** name: news:<67dfhg43452@bar.com> absolutename: news:<67dfhg43452@bar.com> access: news: hostport: path: <67dfhg43452@bar.com> anchor: *********** name: nntp://foo.bar.com/alt.foo.bar absolutename: nntp://foo.bar.com/alt.foo.bar access: nntp: hostport: //foo.bar.com path: /alt.foo.bar anchor: *********** name: nntp://foo.bar.com/alt.foo.bar/434234 absolutename: nntp://foo.bar.com/alt.foo.bar/434234 access: nntp: hostport: //foo.bar.com path: /alt.foo.bar/434234 anchor: *********** name: nntp://foo.bar.com/alt.foo.bar/123653a absolutename: nntp://foo.bar.com/alt.foo.bar/123653a access: nntp: hostport: //foo.bar.com path: /alt.foo.bar/123653a anchor: *********** name: nntp://foo.bar.com/comp.foo.bar absolutename: nntp://foo.bar.com/comp.foo.bar access: nntp: hostport: //foo.bar.com path: /comp.foo.bar anchor: *********** name: nntp://foo.bar.com/comp.foo.bar/434234 absolutename: nntp://foo.bar.com/comp.foo.bar/434234 access: nntp: hostport: //foo.bar.com path: /comp.foo.bar/434234 anchor: *********** name: nntp://foo.bar.com/comp.foo.bar/123653a absolutename: nntp://foo.bar.com/comp.foo.bar/123653a access: nntp: hostport: //foo.bar.com path: /comp.foo.bar/123653a anchor: *********** name: nntp://foo.bar.com/alt.foo.!$&$#$@#@/{/} absolutename: nntp://foo.bar.com/alt.foo.!$&$#$@#@/{/} access: nntp: hostport: //foo.bar.com path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://foo.bar.com/alt.foo.!$&$#$@#@/{/}/434234 absolutename: nntp://foo.bar.com/alt.foo.!$&$#$@#@/{/}/434234 access: nntp: hostport: //foo.bar.com path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://foo.bar.com/alt.foo.!$&$#$@#@/{/}/123653a absolutename: nntp://foo.bar.com/alt.foo.!$&$#$@#@/{/}/123653a access: nntp: hostport: //foo.bar.com path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://foo.bar.com:100/alt.foo.bar absolutename: nntp://foo.bar.com:100/alt.foo.bar access: nntp: hostport: //foo.bar.com:100 path: /alt.foo.bar anchor: *********** name: nntp://foo.bar.com:100/alt.foo.bar/434234 absolutename: nntp://foo.bar.com:100/alt.foo.bar/434234 access: nntp: hostport: //foo.bar.com:100 path: /alt.foo.bar/434234 anchor: *********** name: nntp://foo.bar.com:100/alt.foo.bar/123653a absolutename: nntp://foo.bar.com:100/alt.foo.bar/123653a access: nntp: hostport: //foo.bar.com:100 path: /alt.foo.bar/123653a anchor: *********** name: nntp://foo.bar.com:100/comp.foo.bar absolutename: nntp://foo.bar.com:100/comp.foo.bar access: nntp: hostport: //foo.bar.com:100 path: /comp.foo.bar anchor: *********** name: nntp://foo.bar.com:100/comp.foo.bar/434234 absolutename: nntp://foo.bar.com:100/comp.foo.bar/434234 access: nntp: hostport: //foo.bar.com:100 path: /comp.foo.bar/434234 anchor: *********** name: nntp://foo.bar.com:100/comp.foo.bar/123653a absolutename: nntp://foo.bar.com:100/comp.foo.bar/123653a access: nntp: hostport: //foo.bar.com:100 path: /comp.foo.bar/123653a anchor: *********** name: nntp://foo.bar.com:100/alt.foo.!$&$#$@#@/{/} absolutename: nntp://foo.bar.com:100/alt.foo.!$&$#$@#@/{/} access: nntp: hostport: //foo.bar.com:100 path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://foo.bar.com:100/alt.foo.!$&$#$@#@/{/}/434234 absolutename: nntp://foo.bar.com:100/alt.foo.!$&$#$@#@/{/}/434234 access: nntp: hostport: //foo.bar.com:100 path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://foo.bar.com:100/alt.foo.!$&$#$@#@/{/}/123653a absolutename: nntp://foo.bar.com:100/alt.foo.!$&$#$@#@/{/}/123653a access: nntp: hostport: //foo.bar.com:100 path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://1.1.1.1/alt.foo.bar absolutename: nntp://1.1.1.1/alt.foo.bar access: nntp: hostport: //1.1.1.1 path: /alt.foo.bar anchor: *********** name: nntp://1.1.1.1/alt.foo.bar/434234 absolutename: nntp://1.1.1.1/alt.foo.bar/434234 access: nntp: hostport: //1.1.1.1 path: /alt.foo.bar/434234 anchor: *********** name: nntp://1.1.1.1/alt.foo.bar/123653a absolutename: nntp://1.1.1.1/alt.foo.bar/123653a access: nntp: hostport: //1.1.1.1 path: /alt.foo.bar/123653a anchor: *********** name: nntp://1.1.1.1/comp.foo.bar absolutename: nntp://1.1.1.1/comp.foo.bar access: nntp: hostport: //1.1.1.1 path: /comp.foo.bar anchor: *********** name: nntp://1.1.1.1/comp.foo.bar/434234 absolutename: nntp://1.1.1.1/comp.foo.bar/434234 access: nntp: hostport: //1.1.1.1 path: /comp.foo.bar/434234 anchor: *********** name: nntp://1.1.1.1/comp.foo.bar/123653a absolutename: nntp://1.1.1.1/comp.foo.bar/123653a access: nntp: hostport: //1.1.1.1 path: /comp.foo.bar/123653a anchor: *********** name: nntp://1.1.1.1/alt.foo.!$&$#$@#@/{/} absolutename: nntp://1.1.1.1/alt.foo.!$&$#$@#@/{/} access: nntp: hostport: //1.1.1.1 path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://1.1.1.1/alt.foo.!$&$#$@#@/{/}/434234 absolutename: nntp://1.1.1.1/alt.foo.!$&$#$@#@/{/}/434234 access: nntp: hostport: //1.1.1.1 path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://1.1.1.1/alt.foo.!$&$#$@#@/{/}/123653a absolutename: nntp://1.1.1.1/alt.foo.!$&$#$@#@/{/}/123653a access: nntp: hostport: //1.1.1.1 path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://1.1.1.1:100/alt.foo.bar absolutename: nntp://1.1.1.1:100/alt.foo.bar access: nntp: hostport: //1.1.1.1:100 path: /alt.foo.bar anchor: *********** name: nntp://1.1.1.1:100/alt.foo.bar/434234 absolutename: nntp://1.1.1.1:100/alt.foo.bar/434234 access: nntp: hostport: //1.1.1.1:100 path: /alt.foo.bar/434234 anchor: *********** name: nntp://1.1.1.1:100/alt.foo.bar/123653a absolutename: nntp://1.1.1.1:100/alt.foo.bar/123653a access: nntp: hostport: //1.1.1.1:100 path: /alt.foo.bar/123653a anchor: *********** name: nntp://1.1.1.1:100/comp.foo.bar absolutename: nntp://1.1.1.1:100/comp.foo.bar access: nntp: hostport: //1.1.1.1:100 path: /comp.foo.bar anchor: *********** name: nntp://1.1.1.1:100/comp.foo.bar/434234 absolutename: nntp://1.1.1.1:100/comp.foo.bar/434234 access: nntp: hostport: //1.1.1.1:100 path: /comp.foo.bar/434234 anchor: *********** name: nntp://1.1.1.1:100/comp.foo.bar/123653a absolutename: nntp://1.1.1.1:100/comp.foo.bar/123653a access: nntp: hostport: //1.1.1.1:100 path: /comp.foo.bar/123653a anchor: *********** name: nntp://1.1.1.1:100/alt.foo.!$&$#$@#@/{/} absolutename: nntp://1.1.1.1:100/alt.foo.!$&$#$@#@/{/} access: nntp: hostport: //1.1.1.1:100 path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://1.1.1.1:100/alt.foo.!$&$#$@#@/{/}/434234 absolutename: nntp://1.1.1.1:100/alt.foo.!$&$#$@#@/{/}/434234 access: nntp: hostport: //1.1.1.1:100 path: /alt.foo.!$&$ anchor: #$@ *********** name: nntp://1.1.1.1:100/alt.foo.!$&$#$@#@/{/}/123653a absolutename: nntp://1.1.1.1:100/alt.foo.!$&$#$@#@/{/}/123653a access: nntp: hostport: //1.1.1.1:100 path: /alt.foo.!$&$ anchor: #$@ *********** name: telnet://foo.bar.com absolutename: telnet://foo.bar.com access: telnet: hostport: //foo.bar.com path: / anchor: *********** name: telnet://foo.bar.com/ absolutename: telnet://foo.bar.com/ access: telnet: hostport: //foo.bar.com path: / anchor: *********** name: telnet://foo.bar.com:100 absolutename: telnet://foo.bar.com:100 access: telnet: hostport: //foo.bar.com:100 path: / anchor: *********** name: telnet://foo.bar.com:100/ absolutename: telnet://foo.bar.com:100/ access: telnet: hostport: //foo.bar.com:100 path: / anchor: *********** name: telnet://1.1.1.1 absolutename: telnet://1.1.1.1 access: telnet: hostport: //1.1.1.1 path: / anchor: *********** name: telnet://1.1.1.1/ absolutename: telnet://1.1.1.1/ access: telnet: hostport: //1.1.1.1 path: / anchor: *********** name: telnet://1.1.1.1:100 absolutename: telnet://1.1.1.1:100 access: telnet: hostport: //1.1.1.1:100 path: / anchor: *********** name: telnet://1.1.1.1:100/ absolutename: telnet://1.1.1.1:100/ access: telnet: hostport: //1.1.1.1:100 path: / anchor: *********** name: telnet://:foo.bar.com absolutename: telnet://:foo.bar.com access: telnet: hostport: //:foo.bar.com path: / anchor: *********** name: telnet://:foo.bar.com/ absolutename: telnet://:foo.bar.com/ access: telnet: hostport: //:foo.bar.com path: / anchor: *********** name: telnet://:foo.bar.com:100 absolutename: telnet://:foo.bar.com:100 access: telnet: hostport: //:foo.bar.com:100 path: / anchor: *********** name: telnet://:foo.bar.com:100/ absolutename: telnet://:foo.bar.com:100/ access: telnet: hostport: //:foo.bar.com:100 path: / anchor: *********** name: telnet://:1.1.1.1 absolutename: telnet://:1.1.1.1 access: telnet: hostport: //:1.1.1.1 path: / anchor: *********** name: telnet://:1.1.1.1/ absolutename: telnet://:1.1.1.1/ access: telnet: hostport: //:1.1.1.1 path: / anchor: *********** name: telnet://:1.1.1.1:100 absolutename: telnet://:1.1.1.1:100 access: telnet: hostport: //:1.1.1.1:100 path: / anchor: *********** name: telnet://:1.1.1.1:100/ absolutename: telnet://:1.1.1.1:100/ access: telnet: hostport: //:1.1.1.1:100 path: / anchor: *********** name: telnet://anonymous:@foo.bar.com absolutename: telnet://anonymous:@foo.bar.com access: telnet: hostport: //anonymous:@foo.bar.com path: / anchor: *********** name: telnet://anonymous:@foo.bar.com/ absolutename: telnet://anonymous:@foo.bar.com/ access: telnet: hostport: //anonymous:@foo.bar.com path: / anchor: *********** name: telnet://anonymous:@foo.bar.com absolutename: telnet://anonymous:@foo.bar.com access: telnet: hostport: //anonymous:@foo.bar.com path: / anchor: *********** name: telnet://anonymous:@foo.bar.com/ absolutename: telnet://anonymous:@foo.bar.com/ access: telnet: hostport: //anonymous:@foo.bar.com path: / anchor: *********** name: telnet://anonymous:@1.1.1.1 absolutename: telnet://anonymous:@1.1.1.1 access: telnet: hostport: //anonymous:@1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@1.1.1.1/ absolutename: telnet://anonymous:@1.1.1.1/ access: telnet: hostport: //anonymous:@1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@1.1.1.1 absolutename: telnet://anonymous:@1.1.1.1 access: telnet: hostport: //anonymous:@1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@1.1.1.1/ absolutename: telnet://anonymous:@1.1.1.1/ access: telnet: hostport: //anonymous:@1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@foobar@foo.bar.comfoo.bar.com absolutename: telnet://anonymous:@foobar@foo.bar.comfoo.bar.com access: telnet: hostport: //anonymous:@foobar@foo.bar.comfoo.bar.com path: / anchor: *********** name: telnet://anonymous:@foobar@foo.bar.comfoo.bar.com/ absolutename: telnet://anonymous:@foobar@foo.bar.comfoo.bar.com/ access: telnet: hostport: //anonymous:@foobar@foo.bar.comfoo.bar.com path: / anchor: *********** name: telnet://anonymous:@foobar@foo.bar.comfoo.bar.com absolutename: telnet://anonymous:@foobar@foo.bar.comfoo.bar.com access: telnet: hostport: //anonymous:@foobar@foo.bar.comfoo.bar.com path: / anchor: *********** name: telnet://anonymous:@foobar@foo.bar.comfoo.bar.com/ absolutename: telnet://anonymous:@foobar@foo.bar.comfoo.bar.com/ access: telnet: hostport: //anonymous:@foobar@foo.bar.comfoo.bar.com path: / anchor: *********** name: telnet://anonymous:@foobar@foo.bar.com1.1.1.1 absolutename: telnet://anonymous:@foobar@foo.bar.com1.1.1.1 access: telnet: hostport: //anonymous:@foobar@foo.bar.com1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@foobar@foo.bar.com1.1.1.1/ absolutename: telnet://anonymous:@foobar@foo.bar.com1.1.1.1/ access: telnet: hostport: //anonymous:@foobar@foo.bar.com1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@foobar@foo.bar.com1.1.1.1 absolutename: telnet://anonymous:@foobar@foo.bar.com1.1.1.1 access: telnet: hostport: //anonymous:@foobar@foo.bar.com1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@foobar@foo.bar.com1.1.1.1/ absolutename: telnet://anonymous:@foobar@foo.bar.com1.1.1.1/ access: telnet: hostport: //anonymous:@foobar@foo.bar.com1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@sdi3gjdfbfoo.bar.com absolutename: telnet://anonymous:@sdi3gjdfbfoo.bar.com access: telnet: hostport: //anonymous:@sdi3gjdfbfoo.bar.com path: / anchor: *********** name: telnet://anonymous:@sdi3gjdfbfoo.bar.com/ absolutename: telnet://anonymous:@sdi3gjdfbfoo.bar.com/ access: telnet: hostport: //anonymous:@sdi3gjdfbfoo.bar.com path: / anchor: *********** name: telnet://anonymous:@sdi3gjdfbfoo.bar.com absolutename: telnet://anonymous:@sdi3gjdfbfoo.bar.com access: telnet: hostport: //anonymous:@sdi3gjdfbfoo.bar.com path: / anchor: *********** name: telnet://anonymous:@sdi3gjdfbfoo.bar.com/ absolutename: telnet://anonymous:@sdi3gjdfbfoo.bar.com/ access: telnet: hostport: //anonymous:@sdi3gjdfbfoo.bar.com path: / anchor: *********** name: telnet://anonymous:@sdi3gjdfb1.1.1.1 absolutename: telnet://anonymous:@sdi3gjdfb1.1.1.1 access: telnet: hostport: //anonymous:@sdi3gjdfb1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@sdi3gjdfb1.1.1.1/ absolutename: telnet://anonymous:@sdi3gjdfb1.1.1.1/ access: telnet: hostport: //anonymous:@sdi3gjdfb1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@sdi3gjdfb1.1.1.1 absolutename: telnet://anonymous:@sdi3gjdfb1.1.1.1 access: telnet: hostport: //anonymous:@sdi3gjdfb1.1.1.1 path: / anchor: *********** name: telnet://anonymous:@sdi3gjdfb1.1.1.1/ absolutename: telnet://anonymous:@sdi3gjdfb1.1.1.1/ access: telnet: hostport: //anonymous:@sdi3gjdfb1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@foo.bar.com absolutename: telnet://foo.bar:@foo.bar.com access: telnet: hostport: //foo.bar:@foo.bar.com path: / anchor: *********** name: telnet://foo.bar:@foo.bar.com/ absolutename: telnet://foo.bar:@foo.bar.com/ access: telnet: hostport: //foo.bar:@foo.bar.com path: / anchor: *********** name: telnet://foo.bar:@foo.bar.com absolutename: telnet://foo.bar:@foo.bar.com access: telnet: hostport: //foo.bar:@foo.bar.com path: / anchor: *********** name: telnet://foo.bar:@foo.bar.com/ absolutename: telnet://foo.bar:@foo.bar.com/ access: telnet: hostport: //foo.bar:@foo.bar.com path: / anchor: *********** name: telnet://foo.bar:@1.1.1.1 absolutename: telnet://foo.bar:@1.1.1.1 access: telnet: hostport: //foo.bar:@1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@1.1.1.1/ absolutename: telnet://foo.bar:@1.1.1.1/ access: telnet: hostport: //foo.bar:@1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@1.1.1.1 absolutename: telnet://foo.bar:@1.1.1.1 access: telnet: hostport: //foo.bar:@1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@1.1.1.1/ absolutename: telnet://foo.bar:@1.1.1.1/ access: telnet: hostport: //foo.bar:@1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@foobar@foo.bar.comfoo.bar.com absolutename: telnet://foo.bar:@foobar@foo.bar.comfoo.bar.com access: telnet: hostport: //foo.bar:@foobar@foo.bar.comfoo.bar.com path: / anchor: *********** name: telnet://foo.bar:@foobar@foo.bar.comfoo.bar.com/ absolutename: telnet://foo.bar:@foobar@foo.bar.comfoo.bar.com/ access: telnet: hostport: //foo.bar:@foobar@foo.bar.comfoo.bar.com path: / anchor: *********** name: telnet://foo.bar:@foobar@foo.bar.comfoo.bar.com absolutename: telnet://foo.bar:@foobar@foo.bar.comfoo.bar.com access: telnet: hostport: //foo.bar:@foobar@foo.bar.comfoo.bar.com path: / anchor: *********** name: telnet://foo.bar:@foobar@foo.bar.comfoo.bar.com/ absolutename: telnet://foo.bar:@foobar@foo.bar.comfoo.bar.com/ access: telnet: hostport: //foo.bar:@foobar@foo.bar.comfoo.bar.com path: / anchor: *********** name: telnet://foo.bar:@foobar@foo.bar.com1.1.1.1 absolutename: telnet://foo.bar:@foobar@foo.bar.com1.1.1.1 access: telnet: hostport: //foo.bar:@foobar@foo.bar.com1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@foobar@foo.bar.com1.1.1.1/ absolutename: telnet://foo.bar:@foobar@foo.bar.com1.1.1.1/ access: telnet: hostport: //foo.bar:@foobar@foo.bar.com1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@foobar@foo.bar.com1.1.1.1 absolutename: telnet://foo.bar:@foobar@foo.bar.com1.1.1.1 access: telnet: hostport: //foo.bar:@foobar@foo.bar.com1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@foobar@foo.bar.com1.1.1.1/ absolutename: telnet://foo.bar:@foobar@foo.bar.com1.1.1.1/ access: telnet: hostport: //foo.bar:@foobar@foo.bar.com1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@sdi3gjdfbfoo.bar.com absolutename: telnet://foo.bar:@sdi3gjdfbfoo.bar.com access: telnet: hostport: //foo.bar:@sdi3gjdfbfoo.bar.com path: / anchor: *********** name: telnet://foo.bar:@sdi3gjdfbfoo.bar.com/ absolutename: telnet://foo.bar:@sdi3gjdfbfoo.bar.com/ access: telnet: hostport: //foo.bar:@sdi3gjdfbfoo.bar.com path: / anchor: *********** name: telnet://foo.bar:@sdi3gjdfbfoo.bar.com absolutename: telnet://foo.bar:@sdi3gjdfbfoo.bar.com access: telnet: hostport: //foo.bar:@sdi3gjdfbfoo.bar.com path: / anchor: *********** name: telnet://foo.bar:@sdi3gjdfbfoo.bar.com/ absolutename: telnet://foo.bar:@sdi3gjdfbfoo.bar.com/ access: telnet: hostport: //foo.bar:@sdi3gjdfbfoo.bar.com path: / anchor: *********** name: telnet://foo.bar:@sdi3gjdfb1.1.1.1 absolutename: telnet://foo.bar:@sdi3gjdfb1.1.1.1 access: telnet: hostport: //foo.bar:@sdi3gjdfb1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@sdi3gjdfb1.1.1.1/ absolutename: telnet://foo.bar:@sdi3gjdfb1.1.1.1/ access: telnet: hostport: //foo.bar:@sdi3gjdfb1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@sdi3gjdfb1.1.1.1 absolutename: telnet://foo.bar:@sdi3gjdfb1.1.1.1 access: telnet: hostport: //foo.bar:@sdi3gjdfb1.1.1.1 path: / anchor: *********** name: telnet://foo.bar:@sdi3gjdfb1.1.1.1/ absolutename: telnet://foo.bar:@sdi3gjdfb1.1.1.1/ access: telnet: hostport: //foo.bar:@sdi3gjdfb1.1.1.1 path: / anchor: *********** name: wais://foo.bar.com/foobase/we absolutename: wais://foo.bar.com/foobase/we access: wais: hostport: //foo.bar.com path: /foobase/we anchor: *********** name: wais://foo.bar.com/foobase/we/ absolutename: wais://foo.bar.com/foobase/we/ access: wais: hostport: //foo.bar.com path: /foobase/we/ anchor: *********** name: wais://foo.bar.com/foobase/we/a/b/c/ absolutename: wais://foo.bar.com/foobase/we/a/b/c/ access: wais: hostport: //foo.bar.com path: /foobase/we/a/b/c/ anchor: *********** name: wais://foo.bar.com/foobase/we/a/b/c absolutename: wais://foo.bar.com/foobase/we/a/b/c access: wais: hostport: //foo.bar.com path: /foobase/we/a/b/c anchor: *********** name: wais://foo.bar.com/foobase/we/../a/b absolutename: wais://foo.bar.com/foobase/we/../a/b access: wais: hostport: //foo.bar.com path: /foobase/we/../a/b anchor: *********** name: wais://foo.bar.com/foobase/we/b/c%20d/!&#/ absolutename: wais://foo.bar.com/foobase/we/b/c%20d/!&#/ access: wais: hostport: //foo.bar.com path: /foobase/we/b/c%20d/!& anchor: #/ *********** name: wais://foo.bar.com/foobase/re absolutename: wais://foo.bar.com/foobase/re access: wais: hostport: //foo.bar.com path: /foobase/re anchor: *********** name: wais://foo.bar.com/foobase/re/ absolutename: wais://foo.bar.com/foobase/re/ access: wais: hostport: //foo.bar.com path: /foobase/re/ anchor: *********** name: wais://foo.bar.com/foobase/re/a/b/c/ absolutename: wais://foo.bar.com/foobase/re/a/b/c/ access: wais: hostport: //foo.bar.com path: /foobase/re/a/b/c/ anchor: *********** name: wais://foo.bar.com/foobase/re/a/b/c absolutename: wais://foo.bar.com/foobase/re/a/b/c access: wais: hostport: //foo.bar.com path: /foobase/re/a/b/c anchor: *********** name: wais://foo.bar.com/foobase/re/../a/b absolutename: wais://foo.bar.com/foobase/re/../a/b access: wais: hostport: //foo.bar.com path: /foobase/re/../a/b anchor: *********** name: wais://foo.bar.com/foobase/re/b/c%20d/!&#/ absolutename: wais://foo.bar.com/foobase/re/b/c%20d/!&#/ access: wais: hostport: //foo.bar.com path: /foobase/re/b/c%20d/!& anchor: #/ *********** name: wais://foo.bar.com/foobase?wkejfi absolutename: wais://foo.bar.com/foobase?wkejfi access: wais: hostport: //foo.bar.com path: /foobase?wkejfi anchor: *********** name: wais://foo.bar.com/foobase?foo absolutename: wais://foo.bar.com/foobase?foo access: wais: hostport: //foo.bar.com path: /foobase?foo anchor: *********** name: wais://foo.bar.com/foobase?b@#bar absolutename: wais://foo.bar.com/foobase?b@#bar access: wais: hostport: //foo.bar.com path: /foobase?b@ anchor: #bar *********** name: wais://foo.bar.com/foo.bar.base/we absolutename: wais://foo.bar.com/foo.bar.base/we access: wais: hostport: //foo.bar.com path: /foo.bar.base/we anchor: *********** name: wais://foo.bar.com/foo.bar.base/we/ absolutename: wais://foo.bar.com/foo.bar.base/we/ access: wais: hostport: //foo.bar.com path: /foo.bar.base/we/ anchor: *********** name: wais://foo.bar.com/foo.bar.base/we/a/b/c/ absolutename: wais://foo.bar.com/foo.bar.base/we/a/b/c/ access: wais: hostport: //foo.bar.com path: /foo.bar.base/we/a/b/c/ anchor: *********** name: wais://foo.bar.com/foo.bar.base/we/a/b/c absolutename: wais://foo.bar.com/foo.bar.base/we/a/b/c access: wais: hostport: //foo.bar.com path: /foo.bar.base/we/a/b/c anchor: *********** name: wais://foo.bar.com/foo.bar.base/we/../a/b absolutename: wais://foo.bar.com/foo.bar.base/we/../a/b access: wais: hostport: //foo.bar.com path: /foo.bar.base/we/../a/b anchor: *********** name: wais://foo.bar.com/foo.bar.base/we/b/c%20d/!&#/ absolutename: wais://foo.bar.com/foo.bar.base/we/b/c%20d/!&#/ access: wais: hostport: //foo.bar.com path: /foo.bar.base/we/b/c%20d/!& anchor: #/ *********** name: wais://foo.bar.com/foo.bar.base/re absolutename: wais://foo.bar.com/foo.bar.base/re access: wais: hostport: //foo.bar.com path: /foo.bar.base/re anchor: *********** name: wais://foo.bar.com/foo.bar.base/re/ absolutename: wais://foo.bar.com/foo.bar.base/re/ access: wais: hostport: //foo.bar.com path: /foo.bar.base/re/ anchor: *********** name: wais://foo.bar.com/foo.bar.base/re/a/b/c/ absolutename: wais://foo.bar.com/foo.bar.base/re/a/b/c/ access: wais: hostport: //foo.bar.com path: /foo.bar.base/re/a/b/c/ anchor: *********** name: wais://foo.bar.com/foo.bar.base/re/a/b/c absolutename: wais://foo.bar.com/foo.bar.base/re/a/b/c access: wais: hostport: //foo.bar.com path: /foo.bar.base/re/a/b/c anchor: *********** name: wais://foo.bar.com/foo.bar.base/re/../a/b absolutename: wais://foo.bar.com/foo.bar.base/re/../a/b access: wais: hostport: //foo.bar.com path: /foo.bar.base/re/../a/b anchor: *********** name: wais://foo.bar.com/foo.bar.base/re/b/c%20d/!&#/ absolutename: wais://foo.bar.com/foo.bar.base/re/b/c%20d/!&#/ access: wais: hostport: //foo.bar.com path: /foo.bar.base/re/b/c%20d/!& anchor: #/ *********** name: wais://foo.bar.com/foo.bar.base?wkejfi absolutename: wais://foo.bar.com/foo.bar.base?wkejfi access: wais: hostport: //foo.bar.com path: /foo.bar.base?wkejfi anchor: *********** name: wais://foo.bar.com/foo.bar.base?foo absolutename: wais://foo.bar.com/foo.bar.base?foo access: wais: hostport: //foo.bar.com path: /foo.bar.base?foo anchor: *********** name: wais://foo.bar.com/foo.bar.base?b@#bar absolutename: wais://foo.bar.com/foo.bar.base?b@#bar access: wais: hostport: //foo.bar.com path: /foo.bar.base?b@ anchor: #bar *********** name: wais://foo.bar.com:100/foobase/we absolutename: wais://foo.bar.com:100/foobase/we access: wais: hostport: //foo.bar.com:100 path: /foobase/we anchor: *********** name: wais://foo.bar.com:100/foobase/we/ absolutename: wais://foo.bar.com:100/foobase/we/ access: wais: hostport: //foo.bar.com:100 path: /foobase/we/ anchor: *********** name: wais://foo.bar.com:100/foobase/we/a/b/c/ absolutename: wais://foo.bar.com:100/foobase/we/a/b/c/ access: wais: hostport: //foo.bar.com:100 path: /foobase/we/a/b/c/ anchor: *********** name: wais://foo.bar.com:100/foobase/we/a/b/c absolutename: wais://foo.bar.com:100/foobase/we/a/b/c access: wais: hostport: //foo.bar.com:100 path: /foobase/we/a/b/c anchor: *********** name: wais://foo.bar.com:100/foobase/we/../a/b absolutename: wais://foo.bar.com:100/foobase/we/../a/b access: wais: hostport: //foo.bar.com:100 path: /foobase/we/../a/b anchor: *********** name: wais://foo.bar.com:100/foobase/we/b/c%20d/!&#/ absolutename: wais://foo.bar.com:100/foobase/we/b/c%20d/!&#/ access: wais: hostport: //foo.bar.com:100 path: /foobase/we/b/c%20d/!& anchor: #/ *********** name: wais://foo.bar.com:100/foobase/re absolutename: wais://foo.bar.com:100/foobase/re access: wais: hostport: //foo.bar.com:100 path: /foobase/re anchor: *********** name: wais://foo.bar.com:100/foobase/re/ absolutename: wais://foo.bar.com:100/foobase/re/ access: wais: hostport: //foo.bar.com:100 path: /foobase/re/ anchor: *********** name: wais://foo.bar.com:100/foobase/re/a/b/c/ absolutename: wais://foo.bar.com:100/foobase/re/a/b/c/ access: wais: hostport: //foo.bar.com:100 path: /foobase/re/a/b/c/ anchor: *********** name: wais://foo.bar.com:100/foobase/re/a/b/c absolutename: wais://foo.bar.com:100/foobase/re/a/b/c access: wais: hostport: //foo.bar.com:100 path: /foobase/re/a/b/c anchor: *********** name: wais://foo.bar.com:100/foobase/re/../a/b absolutename: wais://foo.bar.com:100/foobase/re/../a/b access: wais: hostport: //foo.bar.com:100 path: /foobase/re/../a/b anchor: *********** name: wais://foo.bar.com:100/foobase/re/b/c%20d/!&#/ absolutename: wais://foo.bar.com:100/foobase/re/b/c%20d/!&#/ access: wais: hostport: //foo.bar.com:100 path: /foobase/re/b/c%20d/!& anchor: #/ *********** name: wais://foo.bar.com:100/foobase?wkejfi absolutename: wais://foo.bar.com:100/foobase?wkejfi access: wais: hostport: //foo.bar.com:100 path: /foobase?wkejfi anchor: *********** name: wais://foo.bar.com:100/foobase?foo absolutename: wais://foo.bar.com:100/foobase?foo access: wais: hostport: //foo.bar.com:100 path: /foobase?foo anchor: *********** name: wais://foo.bar.com:100/foobase?b@#bar absolutename: wais://foo.bar.com:100/foobase?b@#bar access: wais: hostport: //foo.bar.com:100 path: /foobase?b@ anchor: #bar *********** name: wais://foo.bar.com:100/foo.bar.base/we absolutename: wais://foo.bar.com:100/foo.bar.base/we access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/we anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/we/ absolutename: wais://foo.bar.com:100/foo.bar.base/we/ access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/we/ anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/we/a/b/c/ absolutename: wais://foo.bar.com:100/foo.bar.base/we/a/b/c/ access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/we/a/b/c/ anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/we/a/b/c absolutename: wais://foo.bar.com:100/foo.bar.base/we/a/b/c access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/we/a/b/c anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/we/../a/b absolutename: wais://foo.bar.com:100/foo.bar.base/we/../a/b access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/we/../a/b anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/we/b/c%20d/!&#/ absolutename: wais://foo.bar.com:100/foo.bar.base/we/b/c%20d/!&#/ access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/we/b/c%20d/!& anchor: #/ *********** name: wais://foo.bar.com:100/foo.bar.base/re absolutename: wais://foo.bar.com:100/foo.bar.base/re access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/re anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/re/ absolutename: wais://foo.bar.com:100/foo.bar.base/re/ access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/re/ anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/re/a/b/c/ absolutename: wais://foo.bar.com:100/foo.bar.base/re/a/b/c/ access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/re/a/b/c/ anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/re/a/b/c absolutename: wais://foo.bar.com:100/foo.bar.base/re/a/b/c access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/re/a/b/c anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/re/../a/b absolutename: wais://foo.bar.com:100/foo.bar.base/re/../a/b access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/re/../a/b anchor: *********** name: wais://foo.bar.com:100/foo.bar.base/re/b/c%20d/!&#/ absolutename: wais://foo.bar.com:100/foo.bar.base/re/b/c%20d/!&#/ access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base/re/b/c%20d/!& anchor: #/ *********** name: wais://foo.bar.com:100/foo.bar.base?wkejfi absolutename: wais://foo.bar.com:100/foo.bar.base?wkejfi access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base?wkejfi anchor: *********** name: wais://foo.bar.com:100/foo.bar.base?foo absolutename: wais://foo.bar.com:100/foo.bar.base?foo access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base?foo anchor: *********** name: wais://foo.bar.com:100/foo.bar.base?b@#bar absolutename: wais://foo.bar.com:100/foo.bar.base?b@#bar access: wais: hostport: //foo.bar.com:100 path: /foo.bar.base?b@ anchor: #bar *********** name: wais://1.1.1.1/foobase/we absolutename: wais://1.1.1.1/foobase/we access: wais: hostport: //1.1.1.1 path: /foobase/we anchor: *********** name: wais://1.1.1.1/foobase/we/ absolutename: wais://1.1.1.1/foobase/we/ access: wais: hostport: //1.1.1.1 path: /foobase/we/ anchor: *********** name: wais://1.1.1.1/foobase/we/a/b/c/ absolutename: wais://1.1.1.1/foobase/we/a/b/c/ access: wais: hostport: //1.1.1.1 path: /foobase/we/a/b/c/ anchor: *********** name: wais://1.1.1.1/foobase/we/a/b/c absolutename: wais://1.1.1.1/foobase/we/a/b/c access: wais: hostport: //1.1.1.1 path: /foobase/we/a/b/c anchor: *********** name: wais://1.1.1.1/foobase/we/../a/b absolutename: wais://1.1.1.1/foobase/we/../a/b access: wais: hostport: //1.1.1.1 path: /foobase/we/../a/b anchor: *********** name: wais://1.1.1.1/foobase/we/b/c%20d/!&#/ absolutename: wais://1.1.1.1/foobase/we/b/c%20d/!&#/ access: wais: hostport: //1.1.1.1 path: /foobase/we/b/c%20d/!& anchor: #/ *********** name: wais://1.1.1.1/foobase/re absolutename: wais://1.1.1.1/foobase/re access: wais: hostport: //1.1.1.1 path: /foobase/re anchor: *********** name: wais://1.1.1.1/foobase/re/ absolutename: wais://1.1.1.1/foobase/re/ access: wais: hostport: //1.1.1.1 path: /foobase/re/ anchor: *********** name: wais://1.1.1.1/foobase/re/a/b/c/ absolutename: wais://1.1.1.1/foobase/re/a/b/c/ access: wais: hostport: //1.1.1.1 path: /foobase/re/a/b/c/ anchor: *********** name: wais://1.1.1.1/foobase/re/a/b/c absolutename: wais://1.1.1.1/foobase/re/a/b/c access: wais: hostport: //1.1.1.1 path: /foobase/re/a/b/c anchor: *********** name: wais://1.1.1.1/foobase/re/../a/b absolutename: wais://1.1.1.1/foobase/re/../a/b access: wais: hostport: //1.1.1.1 path: /foobase/re/../a/b anchor: *********** name: wais://1.1.1.1/foobase/re/b/c%20d/!&#/ absolutename: wais://1.1.1.1/foobase/re/b/c%20d/!&#/ access: wais: hostport: //1.1.1.1 path: /foobase/re/b/c%20d/!& anchor: #/ *********** name: wais://1.1.1.1/foobase?wkejfi absolutename: wais://1.1.1.1/foobase?wkejfi access: wais: hostport: //1.1.1.1 path: /foobase?wkejfi anchor: *********** name: wais://1.1.1.1/foobase?foo absolutename: wais://1.1.1.1/foobase?foo access: wais: hostport: //1.1.1.1 path: /foobase?foo anchor: *********** name: wais://1.1.1.1/foobase?b@#bar absolutename: wais://1.1.1.1/foobase?b@#bar access: wais: hostport: //1.1.1.1 path: /foobase?b@ anchor: #bar *********** name: wais://1.1.1.1/foo.bar.base/we absolutename: wais://1.1.1.1/foo.bar.base/we access: wais: hostport: //1.1.1.1 path: /foo.bar.base/we anchor: *********** name: wais://1.1.1.1/foo.bar.base/we/ absolutename: wais://1.1.1.1/foo.bar.base/we/ access: wais: hostport: //1.1.1.1 path: /foo.bar.base/we/ anchor: *********** name: wais://1.1.1.1/foo.bar.base/we/a/b/c/ absolutename: wais://1.1.1.1/foo.bar.base/we/a/b/c/ access: wais: hostport: //1.1.1.1 path: /foo.bar.base/we/a/b/c/ anchor: *********** name: wais://1.1.1.1/foo.bar.base/we/a/b/c absolutename: wais://1.1.1.1/foo.bar.base/we/a/b/c access: wais: hostport: //1.1.1.1 path: /foo.bar.base/we/a/b/c anchor: *********** name: wais://1.1.1.1/foo.bar.base/we/../a/b absolutename: wais://1.1.1.1/foo.bar.base/we/../a/b access: wais: hostport: //1.1.1.1 path: /foo.bar.base/we/../a/b anchor: *********** name: wais://1.1.1.1/foo.bar.base/we/b/c%20d/!&#/ absolutename: wais://1.1.1.1/foo.bar.base/we/b/c%20d/!&#/ access: wais: hostport: //1.1.1.1 path: /foo.bar.base/we/b/c%20d/!& anchor: #/ *********** name: wais://1.1.1.1/foo.bar.base/re absolutename: wais://1.1.1.1/foo.bar.base/re access: wais: hostport: //1.1.1.1 path: /foo.bar.base/re anchor: *********** name: wais://1.1.1.1/foo.bar.base/re/ absolutename: wais://1.1.1.1/foo.bar.base/re/ access: wais: hostport: //1.1.1.1 path: /foo.bar.base/re/ anchor: *********** name: wais://1.1.1.1/foo.bar.base/re/a/b/c/ absolutename: wais://1.1.1.1/foo.bar.base/re/a/b/c/ access: wais: hostport: //1.1.1.1 path: /foo.bar.base/re/a/b/c/ anchor: *********** name: wais://1.1.1.1/foo.bar.base/re/a/b/c absolutename: wais://1.1.1.1/foo.bar.base/re/a/b/c access: wais: hostport: //1.1.1.1 path: /foo.bar.base/re/a/b/c anchor: *********** name: wais://1.1.1.1/foo.bar.base/re/../a/b absolutename: wais://1.1.1.1/foo.bar.base/re/../a/b access: wais: hostport: //1.1.1.1 path: /foo.bar.base/re/../a/b anchor: *********** name: wais://1.1.1.1/foo.bar.base/re/b/c%20d/!&#/ absolutename: wais://1.1.1.1/foo.bar.base/re/b/c%20d/!&#/ access: wais: hostport: //1.1.1.1 path: /foo.bar.base/re/b/c%20d/!& anchor: #/ *********** name: wais://1.1.1.1/foo.bar.base?wkejfi absolutename: wais://1.1.1.1/foo.bar.base?wkejfi access: wais: hostport: //1.1.1.1 path: /foo.bar.base?wkejfi anchor: *********** name: wais://1.1.1.1/foo.bar.base?foo absolutename: wais://1.1.1.1/foo.bar.base?foo access: wais: hostport: //1.1.1.1 path: /foo.bar.base?foo anchor: *********** name: wais://1.1.1.1/foo.bar.base?b@#bar absolutename: wais://1.1.1.1/foo.bar.base?b@#bar access: wais: hostport: //1.1.1.1 path: /foo.bar.base?b@ anchor: #bar *********** name: wais://1.1.1.1:100/foobase/we absolutename: wais://1.1.1.1:100/foobase/we access: wais: hostport: //1.1.1.1:100 path: /foobase/we anchor: *********** name: wais://1.1.1.1:100/foobase/we/ absolutename: wais://1.1.1.1:100/foobase/we/ access: wais: hostport: //1.1.1.1:100 path: /foobase/we/ anchor: *********** name: wais://1.1.1.1:100/foobase/we/a/b/c/ absolutename: wais://1.1.1.1:100/foobase/we/a/b/c/ access: wais: hostport: //1.1.1.1:100 path: /foobase/we/a/b/c/ anchor: *********** name: wais://1.1.1.1:100/foobase/we/a/b/c absolutename: wais://1.1.1.1:100/foobase/we/a/b/c access: wais: hostport: //1.1.1.1:100 path: /foobase/we/a/b/c anchor: *********** name: wais://1.1.1.1:100/foobase/we/../a/b absolutename: wais://1.1.1.1:100/foobase/we/../a/b access: wais: hostport: //1.1.1.1:100 path: /foobase/we/../a/b anchor: *********** name: wais://1.1.1.1:100/foobase/we/b/c%20d/!&#/ absolutename: wais://1.1.1.1:100/foobase/we/b/c%20d/!&#/ access: wais: hostport: //1.1.1.1:100 path: /foobase/we/b/c%20d/!& anchor: #/ *********** name: wais://1.1.1.1:100/foobase/re absolutename: wais://1.1.1.1:100/foobase/re access: wais: hostport: //1.1.1.1:100 path: /foobase/re anchor: *********** name: wais://1.1.1.1:100/foobase/re/ absolutename: wais://1.1.1.1:100/foobase/re/ access: wais: hostport: //1.1.1.1:100 path: /foobase/re/ anchor: *********** name: wais://1.1.1.1:100/foobase/re/a/b/c/ absolutename: wais://1.1.1.1:100/foobase/re/a/b/c/ access: wais: hostport: //1.1.1.1:100 path: /foobase/re/a/b/c/ anchor: *********** name: wais://1.1.1.1:100/foobase/re/a/b/c absolutename: wais://1.1.1.1:100/foobase/re/a/b/c access: wais: hostport: //1.1.1.1:100 path: /foobase/re/a/b/c anchor: *********** name: wais://1.1.1.1:100/foobase/re/../a/b absolutename: wais://1.1.1.1:100/foobase/re/../a/b access: wais: hostport: //1.1.1.1:100 path: /foobase/re/../a/b anchor: *********** name: wais://1.1.1.1:100/foobase/re/b/c%20d/!&#/ absolutename: wais://1.1.1.1:100/foobase/re/b/c%20d/!&#/ access: wais: hostport: //1.1.1.1:100 path: /foobase/re/b/c%20d/!& anchor: #/ *********** name: wais://1.1.1.1:100/foobase?wkejfi absolutename: wais://1.1.1.1:100/foobase?wkejfi access: wais: hostport: //1.1.1.1:100 path: /foobase?wkejfi anchor: *********** name: wais://1.1.1.1:100/foobase?foo absolutename: wais://1.1.1.1:100/foobase?foo access: wais: hostport: //1.1.1.1:100 path: /foobase?foo anchor: *********** name: wais://1.1.1.1:100/foobase?b@#bar absolutename: wais://1.1.1.1:100/foobase?b@#bar access: wais: hostport: //1.1.1.1:100 path: /foobase?b@ anchor: #bar *********** name: wais://1.1.1.1:100/foo.bar.base/we absolutename: wais://1.1.1.1:100/foo.bar.base/we access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/we anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/we/ absolutename: wais://1.1.1.1:100/foo.bar.base/we/ access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/we/ anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/we/a/b/c/ absolutename: wais://1.1.1.1:100/foo.bar.base/we/a/b/c/ access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/we/a/b/c/ anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/we/a/b/c absolutename: wais://1.1.1.1:100/foo.bar.base/we/a/b/c access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/we/a/b/c anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/we/../a/b absolutename: wais://1.1.1.1:100/foo.bar.base/we/../a/b access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/we/../a/b anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/we/b/c%20d/!&#/ absolutename: wais://1.1.1.1:100/foo.bar.base/we/b/c%20d/!&#/ access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/we/b/c%20d/!& anchor: #/ *********** name: wais://1.1.1.1:100/foo.bar.base/re absolutename: wais://1.1.1.1:100/foo.bar.base/re access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/re anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/re/ absolutename: wais://1.1.1.1:100/foo.bar.base/re/ access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/re/ anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/re/a/b/c/ absolutename: wais://1.1.1.1:100/foo.bar.base/re/a/b/c/ access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/re/a/b/c/ anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/re/a/b/c absolutename: wais://1.1.1.1:100/foo.bar.base/re/a/b/c access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/re/a/b/c anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/re/../a/b absolutename: wais://1.1.1.1:100/foo.bar.base/re/../a/b access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/re/../a/b anchor: *********** name: wais://1.1.1.1:100/foo.bar.base/re/b/c%20d/!&#/ absolutename: wais://1.1.1.1:100/foo.bar.base/re/b/c%20d/!&#/ access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base/re/b/c%20d/!& anchor: #/ *********** name: wais://1.1.1.1:100/foo.bar.base?wkejfi absolutename: wais://1.1.1.1:100/foo.bar.base?wkejfi access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base?wkejfi anchor: *********** name: wais://1.1.1.1:100/foo.bar.base?foo absolutename: wais://1.1.1.1:100/foo.bar.base?foo access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base?foo anchor: *********** name: wais://1.1.1.1:100/foo.bar.base?b@#bar absolutename: wais://1.1.1.1:100/foo.bar.base?b@#bar access: wais: hostport: //1.1.1.1:100 path: /foo.bar.base?b@ anchor: #bar *********** name: file://foo.bar.com/index.html absolutename: file://foo.bar.com/index.html access: file: hostport: //foo.bar.com path: /index.html anchor: *********** name: file://foo.bar.com/a/b/c/d/e.txt absolutename: file://foo.bar.com/a/b/c/d/e.txt access: file: hostport: //foo.bar.com path: /a/b/c/d/e.txt anchor: *********** name: file://foo.bar.com/a/b/c/^!@/foo.bar absolutename: file://foo.bar.com/a/b/c/^!@/foo.bar access: file: hostport: //foo.bar.com path: /a/b/c/^!@/foo.bar anchor: *********** name: file://foo.bar.com:100/index.html absolutename: file://foo.bar.com:100/index.html access: file: hostport: //foo.bar.com:100 path: /index.html anchor: *********** name: file://foo.bar.com:100/a/b/c/d/e.txt absolutename: file://foo.bar.com:100/a/b/c/d/e.txt access: file: hostport: //foo.bar.com:100 path: /a/b/c/d/e.txt anchor: *********** name: file://foo.bar.com:100/a/b/c/^!@/foo.bar absolutename: file://foo.bar.com:100/a/b/c/^!@/foo.bar access: file: hostport: //foo.bar.com:100 path: /a/b/c/^!@/foo.bar anchor: *********** name: file://1.1.1.1/index.html absolutename: file://1.1.1.1/index.html access: file: hostport: //1.1.1.1 path: /index.html anchor: *********** name: file://1.1.1.1/a/b/c/d/e.txt absolutename: file://1.1.1.1/a/b/c/d/e.txt access: file: hostport: //1.1.1.1 path: /a/b/c/d/e.txt anchor: *********** name: file://1.1.1.1/a/b/c/^!@/foo.bar absolutename: file://1.1.1.1/a/b/c/^!@/foo.bar access: file: hostport: //1.1.1.1 path: /a/b/c/^!@/foo.bar anchor: *********** name: file://1.1.1.1:100/index.html absolutename: file://1.1.1.1:100/index.html access: file: hostport: //1.1.1.1:100 path: /index.html anchor: *********** name: file://1.1.1.1:100/a/b/c/d/e.txt absolutename: file://1.1.1.1:100/a/b/c/d/e.txt access: file: hostport: //1.1.1.1:100 path: /a/b/c/d/e.txt anchor: *********** name: file://1.1.1.1:100/a/b/c/^!@/foo.bar absolutename: file://1.1.1.1:100/a/b/c/^!@/foo.bar access: file: hostport: //1.1.1.1:100 path: /a/b/c/^!@/foo.bar anchor: *********** /*END OF RFC1738*****************************************/ /*NEXT SET GENERATED FROM RFC1808************************/ name: #s absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/d;p?q anchor: #s *********** name: g#s absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g anchor: #s *********** name: g#s/./x absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g anchor: #s/./x *********** name: g?y#s absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g?y anchor: #s *********** name: ;x absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/d;x anchor: *********** name: g;x absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g;x anchor: *********** name: g;x?y#s absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g;x?y anchor: #s *********** name: . absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/ anchor: *********** name: ./ absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/ anchor: *********** name: .. absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/ anchor: *********** name: ../ absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/ anchor: *********** name: ../g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/g anchor: *********** name: ../.. absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: / anchor: *********** name: ../../ absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: / anchor: *********** name: ../../g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /g anchor: *********** name: absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/d;p?q anchor: #f *********** name: ../../../g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /../g anchor: *********** name: ../../../../g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /../../g anchor: *********** name: /./g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /./g anchor: *********** name: /../g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /../g anchor: *********** name: g. absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g. anchor: *********** name: .g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/.g anchor: *********** name: g.. absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g.. anchor: *********** name: ..g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/..g anchor: *********** name: ./../g absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/g anchor: *********** name: ./g/. absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g/ anchor: *********** name: g/./h absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/g/h anchor: *********** name: g/../h absolutename: http://a/b/c/d;p?q#f access: http: hostport: //a path: /b/c/h anchor: *********** name: http:g absolutename: http://a/b/c/d;p?q#f access: http: hostport: g path: anchor: *********** name: http: absolutename: http://a/b/c/d;p?q#f access: http: hostport: path: anchor: *********** /*END OF RFC1808**************************************/ libwww/Library/Test/w3clib.test/HTRelative.tests0100644000076400001440000000031306201426647021334 0ustar danielusers aname: http://www.w3.org/a/b/c/d relname: http://www.w3.org/a/ relative: b/c/d *********** aname: http://www.w3.org/a/b/c/d relname: ftp://ftp.w3.org/ relative: http://www.w3.org/a/b/c/d *********** libwww/Library/Test/w3clib.test/HTRequest.exp0100644000076400001440000003333106206513011020634 0ustar danieluserssend_user "Creating requests for testing.....\n" set listnum 0 # # Create requests # for {set test_num 1} {$test_num <= 8} {incr test_num} { set test "Creation $test_num" send_user "Creating Request($test_num)......" send "set Request($test_num) \[HTRequest_new ]\r" expect { -re "(.*)((Request_)(.*))\r\n($prompt)" { set Request($test_num) $expect_out(2,string) pass $test } timeout {fail $test} } send_user "done.\n" } for {set test_num 1} {$test_num <= 3} {incr test_num} { set test "Duplication $test_num" send_user "Duplicating Request($test_num)....." send "set Dup_Request($test_num) \[HTRequest_dup $Request($test_num)]\r" expect { -re "(.*)((Request_)(.*))\r\n($prompt)" { set Dup_Request($test_num) $expect_out(2,string) pass $test } timeout {fail $test} } send_user "done.\n" } set address(1) http://www.w3.org/ set address(2) http://www.mit.edu/ set address(3) ftp://ftp.net.org/ set address(4) http://www.w3.org/html3.html for {set test_num 1} {$test_num <= 4} {incr test_num} { set test "Anchor creation $test_num" send_user "Creating Anchor($test_num)....." send "set Anchor($test_num) \[HTAnchor_findAddress $address($test_num)]\r" expect { -re "(.*)((Anchor_)(.*))\r\n($prompt)" { set Anchor($test_num) $expect_out(2,string) pass $test } timeout {fail $test} } send_user "done.\n" } #Begin tests: # # ANCHOR # send_user "\n\nRunning Tests:\n\n" set function HTRequest_anchor set set_function HTRequest_setAnchor for {set test_num 1} {$test_num <= 4} {incr test_num} { set test "HTRequest_anchor $test_num" set test_anchor $Anchor($test_num) set test_request $Request($test_num) set expected $test_anchor set set_args "$test_request $test_anchor" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected $test } for {set test_num 1} {$test_num <= 2} {incr test_num} { set test "HTRequest_anchor [expr $test_num+4]" set test_anchor $Anchor($test_num) set test_request $Dup_Request($test_num) set expected $test_anchor set set_args "$test_request $test_anchor" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" } #HTRequest_access is for servers set function HTRequest_method set set_function HTRequest_setMethod set test "HTRequest_method 1" set method METHOD_HEAD set test_request $Request(1) set expected 0 set set_args "$test_request $method" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_reloadMode set set_function HTRequest_setReloadMode set test "HTRequest_reloadMode 1" set mode HT_ANY_VERSION set test_request $Request(1) set expected 0 set set_args "$test_request $mode" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_reloadMode 2" set mode HT_MEM_REFRESH set test_request $Request(2) set expected 1 set set_args "$test_request $mode" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_reloadMode 3" set mode HT_CACHE_REFRESH set test_request $Request(3) set expected 2 set set_args "$test_request $mode" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_reloadMode 4" set mode HT_FORCE_RELOAD set test_request $Request(4) set expected 4 set set_args "$test_request $mode" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_redirection set set_function HTRequest_setRedirection set test "HTRequest_redirection" set test_request $Request(1) set test_anchor $Anchor(1) set expected $test_anchor set set_args "$test_request $test_anchor" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_maxRetry set function HTRequest_setMaxRetry set test "HTRequest_maxRetry" set retry 6 set expected $retry set set_args "$retry" set arguments "" string trimleft $arguments "\"" string trimright $arguments "\"" set_test $set_function $set_args runtest $function $arguments $expected "$test" set function HTRequest_doRetry set test "HTRequest_doRetry" set test_request $Request(2) set expected YES set arguments "$test_request" runtest $function "$arguments" "$expected" "$test" set function HTRequest_retryTime set test "HTRequest_retryTime" set test_request $Request(2) set expected -1 set arguments "$test_request" runtest $function "$arguments" "$expected" "$test" set function HTRequest_conversion set set_function HTRequest_setConversion set test "HTRequest_conversion" set htlist [new_item HTList_new] set override YES set test_request $Request(1) set expected $htlist set set_args "$test_request $htlist $override" set arguments "$test_request" incr listnum 1 set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_encoding set set_function HTRequest_setEncoding set test "HTRequest_encoding" set htlist [new_item HTList_new] set override YES set test_request $Request(1) set expected $htlist set set_args "$test_request $htlist $override" set arguments "$test_request" incr listnum 1 set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_language set set_function HTRequest_setLanguage set test "HTRequest_language" set htlist [new_item HTList_new] set override YES set test_request $Request(1) set expected $htlist set set_args "$test_request $htlist $override" set arguments "$test_request" incr listnum 1 set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_charset set set_function HTRequest_setCharset set test "HTRequest_charset" set htlist [new_item HTList_new] set override YES set test_request $Request(1) set expected $htlist set set_args "$test_request $htlist $override" set arguments "$test_request" incr listnum 1 set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_gnHd set set_function HTRequest_setGnHd set test "HTRequest_gnHd" set gnhd HT_G_CONNECTION set test_request $Request(1) set expected 10 set set_args "$test_request $gnhd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_addGnHd" set set_function HTRequest_addGnHd set gnhd HT_G_NO_CACHE set test_request $Request(1) set expected 30 set set_args "$test_request $gnhd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_addGnHd" set gnhd HT_G_FORWARDED set test_request $Request(1) set expected 32 set set_args "$test_request $gnhd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_rqHd set set_function HTRequest_setRqHd set test "HTRequest_rqHd" set rqhd HT_C_USER_AGENT set test_request $Request(1) set expected 200 set set_args "$test_request $rqhd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_addRqHd" set set_function HTRequest_addRqHd set rqhd HT_C_FROM set test_request $Request(1) set expected 210 set set_args "$test_request $rqhd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_addRqhd" set rqhd HT_C_ACCEPT_ENC set test_request $Request(1) set expected 214 set set_args "$test_request $rqhd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_rsHd set set_function HTRequest_setRsHd set test "HTRequest_rshd" set rshd HT_S_WWW_AUTH set test_request $Request(1) set expected 20 set set_args "$test_request $rshd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_addRsHd" set set_function HTRequest_addRsHd set rshd HT_S_LOCATION set test_request $Request(1) set expected 21 set set_args "$test_request $rshd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_enHd set set_function HTRequest_setEnHd set test "HTRequest_enHd" set enhd HT_E_URI set test_request $Request(1) set expected 1000 set set_args "$test_request $enhd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set test "HTRequest_addEnhd" set set_function HTRequest_addEnHd set enhd HT_E_CONTENT_LANGUAGE set test_request $Request(1) set expected 1004 set set_args "$test_request $enhd" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_parent set set_function HTRequest_setParent set test "HTRequest_parent" set test_anchor $Anchor(1) set test_request $Request(1) set expected $test_anchor set set_args "$test_request $test_anchor" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_generator set set_function HTRequest_setGenerator set test "HTRequest_generator" set generator [new_item HTList_new] set override YES set test_request $Request(1) set expected $generator set set_args "$test_request $generator $override" set arguments "$test_request $override" set_test $set_function $set_args runtest $function "$arguments" $expected $test #HTList_delete $generator set function HTRequest_outputStream set set_function HTRequest_setOutputStream set test "HTRequest_outputStream" set stream [new_item HTBlackHole] set test_request $Request(1) set expected $stream set set_args "$test_request $stream" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_outputFormat set set_function HTRequest_setOutputFormat set test "HTRequest_outputFormat" set format WWW_RAW set test_request $Request(1) set expected $format set set_args "$test_request $format" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_debugStream set set_function HTRequest_setDebugStream set test "HTRequest_debugStream" set stream [new_item HTBlackHole] set test_request $Request(1) set expected $stream set set_args "$test_request $stream" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_debugFormat set set_function HTRequest_setDebugFormat set test "HTRequest_debugFormat" set format WWW_SOURCE set test_request $Request(1) set expected $format set set_args "$test_request $format" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_callback set set_function HTRequest_setCallback set test "HTRequest_callback" set callback some_callback set test_request $Request(1) set expected $callback set set_args "$test_request $callback" set arguments "$test_request" set_test $set_function $set_args #Can't really test because can't use HTRequest_context #HTRequest_setCallback $test_request $callback #runtest $function "$arguments" $expected "$test" set function HTRequest_context set set_function HTRequest_setContext set test "HTRequest_context" set context some_context set test_request $Request(1) set expected $context set set_args "$test_request $context" set arguments "$test_request" set_test $set_function $set_args #HTRequest_setContext $test_request $context #runtest $function "$arguments" $expected "$test" #Can't run because uses void argument set function HTRequest_preemptive set set_function HTRequest_setPreemptive set test "HTRequest_preemptive" set preemptive YES set test_request $Request(1) set expected $preemptive set set_args "$test_request $preemptive" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_priority set set_function HTRequest_setPriority set test "HTRequest_priority" set priority HT_PRIORITY_INV set test_request $Request(1) set expected $priority set set_args "$test_request $priority" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_net set set_function HTRequest_setNet set test "HTRequest_net" set net htnet set test_request $Request(1) set expected $net set set_args "$test_request $net" set arguments "$test_request" set_test $set_function $set_args #HTRequest_setNet $test_request $net #runtest $function "$arguments" $expected "$test" set function HTRequest_negotiation set set_function HTRequest_setNegotiation set test "HTRequest_negotiation" set negotiation YES set test_request $Request(1) set expected $negotiation set set_args "$test_request $negotiation" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" set function HTRequest_error set set_function HTRequest_setError set test "HTRequest_error" set error [new_item HTList_new] set test_request $Request(1) set expected $error set set_args "$test_request $error" set arguments "$test_request" set_test $set_function $set_args runtest $function "$arguments" $expected "$test" libwww/Library/Test/w3clib.test/HTSimplify.tests0100644000076400001440000000156106201426651021356 0ustar danielusers string: http://www.w3.org/../a/b/c/d/e/f/../../g simplified: http://www.w3.org/../a/b/c/d/g *********** string: http://www.w3.org/a/b/c/../f/g/ simplified: http://www.w3.org/a/b/f/g/ *********** string: /etc/junk/../fred simplified: /etc/fred *********** string: /etc/junk/./fred simplified: /etc/junk/fred *********** string: http://fred.xxx.edu/../.. simplified: http://fred.xxx.edu/../.. *********** string: ../../albert.html simplified: ../../albert.html *********** string: ./ simplified: ./ *********** string: // simplified: // *********** string: /fred/.. simplified: / *********** string: /fred/././.. simplified: / *********** string: /fred/.././junk/.././ simplified: / *********** string: http://www.w3.org://www.org.com/a/b/c/d/../://bob.com/a/b/c/d/.././../ simplified: http://www.w3.org://www.org.com/a/b/c/d/../://bob.com/a/b/ *********** libwww/Library/Test/Makefile0100644000076400001440000002635207405520570015550 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = dejagnu DEJATOOL = w3clib SUBDIRS = src User mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best EXPECT = expect RUNTEST = runtest all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/Test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/Test distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/Test/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done RUNTESTFLAGS = RUNTESTDEFAULTFLAGS = --tool $(DEJATOOL) --srcdir $$srcdir check-DEJAGNU: site.exp srcdir=`cd $(srcdir) && pwd`; export srcdir; \ EXPECT=$(EXPECT); export EXPECT; \ runtest=$(RUNTEST); \ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ $$runtest $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi site.exp: Makefile @echo 'Making a new site.exp file...' @test ! -f site.bak || rm -f site.bak @echo '## these variables are automatically generated by make ##' > $@-t @echo '# Do not edit here. If you wish to override these values' >> $@-t @echo '# edit the last section' >> $@-t @echo 'set tool $(DEJATOOL)' >> $@-t @echo 'set srcdir $(srcdir)' >> $@-t @echo 'set objdir' `pwd` >> $@-t @echo 'set host_alias $(host_alias)' >> $@-t @echo 'set host_triplet $(host_triplet)' >> $@-t @echo 'set target_alias $(target_alias)' >> $@-t @echo 'set target_triplet $(target_triplet)' >> $@-t @echo 'set build_alias $(build_alias)' >> $@-t @echo 'set build_triplet $(build_triplet)' >> $@-t @echo '## All variables above are generated by configure. Do Not Edit ##' >> $@-t @test ! -f site.exp || sed '1,/^## All variables above are.*##/ d' site.exp >> $@-t @test ! -f site.exp || mv site.exp site.bak @mv $@-t site.exp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir check-DEJAGNU \ info-am info dvi-am dvi check check-am installcheck-am installcheck \ install-exec-am install-exec install-data-am install-data install-am \ install uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/Test/Makefile.in0100644000076400001440000002576707405520525016166 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = dejagnu DEJATOOL = w3clib SUBDIRS = src User mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best EXPECT = expect RUNTEST = runtest all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/Test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/Test distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/Test/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done RUNTESTFLAGS = RUNTESTDEFAULTFLAGS = --tool $(DEJATOOL) --srcdir $$srcdir check-DEJAGNU: site.exp srcdir=`cd $(srcdir) && pwd`; export srcdir; \ EXPECT=$(EXPECT); export EXPECT; \ runtest=$(RUNTEST); \ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ $$runtest $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi site.exp: Makefile @echo 'Making a new site.exp file...' @test ! -f site.bak || rm -f site.bak @echo '## these variables are automatically generated by make ##' > $@-t @echo '# Do not edit here. If you wish to override these values' >> $@-t @echo '# edit the last section' >> $@-t @echo 'set tool $(DEJATOOL)' >> $@-t @echo 'set srcdir $(srcdir)' >> $@-t @echo 'set objdir' `pwd` >> $@-t @echo 'set host_alias $(host_alias)' >> $@-t @echo 'set host_triplet $(host_triplet)' >> $@-t @echo 'set target_alias $(target_alias)' >> $@-t @echo 'set target_triplet $(target_triplet)' >> $@-t @echo 'set build_alias $(build_alias)' >> $@-t @echo 'set build_triplet $(build_triplet)' >> $@-t @echo '## All variables above are generated by configure. Do Not Edit ##' >> $@-t @test ! -f site.exp || sed '1,/^## All variables above are.*##/ d' site.exp >> $@-t @test ! -f site.exp || mv site.exp site.bak @mv $@-t site.exp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir check-DEJAGNU \ info-am info dvi-am dvi check check-am installcheck-am installcheck \ install-exec-am install-exec install-data-am install-data install-am \ install uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/0040755000076400001440000000000007405521137014102 5ustar danieluserslibwww/Library/User/CVS/0040755000076400001440000000000007405517340014536 5ustar danieluserslibwww/Library/User/CVS/Root0100644000076400001440000000005607405517337015410 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/User/CVS/Repository0100644000076400001440000000002407405517337016637 0ustar danieluserslibwww/Library/User libwww/Library/User/CVS/Entries0100644000076400001440000000071107405517340016066 0ustar danielusers/.cvsignore/1.3/Fri Jun 7 04:39:48 1996// /Applications.html/1.17/Fri Aug 4 08:41:57 2000// /History.html/1.40/Thu Dec 14 12:05:53 2000// /Makefile.am/1.15/Thu Aug 3 14:42:24 2000// /Overview.html/1.30/Fri Aug 4 08:40:54 2000// /ReleaseNotes.html/1.92/Wed Dec 20 14:34:24 2000// /Start.html/1.9/Fri Aug 4 08:46:18 2000// /ToDo.html/1.29/Fri Aug 4 08:46:18 2000// /Using.html/1.23/Fri Aug 4 08:46:18 2000// /WAIS.html/1.9/Fri Aug 4 08:46:18 2000// D libwww/Library/User/CVS/Entries.Log0100644000076400001440000000015407405517347016616 0ustar danielusersA D/Architecture//// A D/Guide//// A D/Paper//// A D/Patch//// A D/Platform//// A D/Style//// A D/Using//// libwww/Library/User/Architecture/0040755000076400001440000000000007405520567016532 5ustar danieluserslibwww/Library/User/Architecture/CVS/0040755000076400001440000000000007405517342017162 5ustar danieluserslibwww/Library/User/Architecture/CVS/Root0100644000076400001440000000005607405517340020024 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/User/Architecture/CVS/Repository0100644000076400001440000000004107405517340021252 0ustar danieluserslibwww/Library/User/Architecture libwww/Library/User/Architecture/CVS/Entries0100644000076400001440000000513007405517342020512 0ustar danielusers/.cvsignore/1.2/Thu Apr 18 01:41:23 1996// /A.gif/1.1/Fri Jun 30 04:08:05 1995/-kb/ /Alert.html/1.2/Mon Dec 9 03:20:30 1996// /Anchors.gif/1.1/Fri Jun 30 04:08:08 1995/-kb/ /Anchors.html/1.21/Mon Dec 9 03:20:32 1996// /App.html/1.7/Mon Dec 9 03:20:34 1996// /Bind.html/1.2/Mon Dec 9 03:20:36 1996// /C.gif/1.1/Fri Jun 30 04:08:11 1995/-kb/ /Cache.gif/1.1/Sat Sep 2 13:59:30 1995/-kb/ /Cache.html/1.12/Mon Dec 9 03:20:38 1996// /ControlFlow.html/1.19/Mon Dec 9 03:20:41 1996// /DNSCache.html/1.13/Mon Dec 9 03:20:43 1996// /DataStruc.gif/1.2/Fri Jun 30 04:08:14 1995/-kb/ /DataStructures.html/1.21/Mon Dec 9 03:20:45 1996// /Delta.gif/1.1/Thu Jul 4 18:44:39 1996/-kb/ /Design.gif/1.3/Tue Dec 12 04:02:47 1995/-kb/ /DesignModel.html/1.15/Mon Dec 9 03:20:48 1996// /E.gif/1.1/Fri Jun 30 04:08:18 1995/-kb/ /Equation.gif/1.1/Thu Jul 4 18:44:40 1996/-kb/ /Events.html/1.14/Tue Jul 13 09:35:00 1999// /Filters.html/1.3/Tue Feb 4 16:04:19 1997// /H.gif/1.1/Fri Jun 30 04:08:25 1995/-kb/ /HTTP.gif/1.1/Fri Jun 30 04:08:26 1995/-kb/ /HTTPFeatures.html/1.16/Mon Dec 9 03:20:54 1996// /IOStreams.html/1.3/Mon Dec 9 03:20:57 1996// /InOutPipe.gif/1.1/Fri Jun 30 04:08:29 1995/-kb/ /InputStream.gif/1.1/Sat May 27 22:46:35 1995/-kb/ /Internal.gif/1.1/Fri Jun 30 04:08:30 1995/-kb/ /Introduction.html/1.13/Mon Dec 9 03:21:00 1996// /LibCore.gif/1.2/Tue Dec 12 04:03:01 1995/-kb/ /Library.gif/1.1/Fri Jun 30 04:08:34 1995/-kb/ /Makefile.am/1.3/Fri Apr 12 17:45:14 1996// /ModStruc.gif/1.1/Fri Jun 30 04:08:36 1995/-kb/ /Modules.gif/1.1/Sat May 27 22:47:14 1995/-kb/ /Multiformat.html/1.14/Mon Dec 9 03:21:03 1996// /N.gif/1.1/Fri Jun 30 04:08:39 1995/-kb/ /Overview.html/1.24/Tue Jul 13 09:18:49 1999// /POSTEvent.gif/1.1/Fri Jun 30 04:08:42 1995/-kb/ /PostResult.gif/1.1/Fri Jun 30 04:08:47 1995/-kb/ /PostWeb.gif/1.1/Fri Jun 30 04:08:50 1995/-kb/ /PostWeb.html/1.18/Sun Feb 16 18:41:30 1997// /PostWebApp.gif/1.1/Sat Jul 1 03:57:57 1995/-kb/ /PostWebReq.gif/1.1/Sat Jul 1 03:58:01 1995/-kb/ /PostWebStream.gif/1.1/Sat Jul 1 03:58:03 1995/-kb/ /PostWebUser.gif/1.2/Sat Jul 1 03:58:05 1995/-kb/ /Post_A.gif/1.1/Fri Jun 30 04:09:00 1995/-kb/ /Protocol.html/1.9/Mon Dec 9 03:21:12 1996// /R.gif/1.1/Fri Jun 30 04:09:01 1995/-kb/ /Request.html/1.11/Tue Jul 4 15:22:19 2000// /S.gif/1.1/Fri Jun 30 04:09:05 1995/-kb/ /Stream.gif/1.1/Thu Oct 10 22:31:10 1996/-kb/ /Streams.html/1.16/Tue Jul 4 15:10:01 2000// /StrucStream.gif/1.1/Thu Oct 10 22:31:15 1996/-kb/ /Thread.gif/1.1/Fri Jun 30 04:09:08 1995/-kb/ /Threads.html/1.15/Mon Jan 6 16:56:44 1997// /alpha.gif/1.1/Thu Jul 4 18:44:41 1996/-kb/ /choppy.html/1.26/Sun Feb 16 18:41:31 1997// D libwww/Library/User/Architecture/Makefile0100644000076400001440000001411307405520567020167 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Architecture/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Architecture distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Architecture/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Architecture/.cvsignore0100644000076400001440000000002506135316703020516 0ustar danielusersMakefile.in Makefile libwww/Library/User/Architecture/A.gif0100644000076400001440000000027605774674245017415 0ustar danielusersGIF89a&&ñÿÿÿÿÿ!ù,&&”©Ë휴ÚkÞüêr_HVc‰ž(©®`ëŠÔ%¼ÕÁ=“¶Â]~»`_ÇN2)3ø–ÐR­zš¹¥D›áb²^Ìõ[FwÎJ[·[Þô¸”V[åØô$/qpEضw7æ×—(€ÇøÉ3AYYȇi¢¹iÙ险º5JÊ ‘ªºÊªP;libwww/Library/User/Architecture/Alert.html0100644000076400001440000000302606252702576020466 0ustar danielusers Architecture - The Alert Class

    W3C libwww Architecture

    The Alert Class

    The Alert class defines a set of methods to be used by libwww to be used for passing prompts and message to a user. In order to maintain the Library core application independent and natural language independent, libwww does not know how to communicate with a user. Note here that a user is a somewhat abstract notion for  something that can receive a message or prompt from the Library. This can for example be a person, but is may also be handled automatically by a robot or a client receiving a response from a HTTP server.

    Libwww has a set of opcodes that classifies the nature of the message, for example that it is a question that must be confirmed in order to continue a request or simply a progress notification. The application can register a method for any number of the defined opcodes - in case the Library has a message for an opcode that does not have a method associated, the message is ignored. You can also globally disable any message send from the Library.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: Alert.html,v 1.2 2025/12/09 03:20:30 jigsaw Exp $

    libwww/Library/User/Architecture/Anchors.gif0100644000076400001440000001454405774674250020631 0ustar danielusersGIF89aoòÿÿÿÿÿÿÿÿÿÿ!ù,oþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯;ø<Þ²ÇôSjv„…zˆƒ‹%ŽŠW†•†ƒy” ›&ŸK¡–¤p‹Ÿ¨’/£wªU¬¥±‚®œ´z ·ˆ’‰µ ™¸Âûĵ¹·¹ÀÈ´ÁÇ}ÇͮјºÆÏÎ¿ÏØÆ°²àGÖÔÛÕ½ËÜÙ×{åÛê×ÞÐäÌÝñ¾íö ™Âìë¼Üíðõƒ® ^Äî¥CWa2f ³ÑS˜®á¼zÝ(&ÔvþqãDU+>´h°äA„Å :óö±âB[ W¦T9ScLzaº¤ÄO'Æ™9õÝti²¨(ŽÓz&mù³ZÊB£Ú ùR$Ê©Nq¾Z•‘OkV +,Q•\Ñ™¥øN*M A’ô ×'²®xÝ}ÊQÙ¿=Nq•ê°#RŒŽÌ¾¥‹kW0ÇZ#ï<¼7/Ь‹õÞ¬C°Ä®…™ÎÅ;îãŦæ†6 t.[µvC[åL»óÊdºRoL qL±a$|»÷U¶•šÎÛ89±µ£Çðܬf?¾ª‘㦠ÜïZ™Ýµ?79ûißò²K_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿þÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†("Á•hâ‰(º3âŠ[Èdƒ‹,Æ8Œ4Ð(ãMØ(ƒŽ8ö(N`>ù0)ä‘@ò`$’L’˜d“P±d SFÙ`ŠXf©bãùµB•V&ø'UwGk"¸f˜Ž ˆ‘¶èsfcžÀÅf…n²JœtöùXu D K„Êy§„k®’6sζWVÚy(„‰Ém­@÷ç œü¹©¤“^ù#†ú™i4KAö)#¡ŠŠ‘Œ–ÚJ§ª‚G§š­2Xé 0òI«©~Êåi°Ã›+»ÖþªªÅ2Kœ§‘ÒŠë±&Ë+(Þ5êyÂq -¦Ôh­²‹>î€ã^[®’ç"K*(Úª0eºi¶‹î¥ðÊ*ïºôæ½örÆc/ù{‚3ò/š€™gÀ² ìì>Éú[·€LÀÆ wëÂå q:z뤬1Kð¯¬nìòË0o\éǯ+òÈs”ükœ|ú ¸ŠÄ,ôË3ë»Á’Þâ,pÇÒ6Ö³yÏE­0ÌL½åÑø¬4`6çô­kµ‰+.WݰÑg¿ÛìÖcum(Ï`³¼ìÚr',AÑagµ¿l·}7«'õ•°æ=/Èrc­xßÑh+K¿ý,Ô=Ûþýíât_¾8ãdÝìB™ÿ^öèœûÍèì–ŽŸç_nžëªÇ; ®“XÀí¸ç~ûÁ'ÆŽÆìuÖ~Cº_|è©<ìûAI¬ <¿_À»âüó˧^D¢Øë}ôÓc ‚òÙ7¿=æ¯op+ïï·8?Éîo¶ÆË[½ò§ò‘À€™#¤—8ø€Ez dj¦=õáî'_’ ©¤¥¦(x;×5¸AB0^ý‚_ ÷sB´‘nG+d¡¹R8¼æ§…ÔDglx6Ð{;ä!}|˜@†PˆCœ¡æ*ˆD÷ÑYK”k¤a…,>ò* ”ŸUX¯<\\Øm¤‹B 3X‹bGÀ'Va}$Ö—Ÿ±c¬d­5ƱýžÍZ®ø&ü[âÀÒñÉ).kfÊÝNÁ²1C’ ¬·€zùË`¦ç)|c[ê«+daáËæÈÎYÖòøÞ¬‰0ÛùÎJæÒ=¹6ÏòÇg†þaš‡ W6w«rA¶ÕŒ¼D°Šy1S÷8F³‘Î`õÓ5­~Í´VpŸÊféš’qÁ™Î@ª!¬¯Þâ·ÿ53”|È ±’{óVõõâÛb1¤1V]Sýžƒ”wñs™Ì_ZצÌÜn• 'ZI›ú°#6¬Ã-ΖZÔÚì#LÇQ’b+<ü1FkSo(w©W\Ô[o{¼Ì~uÉm~ÓÖ·g…÷ ä ã̵Ðm2¦…]£þù»ß9 ±ŽÎp^úñàöN8¾þƒ{Û‹Ía` =³XßàÇÛ7g©‡íÿfÙ)BËážçoï!ׇ=÷{R8„§¯Øõ~Sê.~€çòUwm󳽉áÍ%f›-÷1/’ó¬ö<ªOyºËk óeºÚÖ÷fxÖÇÏõªnüÒ Ëâo_X÷¶·±Ù‰ü‚ó¾êwD惟cáßôD=Ýþyæ*îÏ×s¥ïx¼Wßúât> `ß0ÙG>Öùÿíýò³ÜÅWÿ¬þIŸý¾cýy—?¾ø~¸ÿþÔ·zúçgÄd{£|ñgtC‡ß7€9Uš7˜ãM Ø{H{“ç€3Z8} ˆ>¶v¨6àSØ}ÿ'~ËG‚Zi×|G†€Ð‚…—.hðW¨vå—8)8| 8‚9Ø>4ÂR'(F8ènvéW„5¸À•„¢DQ8q7ø„P¨ƒ \Xz¢ZVÈ%`^ÊT{ìT†à•!2Áƒ£'0^Ò‚9]ÌÓ@ç^8]‹‡<@‡§c‡‡‡ ²{ȇ+á‡;ˆpˆd‚†á'„ˆ¢‡”%Oƒ ˆ:Àˆàˆãþ‰#€â œh^Ò€‰9 ‰Í#ˆ­Gˆ "Š•ø&î`Š8€Š¯¢Š1Šâ†øã²x´ø‚¯¸Vùw‹*h!£H†Ћ6ð‹pŒ|·„‘hƒâŒØ&ÊẌÔh^ž¸~PÓ„ˆ¨†XBº¸‹ p4°ÕØ&+ˆ7-ÏøGçiŒÿ”Œq¸ˆH÷ˆùŸ(7ùdr¨oqpª¥Øþ˜V›&ÞH/Ç-Õ•–x>¸¼¸™èYŽ(‘ï,)CeÑb¾‡…jƒÂ¸è8êXé‘Ztß()kfhÙ’ô‡09M É<þ@’%™“¯âa£•*Íõu1(B ÁuŽ yŠ"9’;b‹J }ºU+¼E7Qw}/ ]E’=@•U9Œ]ilË•‘®xPé’(Žºt†ÙFh—´„—JI–'m+™tUÇoõ•&‚0“2„R¹‚5™aÖL*[ßÂ’È”mÉŠŽÀ˜1à˜š©z,˜•tYš@é‡Ùƒ2(yV©—Ú‡‹ÞG„Ä(‰§‰{¨yyy•³HšT(‘ÙZi|Õ–™Lx’ÅÈt à™0š¦‰œ£9$d¸ewt<%aÐə֨›¾È›¸É•:Ù/ç!tEFg¸†Rö5ˆ°)jÊùÌ9sŠù›þ£ÇJp÷/CžócJG‰Ænns‡éÉ0ëéí¹€Išî)sg1£y&sTö(Ÿ–@‡ +¾pn ˜|Ùéš\ˆ-W—Ê–…lùÚ/ 3~¶fÍõ”ª9¡YˆsÝ¥k~ÉÚê(”v¡ª‰AÏéŸw'žTÓŸ æ“©dvÇ¢¶6™8Š4j”¯ùxš¤1ú›)bÓ%õYD^ceÝj ƒ˜·ÉhÇöXøyš¹©¡Ø¦qaYèF¦Þ¹”çw¦0žXú6J˜Фx¼;bÇÚ}¢Ö¼ò)¼]k-<;³Ôev½‰Û¥ÿ”³À‰³–)Qþ‰zß ¨O»ºØ©±‰™»+½«i²ÈûŸv©¾ð¾pÊ¿â Àˆ×¾ÎÀ À›hEàsAd²¹q0¸\¾’©¿÷»@‰—<©Ÿô»‚þû¿<±ø‹˜„ ¤Õ3„¾{¼?„¹L‹xyàÃ1&Ý)¶@¬À7l&h›ëã°)Ã?<½&¿;›Â#0”6칃ÄÜX3ÜÄùëÄ<<8Ŭ°®+µKœ^"¢i 6ÜÂ][µf<¿`0Å »T)ÇT¼;̼¤¹}y^ÀÇ}ü ^È+¾çYì:–0È;úH‰È#œÈv°þÈIlŽìÈ `ÉHÀé;œl5 Ź·jùU8tB! ¡üƒ•ɤÌ­\wyü³Lœ§lŽ…ËœË{yS.;³¥vÀËèˤˆ¾ ÌÅi0Ì~LÆ|”μ±>[Ík0Í„+ѼØÌ÷ÌÌgÐÍÔ\̱ì¾å¬È<ÖÜ%Ì‘é̇£l¦(΢ùÍð¤nÌÿ‘˜|ÎOÌÍYY̬¼Ä)ÆÐýÊþÜÅó|“D9É(tGɵm€Ð ÝÏò|ýÐN[Uf®lKC©i Ñ%Éð¼Îìe¡˜iÐýÎÈXÒÚÐ0ÝŽ*Sš„I.—ªÑDÏõþ<Û<Ï[ Ñ-¿$—«¬5}Å=Óh–}|BJ¾i[‹†,¯1\AýÁW=ŽÏ¼ÅzäK>öºý*®cKÖq°Õù ε\Ö[B™uË{³lÔ˹Ð(ܳQmÅVgœTÅ2–’LÔÙÛÎ!k¸pÜÔ‚ ¿„m¾}M¯dœØ»Œ×L¬žÜÖœ* Ù²‘}ÙvÍž”½À–}Ö:Z¿ìó•ë%1ˆíÙñìÔoÚØýûØaõ²ŒõÙ´}Á$ Ô¡=ÄŒ}Ó¥mØÆ"ë{ªiz±ÞZwÁÝgØëØi½Ûî¸Ü"u£½G´{Mi‚¹[Õ;i,}TÔ¯mðP޵5êÝCþß­ÅÊ=Õ/¶­rt müºT â½z=1O:ÝÄ ÖŠ:ÕMéÝY€Ïr[ÏÁ ýݪipßê×+fàÉÝh}Mo•­ÿÞަ‚ʧȪÚk ÞÊ\©^ýŠÙ&÷1’ n¶«Zo¿ÚÒ¨à¶?˜Öš ß_íߣÑmØÝâ«Ý«0NÕé­Ý]Pã9Úzj¬¾ã<.RŽ1Ü”žsyÜB®©Džà.­Hþ™Jî–CÞäYýäs=¢Æ;Ûì㓃Õ- ¾å`»®v†­iNäÜêÛóÒtm>¨ñÊs<íæUßÄ'çaÖ®ŒŠåðº-l¾×cþÚ1+þ´i®tŸËè(nAâ‡Ü‚§¦czâªü¥ÚËÚý e Ûöé’ ÍÎMá¤}鯽Ìýêï}©­.ë¨þÛ©®Þ3‚½Í×Íí⸊°Îëd±¼ækýÓÚ|ë¸Íš˜éÀ¾ëÀä!ƒtc ëS Éœ½½Ÿ¡³±ÄÔÞë)ä3£åÍ.ìeÞ»Ù,îǮꣳ٧ÇéníÌîV{ÂÄþÇ‡ÛæÞÚ³nËmŒ¡¨é>Ún¿­Vå9zðQÀíùÍßËNïàìë]à0Æ1âùN?ØÂ‰ïãìÉß"¬ çENÎêîí´]òQ«ËbHuò…]ïï„ÑóÌ) q¡þtl; êoêÃîïQÉð¢lÓ¿sê¬~ò¯ëžlØŠ ô¤nÕÛJô~mÀµNÞÎþɹnõÑY"rõ“­ôXß!bŸôö®ï^?`Hoòi_×fßöZ½õ"ìÛkïDr¯ñt¿ïK÷íqön?ójŸõ9“÷ºMöƒ÷«øROëfßÕ€^ìÁ> ïÕ’$>Íì“ïÎP&™/ñp°ñ:ðùÓNy??D„(©Os«³úAú1¿ùoû7ï#´î¡¿÷ÇÜùSä÷J úýæúq´ÔF?ö¸ÌûQrûþÀÊÏô˜OüŒ\ênðü¾/ û\¸h_Ñ ©ýLÒýmüÕoÑþü#-nÛ?þ(­ÎP²ÑåŸþÜ¿þ1íùÊýHÐü]ÿÂ?ò?ÿâ?û0Üþ0J¼8ëÍ»ÿ`(†ËVfª®ža°pl–2†Öx®ïcåÿÀ pH,Z87žrÉp1Ÿ£tJv’Ьv‹äJެwüq’kàsôšV»ßhxÛ6‡Û›¯{ªîåýz‚_rlƒzf‡€ZŒbŠ‘‡ŽP” ’^‰™–LžQ œ£•…H¢¤5›©„o ˜¬±Y¨;¯´²*«¸—¦a·»À"¿8¶ÁOºÀÃq§ÆÍµ½ÊÎÈ»Ò1ÅÓÚ0–>uGàÙÛ8Õ¸ÝXâkã†åð=ã`7þëëäñ0粎IõÂtÇLŸÁ+y±kõ(a´ƒûò8ó×páÀv6ÞAÜ8‘ Þ‰‚bAŽ&øÅòØ1=‘—J:œ‡²fÅ–HÂdWϤ/›#T²b™3ÔÎpHgÒ ”èÅ£PâÓÈ´…ÄfN1F¹sêɪ³Þäµ+Ο`­îZ%ö›[²}>L6#C¸\-Þ¥I—ƒPE.µ•Š×¬\¾} Î;’ñ¼*°CL¹²å˘3kÞÌÙ²Þ§e Ç} Y²bÄ6NJò5ŽcËžMû²?zŽñ²ÆçúµéAéÒ/ëíðoºžƒ¿Ý¤ÒãL}¯eÂþg¨W_ m{U¶Ý½×Ôn‚¼ødáÏו‡„yõý„E>ßæ°ŸÕOLëŸï÷û rßBÒ 'ýUÞëÑ÷’Y1X*¹DŸ„§](š{F§_QóÕa9¿<èœ0#Ú÷!h ¦H¢†0…øœ‹ñP(b‹4Ns‹k ˜#D6Þ…ãÆìØP^H¤+¾5ÜŠK¢eLí…¥>ýáfX“WZÃå7O&Ù%<%ª³\„cÆÇdšÚ()&›Ü­ 'Vé͉›hÚ)¥xê‰M~’Ò§•f2h'…z)g¢“ÊèŽ>Êg¤’ Hi¥c:#¦À]ÊéšÚõ©$¡z5ªB§ŸœJ*ªª.Qªˆ­òê^±öÑÛ­®Õ ®¼N¡ë¯À+ì°Äkì±È&«ì²Ì6ëì³ÐF+í´ÔVkíµØf;j;libwww/Library/User/Architecture/Anchors.html0100644000076400001440000001170306252702600021001 0ustar danielusers Architecture - The Anchor Class

    W3C libwww Architecture

    The Anchor Class

    The Anchor Class defines references to data objects which may be the sources or destinations of hypertext links. Another name for anchors would be URLs as an anchor represents all we know about a URL - including where it points to and who points to it.

    The anchors are organized into a sub-web which represents the part of the web that the application (often the user) has been in touch with. In this sub-web, any anchor can be the source of zero, one, or many links and it may be the destination of zero, one, or many links. That is, any anchor can point to and be pointed to by any number of links. Having an anchor being the source of many links is often used in the POST method, where for example the same entity can be posted to a News group, a mailing list and a HTTP server. This is explained in the section on libwww PostWebs.

    All URLs are represented as anchors. An anchor contains all the information that we know about a particular URL - including  the entity body if we happen to have down loaded the entity. As anchors often exist throughout the lifetime of the application, we must be able to flush the entity bodies from time to time so that we don't overflow the memory. Therefore, it is possible to have an anchor both with and without an entity body. If the data object is stored in the file cache or in memory, the parent anchor contains a link to it so the application can access it either directly or through the file cache manager.

    Just to make things a bit more complicated, we have two different sub classes of the Anchor class:

    parent anchors
    Represents a complete URL. That is, the destination of a link pointing to a parent anchor is the full contents of that URL. Parent anchors are used to store all information about a URL, for example the content type, language, and length.
    child anchors
    Represents a subpart of a URL. A subpart is declared by making a NAME tag in the anchor declaration and a child anchor is the destination of a link if the HREF link declaration contains a "#" and a tag appended to the URI. Child anchors do not contain any information about the data object itself. They only keep a handle (or a "tag") pointing into the data object kept by the corresponding parent anchor.

    Every parent anchor points to a URL address which may or may not exist. In the case of posting an anchor to a remote server, the URL pointed to is yet to be created. The client can assign an address for the object but it might be overridden (or completely denied) by the remote server. The relationship between parent anchors and child anchors is illustrated in the figure.

    Anchors

    1. Parent anchors keep a list of its children which is used to avoid having multiple example of the same child and in the garbage collection of anchors.
    2. All child anchors have a pointer to their parent as only the parent anchors keep information about the data object itself. Parent anchors simply have a pointer to themselves.
    3. Every parent anchor points to a resource (URL) that may or may not exist.
    4. Parents can have an entity body associated with them. In this case anchor B and C has an entity body (data object) but A hasn't which can either be because the anchor has not yet been down loaded or the entity body has been discarded from memory by the application.
    5. Any anchor can have any number of links pointing to a set of destinations (URLs).This is a generalization of the normal URL concept that a URL is only pointing to a single location, and in most situations there is only one destination. However,  multiple destinations can occur when posting entities to multiple remote servers at the same time.
    6. This anchor has two destinations (parent anchors which each have a URL). By default the main destination will be the one selected.
    7. Parent anchors keep a list of other anchors pointing to it. This information is required if a single parent anchor (and its children) is removed from the sub-web.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: Anchors.html,v 1.21 2025/12/09 03:20:32 jigsaw Exp $

    libwww/Library/User/Architecture/App.html0100644000076400001440000000157706252702602020136 0ustar danielusers Architecture - Application modules

    W3C libwww Architecture

    Application modules

    Until now we have described the architecture of the libwww Core. Even though an application can be used uniquely using the Core and the Utilities, some of the application modules are worth looking at. This section describes the acritecture behind the main application modules.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: App.html,v 1.7 2025/12/09 03:20:34 jigsaw Exp $

    libwww/Library/User/Architecture/Bind.html0100644000076400001440000000224006252702604020260 0ustar danielusers Architecture - File Suffix Binding

    W3C libwww Architecture

    File Suffix Binding

    This module sets up the binding between a file suffix and a media type, language, encoding etc. In a client application the suffixes are used in protocols that does not directly support media types etc., like FTP, and in server applications they are used to make the bindings between the server and the local file store that the server can serve to the rest of the world (well almost). The HTFormat module holds this information against the accept headers received in a request and uses if for format negotiation. All the binding management can all be replaced by a database interface.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: Bind.html,v 1.2 2025/12/09 03:20:36 jigsaw Exp $

    libwww/Library/User/Architecture/C.gif0100644000076400001440000000027005774674253017410 0ustar danielusersGIF89a&&ñÿÿÿÿÿ!ù,&&‰”©Ë휴ÚkÞüêr_HVc‰ž(©®`ëŠÔ6;wö~w0µö6?ɰrÌä05N“¸´$‘™aóŒIŠY-·ªÝF©añ• Ë€µ.­<_¦dLЕÂãg~B7q‡wdÕ÷ÆH1ȃ#Çf7&iBY)x‰Ù¦‰ÙXö©1JZjºP;libwww/Library/User/Architecture/Cache.gif0100644000076400001440000000614106022061502020202 0ustar danielusersGIF89a°òÿÿÿÿÿÿÿ!ù,°þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯§øS^±/õí€xz…|‡‚$Œ }Qy’Љ#–“Ž˜‘›P•  𦡥¤¨©H£ž…„£ŒŸ„±¹ ³‡¶» {³®¼«­ÄD·Á²½Å½‰ËÐÑÌÕÔ»Ÿ×ˆØÀ©¦·ÃÌ܈ÞÔå ÈÉÓåãîÏäçòÙ˜À‹ÒöúùÆàüÛ®EÓ¶ Ûºíæ½{$,Ÿ¼‡¸â‘cèð«Åôe´hþÞCu%üâ81¯Š ïiT(q$1ŒçµJˆ/ä¥$eš¤wR$Î=#B)&Ë’Tâ jóÔÀ• w*lÁ%KªBc”b̧ãmmšsªT¯f‡2å5VØ£›ºž¥E÷­N²$i³èmš_¬k%9ö\·Zë~‡7ƒ¦†?»9c‹N%Øn< Z­  ³€6r¡nVª«_cVƨ2æ¶:­5º7&FkW‚çÏlžÖýV÷ÚŒ¦O;õ)æ6hÞi[SŒ 7¦pF¿=8u ѽL¿>È:w Ù»lÿ¾¡0yÔÄÃŒ?o¡5ûëß'5/ŸNüúøÉßÏÏÿùþþþ’õ_€®3`†r`‚ ²`ƒÎñ`„º1a…¦qa†’±a‡ JçYˆ$®ña‰(ZqbŠ,F±b‹02ñbŒ41c8 qcŽ<ö°c@âðccÐf—‘‹!–’p1é¤TKBy¤”If5¥’µÙ$•[bYe”^viå—WŽ)&˜f>¦šZÊ7d›p²ðfœtž0gTxwÐVè‰"}›ð™§Ÿ%šŒ SŠg #.ê¨>ZŸo”Vjé¥}€¨¤þ¼2¦œÚ¡h £>j¨G”ªˆ§"œ*Š–€Âj®:+†ª®šê§‘º‘+ªIÍ B­À&¬¦½þ{ݯ00«±ÊŠé´ÔV[¯EÛ”³.¤†-nÚ‚Áí1ÇómQ°ŽëI¹¼œ Ç­ª»î®¬¸kl¸Ž±Ë‡½ø¾¤/4üöûÍ¿ÜB+ðòªàm«ÉøSt|îî®gø¥4?³æå›¬úÖOÎÿôí¡Ÿ Ü×½Î0{ßcï~;üÍN)øúè&A뵇 tŸß2ؽå|Îs ô ˆ‚ VZ&” ñ8˜Áj±0ƒT†ý@8B°µ …8Ì¡-ˆ½úð‡@ì %F'Âû™;L¢××à :ñ‰B|ÕØ;ß=Ðþ†,X¢w¸B(zˆ1 i¸ómñŒ)ìâ×ÈA»)yã³_Ix4Úño„÷C ¤„ˆV á_pÇBpíã£"èGð²ŠÌUCò‚¯0Æ"F7ÆñysœäMHaÉ;bÁ=ؤ";™@’QˆÊT)íxÊÉ,@•|de#Q³½ÉI³D#å~ÙKÝ—lÔåRSÌÇ3Á<ã0›Y¶T"sÊZU¨y¸g"š[œ&7µvMl¶’”/Ç 7oœZ¤;¯fÍrBQ~y”á'‹K:–'2ð\b3¹ {zñœè|$©ÊÃ<´ìe (T•³l hC †Ñ’Ö±ú|*^%+U¬–µ_pmcwéWÍʶ¨´Õko{½Þ>A·QþZí Ê‚ÕvÄ-î|‰\„‹¹Et®pMݱ’µº°#dg{É®V©—-íÒÆ Üò>WÝ]ìhÕ‹ƒÓFòŠžîmÑËXúÞÀ¾k5l[÷+ßô†7«„¬{·;Uâò°¾î`ïëNíæ—»ö®ËÈe.wÂ8 œù šXð¤s€ó°„}›`9½×¶|•[ œ¨´æÔN/†1U×á¹ÙØ«8f0b{ꆥžòÇ"Î1†‡™fáÄya¯ F\ÉYâš\€ry¤œ*OÀ”›X¥­ò)ÞÍvYÉHô)ËÊ@SJ|˜ÅN²?«º‚¸vE—c[,-cGÁgžþsΞücìyЦ-t èú*ÚÅ‚n´±KFK:oV±Za`iëæè”žA§=\g2kúÆ/µ6£åg£Ò¾ôH µ¨ZÖoû× në´ÚÎ>Bs¯™ðkSç€×Ãþs¦=}lag9dËæm°#ý”EÈpº¶²Íêl×`ÛÉ6ÚVwíìpStž¬ã¸Í] u³;@î~7yáSn-û9Ö¶C¼Iuoáp‰Mh x™N¦‚Ÿià78À~ð8-\áÿŽøš$ž&мáxƹ$ï2ì»ãõù8Èß#ò‘Ÿ§ä&ÿÊS~•³Ü?õ~yŒ\.óÆÐ¼æŠ9þÎStóÓ›Ú>§Qσ~(D^¾Ý¦/²ˆˆE+ée²HŠ‚§+ ê6öÉö¶²~ë lÆÌìŽÀ$Ž këË=t‚Y<Ýè®ö‹ Å.±x߈ÁÊn‚`%ý¡d7b:Bø“Ⱦ(]â—þ(°×L„@ò]¹ÅG>¯FÖëäø*B~ìŸÿ<ºO¹3îîüé¼âcgù±3¾ ´0=égïù.–g7nÀšÅ6ÑðÝîw¨:ëü»d™”7q–¦äX‹ûôÉ…Þsö¦‡°Ù‡Ôç†|(ÇÞÕ$úÑÍ{€´«ïŒiÆ÷Q]vàœ¿í£ÿøþ÷U~¤Ÿïø_=zîŸã xþRz²'z­W€ å­GE˜Z8f÷³xv˜9ëw ’}¿ÔYÛÇKQ†;h8æzkF¬·8x‚ŠSY‘€ØPjs4óSÀ†02Wͱb6h‚΃|8{õg3 xD8H˜h\e($ø|óÆ‚ºGh h(…aâÓ7+ø*we~¨µé×íw`®7†¯†k§vÉG*ú‡„w}‘ð…¿@wa‡ñw!ÖƒZÈLRØ}ç€óÒŒw…üg¡\hKÈ@xcEøz´‡exSˆx+¸ys°†+À…7˜þVŽ˜…¨´]XN˜y¡8|£š¸‰x¸t‹È|¨‚µ×MPŠȇ=ˆK¨r¯ˆj±(‹»H‹“XŒ5Ö1.ICx‰Ä¸(œˆŒ†È~H|zè¤Ø‰h…Ó8€Z¨%ψî·M°Áv¢÷€Ô§¸è†8ŽQŽ^Èy¿Ø€ "òôXupø(!ñ¸ðÖþØúo0Ùy& é& Ùì‘y9‘÷É™‘Å‘ s@÷‘²‘"©Y’xA’(¹*¹’YÐ’.y0“U0“496y“.r’:I 9Ù“Nð“@)#<9”Œ2’F©‘E™”‚ ”Li#Kù”ú•RiTY•rà”X¹•\Ù•^ù•`–b9–dY–2—;libwww/Library/User/Architecture/Cache.html0100644000076400001440000001430506252702606020416 0ustar danielusers Architecture - Cache

    W3C libwww Architecture

    The Cache Manager

    Caching is a required part of any efficient Internet access applications as it saves bandwidth and improves access performance significantly in almost all types of accesses. This sections describes the architecture behind the cache management in the Library. The cache management is intended to be used both as a proxy cache and a client cache or simply as a cache relay. It does not include the interaction between an application and a proxy server as this is regarded as an external access and hence outside the scope of the local cache. The basic structure of the cache is illustrated in the figure below.

    Cache Organization

    The figure described the cache hierarchy starting from left to right; it does not describe the data flow. Any of the three cache handlers can be left out in which case a cache request will fall through to the next handler in the hierarchy and finally be passed to the protocol manager which issues a request to either the origin server, a proxy server, or a gateway. Any of the handlers can also be short circuited by using a set of cache directives which are explained in the User's Guide. In the following, each part will be described in more detail.

    Memory Cache

    The memory cache is completely handled by the application and is only consulted by the Library when servicing a request. It is considered private to a specific instance of an application and is not intended to be shared between instances. Handling the memory cache includes the following tasks: object storage, garbage collection, and object retrieval. The application can initiate a memory cache handler by registering a call back function that is called from within the Library on each request. The details of this registration is described in the User's Guide.

    Traditionally, the memory cache is based on handling the graphic objects described by the HyperDoc object in memory as the user keeps requesting new documents. The HyperDoc object is only declared in the Library - the real definition is left to the application as it is for the application to handle graphic objects. For example, the Line Mode Browser has its own definition of the HyperDoc object called HText which describes a fully parsed HTML object with enough information to display itself to the user. However, the memory cache handler can handle other objects than HTML, for example images, audio clips etc. It is important to note that the Library does not imply any limitations on the usage of the memory cache.

    The memory cache must define its own garbage collection algorithm which can be based on available memory etc. Again, the Line Mode Browser has a very simple memory management of how long objects stay around in memory. It is determined by a constant in the GridText module and is by default set to 5 documents. This approach can be much more advanced and the memory garbage collection can be determined by the size of the graphic objects, when they expire etc. but the API is the same no matter how the garbage collector is implemented.

    Private File Cache

    The private file cache is to be regarded as a direct extension of the memory cache as intended for intermediate term storage of data objects. As the memory cache, it is intended to be private to a single instance of an application as long as the instance is running. However, as a file cache is persistent, it can be shared between several instances of various applications as long as exactly one instance owns the private cache at any one time. The single ownership of a private cache means that the cache can be accessed via the local file system by one instance of an application only.

    There are two purposes of the private file cache:

    1. To maintain a persistent cache for applications that do not have a shared cache.
    2. To maintain a private persistent cache for specific groups of documents that are not to be shared among other applications. Examples of such are documents with a HTTP header Pragma: Private which will be introduced in HTTP/1.1

    Often an important difference between the memory cache and the file cache is the format of the data. As mentioned above, in the memory cache, the cached objects can be pre-parsed objects ready to be displayed to the user. In a file cache the data objects are always stored along with their metainformation so that important header information like Expires, Last-Modified, Language etc. is a part of the stored object together with any unknown metainformation that might be a part of the object.

    Shared File Cache

    A shared file cache which can be accessed by several independent applications requires its own cache manager in order to ensure a consistent cache and to handle garbage collection. A shared file cache can in many ways be regarded as similar to a proxy cache as a single application do not know when a cached object is either discarded or refreshed in the shared cache area.

    If a shared cache manager does exist then the only remaining purpose of a private file cache is to store explicitly private objects. All other objects will be stored in the shared cache.

    As for the private file cache, the data objects are always stored along with their metainformation so that any metainformation associated with an object can be returned to the requesting application.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: Cache.html,v 1.12 2025/12/09 03:20:38 jigsaw Exp $

    libwww/Library/User/Architecture/ControlFlow.html0100644000076400001440000000253406252702611021660 0ustar danielusers Simplified Control Flow

    W3C libwww Architecture

    Simplified Control Flow

    Libwww is built on the request/response paradigm where an application issues a request for a URI (URL). Libwww then tries to fulfill the request as efficient as possible either by requesting the URL at the origin server, a proxy server, a gateway, directly from the local file system, or a locally cached version. Data is delivered back to the application as soon as it gets ready which guarantees minimum access delay for the application. Libwww is capable of accepting many simultaneous requests and handling them in an intelligent manner in order to save network bandwidth.

    MORE


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: ControlFlow.html,v 1.19 2025/12/09 03:20:41 jigsaw Exp $
    libwww/Library/User/Architecture/DNSCache.html0100644000076400001440000000655606252702613020772 0ustar danielusers DNS Cache

    W3C libwww Architecture

    DNS Cache and Host Name Canonicalization

    An excessive communication with remote Domain Name Servers (DNS) can produce a significant time-overhead in requesting a document from a remote server which can result in degraded performance of the application. This is often the case in spite of DNS's own cache, as the request still has to cross the network. In order to prevent this, the Library has its internal memory cache of host names which is updated every time a host name is looked up in the DNS cache. Once the host name has been resolved into an IP-address, it is stored in the cache. The entry stays in the cache until either an error occurs when connecting to the remote host or it is removed during garbage collection. However, as the information kept in the cache is fairly small, it can contain a large set of elements.

    Multi-homed hosts are treated specially as all available IP-addresses returned from DNS are stored in the cache. Every time a request is made to the host, the time-to-connect is measured and a weight function is calculated to indicate how fast the IP-address was. The weight function used is

    Weight function

    where alpha indicates the sensitivity of the function and Delta is the connect time. If one IP-address is not reachable a penalty of x seconds is added to the weight where the penalty is a function of the error returned from the "connect" call. The next time a request is initiated to the remote host, the IP-address with the smallest weight is used.

    A problem with both the host name cache and the data object cache is to detect when two URLs are equivalent. The only way this can be done internally in the Library is to canonicalize the URLs before they are compared. This has for some time been done by looking at the path segment of the URLs and remove redundant information by converting URLs like

    	foo/./bar/ = foo/redundant/../bar/ = foo/bar/
    

    The method is optimized and expanded so that also host names are canonicalized. Hence the following URLs are all recognized to be identical:

    	http://www/ = http://www:80/ = http://WwW/ =
    	http://www./ = http://www
    

    However, the canonicalization does not recognize alias host names which would require that this information is stored in the cache. In order to do this, a separate resolver library must be provided as this information is normally not returned by the default resolver libraries. Also these library do not support non-blocking sockets and hence delay can not be avoided when resolving a host name. The solution is of course to write a resolver library which handles these features, and it is under consideration.


    Henrik Frystyk Nielsen, libwww@w3.org,

    @(#) $Id: DNSCache.html,v 1.13 2025/12/09 03:20:43 jigsaw Exp $

    libwww/Library/User/Architecture/DataStruc.gif0100644000076400001440000001103205774674256021121 0ustar danielusersGIF89a×jòÿÿÿÿÿÿ!ù,×jþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ß𸜈ê |H?ïwø z€~2ƒv†‚ˆ„ŽЉˆ‘*u”‹˜•šœž$— ¢¨£•¢ª«Œtv¥ x´y“𥻵»€½¸¸¦¯g‘±·’Ê’—²ÊÀÄ}±¾¿ÃÁÓÌ´Í;ÂÖܶÉÅhǹÕϳá¼éËÞÐÔÝÌòØ|áòÞöëÃøãÆÑŒöÍs§O ;Gð¢û´ [¨„öóW¦œÂ{¸µËþmÎ/} aŒHMcÃ\!uu¤øÅâF‰%A:{éç#8P»MStsfÄœ4Y†q)’]¼vEÖ4õÓ¨N”Aer¼è4¨Ð–¡>‰”iO†Ò“YoŸÔ“øººj…(Y•i™š$dÑæ·ž]{mƒæôãÁµl©Ø=yŽïÀ¨+ãÔM2™ZÇ@af3h5ð–ÁÈ4íK 0¬–CCñL´èÓKH/}ˆºµ‘¹B]ºž 6íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾¼'Ì«_ƒ~½û4íß˾ý/õïëÇ’¿þÿ*ýý' hਠ .è` >(¡Nhá ^¨! nèa ~(¢ !Žhâ%ž¨")®èb-¾(£1ÂbÓ8樣ŽYìèã@#cØV›j?™$’ IbB0™ƒ”6P¹Ÿ“@Y„–µEÁå‚XNð%cîPf”'†JgÞÐ&š"ª™ÑoÎP'œÊIG[ò類µ\6Ä}þ™Þ]jI¢š£]r¡¨{zNúZ’-i¨¥…öÀ)™ §ƒbê©âU:”§«^('ª¥ò+žª Ƭ´j᫺ê€k¤Ú𩬽Ö**,©8þÀØ9_i0ë¯@ëƒ´Ú +¦²däÙ³¬Þªé±¹Và՞؞É-±Þî n¸YbKn¶¼–ÍW&ÝR•Ô.Òìž7U¤¾{|°¸îšm³;¡”°0kåëÌùèÁÇõ/$ûžâ꺋ë×»OBî¸ó{± C|0ÉO\q²»Ü±º·KqË8É,òÍ;Ó{r )§l0Ë:‹©8òŠÃXIôjÕ²ƒ%-5Ä\S5º0êW á'@r÷s0Š—)ô¥W°#&ñ…«+< ÏÉ„áÝáœ'kpø¸(ntcœ‚–pQäe†I)•…!ŒmcÑ+S(d…6€ÈEžñ”Rf½ŒY¯{ÞïJV8)Où»Ž®7›`d=ryÁKm˜Çü9ÜQ´úi îŠe´ÙâPþqû@vâ2ã®ÎdNñ9ëˆæ|¶Ï&ø³ >Uè8»p·–ßâX _*4®ðr‹I 8Z¬a†r¦Ýæ´·Äàµ2DW&PÚÔnTÉ5r§:'nƒö4f éHkwæ †ÙÕf7xÃí³³§£7ãY‹,d6\QQÔªY´Æe°ßw‡nóqÙfØv P‘Ý«ûÈ—pyG3v‡žš•¼!àdwÍîwÆÆââ7°²–(·]{ƒ¶\Ðbxø¹ÿ½€@Jß%ïÅ_˜nÒRà¥.#v¸qeG\P¯ø½Aזιñ&f¶Ùgíx¬é’“;Šoèû]ô^ù‘©^óî$¶ÞÖ\¿á,;ou }%Üûr¡tqjûÞËn˜+}D´Ûžª¸W^îbÀû§¾ÆÔ;\½z ›ØéÚpw÷¯:Ÿ{¼Í~†ž—=úæ?PÀ@‹úe·2¶µz•ýŒ¿,þåïíúwÔþòæ(“ï:BûÄý†F>>S[AU5£8bfgÛCgC÷÷€ó7ú7¸WM…h ˜hˆæ<,÷!u~‰¦i…g¨/ˆ¨‚,ØQúÇ}Ê÷e²@;«6õó|8ØN"¸iè;öSƒm2)-²}ü·|g3=2ˆ6ˆƒåÇ;È;IØG…ÃW…†g>U„S¸…ñt‚>˜7˜SOÈNÆ~:#NÆb0„Ð4|Ý}Q¶~ø ̓k)5†28}ö»ÃØ—}¨ƒÞçcñ;‹s4g‚ƒò{ŒØ„Cwu…%„‡IÔBpææ&¯—{l˜§þBiÇv‹²%%—‰¤¶ ˳z_G{4P‰¢Y’·yœwxo7-g÷Š…‡@YTzŠx‚§`í‹tAœ¸hµØ‹^·WÀnf–ŽHvÄ]n÷xWÈ3aèyØw7‹µ§dͧ°V¡ÕŒVØv䘊ÑÔ G$is3SâvÖˆžHy8÷[z6WÔŽãx[åhޤ£†wtIŒ‘7oûXyýX> Y6—WÅh|ç¸vô¸:—ƒŠ‡Œ¼ˆI$wõ($—ŒÐè‹X$Eðø0ÇÆï„óx‹¥8’÷ð$àp Y’®H"·‹´¤o ©;‰î&’¤pk,‰ þ·î6ŠÅG”=y+¤¸‰ÒBd—hKç”>Ù^ø{’“”•ÔŠ)¹fƒHö‡i3)*ÉÅŽ'¹Dî¨t–VfÃ8—¸1lÖ–T”bù†;&Ht©Š²–3‰—«|Çr§ˆhÖÇ%s‹‰XPÕP{u©dƒ¨˜S¡„ª¦~p© ‚i„©w•Ù‡eÉ<=€c6Œv&’™u” ˜|i:%„Iؙٚ®ip– ‡yXB^øƒæ"0L Ž?¹›‰É8¾ékÀé,$ Ÿé‘¡y‘Ðçÿ—ÊyˆJAœsÏ ÄÙ’ˆId8}øk¤áròÑÞ0éyóþêéß9L›GeäŸòÉžÇè1yQߟ(©ŸB)àŸÜ *“º(vïX™ªC¥šy•úiÍ¡:YšyEÙŸóùŠt…iù–Ú‰¡Ê1¢$Š^iy¢œò ÔÁ¢ÀU0Ú”)* ÆA£5Žê¡ )“×Á£9ºšúx¤AêDZ¤»Ù í!ºK*Šd{·ŸPª£Ä1¥Tª¥X: ƒé¥ÂÁ¥*¦`z¦aÚdZ¦BJ_š¤jŠ› e¦oZœ*¥¸±¦€§šX¡2Ö¦Ò¡§ë¨é¦”¹Y-r:§„úã6•빨Ï!¨ À§£á•_ùQšþ¨öE§òQ¢Žš’º”*˜%ºª¢Ê©ïQªª©'?'ªËªA6"õ©yêª~f b£HX¨jŸ&b£zÉÁª¢Ã[Ú¨ 2j!ÄŠ¢Ìª«Y©BX¸JÍꬪú?ÖÊÛú­ªÓ­ J­1a©XÕ#èêl'E®åzdú”ð:Lòšªâš#V¯Cib†z¨š¨R7Šhº«÷Šõ¥v½÷¤¯ê®ïJ’Ò+ Ë–k°¸Ù„j“Æ6±»‘iŒ »£’ÙŽîE²Õª¤9©’‘H 0ª®á(*;p,»¡!{OĠ׈¤Yʰ¹:šü™—Ú²<þÛ°²ø³«ˆ£Z³" ˜+D?ʤq*zë–HÛ¥J»´R’T´€¬[´NZ59¨CÛ³Y‹³[;³V[¶D{˜j»nc«Ï:7«µ@[µ“êµ+ú‰Oëf}k¯l{ª“8*úês¢i#ÁV'skx‡Kiá±W‹mÎb|E mÊ«ÛQ·?öƒÏÈ­‘ ™k÷«ç¹kû¹àÊ·†Ë˜ì 4Ô÷~Z´¸›º±ºz¨cÙÉEˆT«÷9¸6ÂKe8‡f˜+°ª=Ä TÅ+·Æ›¼È»¼aÉÒ¼Ðkªs²:ð‰º½kš)6>Òš6.v¼ÜʼÞ¾ÊÛ¼gI1Ó#…0\ÀîûC|}3H‡ ºwËÃ!1ƒºÄékr‘‰Âk'q«šû°i¶Îi½okXOlQÜÄbû·éiÅTü ªÄ:Ëšl·b)»Wj \Æ ¶Fû[\§iy\+Ç;ÇÎxÆ\\Å>ëÆiì¶€ì™y<ÈuÌÄ~ú 0{ÅÅ*ÄR¼Ä|œÈoìÀkÌðÆ#«ÇFúÇh«È—Ü´´èÉœü’üÉ›,7ÛÇ+É4³ptŒŠ@';° Architecture - Core Objects and Managers

    W3C libwww Architecture

    Core Classes and APIs

    The Library Core contains a set of objects central to the Library. Each of the core modules as explained in section "Control and Data Flow"are relying on one or more of these objects. This section describes the relationship between the core modules, the core objects and the relationship between the core objects themselves.

    The figure below is very similar to the one in section "Control and Data Flow", but it also introduces the core objects associated.

    Structures

    R HTRequest
    The HTRequest object contains information necessary to handle a request issued by the application. It contains information about the method to be used (for example "GET" and "PUT"), user preferences (language, content type etc.) specific for this request, where the output of the data object should go etc. A HTRequest object exists until the request reaches a final state, either success or failure, after which it can be discarded. Normally, a HTRequest object is created by the application, but the Library is capable of creating them on its own under certain circumstances. An example is when the Library creates a "Post Web" as explained in section "Building a POST Web, an API for PUT and POST".
    A HTAnchor
    HTAnchor objects represent any document which may be the source or destination of hypertext links. The HTAnchor object contains all information about the object, whether it has been loaded, metainformation like language, media type etc., and any relations to other objects. The Library defines two anchor classes: a parent anchor and a child anchor. The former contains information about whole data objects and the latter contains about subparts of a data object. The HTAnchor object is a generic superclass of both parent anchors and child anchors. Section "Anchor Objects" describes anchors and their relations in more detail.
    N HTNet
    The HTNet is a network object which contains all information required to read and write from the network. It contains the current socket descriptor (or ANSI C file descriptor) used for reading and writing, which input buffer to use and where to put the data once they are read. It also contains timing information on how long it takes to connect to a remote host and how many times it has tried to connect. This information is used by the DNS Cache in order to optimize access on multi homed hosts. The HTNet object is also a key element in the libwww thread model where it is used to identify a "thread". The libwww thread model is explained in "Description of libwww Threads".
    E HTError
    The HTError object contains information about errors occured along the way when a request is handled by the Library. Errors can be nested and the object is independent of the natural langue used to pass information to the User. The definition of the messages may be handled by the application - or it can ignore it all together.
    S HTStream
    The stream object accepts sequences of characters. It is a destination of data which can be thought of much like an output stream in C++ or an ANSI C-file stream for writing data to a disk or another peripheral device. The broad definition makes streams very flexible and they are used as the main method to transport data from the application to the network and vise versa. The Library defines two stream classes: A generic stream class and a specialized stream class for structured data using SGML lexical tokens. The contents of the two classes is described in detail in section "Streams Objects".

    The following figure illustrates the relations between the core objects themselves.

    Structures

    1. When an application issues a request the access manager binds the anchor corresponding to a URL together with a request object. The binding exists until the request reaches a final state after which the application can discard the request object. Normally the anchor object stays in memory during the whole life time of the application as the set of anchors represent the part of the Web that the application has been in touch with including metainformation etc.
    2. The application can make a binding between the request object and the desired destination for the data when it arrives, typically from the network. The request object is by default bound to a presentation stream which presents a hypertext object to the user on the screen, but it can also be written to a file, represented as source text etc.
    3. If the file cache is enabled a cache object is created and linked to the anchor object by the cache manager so that the access manager on any future requests can use the cached version (if not stale). As mentioned, the cache manager is yet to be fully designed, and the current approach may change.
    4. If the data object is not found in the cache or in memory the protocol manager is called by the access manager. The protocol manager then executes a specific protocol module which creates a HTNet object and binds it to the request object. The HTNet object is maintained uniquely by the protocol module and is removed by the protocol module as soon as the communication with the remote server reaches a final state.
    5. The request object also has a link to any error information related to it. At the end of the request this information is handled by the error manager and an error message may be generated and passed to the user.
    6. When data starts arriving, typically from the network, it is directed down the stream chain which can either already exist or is created as data arrives (stream chains are described in the section "Stream Objects". In the case where the application is transmitting a data object to a remote server, there are two steam chains directed in opposite directions: one from the application to the network and one from the network to the application.
    7. The end of the stream chain is the stream that the user may have defined when the request first was issued or it can be the default destination which is presenting the information on the screen. Between the first and the last stream in the stream chain there can be any number of other stream objects performing operations either directly on the data, or on the stream flow itself. A T-stream is an example of the latter where the stream flow is divided into two.
    8. The application receives the data arriving from the network via the "HText" object (or any of the other stream interfaces as explained in section The HTML Parser in the User's Guide).


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: DataStructures.html,v 1.21 2025/12/09 03:20:45 jigsaw Exp $

    libwww/Library/User/Architecture/Delta.gif0100644000076400001440000000007506167010427020242 0ustar danielusersGIF89a ðÿÿÿ!ù, „©k½L2‚y&¾™öâØ;libwww/Library/User/Architecture/Design.gif0100644000076400001440000001273306063177347020440 0ustar danielusersGIF89aóÊòÿÿÿÿÿÿÿ!ù,óÊþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn7ð¸<àŠãäüÈ®á»ÿ€sƒp,~5s‰{…}‘„„+‡4‹“z"—’ €Ÿ›[™¦ Ÿª¡­jª¤Yƒš±¬·®ºd¬°µ ¨ z‡|Á³§ÇÇÂÄ ËÏ»Óf½—”tДoϕŅ•ÉܱØÊ‰×ÛÚÙÔí¼ÒäëêØÝõötóžàÒvßæ€á“®;w¿ÜxÐ)€ï=Üô W¿ƒô.Ê‹ØþÐáÄ|ëŠô²P"¹FÓåO3nXë¬ÛäãŸßßÂ/þèÏ™¶ˆqðåAÓwWý÷W4êñçà+Ü=(á„1l!…fˆCvè¡%Ö}(∩ìCâ‰("%TŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ› çœtÖY'œxj`çž|î™çŸø¹ €Âi' ‡ºæ)0ªh™Ž®é£^NÚ‚¥”bI§ ›fše§8€êé”súPê¨Ržjªœ¨B©ê¯¶šd¬°²*묶Aë­Aæz„¯¼¹ëÛc±Äþkì±Ê"ì²26›„´ÐFK€ÔVë⳿f«mŠÞN{í·ÖŽ‹m¸ä~ˆ®¸é¾È­ï¶‹áºðš+ï‰ô²{/¾öZ‘ï¾çý«/Àêö[…Àó†ðÀ Ïkpwê¶xë5(Á ¶.€ÍMìWˆ`œñZGl²š$òÃ#ïW2Ä0[”²2ˆÜòT/ÏL³Ì;sS3Ë7K—sÏ>ó\ôÑ+-aÉ „2Ñ] ´Ò O=^~N}5tØLuBC#­ÍÓõ­×_»öØ:Ç,vh§MÍÚYCmwF"Ä-÷.t7ãößu ÷Þ®ôwÛˆûÂà„‡b8Çd³ ãþKòøÉZîå•GÂùŸw§ÕO„.ú¦‡Júé<¥^ƒë¬³û ³ÇžF¼ÎÖn;º»Ðûîfà^„ðÀ#ô» ÇOñA0¯|;É›ýócLŸ÷êÔïä<èÖgÆöªcï½öÝëYþøß‹Ï=úæƒûì;Ûü—ž/û™}æÿºýò/Fþ}ÒY5@õ]Ï€/ ß4 ص’*Q?ÃT£ü×@‚ ”’0(8 JO‹!(8¸9þÈ„áD%jÌ…#@!³Tx6~†áHt89âȇÈÃaÿ„8D bˆ4≘C&6€‡€"Øœ¸B*¶ÏþŠMœ KˆÄÖa‘]—ÿ¾¨ fp‹/´`Õ˜!2ž‘p+ ‡w0#ºQ-w|ãþäFÚñ1!„£¤”8BB–Ñ €VÀ êoxˆäé;D@‘:0ãʤØBKV°E’"1É)NJ­0¥ù(Y5V¦Ò¤ô#M™Dq¹²2ªŒã-MËWb‘–%Èe=tj!_þøt WP‘”3êó ÁŒdê*5 ŸÚ ÖNYPŒÆÐ“³äh ÚŠÔ(K OH¶S¥]š_zšž]¨†4å'K3ZNœõA{©…°c105ûåS‰šÑ,õœŒ(SÑÒTsö ªtæà®zTþ$u Q\OãÔ–n—d•æT0ž²­:š3ßWM:L¬^o qeÂÂ$Óéհ}åX7‰UVV®fUcˆBÚž®zU±|ýÙІ®uR¬<ß`«Ëà8ÒÒn§ƒm•êf½ÖYÌ}–5’Óëh;W ,ö²çr«]¼‰Ø&¶šíCk[Û®´Ž‚þl-o9V˜&6`Ämhjƒ[GÔî6q½åÈ9:"ZèÒö¢Ï¥‚Í”‹]ÈÁÔ¹3õîw§›´#²‘iX®ÓÎËÝð -º¯¯l¯ ²Ö6-»~£¯|³‰_5Ò‰^‚à‡· SœÍ}Ü-1µ,þ¨S¸Ú’›|\áw^6]dMc˜§y—½ó7¼„ä¨ots ¨yhKW+arßó U¿ÏQìuËÜÐÈ`xooîôŠ19nd­4ªoë²!éîå§¾ Vò _ÙçÀ;áªÒ°Ë®{Ìh7àõŪõrüè$ïTÊ¿›Åþ*ª6 :cržÐgG;¯kª+¹/ØòŠwÂÆQïp|~¯§«FYyÌGÝõ³çc_ÜÐò\,ݽéÓÙOÚ3¾Ñ~Uf­Œï¸1¶Ð¿ëTaÎûæ—oœC€~ÆÁ^[ì#´ú… ¥÷³ï{Ø3_Ü•ŒÞøùµLðCµüÑü þ¹~.žÿ‚¿¤“A¯ ýøw+ºûçHCL0B€•—+Hý祀Éd€Uä~^TG+ ( È€Ís<(hèH2h@ÔOÈHów[š”E¸#ÔH½ä×zè€åƒ¤):¸&Ø(˜‚9H?¸IT-E¨A(„%I¸;K¸QH}…_c…8`…/HO8?‰DƒŸ¦K¶…ð„Ïc†fwRí—è‘•, HK|ò騒ŒÇ‘«Ò-7(BÂ')‘,¹*ùn5I‘z6„õh~ëø~9Ù)”|x“Õþ¸öÓ“·ø4I”exŒF93>HÙ=JI‚[0•Ç—QsNI• Ù„{”•]¹5Y– •êÈ”íFWùFl¹•‰È•_ ”˜—mÙP’÷“Ñ8—'€–fY—k‰—çK˧€©Š€ù…‚¹–··P7˜j)•¹˜“™Oâ5€çgz— ‘•Ù˜” š˜ù˜ßç’XЙiù‰¹˜N6z¥™;’•§ˆ–¨¹?ƒ7AU›¢Ù‘Y–µi›™‡{qÉ—¡É‰Ï¨¿é–„Yv$VËYœ¦¨ÉyI¬Y?VUN0|µù‡²YÖ™wzÇ}ˆ ’ܹ›6éâôœÌÉE5ž»‡þ79À™vV†¸wR¤Yù†Û‰žße‰ç÷g™I–4ÀŸæ)Ÿ£¹ŒfŸ¯)râi €8ä韕t]w#  uÁ)¡Æˆ…© Žùb\Wt>f‹ÁYê¹mü'Vx™":¢sÆc‡QY[ 3¡ÉG–‚ù¢ £2za|Æv…eg?oO皺ù¡ñ؈?G¢ò–pèFv¦kùÙ¢_飼hžýh5LfÜ1¥]wl#·w]0•QhŽ@Ê“Pªuá¦Ê6iHj¥ê3¹„jj¡ÊÉc1#¦™cmφ|ð3¦eªŸÚˆ§Yª§{ ¥lrþvWë†~‚ªæP¨†:þn\ ‘ŠZˆŒÚ¨|j'ª‘ºgvçbƒªsý† ¨j§ÎØ©ûø© úá"%¥R¥­ª¡ c:§«®š“(˜¨²:«4Ú\C§h67f•ª©â ª­:z¦PéˆCÉ¥¦y›IÊ«Ž*­Ûj’gi­ÂZ¬ ª¤»ú¬4'_76§c@‹Ã®Ø ›àÉ¡`¨&:RΚ‘ŸI“îH®ª£­ßª"¦E øš¯àº¯OI—ñZ/K¯©š® ê° 9›`¨˜þʦ°È­MF gp H± Kræz¨mJg¸™íØ"ëp`p'H¶ª§èhˆ’¸¦D`PXƒ(³›¡þ«²ð å9²fdz¤DœrˆŸ0³Þº¡Dû‹ÚW´HJûƒqgM¦7|B ¢ågµµ,øœ”Óµ+ú—ZzzµR˜µz–ØÙ°¹¶}¹‘n‰dë‰UySiË®@Œ…æ£yë‹J;´ÙZ³%[·Y{EY¸/@¶¹yÿTi^ëEé¸_ ¹È¸·f®³p±Åøµšû‘œ‹p{”¥÷Ÿçâ¹nðŠÉ4„:«¶«ÛI¬'O‹€’[·`8Â;¼Ä[¼Ä»¹› »bI‘sÅ´(¹©¹jf¼Ô Ôk¼+©›‡;?ÎG\[;ƒ¹Û®Qu½@¾VGº^¹½/É“þÉcT½âËWØ+ó›šÑ»’êkSƒ¹¼¶„’¿{° P¼) ÀÿÛ·à(LÖ¨BìžÇë|»à˳=7} åP¡¿XðÀ1@¼þÚÀȵŒUG¹žª¼P0¼7€ÂiÂÃŒ{˜²d¸ù«l5œa3|—1 ‚oùW­Ë‰á[*¼Cü¶A|”X’À™{ÅÂ=PÄD,¼9·r˽ƧÁ<Å[,Å2,ÁHÕ½I@Å3àÅC`Æ-àÄTÒÃF˜Šj¼h|Æ´Û¯G,@Öã¼çùÆ%ÇDÀÇx›Ã_ÂÆE¤½€L¿sœ~ü”uL&‚,‡;ÁèÈÅBœÈ ·þÈiòÂKùÈŠlÉ ÉFàÉžYÈo²Ã$x¹ø+Ê@ÉŸ|ÈéKÁ£¢Ä×ÔÈL Å ÊGàÇdÜ*Ï‘@ËlË«<ǹ -”¸Z Ì·<œì…±›µÈŒÂ{¿ÌL~ÏœÌÓ,Õ Í¬|ÍÓÍÖÌÍíàÍ« ÎÔ ÎßLή`ÎãŒÎé¼ÍT Îì<ð¼Îñ ó\°6ìÎõìðìw50ÏûÜêœh]Ð`ÎZ–ÂúlÐj€ÐhUsE#1Ð â µ6ÚøL]ÑWpÑAKtCú«ÐÑ] v>¥v¦z&}ÒSÒ½ê¦ÍÆ/ ÓQ Ó3Cv}†£µþ¼Ð8-Ï@-}:©u7ÑCÔ`àÐ:ÃÓ, bœÔJíÝ÷æqO7=ÕLPÕ¹Reó¥ °Õ\MÃRM«=6©eÖd]Öˆ|Ö] ×nmÑrmÖsmm­y}×ôüÎuÍ×V°×ù Øe Øÿüׄí×(؉ÓŒ-†ÝØýØ?Ù’ ¬Í”}Ù'¼ÙQÌÙxíÙ8`٠٤}™]Ú\Ú@ÀÚª½§M±ýÚ­-ÚlÛ´ÝÙçœÛg0Û6Û¼Ó¾íÒÃܦ ܲ]ÜÆ}ÜO¬ÜË}ÜÈÍÖ®ýÜBÝ0ÝÔM7 ÁØÝ…ÝÝHíÜÞýÖà­ÕÛ=Þþ’P¿  Þè­ æ›ïÝÞq½ô]ßò õMß÷­‰Ò¼ß®êß‚¾®€ý=àãià"à.“¾àV à>‹Îßn^ácÜàÎàÞÞáiâ©ñá".$^âxˆâ€qâ*¾W-¾âÖýâbßñ-ãüLãÖ‹ã6Ž5n=¾ã«MÀ!ÀÞ@¾ÁçmÈå]äÁãpäJ¾N®Qþä“ÌäÄmåT.åInSžå]Œåå+Þ^Õ`þÛe>æÒ}æfŽæ> æQÍæŸÝ×pNnnÞs~ØP®æwÎ[®Ðz¾ç}>Úu^äƒþÛ{Þ….݇®å>À‰®â®þè‹ÎåΑâ—.é“nÈ]é„îé–ê;žé@ênê¥.ê/Žêš¾é­¾Ø®žê°­ê(îÇ -©^&Ö>Në%nëhå\DšÕCÎë"îë‘öÐË鱿&ì·ŽÚÄŽéú¬T·p(ÁnØžÊÑÞáÆÞÔÎ@Ó’á¦ãàϬàÝN4ÀŽiN§¥öåîßçŽ4éÎtŠëĽìÌž¡Óî÷V>ãø~ÝÓþëõì’ÊUúîûïCjï\VðÐÊ ß Ÿsÿ¨€ªpH6ñòÈÒïê~Õç†q|¾íîñ]÷í¯h)×òÃñí­Êøzí+¦ÌZ6ó1µoò{Ìó'ïó# ó;O×oè ô?ßéEoô°¾ôùîØNÏôR ôðŽôOõoõæ­õÒ.ÜXÔO@õè~þõë ódoö €ö\/ã/öþîpŸô}ÜöJžöŽn÷OŽ÷”®÷TÎ÷A?÷-Þåˆøj¿ë´nø‡åžNø‹Ž?ì‚?æBÞ÷“çDžæŠÿøŸù]½œ_÷4>ú¡×£ù¥Ÿúª¿ú¬ßú®ÿú°/ ;libwww/Library/User/Architecture/DesignModel.html0100644000076400001440000001216106252702620021577 0ustar danielusers Basic Design Model

    W3C libwww Architecture

    Basic Design Model

    The main criteria behind the design of libwww was to make it easily extensible as new Internet standards evolve for transportation and representation of data objects. The philosophy was to make it possible to dynamically "plug-in" new modules without touching the inner parts of the Library. On platforms that support dynamic linking this can be used to change the functionality of an application completely at runtime and eventually the Library can be extended to support some of the new concepts of mobile code where new modules can be down loaded from the network at runtime as they are needed in the application. The result of this concept was a Library architecture consisting of 5 main parts as illustrated in the figure below:

    Design

    The figure is similar to a protocol stack where the lower layers provide a set of services to the upper layers. This is also the case in the Library where the "layering" is as follows:

    Generic Utilities
    The Library provides a large set of generic utility modules such as container classes, string utilities, network utilities etc. They have the important function to separate the upper layer code from platform specific implementations using a large set of macros that makes the Library more portable. The modules are used throughout the Library itself and can easily be employed in many applications.
    Core
    This part is the fundamental part of the Library. The size of the core is deliberately kept small and it is important to note that it can do nothing on its own; all the functionality for accessing the network, parsing data objects, handling user interaction, logging etc. is part of the upper modules in the figure. The core provides a standard interface to the application program for requesting a service but most often the handling of the request itself takes place outside the core.
    Stream Modules
    All data is transported back and forth from the application to the network and vice verse using streams. Streams are objects that accept blocks of characters, pretty much as ANSI C FILE streams accept blocks of characters. A block can be as small as one character but large blocks are normally preferred for better performance. Often, even though not required, a stream has an output to which it directs outgoing data. An example of a stream with no output is a stream that acts like a black hole - it absorbs data without ever sending it out again. However, the typical situation for a stream is to have an output and to perform some kind of data conversion on the incoming data before it is redirected to the output.
    Access Modules
    The Access modules are protocol specific modules that makes the application capable of communicating with a wide range of Internet services. The Library comes with a wide set of protocol access modules such as HTTP, FTP, Gopher, WAIS, NNTP, Telnet, rlogin, TN3270, and the local file system, but new ones can easily be added to the list.
    Application Modules
    The application modules are often specific for client applications including functions that require user interaction, management of history lists, call back functions, logging etc. The reference implementation of these modules are often intended for character based applications like the Line Mode Browser. More advanced clients can override them, that is, a module with an identical interface is provided by the application, and the loading of the default module suppressed.

    When writing an application most of the code interacting with the Library will consist of access modules, stream modules, and application modules. These modules can either provide additional functionality or override existing functionality in the Library in order to make use of more platform dependent implementations. The latter will typically be the case with the application modules which must be adjusted to a given graphic platform.

    The User's Guide explains more on how to set up and use the Access modules and the Stream modules in an application and how to use the application modules. The rest of this document on the architecture of libwww is devoted to describing the Core.


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: DesignModel.html,v 1.15 2025/12/09 03:20:48 jigsaw Exp $
    libwww/Library/User/Architecture/E.gif0100644000076400001440000000025305774674262017413 0ustar danielusersGIF89a&&ñÿÿÿÿÿ!ù,&&|”©Ë휴ÚkÞüêr_HVc‰ž(©®`ëŠGÔö]w0…÷>ãäb€Ýd3J.%€¹rBSÁÍ´$õÙ^UŒv 4Ð~Ä,±Ø½\YiË:d.·+o®XHNÎyß:únÕ—‡át&Qhˆx¦(h¸Á¨çøèay‰™¹P;libwww/Library/User/Architecture/Equation.gif0100644000076400001440000000152706167010430020773 0ustar danielusersGIF89a³Cðÿÿÿ!ù,³Cþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹5ÀøŒNËÌê¶û-bÃçôºDnÏëíø½ÿÖ§PfFh`ˆ ˜ hÑLjñ艇xÙ€HXV±™x ö)G¹ñù@ÙùqZŠy  ûzÈ:Û ê&j xZËÐòËK 1¼›AzÈ9ˆû¦»Ì[è(yÝܸ [|׽Ȧ٫j(¾ÝY‰< L^©I\›ÉíìÝm þÍ» xl[¿_…\IÛ/\¾] ~;÷Oa:ZÑ&V\ÖÐþ_ñ"Ô ›?oKö[øoÚ ‚‰Úçž$–ÅØå“éN㎃µô¸f¶‘´„J˜r(#›;þ|ˆ2©C™ÔœÖ|©²*EMAz‘èS©cIž¬ÅôÖÒY I¥‰Š-Ö°'µÚåÊÄ×W¸VMfͰ'TSbß¾’8êmªueWb¬FÑ¢]–”ñÞ#ìWЫóºõoPªž©Õ30iGêè]*‡ú\5wªeÿ‘g[¬%ÝŽu)Ë„oË|ó¦ð¹î†ádï>Áœø¦H=øâu‡èƤ{§¶êéIÍ{{?ŸË%Qá gG_àê‡M’oïɨóøüþ»ÌožQQ¤Gú·×H6Æà$æ`v`„W¨ÆÙEô•§\2nX…aÆÕµÔ€ÜaÈa‰YŒÜ*Æ$7`;³u\†?œfb‡ÂðZ‚vwH)bC‰ßvq}(ãQ*q„‘Bž§’LF5d îðN~0>ib”=&Ø™bŽù؃MfRÉe„^òÓâY]·™<•˜g4¦ßšká÷Ÿ‚%9Yœ’áÉ¡ž$¶ZY &YœâÚ%*_¹b¢ÆÑäWä d%£r%J–w†Y!šžÒkv~z  ÖAÈj¬B¸j$²Þ ­æýˆk¯:Œêk°ÂKl±Æ‹1l²Ê.Ël³Î> m´ÒNKmµÖ^‹m¶ÚnËm·Þ~ n¸âŽKn¹æž‹nºê®Ë®¬;libwww/Library/User/Architecture/Events.html0100644000076400001440000001145606742604104020661 0ustar danielusers Threads and Event Loops

    W3C libwww Architecture

    Threads and Event Loops

    Libwww is not posix thread safe but it uses a 'pseudo-thread' model based on non-blocking sockets and interleaved IO. The Event class defines any event manager to be used by libwww for handling events. Work has been going on in making libwww posix thread safe but the results have always been that we loose a lot of performance.

    There is no default event loop registered by libwww, but there is a sample implementation using pseudo threads (non-blocking sockets and interlaced I/O). This can be replaced with another eventloop if you like. If you are using the libwww pseudo threads on Unix then an event is when the select() system call returns a notification on a socket descriptor, but it may as well be an asynchronous event from the windows manager etc. If your application is not using anything but traditional blocking sockets then you do not need an event manager at all. In that case, libwww will block on any socket or system call until the process can proceed.

    The libwww event manager interface is very simple as it consists of registering a socket descriptor, the location in the program, and the current state when an operation (for example read) would block. When the event manager at a later point in time gets a notification that the socket has become ready, it can then call libwww with the state saved from the registration and libwww can continue.

    Second, libwww must be able to unregister a socket when it is not anymore in a state where it can block. Only in case the application wishes to use non-blocking sockets it should register methods for handling the registration process as described below.

    Providing Call Back Functions

    Libwww normally handles the creation and termination of its internal threads without any interaction required by the application. The thread model is based on call back functions of which at least one user event handler and a event terminator must must be supplied by the application. However, the application is free to register as many additional user event handlers as it wants.

    Callback

    User Event Handlers
    An application can register a set of user event handlers to handle events on sockets defined by the application to contain actions taken by the user. This can for example be interrupting a request, start a new request, or scroll a page. However, this requires that the actual window manager supports redirection of event on sockets.
    Request Termination
    When a request is finished, the set of registered filters are called to update whatever needs to be done, for example updating the history list etc.
    Timeout Handler
    When using pseudo threads, the select() function in libwww event loop is blocking even though the sockets are non-blocking. This means that if no actions are pending on any of the registered sockets then the application will block in the select() call. However, in order to avoid sockets hanging around forever, a timeout is provided so that hanging threads can be terminated.

    Returning from a Call Back Function

    Often an event handler needs to return information about a change of state as a result of an action executed by the handler, for example if a new request is issued, a ongoing request is interrupted, the application is to terminated etc. This information can be handed back to libwww using the return values of the call back function.

    A requst can be be terminated prematurely by either a timeout or an abort of the operation. Both cases can be handled by libwww and be adjusted to the desire of the user and or application.


    Henrik Frystyk Nielsen,
    @(#) $Id: Events.html,v 1.14 2025/07/13 09:35:00 frystyk Exp $
    libwww/Library/User/Architecture/Filters.html0100644000076400001440000000454206275657003021032 0ustar danielusers Before and After Filters

    W3C libwww Architecture

    Before and After Filters

    Filters are called before a request is to be issued to the Network, and after when the request has terminated.  All filters are registered at run-time, and filters can be cascaded so that one filter can call other filters and so on. Filters can also start new requests or terminate existing requests, so the set of possibilities is very big. Normally, filters do only handle metainformation about a resource. For example, the authentication filters looks to see if we have been asked to provide some credentials in order to access a URL. If so then it adds a protocol defined header to the request, and if not then the request just proceeds. Handling the actual data object is done by streams which can  modify the contents of a data object.

    The Library can handle local and global filters - local filters are associated with a single request and global filters are associated with all requests. That is, if you can decorate a request with a specialized filter or you can use a generalized filter for handling all requests. A global filter is useful if the filter is to be performed very often and local filters can either add to or override the global set of filters.

    Often, a before and an after filter needs to share a context which is unique to this set of filters. There are various ways this can be handled by the Library. Either a context can associated at registration time or it can be built while the filters are run. The URL tree is a useful data object for keeping information associated with realms or sets of URLs.


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Filters.html,v 1.3 2025/02/04 16:04:19 frystyk Exp $
    libwww/Library/User/Architecture/H.gif0100644000076400001440000000027605774674271017423 0ustar danielusersGIF89a&&ñÿÿÿÿÿ!ù,&&”©Ë휴ÚkÞüêr_HVc‰ž(©®`늴½ÁS}ËF¿áåfAFˆÑIf†x46¥Ï_˜„N±­¥‹}‚›øL5y+Nvš¢´)óI¼¾|Û×t}žÌõåp7ˆGÈ·c8X¨få—ÓYÙ‡¹w¹™ÕéYU:JÊ ‘ªºÊšP;libwww/Library/User/Architecture/HTTP.gif0100644000076400001440000001333205774674272020011 0ustar danielusersGIF89a Éñÿÿÿþ!ù, Éþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹Çä²ùŒN«×ì¶û Ëçt[àŽÏî¾ÂŸ°'ˆG(˜8˜¤¸âÇi1‰PY‡yQhpIáɸyX8ú¸°ÙØÙèù™Ê‚jéÚÀ:+»h;ÁJ›É›k»›ˆ{¹;,ËykÌø®=ï!®š _._»;ž®ìݤP¥¸QÓSŽÚ3IšBøÏ ;ˆ¥Þ-”†ñ BþzrÄ=4察E~·‰dHHà1>ÞSYlÐF!_®t…(¢N›‘HIs˜ò#EŽ Ž(ÑgM}Èr–|éÅžäRb¼:kSpV¯R]§LsY¿¾´J­X¢tì©{OÔS”[7jeðmY€yƒ¥‹ ÷¬×µ%¥Æì:7#Ù£„ÙÆq«ØiV¸Ä¸»è^†%W³ûo²SªžëÛwiTÂrÜšibÄ'ïr†º8ßæÐXižugö÷ÄÉtW/ŒØ8c×™`/W50qÛtŸ*¼æº~wöN²Óžå§_7ͼŽó©–)ŸëŸÞ›É‡sîöp5ïÁþéÏ…˜WÏ¡'•`ñ¤÷Åzµ7]eµÅ7~9(˜@ õÌL­]h iRY‡šÍטR®¡à(Õ¹݃¸iTˆ Zèa-cq¦!&[oÝ“h¹íˆá‰F‰d’J.Éd“N> e”RNIe•V^‰e–ZnÉe—^~ f˜bŽIf™fž‰fšj®Éf›n¾ gœrÎIgvÞ‰gžzîÉgŸ~þ (Ѝ Jh¡†Š(¢.ÚÂ_Z8Êh¤@Š¥’^J‰–bÊi›Vñi§¢ž¢é¨¦f꩞:êªQ¸Ê*§°>1k¬’ÖÚ®¶.ªë½îú篎K,©e[þ¬žÈ±l²w6[´ÎÒ)íÕNçµAh‹­›È å €Ð,ÒL·Ä~kÉxƪkŸº!pkîšèŽ+Þ’ŒËN¹ñÚ:/»ë’;^¾"À»/šßØ…õֻоŸÚ/ÃÿJì®L?ÜêÅ Û›îÂùFŒq§o̱¿îR·Á!yðM‰{ò ¨¼r˜4ïpsÍ^æœÏ:oéó AÿŒåÐ5Mt•HϰtÒR6ÔN?)õ UOÍäÕbͨ֯pÍk©`ê5$c“-öÙ}–­Ûj»æ6 q¿MÔÜ&ØM÷J\Fc6A_¸/ ,`5ñ ’áƒÉšÕ„¦"p´—ÅÌÑ0œ”À©!jìÁZ £c2” ÉdVkà…d@’à»z¸Ã’‘€ Ôá¿~(°tõƒ ôTþÂ*†/%P`I˜E˜?\u‘bX$×—XÅD¬+Šó"þ¸8±˜5‹„À£C\6¾,ˆú+—8G“°3ndâÿĸFž1`>´ ý¨H@Î0‹h#ùxHLvÌde”â&uå¨ ùZa-)ÇIfR“”Ù¡HET¹ G‰£+ïæÁe\‘“@„/'5KUÒkœð!åGÇ”1{`ƒ5˜9¼döÁtÉßÿP<áuNš²@6¡ÉÊ04â›Û;žA‚D%Â)ü9ß Ïx/•ðå/×Éαì’}4œ…<ÿ Ѐ t -¨AZÐvÀm$c+þ§(¬T3~nŒ"ØÎ'Ñ¢zÏ&ê&mîo¡÷‚cEOfÑpzœ$5`)_8LQ±ýü…xRZH«`OzK¨¦ñ°*kBÂÐOz1£´Yêœ&K¿Ê2Ÿ*i%jL5…©½´¡Šh{ÛÚ6ÖN¨M­3­ÖÁ¾· 4ã&ŒþˆÞú6A0@îVñ¤Ü\‰³¹Ã=-œލUW²iÀndSàÝB·»Ä¥àv£ª†ð~‘«cP¯¢û×Jͽ¯ @e‡ó ¾#}Òè =ñw ÙV{Mû>&} >T á™…#0`/dØTÃ…!ðáltXT#Ö0ìÊÙ€÷¢Äœb1XŠM+Æ•q\|)kÆ:µqŒ[Çã8è8RC¾ÂN—ä$ûxE^T“«päDYÊKîñ“¡på?eY Õ¤2»<ã)ßl[Æ2˜üe1×8Èo(3ŸÜì„l"YÍV^ò™ÇŒ#× ÎXưŸA<þÑ‘ÀDáóTœâ?‹8Ž—M–¡ã¬hÑEšŸK,¡Ùòè& z™“ÎD¥õxéBW¸ÓR&5ž Ô=Ь~@¦ði½jvT¯^¦KÝê˳oU­•pë›ZÈwæ§i9¼jW›+.vÍ~„`›nÙppöÊ i3;ט ó³“-insºÙU¶aMm¦»Í寨¹ í®Û l~Ø»‹ou‹[×dw¢÷-lmÜ›§˜^w¾«Ýï‚|Ú 7°„þpû{ÜÊn8BýÝýN×ï8³ôû¦áà0È .j‹ëÛãFÀx)é$r!|Þíxo¹03bË^Wýêºß¶èå=¬Ñ³Kó¡X¡Ó‰?xµO¾÷Ñ2:›°þɾú †þçy¿ûé Áçëõ|Ô]b„ªýX¸òÙÖ±þßÖDÓxô©/}U6Õ„…»žaËz‡~Và~<ÄhžYè}ç·tØWÇe€/…€=R~!dvß'~Ƈ_Ç¥B¤4V8%§cOÝØ쨊î(%ÈxЬB¸˜‰QkÂ(ôÖˆ”†ŽFòYùžV'rË\R°¿¨‰àÈŠ³v&½R‘ÆxˆMò¥‘e²C^× Ó‘’ø‘HòMƒ%wmRxQ™¨Ž7PrYlå˜á{e$ )i‡“˜ŽÖÆ']þôG@”T(”CYoxb”‘„”ÉKÇ’M锉ä“1X“6p“8ÙnÊÒ“S¡•íH‰Ub•Å’”{H•U¹•W’–¹–Cù3o9•KÉ’s)•ÝÖ°ˆ— ©—qI€(˜èc~ö”+ù`Z%^ièbqy:0˜‘I>˜8Ð+Ýè5'‰R™é‡Z¸—GÓu"ùuÂçZÓP)Å™–˜mŸù>l—x·7]5×I°Ù3‡¬É4a¹XQX^8•ºerª‰n•)4X™x¦Wš5–#©] o¸i^ˆ·›Ø›ù›ÌI]ΉoÐÙœ¤wœª·eã˜È™_ÚI]Ù3˹y¼É;©|þhkÜ)]wƒG2¹ Ðâž—œ”i—mø{­˜Gع'ryòGLbµ­e[*´[À&ŸáSv§‚æ8‚"cí %k®5„·$|t„žx80´yšÔ9|ºkM¥‚¨œZÁGž&zž–5úŒ×â!˜öc£=꣕XŽ…ƒ¸•‚—ÄPÉ`üùf3¤%zxR³—y±OÀY¤G:õ„ šÖÊ»‰£Qwg|W{weYåX~ñ˜êmIyc¦]¦‘·ddú¥³H­h¤õ¡‡Ö¥ô™£,X¤¸‡ ŠgŸ¶gYÞ9¡wê¢|m:†…XaÅ|“ª —þ!P˜q3:˜™$žª¤¯a›˜ª\Ú©¨ÒŽùJ ZLi„GRªLà¦^ú€B*„ˆYl£u㥥´I¨zª:(¤WÕ¡[: ’Ê7¡à©Zñ9¬4§Œ„ ð¬ÊÚw9˜§O*«ŠõYƒ7è"HT°J{Dø’Õ¢ÞZ«)hRš«ÉšËâwŽGúùœÑ „ªX¸Ú¬2Z_FB¯„„[-úžZ?Ú£H­ÿšYcDš¹ °6*›GW©T°+¬$Ж »|YŘ .Κ¤~ê›+’«²¿­;‡±i²v¹¥­ºúªÝš°/ Òôk±Ú²#б£þz›'© ´:Ë\}F´Œ‰³.;ˆE‹°2kž#gÂ.òW!ÏŸM[›S+sU+…;Š2Jå¤7Ûµ?k™B›#&Ud;Œpk)>» ã©0·q·V–R µÃé´­pE¨™/°iûªùx¥Œw¶}›¯û€¨ÙG\ô)t[EfûH’‹˜æ¸Û™³â%·xuŠ©b¹íª¸%ËFѳl‹n;¶4T˜KºB n‹Z„« ¶I'¶­`·{’I¼“¬˜{€›=[¼Íë`¡8`ph§¸ûE`ÚŸÝâºÜšÔ‹BZëJß¼Œën½K–ú¹I³½þç‹´0«ëh¾õø—S³¾ò{jÀ¿ü—ô›¿¼)”µwk³È5õ[†È[ZP™ºªO„rC–SÀýë‘Æ²w“S‹®rg¼Ñ¹(Á*)¶ZýJ¬¼ª¢…ÂÈÇ¿Ÿ[wµ»¸fÕ.L¸'¸)õ¾ZbÀþk§®j¶®ê{TQB¤~io|˜×›±(̬›5ü‰SCqÃY’ÃLv[›®ìD²xús;¨?Á,l¿‹¹vÀ›Á)\F)J4S Â:Æ9H¸&Q1“@”E Æú«kg‰-j|Äçmå[ÇþKnQì–F¬”b*ÈV¢Ç…L§‡l–„¬–…ö•û’È,þ¦_œ¾€¬ÈiìÈûkÇt|ÉT¼Æ}ùÉ¡|A«ùÇ ¬Ϋʉ ÀÈ.´»û‡›\—ËÅ´—8Ê{ì+¬ &“ÌÉóÙ¹GGËókˆ«q§LÊ ˜b ³‹x´®Qf¿RºÇœË™Ì^yQÓ9Í!7Ì÷˹ …¸ÀºŸ…(9ÌͺٰZ«ÛªTª·×Ê]Ȭ˜õ›~7Àó“ÎCªÎL\˜ÑkÎLcœö¼Ï$Ðú<ÐRèÌå ÍÂŽE¯+ £ìÉÆñ\Í”l5ê9¸{¹ìÜ|‡ŠŸzÁ ý´†T¦ýÑ­ü¯Ü±üx%mI'MÎþ,Ò”¥1ü¯øŠrÏ̾ã÷žþZ©oŠË:Æ<-ËhÔ7±I}ÔH­Ôθͻ¢ÒŠÓ¾Õ™Çÿ<Ò3“¥õ™¨‹–VMÓˬ•Å@8-Q½,}Láj¥]ÂeíÕÅ<|j xƒ WU=Óp {+A‹Í*-ùIf­h Fr]Hê/€‚×*z{†m.ˆŠ­Ia½ÅÜë,í8SÝY£› Ï]}×À|Ë—ýÖ¢m̪ÚZÔ$VÚª̾ÖÚ»¼Ú‚ÙÝLÔ¯­±Ê¼ìdº|¸}*µ-ÏE7Û-æÛÄ ÜȖڲܴvÜ̲ÊÑíè½Ór Ü9ÝÉÞL;×-Ô˜œ:Ï]Ë·ÃÝ =ÔÎÞþÄ,Þç­Ý±3Þ2]Þµ£Þ}<ííÊËM³k8ñÍd-¸¾£ßÖ¼zJ7ôÒËm¬­¾ÿ-d‘æ¦à'Ax6hÈxœ\gvà÷ìn}ü×sÌdb&ÖlÆþá$nÝjÄ"ž‹&Nl,^m.Ž;No2~á‘=¾0þâ8^&4^ã<ž>Î8BŽŠ6Þâ½cä'^a@ÞãÐÌäA>ßÞfQnßÖ¬3Ò=™8ƒå‚Ó˜[n¼¼òÎ]Þà)æÊ9æd~æ³Tæob\<“æGãæÜäתâ\oεšÍ²›x••˜wòõ á5ç¦íŸ–=è@]èpBhŽÝž„~èÞBÕ\Ýþè(Ëçlž´n…yÞ@ˆÞÌÍôè'ºè޾³–>霞 ¾éuêÁúéò2ÚŸ½êžÞéf¢ŒÒÜÜw>ÎSÜ zë÷ê™ëžé°¾ë²þ뻚A¼Þë$‰#ªÚÑŠ”ªŸ± ½¤×N,ì¾1µÑ®ámíu‹OØÙAü-&/ »…îªÁ HíÈî fl¯Â¸Zî¾Îë¼Ä*ÚHŠàÛ%æn½µEÙäâžD× L½­›JˆTí%‹jH,Zúî*^>ü=­){¬ÙÕßNåQô®F¿Õ÷N×Ì\®õñø~º+Ãd‚¥ùäÑóì…5ð$Üñ¨¾Ñ©–ð"þ¯âŽ*¯N·žn\S;òïëÆiÒê®Do½%Zó®º8ò)þÀäÞÖb¬Ö'ÏÑâŽ@oúÒ‹jÓ^¿×) ì¶nºW¿ðÞ)Î$ßó…‹ö³Y·Êíe¯%þžô)o«4¼îá«ôT¿˜ïk½²U_òö^³¼–«kß÷,oñ¯UÅaNq¦-ó ¶ªºVC<øü\øÞ>[G¥“fŒà\ßõ­Þö±~ú¥®&³Nê•nó®_ô¦ŸúÁÞúÉ®ìµîð©^ûª¿ú²?û£þú¶Oì§Mø¨ßùÆû°où—.é¼Ï&.÷Чîñ‰hêÂ?ý¨êÌOéÖ¿üØßü‘þüÈýÁ_éàþÇnèæŸýÞ¿ýÚ/7€/vþµv"ÿpþÍìÏè¹BúxíÚM`DÁ1u¹ýa4‘V{qÖ›óð§NÁpìÊSÕÒݘjåÚ¾q¹ÜùÞÿÁ`î%4‘Gb1Ùt&—Qé”Zµ^±Yí–Ûõ~Áañ˜\6ŸÑiõšÝv¿áqùœ^·ßñyýžß÷ÿ !#%')+-/13579;=?ACEGIKMOQSUWY[]_acC ;libwww/Library/User/Architecture/HTTPFeatures.html0100644000076400001440000001515606252702626021700 0ustar danielusers Protocol Modules as State machines

    W3C libwww Architecture

    Protocol Modules as State machines

    A part of the libwww thread model is to keep track of the current state in the communication interface to the network. As an example, this section describes the current implementation of the HTTP module and how it has been implemented as a state machine. The HTTP module is based on the HTTP 1.0 specification but is backwards compatible with the 0.9 version. The major difference between the implementation before version 3.0 of the Library is that this version is a state machine based on the state diagram illustrated below. This implementation has several advantages even though the HTTP protocol is stateless by nature.

    The individual states and the transitions between them are explained in the following sections.

    BEGIN State
    This state is the idle state or initial state where the HTTP module awaits a new request passed from the application.
    NEED_CONNECTION State
    The HTTP module is now ready for setting up a connection to the remote host. The connection is always initiated by a connect system call. In order to minimize the access to the Domain Name Server, all host names to previous visited hosts are stored in a local host cache as explained in section "DNS Cache and Host Name Canonicalization". The cache handles multi homed hosts in a special way in that it measures the time it takes to actually make a connection to one of the IP-addresses. This time is stored together with the specific IP-address and the host name in the cache and on the next connection to the same host the IP-address with the fastest connect time is chosen.
    NEED_REQUEST State
    The HTTP Request is what the application sends to the remote HTTP server just after the establishment of the connection. The request consists of a HTTP header line, a set of HTTP Headers, and possibly a data object to be posted to the server. The header line has the following format:
    	<METHOD> <URI> <HTTP-VERSION> CRLF
    
    SENT_REQUEST State
    When the request is sent the module waits until a response is given from the server or the connection is timed out in case or an error situation. As the module does not know whether the remote server is a HTTP 0.9 server or a HTTP 1.0 it must look at the first part of the response to figure out what version of HTTP is returned. The reason is that the HTTP protocol 0.9 does not contain a HTTP header line in the response. It simply starts to send the requested data object as soon as the GET request is handled.
    NEED_ACCESS_AUTHORIZATION State
    If a 401 Unauthorized status code is returned the module asks the user for a user id and a password, see also the " HTTP Basic Access Authorization Scheme". The connection is closed before the user is asked for the user-id and password so any new request initiated upon a 401 status code causes a new connection to be established. This is done in order to avoid having the connection hanging around waiting while the applications is waiting for user input.
    REDIRECTION State
    The remote server returns a redirection status code if the URI has either been moved temporarily or permanent to another location, possibly on another HTTP server or any other service, for example FTP or gopher. The HTTP module supports both a temporarily and a permanent redirection code returned from the server:
    301 Moved
    The load procedure is recursively called on a 301 redirection code. The new URI is parsed back to the user as information via the Error and Information module, and a new request generated. The new request can be of any access scheme accepted in a URI. An upper limit of redirections has been defined (default to 10) in order to avoid infinite loops.
    302 Found
    The functionality is the same as for a 301 Moved return status. A clever application can use the returned URI to change the document in which the URI originates so that the URI points to the new location.
    NO_DATA State
    When a return code indicates that no data object or resource follows the HTTP headers the HTTP module can terminate the request and pass control back to the application.
    NEED_BODY State
    If a body is included in the response from the server, the module must prepare to read the data from the network and direct it to the destination set up by the application. This is done by setting up a stream stack with the required conversions.
    GOT_DATA State
    When the data object has been parsed through the stream stack, the HTTP module terminates the request and handles control back to the application.
    ERROR or FAILURE State
    If at any point in the request handling a fatal error occurs the request is aborted and the connection closed. All information about the error is parsed back to the application via the Error and Information Module. As the HTTP protocol is stateless, all errors are fatal between the server and the server. If the erroneous request is to be repeated, the request starts in the initial state.


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: HTTPFeatures.html,v 1.16 2025/12/09 03:20:54 jigsaw Exp $
    libwww/Library/User/Architecture/IOStreams.html0100644000076400001440000000222706252702631021257 0ustar danielusers Architecture - Input and Output Streams

    W3C libwww Architecture

    Input and Output Streams

    The I/O Stream class defines objects which accepts a sequence of characters to and from a Transport object  The input and output stream are mainly derived from the stream class and contains much of the same functionality. The main difference is that the I/O streams also contains methods for reading and writing to a transport.


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: IOStreams.html,v 1.3 2025/12/09 03:20:57 jigsaw Exp $

    libwww/Library/User/Architecture/InOutPipe.gif0100644000076400001440000000747505774674275021124 0ustar danielusersGIF89aZëñÿÿÿÿÿ!ù,Zëþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹Çä²ùŒN«×ì¶û ËçôºýŽÏë÷ü¾ÿ(8HXhxˆ˜¨¸ÈØèøh 9)iQYq‰@™)³yÀùê0y!Šb ™j†ÁÚJ ëJB){I« ‘ûº BëÚ«J 5üûk€«¼»ÜŒMqÌ; |]¼-•ÉY Þü=î«KM®¬~®ë{+~Î,M?~{mÏŸïoë>f³Þq;˜¤¼tíä§O 9‡ávÕ‹ÈÐâ4þV!^ìà§€#×õcXÒ㵊*!bÔ†0&_¶ÜQI…)E}üå&Ï5“¹¬‰“§Ò†.Sæì¹¦Ì©;hejSgÀlWÊø³©Ø9=e}z)Q¬K¡juj–Tªtm<“·+Ú¬Áô> zSíÞ¼ý-ë7)ÛÅnqò5œ¸®dɆ†},ÖªWÀ˜ßmÛmÑÈÓB zôØÉ¬;mœ§1oÁ­52=÷&½‚¿ž\LûèÄ’CCÅmïáðÙÊ¿Vk ½ÖktÿLæÖÔ Z’Éu“ÎmÙ!öÓdû­6½®2âêLŽF=>êòÏ׿ßå0þçøþû?Ñ>×düùG`ˆ`‚ .È`ƒ>a„NHa…^ˆa†nÈa‡~bˆ"ŽHb‰&žˆbŠ*®Èb‹CpçbŒr7 Œ6£c7îHU5ñ$$?NPcFâ1d)EÉ$9z°d“RŠ‘¤QN‰eW*™e—hl©˜^Ži„˜˜¹Ánj®Éf›n¾ §›.ÄIgvÞ¹¦xîYç~U˜ L Œ„²P¥k‡r³¨354z¤iššÒE'i ói9'¥ve ƒ¥„€z©˜ª˜xº)ªòê±–Âi ³öp+­Jä¯PÎà+eÖÚIÁòqþì™Àë(³/$ÛìTÐNôËÚÊê³QX[·x‹ 5f K ¹$ªgµ– Ë {ÔÆ®®ÚYÞ¹¿®Ší¹X‚ŒºDÎó®&4Àü2ï2åÜî©–˜ûJ¸šÞ ±½gÀkÂnl„×'£P¬“¿ {¬0AWQDx$/Œ¨ÅÓcž8éy<îNƒ]œïÈîšL³71«Ì2Á!Ë±Ã‹Ü Y©5VÏGç\4{¼ñ&ðe‡ʼôÆSX×÷ö1B_rr+—8++ª¸42üõÚ@…Lr£à(”ÁD˼7Ã}ë­Î[ý7Ûsc /ÝíÆ6Ù^Ç3Ô.ÓþÝ8äW[.wå€O¶»uûmx\~‹¾9ç¥ê˜ªÆNRκÞ/~¹ê­uÒ¸WŽzá™_^z©“ãlûçÀó¾vò~:ï´û{˜‰ƒþ5éÓnx½p·¼µçÈ;n|ɲãË}Öãg6úÄ+|ÔÌo^|ø««ß¾ùBÃ}{ûÏÏ~~Ú»— PNwÞã Óºâ4ò €äZgˆ&ŒN‚Áó#gëÔnjDØ–· sTMsü»öæ§?ð‚$áöht2Ø Ín&X¡Ù÷²Úœ`@ÏZø?Øp{n£_wÒæ³ð=ix8ŠÜe ÈC\PO6¬¢þ¯ˆÅ,²ÐuÎТ¿hEvŒdü¢Kà-QéA„J{‡5g³ß}¢Œt4£ÝÔX‹:ê1ŒbeöH¢J;R“\g’,Ê2é॔K‘iÚWT(/±5R…UbO¨ƒIv²~îÃ\Uj8JR±‘”˜ÌäýB¹‚!ž±Œ }¶?b²ôd­ãvô,3º$"/WhÌîÉf=ôM1É(XÆò†ÉtàÈAðù²€B¤æ, y±Ôdóµkå1i´ºQÍkj˜&oÀÅm¾,œr<öZW± ¦¯žJÜç·ò©Lùõ®òdâ;[…Ðuùs7©ãŸóþøs·0 4u™è! Ðæ•“lÖû¦A_Y,»HÏ¡úÛIµg¿÷ák‡à´(í̓¹’~%¢*t-‘ôžì+ÜK ZM4b²¦+±'!™»§ùÓ¥ÌâpÚ6aý .g§EYšNÓµ‚-r³*I±P´Î’ëÄ&+ (™»Å¡Œ Ñ¥.Ñ…2-âB$×vjÓ7æÔêºDÈÌ™õ°Fk· ËÖmeT±I5Aã-<* uVù„§R¨^j“‘X¬1¶ÙÌj6ˆ¥k7<ûŸ¦ÖOÀ(­i{ÙΪvPÚ’d­dÙºÊv¶ 9¤æŠ«Üb–²Z‚k‘þõ¯Ûw·¢…mNË´ ©—Ç•j€Xå’¶º~¨(wGz…Ê—2ßEi‚žé*á:6[ðÔî_Éä >Éw¾{š}ï‹ß7é)¿ù…¯ÿ à xÀ.°Œà+xÁ n°ƒ áKx®°…/Œá kxÃî°‡? â‹xÄ$.±‰OŒâ«xÅ,n±‹_ ãËxÆ4®±oŒãëxÇ<î± ä yÈD.²‘Œä$+yÉLn²“Ÿ å(KyÊT®²•¯Œå,k¹yÂĵ2Ý@í„P>*R˜ÅZ^)›ùËpý­@rŒ8gj6úÂØ\²±e1¿YG mèüìþeó ºÎ£nš‹\wðÐ:‚MvÝh¾ŽÇ<^Ù‡ñ×”`ô¹ÉxPRŠ<ºlqAožÛºÛ¬'=^Åk;òD–èÌn~ŒªÓçhO5ˆAh,ëÒœº’k‰ Ö<íêU#›Ã™'j²¹^›‚3¿®6iгl˜{ªì6˜ûü¦0”Õ³OxÂmôx¦`Ö.`ΔqmÛÎ#k¶­æìD³»Õ•n#³û-íKÇÓíŽ6cÔíÞ(WÆÞf=‹¸Éóìë¨zÞæu±³ýpÂ(;ào‘¸ÃçÍ%>çzÓ&Ëå­ãJŽ—çãÎ øÊÓ­tsÓnV5Í›³þ’#Ð9‡Þ1gÈjØLZ"Í^x^½sžš‘Õ–ú s„•È×—¼9dàòS-šA Ïúž=£ž{ÝËÍnP×ÇŽö´«}ílo»Ûß÷¸Ë}ît¯»ÝïŽ÷¼ë}ï|ï»ß]|æ¿K †‚pM]ø=ñ‰ãµ*þâw¿’¯|ßlùÌË÷Yšï<žp%¦³û¢º_¯z…:^CNÁµWhµz.ú”2W¬§G}x?5-ÑÇ^¢ðd¯_WßXà+^ ;7A[ñΞö©çüðu Ý„.úÂWýiÿ)ÛïJúÉ¿.m½oÜàÏçVÆÿhs?k}çž»âç¾;Ã|*þ(¿ûàß~ýÓ¯Ôäòø}ý}Ó‹RÓz…Ò¦W øã^Ä\ Ch'{@UJ±ål7c]F#)g ˆVë^ç€ïG}½7YauSx]«‚ùÇ|;VÿT€Ú‡['uVx"‚1U21Ô3‹X8ƒø€Évr{3J‡KwvlL'ÓLc–DYå£:Õ+Ȧ‚TlÄrA˜‚g´…|m× ó79ÇQ]“@Pø…#8…è‚5(UO¥Lƒƒ;ÐcD/„¯µQxˆ‡ß#(fØVqˆ¿36yh~X?u,‚X)7MSØQñó†l¸\8؇ÔCäÄþQv˜ˆ{<ÄTòSˆzh‚‹ØS—…s¨‚HS&ESˆh‰0Ȇ¨‰-Eµ˜X´è…¢HT$ä;¤ˆ1ȈªØ†:5S®?±˜‰5‹ XJX•‹¦ô=)äŠÇ¸KÎ8бŒ×ˆˆƒ‚?‰Ð(VT^ˆjÀtqkx=ߎäM?´ALsMœÈ‡ÀBTxTëXqH'Žç¨ñ´RvÊ%J´äTg¥*Ú0gv=ס6åRˆw,½DfVOÂG:T¢´YØ@„'i’Fˆ-xL!¹^Q‘{¨´>¤ºØW€VFÀGY€“€‡HГ>Y ”tþ”UºŠÜä¤É©>‰Y›5ùBü9@'Ê£:¥\ª e ¥hz¦J¥Zš Kóo%(¦þæ¡áÙ¦a*‡-õ„Q”žIú˜ 8§B†kú“®s\ YI€õ„3ŠiŠùñ:tt‚þi=Ê¡dW©ÉvD]*¢i›wÕ„îP¢Ä©*©1ÈEZ}­ w«ª*«ë©pjŽô×§«U«½å~½ª© «¬z{À)¢Ê~qЬô9«÷ç«»š¬Æ}Ê ­rz¬¼¥«Ãú¬Õú}ÔªgÆ8­´Š~ÜÚ¬¹úª¿Ê¤®ú"Þ*Îz­ÒÊex €èª~[­äj¬h“‘ÇeÙå{“º¯úº­í¥®ñ•*¬°àz¯øj,~y&Ù…•…Fz ‹« +°+¯kJž÷y ç±! 'ö%²%Ûe˜g²)[zkM'#\é²A2 ³\÷m+[³%2n9˳=ë³? ´A+´CK´Ek´G‹´I«´KË´Më´O µQ+µP;libwww/Library/User/Architecture/InputStream.gif0100644000076400001440000001161005761725713021473 0ustar danielusersGIF89a€òÿÿÿÿÿÿÿÿÿÿ!ù,€þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“h–6™” ››žœ"¡ —!¤C–§¬©¨®œ°¦¢$´¶»F«²¹­'Áĵ²·¼«±£È¾ËÂÆÓŒÆÕÉ¿ÌÜJ™¡àÐÇ¿žå¬ä ß—æ”´¶Û êñðóÇöé΃½öôêì÷óÄ¡ 8à¹Sâdô2GïÞ?‡ä®›X¯]>Sëù‡þŸ+l{öEÄ8paÆe M–œ˜†ÉŠ0_Vü'⬋ìó!@Cáðéä8S"OG!ŘÔåP‘C•Jíä!wF…aZTQP˜Ù܇é+YyM_ÐÌYpmW­J i«~bëÉÕ.Õ¬[SÎûUaÜ©Ÿt"Dì·ñ\œuÑîHŠ,!¾gmþ}ÛšÙ¬›Óº¨ì9ßÏuñj5•ÌÝŸ¦Zœh6è°ÇÞ^z˜1k«#H3íyw2ñÓ9-BŽX62¹{Ÿ'/ú4;Ÿ2››^aû`ÛϹWFƒ]l$uñB‰’_¯2_ƒ¥{¢CY•rFä4`U•­;þv§^áÙW–WXM`}§nBý—Í„‰Ýò…>c!dvDKrèáˆ<€øØrÛ‘¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDÖa€E&‰Â‘}0©ä“#8¹‡”PVÙ•y`iå–hy‡—\†˜F")æ™I‡šhžÉ¦o¶ÉeœpÐ)g•vº‘çJîɆŸ| ¨ƒd¡h j¨ŠšÑè¢;>J†¤âH©—>‰Ù¦œvêé§&Öi攣VЉ)þYj–«šÚ ª_¶««ËÁjG¦`àšdªBðJ¨¬·몯@›¨°k"þ[©±>0먲pB»¨³%Îʇ®ER»ƒ¶c`Û…·Cr›ƒ¸a€»…¹A’{ƒº_ ›…»?²[ƒ¼ßJ+*­§6A/` Àðú¸¯BÖ:௿qÜãÀ1pðÃG,ñÄWlñÅgLñ‘ß‹og¶– Áà Û(Ã.ÜÂÑ~ ²¾*³êò«¯„Š /1ã¡0Û}„·(c±3CëhÚÑ P–Žq 2­Z­Á6i2ŸGC­ZÒO_½´C©uLÐW-…Ø8V¯Ö^/}N×O¯µÕÉJoÄf¢öÖh—´µÞ¯äì÷¢×ý2ÚY£ö6Û´ÑØV …ã2|øàmþßÍvá{gžvßQ3@Óú/Â)6äÞo ē꜋ìùç |MÀ ý"( Rt‚—0Â2Wü *h@;„08¼À a:=”°‚4f8 öŽÔ° ¶“³Ý·.l—²‘-1‡Ï»Öì*ñÄßNþBÔpbXC™q‡VKœáhC-gqq!k¡•ÆÉ¸mmÀ(…9@½:Ú±SHŒ"eø²7£0ÅÑtC$r…ì£æ¬x9>.`„œâÙ«,jkyÛ\"ÉHÊí‹Ì¹œ®uÒ“R„ÌN‰JR©ò„¬l¥ %i‚Àa3%‹°Ë€YýÈX†¯^Á˜<ð—±|6¹Ñ<’˜•Bf¤™ƒƒ-31¨™Ž+·ENÆJÔüA8k¸PöQŒˆCгò!9C³ï´2ƒ¸H·½ŠŒÝ44e¹F:ü hštÐY_í3LñÜABgP»k^uþéÄç&-ÐN„Ò2 •ACÛ¸9{¢S¢ÅÀAŸ”Q”ô×&ƒâÂR®5S¨(I/z¬:¤ŠÖû¦Njž¶à¦'L…äSUè³å6ÒUOEARqú¡ò(ª0Àj è§T9¦Àª–¢é´J®Rµ¬:Y[°V¡ªðC(mjŒÚººV•‘êÓhZ'd×ô5¦xÝ C庢¿žÀ°ç3b^å¹WJ ¶©b{°ªU¬Ï‚ÃïÈÙΖò«„å+fËYŠ:"´·(­TÃGX6µ£Tl«ÐØ> 6¬An#P[?ÜÖ»õ@pç(ŠÞ b¸þ@.Œë[ )WÏåd2˜ ˆèb ºÔµ­sg‹)îF!»|ï']¹ñîÁ¼äMoЛööó½gpïä›G­—Bôí¢Î¼ë„üÖÒ³Ð9„u»Ä_&ø÷¿þ,|ëËšHˆáÝîxãÆÁu•¶N% Q{ âÀ?To8ÜHÄIœå†['—³°‚›B3±0~„Œ+°Û"šØÆ@±Ul†3ž.=…²}‰e)¤—+ëT‹8ÔŽt5©{è^×Ô“µ@!:ê›ÛØ„Fv`•M9M3›ŽÏ†v­¥ýVžºÙ·Ì¶¶Gë°Ùš‹’·_ËMî‚Ú*Ýê>,»swîòÁ;Þ&¨4üŒ"ÏëÔøn·ªW³h‚Ž àg¨SRðQŽçA§¤q™pÿšoFD'7±G‰j÷®øjçý ¿ôÑ-q=1w8 \ä$yß\pïÈfåµ¹þàÚóæžsŠÁzjÕIž¸ß½Ñr-y·_Týæ,˜pÓ8Aj¸§s9Š¡‡ ßÊÉ1AÎÇ본¬ïeëK^ð´—ª˜]h‡2·ong¾]wƶÓ÷¾ô`Ñíg?kôý~Ëu38ÅÝ‘wS§Xí}g&™¸}î×nø6µ©º¢{ñ~h|>¹¾_wïpÙ.%œQ¾QEÐ÷Aô°1“[wz¼¥œf õ»ëCbùÁ˦·dÎKÃq¥7|÷z€½¨¿€ ÿWÁþØ-ÜÑ->”åÛ»óOúdå˜;:7E}}¢jûèO¿ú×Ïþö»ÿýð¿üþÛ¤ø§ØÚ`Pê’É“k¾ü8Ö{ªè×}kgB €s |~'{ ¨€¤Uo‹•€Œ—.¶jŽg€D{ÙGÐ3tçlxyÄ€Ôæ;WWs{G|Hw€—7pš7øz5QTÇrÅç5 ÈwjÔo>7„¸Ö)è+Q8·r<ˆAtUp„lPI~¶×6´7YÈÌ…T‚Îào_è|UGWèyMøA&è„ç¹¥€³‘yQˆ~?Pà~R·HøG‚@Èhmþ7†dh-u‡…xENÃ…\Ç;8phEkXÛ‰N耻ó„`ðˆÔ×oGþ‰¯ð= Š¢ø=áS<]˜‰'¨8žˆ*£øŠ°‹ÁSŠÆÃ‡¨( ȉ!ˆ€j4<øXtbw·Š{(w¯£?§R(‹gŒÞ‡Œ p‰HÍÈŒ}×,1ȘèŒrzÐ(ƒ¾‡yÀ®ŽÙ˜Y4Xר‹âˆHXzjÐŽZ°{踋3økìøö(€“ô{?@W€|÷(‡ù8{h@Q¨ˆä…ÿ8…™ƒÙ‡ËhóX‰6XYY3D’ÈQsnÀP€’:Ò† `]*é/Väèf“2¹Ži`“H “7Â’ 0`¹2þ6”B€”4R” p”B(’CHJ9#L©K%ýØt0•Ty•ä•@pŽ‚Ç•2R•;&–ZùdY–`IBm9ïWˆ[3¹Šd7hØ‚¦Óræñ—}9—†Áe’`–o —¸G‘Quz¹‰Õ¦Š‚éuT˜‡iH•Ùϸ˜X˜/åy@Öj.·–(gG1v™F@f™©z™d†¡rš×fd§<ÖY¦¹m8Ùجɛws:W˜FXaVh|-y$ut$·inwY“¸ç›ý7PaØa×ömŒJˆœ?ɜމÞž¥ùœÐY}‹Oçy6¨W™' Ú¹þØá9Ÿô9Ÿã™›ºÉ„ýwœ›æ˜ý©X×HG,õY zŸúx’ú9P:¸ ¯ö™!è š‹.Wxz¡Þ‰  iŽÜ)— 0¡ÔW¡nˆ¡$ª¡—Ÿñé¡åç `Çc$Š¡&*uuù4¢9¢/j 1Ú‘ŽH… XF4t£É™£ªcÍyLGšéG,¨·|8#¤CJ¤ôYP#Y£*`˜v0‰?Ú¢+vŒ SP*ŸRjŸNè+Vºnäyƒ˜Švxœ˜´Ú¥0F9¦Sê‚qž‡Ø]iª¦L œÌVuy¸Cr:§tj§wšƒâׂmʧø©‚[Šrƒ[(C†z©˜šþ©šº©œª©ˆJ¦©‡iØ™P)’_–¤Ó„ªÕ¦ãw†¢š¢P¨sj•ŸÊœI®‰…¡b¥©‚¥ØÇƒš7Áªl…Z§µÊ&ìÙª£ª8Tf}zLjaõAÒ¡¯¦Æz¬¸8 ðùq鸪l¦ªâ$®:P£—€­My¬mVcô¦-ú­ÛrªÏZK惮êZB¼*¯úæú¡=u¯àÊEá:¯/J#ù3Í7f¯‚g•KÀ„—°j¶°å*€¾ºGÒ祛ɱK±Pe±×°k~!%u§…Ý¥÷ú–ùê¬ûŠ„«Ww…°Š=,+²t‰±ä O=»³Núh™þ¦sÖš>9[«=𲫖èÊK?».±wuÖˆN¦ˆúJki¸}¿È¯Q;ª;x³t״隨•¤/ðWðg‹´(±,(¶™G¶þè¡ZË´ÜǶ^›–7È{$ ,yÛµ2Ë·}ËtB(?x¶´ ý™ÉG{AÃiŠ»¡ xVt+°q.(œĹ̚®;»•~ë}g‡~Ô¦_£¯‹«‚¥J„p¹¡ÜÊŸÁº—ë°1û$²‹•KJ‘f¸Ç¸‹ »»JÒ»¾«¥{¼nš‹“S:¬K¹a¢¼aÉ}u8~‚ ™ªûª*D@ %Ö;ØKˆ,èa‡X"ŸþÄ‚[%ãËYW¾ÛÁÑg¿J ¯åÊ< >Òx'+úº°»àèŠÇC‹¦À|«™hI¸#j¿÷û¾V¢»Çج“ Ôx‘bò|Y[ɳ¾["Âu믟 wÛºùÛÂgKÂÌ‹ûö´:P•^•Œ‚ÛÚÃuºDÂØKº?\Ä*ÄClÄGÜ/L½ —v«– 8»Œ¼!LÅØdKÛ†&¬Å[œ»÷oŽ}P|ÃJ\$©é¶¶'qÚ’R8ÂI,Æc\´íÉ„);zÍHÇY ÃSŒÇˆã®Ë*·FKG•0 ȼNy©«X´²ÌÀ¦bþv>{Ê=@ ²”Ì£)¼¦°6uR[}­‡¿ñ)¿DAQ­ Ç, °Ì'ÌTúË%û1—|BµlË8œ:L¯ ‘v,'*%œù¸±¬·âPšD0n·Ë&ÕËÑœf̜횾ÊʦÈ<ŽÃÜ&*uN£ìƒüOÐlTÒ|¿\°·¶ F×̬ú¡å·ü1œ&FxÑƒŽ¼µØÍhRÍa˽¹÷ÎFÏ,0ÏøâÏ:¨Å+Ã}¥çü¯Ô<³T·Á ù,• -ok\%~¼•MM+-Ûüiü|&#­ÁåòÐ ÑÁ¬Ïs¶ÑP’Ò$üÑÉÅÒæìÒ@|%mqRþl*46}]8]±:ÄÐÓÀwÒbÔ Ô&ÉÔaâÔ<ÔQ|¢Ë²Â¬pRÍ%TÝP!=,‰ìs-Ö§YÔ! sÎhÕºËÈlmV=Öq]6M×um×b­ÖòÌ×y-Ô×½ñ,؃­×H*Ó‡½hÎ~Mi½Ø¿†-Ù~8®ŠmÙLÐØ}Ùš½Ù²[ٟ͉t+Ú£íŽÝÕ§=dkګ푎íÙ¯­­ÙleÛ³ÍÓÓ¬Ú¹ “» ×½µ-ÛÁ]ÃÍÛÅMÛ¿ýÓÉí =‡¦ÈÝÜtùÜK‚ÛueÝÒíñÝÙMÇ ÜÝ’ËÕáÍÚã]Þ`[’cèpê½ÞíÖîÍÆñ=Ûð=ßFC˜öÍÞøßüÝßþýßà>à^à~àžà ¾à Þàþàá>á^á~ážá¾áÞáþá â">â$^âC;libwww/Library/User/Architecture/Internal.gif0100644000076400001440000001514305774674276021014 0ustar danielusersGIF89a>®òÿÿÿÿÿÿÿÿ!ù,>®þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡J>ŠŠ14“•— “™ˆ`œ 'œ¥)¤‹”©•¢¢›«ž³^® ¶$¨0ºG­²¸Á´ÄQÿ§ÉÇ"¼F¾ÁÌÅÔ‰«±©¥×š‹ØÝÜ ÎŽ²—‘ àÈèãÉá¨âíëîÈòëå‘êéñÝ¡ÙÞü¾ý‹'°Þ¾j_@3e¯»‚Åq“¸ŒžÁ†Ú2¼xþÐ߯yµ¹‹òÁ‡Þ¸bDy;&œ©lß6™çÚì£Ã–æþõ»‡±b„žEwªä‰t(Qƒ9Wúsˆ©¾¨4³šhj5¨J¬á–‚ (ôkÙ¤RMþ"94/°N±ÂõÉ4-,¶uµêÁõæOtp}6zô¬È³É9µç1]¼t{ÛxªOÈc—bÞËyCߪ–ÍR…JØrÓŧ#_vŒùíä´7ö»1EÍŽ;ëfå­êÀ†sãʶuo™³IÓN®9è¼…M×ÍxÙ¸ÝØïê8ZÅø‚v þ¹ïj©Ã–{úîhÉq…óËN?ºú ½ß»½R$þsÿ±mS[FåË97XÚ”K(…ÅsõUŸqï`X@b6]xâ†`IýEÅN‚bUg(‡©xbcF6…4V3#7Ö¨£'9ŠÑãŽ@òc-CiäEr1ß‘L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ)çœtÖi§±rgéÜé§IæùÊŸ„ÆñÍ‚Rh¡–„" £A×çCóh²çO xi¥ž¸Á ¶™ç¢Î éW¨îy¥äõ¹iŒªYê¢J@j©»XºéuÖ=ê뢫ªZÎ-ÌZ«IþTÏG®…+&ºúʪ#ÂJkŸ´§:wëƲI¬ØfË•«Ïb€ u½JúmK®–¶kÝ®ù­µÕ"»k°åZ.µûþj/¹ÁºK/¼¡zëh¿ÃÞKn¾ŠR;°7«K¬³—f«Y±Ë{pÄï´Â/Ãz[ªþV 1NOí§«9/Â?<0ÈéIÇ/¾Š_Œ›dHï¶ÄëòÆ"ã[ñÇ4{0/B§ù²9)£LaÒæ:ÊtËNqÎBõ/Õ|~EÓ`Û tÙb¶Øk·¡vÛ Â­ÆÛr× Ývç½Þz÷mß~à‚Îá†'~âŠ7.ãŽGÞä’þWŽå–g>æšwî瞇ž袗N馧þꪷ®ë®Ç^ì²×í¶çÎ2­º÷¾:Öa üðÄoüñÈ'¯<ò¾ó€;Ä}ó6<_£ðO`Oý Ö[XÀßoC÷ôi~øâ·@>vè[Ñ~ú)¬¿ÛûUÐÿìÀWi?ûß/‚üéøü‡îE€ü#  ¨V-T Áxw¥êkf;° +ÀÀ¬h°aâQÊS4‚nPœ‰ mÕ®I¹°Z Á OÈ­üEi†V+Ù°¥0à† HaB~‹ è3%"Æ(¨¿fLLd;\7@D ±þU”âÉ:õÂ’ÅP†JìÀ©‘Åêä=d)ÎʸÁ1ƒI€£ÝH 9J/Œ #-ìh>ÞOHZ’ª8’!ø~€ôC‹@ÈA»;’‡ÑHÚÇ@ý8#;pÈô%r“ô#ÅÃ-òìh¿2eŠ0ÐIñ}² ¡œ¤Ù<5H¥•ò‰ï:•*§xVnï•Nˆe’Ô’'"^RU˜D&ø’zÀìEJz`L^Yóš:Ô¥Ì<ðLhÚ *B5¶ª€µpYçä$$#™†1á‡øÒ‰Ç¨"Mž­Ýl^4eN)ä(øgïö¹wfA ,|ש‚–`šþ^@è,ÊІ~s ´$ƒDe°ÑÜ9Ô‚¹œQ–rú<«æ5°ùkè!~Hœ#3J´uVþƒŸ9,>Ò: ƒ¶pïT{h4$:‰Í«m£EJJáÑu’ô„uTI5R3ÒnÝôõõ¡ebR#:f+¦å´[LÚ @†s9¿¨®"yÑg¬”ª g•m³×:ì²íZÝ]Q:×d‰–95ëeî¸vÄ.¶®oXã“©²ÌÚì•°emic‰ÅÀ.ò9Åe*{|Æ>vØ´<‘x’ûÝóܶëºííoÿ€´«6º§½ë›òùÙóæ^ºÕƒèö™Û§8Á±ï¡%œßýV)´c«ð…×á‡xįÐp‡?¼Kþ}gÇvƒW·aä @9É«Wqè<䥣7LneªöÑæ¹“yþ 5¾%ñúüçÆ£žÎwN³¡«Îè  9Bs(ÝF‡ez[®ï¹J}ê<ÿÓÕ;·õz3¬ë–»«©®1«;ì«ØÇžu?­Ýqk:5Þ®¸·Ë½t\?YÞö;å]ïÁxßíô÷À4ãEWûˆapwbÞo|⫺xÆ£}å”·.kRazþó ½èGOúÒ›þô¨O½êWÏúÖ‹Þ šß< ŸÖ^óö[ ½G\?z¼UI¶o‚î|iÎh•¯)ç×…áó’Îg›†¿Ü²¢ö÷¹>¢oi,ÐÞ¼/}Ü({yéWÁù܇"F‹)bŠ=Ï-(ûþ¡ûíÏ¿åÁ¿Áo[þî_ýõ·~Ùwo ã~áz"D~Ë-Xé'EIð€Åþ÷S9…}Z€Â€ÞGj{v•$Ø|Ú'€ö×€;5Sû4ý§~ø ÷WpZ$C@‡=xS‘woAÈCˆQEØ,¸JHPVt„Öð‚F…7à„+˜|h…*„h~ЄRè€_¨aXX„"(†g˜CIèƒÊWPièc‡oHj:8‡³g‡AOða18~S€‡ú²…€R¹vñôM5{7Ø~؈¸‚Qs~‰¸P‰–x‰˜˜‰šˆ‰<°þ‰žø‰™x 8ŠŸè¤xŠ¡È¨¸Š–¸¬ÈŠòWnT4s‰)`‹3€‹¢ØŠ ‹&à‹"Œ$À‹%@Œ»H5`Œ¿X‰X…J Õb¯@…\øo3WWÈ׈1À-ཎ*ÀŒÁ(Ž·hŽçˆèˆlËF|Ô8’,–uä¸ë8Œ÷ˆõhûøýØù¨)ÿhŠùù9(í˜CáØÔfá2kïᎲ7 )Šªx™‘¿Øù‘’Ÿ$9Œ|!‹x6dȤ‡ØÆШ‡½eS'‰’·˜Y“#’:¹“”¨=ACùEÏþlìV"B–MnÆ)”@y“8IC Y•VÙ®¨[ Fi‘ù=„4$Rfðxxƒ•É•QI]yj¹–—½¨‘oYm1¹0£m-¶KÑb1`ÉüF—uY’•‡É>Б‹i˜‰‰—Ï÷*,‰”¡…Mé”]øM„ ’"y— °™# —©˜= – š•˜»·"fÄ,ýádòø”pÎâybI•é›ÄL¦P„æE*ŒÙ0Îh-â!œ¢©XÛ"W¦i.½™Ò=ù•ˆ(›Ÿy–+ׯYÍi6¬²†àÉœµGš¸IœËæ—kè–âé·’WþX¹•™Z ™[2dCù3Û¤—í SçÉB²æŸŠ‘㉙ ¸g‘¹9yAΨž? ˜j—”c»yÁ8+ùŽjŸ‹XÓ¶Ÿê§ë Þˆ‚ñ ": ’Y ìÉ©mÙÖEŠ˜ ùdÁ6# ª›°É+´¦„U™‘ó颿ùbª‰j/­v+o³Ÿ#B¢•w¢;Ó50JœÇ”£S¤ £X[T£&ª'[cf-8›ÿ‰eK9£õr¤[ê“Î9ÇyO:Iè™—V³¤h©Ÿuº2x6Rj ž"¢Öl|:—fŠ IY" Ú¦`J|cz›KÓ¨‡*6oÖE“Aªþ¡–Æœ^‰”ª)>Šj™lÖ—§!º§%ÊŸZ*—Ïø¨Z¢Jžc6–_j ’ª†fÔŽÈy«{Id‰*“Œ*B/’ B –œJJl˜ov¥BF‘žê ù9˜HÚ¢Z”qI›™„À¦:­—¹›µj£·Ú¥ c4‹2œ0WÊ”SŽSš€ÁЍDj­µ—¬»·$jêE–ZiÑ*®” ª:®¨©¬[F­«Ê ¡¥ h[¥Ðj4¯ÊYèê~™,o“*¬d‘ òi¬…™š‹Z­˜rK0~è­‚é¯8p­¥©²™œÙ°{š•6³¶®¨ú­âV°I:¡ ú¢+Ë–Sþ ´/k¨ž)³GI³Ž9´õj§}ª³©´¦¿Zbýê²4@˜§i´V›‹ôz´¶ÊŽš›AËöÚ}šbkÙ´”±‚²(D“Lk—Eûµ6À“mÙµc ·qK¶!›$·É8Žo»µÚXŸw«µy»´s»k»‡}ë·2µY븂ûœy¸†{µ&Y¸¹€³lظ’kŠ ‹¹—;¸ ¹ã©“ ©Š‘›º& šqH€ž‹‘¦Ë ³+µk»”x»¬;—µ»»¼«Žö¼HxŸÓ8“ƒ§ŒËx»´{šÈk­¾‹Ïë¼ Ù¼V½#i½É;ŽØ›VÄ»­m»€¯‹8¾¨XŒä{Šª{¾ ¨þê[Š@Ù¾îk*؆ÛUXÆ Y X¿z1ˆ/F¿ž°½@À»ñ€EÒxÉ(ÀB½A¿ò:‰³À‰PÁQR†r˜R|À¸#©h%xzÉ•¿z°‰¬‰~÷†Àé›Áþ½»Á¥©¼€bw}ˆÁ0,» lN€Â×{ÃWËà ÁÀ^G.Ì‘*ì:<·0\Ä+Áºñº$0i"¼²×XÃËKŹ{ĉ»R<ÄáĈÂD@ÂlÀÄB@ÆcÀÅ]ìÅ!`rfŒhüÂ>ìJ¼¿jlU`\sl³KœÇ4Ça[{lÄ€LÑ9\\0ŵ;ÈÜ™Ä~ŒÄ ½ÀÈÛþW\@3üXl”|¦YÈ4L¹ÐÉÞrÈ{•É@`º¤ŒLŽVÜÈý¸Ê1 Ëb«#?¸od°É@Ë4ÐʊܼìÃL”¯¬H=àcÅL´'°Ì³LάÑÜËœ!vJ6ͳyšØ¬ÍÐŒ¸»<ØÌ#Ž…Ê-Ο šÛŒÎ“˵`ÎBé‘îÜÈχv`FÏñZæ¼™¼|ÌÛÎnšøüÎ 0ІÐuj6кìMý\·ÐÐ Ñz\[Wg½Ð @Ñ!ÀÑ3àÑ =Wh —ñL—#M̬­Ë+-%MÎÏlÌú\¹ý¹¡Ýþ½Ð1MÒ%GÓ5M”9=°G½ÎB ÐJëÒ@ÔBÂwXðÓU™Ò­ÓR) =ÑO½Àˆw Ó<ÕW]­–dÕ7Õµ¼iÍÉJðÖL]ºeíÕ’—ÅøŒ•Ålºù¸×óür]CGs }ÄÑLŒ <´ÌŒm¢È˜º)] <ØpY2 t#]“ÓÌÍÜJº íÍZM×ͼV¸Ì›}’–ÍÓF°Ú»)àÚõÜmr·Òª½²=É6ÛsM%Ñvw¶M’ÛŒ¼-È-}ÙcýZ,Ðx ÍÄέ½Ó¡mÔ!]Ÿ¼¸Ø­[ËMÔ:ÐÜU¬Ýû\×Ù¬½£ÝÔþÈ —©×]²[|Ö#PÜÒÕÛÛ0 ßÂü%švÇLpÒñø]Ý2àó &ŒæÝÉmÓýÝ>àÚþÝÑ—hžàÖØ„û߸ÞéMÚ ÞYlpÒ=¹ÏhÍÌõ½Ý'¾áH=Ñ>˜uÁ^½~á®ÔžãzÝ žvvœ/=ã»Mß7žßΪ^Êÿ3á]½“œ àBnâ °Úô¬Ñ-žÆ=®aÍâ9~äEŽÓ£<å7Íjlã¬\Mã@ÎÒ^®Û>'=Bæenæ0Þñ=ÝvËÐ`îÔmžigç<×>½å\îË| Œ Øz.è]å¶¼-~®Õa-þÜNâ„~¦”nè}½úÌè L*ÎØYîÖÅMé!£ù¸¤nÙ¥®èóÌéÕ`Jž«^Žs>ÜuNêúÙÒê)êßíê‘•'ŸÎÉ/-Ü”©>ë.ìî¼Ê>º­Þ6¢0ì“üãµí_Î좮íÎ[íš^çv3ÔþåLîÓƒÍíÕŽë,ðìØ~í7 ã.Ðì¾âòå²\Õê.ÈóŽæ†NÉû>Ëÿž7ŠïÛ.ãæ¾ë÷¾éƒ-ޏðÄìð~Cðæ¾×œÍë_ìF^ð™3+u\—¾æòžï[€îY\ëÀ¾&ñÄNñ½ì?ò$ßî»|òmÒ4OÏïþÎì4Ïâ1/Í,9²¥òýô¦>ñF/ë9Ïê3ßópÂ7D_ôðþœëøìKï:„só8¿êYÏÿõ±9\??OgOT xÉlöÕàö.¥pl<ïôVP÷ÞÁxÊüM¥uP÷I/€¯ße?‚’µ>sÿ]@·ø?'7Qïi …U…¯a87U0)_3K„†ÝûNP rM\‡›ÏO“og ù|Þ¹‘o*¥_ Ÿr¸ÒùNKtf˜ùqÄp¥"û{‹u.˜ø°&q…¢û³Ÿt±®­?@3E(Âß³¼…Çïù[ðúxW󸇾Ÿ@] ý³°üÞ ƒ}_…Ïi›;÷þ˜¥ýâ<­ÖgÊJ‹Å‡ê¯v´Xžeþˆ(° ­åɶÆû ¢„ý)I® °²I«½åêÍ»ÿ`(ŽdiŽN—6“­|ɧʺéÞàŸÀ P“+º†HO&ɲÈhs²œZ¯Ø¬öÃ#R¤f8òµÄ8p×ò ¶p¸Ñ')Õä=C¯yu‚ƒ„…kNe}|Š/9‹M‡’n…—XsšwB{C‡15Ž}`S ˜ª«¬"”g°d¤Q“^0E ¯–­¾Z›Á¥všTV¢~ˆ‘€¿ÍÎÍ»Š<§±bµ4‰É\m?ÏÞ˜Âá©;±§ÔLãßëìzÛ°jðµ^æþ¹ï½íú—›ÆÇtÕ†A‰FBݾƒUè&‹TµF.¦Ù€ €| 3fbèOãƒCî³(’Q Kª,Á±ãÊ‚/c¶#)R"Ç”2sãRç'Ÿ@[Ñ ™ÆÓœA}cÐóÄÐAM“JRÑ( ‹Og„+âf«×¯`ÊK¶¬ÙMQY¶K;µm’YMÄñR·+û1Ͳ†a©[ØâìªðÉ'a¨Š¥1â{_ìv#—Á†³“5W åÏHàÖã øI¼e¦j„°x´N̺”iKü0ëÛN3CÒöØäéÙ;´ÆývðÔ©±Y1N´èY›gBóº5þ¬'7Iöf娶‹W¸º6¤ÞÑÑ™,ÇíÍøœÌÉkæC Kü÷mŸ#?f÷oõì0~Ý·Ó-:TÇ (V‘aór/$VTm⣃%5r¨ÔT$ (âA!¾؉v6Ó&²¸Ö/.v¢Œ/Õ¸M1â¸Îßé£J:>3TCz#d3K&ITPGnè$ŠS59¥FEÒX’Wþbå*_v™P–¬dÅ¥˜­„YˆšhŽ”“™R¶ÉNl‚X§œ/æx™x‚Y\Ÿã-ˆÐ\|Š tf„è†êCf‚ g£s.j饘fªé¦œ"Ji‹3D¡Ÿ–jêþƒ-јꖓžêê«„%k8V ë­¸æ c«ºöêë¯=ð ì°Äújk±È&Ûæ±Ê6ë,ŽÌ>+í´ãEKíµØRfm¶Üv Ô¶Þ†+®HàŽkî¹í”‹îºì¶¢n»ðÆ[Ç»òÖk/ôÞ«ï¾$äËï¿kàoÀ Architecture - Introduction

    W3C libwww Architecture

    Introduction

    Libwww is a general code base that can be used as a basis for building a large variety of World Wide Web applications. Its main purpose is to provide services to transmit data objects rendered in many different media types either to or from a remote server using the most common Internet access methods or the local file system. It provides plain C reference implementations of those specifications and is especially designed to be used on a large set of different platforms. Version 3.1 supports more than 20 Unix flavors, VMS, Windows NT, and ongoing work is being done to extend the set of platforms.

    Even though plain C does not support an object oriented model but merely enables the concept, many of the data structures in the Library are derived from the class notation. This leads to situations where forced type casting is required in order to use a reference to a subclass where a superclass is expected. The forced type casting problem and inheritance in general would be solved if an object oriented programming language was to be used instead of C, but the current standardization and deployment level of object oriented languages in general would imply that a part of the portability would get lost in the transition. There are several intermediate solutions under consideration where one or more object oriented APIs built on top of the Library provides the application programmer with a cleaner interface.

    Many of the features of libwww are demonstrated in the Line Mode Browser which is a text terminal client built right on top of the Library. Even though this application is usable as an independent Web application, its main purpose is to show a working example of how libwww can be used. However, it is important to note that the Line Mode Browser is only one way of using libwww and many other applications may want to use it in other ways.

    The development of libwww was started by Tim Berners-Lee in 1990, and today the Library is a multi functional code base with a large amount of knowledge about network programming and portability built into it with help from Ari Luotonen, Jean-Francois Groff, Håkon W. Lie and a large number of people on the Internet.


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Introduction.html,v 1.13 2025/12/09 03:21:00 jigsaw Exp $
    libwww/Library/User/Architecture/LibCore.gif0100644000076400001440000002175506063177365020552 0ustar danielusersGIF89a&Ûòÿÿÿÿÿÿÿÿ!ù,&ÛþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€{„…†‡‡‚Š‹Œ(ˆ“”•’˜–›œ~ˆ$Ÿ¢£q‰)¦¤©ªc¨+­«°±T¯-´²·¸F†6»¹¾¿?½8ÂÀÅÆ1…>ÉÇÌÍŽ„@ËÎÓÔÒÁÐÕÚÛ×ÑÙÜáÜÞAäâçÆàGêèí¾æCðîó¤òñìôùöDüúÿ‚ðHp ƒšÀ°aÀ J à@á‹%:Ü8þˆ!F;|á£ÉR#R¬¸rÃH’)OÊ´odÈ%6ÀXð`È— JÎjF#È–;‘*œ¸´%S¥O'%JµŒ¼—9WfuÊ•AV¯@ƒN­JöËT¬P#4Uða[¤Æ–«å,\œiUv=Ê’íݰbé 3-X¼ñúíË7i¹ƒ#?)|÷h^ž{ß.vL²äÏJ(«äŒYqãçMK ºõdÖ>YÂu uoꯈ-xvÍ…§š-3Ý,¼'⟕ìîÍ\‡Ü¨£ýÒÖ:ûfRÚºa7ßþ à˹‹G¦ÝGðÎåǫ畾îÇíסžtøóóרoßøþþúè€H(à¨K|6ø‚ª­uÂw:haž&¡ 2x¡sDe¸áwtøá‘¤Øˆ¶‘èRr dx¢5)BS£Œ²dÝqÕEH‘`íxjÒ!…ãŒÙÙ‚ž’Ú¨3Öx_qQ&Fœ‰ä%LjŠ8à4E]>æV¦™bg™ZnÉ&1ÁYM6¥Åv¥mª1V§AXfé¡›t “Pï¤äâšwæIÜu‹^×g›nÊY ¡¸@Ö}R2F¥šz¥ qB Ÿ¨ŒX ci*ÚØž§âé'¨ƒþÉ‚¤ÅÂ*g©6ºjžrj¥°r)ë À®bª™[þ‰h¢hй¨B¤^Xì¤ÃÂb«•›Þ$å“ÙNç_iÓc´’ûB§m‹?b©îVy!f.‚á;/õöo°ûºÐ¯%÷ºR­¸ü Áy ¼ÐÀƒ§p¹ òï~«71y‹r1Æ {Y1—ú1<2È%ï“2 'sç™aì9ò)-o'̯¼ÉÌ ë ën8S< σvœ ÐÉJ³Ï×ü&Ó .tq²Ýš Ô• ±ÑGW‹3¦ÜR™ÖŠÐ*ƒÙ\w3ð׸%+] X7ý1Úi«Ûv©ô›Ûz‚ßu+Ç0Ûé§êØqïLw¬‰ÿÔê¯ß}û" ~èñËOößïûø¸`ßþ(W—”å öBà«ÏM=t÷æ§@‰ (0óè‘À "î‚cÒ!x;Ø!‚ü CȻڮ„a3fHÃÚІsè` A¤ÊPÏ4kô/ጫ7L¢“øî„›ròî”±-d·fÌÍ¡²–mf3;®ÍvíØ\Uuç*̸ H -`ÛJÚ%ékd3 Ú” P~"¯ŸùkF[[‡µŒt*þÈ­dí(ÉÜ)³‘Ô‰—Bd«â׸¦lÍ” ;i.SQ½ô%©[]Ú^w5 Cî+»/+±ŽWþ\mjÈ‹ëžW,…… ºIUßR、áí?Eß#Ø÷¾ø•~[À_È-”wÚg$§¸EHÕ¼ÕžÄXª5ñwŸKàáÀ.­z±[ØÈS·EÄ]•ð„NuÂÅÄD(jŠù÷¼!Ñ–l1™²ŠÓr¨ä_îyu2Zª3åÎ I™Ö{mKp Õ%*ÑÉ6€˜Ç‘OùÉK"ì4pìH½ä‡­qœçYý„!Þ“"#ù€}Búíö¤÷üöN•}âÑ­ö!K|£>Õ‰O{Sç~ðÏ€ò—ïn÷–¥6ºôecÒk¿ÙÀÿúõwžkˆ3—äãÛ¾`þå É_{ýƒÆí»ïþ=†]üãGoP|”¦·f€_‡fý'J#Wzø`õG€”Çr˜€ü'r HsÎVN¦<æw¤Æ•:ÌTO:›'‚6>Xoò·*h|$è}&Xxø€,5€ˆu‰fPÇw%Y¶t~8ˆ‚`˃֧„2¨/˜WHÕ‚IÈ„”G…xOèVb%…I¨uYˆvXð…;4iH˜‚bÏÆM[p†$jeÜ“†jƆ.¸†VX[»Æ…P>™öoœ—nvX„€ö† Àdrh|xk(ˆƒX} cvˆ÷—ˆŸ¶BPW‰ŒØˆ‰z7þGUH‰k‡?—øJC‡¦j¨øˆ÷f¬Šøf‰ã†g¦Øh¨øhªW€­èŠj(б€™˜j„Xˆ 7¬gyïvGD„Œ±w‡Â§‡ÂÈŽGxU4pÇcdâ4‹³çˆx—qptqç,dcÍ’fØØmeȉy`YÿD#M`ø‹$Ђ蘎puðoO2uu'ðÈеŽ]Ati·üˆ07z÷h7§Üw)r ¹•&Š{Ì‘‰ÅöjÀà(w'˜F6|¹e’!y‘¿JÞ[Òè@åØŒcÆw ŽÆhyWV5ä‡z̘’Έº˜S~þ˜’.À=CiÇ—}Dˆ”, IKYù†|( •*‰ÁHE)o‡•Y™MS)º˜~‹–aùMc5ihiÙi;¸m™‚o™ô–oP—v”)‰Wzé|™|w‰qÙusI~y~‹Ù‘£˜lP”oW˜†‰“ ™k ™gI™p)@ô‡˜ÚšY…œÙ™ócB˜˜9Ɇ£É™ìã|â„™-™…’XšGGACøq[٭ىƒ9~‡¹7²9›=ׇ¶ivžÓw»É–Ɖ‹¿ù€uä•å·œ¼é‰Xל̑]aè)Ó©šÚd‡¹èe¥=Öb!8žp˜Î%gà ƒþêYãÙ›¡qžÚ™3*>¦Ÿ³Àa¥³`lf“ÈQ󘛙~¡Ï,Ù²Ó +¦ ª]èy€®xC I¡°›Šˆôi W!ZV#Z?ê¡÷ n­Ùœ°oˆ‹–¡G1º$då'ùU£=à£oGW¨ùR¨¤ê¤ð¢ý€¤³óRVz9J›4õ™£sµIPRªŠ„1£ † “¥ÙÖ˜‘Ȧ´æoaÊlnÚ™fa¦Ø>vú47 l¦§Žæi~:‡sÊTºjJ£Ç5ÿ¶ˆD|͵y¬Ç½:Ë»Æà“ͨ̑ò¬Ì0Ð<”ü±ÎìlÎã<Ìÿ,èÌ´Îí чÏ»Ði,ÁhÄT|ÏàLÂgÜÅ\òÎ$LǫРUó<(z´|<ÆÛÑ-íÂ#ðÐ=Ò‚|Ò/ÏÄ‹Òý;þºTÙC¸1=ÐÕÔ;<ÓŽ)¾ì”Ó½Ó5•ÒÀÁkÔ+ 4ÓÌ4æ[4ÐÜ‹ý,ÆPmi–6Ÿ:‹øaÓ¦‡gY ÌÕ㾜+„ýÀ¡ÔávŒÇèŠܺJkÒMí•x]ºh<²mÖŸ…}ÕÌ„4š‘×xëÖýB=`Ô¨,4xEkµ¯"Îé\Ö[»§×ɬÓp«{ÉÚ|nz¡HMÔdÜÊÓèÙæ¥,=Ç5Ö»lÇâø6ÓÉ^Ý<¿Ó6З&`Ü×¢}üÛLÝŸùg¶:Žâ£{ǶíÈl]2¤ôìò¿ÓÄðÆÛ5Í¿2*yÔ¡í×»7Þþä=F_¥ð)¶¦íÝ[«Ý‹1Þ½ÑíL¶[M¡®¼¾ðýtB}Å·›Ÿ3Â(¬°è}Âêݘìý£Y'ÛUíÐÇàî5àêœ2×M¿Ù}¾µ;e-ôÃõøÀbÇ[éÏÅ}ÞíøÁíÔ8Ê¦Í Ó4‹à)âÞSå2âXá1[wGM.g‹Û!þß Œ{ ¬€Žã¢,¦sÚâUüâF>ß3Þ!}0îÇ0þ}ÏUc™½rt\åN®'ºä"²ÆeÛ¾>¶ÄkĪä áò]r'âQ1µÜÛ‚ÛleÄWOÝ ØÈÍ•ªú§tWÁ]€áú°½9AöÀç±ìçõ»(óþ’—ME¤+à“nó›+““}À{-ä‚kÜ’Np${<ëª%0P´ìÚ”LÚ2Âqk*¤ QÙýn»Ý“®Õb\ØñfÌë­1÷ƒ‘3ÈŽ‘˨îkålØf×Jž‹}}Áضܓ˜Ýì<&±÷©x]«Ü½MYÉ}ÈñÚƒÜyoú{gö M퇾ÖÓ¶l§>YôyêŒz›Ì®Wä»4j²{Ú”ë®Ù>ÝíÚþ¯Éº›(îq^hþÒ8çžåŠÈÕ‚]âCÐÝyðnèª7ïk¾BF )ëš®ÙÆðþ~ìyƦe«xo³ÑËžôŽÔŸ©Ks¯±ZòðòÊ„0oò ÐTBK©Xþ¥óð®‹ìQF…ü<®†óœå¬›Ï£â…>ï¯ëÞô«å U(ŸóUªŸòK÷j/Xó ?‡4œí_KôT˜õÚÅ1)k?^ìçv«©gSbÿÕ„¹ói_©fﵜÚeù§÷ßnÈýñóÏ ôú:w÷QŸ¤¬Y—Uߑ׫$9r}v˜v ¡0ž¤9{§¨G:€¥}©¯RW­ka+“ºŽ’¼c»“¿‹·µ;¢ÈšÆµÉœËÏ-°…BMЄұ+‡¥Å‘,ºie¸^Á¿Þ×Ít×ïðñ9¬˜þÕò˳­ë÷Dûüÿ t@¯^ÁÀ† „À-G¸þʈ(±¢Å‹q"Ò¨FY gxœAñ£%“(Sªœg­Ç U†Dx®’šK+£áÌɳgÊ—ìɰ)sf._+J®T곩Sh@ƒFó€QE’î¬Je+ׯ`]¶4&ô讞ùDÖŒy2¬-¯nãÊe3U*Í‘9¯NÀ«3.Ó¹€3» (ºtyõŠ{8îÓ¿‚# ®+•ðP¶÷"éØ)dÉ ãR®Œƒ(Æ´GÅ5öÛ9´ëÉ–Ÿ•¥éSó·¬6â$;šxÛªT©æW™%JGêÐ¥’HÕ7Žø•H'+®ég)oÂØ–H4Ñ%_ö8æw#y”"_‡þ)©D :Wœ-T3šˆª§#™bÂ×áwcBØçþ¤¨âQi€ÊÒliòãᱦj«›V¶É¦h:ä©C@¨Å”·ëɪ–Æå* ¾jõΗ}+-TºÞ3›[¼6ËB­µ رӆ›QµÖ"»Ð²hûí5ꮸð>an'ó„.êB,)ÜÆëï¸&Õ+^ùš²/&ýþ«0'Ö–»òî5 /lñ ; VCQ±<_,2k¬N6Ú\“OÇH„LñÁ#+\2«Z¡üŠÊhˆËËðóÏÌL³%)[ô±³«Ì-3 4í2«´@eUÁ†ÕôVëÇ>#ÜõÓÆ˜éÔUsôÕFTæÄ½h;ýíÄ`kþ§{ø’=ÐÙxà±ÎlÝÏ×Y¤÷ȳJ ´×nŸ|jÄlÇ¡wÛ‰Naá†ÛýàÏ`îËVÑbÌãM.¹ÜdR~xÞ‘ë wœâ·  -ú褋-5JšÃ“û ­?ðzàX;íþ^w]ЖëžzþôÎÐïÛ< ñ@ +uò/¯®7ÎK=êÒSO»õ¼cÍìµpÛý‹ïþ?ä#úŸ«°þ6ž¿¯¿EeÞný=SÀýXоýðÐÌÿ–ç8šß; ó`;ùI€Ù“C'ÈÁN§|d`0è½üu®ƒ(ÌU{3Ôl0…0$Åé‚å­‹Ì)þܘ… cÈCjIDQD ÜnȆ´è°‡HôáÝ D7¬‚Sôœw˜Ä*¢' ¨„?äÁ ðy´ÀB­HƱÝZôÑ£îd¼ã‘J8ÏiaçHÅ2Ú‘aD\5±§†¶d ¾è»#žðŽˆœÂ F¢¹%hO5Òžô9â…‰Ìdºòˆ’g“˜šD¾Jj€.¬£&W B,z©†”ìß™úG”RŠÁ’}#+“¸Èa™‰‹¶‘qbL EÑ„˜Ü¥{©¯_†ª‘x²^-e¦…D—ÊŒ!3×E"`Rs’'º“™DÙ•Sæ ™Ù¬â6£ÕÍgÆò‘ïþÌS$ÛÒ l¦³ƒëÜNh:T•žHˆRÔLc°´©´{*­ŽÚÎMµ+Ï*VG¦Õ­Na‹HúêD­*Ö±Z¬¬Æ¼ÁµóM7F”QU]ª[úR˜ª% eèvnÑD„µ­{õ\Ëy™^Ô©zš%8õÉU! 6±ðZ,XÁñÍÍT¡üªNKÈTÌŠO³kuþbh=Û#Ðȗ︪ißÚW¿r–µ¬¢i„8Zö•v¶£Cmj´ÚP©”ë­o \° w¸eni)ΤšU—m.ªž²Dy7ž ²g*ûÙj7\Ï…nzXA²×=ÊÅßyO[ÛNúã³w íCÝh×­’ æo±Ò«^6 •kÉ®€«DàŸU­\+k€¼Ýú".ÆøvS˜E Þ¬W3ÌHÖ] gÌýpf-Ü BFÖ¾[ápl=¬âò„˜±)é—ŒqVã˜ÝÇùØŽ—šâ˜ÅüŠ/óˆ5ä ùb?–ÐAú®âÆOM”¥\Ñ5™¢EÎ2þ…Úᎋ¸|{Ûæ„Åì27C¤Sž ¿Œ,³%ÎÐAž²»ìq•Îy0b˜ï–2#ÁÐ9óߦ èc®™Ð&QF$->wCÑht¦8hH7…Òˆu¢1í®8÷êÄWž¢§#Sc´šÏ––Ãð‰jsÚΫ†Æ«Ÿ±ëJÇv¤[Ãnk¹Œ"džõ¯5ì?Ôº¼†,öWz jûzÖFÅö±žM„hKû)ÉþG¸C(=TPÛÝîô¾q‹»pŸE4=i7Ûݭp7@ô-9zCáÍoÆ·'ø½ï{gÕßzÞó @!ðzßá"OÕ'…maD Áâ ¿¸Áþ+ñIM\_¨ß`íŒ'üá‘Þx¸ú{½–Üá(79:.šÛŠÄ!oÀË1±s™Ó æ)QyØ |êÑØ<ÔB÷9Žþâ¦ó<é'ñ&£ÒóRT]éP7PCÑ!õ…}èãâÓI1v|gÝ9ñëº×ÅÅò4Ǧìd?»Àቴ}rW“Ú‘Ç ºÇýë>Ïû#úÙG‡’R­‚§ÒÞËׄÄóð§;9KyÁ~‹~ŸÜÝWáx]C~j“@9ªø$\Z‹wAè ®t¯þµ‹bRg‡Ðù ¥^ä¯g}às/Ñï†';›w=é^ûwdÞȵGÑ#?Ùõâ—çö?ç}Á¥þÏæä ²¸ªÕxUÞZ~8_Å’ßú<Ç9Ù:|ÿbBïþÝsþ[Ÿ¸¾'½öHpèûÀCǧpç§I§ß ö í§0IgrB7x^ûGL®ezøuhÔ÷3PÇO²Ty27ø÷€5v€¡ðîáP¿çr\ÇzƆ"“u·$öå÷sf‡‚Áᢂʗ Å${kÇn4¨{úcƒ—áZÌW]]õ 2(`=èƒîsv…ó$!8yÒµƒÒ–„Þw„øzM(„˜1zBD…c€äD€E(|?ˆ…SõÆE„]h…Ȇáõ‚CÄ~nعG9Åoh~߆Ñ|TE^þ˜*r§~½±^h({”ˆCŇ:ˆX†KÎÔ€‘4UŠÈS÷Q톅·uvuˆù—()£èy{øpä-œ(P„b„Øfs8[ÇöŠý׈¥—‡ó!Yá´ùç/¥øx<£}]8J…÷³(.Á¸ ÏØQ1 D⥋ UzÓQѨ&Û˜oÍhZÓ¸…~tŒi8‚ÑMÝH%éw1¸[jHŽfpxª…ë$õØ ÷¨L/À…ÉÕe‹d‹qørðˆÃXÙ‚Q˜‹ ™‹¶¸$¿ø/ŒN$‡ ÇвЭ¸‘„%&ùØ"9L©z GŒüÅuþN(]Ÿµ…8"“0‘9‡¢$†ƒàöt¸^0q<5Ù‰=™FÞ!™MEé€Ô©8ލ‘À犒‹ '“ìp”"y ™ØF•ˆˆ½(•‘§“®&–ñŽî”†)LiI’ve•úè–3—b–rʼnä§u Å%(sTÉ rÉ"û(Ži‘åøG YKG–m¨˜Ð—è§lÁkI’9ið—oɘrà˜)™Ø·’k š”阙™WšW™•‘õ“¾Àé ¨iš5›€ ™ïeŽ½Ø‘#• ©™Hˆ™œ (ÉD¥£‹tG ŠB›F)—Á)œ¾I|ÑéÕ~Ï©qÌiÓùt­ÇÕi~Ù™‚߉×iQW‡tãY%Ýùtá ~éÉŒç¹&í)žï)åùoõ‰Dï9Ÿ-5r$Ÿ´3žú‰‰üiþI=Ì X¥p^7 oiºWö† ú—Ê—ºžI —ºY¶¡ª‡¡Š|êž ¢O6¢€¢&*f÷É-º¢0š¢ú¢1Z£ÇP j£:Š{4 ˆ9º£@ê£Ç£?¤FJ¤Ú£Gº¤$JfLú¤P¥R:¥TZ¥Vz¥Xš¥Zº¥\Ú¥^z1 ;libwww/Library/User/Architecture/Library.gif0100644000076400001440000003017505774674302020634 0ustar danielusersGIF89aCÉòÿÿÿÿÿÿÿÿ!ù,CÉþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËhÎÎ9Ð ÏÔÐÒ1Ï×Û Ö3Ý Òâ,åÙ0åÕÓàêÌÕÔ!ðâóÙö(ôÞîïÿ¸ô0ÜÀqîöÀ‡n¹ƒò]{èA¡­† 0r°(þï :Ž$ÎýÙñÄ o¤tA±ƒFt$µÔ%DL„>ÎLQ3ãN ûnŠXYƒ¨¹„?M–,X/i-Øáˆ”Þ7„ĺmâHˆR©6œÇô%TŸQÁ}몶ª×‚lszüÊu+Ó»bå^åzÕkV¤Sý‘¥ÚNäÏ–>ãÜËb>œaß>Œ<7-ß·h3 î§ÙîZ¿guŠåÜw-Ú½ã<–®fÆ£¡JvÛ:/ç­Ÿ¿ÞN½ôl˜Ni9vMøµnÏÄ/#Æ|—y`Åí°N…®š`íÄÏ«ªîÙuY∛Ž=»ôâ=¯SÇkù;nÌB])ìžùúð‰¥â‡˜¼þy¹ÛõÇ›hô XXjøh]@ü÷žÿ!( sÓ1h`@õ§Ø†ÁÍ2ß@õg!yZUè_KZQè`…°ñvˆÆ&¡‹™a(‘‰â †á‰#>¸"‰=ÞhW(>¶ZŒ¼œ5¤{Þ‡¤hìI–{Q&!“2Y¶#[ÂH#–/©Ö”*ÎÈã’ËYYc‡Õe{k “ž—G^¹ee½ÑIæž"·TTö à~R™P–U:Î;|Ò¸c¡fÚÖ…H êc‚ÝUº‹Y"*øã%‚ £v®÷édÕ)jÚ©®1äfJו÷W§åA*ê•8®©&§q&¦I ™_¬9JH™¥È…þ•«^·–©rÌö“±ú`úáJF.;¬o²Y™­¤µ•ìnÛª§›´lvø¹£ Éa´Kªjahš ¡™ê¤£¸ÍŽ fªŽ›g¸sy÷©½Mžä—mš•oÇCL|WŒ ÅgŠ’w¼ LJ,òÈ$—lòÉ(§¬òÊ,·ìòË0Ç,óÌ4×lóÍ8ç¬óÎ<÷ìóÏ@-ôÐDg¬ìH­4 .úºKGýXS>­´ÂŒJÍ=NçEfkPÓ¼SØZ[­Ó ‚zõÙeOÍu£‹6]5ÑX·Õ\ÍÂ5MÛ޼ͨGYwMöžLÝi×h+Ò|wUÜÉø …þpøã€O¾÷ÜsÞ3Ö)ÏæšÇPùå£g®0ã‚7Þ7‰qG'¹ç!œŽLÝ9qÎà´û 1ã‰ÏnƒíÇà¾9ëçÞ»ïyw>é@¼1Æ¿Ž|èÊ»þÅôÅ þ:öÏ!«½ÜO¬ãßYmVÖèãwQ~ÎÑ·oÄû8//ôÛÿýDäÏÿÿ<ðxð€20 Ø2ð(p 'H8ÃQð‚, 7¨ rðƒð G’ð„ 0! O¨Âް….ü c¸ÁÒð‚6¼ás¨Ãò°‡ë’ˆ‡HÄ"²‹?ÁŒ2ãÖ*h9]` o„™ýŠ2G2npŒ#Ëæ¨’ÚYÐz´B QÆG,‚ÀŽ˜¤ WVÈ>Jï´Pd$9²FR‹”%'IÈ+Б–Ø$'MfÉh`²³å:„ ÊŠ•Rž%%ZyÑ–Ì@žçfœøÅ2“°Àelé+°¹‹ÂDî\B¤a¥²”D2ýv¨FÙ²šØÁ4‹÷½ÐÍ+vUz&âµY &wˆf$¶ÙÌp’.yšk$;»×Íl‚ïnëËðì©O´9ŽsP'$æI°jþóXëAåTO€ïxþþ¼ç?û =tv˜®Xh7ÿöÎÒtý…ä¼É‡Â“6ð,'¼:z:"¤EšL#ÊOÀ´1ï”[æ"JÑÔ ÝhK1ÊŠ›Æ³VÆô”6E6R{>Ôz4åéOO:ÑÁ¹×0*´JfózSýëŽCªZ ÕW==¸j¶ââ•<0¢\çJ׺Úõ®xÍ«^ñêV"`¯€ ¬`KXÂÖƒ V%ª)Öj6–ö ¯œ°\wXT~ì}Ô-“tØUZ´•MåÓè“#¨¬ÄÔd7!YÜ‹²éT¬*2‹½kæó©Ö@[ïV«‰Ö®ƒ´äô‹uΓZ „V´Ìþœiß®GQŽºó¼Í„o#RÛ{ ·SÏq5Y>¹|*ýZi¡ËY›p£ºP5©DáFÝ ¤• ½®5×ÛÜâî§æõ¬è¾k]rèVÌt¯lgÛÝä)·¾á´­G1]é>³½û¥¯‚ŸTãÆÖ²± èX±CNŸ©ä-o~1°a OXqì%ñMÞKˆÁ4س&xñ%æ¶ /¦¿ú¼¦Ï P °¸Åœ‘15O dKÐ8®%HZL ŒY&¯|2%ø8Ygö¸±_jÀ!ÎH9_ž•±¨Æ :e˸^˜]°fI²Ê4ख़ü‰}´yw†Ä›=‰¨Ò¹NÉþ3 ýˆFÂy~sšùÐ!p’«u #EÌ7q¥bæ!Ïxþp®@œw» >ÿ˜ÄK~iš§æÊ’ãЇ Á”{!èÃÄv'NtŒëÁéÁ:=©Îôm_™PWqØO1öûÀ„Z‡¹ÒÎi® ¡…e¿6bW¾ó–Ÿ›Á¿Î»Þeìýï€âOxÀƒvéo÷ºø"ðŶʚÄ;h¼_ÏÉÁòqF|rh(“í8õV5}ÑÇÚ‘,¯yg!`ú$´þë3 ½dz8Ú ì Ì@ôgÍa‹è˜>õ/íoÿÞW¨ÜݾyÝ‹)á'5÷»¿…á§_ýˆ®»êþ›B÷Ãôµçíí·‘ÿúæGüGj7€ªõX_ dÈ7%G#!WeAzñ%ufge@Qgò{‹'€*÷?`Gz„OFiÄÇñuVŸ…pý‡¸$iW&g⇂©Wu1NÞdctAV¹b®9áš¶‚þD*ÀñM ö}0haÙ³_ÁQè$NIÈ`þwƒ]WtÍwbÏÕS(æ\aµc'%_"h´¥[T%aô•‘ç„@2†c=NUa c ˆƒ$H5Õ…üÄ;|˜RRè\e†£õàTˆ¦Xz6h‰Y˜ƒ­V‚†à¤‹Ëô‡Ì%}£X`õ\ˆ¸†lØ„n˜‰Ž¸S¥Ã‹¿Èx³FÉ·Tõ„‹“ƒMÙʼnº$U9ÆzÈ(ŒÊHŒÜXŒ/X«hQ<ˆŽªU°W‡Ñøs ƒ4;?xCÈaõhˆñ”[û´`wRTsbuNKÈ„æXK¨;v G%a1ñbwX‹yè›|cp|˜u‘ïh¹§…©¨|“¨Šß h˲¬ê²Vë´\ [C‹¶:«±!‘tRÐ" %·Íf·Š·«·B©¶T·6ª°X”+£ƒ›£…o‡›sfë®¶ö’S“¸·'¹qE¹”e¹a„¹Œ;µpû¸k¹¿…{ k£‹'W­#Kk‹s¥;Z‚»ºe˹-[µ&ë·k»V lbû$¾û»À¼Â;¼Â»Ä{¼È;¼&¼Ì›¼-мЫ¼,½Ôû»Æ[½Ô[²WÛ¹`½)¼4à½(¾ ¾'@¾$`¾Ëë»þç˾ßë¾3 ¾% ¿{»=:ðëùû¼пÓ;¬ü¿ûûü¾0À,¶Ñê, œ¾áÁ`Á ŒÁ0Á \¾¬¿¼¾œh²{¶ÂÀ6€Â|,Œ¿8ð Ã*ü½1ìr%ì¸ @Ã5|¾9@Ã<¼AÌCLÀPÄ6<¾:€Â¨{¿-¼ÄJ Å3l¼€ÄFŒVœÄóË!ÜÄ@{ÂTìÃRܽa|YÅfÌÅb<ÆP9¢êzÆh,À=€Âp¼ÆPÇv Ãs¼Å{Ü‚o;» €Ç|LÁj ‚LÈpȈ|Ç> È àÈ"ðÁ^ܧ—öþÂM#W£Ç‹ ¶×¹›V!u!LÃӥɌ €¨d^Sʉ eêÒ;<Äd9‹+É»ëÜ#ÃMÕ‚¨LÆrls_ÓPŽã,Ê«§ÊSŒ™yʼÊõÛ!Ë£ÈELƒ½ˆÅ~¼½€ ¸œSºÜÀDœ! ‘Í3µÁÌÌ;Œ‰Tbh̼lÊ­ØÎLÎÕ „iyÎê Í8 ÌÛÍm¬¡ÉšÍøüQ€‰Á¤6΄9ÎMÊœŒöŠêlÈXŠ YÅðì|ù—ֵΠÍÍÌͽÏF¸ ÌØ.=РQÎoC†Í¹Á¡Á<ìS°§ž`üÐÍ4&éøZ½Ó™(†Ùþh˜<ÝѼó"<ɱŠaþœÐMÍês~ÍÎ8­ƒöHÑ*ÍÎËèUÄ•6Õ:6ýÄœl&-Çý{®Ïü·ØŒÕU½QaãÈKíÕééÑ5}Õ8lŒ¥yÖ~-Õ1ÅÔýÑcÝÐä¸Ò¹ÐB ¶k Ò¤úÀoûÜi<Èjýœ¨ 5¡lΆMÕƒÔFVàžAÌÄ>ù˜¨ivG­ØfÅØ ýÏïÌÖõ¢–¬ÍÅÙËK˜)Ûa=Ù¬<èÜe ڣؠøÛbM0ôœO;H‡­}.çÈýY´CËk›@Àɽۅœ×l\Ü7¼Ì}+Ô˜ÞþùÙn ÛãíÝ?,ÞákÕè ß›ûÜ ÜïÍÉlÂúœßîÝÞ„ àíÂòMŸhÇ®ßÖÌßý½ÂWœàô½ÀG<ßÊ-áqìà »à:Üà5pßÔ-àÞáîßN â½lâédÚÊÞñÛÃ-NÞ"þ¿(>à,Ä3δêͽzÁú;Â%οuÌÁãä~ÇENÄG>÷ݦ3`B¾ÉÓ›äËÅR¾ãÌã‘\å¬å[Žå$¼ßnÈOnÀc>¿e¾ÁôKåG޾|æUìæ‰ çf,çhMçqÄHm«$‹½Ù»Ä|½ëûçÌû¼‚>èQ^èÈ{½ˆ~¼Ú‹» Zþ+³d+µ`žºn›»—ÞÖöºËä0`°‘îÆ”Žµ»›þÅ™t©žµ¥^»´«á˜ë¬.뜞Ãjgé¶®ê´N0[Ë{Ú¶½^ÛÅúši{ë­.é£îŸÉ®çº^뎾뮵«Žìanì°Nì Žz•^íÚ¾ÞØ®éÒ®ì¯.îÞ>í’îÐníÑÞîs‹êãîìçîéÍÎÏå¾îHkêò>ìïïöìèžïNÉ<°ߺbwð ¿ð ßððîî¼NïÝêïÜ~ì¸îÄý>®{Ëþí:Þ´uVïŸí"¯´Að€VòÁNíŸÔ¾N­*ŸyÂ~ñ¯j0¿ñ+ßí-þ¿ï¯ñ϶,OóŸë>Ïî9nî;o³žÎ·bÆô){·‹+ôÿžîŠ«¹‹àôP›·VóYîé†ðp°õñ§õ3óÚ}ò# öo ö!È4jÿìF_ó§>ñ?ÿôAoöMŽö(0|ß÷~ÿ÷€ø‚?ø}O„øˆŸø|ÿ¡* øŽÿø…÷¤^ì2ù6`ùk€ù4 ùüœ_ùŸo÷Iÿ­z/‹ß§©¿«/ð&Ðú:0“?ú&_°Ï·ÿ¹û²ßùÐû@°û9/õ<À?ÇÉË_Ì$Ðü>ýÃ÷¡¾´ ý?€ýX ý¨ïú¦Üßö´ßµþ¥ÿûHþU€þ±ïýžþ*®ïJêÏúʯóïÙíþ@?þ[þpÿºÜþ0²!«½8_ª»ÇÜ¢–èw¦,ɾž ÏaÓ®Gëî{½.X’ÁˆÂ2é02iΧÈF.–VUvÛÀr3^M4þVÊ̱¹£^G¨[4cLrѼ^$w³ús{yxuGPCzmI€>Œ~‘ pVŽ… „vN›‡”B˜xs# “Z0§`Ф_¢ˆ l±–R˜„£™¹ª¯³&E2‹‚¸¦%¿­Ÿb¥È¦ÇÇ»@”½ÀÖnµO·º£†Þ †Ø<À;¯ÒÝßĺã3íä²ÃáÏþàìõÊ/ð‘ü[ÚL¸­S—Î[±dåt(‹FϽi|ÞÑD ׺‚Pèk‘ð‚¿,‰pHòÁW:NLU É»)‰¡©%4cFЭê§RRO!EÒ´çòäÌŸÌä™lhÓaD‰+›µº¨&c‡˜)PšÑú$h(VMm"ÓŠµ'·‡œîA[vÖ ŠS×b\*(®\ð&ñúÃÑE¢ .zŠôOAk]B„‡U/¿ˆ3U¬˜‹ZµÂó óõQöfßÝA}:ååÒøzn挺³ÙÖ8?.íz$êÔ*W³þ\û5o²gcî uðºÍ…&Þ‘y¢ØÊ‡Ï:žsòèþH7—|÷OíR[¿afx>çš7[›zz ï=Þ®››üšõÀðÏŸßqêõçKG Qà ×5" úí§Ð‚]8w`ƒ~P8Ý|Â`@Zèàƒnx¸C†.h„òÝF" nsâ‹0Æ(ãŒ4žøá%5樣ŽY¬¨ÀŽ@ica>ºõS‹?yãJ ƒY“Lb8^KâVe•P‡T–Vp‰‚— Ù˜WŽø™ i ”šÙ·¤še޶å™qf&^›TbYg™púôäž5©8%Ÿ€êùç¡…Ò‡è‘nÞØg¢Z&I'¤¦9è••BÞœ‹š©Ÿ6 ¦J¡j êþ¤DjZê —jª Ž©*›HJà«´rš*¥¹ªÖ臫âj'©éZh°Ãúšç›ÂÞ™ä`ÆzÚk}Ë:ÚliÈF&+¯°Öú«ƒÈ^keBÚ’:k·ŒV ¬¸¨F»m¢áê­ºà²+ ä«ï¾üöëïšÜ:›.¡öºËÂÀ=1l¤´è*‹pÂï¾ïmË ±ÁcJ±¤ðaÆŒm«Ì~lîÂWŠ\2¼Óvd+¹*¯\ÉUâéžñ²Õ±«5_ƒ‚Ë{½s=v°ÇA—ÃÑE; sÄÔNÜt,Ok uIÅqÕL_µ[G}tœ]+šÐÌN‹}á.;þ®Ÿ¶)êTeŸjrhȲ-´ÛwÁ­ôGþ0’µRÇÆ¼ö·û¥ýj;D[UR!9mbCßÈäÔå'QæDÞ8εâåøý6àWj¹;3õ×23Núï]z ¼ñ“Y4ÓŽ›òjÙn<]Ä#;⟌§Õê祺¼°ûKýê§¹ºLÎ}àƒˆøðdzéÍÂtcëßVþˆÈÜrlC|¦–h(&-QóÇ7”YK‚_À†Ÿ@2iŒ‡Bÿi`…þIì¸)òl@«¡T˜:àè8œ[Øô7/þ ±:7ÌJ²Ê‘Dµ9ñ^ç»â@Ä/u¢TU¥¨=ôÅp‹³@›ðÅ›Œ¥r•cæ†öB´‘3< ¡ˆ7)‚o îë`æÒBÇ6ŒY\â¹HAa$ðuô`÷ 9ºÝa±tÒCä"v5Æes{ 1-”„±|L\Z7ÙF‚Å(ò‹Ÿ$G(8CÂP“ÀÈcYi&Wz푃 'I6¯%—̤ùx¹öI*– L(ãF%vÒ˜>¼d.•™JfròšmÛÁŘ¢enÓŒÈôfÝ|é†Î`œ¨þ,áþ©ÎfÖ²G´ØÙ´¨°D®²žR¼'¤®‘M캎úU™òõ²˜­Xf'«ÙHt´ 5þhiwIÚÑVÖ±©*em6ØÏ¶õ¥±%©`]ÛUÂÆÔ­  —pãÉØßâ6¶«*F° Ùâöô¸©].´xkT¯š¬z .‘Ê•×Åf·³À½l¶òNïζ±›Íí 4\©®6Ø=¯zÛ+_èv·®ÀR®~÷Ëßþú÷¿°€LàøÀN°‚LÜï^׳êm„wJ]ãN˜³v®„o›aßvغrÅï‡+öˆ1kfºÜp•w½û]I>ß_ õ_×ÍFqTóáŠÑ'(šW•–`®†4þâ= î6ÀÝþV2‡©\jt²xr”Ì;.ÛíprãBùÉí‡èê!œ ¿k«7(À¨Râ~_Åe–ðe& ÀTã¿ïp§Ø”[)tX7—~S¥³¾ Œ{œ ô(sš×œ…L¯»Ó÷ …x Þ‚žø9ËXÝež‡#ã×äÕù‡K ì‰Ç¹Ý/ rQ_¾K2(=³9ÈUl#uñV}°ém =È~➇ÎÍÿ1ú ß^« þïYü‡ž÷°ï0TïÐ0Ê­h0Be~ó1þxµ4'ÿîYiãôXûûFóH¹^Ó¬Ïååk”O¿ãîÌ {üÔ7H© qÝ~žzä¿òòçÈÀך)0|÷%ü‡f7sµÓwn“úG€ìL.gñs3jçHä5QxöW˜eM÷eÑ'?œà §=o4JXuS(˜Óô-H¿Ã€dç$°$„w!w¸·‚³3I³4;节Xt8¨w*Guçw¿I9(‚S(ƒ3(iN6R=‡A˜G‚^˜q!¥‚QƒKèF™7FgoÕ‡…IV„¡nè}!†qe¯§mzu(‡vv{øcÏþ…„wÑf HyƒH(e4VƒEmæÖ?4X~ÉVi“‰le‰H‡ÊV‰ê‰’X4™8€ XCžX~¡x3§èº¦l©¨ˆ#çf«Èl­±8T³èŠè‹µ¸»t½˜i·ˆvhâÓhOõ‹gŒ¬ˆŒ SŠÄXŒ‚gõgÒX£NÎøŒº§¤x‰ÜÈ߈BÙŽtFŽW8væøM鸆踎 åŽ èð¨Sóh/ãX‡Asú¸výH1üøº#ÙrÉ.™iȸ²ifyU8‘Wg‘ –‹IKé^Ù‘ ’æd"Ù%Y]"V’þy’o¨‘¨W|0“29“4Y“6y“8y“õ‘½4’ö•^µÅJ<ÙJ>IaFiY‹4”Û”½ÕZG)DJ©ŽáU/ù”ÝØŽoÆ”(é”H¹GQÙzS™>UÙ•hô•àX”di•TéMfùŽ\ [MyHl)›ö–@i—kÉLmYŽr©•ay|ñˆ•Q2–p¹•}ÉK{PhY˜¹{yR–‘Iw§•t9w~ù“y‰—”˜I¸˜wy˜¢¹Ižij£i˜q™šIy™j•™j)– )ެyo± ›®™–OTšLÅ™€éz¡Iš³Ih„ù›¨Yœ^œ=y›Œ©™¶‰˜ÈI”ÊIœ“Éþi¹ùœlF{obe˜¢XÂÙ‰ei×IˆžŽbžùõuéIž²)˜/ /ìYž+©yó9z)ž× Ÿõyyû™{hŸ‰Ÿg›yšÓ‰:º©°  Ú ú ú ³¡Z¡ š¡:¡Ú¡Ê¡¢–èžÀ BРk`¢>€¢f ¢;À¢_à¢:£\ £8@£ì™(° [ 5ê£V¤YÀ£Aú£Cj¤A*¤ã'  Ú¢Jz¢O*DÊSzR¥P£Qº¢[úXZLÚ¥Ešb*¥TÚrR¦0 ¦gJ¦‘À¦Âb–pÚ¦+J s*[zéàþOwZ¢vz¢ ð§Ãih%@¨uúˆú¢‚ªqðG<=g‚ °¨@©3ª¨ƒºøi©—ʨ™ê©ƒ°…¤xjé`ª4€ª ª3ÀªË9Œàª, « @«;š¨~"J^ˆ`«MŠ¡ ¨*•¾z«7 ¶*¦WxG@¬å@«Åj¬)že ú•,Œ­# žšª™rD‡<î´Ü owm ­åuƒ¡§±:¬ÖêlõÖvÀ®Ãâ#øÚ­—A|Z®æz¬@Åw³*°áêv·Cë*¯$zªWgAöix½ ®-™®?ê)«ˆz ›J;ú«/À¦V1xþm„ ÓºdwèjŠtÒô²:®z­%KxA¸­­J‘9kŸì¦-wº¬E'©0³kGp±äpñZ­ +³)4× D+ [¨0»ª;‹W qއ?Ënäã¬C{µ¡jeýöG²F(z‹×²×…« Q«7¸CÞ°kÚp‡cð¤[›=“šÒô‚kµwÛ®lq@h·Íhl+/¢ÚuбÇ„ãj’µJ±¬’¦)¹õJt`¹b‹YF{±‚¶J«£IZ¢ºº ‹¹4…’št„º.ËŸhا‹†"[¸þè¹NÛº¡‹£©©»¸KË´cëAg±Ö´¯xþ±»ÊŸÒ‹¼´{tN›y±C¹ŠË»+½±[©Y«­‡û²u{¹`z¼³û©®+¬ë«\§w½äês¾ì˽êk¼¨ ¾ú­÷k¿U¡«$H®1ç ¬ë[¿ö¸©Ì¿~P¬JÊ|Ÿ;µÄäÀûËÀ \3rŠÀô£I£J¾0‹r)‹¶ú¬n@Â* ^‡ªÁÌÁ˜j¥,Õ´º‘·½ì¸zÁ¦:ÜÁ-J§?ì¦' ÄA¼Ãè{¯N*¥(Ü«Kü¥^ÚÄK<©PœÄKzÄ÷Å»«ÄGÚ£XŒÅ ÚÅHªÅbSš6z£eœ¤ÓŠ£CêÄkzÆJœÆnüÄpÌÆ ›¿³¢xþ ¢x¬¡z¼ÇÚÇ~L¡€È:¢v|nµÙ›Š¸’µ œV,œ‰ì˜ÆÈš[œœ¼)É‹l˜ý‰È)is‘L™îBÉiɇ ÊÚœNDÊ™k™— ™,Ê®ÅÊ–Ûž§¼t…ªÊôDËCxŽ·Œx¹¬ÈJÆË‰ëËŸŒË¡LªLÌŒÊSæÉ±¬ÌÓÂÌÎùÊKÍ•9Íœ\Í¿\—ÊœÒ\ ÍœCå›m±–Ì٬ɳLšè¹²–“ðÏò<Ïô\ÏöŒ`•LŠ!›n,©³6Îi°ÏØÏôaíͯHнûa°^öЛG]Aý¾(sýÈ\ã|Ðí4þ€Ñú¨Ñþ’yžWÒø(ÒÁü$ &](ÎóÕ -=/ÊP6ÓðXÓØd8íŽ:ýÍál/=½Ž}Ïôüš\9ÔéØÐ×|•øû½×‘L-• JmŽS – eÔþ¥˜pÕä˜ÕZQíüÎm`Žbí–/g Õ×'’kÍ—†:]£iýsíÕ¶|°ØÒ Œ×ܸןÙ×-)ÍÕé¾®ìÔ‡íUm ØÄX΀Cؘ\ ‡-Ù“ýÖOÍÍHíš}hÞZÙØÔ´ ØiÙ»éÈÆy¡bBÛA¢¦\ʸ ×9$!""6]Ƕm»r ÂÝ´¯}a¼}(Íu]þ˃‡™~­®sSÜêuÜ‘@ÝŸ}¾¿=8ÓKÐGÔyö‡­¸}Ém)MÚª»7K?LŸ†3ÞYÞ;ÑÛè-µ[…?ŸûÜ®Ú_&ßæMßcߦ½Üá w@¸uN(±Ð-Ò Zàž£ÌÝÜÔ: xߣ ð°áÕáÞÚõâ ÞžãyDã¥ËßÑíßT†\!ÑÑëá.þ˜0^SÊÝÊ*~X<> m` ,®Õ/ÞËÞ´ƒéÁ_­ãN¶t°§Û=ºX7 MÎÖ[„ \žÝÕS.‘måI†åö*»csðåt]Û˳pþÂë·Ý\ÃÕz¾ç|.“jî¸ssAÅâæg°Óšº)Ä;®¸<Å,päwõçI1X»îúæ†..\y§ƒs>ƒë<Öéo%év>ém®u…þáUÜÊ¢NÑ„4â¼ Ã]hžæ~ͬÄdéþ#ÞÙn´C÷é©Áï]å Nf<Þ³un†»w„çqnÌP.쯣ÞðêÐ}æÉþßó!í|}œKçл¼ÊK‘Üßßþë þÍé®î´Ó­Îê }ëW¾ç-äªÉàäïò®é-hmï÷^àæøð˜¤¾âÒnÝ·Ý˶Ýð—ñqpðN®ïd®Ìþï>‘Ï!Í¢ÚT}To‘!oËž-ðFNð.Û2?# ÜÖÚݮР¿Õà¯óOí¡ªÎ ðó@Oô‰µäâFôAmÄy¾%ÆßNoó-£]eœmEM_õië•}®·Tïõs©ó'Oö÷‰ö•ój?òm_ôlÿö#çÔÓõrocŠBv÷X¶óó.*qÏ÷ÿ~-$ÿò9/øoöcøŽÝÏgÏø†Mö{ùç¬ö“Où¼Öøuø˜ξ­>—ßùSùØ]ï‡/úùì¥ø§úìžÑ‹ïúãGÙ;ö`ú²_{YÏÎ[»ÿ¸Ÿû\Ôûø—\ÁþüÂ?"ħJïÑ8€üÉÏòØeHý¹oØ_V„):!ûøÑÿFjÌØ÷ï`Þÿýá72ÁXòÙ|þèOj9“ôÀåþïoze2þ¸ô Ïùõo…q²þºÜ.ÊI«½ âHúþ`(Ždižhª®NÁ¾¦ Ï’öÐ8f‡‘ÿÀ pH$ÊŠÁ#2µc4—³ç¦­Z¯Ø,I©eq»ºˆô(-ÏsH 8SÁð¸|¾ö†”]ÙñÅ8lny…†‡txf#gŠˆ7Ž5m fmœ›™e%jƒ>”¦§¨@“™NQ‘«§°z5¬ž˜¡˜¼6´­¯o©ÄÅÆ#²~þ¬»¹ ¾¹šœÌ¾»Õ²”¿ÀÓ¸µ¼ºŸ·&ÜÃÇéêë ÚÊÑ›·Ðð½ã¸Ð×Úˆæß÷NÒðÙ 'j:vRrÇèS¸jàêý'/žÃ ûä¤)lžDqûuqP¡É“qÜzvÍZÀÓ*>œ©ÕFŽiæ›G®Ÿ¹’(ƒ …¢²ÁŽFeJìI³BF87EI#¨ b¾œSEŒFh¨×¯Böíqñ#S³!-úÃhÓ¨‘Z)K·î ±+Ÿ-è‘™^l¯•ð4\¾ïö^8ü-ª v#KþPX]e:Œ©^\ 6Ç OMºEÝËsߨO¨¬$þÉžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸qÚ¨%£ºÒÎÆÐ3þ º´õÑË9“½ hKÕòŒXns…ê×ÓŸ.פ™œîP¾Ç ¿Œ%9íóytUÏ_rw÷Ñìäšk½4S2m‘›sâ¹µ]~y=¶_‚õßL²v–_<ÁßcØs:©%¢\\•RáŠ_e—áQ/ÒÒG[¬#]V.2 (ž¡(z,iGeQcLÑ5ô e6‘Ù‚¤(ä”'¹Xߌ1ŽwåH"|ØÅ“‹ÑT–iŠ•Ñ™¸!ZÖȘ>:I™fÖiÈr}ýÕ×klê…ß^"1œ_þÎ9¡ˆžÉÜ]©<’Ht&*)–÷g • z B|Ì5駇d*¡íãh“hH êªyˆJ)J¤‚¦ª¬Öú^•AŪiª´Úê«®+”®ržé¯ÈþìËBE €†ª˜ì´D±S@³EtJ, `Kí·^`Ö£³mœ½‚«î¸Ä\«P#JB[¹é®ko׺{g¾éçï¼P^àí½ÇïÁ'¬ð 7ÜpÁÙ |(ÄWlñÀg¬1ÛƒñÆ ‡¼i®$M,òÉ(ózÒ/§ìòËépÓ2Ì4WŒãÍîÅ‹¤ŽöŒØÏ&Ì\óÐD³#tÑH'}ÊÑJ7íôrL?-õÔVDMõÕXauÖ\w­ÂÖ^‡-vÉÒŽmöÙ3€öÚh«ÍöÛa» ÷ÜXËM÷ÝOÛ÷ÞHëÍ÷ß4û øà( NøáŽøâŒ7îøãG.ùä”Wnùå˜g®ùæœwîùç ‡.ú褗nú騯;libwww/Library/User/Architecture/Makefile.am0100644000076400001440000000022106133513252020544 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) libwww/Library/User/Architecture/ModStruc.gif0100644000076400001440000002145205774674304020770 0ustar danielusersGIF89aVyòÿÿÿÿÿÿÿÿÿÿ!ù,VyþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„9"‡ Š!Œ…wŽ Œ‘•ˆ—‹˜“›–s” Ÿ¤‡¡¨©ž¥ ¬ª­²§¯«‰¶³m±¢¹º¿£½Á§ÃµÃÄ µ›Ë½ËžÍšš¾ÀQª£ÇÒÅÆˆ‘¼ÕfÂÓÑÏÂŽæÄÞߘèÏÚÙáU×íéÉŠÅÜ÷ëÊÔòcìœ!ÓwŽ™ÁdÒLHÐß?%ô¦)\ˆP²„ÓÄþO?„àô¬ç±¢ÉŒO"žÄ—«aÉ“(˘£Ø±ßHŽýâÝ\ùgL&*)±ôO(ÉŸâfíV² ¬q;š‡”HPVCV” ³ê—PP÷5=ŠÊÍL/z…ØriMŒf%-ZKl½….ÑšË"Tªt\Å Íï+»DœI.Û¸tùØõ´·1ñÆ#ßMeIS­e.‹×íÍ+Ù]Ï·êøvý 3¶¼U{f”–CÚ¸}æ£r·o€cé-Ü·Èâ`ˆ#Ç}|¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾¼ùçÒ«_Ͼ½û÷éÏË·¿¾ý÷óóKŸ‚¿þþÿÈùw‚€˜% hà‚‰)8‚ƒ Fˆ„!P(á…ÿXø†v¨ ‡€è!PâˆAˆ¸ŠÂ)åâ‹0ƈ™ ÔˆbŠ`Ð\,æ¶ckÁPâ‰7ú âôÈZ>09BDɃˆYQ ¤e·Y%ÃR™£UNpe`YQ¦PvÙˆèX0æZÉ(çœt¶—jîÀfg¼Y5H6h iæ©Ãž³%ù¥s¾8Ƀ£ài(r%Ÿ15jM …NzC¥X9„iFšFP穨jvf¤&z—ꫨrêK—.Z\K¶­jb&tŠÝ :€†eù3ê?¸þ§ë^ ©uÍ’å!ĺ(¦­¿Ù¢í¦(øJݲMRpJµJ]»Üa°L.ÏN·n¸¦Ž‹­²ñÖŠºÀÍ#¤Õ½+X®ˆX /džƒ¯2Wøû@»Ð)ü/Q˜Ü(5WƒU¾€k''8Ì€·Ïyü09 P’/s1ÂCºñÌ€ r«Q†¼Å]ž˜ìO,)ÿ²ò\x“ Ç$ˆ ò½Š!¦sÐ(Ïë#Ë¢ˆLÔY´A¦Ýtjs jt«Ñͯ=3Pö,Ð@mjÔQ‘u5Iç°ýšnj{pt‹_Ùr¶{·’6ÛËÍòßï¼õËSÿ½v ßúUŸN?9mŠþO8„~õSÜÄly×uc ÂÝÙ>®¨ }—¢xœïd.¸å‡y.;æ¡‹n7ØŒ&b„Þ“WØûg«KMûë›Ã>|ñÆS]»\£ó›»ÌÑÂÀ;ê¿c µáÊ’å6ìpoϽ6ˇAã¥Ëü¹Ó÷W}bÁ_>VÌU^TVø8ƒxœŒ;n#çsMòÿäUxwŸÚi€ÓXº†à0òÇ|‡ë^M&q¼þ PQÌ {x8¢1}ù«™ã:–@Ûm-yâ»àˆÚ§m1q¸ÛŸ)˜w0ûeÍ~$\áõF`4P䄪LhAZÑ L(b!K ¶Æ0ˆCÓœò¦è>ÀEÑþCJÌ!·Ø<â­Ûš›X@RÁw‰;YœáßÖ¦ÎEˆp`b0€^qp ¹!èÁ¥Œ´ÀœöÂÅnŽt¬ã “Äâ¢(eö©„-ëÛúBÚ{Œ³MÙ”V#õSÉÂë%ë,‹Ï‚–¬ (Ï7дU.œkV)0\š5,XGþTc8›V?„v™†¥ ñJˆëƒs]@v#pUµÖµ8à—+Û•·¶•ç™ð…ZjRׂm!ip°Ý¬¶®võB.˜ËƒôºB¾`Ý­oS[ªœN ¾ Èjw«_ÈQ¯¹€{½÷=Ó’¶re:‚`Õ-øy7ãÑy3@Û ø÷›“Å'?,QÅ.R¼ÌÀ† ¦u“"nY¹¬4âœÅ8æ@}çJ$—/ <ëŒx aAÀµ Û.kfd~"ùGK{ “û[ˆ'Ë@dsí°}7ÌR+ˆ&}¶©—½¸Üe}•àªè¬r~ÕµG³Š3ÍkÞÁ{)[ €Ì þ3ðèìb;«YËyÖÁžùœ’R»€f· fh<#:Çl®ÄwÅÓ­:ÒtÙ4”'æˆ,ÓË\™¶Äuu°j»}—» ®€pgMëZÛúÖ«½²—/Á:FèÌZ¨Ö3Ú`El9½ÀÓc..qqÍìf;× +¶´_¤£büzF‰ÎÁ¢ ÑjŠº–€ !-ÜКÛf¢¼îL”- Yß®ö®Y Èù±HÀ÷2yƒuÚˆNµÅâ 3‚kõÕör¬‡k7ð»ßÃRòÄ‚­hBœ­~½¸R Uï Ì: ã®)6ÃkêScúÝ‚ÐøÆ3®r áyd.†R¢äÏxþ“Á_ò>˜ÈNøþ…Sæçg9yÅÑóJ¨Çw•=š‡!Ý(@z¢œ®m‹CÝMNk:CG`u&Œ»åÜ9¥$þïÓ übçÛ×+2©[€èNˆ4Ú]þvh=¹›û °þ†¸þçO긌©>t@Þ„7Áãkù6~ò¬Åï²»àxÁS¼ëzò|¶qPy6\^ôJ;Êþ9c~¥—â—žr‰ïøór—÷êó»3> d~½ b/áÇ€øi¸6¶î󂗩ÞÅ¥õ̧ýѱïv”óœí—N}îÁtšÑ²÷²þ=M‚ëÏô‡â¾ÎþûÞ‡¿¯&¶Ý§þý›ŸxÍ‹[ýÀ[à~ê£vŸ"ü§}€`à  ˆ2Lù·Q€weG8C5Û@v¿g|ž5%{wè h,a×Y²‘}ªçÓ'<¶ó53˜+m—€ð·}X!Xà~8~úx>ˆ&èw`8@õ4`Óõ\ƒœ_âwÈ·QxG¸>–ò„Å´zE`R4DÓÅ…=Xh&7†—ShÊ×CO8+I§…à6„ÿWM16Vî%†ó—fÛ‡4†xà‡d°†õd~n¸u\§RxÈ~ÒäBl5f±c~gø€8Z,Wøƒ9Gƒ]”þˆãeryÕˆ*¸àg’Hyhèu춉œxxLs{(ˆˆŽøH:QVÄ'BFŠwvƒ€P‰uŒa0‚¸çŠ:¶|y(„þ+LŠ¡rŠ}˜ŠL·ƒe8†3ƒ‡hHÑ—~``Uæ`jE1¾èÂ8çøÄHˆ¿30äørË8fßháh•ñˆÓH‰ª¨€—‰«ÈŠA˜‚ÐŒàø %ø{ÔX{ÿø†ØhÐÕŠ®ôÕ…›hp'ðŒw‚Û8‰ÿŽ^°Žm(‘p„@×›WmK‡Oò©ù)û%¹=+@U(Ä‚dd(1C ¬šUV¹+¶°ÛE°¸ ¼X%¼/€eKP ‰½=ËGär§Sj`䫺ºë…q8º#ºþ¿ËŒt©J+Þ›½Jc‚¬Ë¼X¾‰š¨jɽ1å(_£¾èžÕë¾ ¿ú)ZÃÑP½Åy/(H„d™èKWÓKÀCkÀ&cI3¾»ç‹…®É[& _Í«UrÛ»í›RŒ¶Í©ÀÈ Â`w¥6``©¡G}ՉЋÁ\«ÁLÃT¸ˆ ÃèiËò3Œ¨–…k¾Fl@{²¾[À¦c„ezµšõx½6˜Ö,ƒfÙy¾)&?Ë$Jø³.útÁ¥+*›½w$aº³~\Ì‚Ån º³[£s\ò“œNŠï•¿à¶ÂLÙ FÈÖÇ~ì´ à øSXŒ™2LþÈŽÜÁo«Èq˜DÉGó³~'À2 ÄnKüA+æFEI†÷dÉ·¥“ËÄC‚Zg¢q˜’üÊLªÄ_¶+Ô›Á.\œ„1ÁV[¼¥‘É“œ˜‰•¦ b«Ì¨·Þ»Æ?ÜÆðÆßÛBƒˆSP›D•Â4ÐÅíõªk‡‘dÇ×üË@ÌA<Ìe[MňüÂŒ4Ù2js‡ Ç¡ëÀ9ÌØIhC½Î´°K¨Ú¯”Õ¦«Ú®ýÚ¥ÔÙ= Ûº$Û-`ÛÊ¥Øk$Ú:L™(Ùÿì»[SÜ»lUÐëCÂMØ)€LÈíÔ/ýÙîȼݿ®£Ò¿õAÌ=~ÍÕÇ´†92Û=x† ÞkÑþÒ­ØÞSݶ=ÅœÝu³mÅÍ”ßÍ’áýZ&]Øn—ÏËÈí\E­ÌÞß/û?ðZü§­MÛ ÛU•u˶ŒYŽ­ÐíÙS%n-áDáQÝÈ7ýÕEÒëûÜÜËU•t½WK ⾜â~Ì7±â-¸"ÊIàT'îÎ-…Ïèl™4]ãÛã¸[1>ÚPœ¹jûÓç”ã'-DÓƒ]bU]IŽà/ÞU.5åÌÉlÔ9äœj|áÀ´·õÉÐ °ãˆÍšf|ÎzäŽMÇÊ,Ë Ýæ]aƒ¼Ñ®LͼlNfDÉ ­Â$>À&.’Ùæ°‰Æ}åÃÄçÉíÁ­™þ诙–Œ^DŽ^Жüç•Ö}Í»sYèPþÀhÌví‚€œÌ¥ùÜÆIêÈYZu â \É]WM»PU5c.•’úäuQ2µb€9ž]^Öú\Ç¢žÞå¾֕.ÆdÙç4Õê|åêš~~ƒ>Ê Þë­aÃDlJŽâ¸Çñ íÞ|Ð_eÝãœÛ…|í%íjŽáÒ„ržêÈeáó.¤z<ëÃ^åmåÕníNžíÚÎj# Ö“'ÛYܼ±.ëüæçäMìÊ#ðî~¸­ÅÝΞ›nãœ"ìç“ÞÛz.äÉîQÊëÎŽš ÄŸ‹ÉáÎÏW‰GLÔEÝוmÜ þðîk~3  tnfÜ åxʨÌÁ~ë¨Eò%OñiޝÄõë|Áa2˜ýò¤]Ä1ŸØºŽæ;¯!6ˆ "¾˜õÞ¬°h»êNbÓÝTüô`?Y/îZQ÷¶köô´_ÕËŠ:¹±›’&ßÜ(oñß޼#}ÓNpfÝk©j»½/:^ß\oøÙØ®5›Ë‹Ët¿‰ï÷é øNÿõ–ù#µ6YÜÎñ|ôùÑB[xÔgÎÓpú!Ž¨Ê›Ä´¯¹Mø¹Ég–óômú»0û«Oá»*,ÒßWKj›ÐüTêÎÐÿH,àöZ[ñpüåÌ$K¦«¦$þÞ_°1»´ö›ðÂoÃÛ±ÇfüÞüqÐþîÿ±çu¿ϱô_lûù-*P°Üþ0Jê¼XÖ»oBød7Dg©®lëJÄ+…BnÜTÏ/áó%Üî¶¹ «"ò¢\f¨8¨ZSWëtËúbÝΑ˜‹ŒÃ—/z²9š÷šb™àö¨(¯Ê¦~|‚ƒ j„ ruf6‡…?މ‹qK5™š›œž™–Ÿ¢£œ@PRŽ&W Y©®\_Ž“wet:—ކ‘´•¾´.¤ÄÄ¡ÅÈ¥J”£¢^¸gþm“føgH}¾0蛾‰åÌ?ˆ~ÊB¨¥ Gj®zK«\úÄç~ jº E´Úª*…»òš®Î‚¶ª9À&ÈVղ𪠛6ˆì„*«O³Ñ–En¹~MËjbhª (±<ºıü¤ãOÞ‹¸¦‰®¿ÿBZéºðhæÁ jå¼¾i8eu¸7B²×bËn˜0LgÆãë¯SJ-Âü¶0וó¥“Ü´|‡G*iȺœÛ1r7‡ë®“F¹³Ë ˰-ÃûÄòÑ+¿ÌXÉ曆$Ç9£mÔ"7=2ÍÁþŒ4Ó+œ kÑõ&-¶ÒÝÙîÀžLõ³6¯Íµ¾W½þlÜaËíÂÐ7ÐûËÖ¶@ óÛps¦¶ÛæBMølžÞ¦òæÝ°ÑcGì÷Òg“,øÓ‡ƒÓvæY'^¹Î¼5>qÊ*ç[ã”NwÚ˜s.õæœ×ª8;lzÍí¿1£-më®{沫®Ní ;^®U(ÍŒ5!S÷ŽAóko0è‚fŠ2ºÈÇ4ìòƒ@ï< ¿.}Õz*&ú£CžQö×¾#®—ᯓáòO߯ðåÇûB¡ÛHLHî–cÆêwú°s³ßðÌ·¿‰ýà ÈH¨xï€0à—Ä$ãpÅ"ÔèÔD¶&pA±×‡L¸8ágî{?·}Ðþ¼á'h,ô‘ð„ ¢¥†¨#ÉшÆ# Ýò>EÕp†„¢#`;¢QBl“sYßêµE¥%­l\Ýî6&™)®à‚f ÞÒ§,~1(]Ä× µ˜0‚J|]ÓèD òÑuUL¢Ù^–/Ôy±„,ëâo÷BKYŒ{£òÊû8Iª<'kDŸ& ™H-z²“G[¤çfŽKÎz©äFž¨ÊÜEŽ $¯È·{EŒŽCD¢.©ÀüB’­ì+ùÊHå#“mÜä!ƒÄeò¬™EX¡!‰@L4Q˜; &6ý¨MÝq«l\¥2§N6œ’‰‹E730L3â1MÓþ@&-]D½‘réäf0Û Åw¾¡œ!á+Rø¸Fzìi¬œ!?1ÐqBžóäÕ¡ÞWÁUêsŸ •bCgùPë]ÏYS£.ÚÊ…ÊÏŸ„Ú¨¶Š7ÊGiI‡¢˜IKšÑªôk|'G]$˜vâJZ ªP‡j š´w7ýh šLQ%Õ’O¥ JËuTÎE§sÐ)5ÇtU.LU]SUV^f•¥XSYSg(çÕmk5+´ÚÒ¶â%®TéÝ[׆׭†­Jµ+WúšWÎí5j„õëè*×à$ÖGyz,M{3Éît Lýf‰,+PFq6”ÕØgºX2æ«s(þ¦]r5Ú;ÕÔª4!lf5EÔÚÚv{w)áB‹»œô•±ëDBkÑ0\Þ÷ë›+`+Üã¹·Îl€ËÜF«¸Ìš)CsÛ…ÙV·³}îkႳ¦ý.å’ «|`÷—ãå«óÔ¸zW½u%-[Û1èêVÙ©owÓ‹ß‚6Ö4ÖšYÛXi2ó™å\ë} ¬ß¦º²s¬'¾ÙCDZ >b5|YýQx¿uÕå (â±¥Uc .•µ¶Ó€SÂË=ñÿ ÇOºÑÅ_LpÎbìÔ;ò–¾q8 ¬cð¦ØÇ^4,‘»ã™§-b‰He C@» ˜°þŽ“PQnùLj<3aüáÊbUÊd«å‹€+ê6yê¬Û 4Óñ¹ÃCnsÇ”¼D[ŽX˵†Ér|çìcokÞ%Òü¬åþ̪¹rdÙhVú@X}´¶˜Üè/‹zkùMa¥ìi.ËUÓz î{y™Í•ž¯Ôf—eœAAËP•³ž—d†MìbûØÈN¶²—Íìf?:Ø]à€³§MíjcÚyО˜µ·Íín{ûÛÜÎ6]ÀMnp˺¼$¤±Wé\îv»ûÝðNö®5@oǰ;Þø>ö¹ÿYèsðÏxµî£q­kþ=PÜê¾·¯q}ÞˆFÐ?µ ì|gŽ$|:to®þÎð0`I”@Ìâ†l/‡*ÚÖÞÉvÅ’|e(4a{ œÈ?àÚ)§'i?e!qS§©3©sžgH·Ñå*nqynèüæ\­^Vó#Ge›Ã`Ñ·N9™ÓçgHDZeVs…Ÿî ìIž:Ë銓ÈÞêú”W EÖ±Êoç”Ã¥þð‹ÃÝœ˜xÞQíBNÂ\îo¥Øÿ^øÁCÝËpV»¿Ñ>vW Ýñ~/¼äÉù-†}íQÇ|‰øÍåŸ/ÔE,±Â².zƫϙ’NüÒ•ŽdŶž»¹ùaíGÎ{÷Ø÷ò··zçAMwhÎüåóöÖíkÏæ#AÌdGøUþ¾üÐ ¹¹Kf}ëgMbÈV_ïØ)+^¡ýY©ÖößÇ õõ\Zío?ºé¿½§+x̯ßÀñ¯úç üåßÿúù§É¥\î÷~á€ò§qüW€XdÈ|«µä—wÿ‡wè[ (ý÷}¨zˆ{³²Tõçv‚Z˜ Ù&Yn|\e‚' ä”S#X}hNç÷‚ߢs9µùç‚| 9>ˆƒ‚P\Ÿ5Á„^å 7(„øÐZHø+؃·5…Tø$OÈ„©eY*cFˆ…^ƒ©Åa;È€aè[Wx†w^æE€jY`ø†(¸VJèS;ôQ(‡Mh‡ž ‡Â5}þŇ)‚‡3è‡ù ˆÊ`ˆ±~cMrÁƒŠHã‰#‚RÅ4‰aVˆ”è ˜¸‰ûÓ†F"˜‡žˆ "UŠ´¥<䈄h†¨è øŠø0Š(‹©‹¶8 £¨‰¹È§Ø‹¦è9ñQ‹À˜¿XŒ­áM®&<]ˆŒ’{îQQÎHA“q DŠÓøŒìQTÙ’É@VÃŒ¼è¿˜PBŽERbtO؈ŽÔ³!×î8¢ŒÖã8÷ãMç¨ÿa!íè/€1DÆ&’͈´S1èäJ¢5-T5)‘)3…"yOiÇv£®Ø‘)%[؈$©þðˆ[×HŒ)¹8q’çô’©(™‰#I“Éc=£“*iáØ’9é“—ƒn7I”¾”…V2 ‰”OOé” ŽKÉŒ.)•ˆC•ËØKX9•J¹•™]’UI039–òØÉW‰–O©wÁ‘$YZynIÚcŽ=y—0I‘kÉ—ß!,ªx–€É•Y–yT˜%9 H˜ŠYMïø˜ûÈŠ’¹Š‘Y™½rŒ˜é‘™¹™ø”@ž)š š¤I–¥yš5išªi˜£Ùš^y™° ™“9›EI™¶É™‹™›Ô¨™ž‰ˆƒÈ›žœrÙ‘Ä Â9œÄ™œÌÙœÎùœÐÒ9ÔYÖyؙڹÜ) ;libwww/Library/User/Architecture/Modules.gif0100644000076400001440000001102405761725762020633 0ustar danielusersGIF89aùYñÿÿÿÿÿÿ!ù,ùYþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹Çä²ùŒN«×ì¶û ËçôºýŽ èúÀeø!˜AXèLJhˆÇØhЗˆX±˜Bù@x9)™¨é*×Ç 0úGÊð¹’‰zØ gŠ@»¡ªÂÚ‘›+û{fûy0Jj*¸[Êi\+\¹¼|Ù-LÝ0­èg½­M\Ümè L®³—Ü ~mü­ŒNÍ;<íLïýÜ ë¯~ÎÎÞºqå Ö.Ú¼…íÐ9[¨PZĉû†yKŬŸ6þuØø]´r"+I šüÞÆ‡âHfdx,„~¡A¬³#Æ› 5)ƒHð¤Ð4iRL™ð¦Q|á¾í鱦JOMº¨ÞH‰C»Þ(º²åQ—55´è´"Ôªk™ê„&6bC©*½Ú=¸qiθk{ÊS ÷¥Í¶­F T0O¤w»0»R.Ù\ïM®›40]ºî~:71ÇÌ£›fñ.3UiϾ£…ïíÏ}WýÖ3ìrhÖqŸþ­ËåeÞ´e¢õ+0cÚÏ}#)®Ê-ØÙÈJÚŽ=»’ Ú»{±ü»øñ๓?ÞCøôìÛ»?¾üùôëÛ¿?¿þýüþûûÿ`€H`ˆ`‚ .È`ƒ>a„'1Ea…^ˆa†j(a‡…­ña‡†˜‰"hb0'B˜¢-®èß‹dÈã~4Šqcøå:Öç£Aþ(ß\Iä{Hj±d’ì5‰”Nž'¥UN)Þ•Th‰ew\Jñe—Ø… ™bžf¦ižÙØšL¸É¦Wpng€s&qg&åyŸz–ãgþùËæYõ$éBh†úÈ㚃6 çléc”Ú¨h¢Å°ö©5ž‡–p£‚š¨>Lºi#–žš‰RŸ–2kªR- «h´Úž¾þ 쯻֊Ê6ˆÒŠþlˆ¸&‹è1 ­¯¼v­°˜ ;j±ÈÖâ©"¯{ª­ÜbÛ@µÒN‹´ÈxÖ¶¡ë­»É-/·Î’kºè²,/j+/­ÇÛʽÛÖûî¸ Ùï¾b[¿ð6;1³övnÀÆ*­äo‚®„ê`£N·éOÀ®§ëM4¾îù:M{Û¬Ÿn{«Á«ùûÌûO¼ìT gïCèžô‚3ß%õjnˆ}öÚo¯}È„Zo’󲀯#ù‰?>›è‡²~,íhþIï»?eüòÛ/þ ê>ÿáÿè¿‚ÌïPË1@®è€d Eä@r$¼O)xA B(ƒä äA÷…0} !ûLH¿¡|`‚VÈB²ï…½’! dÃF´ð|Ê¡}è ÞEˆé""#Œ8$Öa‡ÿ —øD;Dñabþý3Å9XñŠûÉ¢½H0q>[ä"~ć2šÑ>h„ƒy˜Ÿ6ºQŽiŒc}ÞG Þ‘Žn<#ùØG6þÑw´ IFCÚ‘>‡l×èžF:R’n ¤,©†GB’=˜Lƒ&óŸN¢á“. eE™É*ž²‹ª$£¹HIÂ÷ r ¯œ%-ÓóJWFK—ú¹xÙ0ùTë<»dd/iK+™†$Úw‚iLµÉRšÝ¡f$a)Al†Q›ããf7eÉÊpvgä,§9ÏyÎï sì\§:Û O¡¸óóì <ï‰ÏzEŸàçÒY€#ž À ZPt æ4@þáÐÐD´ìTAE1Ñd åÄAGë€Î T¤-iBOR’Ó£+-ÃGyðÒ6¤”¥]CLupS.´T;MÃC0R…š”¤'%ªQðÓ3ôKÅBSyÔ1$•©5 ÃSƒpÕ(du[ÕÂT£j°"u¨B-jYŠÔœz¡«X«ØJ¸N¡ªG «SÝŠ¹r¯KÐk¾JV 6¬ƒ«Y«PµV¡§‡*Ù«ÂÕO¾ÆÕ©^õ«+°6ÖeBó€d©ZY+TU¬¤-liKXÔ6¬˜ý«fUÖ©uÀ²7ølf©ÐÚÌÒ–§\cªæ„ål¸Â½Ço þûÛÎU·`=-ZSûÜÕžuºˆîHs[WlÀÊ·&kÙÏ~F¯Z—4ªírq ìâv·æÕ.˶3ï: ¼3Î+ö¦¿æªs© ]K·ºþ/«_–ÎWaÚ˜|«‚«bÙ÷¾üÕ(GûZáõöõ@؃-†›vÌJÂA{@†-zá$ìÔÀ>p‹_<`³8Æ4Vo{ìXŠåÄ.£/‰9{_˜ªGU"¨Ò‰ià™9IŽÁg?|±#L`A‹0sÄkbœªç:*¾¬Zg|ZN `6­™{d'ã^Ü•wÉ¢úŠ ËY®í–Õ彦yÍxîïž-üþ­Šè,UÁÝîk|ƳpµèÏž²M€ö Q]ê³Ý«jË<«0C¡éó70m] 2ÅPF½Q¨Í—á®\Äk$TŸÀÆ…ƒ—0ÐzŒ6õ†y=ˆkyxÇñ±CÛêâ›–Ìã©"8-TR€ºÀMNª¹vj`ßù°óƒy<åÈZ×ãÆ¶¹ßÜçY—[ë^®šƒ=µØÜ+6ßÍu¥}ðå3¤…rl¦lÿ¶ûw·Dý¥4_Öwr Nço×ëNÕ>6Â׃©•YûÝð´Ç‹7\Oµõ]`yyÚSÎ~´j€Ë˜µøÞÚf:΂þ’7 Ü1®¢ž«l-‰¯%ÏjÅgÂs,MWÕùVQ]0¸IçÈ-5l(ýs¬T/èÑwþeƒÊ\Ù!–§7}*O bì,nê®30Z›Ç;-‘±ˆ¹Þu@ÓAào§çO¿~W4žÂ•µO\øb·È ztßpÝ™´žKe;Ê~ù™_𿬵ël)o‰å4XÇóv@Ò´æsõ¬¿gZ÷.öÖË~öøÝ£Œ{bSŽ0äi|à“=Ô›/>ñŸr‘ù­GA¸›‚ŒÞæþô.èý[U/yrWtð¢}öµïÎ’?ßÞ¦öí—¬cÈ‹zªâ¦üÉŸ|äþcþó'êŠÙßþ™žíö¤ý]ÖhÕ7C2ç¦wÇ}ÊWxâ·îu0¼Tø÷y…g U–x,ã A7ªf€…€+àV}g£%v™Gvb6X Y–G¯Ç€Ö¦Xã¦Ç…ƒ†xGr‡)-q€ü÷Ptxµ€Œ'l%&Q%HƒDÈ(Ù6„¼ /°UwŒZGˆo¨‚/xP:cP÷†—Òrš'„u„è|僲å,¸‡âð^Sk72oñjÙò^…~@uÒã„m[V¦1õUeýgoGU0HT«ÁoÙòr¥‰.Ø…•†j¨~ù%…W8þ~?–1 %}x‚'#g¸6yX%¢è{/£‡®«¯ '¼²›pØê‰hƒ¼÷Ö'Û¼º÷¼ŒGbÿª·Žj‹;Éû<Ƭ¦ÉÙjþ!§k»öqd9q}FPЍi_Ãe¼£ Ë«³Z‹Ó’f3¿b QWz¶Â …fôò¿P½ The Stream Builder

    W3C libwww Architecture

    The Stream Builder

    The Stream Builder is responsible for setting up the stream pipe from the Channel Object to the Request Object when data is arriving, for example as a response to s HTTP Get request. As data arrives, we start to parse it and the more we know the more we can build up our stream pipe. For example, in the case of HTTP, we first have a stream that can parse the HTTP response line containing "200 OK". Then we have a MIME parser for handling the MIME headers. When the MIME headers have been parsed, we know the content type and any encoding of the MIME body. If we need to decode a chunked encoding then we set up a chunked decoder, and if we have to parse a HTML object then we set up a HTML parser.

    The Format Manager is also responsible for keeping track of the "preferences" of the application and/or user. It is an integral part of the Web and HTTP, that the client application can express its preferences as a set of "accept" headers in a HTTP request. This task is highly related to the task mentioned above as we there use the modules that are registered and here tell the remote server what we are capable of doing and what we would prefer. Currently there are four dimensions for handling "accept" headers:

    The application can assign its preferences in two ways: either locally to a single request or globally to all requests. The local assignment can either add to or override the global settings depending on how they are registered. All local registration is handled by the Request Object and the global registration is handled by the Format Manager


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Multiformat.html,v 1.14 2025/12/09 03:21:03 jigsaw Exp $
    libwww/Library/User/Architecture/N.gif0100644000076400001440000000030605774674307017423 0ustar danielusersGIF89a&&ñÿÿÿÿÿ!ù,&&—”©Ë휴ÚkÞüêr_HVc‰ž(©®`ëŠÔ›½ÁS[½7»ñ0¿L%KŠŽ™Vš“§2yõa1Vœt·hÛ"UÒ-ÿ΀4e6Ž…ïÛ]ËæÈ©7nrt±ô·'@¦è$¨5¨hˆøx×è‡DÉ÷(´XU“ãù)v(úZʘ‰:ºÙÊ+;K»P;libwww/Library/User/Architecture/Overview.html0100644000076400001440000000621406742602171021221 0ustar danielusers Libwww Architecture

    W3C libwww Architecture

    Libwww Architecture

    Libwww is a general code base that can be used as a basis for building Web client applications. Its main purpose is to provide services to transmit data rendered in many different media types either to or from a remote server using the most common Internet access methods (HTTP, FTP, Gopher, etc.) or the local file system.

    It is written in plain C intended to work on most Unix, Windows, and possibly Mac

    Even though plain C does not support an object oriented model but merely enables the concept, many of the data structures in libwww are derived from the class notation. This leads to situations where forced type casting is required in order to use a reference to a subclass where a superclass is expected. The forced type casting problem and inheritance in general would be solved if an object oriented programming language was to be used instead of C, but the current standardization and deployment level of object oriented languages in general would imply that a part of the portability would get lost in the transition.

    Many of the features of libwww are demonstrated in the sample applications

    The development of libwww was started by Tim Berners-Lee in 1990, and today the Library is a multi functional code base with a large amount of knowledge about network programming and portability built into it with help from Ari Luotonen, Jean-Francois Groff, Håkon W. Lie and a large number of people on the Internet.

    Design of Libwww Core

    This section describes some of the design points behind the libwww core. The core is basically a registry where the application can register the set of features that the application needs.


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.24 2025/07/13 09:18:49 frystyk Exp $
    libwww/Library/User/Architecture/POSTEvent.gif0100644000076400001440000000670505774674312021022 0ustar danielusersGIF87as3òÿÿÿÿÿÿ,s3þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ï;‚zÍn»ßè¸Ç&Õçø|ŠÀRëÿ€~.|†‡…0ƒˆ†Š2Ž“r’‘”˜q–1›™ž]œŸ£^¡—¤¨X¦¢©­S«§®²M°¬³·Hµ¶¸¼Cº‹½ÁB¿ÀÂÆ<Ä/ÉÇÌ'Ë„ÍÑ4Ï-ÔÒ×Ö+ÚØÝµá áäåæéâÜÞî‰ç çòõèãøòèúíïÿ tñø€àĘa¢Gl ñ‰$©ƒÉ“ÒRÞ[¹’G˜8áQ 7nOõ"ÞÌI4 —E…!±4)¯¦! :Õ)]¬©8CéZ +Q­,GØl Õk*°=ç Çv«ÛÊš%¥îL{wUÚÛÛo.L´k}êÕË3âX£~=¢ÉxpÞÆi/›8Óâ»|M{O²+W„ðs_Ï·j1Ó3¬S­:Ï¢eM„½á×ëÒ±ƒØÍ»·ïß»»† ýQ„ºÜ8zPŽÂî…)ž#oÜDõ”³±>ݺ€×Ed¯ý‚{wß]¤T×óÂS_ÿa|ñæáW ƒ¿þöö‘öž~ø×tê (ƒƒèR Â! "”àZ¸C†µD‡ÈxàýÀÀŸ òÆ!A¢h&b(;ŠÀ¸¢%9ââ*v0£_5¾P¤µ0²c‹HN6YŽ11¤WGRw#JþØ$’¿ ”IU©Š)ä#(eÄ%¦•äaÙã“[’Õe`âô& {&Ù†™u:m´'xd&Ò‰š+¦yç…zt¨ }âš\FEžøSa·…jA¥r^(ƒBJeá%Xg©Q@ªD‹f¹ £­mé?&:ÔRMaE0k™—žijª›:þÕk°cAÔæ°Å†ò§£¸¦yÅ®ÞôMm;´i`-6ËÒÔl°û%®¸D•û+dÝj®^–—“»Ë­¬WöP¯ ãFã©O† õ)§ ö‹Ì33i ‡þ›k ó0 û 1 sñ “n|ªóâ U6*œƒÈöv¡[)«lË»¯Ãˆà 4×Üéͱšvši»–ßÅ,÷ìsB/Û•™«ƒeÁÇ+½4@/ÿºÔª­¶ï7:%Ë’uK­:Ö,=:³Ç‰Õî)t6aœqMp>m‹gÜ{›­€0ï̃ þ5a#¦Bµ`øÝÍÇe7¸ &þ0†ãäæLÂävZþŽsØåÎÅfÀy´/¦º¢ÿíÃéDNFéÇÀŽžìà.íÿ €î œ‡ð&ûN| ÇË‘ü,¶/·¼qÏŸ¼'Í{ð{ô¹óþÇô™T_ëå?E¨ä—oþùå#â=×c¼øRpß²!ëoоû l…ü«?*o CpÒ3@ù8à~ü“€þªÀíøï[ô`ƒ"HÀ Nð[Ú3üâç„F!C¼Ž|¶õ€ðpý£X(,™D Sx­âB1” ‹DNÀ‡4" „Øî.äáHl@Ä«)¡‰K0â%œäÐþŠK¬i¸„-&AŠS,!­¨Ä,â‡]xb!×xA^À@^|ÓxC7êPŒvL—â¯dÑ‘~yÄ£%ÆQ‘†‰û³! !XA "Ñ?W< Ђ˜È?¢FÌ)aÉ1ÞÌ‹|,è?j®=†¥cu% êω!`8ÓÚ0Ú½€vy ì¨(cç7‘ .zýæ˜ð£Òæ¤Ì²¨My9Š“.Ç¡{¬iFqZQ3â.¦CÈ$z$¸•Ö4<-êEÅb¶Zu“#ê¨<Çu0Ô¸fhPeÐ@u÷ÔjÒS¬Côç'y€Tƒ¢`j j)ÛzÈ·Ò¦¡\æô <º&fƒ;)«=*»éù56€ç4=jÖRÔ®Šk\c7ÑÍM0ûÜJAÖòÒÁB6«Ä›lTâ4µ™]v{ c? „Ä5:•=HfOË­Ôâeµ¬‚k¿Š<ܲí]\«­io«Óܲé5ŸþÜí 4Ì:F$©…Uåh\<õ¹ÛJib¸»½´h±ZÐa«;œë⌭ó$oèÈ7¢ôª—bèû.k84¤ñ¾7¹{•ïŒìëØû²õ8øU+©ëßÿî6¿ædg”AѺ5Ÿ Ær5Û³F¸æ® <Ý µaNð1= Ñå…x™&qö0*سIÅb)Y‹—›bÇãy'k7mÌRS“æöfüØ·âªHVêGÝ·Un6”©Kõi‰YP ÷Ô{R ˆÌÐדO î­ŒœL?“5hÐ+‚•Z‡æØŒcörÎ 6-¯ôkv¸‚§6ϺÜþè†8^@Ùž´‘}hܳÏrÖí9£cHGº½F´ŽÅ|éÖNÙS'™ÕüiLjÆA&°”2œ.cؘn´;õ9?Uuº {–¡ˆE Cÿ!×SÛµ¥ç¨à_k4»\ìõ¨å0°Â™7O5Z,|­|ÙM¡hÖ5kMlFÛ½6qéyºídÃúÅíô,p‹Ë0yŠ™5¼5´Õ:q+7CPL5nñÌj£Â9^µt1¯§½ì8Xûßãþ–ÀËbWÙáf÷¸N¦ÊJ:|Î-XÁêO8VÜâÞ~¸0ÙíD‚Ë{ À&w9ï‹ã!å]9ô2¼ã“‹ádÙþ¿·“s›7µß …“ªMs~û së°«UÞË¢Ýås˜x»ë5ÎÈWÛ tº”žÍõ®³7ݤ-ÍÓNûÛß[é}~óôý„³¦ìj ÓÃGµïkÕlH¢KaØ\ï\ÞÛt˾*¡uS:§<ŠÀ_s³ëjjœ=_+ö|ˆwü·¹9­oºvÿäJp¿ àô¨O½êWú@xÞl_ÒfûLzÔ¯wÌ%ÏÓ£À÷q¸|ï^GLà«Àøe¾0vDÙ!ŸÏ_»æEŽÍÈ €ÑÿÂà¡Àü:Ûþ×_ûÏFþð×Àü³ù;€þóß}üàô@ûþm0’IêØ¨?öµLRq‚›dU Ç~=  '7²BA/ôHmT4)¸\°}SB´€ž„ˆ3€h†HÞ7H"˜7à3€‚¶‚-”€.¨Lø*uxׂ”DoD€>0ƒ!lÄI¤dm¤G'<ˆn÷R 88„XHD˜GQ¸jn¢„?xRY¶'Sè[gUh…wÄ„SSFE˜q§qæc]ˆiaR‚"Ęƒ1qšQ‡AkèÓ'z ØH (H€ÈPhKÀ"qèòyˆ^«²P&@X€˜”„¨5Ìeuˆ7E]Ð}|6þˆ¬â-‡ñv…‚‰€—œØ„en‡˜p—h]•qŠZ8‰çožk¦ˆ0ƒ¾Ї8¤ÈLšxs¸x*(y†£aþô‹pÕÝw(ÊXϨhçÑŒ:¸ƒKF Ô(‰2¨[ÁÈlñ7‡rz•öV»y×Dä¸bݸyŽV~neX­(a{È+³&éˆfr7u ÔëÈKõˆ€ï€3_Ñ…mÒÿ¨XíØ=mH\pqr7t )W6–e" ‘ó[ëV‡ðÂYb<æIB‘ñ˜x©’#¹eâhŽXÆ9ú'vwŒD34b‡‡å¥| ;©†Æ‰]%É>þ(/G9¿<í'*EI)IV@-@Šv7<ù”`p‘øˆ•‡ •ÕÈ•€à•Ú–ai„db Žg™i™Šk‰mY‹o9q™‹sÉ–fy—t‰ˆ¬ç·ç¾g~¬×zþ¨—{É— @˜€|Œ™˜‚~À}ui˜A Œ ™ó™è'˜Ž™˜~I™q`™›‰™~I𾓠šÖˆ˜™}‹y}Š©¨©šg šùš²©Yš-I›a šé𯷛 àšºé›e`›¼ÉšŽYƹ˜ÈIÊ ˜¹ ˜™9›Ñ)ÓIܹœÅ‰Ù™•Õé·Ù~’ žáéÛÙ¸©›ÉœŸˆ˜žâYšÏIœ°)œ±Y˜ò©žy¹Ÿ\šãèŸ] @ *…Ûx [` :© ZÀ ñé ºššªŸŠZœ:¡:°¡ú{;¢!zJ¢%j¢à—¢ º¢,ê¡)ø¢ÿ)Ï)£SP£$€¢6º^‰£;ZÄY~ùù£¿9˜Fz¤Dš¤Jº¤LÚ¤Nú¤P¥R:¥TZ¥Vz¥g™;libwww/Library/User/Architecture/PostResult.gif0100644000076400001440000000720205774674317021355 0ustar danielusersGIF87a¦òÿÿÿÿÿÿÿ,¦þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´Dh»ßð¸<¾®Û¹oUþÎï3Û2~ƒ„B‚4€…Š‹ˆ‡6ŽŒ‘’'7•“˜™—–šžŸœ8¢ ¥™¤¦ªŸ¨«¯‘­£°´…²®µ¹w·¸º¾h¼©¿ÃfÁ5ÆÄÉRȈÊÎ^¼Ò ÒÕ ×Ö×ÚÜØÌÏâG·ÓÔßæ éØìÖÛáãò†ßÔê÷îèîùûàó£”³‡oÁ|øø… ȰI´túªM;HÝAñj<†þb»v *jƒ·±dfþ$*LÈòBF“0Y”Ë–p$Å›bêì1ðB4ƒbx¹³èˆ™#ÏLªTÄF£6;)µj ¢/°ZÝ u‚ͧ.bäJ6E4¡Ä>ÐZ¶-ƒ³-;¨ìê¶®¸+¿ªdZ¤Ý¿ð"üXP,P lsŒ®q·‡#$Vl•q6q/óËsŽçω(×±|áJ´¦9rcbè3}ö;çBÅ…–&#Öý:I0nšzstsÞC‘OPÞ›óÏ—‹ÞÜuׄæXš‘ìow€ï®ç3€ñw¯ò$ųôÆÃ§Ë>äDàݼ™®Tmþ9áQ•Õó1´?ûÝ3×^´5x:7 äNs¥6jÉšvß¹P¡_õ•¶Aâ”×&Û'ʈC‰8Œó`†`d)ž¶34’¸BÒ•ˆàýàØ˜l’µ£€2I(dSýI” ”' ç߇é1©‡–O€%!6éd—-¸vT˜?^ð_záœd¶¦$ @â–f=!éàEÂg_š…æ–õ•á¡Dâ¨ÚŸz瘄R¢7 å_„Œnàh™ƒ jSRÒViM—.PgT›N©§j¦4›ŠVº”©KsÒ) áhãi¥‚8ëŽ<œŠ§…ÖT¥†·ýþ÷ëZµöB˜’æ™ã¨:Ú¹lª:+±’BiÓ±à7ì¯Ø{+%ç Y®uéB×nwëRøî™xZÔ+dü[Ÿ™Jh»(«Ýf¦Á‘úVï¼ÙÊø)‡3Œ©h#ᯯМ×: ‚Z[Á€E¼ÄÄì•¥DöiŸ¸!Kբǭ*²ö|â”°‚uY²üÈï©j±ië÷@ÌAZ¡ßÑH'­ôÒL7m€að|žÏ#ÇE³ÀDs<ŽE|µ ËתlK¡(´žWÁ5Õ¸G†¿èó&¸ýQ9³Í7_±ö˜÷6êq¹õà| ŸÔ¦b±·‹Qç|ˆ÷¬7áïþÁ F>õäw;óDQN:v}» Ìtܹ,EÖ¢J{$ŸÛÖ0hü‚ÑìË«ë Š–aBÖpåµ»H{·Ó‰9ÂL°¾™´°bX˜‰ ~Ä»ñÑž¼!:ƒÓ=®Ì/ñùc5?uP|.˜h²ÇE§½Ôïǯ­æšÏëÙW›/ì¯òoÍ  Ws¼ZÐOqÊïÎÇþ¥OGÕ ¿£=Lstô¥¢>ƒ «PA;\ÐhÂ!NqìV=ÏÝçùñ › B°•Ð;‚[ÝÖD8À]ÜpgáSBã€NpïÓ»0…Q#„ES7#ê0þ„5d@_Ÿ.6e8ü™ÛI~Ø¡måpw[è€(ªàƒSb7(2bOI'T[ Æº±4Á…h’¡Ôfˆ;›âæ”ø§9ò‘t$ùˆE-[<ÆPt½C¦ÁŽòÒ"30ÉI> –DÁ®6Ⱦë½ík‹¬¢(_PJJžò’˜DeXu#Ô oQKU'1JRÖR¹”€.I·7a¦8›,¦ã‚Èi^à˜Xæí2LIX󚦴€6±ˆKœQóß´€-‘)Îr&s1ç´C:5ÀÎvN`œ0‰\ýˆXƒz^Ÿ™¬WèÀx)ÍÓvgdÄAIÉ|VOþ¼Dß«,ÈHE,”¡ ­€C´²9è-ÄE1º‡’Sx ù>ŠDYzb¤$-©;•9Ó^²wìké³^ªjÀ¤'%UÉ$ jÎŽš2ÔòO¯˜–1×÷ÀÎ,èAXÝêâ¾ú/ÔL3‡=}ìÉ1ÁãÞ8‰Óþ9€×½>´£‹l×ýÄF7yáPQl‹E†ÖÏ~B–§“jÛ'ƒ 2“oZìh­ðwxƒ¶ ~æ'™†šÐˆzïØÉî'Ñ»”¼k€grËÔˆO8½Ëð&«»%Ï4V±»]µ­h'øÂo¹ƒžÑ`(õ/¯Í+kï‰lǶ5Ì J%½P ãGïÆ3@nƒóÓlþ„u«™Y šÍôw `sþ~ÙÎb€ô(MôyÏÇ/xº=¿ çBòMw: @þqHýU/&¤u­oýé_ÿ©ÆÞéìRaÚóM{IW;0Š›zÐÕÜa+÷Œn¡q¿1•ó®÷¾os©?0ü d°]e×AÍãªø¹ká|,_“ "ƒzk“ÂBä%¯]wj³ò~·"þR*yÔ|σu/Ø<Š\áP/àâC*õÙ°R˜ùÉ:iØ|Õ«Ð󿾑Xþ{– =Øï¸áŸÅ"𲆸±þTŠ5ˆæÆÆo@úÕ¯‚„·¿ûL´z)¤uãE5s2uz×G“·Eï—zztEE°<`sÿ€ˆFG@¨|Fð€-W7Ø5÷ÞGfHP‚&Øw ¨v¸xˆ$‚À‚-Ø(ƒ‹§jæµ_W]@×rºÖ&\ó‚+pX³Æƒ=¨ö)ÎnÐgjFøF mts4á‚]ÖÇ6èo¶0å*¥(§”‚ctqdWC:MÐ…‰GoãÕzœw?¨Qf¸0Ûvrw#|áwL€ˆ‚8ˆ„8ˆÙôjq˜‡«4}÷2…¶KyaV#0x؆úE‚S‡x?†(¢Òþn™¦LwX,cXßF‰¢h‰#à†‡ÆU‰œØ;éFs¡-;'‰°xl­W…Qmª(^ÖY®¨†žƒ(¤‹z2ärCDƒê”Š˜(S²xŠ@¦'Š:xŠ:ÀŒÍ½…ÆT@ˆ1Y)ÄŠ³Xq; ÛøÝXƒ-–M9XŒÌ4v긎ÐŽÀk#ÄuŽ(Nç˜õh€á6Ûw»÷íe…Fú÷q‡BÐ1&SÐÏe˧{î§G×tÙ_<Ä}yâƒuæÇçk=D‘ðˆ’B”fÆ’ PvØc*¹Y¢u:y]ŠV^f“þ”')<Ù“`”d‡”(”É”ÙVP™2 ]0`N‰}0yOi )’0cÄ6Ph¹n/w•–]ãûub$3°CGîÈ\A9”M0–d¹ŠÒ(qê3|ÞÈ–Að•l6•[p^r™ T‡~éZy‰˜{àub³Õ˜†Ò+^™Ø™_@\‹ A©¦÷²™I¹“*H™ƒù—íB!‰—§)•žù™«ù3v§r¾H˜@`˜s¦—[Ivþ𮋝 ™±é›)9¥ôîv…æsŒkcšQ‰œ3)Øt“#_Ç)™ F™×y”B X©”©éË žA žm™• Iµ„þá©›‰ç–ÞeçÙ•òé…ôÉ7hNø ›ÓÉÉÙŸjôŸÆ ³ÉpiP Ù‰ƒÛ™ “Yºuœ¹”å¹  *Y ¡Ý¹ªãIž ª ¢…é|Ɦ¡ëÉži%ê ' ]øU£6š40º¢œ¢bÖO:º£»Ù£è÷£Å5£Bj1j¢w¤µŸHWLÚ¤é9]&¥7¤JzVФDÚŽÈ›b†¥jh[z¥]zvOZ¦fê¤^—{ijz—SÚ‚ W§§< ¦xš zº§´Ð§~ú €¨ª0¨„Z †z¨Ÿ¨Šª ŒÚ¨˜ð¨* ’:©ŒP©–ª]˜š©„°©œêžú©|ª¢š£lZªˆz¦¨º¤ºªzª®ê¨ª«ƒÐª´Z¶z«Ê9«ºz…ø«À¬€Ø«ÄZ¬Æz¬Èš¬Êº¬ÌÚ¬Îú¬Ð­Ò:­Ô§ ;libwww/Library/User/Architecture/PostWeb.gif0100644000076400001440000000647505774674322020623 0ustar danielusersGIF87añÿÿÿÿ,þ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§Ôª•"Èj·Ü®·{ ‹Çœ­ÉLN«×€¬KÀŽË¥p˜{ŽÏﲺþˆãG3hx¸RHˆÈØH¢Xé8I9!9sY©¹y‰É Úöã)jªWúyºŠ˜ªÊ ‹ ä[[Eƒk»ë¤kÇ <æ@ `@|ŒŒœÌì¬áL=”Zl}°­ìÜ,1]Mîs½Ìmœ® ®îþþ0^>ŸsÎ~ßž¾OÿŸdØ6pÅ *ÐçM_yþš0ðÛ·™‰sˆ1ˆ/þvê&¢ûˆ%£Èçø¹³¨¡†#[ްnGý.º¼¹Â1‹Ù&òìÉm 4œDs aY4éÊ£J›¦°—Pá© :½ºPÂ=ª¸*°Š5,‚a43ì´)6í²&Ý)” Zµt—FØÊï,Aª3€­ë”­LmÎàQl›°â¹ð­ÉÚÐz_*[泘Œ`ÃË"öjàïZ-"Ðd¾"0æÉl¨ô‡I´_Ù§ëAüÉZÜÜqÐÆòvm:L¾À<¼IðÒÇ—[JþÄ9é ¨?‡>Ëò(-¬‡ÄNêKèâ*¼W0Œ÷ÌgÝ ÷m L'òOw OO8èz|þ–‘?wå‘TÛYzudRJmÁ·Ð¤}Eߤœfà;ö%“g<؉$÷eà݇çQøV3(!f¡†U!7Ù,N¸˜O¦H#k6Î&ˆ„è¢bϼWd’¹õŽeDøˆ€àÁ"ˆH¾¤ä’!pøŽv@Ë?¹¥\[ú%e•Mz`åˆ(¤f£PÝ´ãƒÛ… â˜Ó=ÉÜ]]H£Œ5%çyrÖÙ#–Z)˜ÏA‡íYUŸñ}Xæw‚ŠW†q¦špŠ®he£×=z[^«ªŸ›o^:ÖŸ/*aWl~Z–¨’Ú†©,hÊX’vzÊ¥¡*‚©¨i7ÐÚbª:ùW£‚»ò¹þ$•:»a}v¢„MTË´çê¨É)˳–– -¯ÃakSŠ›¸¨†{&¤&j [³Š™K® ÎÞŠhùy[®¬Q8¯NÇjõo·­èk;ÜBD“z{9vc¢WÁ»„ÀöûÃzž”’{ø±rç p‚[¹'սȺÔqt0RÜXÂN h‡ÚeÍ6ߌsÎ:ÙáÌ óËr Çd,¨0åCµIEð>£—%±Ÿ®Yrk'ç tѤ,†Ä÷á¢1‘EnÙî¶X?ךÙ×]¼3dÍÜat˨Û2È­Þ¨ýzœÝ1èàV4ýsÛN3aÔ¥®w)¶¯€dþš©ß0X Ñ]ŒbËöúvá½Ô݇å/ } «13zŪ®ºÏq–§©ìHk Ò—R«ˆçâë¶–yçd†~„äoÜÊ;Œü#¨d»–àªN]éÑ´ŸmìÚ‹4Û¸æx¥%k̹žqÃý¬±cû«Ë{æêÐÏx¾ù{*“þ¯ØsÒþxßßO¬h 2Ò“HïWªþíh}“3 w܈ 7ÔbO8,˜&5UG¥ÙßÜØÁÙ m+˜Bˆ°Ç“Ú¡=å¡+nhëPƒ€ÁÀäÍð}NЇœòG…õ£l@2Ñ Ÿ’C?]B²;âÛñC >Îj¸"þ‚…‚ÎxL\Z=” )¶¬BrÁUîþE…í¹o‡yÛ™ßÇY«T³A… eÆè O Id#œh6:6è/^˜'Õ@Ï ·ûع1¦ÅÃ*ö£ßŒ2ˆ suŒ¤$ëhÆ )HeSO'³˜Â(œÒaòÄ “J(¬’•îšäi69‡YÒÒ–­\ .å Ë]òr’ÌCÿŠY‚` s˜Ìl )köRšâ˜zPæ2›yÃap?çEûIkVƒGƦàâ›ÕÌÉãúéI°y …íÀÎHh iÊ àaȸGJÜó⼚Ÿ€“—‹íÇz•x þ jЃÆçDC*Voø´<@ôš°>¡àµ@l”£EèHèfˆ‘’´¤ðÌJEº¬q)#Ìú¨ TÑÙ±ôb<"pºRrN£§ÞÌ…MOÔ  uG-QÍĈ¤*u©ïäé+a÷Ô*HuªTÝ)=¶Ö«þ±¢1e’P› «µ¬fíjZã°VÛ Q§o}dؼ7׳ÖU p€ ŠîTðs%¼] “„6Ä­ †¶Xp¸ÃbùpÈB,â—@ø§ÜEqŠ;øVÓkVNýXüÛúZñ-°ájüˆsÒqøÕærÃÇàYÅBþcø¼ øÅÉ{faF›’84MNCÑiÁ¯?T\œ—è/¹Ü‘z¾Q‚s¶ì/cLzGF ¤èìO9§Y¹«ƒÙQáþ«. Éà˜:¤× ‘"ä3Ú`› hÜfFÎù©_ê¥GJSÙ¼|Fs›™éHï3¬'T—­Ç]²½Šh|1äéOƒZ:7fòˆET"ßk½ÝÄâœÓ¹“¹šÑ…â`×èfêà:›g²iŽÉf]iU¤‚¹3¥øøe3ŠtF-ÞB»_Q×úJo§T[7a$×€^¶'½Hƒ"{Ût°‰kJï™ÞõFâ_^]Ê»·‘iˆ0«Xxçzá7¸dÔð¼q Ê(诠Í#Vÿ@o$ÛMÃŽá„§jƒø¡ yHpÖ¨)x/ó±ÈG®>.{èäŸò%ï òþgK3$G;îßT[òµŽ¼ƹ01?žÍæÎc>,èñ2 @ÔºïœÐïNüps{seüGsÄM\ÌÓ2³àLõO6›4¿¬¹| w#{çÿc‚¾Ó¾As}„-Þ»0xä÷x÷½è|Tv,Sàm¹éìx õá+¾t—Ã=6¤ÖŽWç4,*¬qö –Û!¿ït[¶9F(ejäÁÜ ÏÕË) §¢Î –’ÚAGÂ×.Ñ*Œ›¸Zï°ÿù ²œåeLQ´ŽkûDp»¥>}–ï?æz%åéö½ziÆç¯{…‡UØbý^ëJÞM¬=«v >釞³m-Ýå¡jÞÎþ̹ÕÌ­•Ølý ¦_¼óF¡oõiXä6oxR|Á×)X}Ô¥õ¤}þ‡yü–{¢5€ÅB)Fc77±'D$@è¦snòò^ž—^Zg5H‘'z|ç1ºqÌWKδkíQv7¸‚÷ׂ¯× d’Q%ÈU¯@}·[‹Hƒ.mÇ‚K`„G¸)t§_,„:è„ÄqJwVÊR…8x ¶O„‡U¾Ò….øvX(€RÈXT÷x gwi´#ÇTR†(‡wó…hþ…r…^’¸YøA3Hƒ¿Ó8œWï†zaLjW( ¤ØìUFá'*öÖ†7µ‰x؉ŽÖ{l–}®ƒb8‰øŠªød›V4µÈ}ž8„†˜aD„ºÓcÀf‰‘HˆVèŒÏŒ ƒŒ4psô¬h‡Ä¨ã¤sz†HqØ`â8Œ®ÈG\…fUƒÕŒìŠ”¨˜‘%Ñ7Yc‹™ø7¹ˆT"d'6²§4ÿ(Œ÷HŽ Post Webs - an API for PUT and POST

    W3C libwww Architecture

    Post Webs - a Generic Model for Posting on the Web

    The HTTP PUT and POST are required features when extending the Web to a fully collaborative tool with features like remote authoring, annotations, update of data bases etc. Many Web applications are currently capable of transferring data from HTML forms to a HTTP server. However, form data is typically small amounts of text based data, and a more generic mechanism is needed for transmitting an arbitrary data object to any kind of remote server. This document describes how this functionality can be provided by the "Post Web" model and how this model interacts with the user, the application, and the W3C Sample Code Library. One of the advantages of this model is that it does not require any modification, neither to the HTTP/1.0 specification nor to the HTML form definition.

    What is a Post Web?

    A "Post Web" is used as an abstraction mechanism for enabling the user to perform multiple operations (methods) on a data object rendered in multiple representations determined for multiple destinations. This may seem complicated but the Post Web is in fact a very simple model as will become clear in the following sections. The purpose of the Post Web is to take a set of common situations from the world of email and news; merge it with the features of HTTP, and put the result into the Web model. This leads to the following set of requirements:

    • A post operation can involve one source and a multiple number of destinations.
    • The source can either be a URL referencing a local or a remote data object, or it can be any object internally managed by the application, for example a memory buffer containing a document created by the user.
    • Any of the destinations can be a URL referencing either a local or a remote data object. The object may or may not exist by the time the posting is initiated.
    • The model must not be limited to use HTTP but should be a generic mechanism for any kind of access scheme supported by the Web model.
    • The model must provide possibility for data format conversion from one media type to another on the fly when the data object is moved from the source to one or more of the destinations.
    • The user must be able to specify a relation between a source and any of the destinations, for example "Written by". This is equivalent to the "<LINK>" element in HTML and the "Link:" header in HTTP and is used to incorporate semantics into the Web topology.
    • It must be possible to specify individual operations used for each destination where an operation can be any non-idempotent operation (or method) defined by HTTP/1.0. For example, if three destinations are specified then one can use PUT, another POST, and the third can use LINK. In the following, post written in lower case refers to any non-idempotent HTTP method whereas POST written in uppercase refers to a specific HTTP method.

    The Post Web model provides a homogeneous interface to a post operation regardless of the destination, the specific method, and the data format used. It describes the full operation from defining the source and destinations to actually transfer the data over the network. This process involves there players: the user, the application, and the W3C Sample Code Library. Each of these uses the Post Web model but on different levels of abstraction:

    The user
    To the user, the Post Web is a way of defining a source object and one or more destinations to where the object is to be posted. The model allows the user to describe relations between the source and any of the destinations and also what method should be used.
    The application
    To the application, the Post Web is a set of bindings between a source and any of the destinations describing a request for changing the current Web topology. A binding is described by the link itself, a link relation, the method (operation) to be performed, and if any data format conversion has to be performed.
    The Library
    The Library interprets the Post Web as a set of related requests specifying the access scheme, the operation to be done, the data flow between them, and the data formats in this data flow.

    The following paragraphs describe the three layers of abstraction, how they are interconnected and thus defining the Post Web model.

    The User Builds a Post Web

    For all the possible destinations in a Post Web, the user can specify what method should be applied, any relations between the source and any of the destinations, and if any data for conversion should be performed. The relations are semantically identical to the HTML "Link" tag and the HTTP "Link" header, and it can for example describe authorship, relations to other data objects etc.

    The description of the Post Web model includes a basic example in which a user wants to post the same data object or variations thereof to two mailing lists, a news group and at the same time store the data object on a remote HTTP server. This scenario can be graphically represented as a Post Web consisting of five nodes: one source and four destinations:

    This document does not specify the user interface for building a Post Web as this is tightly connected to the platform involved, but obviously it should take advantage of any graphic features etc. Typically a GUI-client could use drag-and-drop icons for building the Web. For example, the Post Web could be visualized using a collection of icons representing commonly used recipients and then let the user drag lines between the data object to be posted and the recipients.

    When the user has finished specifying the source, the destinations, the methods, and any relations between them, the user's version of the Post Web is ready to be submitted and the application can take the information and convert it to a lower abstraction level.

    The Application Generates a Request

    While the description of the user's view of a Post Web is fairly abstract, an actual application must transform the information into a specific representation supported by the Library. To the application, the Post Web is a request for change in the topology of the Web. The application can describe this change using anchor objects which is the Library's representation of the Web where each node represents a data object or a subpart of a data object that the application has been in contact with while browsing on the Web.

    In the figure below, each of the four anchors has a data object and a URL related to it. Any of the addresses or data objects may or may not exist when the Post Web is submitted by the application. If the source does not exist then this will result in an error, but if a destination data object does exist then the post operation is committed then might result in replacement, deletion, update, or any other outcome as a result of the method applied.

    The Library provides an API for handling anchor objects including how to link the objects together as indicated in the figure above. This is explained in more detail in the User's Guide.

    The Library Serves the Request

    When the application has bound the source anchor to the destination anchors with the appropriate methods and link relations, the Post Web can be handed over to the Library in order to transfer the data object from the source to the destinations. The Library is responsible for handling the actual protocol communication, and hence this part of the Post Web model is the lowest layer of abstraction. Therefore the design goals for this layer of the Post Web is somewhat more technical than the first two layers:

    • Posting to multiple destinations must be compatible with libwww threads and extern thread implementations. In the case of libwww threads, it must use non-blocking, interruptible I/O.
    • The Library must be capable of handling concurrent write and read operations to and from the network.
    • There must be no timing requirements that can lead to race conditions between any of the destinations and the source or between destinations.
    • Redirections and access authentication must be handled on both the source side and any of the destinations.

    Internally, the Library represents a Post Web in two different ways: A static and a dynamic binding between the source the destinations. The static binding is created when the application issues the request, and it exists until all the sub-requests in the Post Web have reached a final state. The dynamic binding depends on the data flow and exists only as long as data is passed through the Post Web. The dynamic binding can be set up and taken down independently of the static binding, and often this happens multiple times during the handling of a request.

    As described in the section "Core Objects ", the HTRequest object is one of the core objects used to describe a request from the application. This object is used in the static binding between the source and the destinations and it is initialized as soon as the request is passed to the Library from the application.

    At this point no information is known about the data object itself, so the static binding only contains information about who the source and the destinations are. The dynamic binding carries information about data format, content length and other essential metainformation about the object. The dynamic binding is basically a stream chain that is established as this information gets available from the source server:

    1. As soon as the source server (which might be the local file system or a remote HTTP server) is ready to accept a request, it is sent of by the Library.
    2. The Library then waits until the source server starts sending back a response. In the mean time, the application can issue request other requests as the model is based on non-blocking I/O.
    3. As soon as data arrives and the data format is identified, the dynamic bindings between the source and the destinations can be setup. The binding is basically a connection between the target of the source request and the input of any of the destination requests.In the case of multiple destination, T-streams can be added to supply the required number of outgoing data flows.
    4. The destination is now ready for transmitting a request. In the case of HTTP, the destination request can not be transmitted before the full header is known, which is when the meta information from the source data object is parsed.
    5. A response will arrive to each of the destination requests determining whether the posting can continue or not.
    6. When the dynamic binding is established, any data format conversion can be inserted between the target of the source request and the input of any of the destination requests. A converter can either be placed directly at the target or on any of the inputs, so that all destinations can have different renditions of the data object. As the content length often will change as a converter other than a through line is used, it can be required to insert a content length counter stream which will buffer the data object before it is emitted from the stream.

    Updating the Web Topology

    The application can use the result of the operation returned from the Library to either regard the change in the topology of the Web as successful, erroneous, or any degree in between. The application can use this information to for example update any graphical visualization of the part of the Web that the user has traversed.

    The result of posting a data object varies from protocol to protocol. Typically transaction oriented protocols can provide an immediate result whereas relayed protocols can not. As a general rule in the design of the Library other protocols than HTTP should be supported but not extended beyond their individual limitations. This means that the Library has to be flexible enough to handle more than one result from a posting transaction dependent on the protocol used. As an example, an immediate result from a post transaction is available using NNTP or HTTP whereas the result from SMTP might be delayed several days. In practice there is no way that the application can await a response for that amount of time, and it should therefore be treated as "Accepted" with no guarantee of completeness.

    The Library handles the update of the internal anchor representation of the Web by registering the outcome of each post operation and bind that to the link between the source and the destination. This allows the application to query how two anchors are related and what the outcome of the operation was that caused the link to be established.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: PostWeb.html,v 1.18 2025/02/16 18:41:30 frystyk Exp $

    libwww/Library/User/Architecture/PostWebApp.gif0100644000076400001440000001264605775143705021256 0ustar danielusersGIF89aHòÿÿÿÿÿÿÿÿ!ù,HþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Øl* qßP¸4ž”ß³‹Û½°ßíÓy‡¨µø¼çÞ ó+c{u|i„-opŠƒt ‚’z•–l#”€ˆrnˆ›[f„™}h£ ¡—®zb«‹³šŸ­rµ˜¸»…¨u±“µ¹¯ÆV~Á]‡eɬ̌ÃЦ`mÖבÙнתÎq£pÕÝæÜßÚjÒéªçÞáãËÝÇ÷XÏ籌äàÃé2Yó_½ïæÝ'¯ Ajÿ¸%l×L]8vÙ¦E´8þ LC‡Øúáy…¡¶†åéƒø`K—ôÖAä8s%˘Q*“IGdÄ—áÝü¹3%É£RLÎü—ê%£Ôšî\Ê‹”С:™ã(Oª6¯ZÔ÷0j)_HÓé‡SåY­T¶=4vªF‰öÜ e«7.ضri N-]³rU˘Û°C‚3´ÒŸT± Ú‘Ü—6¿©âš -sã»?‡ƒ~Û¸µcPœ;ÃE\µfÌË‹ýŠÝkwÖ2åX‹¬ûomÔ¿Y-](ܵsOËfÖÙ¶y/.‹·.àÑÈ?FÏÙ•úõÍÊÎÞæþ¼=Ê ÉÝ%«Q |­§{ ÛçÛ+þÖåMÛA‚á…P4«Œ—X|h¹çà ð5STF± XvaFrOÁ6OU’dÆÜ…»õâ•‚¥åÄŽ7û=è"t 6øâŒ4ÖØCx6æ¨ãŽ;àÈã@©‚Biä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h.ùØšl¶éfšp–)c"qÖæœ,àiçžjÞÈçŸYê9$ „V)è…&å¡(0ªè£.:j‚¤Vê¥^Xªi‘ýEá¤n†*j‹›–ºF!)7¨&˜žbê«§–ªG«‚P̭ª«§²Îºar¾Æƒê·&’뮺úþFkª„©Ê,Ãö1ıȚª,­Ÿ¡¤jƒŒRëIµànpí³ ‘›1Òám¸ŽÛQ¶Ð’[`¼¬‹(»øší»Ë*÷[9û.’„½ùþé.V~8;븈»ÁÛy°|ã(\¾õ>ñÆ¿—1sŒfÈàIr£"G|²%[p0Ã÷¦ÌîÊ.·LA^ýæ³ÌàÒ ˆÀ«¾ 6L'Ïáú|3ÐA ­ó# tÒg„+l¯HWÛ_r$J/…4-öØbÃl´¯’Ñ×W0 ¿œõ«1bçÔ×±=BöÝbïRq¿ÀÊÛ¶Îܾ­5Ö~³Íöß„;@¶Ùôb íáçR|µ‚þ#[ô¶÷ /ãO/Pvçÿñøá†5wvåp¾¹á_7~ºâNw<´ãþ¶.ûì sŽ:¤—Ó.:ä®ã¾tâÀ¥]†¬ßžûîŠÆÍ’vj§;ÔÄ3›ÆÔ9#ø+ÆÌ—ºµßcÿnˆkܽµ5§û³Í柿©óÅ*ÿzú»~éñË/üúõÛÿ¾ŸC‚Òü'¥Œe$àÿxp(P–r åÔ' B°Iœû€Á ö‰¶ê`Š<Ø.†°G"$¡’R¸¼’Y0*™ Y5ª¶ T6Ìá¨bxN$>ô!gÄöqˆø8â¥fˆÄW(Ñ5Ol¢+¢Ø*J±þVTK¯ˆ‡-"Å‹\Ì«8Æ0vñFH£טF]¬ „Á»]¶º…CÚgfÔŸ ÀÆ>öq‚¡L§"ÚÑ‘U7$Á?`m´Š¸$HHéýÄJ¡"ýÇH8ò‘¥;!=UŠñmC^`Ì$µIPå1Ž6ÐÓk#‹=’’”dñSêÖBîq𕽄 Ø8ÂAÒ¬”ÁŠš!¦9 "pZÀì¤üËLÅ sŽ ˆ.¼Aˆš’¦'©L[]sYÀÈ2×M€ó€MçÖhI2„ ™ü2Í:ÿF:=Nð›y¼£@ß(@ ŸmË%*ÇËK:šþÀüàhÐZ‰Î_t™#3ÅWMx:&¢ €H{K‹Úr¾ìH5 Ò‰æ ƒöòYXÚQˆ®-i"u°.¥‘jNhyÙÉÞ)²œº´,ô–ŒPaÍgþ¢wþ,èM-`TV”¤“ØCMÆ4”ÞòŸQ5çT/`U¤B'«NÅ$ýð¹KöM•!áÚMÄ!9Žõe½*Em‘VtÚ¨xÃÛ÷6”è!Œ›ò#jQªWR౩ƒÔ*¯’·ˆÀâMo΢lálWÓÎÞUy=éð éY»ºS²œ «ü‡®Ô63¡©kõ>ë€Ð 3­­ÝdGK/¯mvAÓŸO4»:IæFµSþµí 74wĨ»M)àÞªÖ·¦È$îEè6Ú6@¹G[+¶Ž‡•¾R·²£.z×Ç®¹—oäNGË1ðæ µOÛr[µTêiV¼ìM¯ø¤5 ɬÞÅ+ccÐßæúÖ!¿Õí'lüV  –€}?Õ× w¿|Ū…1œalxgj%¬¹JËbéî´| ,qNŒ2ÔZÇz¤5íˆK c˸¶ ^® íaŸÉ¨æÂäéicüc7¶‚‘ÝëŽ×ÒdùœP–ªˆ{œå*ùÉTÖ²’ÏûK/;y”œ@(r¼ä-'ùôE¿õ m=Áxnó˜#3ÏøÊáMþœŠÉL=±ºÙU<óÛæŒÖêQí”á[ÑcËéb3‘Š£ÉàâêÌÑÓ“A2—_ì…ÞÑÏTô}áYÜÍ®RÔ&5ª-±iN;ú¢ÏM˜W×<[³ÎúµŽn{qß;SºÒ¾þu%‚b«X£§Sï®cmieçÙQ%Q˜2›¹!{ÔÕ¶¶°müá’°Ú;.MafqãÜb6t¹åýRw_[ÕX–ð¼éí1{ßFt³ãýžOªÑñ÷à½ï~ ;–'§;'i…o€áwøÀ5GB”už¤Å/ð|‡»á'—À'CÎç‘§ºÞ‡ÎxÊ)0Ëb Üå.¹þÉÛmë˜W€˜óª%ÎÿìóÛÖ¸è*¯ùºõP©sXLò¬Ú¹\±ë\ÈSÿRÜi0w¨÷¼-EúªïTƳßç\|߯¾u½¾‹/u£ÄÚœr<ï\Úû "oOÉ+Á¨²¾¼–4/λ2“L¨êáé s/‘>¦×ÅÄ¡{6‡~ôçAí~3Ša÷ž¹ØžÃF_D´B¾(Jå÷Ú@jØ s%°Ûò«Ç’óó\hK:ŠòA'"¦Ô,SÅ£iûÆv]n¿p*RÍ"¶„þ&ÇëÒgÿJèŸv;W¤Êгû¬]ÆtÃÁmÛj3¥hù§# Hi ÐmØq}hSo&®…NÑ–~9°€6¢ 6lf]E vÞ¤mÀƒM«”KÇw÷g%ha¿/(øm‚Ôf‚®6hÓƒ€+X%-Øa?ñaǦhà'(äGl&ø_¸ zJ¸„LØ„NXUç·ƒü–RÏæ;)H_àgu¶6 †6F¦"ð„b8†dzg²€ ¸mÏS^æ%eê2ý79f5ü§CFïUdSÖzÃn˜wAx‚¨Rmˆ4ˆUfÁ÷jѧcÈGBŠ(¹W Ä3T5¨'ß7D“øþTû£TaF4—ˆe±Ã}¾g‡x‡RH,½gg¨èODå o5‡×3>uifç,MSiÒ–Š¾Ø=Ø}ÉÄŠx{gƒ©Q!ñ•O¹Ó–E6S1öhtÈŒ`P†Ø˜Ú¸ÜØÞøàÈ„`ö‰ÅƒnÓ‡ÏgŒÍµQ%h„,Ï…Ö…»Ôm †á˜ú¸üØþ(†ãè =µ(ƒÂ—=ìdƒóq è26¦€SØtë‘7ˆ±èXf­¦mê6+»È]_e…î>ZèenÓj¹¦_ƒUˆ¯S\íØ’»F¥(Œñ1:ˆ“¨l)i„L¥ŠÕ“õ¸†X;‰þa¥“¯“õWeY…&ÉOŨŽÅWÖW“‹Aø‰“6tC€¯8kÄ`kH½Ø”Q·ˆøµ™5½¥N;É“½—”–n9gY¸f¯ç”~‡4èc‡hPÿ8˜„Y˜†y˜Px5è—ù†€(˜ˆ™’9™” ŠvG‰j¹˜ˆçAˆ–‰§™¢ù Ɖ«èvЛə‘è™§‰š¥ù‡«Éš±CŸ š™ ˜I›'‰¯ ›iùpÆJ•h?·Ùb¡ù0š4~Å©ŠnØ›O`}"—vˆ¨@ljœ¹ ÄgCÆ÷R•‰QØœ¬&Aôež7rLyéDây×é"þï—Ä('íiñé ÷–wõ)w¿ù$ù~¨'CÏixèYAÔ·žcן*x ÓÂJ D ºyÿé$Êr.Ä'{ùêúTzsŠZÄ&'q°¡.ð¡­¡¢s™p3¢•·¨&ÊF(Ú,Ê7ê$ñC ×H—Ž­©{ª'&J˜4št>JOÙ™Øg†a2¤–“ ×F‘Ä›x—|–G&N +Ò@ǘ©¹[ú¤YÊ¥ƒ—¤¦LjxÊ$—,×ô£K¤lz†9 $]ZgiÊ~kzviÒ¦cb@ã·m‡+„zjÏq¨¨—Ù5ªš$”T#‘*FŠ{T¹þD—úEª£]ç •ZÊ$Iõ"¡Š £úAŸjD© ­Š$B¡µ¹ªŒqª?«‘òªg´©TT0 œ=4Š5T.¿8aŠJ¢Ùi“ÊÃ’@Z/ÇzCÚ¹Vä£o¬Šgð§L)¥±D}˜isQÉ}³·­NÀ\Â5…dd­ä¨~ÅŠ¡˜¬Ì1•¸™c{´žäÚ–Íâð*¡èêÓ]´0œæÚ0IY‡Ì ®·ÐgLV]ôø€¤¹ û*`™ã¯è‡jj”µ3sj™º›£h4?™±‹ wQ•ü¡±Í*z ƒù­Ê ²Ë«Âó‚~%¢'y P…/Ù‡&K±:{„ãå–45‚„þ8´æa8¶•Õj“×z­'+Ÿ<;±™,§T°-›¯3ˆ²‚¶Q®Ö³!;?K–Dhˆ\+µ»bPk°p6›¾tc]8¶÷p³ØŠ;è¶0[µ³c8äU¯.[·ªQXGfµÇ·_ÛbšØ>cÛOqåt¸²©š.Y« ª \Å·ØyµÕ©«:¹MP¹˜{¹´ú¹/ÛµOë‹BœN{¦ {ºXº&’®Éšq'‹¨‘ºû©c#»·iè‰ûv{†œ²˜´¡«×‹œÓ€­‹¶SA·³p¼½Ô‹Ê«º0‹O”2¼‰š{m5¼êa=rU5ñ‡¯úù”¾ \±Ã½»¸v‹þ±U‘¼ú“©´=ñ@q²J½‰eƒY~õ…å¥Pòu”:‹Pv¹Tø»‹úë…´QËøZh«˜ð›·ôx–ñº¹ TÀMsÀU¨”©Õ¸œ©¸¼nðhÁ€Áì(‘$´«A*Y’ÑK¼® ¬E… i… y`v{Ã"²Á Ì4ù+ÃR©ùaö{¥ÊºÂÄ:½Mû¶Ú’9XˆEÃÆ%¯»Û}‘Ã’‹kZÛ«‘@û¿PÌ®]¹[‚«Gõk¿ ½98YO¼µÛÀÓf½JÛ‡hL¾?ÜÅ"™ÄtÚ¯ZˬH8Ä6ÛŸBi<`yXe+±8¼Ž8·°ÆTC©kEÉź”ÆÅ¶öþj;«Ä–ÛŒþU‹sˆ•;iSœ³•̸{É›Ì5œìɸÊ£y|eŽtE ;Eœ 2··‘‚[³X+º»üËÆ°w”{ËyŒÇ™œ¹VÚ°úê˼ŒÌn Ê|ÌÎÌ ±+¹Òœ‚/lÌå{¶¿ÛÍajÍÌÜÌż®<ÄC˜°Å{®áŒÍ}kμ¶è¬¶Ó,»£*‚|Jú9Ë㜶ë<¸©*„ÔJ9p>`ã{‡ÔÊ ÍÙ{Íú¼¼ÿ7‚L”—|ý,Ï ½Ðýü‘HEœk ÅL©ÍºÑÑ:ÏàœÎÿšh°)ÆæðÑÏÜŠ(“J#•š§'Ò¶ƒÄT›Ïì:¯U ¨6þrªÏ ­}©“8LÔÔÈŠ ê™#¶J!J€ÞvÂ-%˜¨#M=˜5Ð)Ë~<%÷Ä#WÀ|Ï]BÓ4MË m ìÐä©­·ª¹Y°Öf,'G*$a ÓpÝ«DXÆÞ¼Ï¤[Ñfò«¿ÊÔy-ªiÝÖÌ·BhqÇ-&ÚØ_ánA4£J:qS‹mÙ=꬙-nŒTu>êÒÎÚΨ+ÚUê‘úkò´rª®~}Ñó$Ú´Ûf¦yJW"-GÄÙ<¥—Ò«’ú¥}ssýÍ@ÜòºÛ2†ÛJ÷Õ¨;«T÷ÜÇ}W{'ÚU]ݱ=N5—Ý%¶—_·ÔÛ<ºÉ}pg]Ûþ´…ÔÜ)sÚIê-*ÀÚMwØ«©È=ß}ÊÖêœßøÍßúMÏäÝßíýßËàžœ$É&}à&eàþüØ ~»¦Íž…ácÝàZÔ׎Ï~;ÞÁšfç]ÎnººÝÐ|-ß`5­d=â0îKÌžbMÑ,¾âŽHÐàK·XäƒüÅpâ7¥ÈG«k35ã\´EYää\ã‚‹Ä6bŽäKã Íäò9½Ú”!:¾«RahC³ìlåS­¼Sûƒ[~ä kæF[ÊbŽÇpŒMýÄÍy0ÅPÙ‘lÞæNÛ¼½ÜT>çDÉl(çx>Õ^~»D"wnØÆ: €‹è‚>è]-þÛL´ã½½ã”^égîߘnÑšnºsÐ盎ªi»Cýéé×¢îVœ:É8¸tØ‹êsúæó¹äŠžµâÌê²¾¤ð‡ò+iOÑê·fJöj5ô»ë¼¾ÉPýÁ±þ×éºç#Á¹.æ/nÄÝìIôD­ÃØŽì¦Õëpžåäõ î†$îdìíiîf³~ë*ì“qlä¨NÇÛžÈïNê¸~ïw+“ê^Œ@Q–Ìžï=íêk3Ê Òõ>—çVìá[»% ?³ÕñÿͯÓ\ÎÞ~ñ‘^å ï->òOè›QÍÙ.J^ò!ê ᲎«ö ó1Oß®Jó5óq€móÞ.BäŽb Îò-oã>áB?ô–žáAôHŸÌÂÎéLoòññ¼õÁm,V-ÞVOò(N©Ñ½õ_±¦:à`OͲÇ)=õóöf}!>vn]ö§ÇÜ’Z×p+¶­£{]÷u÷Ù†B¿`®÷4䢙—Ô€_ø†øˆŸøŠ¿øŒßøZ;libwww/Library/User/Architecture/PostWebReq.gif0100644000076400001440000000661005775143711021254 0ustar danielusersGIF89a„1ñÿÿÿÿ!ù,„1þ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹ÇdaàŒNÎöÂíVÅiµ¹>å÷z¿Ì‚g—WA¸ögX’¨ ¸CØø×&‰À—à€ ¨Hy8 ¡ÒÙÀ7:Ù‰¶ahYiêºù‚úé×òÊ8˜Ë»j:gçé  2›Yúš×ŒüŒ¬êÉŒx) {íŠJHYÍíí||ˆ}0X‡{޼}[ü1›^nîþ&NÿÜÝ̼ÿýKŸ°u’ðl£W 9ƒïT¸Pß²‚k¾cÆ0 þn÷jÃWÎ!»‚â,’K& HUB{N`œ™$-fcIÖHœÔµÌôc«‰Þ„&((ËŸL…MÄ•ñ¥SeT§LØŠ§¨^-£6¼™ªèÁ¥V¡Ú“ 3)Z²ÊäÊ`è[Rý¦4˜U«<¸Ð4=]+6dß°_Ç~\—°T²fk©4Ø¢nvƒÚ$¦W¹Á ªn˜m¦Š—õÙ”séÂŽò"N<úÜ⣖3ûB=Øqí©º=ª>ûë±W—J#Z4¦äÌáE [“¸m›i ¬‡»ôhÜE{׎»xJ†é¬£纱yptÃ_äw}:­ÈÀñ‘/ŠþZ]ï­þÏ*¿Ë e‚_ßVßn¬”“3òñ„™ >H¡nO…Žá n¢Ê’aˆ&žˆbŠ*®Èb‹.¾cŒ2ÎHc6ÞˆcŽ:îÈc>þdBId‘F‰d’J.Éd“N> e”RNIe•V^)b$ZnÉe—ja‰äˆ:ˆ ¦ŽÖpf™+–›jÂèf›ošEœs¢hçyÞ¹a€i’vÁž—ðã/ #­B¨‹Ê ZH‚"Úèšq1¢pÇUô\?ÖÔ#›˜“VÏ-¹”õMl±á„_¢¬V ©x’‚©ª«Özk¢ƒ.šª­ÎÉz¢©µf4ˆ«±b§þꧤõz)° þ i†Ôë*E¼Ël³ÎV­®%6Cí²±^®­ol«a·i95n¹bM»ì»ÇÒŠ.…Î9øN‚ð2« e$Í4¯¶õN7*ÜÅÁF(Œ° ñpÃWêÕK\Ňn$)Æ™ip £^ì± ëšïCÊ®Úiw\2'ûú®¼¡ÚÌiÇ1kD±ƒ½þÜn¹€¾¼3ÏL¶ãŽ·r¤E3s²çºk®:#? õÑóJõ·UO3ÖJDíØ«œá´Öb—Av‚ÜýË26i¶6 aÓ!ÃÝu¡7½îMFß» 8à@ô\ø‰ÞCž¡¼ø×Œ;þì´Ð•£ùä98n§Àdº©±m­¹{BÒ¶­c ”n:Ÿ 4¤¾²òë°',©²‹Šk{íàm‹—Æ|ÑÓŽrÓRS-»î’y˜ŠFë­Ò¡6{ô'LÿHõFÆù¸·5OÔKÄ.¾â;nÉ]É"·¯~v Þ>Çç¿þu¾Ÿ±ïÙOaWÓYÃø'!Úî@~ãÜÐÔ†0º/¸z` H:ÁSÛZËBç)MÁ!SžS×À$˜AV0^ìÚ U/–¡JXïCaï0ç7è x ¹x(¹Ö‹L8 b ;X-É„.W´SÙÄ(yT¬bþ#l‘C ‚䉭{žð¢hÃF ` &ü­¸ˆ;4ÞŽR»‹€Þ866®«/i[Ùùx…3)†ñNocîuô4¨{o«Ë¿Ì(­6º±~<Âå H 4Ò`¼‹$&éÈJZÒ˜\X âãƒGΩ“|ƒ ø®ç½M6€”ƒ õ`@U.€•zr%€¶Å|ˆpR¢|-Í`J° ji-ÌY*e©€_Êée>ÓÁe9 "3Ê<\0!bÇ42Mˆœæ,ÉhK”qïvÒ‚¦+½ €jZ,œ=ü¢9ÏKt¦œ¤3ß ­‚6žÓ›ê %;A¥²€¦   Ì":ûÙ8ÂåMž@(þćÀ^ªÉ¡;€èBjŠŽé“ÕF5º¹B”­ ýÃhFéIãZ`#Ø +.%ì!È\Ž|’hñl¼“ }X® ä yÈDö-xmó`3]:^¦i3ÚdEyÌ´iB3Kª)û³ž…eôŒì,-_ùr¯…¤ŠŒæ4«yÍln³›ß g4#ùŸ|íPåfÄs9´T¾œúJœþª|Smbæ³A/ØLës¯eÖV¡ ÄçÒ¬X]Ûf£õçLkzӜ—;g.˜Âƒ†ÍÈ–¼­GoTÔfdï¢/UÀâ†9Ôd~+ ñ“ÇwVNÕ1âõUkí6;‡D—$ì2¦}ý"d‹ø´³‡b­Xôé”5”ÝlÓ`ÚÃr´M[Z×7Éܸupnj×7ugUDŽ£ !`_:ÒLBºqpoYy@.›ßL¡:º}!ß6 8³×¼lží¨¶–ô Nˆ—´¨Ù#uÅ\nzÞF»áSµZV;‚RŽçxǽ—U•ŽÕ¬)V±ÉKµ_&"2®Î8ÉK~dþq¯ÆÄóskú„épœkHâé]q™WÞìÕʃqÎu>] ?êÛ}÷Ô©~Yó¾\ÚS 7'+äc{U]ë`Gõƒ¼Þt©SÈìb¯+z‡nm{¡ÝØB_;Ñ·]] åß[ç–kÿÞ%Õð„¤©9Z=í}rwŽ#ç^¥Æ¯’|–|îþXù±»³–7×ÈcúиœP«=:bÊJžk佩ÀÛVÒÓ;é a¿x_Éô{ò±ßüä]Ç{îç·>ôA}ÿ{‹o5[úT8óÈTúZ0îõ¢LcèüË·žŸÈ‡>£µ¡F€…_û6ß$Ñ˸ýàCµùOdU¥ןþ³?©«“!ÏõèWø_Ä,ú‚&¿üeNº—~åIç§Iчy<–DõdïÇ€ã–gË6z”çgÕ£^Ç÷€g°‡LÈjÁV?ItKè}Ü—/ÅGN¹6o%èUúG0&U4M(Kègc‘}7£D÷%j˜€òö5î¤Gº&zƒƒszëWj°fƒª„ƒ1gkf# >h„Ag‚A(… €ûÒ2°âz@H×m˜I§o¨…¤nfèIUv†jcˆhìÖr,%‡{æbH€i‡‡yx‚T¥1e>ÿ4w„Pw{6He…øÄp©ÑWH‡hTÊr¶T5TþxÈtD]cr37i$Ø‚wbŠy³x¼—R)Wƒí÷„¤²Š˜Ã>[øq3HŠÏ‡…Îyxa–XLSX‚ö“ˆ.½H~†hG'P…KG‚Èø,šg]X éÒuõuCÔ/‹‚Š&AHdz¾Uïõ‡YwŒJøƒ»øïXKã8{Å–/¶÷A¹Ç»ç‚¦ŽëØtÀ7T€Â×*ˆ¼hP;x‰º8LF´øG×8ÿ8<)£Fû7~¸8©>9‘Y„ÖG|>¤h—9žˆ’³%ègs I„i’‡·cCb4ÈrùE|xs2YQHH_8|kTHAéŒÉþxŠ<©P ˆ”[Ö€KùPè”!UeÙ†Q)•ˆ†¯g•§@g"[I†¶HPosg#ø!)O3ógÃt3ÅD’w–UÙˆ2X’o©EGÙ‡qé•\ :h–vz)—(¸r5g—¦ö•‚©|ØN¸ø:©˜I)„ybny…„™e(–u†}^(7`Ž™™†E7˜¢Iš§9š¦)™a¹šª‰šs‡®ùš;çƒí˜Ž²‰C¶¸¹I­D˯÷ŽüþÚrãu´WÏ©¥[8ê8‚!M'ß2–%„ß¼ÍãÞÀR†vøÃ††(â hâ‰:”ˆâŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TF9Ê•Xf©å–Uv©ˆ0¨Ø˜^æH& g2¢f™NBx„›„ÈÆæ’p¾ùÁIs*Y'{þJžI†fŸÃôqÉŸ€) …ÙĆžcn ^¢AÞ¥Š„^:B¦…R*¤8Š}šØÇOG¢$&§ˆz $¨š–õž²èh­¦­y¨«?¾Óéoº:º&°—ÒŠ(±~òþJ¥¯±ŽU×­­"d,´Â&«¬”Ì»9ÔÊV®¥vl¨×> á7Õú®œÃþ9­·­ª+”;ã¹á©6«¸úrë­¾ñZ ½ôÚ ã¹ rES¸rÂgNªÁºÁWlñÅì"«NLŒñÇ [¬ñŠ7Q²|âÉK°Ì€È*¯l‚ËŠŒ@qÌ$Ï,Íä~P0Î9—À3Ïš­¨Îj¢cê¬i¦ @F¿Š4®7i‹´du¯S[ ¯¸›.õØd—möÙfo!Ñü²Ëp»:£-÷Üh«!Û_ç ·Þ›žm7xï-øÛo‡öß:Nø‚Y®+Ùˆ'Þ5´þ¦ÓÝ h9ŽŽÇ¢áæ\‡ùùl ‚bç¶Œ¾šé/º,&u¢Î:'ëDì¥ÏÎaíEËnh¾ë~úѨÆçú(¦Â‹Èò/¸Q-+œß<47",²ÝBi£N_ïÑß6ìì³ S¿UÀnéþûðç.þ äo~ù>ŸÌëš½Ùôü«Û•ýÒG.†yOR¢° þ@;Ûë—Rø=f@Aâ«ÝAwËP€ œ›7ÂÈ®„¢h`Í´pÂ+ pv/Ä Ç£>"P…!´B X½ðyŽ]6ÄaØ\2âq}AÄœ¯vAúÉ+Z•{¼¢ˆp)mþUKÜE|—­[,6´’àÃþÅ8Ïdqf1 {ƾÅk]óÓ»÷Ã3 m Ä#¦Œ°Co"ñ ã˜:;æ1~ˆLä¤RXH¯ÝgŽ­ñ× ¹·GCúàg&«ãSI·ÁX”4¢%@°ŽiÒ(TUÛ¢Æ úð•£ÌÁÍ2i‹„QÑ!žì DY-‰Å’”£åÒøK À¬eưY½Šé³Œ!“8ÊÄ$33ð1&(N ™69MHó™´ØÙ.¶INnvßTÂ5Õ¨Åy™óœHgÖYŤ•Ïxë Á1áiyÎsjbL¥à†¨ÏRò“šË4¥Ðr JGt`þ =(:#jÍÉ’¡í”h üÉ'‹NÒ¡âÌœF_ÀQ;-” [H±¦¹‘® ¤& 'JZ¸•Òí¦ssé`jzj+ŠV\(N‡Z76€§E(!1á7£¢©IÁR q8§šªDPªê gÕ«RT˜cÒãIŵ®’«Yí?dÖ—~¬Ì‹ÖíÚª´xJžÂNb  Òµv½ë,UFšºòwì[áz tm’°ù«ab•©ÃE¶/ýø þ&{ÖÅ*”š5‹a‰DÎÔ…~…£jã5Ú#Ï´îÄÇlg¾Â†6µ°õ¦g›VðD;‚<àksëƒr±UþXj7ÓÊÊ–¸Íüjs›\è6|¼¡u‹»[þu`à ¯xÇKÞò&C»•ŸbwKÚïŠ`À¤rA{ÐéF3N'€oô»Sã:&©óÕX Kj_ð—¶@‚°OédU¬§Q¤„'<ÖÀ´Àîm|Á‹§L3ñû|äÝ©žOå©z?à/8/nðü ü%ê ÷¾9p±^üS…V¢_;çßð÷Å<Þ1~ À Kö†®…({c ß$'UFY)»5'Ó7®Qæî”©Üc#yær™VÀê6–Eα’±¬c4׳T†Ÿˆ)ãöq–þ³5Œà +9Ï1Ûs%gs¹9ЂÆrç¬aDGU%s,[qiA[YUV³§fûçæ4ôBÍIb :izÒ ¸r¢U½¿³€R‚}³ ,íƒoøÎ±v—Ký@ÖbôˆŠnäªE 3»zÐ’~µÚðjãcç1ln3 X̓#ÃÚÒ6­w•Òk/„åM·ºÅ»dnw;Ö05¼íVìÚÐåÞ—Lç ‚3{²æ·´NÂÁF/ ®Éµ® ^4ÿà ¦t´³˜=ºüvp8!“)|½þòzcøÄGNrz™‘—4‡;Œgwëc"§sÉc®6æ&ÍÏNùþðñ—ƒ ç8óü}r'}æàù˜·2Ð<ÞÊ*§ÔK>?#6Úï•]æŸhØ·»¢?y•Mä@ñî”s˜ã/»Œ)ß› Ù‘­U¥J/A±,ÇíJŸ<éÑtù‹®V’›g}ÈùùWÇþá³w€öýg|÷¥;k½ÄÙ>ñßK=ø€ô‰ŸZï¥>i E7¡ïya‹~ôÄ•¾øÇOþò›ŸüdÏM*GóÅ'YØ+½þDÏÙóÛÿþæ¯:¶ƒZOŽ”ý¼@‡dz÷zîäw:u~Ô'Z•vòup§[Û$Qå—€RU½G€üö€ÑôsÝ4~(: È|Ë7rJ×ÚTLÓ÷PoÖSŒ·s-ø{AÐuœ¥A˜1Wc†Fh=wIÕTL=T}fG"-èu”¶ƒÀôNBTbìƒvyeO¢1±x7¨·t&øaKôƒae-ÒcXo´p_§eVx„F¨;Z¨V½s|¿BAœ·_í|€†„fe§Yç“x«E‡tx|xe.gr:˜FP—©·Y»‡;~ˆ3ˆ÷FA„ena†_3P†KÀˆâ¦kíSƒµÕþ8‡xu4ð‡JÀd8n¤ƒ¿uqÁ„|¶QŠø¤˜‰šXY>7†—h‰÷\< ŠM€‹ÂStµ'K¯ƒ¼h:ÀHlœ6ŒÄh‹‚ˆ^Ëè7£ŒörŒL(Åè±8cÔ¸-GpLMfuj$Ž8¦˜¨"–ŽZ‚̈XÈ êõ}µ2¦„8€ôÈ`Òx…ÒDŽw´’ÇT·EyýxI“H]_íXQDÔù éŒÙn¨ÁH‰¦ØÞS¬¥…™rcÃu‘ý•°ÂŠ*Yw§g’¡§‹lÄK’x(¦x¸¦rw.Ùr¨ÕŠÃÒ~ØGFžøI^è“;þ™&¤l¶·(¶W,˜·„+|HI{>ÙG2ÙI™…•öµg4•X• ¹Š3FOIZ\¹D^‚D’îR–ª÷Qf¹“')ø¢‡”“d+B)P¾$—GE‘>€0±W¸DHÉQ2i˜Fy”€y7ç—/iÐ[œ•–-p–Xy9M–‰r*xß'ƒtÕ™E´R-™|¡)š]Eš”™%éšuŽÅš9$Sý·4îÂ@D#›#E›LR]hm°)yÉL¾YaÀ‰zÂù™¥Wœœéœª3Då—È ™ü˜]Ò©œÈ÷›O™Ç9œq5ÆÇDccßišÉéE¶õ…’ETîÙRþfuž_–žS\ÿ‡@ŽQ¥–$ÒT&Ùƒêô•´WUÊ›6øt'@\Ř¾¸ij5B™–9e%— ¡’²Vµ9‹æ¹™ŽŠl9ŸÕh ŸÉ‘’á„„™<`Œ~ I‰†¡œC™{(J¢t9Ži˜K±2@ [ò¤óhtÕf‡>ŸÔ‘:¥6À¤JJ‰…·Ej‰Ñà™¯©Z7–o«WZm…™Ú¶¡›x´ž—åˆt¦ö–Qê[Çå0gª‡V¥¦^ʦi•¥sÚƒâ¢aÊ·Ó tÊ+L©û žž4 I­ÜE²2¤k©È—){‡É ©.ÛªYº¥Ê)1¸‡§7‹³#ª³mþ'=;¢ðù³Ž©‰™ç……1®o f Š´I›³o\´¢ÿå9ùùžR‹ž—Ù¤[˵]{¢­)„:¶*°_µh›m N,Õ¶“Zlwù¨v*·°CµÃÚ§e‹·y;¢ÆQ“3)³Nø„€ë·i;¦PÄPz9–ŒS²ˆû¯*WËy{²j¨‘û·u[|c¹³|›¹Mú;QZSÖ'«>+º£ ¹Ÿ8´j˜løªº/Û ‡µ´ b»ŸK°P)»üZ ”¡ŠPXå¯{Ë»þ “Æ›¸È›¼ÊëfÌ«¹ùú¼s½Ò;½ôZ½SûYØû!öz«ÛÛ¯þc¯Ï­Ðú½æ{¾è›¾ê»¾ìÛ¾îû¾ð¿ò;¿ô[¿ö{¿±”;libwww/Library/User/Architecture/PostWebUser.gif0100644000076400001440000000544105775143715021450 0ustar danielusersGIF89avñÿÿÿÿÿ!ù,vþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷«bP9ré•x=yËá¢6›~ØÁÎ}þãG†wpX"W1‡¸±gç8˜`È—ä'yÉЈ©b™‰÷Æ8ø¹iÐ9YTYz'ºzrª&«¡‰°hº‹*¤j êÛVVHÚKJHwû§¬ú{—ŒÛ|< ­Y8gL- '½kTìܬ(Íìë›NÆÎíz­MìŒ}ì¿î.Hh/nMþíH±vè´+¨LÂ?ÁÖ\ˆ°¡>ˆŠ¢=\–o–µþˆÈÆŒ{pÇ@HÒkP²`Ê&M^ôô©¢B•˜FÒì×ídÈ #oUt¸ àÄQþ>ÞÔùrQOØ„¶D·±!¹¥;y’ìø+¥{McBLç°åRfKQ½§Õ#Єá¾VíÑÖ`MOz­Ë/ìUzá¨Ns›´œ-¶{g¾ý16£Q¼ë¹‚†óÓ…}ï¢Ìˆ±Ÿ¼z›ó,>lU&>¥,=#öß]C¢w³ Ó'׃bß!ú š×l¨ ÷ÖS˜wW»ÓªÕiúQ­‰¾Å•£;ºôéÔ«[¿Ž=»öíÜ»{ÿ>¼øñäË›?>½úõìÛ»?¾üùôëÛ¿?¿þýüþûûÿ`€H`ˆ`‚ .È`ƒ>a„NHa…^ˆa†nÈa‡~b?Hb‰&žbxÐé°bŠÑéÂ"].$£5ÎÈÇ6âøb:ò˜Å@ $DYä7Gò”ä$KòÒ$O2eSBYåWR™eZvé% Ÿä°%˜<”éÑ`8”i&‹f°¡æ l¶¹æ›pò“ 7ûçÁœtÚ€&žwJ&hX{öùçâihD{ú)h¢O,:èh†bÅ&¤’Æ@)œ>©fŒl E§iÞ9Xš5ÙIjÚ¥Ò¡¨Îʦ­¶ðj;ìÈê«·*a«H¿2¬›Ãkþå±ÈšÑ"§ÊR"fs3û, [Šblµ© š‰]»‚ÚlÚ‚Ã-s,!sT­ãnÛ¦³¢ûn¤WR». å¦g¥ òš½õ¶{ï>ð2ªæÀ£þË¥º‘Ä»/ÁübàoQ'NL1Å^kÏ»kÁʱ°À8-Èf:LLRU®ÁŠ,gÄî¹LŸ¶Â<ÍêÙŒF͇LZ!ÎzÔ±s©úŒ«µŠNH4 2‹ˆt˜!$ ‹„P£0çÔQGhµÑ@c‘õw]ûj¯_w7¶ÇOÙ´ÐZ;-5ÏkCŒR·úrÒ³«&,×¾—íË€® sr}aÊ5N˨cªõm£Œsö$ßâUþLyå&*­øÂY]ZèZ¥õûëKà]h¨œ£Š®Áp·:€èË‚Žz^‹œ¯ê¬Úz믯î)g;Žïɰžûî·÷NÙﲞêñ‰æ^<¤/®Ãµoœ¸¤ÐG/ÐÁòÎ#Œõð‚¹öÛsÏ.–Ùãî:´6bû¦èwâq³OìÝdÈ ¹º®¿0Ü/€òkŸûÞ–³«™ÏnA[Xžü&®2ÖCŸgÀêL€´êàÖ0؇ jvT“à7è@°”„!l`¾¶Â?ýï„,XðD¦ùïið°fPئÒk2Ì`þ¸Ð¿ûèðˆlË¡‡È´ ÑmM¬Òþ[x…$¢Ær\äâ¦è£*ž ‚.°ŸÀØ„jq}ï£ÄpÅ$@ï…jC Ç#œ/…u܃Ç"œŒoTYÂîxF4.aDd¤Ä@ÊqŽûc¢ÖI"‘‚K… é<hÒ”T¤ïB£>+|m”D ¤ºK/êFŒ1p¥¶·P²Q¬¤-õ£ËøñÒ”¤üe.ÑVË^ò` æ.W`LAr²™ÉrA4}9Í9S˜)¸¦ùDm“w(ðæÀN3”$0ç Й6d¶ÓÉ„§…ÖùÊy*³œè$fÛ(\ΠŸû„Ð”Ìø‚-e³›-hÝþhñCai€™&hèB“4=áÉéàü€E;º©Œªá[{~Nà£ÕVäR3ŒGm,'x‰KoŠÓ‹"l^ûðø9u¨DjN)Š0nŽaãã—S VÔ¨JUG½iRÉ­¦6 [`cÀT…ºÒª"UY"›Yš—³Y`ª­*©ð¦˜™ÎT.Sj¤z‚œ‚é ÊÁÊY?BF®µ¨Öl)ð9¼v  MbcF‚ž“ zlK ÙPöžÕ<Q±©ÓYÖ*øììÉ Ñ&p¦måXGÖY´Vš¡õj!`³Ùê±¶ÇÛ t»[è¶”ÁP¿þHOúwp¿+rºžåò‘À]drß#]:R×¹P¸îHc ^¥ÏHh8vcãJ¡”é„ /K8Lâö¼¬ïÔ»^áþÅ“C ®Œ6ÈÅ4ÀmÀoôKßY¦Ò‘Xý)ðô¤'† ÀÀ·Dpó4hÇ?–7ÀL«‡ç† +¤ ¦ß!¥—ÏÎeÅ1±‹p„'ÌÝ4"Ø¿ýÝ&Ë´jÃ3­0ÀÑ'ÝB"CfªÞ`¨ãÒ- ÆÈ,ƒEÞ(—ÈlSñ<EÒM09ŒDl“ˆ©¨Ê?}Ù’Y³!)OÙ®¾Ÿš/ƼÃ(ŠÓ0Z¹ð· @ N7ÇzÆî®$Òþ¾¼ÆS~… ŒûȬNò¹†Ø•éïR‡dǪŠ3¹jœâªµ>^¥?íb$Ó Ï(ÖÙâ„Óæ®¾lÅâ³á¥n£dI‡ŠÔ&>Û©«g_³5ºÕè-i‡;äÐz¼v µS¶ø[_Áa逼= [Á[3víŒRù¯×ás¶•=3B‚@bÚ NöŽ—ÑaU›‰Ü'.×¹µª©ì–‡ÝHbêæškïIŠÞ—Ü4Ss‚쀙™Ì]Þ¿áÛDYºÝanUf©½a„š%†túj©Ië–ŸiÚÍÝwT1¬q'Sã 8Ä9./‹°úq*Ö ¡.ëñƒgkµ;J·qþ|wÜà ϰʞã†1û†f%¹ÇóLrLÅtѯ†µÐ¾o¤Ó¼×tôiºƒõžIyë­IAÆtaH¹ƒXŸ:Òàë´£|íq½‰\å¹EgýAjO(à`®1©pŽÃ½ð×*uF»ÈC³¿1—ÐxjXÝ D<Öä{ø†TÎŒGóä%_yç––Ï„|ƒäíÎ#z󾼿IÏy}Ÿõ7}œY¯zB[쩺ÎüÉéžl^‘¨¯Š|­/p°OWøÙ¶–Aÿ…kaÕƒÄÏwb?öÆ"k3÷¦«$õlÏ,®k¿îÃÓSwOß_õ‘ůþòg6þ~Ǿùæ§`ú7ü=üÓ ýï—hùçoýÐ×¾þ‡£>þÏCüGÈWbXF g€Ó‚€ è,íÂ}îÇ€‰·T55€Øª'9X%åsÖl½BhûgñQC¡s!XW¢7‚ƒ×'ÄÇcÌSt*¸‚^ÇCޱtÌvm7ƒ,È*à§<Ë'ƒ;€Ï§d@•n·wBH7ø7˜¦ƒJØxeºç.ú·sR¸„i¦…SØz]8r˜†aHycè…eh†CÈeiHƒ_Ȇj¸xo‡'‡dHpuh‡ ‡‡mød{Äæ‡Js|2Ñ÷€„H…ÛÇuˆÈˆèˆ‰‘(‰“H‰•h‰—ˆ‰QR;libwww/Library/User/Architecture/Post_A.gif0100644000076400001440000000377105774674334020424 0ustar danielusersGIF87a>èñÿÿÿÿ,>èþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡ÄâA€L*—̦ó .ÔªL`ÅZ·\”–úíŠÇpÑLN«%èa{ ³òºðæï|zußHèC(xX臸8¨ÈøøcÈ# Y C©ƒi¹©¢‰ãÉJjC*zêaJ£ŠÚŠa+ÐÃêz;ÑFk;‰ûk¢‹°Cœ` œ¬ <| ;ÜÛ MKmüLÍû|¬Üº`<­=½+]í<Ž]Žž-¾€ì­ÌŒîîN¼ÎK?{®_Ï/à…yþðù£ga>… |È\³ƒ )Z,˜Àà?þ𠺚'œÈ‘äª-Ô2eCŽ[:€Åï^È’åLª³©_Éq]úœóç§P]Љ4©Ò¥L›:]:´BÑGï„‹ú`*‹ªv®¶¸IÓfLh8gå,刂W5kY w.nC 7^I;¡-½*èn|Ë£ÝZWp­Ã7…N„gÖç-ˆmí@–“…ß{ŒÃí|÷C»Êß.dærÚÄæŒ EF®8£(àÁ.ÇIMìγÛ2¦´æ˜ðä}­kcÀ]ùPÙÄWr°}ÜBðÜXsM6yñtÓÜWx½&NíÑ7ôSÛ÷;M…;•×pžtoìÎÌ‘ì^=)Ë øþßCiŸk5¨œoOˆ`‚ .È`ƒJ&yžÁöØEN”Rδ—Âvj™e¡³Qáw Ö‡cAXÁ……Èš`uÁ§ÄH2` JÀY…$Å—‰-Ö(â~*÷ž;ªø›Y”õ¤xÙŽŒ=)à5æèÁ’c¸ØMpVþ¸OYè×KIÞFåZ8öVv'tbVkÂ&0myM‘0Ö¥œ—b䉋^cúˆáˆ2Z×›ÚÁdÒuf>‘AZ"bùuÉäo9™9œÀ—)fXÆ¡w®A¨(©¥zÂQÎJ+‚BM׬ÁÑ*•I…½úŠ!ž`þÃKšl™ì˶yá³ÅÅ+³€ùìU”Å¥>¸æš­¶4npì¥9*z©Ò𛡲~:'ß*Y.¼–·Í¤Ù¬šALհֲ㧸 ¨«ßB·A"\¬J ç«ïÓZ;—yì®·4®qü)›±#7< Æ)_q°;ŒPÉeȬÍÞèLÎ9ðœ Ð)žüîËÇL´È/ÛŒ4.k+´‘F°ÌAÔ§X ”Óë‹uÖS?M$Ó%P-ÙçÛuOg€mâ*>ãö"q«ÝÈÖaÏM·lC|ƒÙ–ííÞï¼}ƒàšæà7y"¯ø“ØØ&=ób×þB8 Œ“œä9×é‘á˜~--ç9íÚÊÂ9º‰ó»¸ç[¸Î©æ›ÃNíÎVn9éWÛ~»ì9?Ä{ìZ£\³ï@¬^ª2Á‡\·tµ>½†É-φÖ_}ö«²•œÑÛ§A½ÊÞ¿—áÿrþ¶Dè>~Œ‡ÛÝ>ù_ÿ‘]Á_£x†žÿÙ¦ö¾xpJ3ë_Õ¬",ð~?;ÍMtAÔ¡ p’ÂäÒ!Õh€þ³\¦ÒÔ§£mŠ5(äztxq0^%|¥Ü'Bõ¬P~Þaavæ’²êï+ð±Ænv#Á ’ð:ÄÜÝRD#¾Ï- ÔŒÃØŽeu-‰“s˜þ‡³(6q‡4äQ¢FE¾©/ŠZ‚Œ»8Æ-Ö0Ð ¸Ö!Å5ªÑ‰WtŸ¢ñÅhqŽhŒÔ¯f„¢óÔqa!ƒBA‹|Ì¢h&23*Œ‘yl$·Å8Q…+ˆ6¼Ž%yxÄ~ò’Kå(ÊNž•¥9«ªZ6ªŠÚÎ6 G³ùSmÝ¹ÙØªÕ³ù´govFê6µe(hGÙ[/ÑNò«³nYÉÈ9ÌV JsÕ»Ûýa—¸­Ü.%å]Bö5¼ßÕ.y… ØóÒÔ¼ê]/«Ú[Þ÷Â׽ܛï"åk_]²7¿}´BXÕøß_ò—‹àp÷kà—"8ÁªM/ƒ Þ¿³»öl„+ÌÒcØFãÝpsSéak8Ä0Ã/‰9 ⟶À*F1…[`á¶Ø±ó›±ˆMlã—/Ç%®/u\ã›öuBò Š Architecture - The Protocol Class

    W3C libwww Architecture

    The Protocol Class

    The Protocol class defines an application level protocol (HTTP, FTP, Gopher, etc.) to be used by libwww. Please note that access to the local file system also is considered to be an application level protocol treated identically to for example the HTTP protocol. The Protocol class does only know about the application layer protocol and it relies on the Transport Class to do the actual communication with the network, the local file system etc. The protocol class defines an access method for both a client and a server. A typical client application would probably only want to use the client method and a server only the server method. However, any application can use both which allows it to seamlessly to change between server and client profile as needed.

    Libwww doesn't know anything about protocol modules. This has the big advantage that an application can register any number of protocols including access to the local file system. Libwww is independent of whether you make an application capable of speaking all known Internet protocols or only can access, for example a HTTP server - to the Library it's all a set of callback functions.

    The Protocol object handles two types of callback functions: one for a client application and one for a server application. This means that you can register not only any type of protocol clients but also their server counterparts. Whether it is a client module or a server module, a protocol module is identified by an access scheme which is identical to the access scheme known from the URL syntax, for example

    	http://www.w3.org
    	ftp://ftp.w3.org
    	etc.
    

    The User's Guide describes in detail how you can set up the protocol modules in your application.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: Protocol.html,v 1.9 2025/12/09 03:21:12 jigsaw Exp $

    libwww/Library/User/Architecture/R.gif0100644000076400001440000000027405774674335017434 0ustar danielusersGIF89a&&ñÿÿÿÿÿ!ù,&&”©Ë휴ÚkÞüêr_HVc‰ž(©®`ëŠÔö„ð„÷y·“Ô0CàlS¼$1AÀ²ò̉?e•9µ"¯ž¬%*äv 4ßíå…šÁRòÖ*n ÊT´»Žß4ÙÎ8eï×gt§•‡EøÈ'ø&ƒ¨æ¨—3 Yy8‡i§¹ùØé™ú9j qŠšªšP;libwww/Library/User/Architecture/Request.html0100644000076400001440000000620507130400453021032 0ustar danielusers Request / Response

    W3C libwww Architecture

    Request / Response

    Libwww is based on a request/response paradigm. A Request class defines "an operation to be performed on a URL". The request object is the main entry point for an application to issue a request to the Library - all operations on a URL must use a Request object. The request object is application independent in that both servers and clients use the same Request class. Examples of requests passed to the Library are a client application issuing a GET request on a HTTP URL, or a server issuing a load on a local file URL. The only difference is that the client gets the input from a user whereas the server gets the input via the network.

    A request object is created with a default set of parameters which are applicable for many URL requests, but the class defines a huge set of methods that can be used to customize a request for a particular purpose. Example of things that you can define is natural language, media types, what RFC 822 headers to use, whether the request should be refreshed from cache etc. Scroll down and see the set of parameters you can tune.

    A request object is registered in the library by issuing an operation on a URL - for example PUT, POST, or DELETE. You can find many higher level "request issuing functions" in the Access module - the methods defined by the Request class itself are very low level but can of course be used directly if needed.

    Whereas the lifetime of the URL (in form of an anchor) often is very long (for example as long as the application is running), the lifetime of a request is limited to the time it takes to service the request. The core does not automatically delete any request object created by the application - it is for the application to do. In many cases a request object can be deleted when any of the termination callback functions are called but the application may keep request objects around longer than that.

    Libwww can accept an unlimited number of simultaneous requests passed by the application. One of the main functions of the Library core is to handle any number of ongoing requests in an intelligent manner by limiting the number of active request to the fit the available resources as defined by the application. This is described in more detail by the Net Class.


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Request.html,v 1.11 2025/07/04 15:22:19 kahan Exp $
    libwww/Library/User/Architecture/S.gif0100644000076400001440000000026605774674341017433 0ustar danielusersGIF89a&&ñÿÿÿÿÿ!ù,&&‡”©Ë휴ÚkÞüêr_HVc‰ž(©®`ëŠGÔ5;ƒö~wpeö6¿IÐ2Ä%IJ3“Û«JêèÓ­4¢–c64ˆ´r=ûÂ+/‡%Å~œ`íÆ3Kë2­¢ì®|ÞÜŽ’ëén‚P_ò’dúkð[ q³ È·Zǵ¿ÂÒ2éÃ"f%Û~)ª±ãÇ: × l´ÉÖ®mîWmª4«ß$Û­.ÛÓŠMv/¸ðáðD—0Ž»ÇÃUû¾øÃ òÓ“«X>²7èÝ h®®ÇºÂ¯8Innû§6ñJZ&–l3ña™¯òa¯¼ ýþøã7Özöý×QH E[Z.˜ÒmÙ)Ç`„×Ý2½ÈÄtø'!Cõ6Y†ª¹ôW‡ÚèÆ@i‚Q˜SY1…Ûy˜¸^€œ­(€Œ±%Ð…¨iÈ"÷@FU ¸=|ç 1ÊXßWB*åÜePÎw•Ò5Ù™g«=‡S‚¢_Ü=×Ä­ÉfpÒ—ÍT.ýXâ˜;`w#̱Œkbnð§;*`&z‹ÉG“: z'yÙuf–‚0)•2š#"ïEcl]ʨubJjY–Š*ˆ5¦Ê*ŽT¶ «¨È «=´Z+«·†™ë$Þd±ë†½F°¦ëþ“b¤¥0J‰lûœGV[.mº½Øåm~ î5Æ™í«î…bE~žZ®¹<Úh­³Qâ0n»RÂè±ØÚ‹¡Ìb5Þ¾ü YoŠYð½w˜°¿ ÓØ°ªG±«7¯Á-®*­ãz–|¨Tœé}Éi ÉíµE“…³ë.ÇYÙ‹/'%–ž©Í‹ƒ¢&ß0ÀNJ㤫…\e¾êb£2Ï+tÉ!é)W}%­d¸Z³ÙtP vØbMvÙakL4Cf‚‰³²X;mõ?ÛðµÔ3ùöV¼e¢òvCÔC›‡å9µ7Ÿ²½¤ïÜÚzZÓ3—íA|1 € Uù€šSÑô—_ÑùÁŸgî!̤'7úéì¹Áz뮿ºê²ÏN{í¶ßŽ{îºïÎ{ï¾ÿ|ðÂO¼c;libwww/Library/User/Architecture/Streams.html0100644000076400001440000001521507130377111021025 0ustar danielusers Data Flow Using Streams

    W3C libwww Architecture

    Data Flow using Streams

    A stream is an object which accepts sequences of characters. It is a destination of data which can be thought of much like an output stream in C++ or an ANSI C-file stream for writing data to a disk or another peripheral device. It can be anything that accepts data, for example another stream, ANSI C-file stream, or even a black hole which absorbs data without ever sending it out again. Streams are used to transport data internally in the Library between the application, the network, and the local file system. Streams can be cascaded into a stream chain by directing the output of a stream which often is called the sink or target into another stream. This means that the processing of data can be done as the total effect of several cascaded streams.

    Streams are both used to transport data from the application to the network and vice verse which enables applications to send data objects to the remote server which is a requirement for doing collaborative work using HTTP as the transport carrier. The stream-based architecture allows the Library to be event driven in the sense that data is put down a stream as it gets ready, for example from the network, and any necessary actions then cascade off this event. An event can also be data arriving from the application which would be the case when an application is posting a data object to a remote server.

    Many stream modules have their own subclass definitions of either the generic stream class or the structured class which we will describe below. These definitions can be found in the individual stream modules.

    The Generic Stream Class

    The generic stream class is a superclass of all other streams and it provides a uniform interface to all stream objects regardless of what stream sub-class they originate from. The generic stream class is defined with the following set of methods.

    The Structured Stream Class

    A structured stream is a subclass of a stream, but instead of just accepting data, it also accepts the SGML "begin element", "end element", and "put entity". The conversion from a generic stream to a structured stream is done by the SGML tokenizer which recognizes basic SGML mark up like "<", ">", entities etc.

    A structured stream therefore represents a structured document. The elements and entities in the stream are referred to by numbers, rather than strings. A DTD contains the mapping between element names and numbers, so each instance of a structured stream is associated with a corresponding DTD. The only DTD which is currently in the Library is an extended version of the HTML DTD level 1, but current work is done to update this to comply with the emerging HTML level 3 specification.

    As for generic streams, it is not required that the stream actually has a output - it can for example be a stream writing to a file where no output is required.

    Cascaded Streams

    Streams are often cascaded into a stream chain but before explaining why a stream chain is a flexible construction for data transportation, let's have a look at what kind of streams the Library provides. The stream modules be divided into groups depending on their behavior:

    Protocol Streams
    Internal streams that parse or generate protocol specific information to communicate with remote servers.
    Converters
    Streams that can be used to convert data from one media type to another or create a data object and present it to the user.
    Presenters
    These are streams that save the data to a local file and call an external program, for example a postscript viewer.
    I/O Streams
    Streams that can write data to a socket or an ANSI C FILE object. This can be used when redirecting a request to a local file or when saving a document in the cache
    Basic Streams
    A set of basic utility streams with no or little internal contents but required in order to cascade streams.

    The first four stream classes often fall into a natural order in a stream chain which is indicated in the the figure below. Here two typical stream pipes are shown for data flowing from the network to the application and vise verse:

    As a more specific example, the figure below shows how streams are cascaded when data from a remote HTTP server is handled by the Library. In this case, the stream chain is built as data arrives to the Library from the network: The first stream can decide whether it is a 0.9 or a 1.0 response from the first line in the response; The HTTP header parser stream can decide the format of the body when the header part is parsed and so forth. In other situations the stream chain can be setup before data arrives if the format is known a priori to the data acquisition.

    The ground symbol symbolizes that all data goes into a black hole where nothing is radiated from. The two stream outputs going to the application from each of the converters symbolizes that error information is separated from other data objects. This allows the application to direct any body part in an error message, for example from a "401 Unauthorized" HTTP status, code to a separate "debug" window where it can be displayed without affecting the current document view.


    Henrik Frystyk Nielsen,
    @(#) $Id: Streams.html,v 1.16 2025/07/04 15:10:01 kahan Exp $

    libwww/Library/User/Architecture/StrucStream.gif0100644000076400001440000000237206227274463021500 0ustar danielusersGIF89a{‚ñÿÿÿÿÿ!ù,{‚þ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·ÜVà ‹Çä²ùŒîª×¯ÑÍŽËKpa}ŽÏkî@¾þøàç3hxXÈ“xȘ·¨óØ(¹‰S9I#Vq‰À¹©ä™‰Ù×y:qjù6úsWÖé7 ð¥kðj›[Ë{€Û» l”S̪âêÛË,œKûÝ,m[½< } # m‡Ü£y=>½Ì\þê›MÍNÄÍ}¤ n¢\F/Ž»~ï¯]ƒw <ˆ0¡Âƒó¼ÐÛaÏOºrûn™S‡1ÁÄþ†-Æ#õ0GÄvÎÎÙCG2#E}Bà]8ñÓ>C‚÷Ì•,•4w™ôù 7lIh–ú(¡¡Q› ˜2XkçÎkÕ¬aìëcM§+brõökiÉ•dïå{¦ñëŸj_¢å)®IPÛÚ-²(èÆ´s¼¸õ®àuõÆ-ë•ØÁŒñ͸QßT¢}ÑÕml §ƒH"‘Ì*Z]”­êÔ©³(™›Itv8äµj֥؊34E¡¼„±Å»j¶±%)•[qЖÝ܆ž_ßÄ{§C¦ë¼‡GÙt ÃT]«ô~ÅÕ?¬`¡úõìrwí½ qìžÑÿ“ˆþÇöàñþY€' •a(Y§s‹µÒŸü 5UT VGÚqf}Æ_‚š²‡t‚Ìta‡õìQßSzHbÚœ†¼Wb‚'•ÎX°Øb|'ªMbÐX#t/‹Ž´õØŽå4 _,5ñãc ÎÃ#‘­¸Ø%—1ѤgOŽ(¥|Ø óŸoR‰%.!EA!Aêb—^"wdXו5Ä~±¹Y¤nÂ4Ö}Š1Ð^ ‚.T¦…âIexnA8§;ï ù¢þÍ·çsÆhÄ™‡r°)¢–ʈ&£sujb…’¢ æd§ýÕŒªTwç©YZj¬²ZAk­ßÜZE®ºÊÃ뭾ÃYþl—Ǧ™¬¤Ë¢Ò¬§¦FÛ#Ö^‹m¶ÏR ȶxË­#Ó†K"¸’[í¸è^hî”ë–Ønñ¾Ëż”Ò롽ᛯºüúè￳é§ÀÞ¢ÁÛªðÁ7<˜•I¶É,ÄCp’ [Ì$Æò5!oÁøå1ÇÂq&¢y½Q# ¼&Ÿ\2oámIà·/³y¬ÊrÞžîÞÌÊ0î;²“Ù tÄ6Ó‡)œGCšôW۲ΊìrÔJ3¬u[?ÝõC_CvHc]6‚\§ÍÔÙl«åöÛ\Å-wÛIé9iÝvç¼$azï}®ƒE‡rß?ÿ ŽÄNJ6ÏdŒø(žTÏ]™X>gyâÄV>Þ_†§œ92•Œô'ŸßºäKË5jJ'œz#S³¹PÖ,8^ÃŽy쨃kv“ûÞ;ð6 0@î+÷v{nXÿªc8 |ñE[æ4ô‡C}÷Þ~øâÿ=è9ºŽ˜öH_C÷ÖÓÌxÍꃭÊôÉ~½€ŠÎOw…Ùü™Óù®k¡Z«‚ãðïaN@[´H6 ‚S`²(8?q­-ƒŽÐ–?ˆ-Šp„$,¡ OˆÂªp…,l¡ _Ãް;libwww/Library/User/Architecture/Thread.gif0100644000076400001440000001672105774674344020446 0ustar danielusersGIF89aCøòÿÿÿÿÿÿÿ!ù,CøþºÜþ0ʪ½3ƒªøóZ¸€Ýe–b‘jë¾p̰ Úu »,~ë/œÇ·+Hˆé$7Ob¬·´ ’)vË…µÊçJÜÍ™S px -»ßð1Ò¦n’g÷zQïs­|#w‚;†gmA„‰~Ž{Œ‹p>4ˆ“š•BˆZ˜^’"i¢¥Š›©ª¦…:N€ƒNP$LW°´¤rg°²Q¹ºdµÀ ««9¶Éx¿Íb—ÐÒTÑÎx¸ÕV¯Ê„(Ìm¯»ÖWÇæÑá¿ÅL»åUƒÂ%®³l×íôó¾ë±øàç³ÓÕ/Wvî®ÅÓG ÜÁ^ô¢Z×p 7aûÔEü–þoaÀ ›yLˆ$°‘îRJª¶0cË“ïÈÙ‡œ:”!KJ+çQ‘ʜŠÂLärY#….iáTÊs&Í.é¡ó%ıxEåsgÏyZm>Ïh=«H½FÅF í׳\—²}Ën×0S‡å% r-ýi—RåZÑ.Ö¦€ÿNÌñ߀õ"ë ›w‰V•÷YŽ;Øh«žâþ]ì¬7éÇóL›ëögà—€-©~}ì] Q#‹Íû*í­žÖæ<s[ãq?·=õ¶[Ý»•W%>Ý9k熿"N”qr§ÐçDéðܺyíÜËÓõ];áù­×­»žA>ü1¿&›ç¯îy¾þtÐŒ5TCb_MìÈœN0­¥l 2×ÞP]Q˜6zužc>‚?Š%ö b‚5âq%çSQ^‡‡hXà--"dØ ¡MÃÌC¿Ñ×b¥á"€]ø"Œ™¦Žòè†K÷ZªQƒ™5"題ËXe?‡ÙVQ+ÙP‡œrÜqÈã,O*óÞ‘ZÆ)çœtÖiçpÞ©çž|öégxyþ)è „j¨¹ªè¢Œ6ꨉ>*餔Vj饘fªé¦œvêé§ †*ꨤ–jꩨ¦ªêª¬¶êê«°Æ*무Öjë­¸æªë®¼öêë¯À+ì°Äkì±È"þIÀ²Ì6ëì³ÐF+í´ÔVkíµØf«í¶Üvëí·àJA¸ä–kî¹è¦«îºì,­îBï»±.K¯¬ó:ï½­ÚËï«û2ð¿©úK0«+ðÁ¥ÌpÁã>¼ªÃ›ºðƒJñžtìñÇ ‡,òÈ$—üq&§¬òÊ$£ÌòË0·<ÁÅóÍ8ÁÆzêL“Ï ý‘Ð}ŽÑúF\³*HÛ¼3Æ4Ú×´Ó L½ ÑV§’54éÒ1l­ÉÖ<@_‡bòSXÿ¼³ÒJœ 6i?B6Ôg»bÛÞI]H7Ûk»]µàt·Ù$Î"‹}ZkÝŽÜEÞSþ!>ÞåõUÞä‘RÛŸ¿-ïä–k®8æäinúÁœ÷!¹×i ~z fGë®{>´î‘ ·T±×7»ÜzË-1î·?M:í¯.Ï™\ Ÿüà„+ ½¾¾Â²;/¤vÿ^_Æë‡3¯øð²›/üSÃcà €¼6G”"?™µÔ/Aöà]H÷ë;ŸúH°öYæ}ÚŸò¶÷¿æ9uª:Œ×„øñŽ{é« ©·<Naƒ…û]Í7žó/qô ¿¶ ýE€|TŸA„ìM°vìRY,ÈA¦.‡«ùƒvÃÖŽof¡ÖÁôÍ0(5<^QÄæñþ… ô ‘‚ ËÑoDìaù|ÒÅÌ}Q ÷ãʈB/‚±h¢ëßÜ6±Å–°ñ„ª ùTGš0ƒm  ÒÃ?Òƒx¢õ¦XÂÐtzŒcÒæ‰>Ò‘¶;äöÈ1Fºñyq$9ÂKL¢ÜäKÙÈSD“ƒ”d0FÉÍyÒŒÂye*W9KZÎÉ’­$êT(F`~2_$f—éCS0˜Ê„ãÌ–XË7—<¦ååK9]}Ð,yi¼pjÓ;±c!Í™:7“¬fî(@͜œY7ã$> ªóhädš,™(щV›‚ê¨-?jRR-„-© C§Ñ”Ž¥/]$Ma Q™Îtw5ý“J£R‘âÔ¨<§OW ÔÂmTKCe_Qµ6UµM3¦K•êNÇõT$E .ÍiB{7Òt5«-øêß‚ªÅ› ”¬G¥êU{ŠV°ž´gE›[uºÕ±‚t®J­ëZ›ÊU›†è ˆM¬b7ºÅ:ö±Ž¨Ï KÙÊ&ž³¬V-ËYÈòµ°B¤&€ÐXs<¡´÷ù,VIªÙµ"Ð ¤Õ'E ‰ØRïµe8màp ÕÒ5³­u­i}«¯¼h¼þýƒj';Üå r´Äîoƒ+æ¦Ö¯Å5,@kâÜíÆA··m.fYKÝXјq¥F[u7¹x’ìsk›^³R³¼.8¯*lëTí üÕé“Þ0xõUØ}ñ«ý¦"À( í|Ý;Vo¢ÀoYÌàêNØÆ«5ÞëVøÃ~q`ÉÛáü¢˜»Øí¥£6Åö’®´4¦g)á÷Þ7ÑÆ‡¯}[ ƒÉú¸™L`ŒÕ;ã$· ¹fn 5ˆùfON0×Lä ÙÉYVŠe,á+ïÍ¡EbåDô^Bñм¢8Mר)Ÿù  ÚF;ɸä!O·Ë!øþ²“˜çÊœQsœìhü|pÃÃqÞܹfl^.‚–¦-˜æB²ŒÅ2‡Ýà¦pz/žf4¦µ\6;!÷ìÄè!y6ïH›÷´'­…Wg‡œó™Œv"«¹LêQþ¥žô^°+Êêõ†çÕÝ3 ¥£M¿‘´“ÒÆeðä¡+oûyà ^;¸ØçQ¯¸Ø<üö¸÷<‘\v»Ü\s6t MÐe[z€‘Þ­›…IÐO'ù„uFv=3é~ò|}ì¿­'Uë`µlÕ¤J7ùU­$Õþ½Â»ü®GFþ að÷UüG+Rã/ÿôÛmý5ç~øgú'WæÇbý7€æ%[ Ѐ¨ø€ (hˆ˜¨‚‚8x‚$˜‚#¸‚Ø‚"G%ø‚8ƒ2Xƒ(7Ø>;¨‚.hƒ˜ƒ4(„5ˆ|,æƒCˆ„D¸„H„,h?È„Oè„Q„M(…U8…(…=¨…W¨„_è…¨0û†.ˆ…I(†YØ‚&h†i¸†oø‚:ƒhH…qÈ…Ø…ph‡uX‡FègP‡|è†vXˆL¸‡}Hˆ[¨ˆŒ¨††Ø€z(ˆh˜ˆSH† ‚´'€šØW˜¨þrÕ‰v§€ÆØj·‰÷wWçö‡è'Ša€|×~²HÆŠÛ§Šdˆ±˜Š³BŠ`Š¡xR¥˜/ÂÈQ¨H®Xd¤8†¶hŒÎ˜xËøDSŒÍÈ~¼˜¾xçw~ǸrÓèbÜhV¯G¯Ö}Ô×cè8}Þ¶Žì(zµx‹5⎞õ}Í·x°z¸§–}ñÈ{±bÍÆy˧z&v{ý«(¾‡eöø^Õw•ÀÐE‘š÷‹ÑŒÑH(9#2ƒ)¦ZÖHØØ‡`‘V| ‚ †r2ùç1÷h’TÎè0 #µzY‘*É“ãˆÞ¸‘³ŒþSu4ùAc5’AÅŒø˜[()S’ Ùóã””“~p”±˜”^0:F|i%‘oeQÙ[U cˆ7–¡·€êwŠrw–bùc>Y–i©\?¹{™mi—š7Š$b’dŽ&5—ùøÑ–c'Žˆ)•}é“=y‘AùŒ•ù˜j)˜åäBo‘˜©—6™‹,‰owYjy_‘˜“){—©‘;–¯¸Nífhw&kïwv§ùwKy“.Iš‰—Ÿ‰š«I•©Éš$‰•€ŠŒ¹v±ÉJyô@Óæ|’ly‰¼Yc° œËfÃi•ÅI•‰dÙ阬„kÙKä÷Ôù]u)ž¥™þ;¹Ý cßi•á9F|I uL¦Q¢e˜3µbÖžø9žði–‰9Ÿì¹– zŸWg ºŸ2wj´ +% z§Oʉ¾À@¸õ_ñé—Ê÷– :‘ Œ¿³¡…çvØwäYžJk蔞昛^š§‹@6e+јÚÙzš¶z%J—'š‘)º˜nYp fÖA eQ¨flÈœº‰£äx™¥P%bÒP‹ó  ·¤j9¤‰YŸÕyœ˜œHúc b"Œç¥_úWPe£dg¥–è–ö s' ¦ 9¢|)¦é ¯ùsÑ´§Û§Tz£°(‘ßfrr‡¨‹:§~ ›€¦»gþ§¼`p†ª©o )Z Ÿª“rÚxŠäŸèã©MZª¿w©zI¦ š©€y8 Ò©µªxJÖ¢¾ÉrSŠ¡xC**¡þ†q¬ê«®ê°Šš²j¢Ù’Xš¤xÊ«î9ªâ¹¦Lñ5É^“jª•‰“iJ¬Ëæo¢ÚªÝúª•*™éJ™f*”ä5¬U¨yš«ºÊ¡§qVg¡Du®Êj¢ ¯xQhÿôf劬üz’ÍJ¤ › ­y¤ƒÊ ’ë¦æ ª€4¯õê™ÀÊctoØùžŸº±J¶¬º¹°J«Õš’ú9w·š§ ¯û*²74{Ke?j|ëi¢&‹©€…œ½Jœ+ë¤ÓþŠ˜0»Y@*bÇ ´¦Y³JI²^·³}Ú³gú³Þ •âjq@V´Fk|H«£ÉаŽ)³:æ´dµÂÙ°1°º´°±’±Š*¶7æ¯9:šLª´Ê´ai¶%K¶Þ굞8”«²V—¿ôµ5I·WÚ®ˆ«”a ¤9«°~‹®Œ¸ï®oÉ µ·‰›z;vkŠ»·‹³£Û˜“Û¯R뮃‹· ŠE˹[»’õ;Z¹•A+· ”º`Ë»‰»º¶è|·Yš ^9Q²;»@É|³uºk绎 ½{+¨w Ç»9ɳG›]•ëM|z¶žG¢ëjœ€ëšvÒ.=Ù{¡þ@Ê”v+—Ÿû¼ãKœÒ ºhKW9i"“EÀ¿3Ù¾×Ù½S¿Ü9¿ÞY¿ò ¼ž˜¿Ð[ “†¥»Avª‡ë¼¾jÀez€¬;'\(‘˰Ì[u< |û´|Á¼ZòÁiÁ&,¬D©¨%œ¡l©<«•k¾qâÂ/\ÃÁª¸u ¸Þ Ã6lÄ—Â1|¿JÅÀ|áÃ? ňº½¹‹R\J»À˜›ŸT·Ä™ðËQ˸¢‹Ê ÌkÄi,Ës«À¾ÔÊËì™›ù{ÛŠÄË{zôJŸ7ûÊØwÚ¼»|L±®ûÈZ%C³Y›'qVÍàkÎ)ëºÖlºÔ<–í<ÁÜ\Í„І[NÏéLDù¼Î©Ì|¾ü›KÌŠœ’}x´Œ¦¸¼ ß«McgäqÿyÊ-ÍUüÑO›Îå<|â{Ñà¹Ñæ6Ñ*+Ïó £à´#ÕFLM£ÏUþªÊàÚÑ:ËÒòIÌcšÑ dÌS‹ÌB­°6}Óô<¡7_= Ñ<Æ lÌJÔøc–„–Ûuk.º<ó)Ö»:Ë´çY²OmWñZ¨7£1FfÕµFÁYúÍÌÉÕáüÕA Óû6—ï3x(Æ£iŒÖŒÜÍvºœJ€o½s«!±§lÀ†=Öî<¶œIF·f"©zJ&öL­IMÙ ½Ù¢-7Ý©¥¦½ªÖôªÙþôOÔÖˆBÇ MΊ­bRØíIÓZmNvΓ¥÷k½–=`oGWDe]Ü÷f›£ÝÅi›Ì;V¬8ôbŽcZ°¾I×Î×a-’ ¸Ä½nÇ¢þw;D½KÞ3Øxü¨¬ „©ìýLÇ]¤ÐÊÊ+ªªç­v¡üß•6u­×óØÖv¯aÒÚ(­M䲨äߘŒw-  îÒ74á >BbšªÁ-%w-ÝøKÝäàú€ž„z¾Û}ÖM¥HÂÞÞ½àjýÝSÞ¹+´òJ;÷Ú·P¹V><ޝñmãÔ›Þ4ØÐ)fÛ¤gº ·£ÖM§ÀäÓœ××+þÑf,l9¾gU^•• ܼ-æ=þkeåu‡å'wÝ6NÛI 6ɵy×âe©àæ ÏkíOb1Êê½¢n›­;ŠÜ2gäCÍ­ˆÞpÑØv þÛ:ôç1çùx+Õ“­Á:ͦ„þaVžÒÜvЭŒÔÌ£ÔÌÔfqgéhÂ~d,åÓŒŠÕú«g]Ñ׬ä@nÔb\¾^œÞŽ«âöwµÁäÀRzÒ^Ô­n–²½~êÀγÂ>ÝMíê»ëp‰ìBþ²& À¢ èèÌë¦.¤ÕÍlÜÏ·ìë])è"ÛÚúÐîþè %ÜCmîê\ïæƒêéj]îV}Ûÿî\˽ø®°|½ÈQžÈ¸-¢®Íî?ðOðé¾Ï÷þ¾/ñÃ=íènà:|í!žíÉç¹ÅW$ÜN€p Ár¼öu¬ñüõr_õG=öPÏ÷<Œõ¶òö”õ|_Ä~Å‚÷Ÿø„?ìtøOЊïÄ8ù¤Tÿðglô¢nø³‚øª«øm?õIù§¿îçK+¦°4ËønÏùÎú²?÷rR÷«÷C¼ø\û>qïø3ÿÉfŸwÅ*¿÷š?o*=øž¿ú€ì“íu²¿¦LÛÿ•ÍÿûÏÒÑ¿ÆþÓÿÒ Ïð(ŠýÙ!ÝÈÿËËãm»I7þòÔþäëúY9ÿ´^xé‹=0°Üþ0ÊIëR ØÍ£ØDÕל‰†*êJ_x-ík7¦ ÒwïÄRD8©ù^FK`™Ó'çsêÂ$© eTÂÚ®–9kXÇ®œãŒ>iE"¬íN3—;ºDª×³û]y"r`€ ˆPЉ:Ž <’s‚…r„†?—˜HK2wLS-|¢O‘­™š  \ ›¡°¹U±º±•©¾½À‹‰o³œq ¸8½7R*ÅYkÎT¯ºÇÈ ¶ ÌϾÓbÖÚØ°jf–ÎÇß ÜË´àÙþ>|Ò&¨4xŠû°²vâ\+mîº&N =te(­c(Q]0v• „±Ç=üü­ h‰_9¥ ‚ÂIålëHŒ`ºŠ é´L¶‘BÎ6?«ÁItb0}ãRz4ZO–Kx‡lÊ|x0cž cn–Áêe§'E¤B[ˆôâ)ÿÊ Uúbå%¯Ü>E-ÑcŠ©L!Êr+IëU±2Ü€úNÞ\Ÿu}¢àê´Y¯F˪]˶`Þª²ÊÝEVÉb¼)î½Ì²"NÀ†¿öô6ô³b?ÄWò±Ù’IPVŽÀ×ÂÖ #º’IØ S1纯魨oµ v›ã…þ?þ‰<î4ÚGAê3¾÷îÍ}[Õl÷ûPÈäÓs)ºfL«½YuY}¨ÿëð‘Úè&ŠçvŸn/¹–ƒáñ0*QUÚh6…¡rªìÇŠ=xd©L!zYÔEœw R pÕBØuÞvÛY!ò’ž~ŠÕã‚Aôwâ¶ÝxG{RËŠmµ¸Á‹}ÄøÎf4YR Ígá[øíãs)݇d —ã.$ Ø]“HöãfZÚ¹èä“^F¹pTn9Qš¸Ù("Šêe_G?Ò”Z<«Y§gh|%à"²¥˜‹dEÉ9guêñ›'yîx$@Ò”vIfªSþ—bVh}‡ÖR™tÅYœ¨q’Zª¤LÁ·hc— Åá›Æ…¤^:¦zá ¢­އªøç²cu¦›hÕšT¯–þz„”ƒÍ¸ë—lË¥²" -ƒB–l¸EaCÎ ¥¦Ì {&´Åjësâ:‡ª¾=p;£·¦eÏ™ºÖæ§yØfÝ ­Œ†–gõ¯æ6ØtGܯzK!¦œ‘ŒiÃŒ|Ì£ìɾ€|¿2æ¼§f"XÇ.W©a´°Ä{)Îg†§Ç5“nÒi\|¹‚zÌ3kêÂÌâ%BË[qWwr:¬ª1? ÝÓG½Eº/ÿ 4Ö(ŸÌôg¼Úûþ¬Ú·¾]Ôª–º‰ÖxáYÞ¶ÛbAp>§$®øâŒ7Žc¾…=ñÍ[c!0Úâ9®ùæ›_x[Ÿk­2¸ v:øµ£Û‰÷ßz+õ«ÓN§².fÏSz\»ivKë4¡­»1™Í*ºû“QxEè½Jn±Ñ^ã~<ï‘W¾å©Ó«3ǰO_Åòà‡/þøà{ïðíTËm>ê½ßµú¸ïûË·³ëן ó\Ç-£ýìWŸ}ÎñÙüˆÇ¿Z–«×þ È;Î9ð‰û'ø@ìQð‚Ó_aúÆÀ¶Â  áâ˜;éyy}ÆnTÈ–á¯x‚ñ  Ñ€B:°ìhþ&œ^ mH™ö0%.Dýb8Ã"Na‡4t@ËÒW?$&Ñ"+ü!A‚èªDшX\›Rn½’ï‹` £¿¸†1šñŒh,#×ÈÆð‰ƒYŒ£+ÚHG6áprÌã §¦Ç>ƱA~ ¤ù(ÈB208±3¤"/µ³î-ò‘ [¢ñ IÉÝ4ÒŠ‰¬¤&­!ÉMz²W„ü¤(ÈQš2%¡<¥*QÊUºR©|¥,HU¡}ž¼ä3YÉ[Îò ’¼b/[`­_¢@—eâ%%kULcž ˜Ê„$3¹S¢ÈŒ¬šÖÃ"2aÍGN-²&––KÊòQØ,Ñ>ÐÙ'rª2–¦þD§<×é'“TÊ•­¥ù9NwQꞫ̧(CÂÐ#%ÌŸKú¥@Nu¢â¡u×+kyJ†V4¢õÜÓÿü¸M!NÒ“M§Âþ)R€®š¶´MA¥Q5•“€Udâ@‰2ÓJ‘H¥Ÿ„iG‹D­š^Óg›,iNOºI–"n¥â‡K_jNgP–µê¶Œ©P­Ì™YõªÍ¸ŠG±Â«˜3ëXɪÄnªU¬ é0ߪÖN2£´À«t@¡WÖäõ®€ý«`÷JX¿ö°³,bûšØÂ6ö±e¬dëØÉò•²‹Åld5;ÙÊrV³¤Ÿu,ëÙË*v³§%³mfÿZÚÖ®ÖµU-ja+Û¾Öö³©Åíkw Ùö춦¥­ny«Zà 7·Š5.q‡[æ*w¶™=.lCK<çbö¹Øµ®t—‹ÜÂf·»Ü ¯x¡Û\ð’×·tMï ªÞö.нð…ãKßnÕ÷¾&}!~ãÛÕýª•½þõj,à´ج#H°‚Ìà;øÁް„'Lá [øÂΰ†7ÌáG8±ˆGLâ›øÄ(Fq;libwww/Library/User/Architecture/Threads.html0100644000076400001440000001362506264227314021012 0ustar danielusers Architecture - The Net Class

    W3C libwww Architecture

    The Net Class

    In a single-process, single threaded environment all requests to, for example, the I/O interface blocks any further progress in the process. Any combination of a multiprocess or multi threaded implementation of the Library makes provision for the application to request several independent documents at the same time without getting blocked by slow I/O operations. As a Web application is expected to use much of the time doing I/O such as "connect" and "read", a high degree of optimization can be obtained if multiple threads can run at the same time.

    The Net class manages information related to a "thread" in libwww. As libwww threads are not really threads but a notion of using interleaved, non-blocking I/O for accessing data objects from the network (or local file system), they can be used on any platform with or without support for native threads. In the case where you have an application using real threads the Net class is simply a object maintaining links to all other objects involved in serving the request. If you are using the libwww pseudo threads then the Net object contains enough information to stop and start a request based on which BSD sockets are ready. In practise this is of course transparent to the application - this is just to explain the difference.

    As libwww threads are not really threads but a notion of using non-blocking I/O for accessing data objects from the network (or local file system), it can be used on any number of platforms with or without native support for threads, and this section describes the model behind libwww threads and how it affects applications.

    The Net object

    The Net object contains all the state information required to stop and start execute a request using asynchronous IO. The use of asynchronous IO has an important implication on the implementation of the access modules in the Library, for example the HTTP module which is explained later:

    • Global variables can be used only if they at all time are independent of the current state of the active Net object.
    • Automatic variables can be used only if they are initialized on every entry to the function and stay state independent of the current request throughout their lifetime.
    • All information necessary for completing a request must be kept in an autonomous data object that is passed round the via the stack.

    Pseudo Threads

    The main reason for keeping the Net object separate from the Request object is that some requests require more than one Net object, for example FTP which has a Net object for the control TCP connection and a Net object for each data TCP connection. In the case of HTTP/0.9 and HTTP/1.0, there is a 1:1 correspondence between a Net object and a request object. In HTTP/1.1 a Net object can live longer than a single request as persistent connections might handle a set of requests over the same TCP socket. Net objects can be used in three different ways:

    1. All requests are preemptive and all I/O is blocking
    2. Requests are non-preemptive managed by an internal event loop
    3. Requests are non-preemptive managed by an external event loop

    The three modes are described in more detail in the section on Internal and External Events. In mode 2) the Net objects is used to make the binding between the socket based internal event loop (using a select() call) and a request, so that a socket ready for an I/O action can make the corresponding libwww thread active. In mode 1) and 3) Net objects represents the socket interface of a request.

    Creation and Termination of a Net object

    A Net object is created by the Net manager from within the Request manager every time a request is passed to the Library. A request can either be issued by the application or the Library itself for example as a result of redirection, access authentication, or when a new data connection is created in a FTP request. All new Net objects are automatically associated with a group which might already exist or be created together with the new Net object.

    When a Net object has been created, the Request manager returns immediately to the caller and does not see the request before it has terminated either with a success or an error as result. The request can either be started immediately by the Net manager or put into a queue if the maximum number of open TCP connections is reached. When a request is terminated there are typically a set of tasks that the application would like to do:

    • Update the history list
    • Report the result to the log manager
    • Update the display
    • etc.

    Handling the termination of a request is based on call back functions that can be registered in the Net manager dynamically at run time. Multiple call back functions can be registered in which case they are all called from the Net manager in the sequence they were registered. As an example, the Request manager registers a call back function to handle the status of the request regarding to some internal actions. This function is registered at initialization time of the Library. The application can add its own call back functions to be called on termination of a request.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: Threads.html,v 1.15 2025/01/06 16:56:44 jigsaw Exp $

    libwww/Library/User/Architecture/alpha.gif0100644000076400001440000000007306167010431020267 0ustar danielusersGIF89a ðÿÿÿ!ù, „© áÌ‹Qžj³Æ°ùút;libwww/Library/User/Architecture/choppy.html0100644000076400001440000000603506301652333020712 0ustar danielusers Libwww Architecture

    W3C libwww Architecture

    Libwww Architecture

    Under
Construction THIS HAS NOT BEEN REGENERATED!!!

    The W3C Sample Code Library, a.k.a. Library of Common Code, is a general code base written in portable C that can be used as a basis for building clients, servers and many other Web applications. It contains reference code for accessing HTTP, FTP, Gopher, News, WAIS, Telnet servers, and the local file system. Furthermore it provides modules for parsing, managing and presenting hypertext objects to the user and a wide spectra of generic programming utilities. The Library is the basis for many World-Wide Web applications and the W3C reference applications are built on top of it.

    This document describes the architecture of the Library in generic terms without referring too much directly to the code itself. It is meant to give an overview of the design which is required if you intend to enhance the Library. If you are looking for a specific description of the API then please read the User's Guide.

    NOTE This document is also available as one big HTML file intended for printout. Please note that not all links in this version work!

    Table of Contents

  • Introduction
  • Basic Design Model

  • The Core

  • Application Modules


    Henrik Frystyk, libwww@w3.org, @(#) $Id: choppy.html,v 1.23 2025/05/21 01:23:40 frystyk Exp $
  • libwww/Library/User/Architecture/Makefile.in0100644000076400001440000001351307405520524020570 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Architecture/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Architecture distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Architecture/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/.cvsignore0100644000076400001440000000004306155731224016075 0ustar danielusersMakefile.in Makefile Extrnals.html libwww/Library/User/Applications.html0100644000076400001440000000450107142500725017411 0ustar danielusers Libwww Sample Applications

    Libwww Sample Applications

    We keep a small set of example applications to show how to use libwww and how to build applications on top of it. They are all integrated into the libwww code base. Arena and Amaya are examples of other applications also using libwww.

    Easy Startup sample apps
    Small ready to go examples showing the very basics for starting libwww and loading a URL etc.
    WebCon - a command line tool for Win32/Unix
    This application which shows how to use libwww for building simple batch mode tools for accessing the Web. Can be used to do PUT, POST, DELETE, OPTIONS, and much more
    Webbot - a fast robot for Win32/Unix
    A very fast Web walker or robot with support for SQL logging, regular expressions, and much more
    Line Mode Browser for Win32/Unix
    The Line Mode Browser is a character-based Web browser developed for use on terminals
    Web Commander for Win32
    A Wintel tool with a nice GUI interface for getting, saving, and deleting documents on your HTTP server
    cvs2sql for Win32/Unix
    A simple CVS to SQL log module that we use ourselves for tracking changes in libwww
    A PICS Client Library
    Good for writing PICS enabled clients


    José Kahan,
    @(#) $Id: Applications.html,v 1.17 2025/08/04 08:41:57 kahan Exp $
    libwww/Library/User/History.html0100644000076400001440000035457107216133641016444 0ustar danielusers Change History for W3C Sample Code Library

    Change History of libwww

    This is a list of changes to libwww in reverse chronological order. See also the release notes for the latest release.

    Release 5.3.1, Aug 4, 2025

    This is the proper first 5.3 release. We changed the minor release number as many people had started to refer to the previous release as 5.3.0.

    • What's new
      • Art Barstow (barstow@w3.org): fixed a bug with the handling of parseType="Literal" by the RDF parser. None of the elements [and attributes if there were any] were added to the literal. The only string that was added to the literal was the elements' content (aka CDATA).
      • Changed the Makefile so that .html->.h file conversion will only be done with Perl. This is faster than using the www tool.
      • Updated the latest autoconf, automake, and libtools scripts. Now using the separate config.guess and config.sub scripts.
      • Extended the libwww/SSL API with HTSSL_setProtocol () and HTSSL_verifyDepth () functions to allow to change the TSL/SSL default protocol and the certificate verification depth. The wwwssl application was updated accordingly.
      • Diverse documentation updates provided by Fox One.
    • Fixed bugs
      • The www wasn't able to convert .html files into .h ones anymore.
      • the Extrnals.html file wasn't being generated on all platforms.
      • Applied diverse patches for libwww/SSL which should correct the multiple request and Post problems that people had signaled. Many thanks to Heiner Kallweit and Gertjan van Winger for their contributions.
      • Other patches I (unfortunately) forgot to note down and am too lazy to get them out from CVS... (sorry, will keep better notes next time!)
    • Outstanding bugs
      • Interpretation of FD_CLOSE under Windows.
      • The FTP implementation has memory leaks and doesn't remember the path or authentication information correctly.

    Release 5.3.0pre, Jun 9, 2025

    This is the first release done after Henrik's depart from W3C. We're calling it a pre-release, as we're not sure if we prepared it correctly. Special thanks to Henrik Frystik, Fox One, Vladimir Koslov, Rafaelle Sena, and all the other libwww User's Community for their patches and continuous support.

    • What's new
      • Included all the patches commited to CVS since the last release. It's been over a year since the last release and we don't have an exact count of what was commited. Many of them consisted of memory leak fixes and fixup with the asynchronous event handlers and timers under Win32.
      • Integrated the libwww-SSL code back into libwww (the US export restriction doesn't apply anymore to source code).
      • Upgraded expat to v1.1.
      • Merged the outstanding Amaya libwww changes into the main tree.

    Release 5.2.8, Apr 14, 2025

    For this release, special thanks go to the libwww hackers Olga Antropova, Vladimir Kozlov, John Punin Olga Antropova, Jose Kahan, Vladimir Kozlov, John Punin, Bob Racko, and Raffaele Sena for all their hard work and cool new features including:

    Also in progress is work on

    Release 5.2.6, Feb 24, 2025

    This release is the has a lot of bug fixes and new features - primarily as a result of lots of really cool work done by people hacking away on libwww including:

    Release 5.2, Nov 1, 2025

    This release is the first release after the libwww CVS Repository was made public in May 1998. At the time of the release there were more than 500 checked out versions of the libwww code base and numerous people have contributed to this release in form of bug fixes, extensions, and new features.

    New Features

    • Added a method in the HTAccess API for posting forms and returning the response as a HTChunk object
    • Added handler for unknown content encodings in the Command Line tool to be a through line (identity decoding) using the best matching mechanism
    • Added support for regex handling of proxies so that you can now say something like this: all URIs matching this regex goes to this proxy, all others go to this, etc.
    • Better control of how much data is being sent in the REQUEST OBJECT. Now you can both get the total number of bytes read and written as well as the number of entity (body) bytes read and written. This uses features provided by the HTNet object
    • The default implementation of progress notifications now uses the new HTRequest bytes read/written methods.
    • The mime parser in HTMIME.c and HTMIMERq.c now uses the updated control of bytes read/written.
    • Added support for version conflict detection in Web Commander (update all of WinCom area)
    • The Web Commander - the Win32 GUI PUT sample application has been updated from the ground up - try it out!

    Bug Fixes

    Release 5.1m May 21, 2025

    New Features

    • Changed the encoding streamstack builder to support best matching capabilities. This means that you now can register a default decoder like this: HTFormat_addCoding("*", HTIdentityCoding, HTIdentityCoding, 0.3), for example where HTIdentityCoding is a coder provided by libwww.
    • Added support for writing out Link: header fields when uploading a document. The Link: header field is use to represent link relationship between documents
    • Changed HTEscape to deal with silly MSDos file type escaping of  the drive name (using ":").
    • Added support for automatic authentication (!) in the Command Line Tool so that it is now possible to authenticate from scripts etc.
    • Direct access to the CVS repository - checkout libwww and work with the latest version!
    • Made sure that we write more often as we check for expired timers in HTWriter.c
    • Added a "repetitive" flag to timers so that they can be created to say call me every 30ms over and over again
    • Added support for building libwww as a shared library on Unix (it is already using DLLs on Windows). If you have any problems with shared libraries on your platform then run configure with the --disable-shared flag and you will only get the static version. If you are using libwww as a shared library but do not use the libwww HTML parser then you MUST include this dummy implementation of the HText interface somewhere in your code. The reason for this is that the HText interface may be called (it depends a bit on how your platform supports shared libraries) but an implementation isn't provided.
    • Added support for MySQL access in this simple SQL interface which takes care of most os the common problems encountered when talking to an SQL server. Currently I use this for handling logging in the webbot but many other features like persistent caching, preferences, etc. can use the SQL module as well. You can also see some cool examples of how to use the robot's logs when querying MySQL through www-sql.
    • Changed the name of "config.h" to "wwwconf.h" as the first name caused conflicts with other packages
    • Changed the name of "sysdep.h" to "wwwsys.h" for the same reason

    Bug Fixes

    • Fixed a bug in the generation of relative URIs which caused the creation of incorrect relative URIs. Libwww uses relative URIs in the HTTP referer field and other places to save (often significant) amount of bandwidth.
    • Decreased default max number of outstanding (pipelined) requests from 100 to 50
    • Does now check whether we get a broken pipe when writing to the network from expired timers. This was a bug that it didn't.
    • Applied the following patches
    • Fixed a problem in the HTWWWStr.c that caused a Y2K bug if strftime isn't available on the system on where libwww is running

    Release 5.1l March 25, 2025

    This is a small add-on to 5.1k that was released two days ago. It has a few fixes that was discovered while working with the latest Arena browser.

    Bug Fixes

    • Minor stuff that made PUT work nicer from a user perspective (when to ask what questions, etc)
    • Fixed a few things in the direct WAIS access module

    Release 5.1k March 23, 2025

    New Features

    • Added a simple "single user lock" on the persistent cache as it gets confused if multiple users are using it.
    • On Unic, the header files are now installed when running "make install". The default location is "/usr/local/include/w3c-libwww".
    • On Unix, aset of icons that can be used when browsing local file directories are also installed - the default location is "/usr/local/share/w3c-libwww"

    Bug Fixes

    • These are the patches that I have received for the current release. They will be applied to this upcoming release.
    • Fixed a few bugs that make Arena run on top of the latest version

    Release 5.1j March 9, 2025

    New Features

    • Made the distinction between Transfer-Encoding and Content-Transfer-Encoding clear - they were somewhat mixed up before. Libwww also now supports multiple transfer-codings as well as multiple content-codings as required by HTTP/1.1.
    • Changed the Stream Stack to not call the SaveLocally stream any more but instead return an ErrorStream. The reason for this is that there are several places in the stram stack building algorithm where we might want to save the file to local file: when there is a content type that we don't understand, a content-encoding, or a transfer-encoding (or a combination of these) that we don't understand. Now we can make sure that the SaveLocally stream is only called once
    • Added support for "identity" transfer-coding and content-coding
    • Added support for Allow header when doing PUT and POST

    Bug Fixes

    • Fixed a problem handling wrong HTTP responses from NCSA HTTPD derived servers (they don't include a version number when responding to an HTTP/1.1 request)
    • PUT now works much more reliable, and it also works on Windows (at least  NT, I haven't tested it on 95).
    • Fixed a refresh problem in the Line Mode Browser which caused it to sometimes render the screen twice.

    Release 5.1f January 1998

    New Features

    Bug Fixes

    • Fixed some problems in the HTRelative function in HTParse.

    Release 5.1e January 1998

    New Features

    Bug Fixes

    • Fixed bug in ouputstream that caused buffer to be overwritten in some cases when blocked on write

    Release 5.1d December 1997

    Bug Fixes

    New Features

    • Better logging facilities with support for multiple log objects including referer logging, Common Log File format logging and general logging filters.

    Release 5.1c September 1997

    • Lots of bug fixes

    Release 5.1b April 1997

    Bug Fixes

    • Fixed a problem in HTRules.c as described in this bug report
    • Fixed coredump problem in HTGetTmpFileName() as described in this bug report. This affects also the HTCache module which relies on temporary file names
    • Made the persistent cache more robust which in some cases will save a segmentation fault
    • Fixed problem in wwwsys.h as reported in this bug report
    • Fixed problem where a request was not flushed if using blocking sockets as reported by this bug report.
    • A limitation in the current persistent cache is that it only works in non-preemptive mode. Hence if using blocking sockets then the cache should be disabled. This is now the default behavior in the libwww profiles.
    • Bug fixed that caused the maxsock variable used in select() not to be decreased when deleting a socket in the default event manager
    • Changed the connection management so that it complies with the Connection Management draft by Jim Gettys and Alan Freier. The HTTP client now closes idle connections after 60 seconds which is a heuristic period chosen by Jeff Mogul in the paper "The Case for Persistent-Connection HTTP". The number can be dynamically changed using the HTHost_setPersistTimeout() and the HTHost_persistTimeout() methods. This could be made more advanced so that we take into account any information given in the "Keep-Alive" header but isn't for now.
    • Fixed a problem when a HTTP/1.1 server sent a response including a Connection: close header using the close of the TCP connection as a delimiter. This problem was pointed out in this bug report
    • Fixed security hole handling HTTP 305 proxy redirection codes. The proxy location returned in the responses was enabled as a permanent proxy without any notification. The operation now requires explicit acknowledgement from the user
    • Fixed potential (but small) security whole handling parsing a new rules file. This operation now requires explicit acknowledgement from the user.

    Release 5.1 February 18 1997

    New Features and APIs

    • Added support  pipelining
    • Support for zlib based decompression in content encoding

    Bug Fixes

    • A whole bunch of them...

    Release 5.0 September 10 1996

    This release was originally called 4.1 but because we now have a complete HTTP/1.1 client side implemenation including a persistent cache manager and full support for uploading documents, we decided to call it version 5.0 instead.

    The focus for version 5.0 of the W3C Sample Code Library is to provide a set of higher level, application specific APIs for accessing the Web. These APIs - called profiles - will help the application, a Web client for example, to more easily use the full potential of the application independent Library core. Also, the Library contains a significantly better interface for easy access to the Web through a large set of functions specialized to perform certain Web operations like PUT, POST, DELETE, GET and HEAD.

    This release contains a TCL add-on to the Robot example application and a Deja GNU Test suite for the Library. Also, it support HTTP/1.1 including persistent connections, two-way PUT, and the host header. There is also a sample PEP implementation, that although incomplete can give an idea of where we're headed using PEP.

    Bug Fixes

    • Changed HTGetTmpName not to use tempnam() anymore as it caused problems.
    • Added argument to HTParseTime so that we can decide whether we want to expand relative times or not.
    • The request pointer passed to a progress notification may be NULL -be aware!

    Release 4.1b5 August 24 1996

    Release 4.1b5 is mainly a bug fix release after intensive testing against the Common Lisp Server which also is a HTTP/1.1 application. However, it also has a few new features worth noting.

    New Features

    • Added support for the entity-tag validator headers: If-Match and If-None-Match and also for the date validators If-Modified-Since and If-Unmodified-Since. We only use either etags or date stamps and the entity-tag validators have precedence over the date validators.
    • Added acinclude.m4 in the WWW directory. The file is used by automake
    • Changed the configure script to handle the location of the icons distributed as part of the libwww distribution package.
    • Added full support for Cache-Control header and Connection header. Both headers can have an association list of name value pairs as directives.
    • Moved the memory cache handler (history handler) from the line mode browser to be a BEFORE filter which can be used by other applications as well. It is now included as part of the client profile.
    • Changed the expiration handling API to not include any notification messages. Any messages to be transmitted to the user is now handled by the Alert manager.
    • Added persistent cache manager to the client profile.
    • Added validation command to the line mode browser
    • Changed the cache validation management in the Request object. The validation scheme is now compatible with HTTP/1.1 caching including handling of the history list. We have changed the validation enumerations from
      • HT_ANY_VERSION, HT_MEM_REFRESH, HT_CACHE_REFRESH, HT_FORCE_RELOAD
      • HT_CACHE_OK, HT_CACHE_FLUSH_MEM, HT_CACHE_VALIDATE, HT_CACHE_FLUSH.

    Bug Fixes

    • Fixed problem when getting a connection header with the close directive. The problem caused libwww to loop as it recursively tried to free the input stream pipe
    • Fixed bug in access authentication which could cause libwww to loop if the top level of the site was protected.
    • Fixed bug that caused a core dump if receiving a message body without any content-type. Now the data is passed to the guessing stream which hopefully can handle it.

    Release 4.1b4 August 20 1996

    HTTP version 1.1 allows for effective use of persistent connections. However, in orderto make this work, a client application must be capable of recovering from a closed connection between sent requests. The beta 4 version of libwww supports automatic connection recovery and provides the functionality for performing pipelining of requests. That is, there can be multiple outstanding requests on the same connection In order to do this, the release contains  modifications to the Channel Object, the Host object and the Net object.

    New Features

    • Added support for case-insensitive searching for proxies via environment variables
    • Added support for proxy authentication
    • Changed handling of proxies so that they are not included in the URL but is now instead part of the request object. This allows for better handling of proxies and also for more freely use of the proxy filter as it doesn't affect the other filters anymore.
    • Added support for TRACE HTTP method in the HTAccess module.
    • Updated News DLL and incorporated News patches from Maciej Puzio
    • HT_PERSISTENT is now obsolete and should be replaced by HT_PENDING
    • The HTChannelMode enumeration describing the flow of a channel has been replaced by HTTransportMode as it is now a part of the transport object and not the channel object
    • HTNet_idle() has been removed and replaced by HTNet_isIdle(). The function returns YES if there are no pending requests in libwww at all.
    • Add support for checking public information about a host and use this information when issuing a PUT, for example. Also add check for host element in HTAccess when doing PUT. We may have public information available
    • Changed the return codes defined in HTUtils to reflect the values of the HTTP spec.
    • Added support for 305 Use Proxy redirections
    • Updated HTDir module to better use the fact that we know that an entry is a directory or not. Now it appends a '/' to the URL if it is a directory. That way we often avoid a redirection.
    • Removed WWWRules as interface and merged it with the WWWApp interface. The reason was that the two were highly alike and depended on each other

    Bug Fixes

    • Fixed problem with uploading directory listing using chunked encoding
    • Fixed autoconf to handle WAIS and updated the HTWAIS.c module
    • Fixed race problem in PUT on alphas
    • Tested reentrant version of libwww (uses _REENTRANT define)
    • Fixed problem in file name conversion from URL to local format on Windows

    Release 4.1b3 July 20 1996

    The file access module now does content negotiation by default. This means that all local file access (including from client applications) do content negotiation when accessing local files. Content negotiation can be turned off by setting a flag in the request object.

    A main difference in beta 3 is that we now have a set of "application profiles" that helps the application to initialize libwww core to work as a typical client, robot or other type of application. This should replace the huge initialization procedure seen in previous versions. This is in fact a result of the core being so flexible - it is inly a framework for accessing the Web. The application must initialize all the functionality at run-time. You can see the various profile functions in the WWWInit interface.

    The second main difference is that the BEFORE and AFTER filters have been more explicit than before. The HTLoadStart and HTLoadTerminate functions actually covered many typical BEFORE and AFTER filter functions like looking for proxies, searching the cache, looking for rule file matching, and logging etc.

    However, two functions were not covered by this: redirection and authentication. That is why the application in previous version had to supply this functionality. However, in beta 3 we have split up the HTLoadStart and HTLoadTerminte functions into a set of filters which each perform only a single function, for example looking for proxies. The split has two functions: first it shows how you can use filtes to add new functionality to the Library and second it can be used by more types of applications. A result of the new filters is that we also have default redirection and authentication filters so you don't have to provide this anymore.

    The filters are set up as part of the profiles so you will normally not have to register them individually.

    New features and Changes

    • Introduced HTUserprofile class to handle host and user specific information
    • Added Chunked decoding and encoding module
    • A host name is not expanded to a fqdn name as it is not reliable enough. Now we just keep it as is, that is we don't expand www to www.w3.org, for example.
    • Updated HTML parser to support BASE tag and LINK tag
    • Added new access methods to the HTAccess module. It is now part of the WWWApp interface
    • Updated the Icon module and added icons to the distribution file
    • Added a Stream to Chunk converter for easier conversion of streams into dynamic memory buffers
    • Introduced HTLib as a new core module. It contains generic information about the core which used to be in the HTAccess module.
    • Added support for HTTP/1.1. Most of the HTTP/1.1 specification is now in place, we still need some headers and some features but this version can be considered to be compliant.
    • Added suport for proxy authentication as specified by HTTP/1.1
    • Added support for case-insensitive searching for proxies via environment variables
    • Changed handling of proxies so that they are not included in the URL but is now instead part of the request object. This allows for better handling of proxies and also for more freely use of the proxy filter as it doesn't affect the other filters anymore.

    Bug Fixes

    • Fixed problem with uploading directory listing using chunked encoding
    • Fixed problem in the rule file parser. It didn't parse the last line of the config file
    • Fixed autoconf to handle WAIS and updated the HTWAIS.c module
    • Fixed race problem in PUT on alphas which caused the PUT operation to hang under certain circumstances

    Release 4.1b1 May 20 1996

    New Features

    • Introduced GNU autoconf configure script for compiling on Unix platforms instead of the old BUILD script. This should make it a lot easier to compile on Unix as we get all the advantages of GNU autoconf.
    • Introduction of the HTUserprofile Class which keeps track of a "user" known to the Library
    • New access authentication interface allowing for dynamic registration of new access authentication mechanisms. It provides an easy API for hooking in new schemes.
    • Improved handling of trace messages which allows for easy redirection of trace messages
    • Support for registration of content coders/decoders and content transfer encoders/decoders. This is done the same way as for media types by registering a set of streams that can handle the various encodings.
    • Support for chunked decoding
    • Introduction of the HTHost Class which keeps track of information about remote hosts
    • The DNS Class has been simplified to handle DNS queries only. All additional information about the remote host is defined by the HThost Class.
    • We have a new HTEvent module which allows for dynamic registration of an event manager. This will make it much easier to use external event managers together with libwww. If you wish to continue to use the event handlers from HTEvntLst, you must register them explicitly with HTEvent_register. This call is demonstrated in HTBrowse.
    • The HTStream module has been created containing a set of basiv streams such as an error stream etc.
    • Introduction of the HTTransport Class. This allows for dynamic registration of transport protocols such as for example the W3Mux protocol, TCP access, local file access etc.
    • All MIME parsing is now done with registered parsers. The HTMIME module only unwraps the  MIME header fields and calls the best parser. The header parsing origonally done in HTMIME can be found in HTInit.c and is registered with HTMIMEInit. This call is demonstrated in HTBrowse.

    Release 4.0D February 12 1996

    This upgrade release fixes some bugs and it adds functionality for posting data from memory. This is the full list of changes:

    • Optimized HTTP request header by taken away an "Accept:" line pr accepted content type and instead use the commna notation.
    • Introduced HTMemory as dynamic memory handler. This module is a part of the WWWUtils interface and it handles better management of dynamic memory. You can find a full description in the User's Guide.
    • We now have an updated list of all public functions exported from the Library.
    • We also present an updated list of all public interfaces available in the Library. You can find it in the Library Internals.
    • PUT and POST from memory is implemented. You can now post data from memory using the POSTWeb model as for posting remote data objects. The Interface is described in HTAccess module. There is a very small dummy test implemented in the Line Mode browser. You can activate it if you typeedit from the command line.
    • The Mini server now runs (although crude) as a proxy. It is capable of serving data as a HTTP/HTTP proxy. It is based on the internal Library event loop and is therefore highly portable. It is not intended to be a full featured server but a test implementation which shows how to use the Library in server applications.
    • Bug fixed that caused the following problem: If there hasn't been made a connection between the net->target and the request->output_stream then the latter is not freed if the request is interrupted.
    • The referer URL header can now contain a unlimited length URL
    • A resolver callback function has been introduced in the HTTee stream. This allows the caller to assign a callback function to resolve conflicts between the return codes of the two streams.
    • The request object as been added as a calling parameter to the HTFWrite stream creation method. This allows errors from writing to a file to propagate back to the request object.
    • The three streams HTSaveLocally, HTSaveAndExecute and HTSaveAndCallBack have been optimized and they now all use the HTFWrite stream creation method
    • We have a new module called HTTPGen. It generates general HTTP headers. These headers were a part of the MIME header generator, but by isolating them, we can use the MIME header as a generic MIME entity header generator.
    • Created HTErrorStream which always returns HT_ERROR. It replaces the HTBlackHole has been replace with HTErrorStream in many places in order to speed up performance
    • Made HTTP response stream (which parses the response line only) into a converter so that we can forward the output exactly as received from the remote HTTP server. This is important for proxy applications and other applications that want to see the output untouched.
    • The HTChunk module has been made more solid and the amount of memory allocations has been limited.
    • Memory cleanup fixed in content length counter stream and FTP module
    • Introducing HT_CLOSED and HT_PAUSE for handling streams. This was required, especially after HTTP supports persistent connections where a document is not delimited by a closed connection.

    Release 4.0C January 23 1996

    • Automatic redirection and Access authentication has been take n out of the HTTP module. Instead the new mechanism with request callback functions are used so that the application can register handlers to handle these situations. The reason for this change is that not all applications are interested in having this functionality performed automatically.
    • Authentication handler and redirection handler added to both the Line Mode Browser and the Command Line Tool
    • Added three possible return codes on which a request callback function can be called:
      • HT_PERM_REDIRECT for permanently moved objects
      • HT_TEMP_REDIRECT for temporarily moved objects
      • HT_NO_ACCESS for insufficient credentials
    • PUT and POST do now work reliably in the Line Mode Browser and the Command Line Tool. Both can PUT or POST a document from either a remote HTTP server or the local file system to a remote HTTP server.
    • An important bug-fix in the internal event manager that prevented a socket to be registered for multiple events at the same time.
    • Cleanup of the POSTWeb management in the file module and the HTTP module
    • In addition to progress notification on READ we now support progress notification when sending a data object
    • Spelling mistake fixed. preemtive is changed to preemptive
    • The W3C Mini Robot has now the ability to stop at a certain depth while traversing the Web.

    Release 4.0A December 11 1995

    • Created the include HTTPUtil.html - a C file may follow
    • Changed HTDoAccept so that it automatically inserts the new socket descriptor in the Net object.
    • HTLoad_terminate moved from HTReqMan to HTHome. It is not automatically set up in HTLibInit anymore
    • Made HTAnchor and HTLink opaque data objects
    • changed HTLink_newResult to HTLink_result
    • changed HTLink_newMethod to HTLink_method
    • Changed HyperDoc to simply a void pointer. This makes it more generic and the application does not have to actually treat it as a document anyway
    • Introduced the WWW_DEBUG internal format that can be used to redirect debug information, for example from a HTTP redirection message etc.
    • Request object added to HText_new methods
    • changed HTExtParse to HTXParse throughout - H&kon
    • HTXParse now null-terminates buffer - H&kon
    • return codes from HTTee changed - H&kon
    • content-length initialized to -1 - H&kon
    • Fixed bug for handling HEAD in HTTP and MIME streams
    • Handles of persistent connection is now a semaphore and not a bool
    • Changes the event loop so that a timeout handler can return HT_OK or HT_ERROR. If the code is not HT_OK then stop the event loop
    • Changed request of header enumeration:
      • General headers have the prefic HT_G_
      • Request headers have the prefic HT_C_
      • Server headers have the prefic HT_S_
      • Entity headers have the prefic HT_E_
    • Separated file suffix initialization into HTBInit
    • Changed the names in HTChunk to be consistent with the Module_method scheme
    • Introduced HTBInit.c for setup of file suffixes

    Release 4.0 December 1 1995

    Alpha Release 7, November 28 1995

    Alpha Release 6, November 20 1995

    • Removed remaining ARGS and PARAMS from the sources. All function declarations and definitions now follow the ANSI standard.
    • Changed HTAlert to be a registration module instead of a module to be overriden by an application. Now you can register a Dialog module as a callback function which is a much more generic moduel. It also means that there are no more English text in the Core of the Library - it's all in a application module. The Library provides a default implementation in the new HTDialog module.
    • Taken the WWW relevant stuff out of HTString and put it into the new module called HTWWWStr. The latter is a part of the core whereas the former is generic string utilities.
    • Made the global variable HTLibraryVersion local to HTAccess. The are now only WWW_TraceFlag left as a global variable in the whole Library.
    • There are now four main include files. They are called:
      WWWUtil.h
      The WWW Utility module contains a lot of the functionality that makes it possible to make applications, that is container modules for data objects, basic string functionality etc. This module is the basis for all of the following modules and is used extensively.
      WWWCore.h
      The WWW Core module is a set of registration modules that glues an application together. It contains no real functionality in itself; it is for example not capable of loading a HTML document. It only provides a large set of hooks which can be used to add functionality to the Library and to give an application real life. We will here a lot more to the structure of the core, and much of this guide is actually describing how to add functionality to the core.
      WWWLib.h
      This include is the main include file for the Library. It basically consists of the WWWUtil.h and the WWWCore.h so that the application only needs to include this one instead of two.
      WWWApp.h
      This module contains a huge set of modules that can be hooked into the Core Library and make the application work. In contrast to the Core part, you can pick exactly the modules you want from the WWWApp.h in order to create your special application whether it is a server, a client, a proxy, a robot or any other Web application.
    • HTGuess stream is now a converter just like any other converter, and it can be registered by the application if wanted
    • HTClientHost (global var) is removed from the Library as it wasn't use there at all
    • Introduced HTHome module as part of the application specific part of the Library. It contains handy functions for the application.
    • HTGetCurrentDirectoryURL() and HTHomeAnchor() are moved from HTAccess.c to the new module HTHome.c
    • HTImProxy is taken out as it can be handled in the setup of the converters
    • Created HTList_appendObject() in HTList module which adds an element to end of list
    • Introduced pre request callback functions in HTNet and changed the interface. It's described in User's Guide. This means that an application can register any action to be executed either before and/or after a request is done. This is described in detail in the User's Guide.
    • HTHome module contains default callback functions to be called before and after a request.
    • Removed the HTInputSocket_get* functions from HTSocket as they are no more needed (they were non-reentrant and belonged to the old interface)
    • Added the following HTLib_* functions to the HTAccess module:
      • const char * HTLib_name (void)
      • const char * HTLib_version (void)
      • BOOL HTLib_secure (void)
      • void HTLib_setSecure (BOOL mode)
    • Library is now handling cleanup of anchors in HTLibTerminate() as it really is a part of the core.
    • Default addresses are taken out of HTAccess and added to HTHome. They were mainly some default addresses for WWW_HOME etc.
    • The Library is now not using env variables at all
    • The flag WWW_WIN_ASYNC introduced to use the new async window interface. Add this define to your project if you want it
    • HTsocketWin and HTwinMsg made internal to HTEvntrg.c. They can now be accessed through the methods
      • HTEvent_setWinHandle
      • HTEvent_winHandle
    • Added the following formats to the default initialization:
              www/unknown -> HTGuess_new
              text/x-www-rules -> HTRules
    • Changed format image/x-tiff to image/tiff and image/x-png to image/png
    • Finished the News module using non-preemptive sockets. Final testing is still missing
    • Changed HTRules so that it now is a stream. It also handles line wrapping and has a much more solid parsing mechanism. See description in User's Guide for more details.

    Alpha Release 5, November 8 1995

    The Library has now undergone a major restructuring in order to define the APIs between the various parts and to make it more modular. The new architecture is described in the Architecture document and includes a new Net manager that handles a request queue, a DNS manager that handles persistent connections and a well defined Request manager where the HTRequest object is an opaque object.

    Core Modules

    • Generalized the Error Manager to work on lists instead of as directly on a request object. This makes it possible to use the error manager in all situations.
    • Changed HTAppName and HTAppVersion to parameters to HTLibInit() instead of as global parameters.
    • Introduced a new main include file called WWWApp.h which contains applications specific modules. None of these modules are actually required to compile and link the Library, but the application can use them if needed.
    • None of the access modules (HTTP, FTP, NNTP, etc.) are set up by default anymore. This is now for the applications to do.
    • Changed TRACE to WWWTRACE as it interferes with macro on NT
    • The balanced binary tree in HTBtree is not used anymore. The functionality is now provided by the new HTArray module that is a dynamic array of pointers. It is much like the HTChunk module but for pointers instead of dynamic strings. The advantage is that the fast qsort algorithm can be used on the array.
    • Moved the two functions HTWWWTLocal() and HTLocalToWWW() from the HTFile Module to the HTString module for converting between local file names and URLs
    • It is now possible to register a call back function together with a timeout that is used in the select call of the event loop. When the select() call times out, the call back function is called. The registration can either be so that the call back always is called when that the select call times out or only when Library sockets are in use.
    • We have a port to PowerMac and 68K!!! This has been provided by Steven T. Roussey <sroussey@eng.uci.edu> and Brad Barber <barber@well.com>
    • We have changed HTThread to HTNet.c as thread was too confusing. This module has been cleaned up and rewritten so that HTNet.c now contains the Net manager. The Net manager controls the net access so that we only keeps a specified amount of sockets open simultaneously (called a request queue). It also partly controls the management of persistent connections together with the DNS Manager.
    • The HTRequest Object is now known to the Request Manager only. It is accessible through a lot of methods just like the Anchor object etc. The HTAccess module is now a user interface to the Request Manager but it doesn't have to be used - you can use the Request Manager directly but often it is easier to go through the Access Module.
    • The Protocol object has been turned into an object internal to the Protocol manager. This means that protocol information can be accessed via a set of methods provided by the manager.
    • We have changed case sensitive search to insensitive search when finding an access methods (HTTP, FTP, telnet etc.) for a URL. This catches silly errors in URLs like HTTP://www.foo.com
    • The static protocol declarations have been replaced with a set of parameters to the creation method of a protocol object in the Protocol Manager which is more handy.
    • We added HTProtocol_delete() as method in the Protocol manager. This means that it is now possible to unregister a protocol at runtime. If you are on a platform with dynamic linking (for example DLLs) then this can save a lot of space.
    • Introduction of application call back function for memory cache. This is a part of separating the HText module and also to make the memory cache manager more flexible. An example implementation can be found in the GridText module in the Line Mode Browser.
    • Full support for the HTLink object that binds together two anchors. This is a requirement for keeping track of the Post Web.
    • URL fragment identifiers were case insensitive - they are now case sensitive
    • Added result field to the HTLink so that the result of a posting operation is stored in the link object. This means that the application can see which post operations succeeded and which didn't. This can for example be used in a GUI client to show the relations between the source and destination anchor as "dim" links.
    • Fixed bug in put mechanism that caused destinations to accumulate in the postweb. Now `old' destinations are still registered but not included in a new postweb - they can, however, be discarded all together, but often the information is nice to have. On a GUI client, it can be shown as 'dimmed' destinations.
    • Removed remaining outputs directly to stdout using fprintf(). Now all goes through HTAlert module. This was a problem in some of the protocol modules as well (especially in the Telnet module).
    • The CacheItems structure is removed from anchor object and replaced by (BOOL) CacheHit. If CacheHit=YES then the format negotiation and suffix binding is not used in HTFile Module but the object is loaded directly (from the local file cache) using non-blocking I/O
    • Internal DNS/hostname cache optimized and made more flexible to support persistent connections for all protocols that support this, for example HTTP, FTP, and NNTP. The first version has support for HTTP only, but the other ones will follow shortly. and multiple connections to same address. You can now control the garbage collection of DNS entries based on time. The DNS object keeps also information about the remote server (class of request, for example HTTP or FTP and the type of server, for example HTTP/1.0, HTTP/0.0 etc.). This means that it is possible to adjust a request to a remote server once the type is known. For example, the Library now distinguishes between HTTP servers version 0.9, 1.0, and 1.1. New classes and versions can be registered at run time just like protocol modules.
    • HTDoConnect rewritten as a state machine which makes it a lot easier to understand and change. It is furthermore and important part of the persistent connection management.
    • Removed HTMaxRedirect as a global variable. It is now private to Request manager with two methods to access it
    • Support for context swapping and call back function in the HTRequest object. This allows the application to distinguish between multiple ongoing requests. See more information in the User's Guide.
    • Bug fix in HTTCP.c HTGetHostName thanks to "dave (d.) mielke" <davem@bnr.ca>

    Protocol Modules

    • We have a first version of a new News module which supports POST, persistent connections and a lot of more efficient NNTP commands.
    • Re-implemented long directory listings for FILE and FTP access using streams. The HTML machinery is now separated into the new HTDir module. It provides long directory listings for Unix, NT, and VMS.
    • Support for persistent connections in HTTP requests. This has been enabled by the generic model in the DNS manager.
    • Support for the methods DELETE, LINK, and UNLINK.
    • Re-implemented HTFTP module using persistent connections, multiplexed (non-blocking) sockets and streams for input and output. In fact the FTP module is now very capable and it's half the size of what it was because the Library in general supports the features needed in the FTP module. NOTE: Generation of HTML objects from directory listings is disabled for the moment as we are re-implementing it using streams. However, now it is possible to get the raw source code directly from the FTP server by typing:
              www -source ftp://ftp.w3.org
    • Re-implemented Gopher module so that it uses streams for input and output instead of the obsolete HTSocket_getCharacter() method. The module now also uses non-blocking I/O as the HTTP module and the file module. A result of using streams is that you now can obtain the "real" source (the ASCII object sent by the gopher server) by using WWW_SOURCE as the output format. Before the source was equivalent of the source of the HTML object that was generated on the fly.
    • Updated Telnet module to understand URL format user:passwd@host:port. Cleaned up the code and fixed a set of bugs at the same time.
    • Support for Host header in HTTP Request module. Actually this was Orig-URI but it was changed on the fly.
    • Fixed bug on HTTP redirect if no body part was present. This is the new "trend" especially from Netscape's server. The old servers always sent back a small HTML document explaining if the client didn't understand automatic redirect.

    Stream Modules

    • We now have a MIME multipart parser stream which supports nested MIME multipart messages. This stream sets up a new MIME parser stream each time it finds a new body. Preamble and epilog messages are ignored by default but can be redirected to the special Debug Stream output of the Request object.
    • We have added a content counter stream and a buffer stream in HTConLen module. This can be used to count the number of bytes in a data object either to be sent to a remote server or as a check of a received body. Together with the Content Length counter stream there is also a buffer stream that can buffer up to a certain amount of dat before it goes transparent.
    • We have replaced the internal format identifier www/mime with the MIME conforming message/rfc822 format. This may affect the setup of stream converters that used the old format.
    • We have also added a new HTMIMERq module which is responsible for creatin MIME metainformation when sending requests. This is used, for example, by the HTTP protocol module and the NNTP protocol module
    • For the first time, it is not required to define dummy definitions of the external declared function in the HText Interface. It is now only referenced from the HTML module and the Plain Text Presentation module. This means that applications that do not use the HTML/HText interface no more have the modules linked into the final object code.
    • The SGML module is no longer included anywhere anymore except where necessary. The structured stream definition can be found in HTStruct module
    • Make registration of callback function for unknown MIME headers in the MIME parser. The application can now more easily experiment with new headers. The registration process is described in the section How to get Started Writing an App
    • Added support for png (lossless graphics format) (patch from unknown?) into the Guess stream
    • Bug fixed in HTML parser It couldn't handle more than 20 nested HTML tags which can happen for example in auto-generated HTML documents.
    • HTLoadError taken out completely. Replaced by the error manager. It was for (stupid) historic reasons put into the HTML parser.

    Application Modules

    • HTInteractive made a private flag to HTAlert.c. It can now be reached via two methods in the module.
    • All functions in the Alert Module now has a request object as part of the calling parameters. The reason is that then the implementation of this module can call a registered call back function (as described above) so that the user message can be put into the right context.
    • Mem leak fixed in HTLog module and added result of request to the log file. The log module is no longer called in the Library at all so if you do not use then it is not included in the application.
    • Rewritten HTHistory module to perform a better history mechanism - the old version did not work properly. Some of the new features are
      • Support for multiple history lists. You can use the context information in the request object to find the right list at any given time.
      • The list now supports both back and forward for navigation. The list is no more "back trace with deletion".

      See User's Guide for more information

    • Introduced HTProgress() notifications for the following operations
      • DNS lookup
      • connect to remote host (either passive or active)
      • read data from network
      • write data to network
      • request finished
      • waiting for free socket

      On each of these operations, the library calls HTProgress() with a code so that the application can define what to do with it.

    Generic Utilities

    • Introduced HTChunkData() and HTChunkSize() as methods in the HTChunk module. No more need to look into the HTChunk object itself.
    • Changed HTStat to HT_STAT and HTLStat to HT_LSTAT as they are macros
    • The HTSimplify() function in the HTParse module now follows the RFC 1808 Specification
    • Fixed bug in HTCanon() that got confused about <http://teller.datawave.net:80/test/../imx/weelogo.gif> thanks to Henry Minsky
    • HTCanon() made private to HTParse module as it is called from HTSimplify() only
    • All replaced with (wb|ab) if known binary output. This was a problem on Windows 3.1 platform as it inserted extra CRLF line terminators.
    • Created HTNumToStr() in HTString Module to convert a number to a string using prefixes. This can be used in the progress notification to write Read 1.6K etc.

    Library 3.1, November 14 1995

    Official release

    Library 3.1pre3 Release Notes, November 13

    This is a last test of the 3.1 release. The official 3.1 release will follow in a few days. The purpose of this third pre-release is simply to avoid any obvious problems while we still have time. Very little will change in the final release! The big difference is that Windows NT is fully supported!

    New Features and Interfaces

    • Changed "rs6000" to "AIX" and "decstation" to "ultrix" in BUILD script. The previous names were not obvious
    • Have created HTProt module which handles protocol module registration. It used to be in HTAccess module, but this module is now uniquely for user requests
    • Changed the names of the following functions in the HTProt module
              HTRegisterProtocol        -> HTProtocol_add
              HTProtocolDispose        -> HTProtocol_deleteAll
              HTProtocolBlocking        -> HTProtocol_isBlocking
    • Canonicalization now understands host names terminated with a ":", for example "www.w3.org:" is converted into "www.w3.org"
    • HTEvnttd.c is removed from the source tree; it's no longer needed. Likewise, HTEvent.c is no longer needed; it has been superseded by HTEvntrg.c and HTEvntrg.html.
    • Added support for REENTRANT versions of
              getlogin_r
              gethostbyname_r
              gethostbyaddr_r
              ctime_r
              localtime_r
              gmtime_r
              asctime_r
              ctermid_r
              rand_r
              readdir_r

      except in HTFTP module as it will be changed later. Some of the function cause problems on Solaris...

    Bug Fixes

    • Fixed bug in HTBind_getSuffix that caused garbage file suffixes
    • Fixed memory leak in HTAnchor if a child has more than one destination

    Library 3.1 Prerelease 2, November 1 1995

    The code word for the 3.1 release is support for remote collaborate work where people can use HTTP and the Web as a remote authoring environment. The reason for the slight delay is that this release has a new "Post Web" model for implementing PUT and POST, the documentation has been reorganized and rewritten, and some other important features have been incorporated. The Post Web model is described in the new documentation, see the reference below.

    In addition to the new set of features and functionality this release also is the first example of source code distributed under the W3C conditions. This means that the code is available to consortium members only within a month from the release date.

    A lot of the work put into this release has been to update the API of the Library. This is mainly described in the new "User Guide", so please do read this and remember that comments are welcome!

    New Features and Interfaces

    • The Post Web model is supported by the following methods to handle the HTRequest object
      • HTRequest_removeDestination()
      • HTRequest_linkDestination()
      • HTRequest_unlinkDestination()
      • HTRequest_removePostWeb()
      • HTRequest_killPostWeb()
    • HTFile module is completely rewritten as a state machine much like the HTTP module. It is now possible to have non-blocking, interruptible I/O and to PUT and POTS from a local file as well as from a remote HTTP server.
    • HTCopyAnchor is rewritten to use the PostWeb
    • The thread model is extended to include a HTThread_kill() function so that threads are terminated immediately upon request
    • HTProxy module is introduced. This module substitutes the environment variables for defining gateways and proxies. It can now be done dynamically at run time. For backwards compatibility HTProxy_getEnvVar() can be used to read the most used environment variables.
    • Taken socket read/write functionality out of HTFormat and created HTSocket module which handles all the basic network access
    • Spawned HTMethod module from HTAccess module
    • Better handling of WAIS src files and use of gateway information
    • Upgraded the WAIS to handle version 0.5 of the freeWAIS library.
    • Better handling of media types from WAIS responses (guessing)
    • All HTTP headers can now be transmitted and received and they can all be enabled/disabled using a bitmask.
    • New functions to support accept encoding, language, and charset
    • Guess stream now handles macbinhex format
    • No more circular references in any of the Library include files
    • Introduced REMOVE and RMDIR as macros instead of direct system calls
    • Removed HTRequest_clear() - it's not safe to reuse a request object
    • HTStrip() is now placed in the HTString module
    • introducing the method used in the link object in the anchor
    • HTTP modified to support PostWeb

    Bug Fixes

    • Cache is now avoided if in secure mode (no access to local file system)
    • Bug fix to allow simultaneous read and write on the same socket
    • Stream stack now dumps to local file if no conversion can be made
    • Bug fix that caused core dumps for HTTP 0.9 servers
    • Bug fixed in stream stack if system() call is not present. This release has a new model called "Post Web" for handling put and post from a source to a multiple number of destinations. Furthermore

    Library 3.1 Prerelease 1, May 20 1995

    A lot of the work put into this release has been to update the API of the Library. This is mainly described in the new User Guide, so please do read this and remember that comments are welcome!

    New Features and Interfaces

    • Windows NT Support (and possibly Windows 3.1 with Win32S) thanks to Charlie Brooks, <cbrooks@osf.org>
    • A lot easier handling of headers in the HTTP module including support for extra headers
    • Improved HTTP/MIME parser which recognizes 99% of the HTTP headers The rest will be ready in the next release! This includes support for "charset" and "level" parameter
    • Support for PUT and POST. This is not yet fully implemented but it is possible to experiment with it
    • Big enhancement of the anchor module with support for all HTTP/1.0 headers, garbage collection etc.
    • The Cache manager is made more object oriented with a broader set of methods. The garbage collector is not the best
    • HTBind module created for better bindings to file system with new hash function for improved speed and more functionality than before
    • Created HTDateTimeStr() and HTMessageID() in HTString
    • Separated HTStructured into its own stream definition module (HTStruct.h)
    • Introduced STREAM_TRACE and BIND_TRACE as new debug flag
    • Original reason messages are now passed back as a parameter by the error handler when talking to a remote HTTP server
    • Introduction of error_format in the request object. This can be used to get debug information out of the Library
    • Better handling of media types in FTP and Gopher including recognition of UU encoded files

    Bug Fixes

    • Eventloop responds now faster on events as it more often does a select
    • HTTP version strings are now string and not floats
    • Many platform dependent macros introduced and a lot of cleanup

    Note CERN terminated its direct engagement in the World Wide Web with the release of Library version 3.0. The code is now developed and maintained by W3C.

    Library 3.0, Mar 21 1995

    Many of the modifications and new features are mentioned under the pre-releases.

    • Changed all float to double in order get it consistent with the working floating type in C
    • Fixed problems with memory in HTML.c
    • Introduced definition of errno constants for WIN32, as WinSock doesn't define them using BSD notation

    Library 3.0 Prerelease 3, Mar 10 1995

    New or Changed Features

    • All library include files which contains public information for applications are now contained in the single include file WWWLib.h which is the only one necessary PLEASE DON'T USE ANYTHING ELSE!!!
    • Changed TRACE messages so that the target is the macro TDEST and not stderr. This means that on platforms that don't support stderr, TRACE messages can be redirected to a local file.
    • Due to the PC Port some modules (definition and declaration files) have changed names so that the max length is 8 characters:
    • Move EnableFrom to HTAccess module. This variable determines whether the HTTP header From: should be generated. The default value is off
    • Sockets are no longer assumed to be small, non-negative integers, but uses macros. This should ensure portability to Windows NT.
    • Introduced socerrno and errno so that WinSock can use its own definition whereas `local' errno can still use the well-known version.
    • Introduced error_stream as field a HTRequest object. All information contained in HTTP responses which don't naturally contain a body entity, for example redirection codes (3xx) and client error codes (4xx) will be put down this stream so that it can be put into a debug window.
    • HTNewsHost is now a local variable in the HTNews module. Use HTGetNewsHost and HTSetNewsHost to set and get the current value. The news module will be rewritten in the near future as it has many problems.
    • The HTTP module understands all HTTP/1.0 return codes and is more solid
    • Many portability problems has been solved and optimized. Most system dependent things are now put into tcp module
    • Interface to CSO name server made nicer - generates correct HTML

    Bug Fixes

    • file:// no more tries ftp:// if host=localhost
    • Improved proxy support and fixed bug when reloading a document from a proxy
    • Bug fixed in HTGetHostName() which didn't include a dot <.>
    • Bug fixed if UserID/passwd was not correct and don't want to retry
    • HTErrorAdd and HTErrorSysAdd no always return HT_ERROR
    • Fixed bug in HTGetDomainName when no domain name is present at all
    • Add output_flush to request object
    • Uses IOCTL as a macro now - not fcntl
    • and a lot of other stuff...

    Library 3.0 Prerelease 2, Dec 2 1994

    • Introduced memory cleanups from Eric Sink into HTLibTerminate()
    • Now the client can provocate a call to HTEventRequestTerminate() even when the request never enters the eventloop. This is necesary so that the client can cancel busy icons, spinning globes etc.
    • Introduced EVENT_TERM as return code for the HTEventHandler function
    • HTEventHandler() now has a double pointer so that the request pointer can be modified from the client
    • Fixed bug in HTSearch() and HTLoadRelative() where wrong return code was returned (BOOL instead of int)
    • Introduced BlockingIO field in the request object to override the the mode registered in the protocol object. This can be used as an easy way to make blocking I/O

    Library 3.0 Prerelease 1, Nov 26 1994

    New and Changed Features

    • Introduced the function HTLibInit() and HTLibTerminate() which MUST be called when the application starts up and terminates.
    • Introduced the modules HTThread and HTEvent. HTEvent is the client interface when using multithreaded functionality and HTThread is the internal socket management
    • All __STDC__ defines now concentrated to HTUtils.html where it is called _STANDARD_CODE_ so that _cplusplus also handles this
    • `new' and `template' not used a names anymore (confuses C++)
    • Removed from field in HTRequest object. This is now handled by the functions HTGetMailAddres and HTSetMailAddress and the flag HTEnableFrom in the HTTP module.
    • Changed HTSetMailAddress so that a call with parameter equals NULL or "" clears the contents of the mail-address.
    • The number of parameters to Streamstack function is now compatible with the arguments to a stream converter, so that we don't loose any information while putting up the stream stack.
    • HTOutputSource variable is removed. You should use WWW_SOURCE in the request object
    • HTGuess stream is a a converter compatible stream so that it actually can be setup as a converter
    • The stream methods `abort' and `_free' now returns int instead of void. On success from these methods `_free' returns 0 and `abort' return EOF
    • Taken HTEscape and HTUnescape and put them into the HTEscape module. The functionality is the same but now they can be used in utility programs without linking in the whole Library

    Bug Fixes

    • Removed bug in WAIS module which caused a lot of core dumps
    • Removed bug in format classification from URL suffix in HTGoper when the file was plaintext
    • localhost is now recognized again after canonicalization in HTLoadFile()
    • WAIS SEARCH now produces proper HTML
    • Max number of lines in WAIS decreased to 200 as 250 (previous) dumps core
    • Bug fixed in HTGetHostName() if we must use the getdomainname() function.
    • Added some support for SCO
    • Handling of gopher items of type ERROR (3) changed so no more core dumps in server

    2.17 Release on November 25 1994

    New and Changed Features

    • The host-cache is now extended so that it tries all IP-addresses before it fails the request. It always starts with the fastest IP-address.Different penalty is added to the connect times dependent of the errno returned from connect().
    • In addition to HTSimplify which canonicalizes the URL path, a new function now canonicalizes the host-part of the URL. This means that URLs like
              http://info/ = http://www.w3.org:80/ = http://INFO.CeRn.CH/ =
              http://www.w3.org. = http://www.w3.org/

      now all are treated identical. This is useful for all the caches based on URLs such like the Server document cache and the hostname cache

    • TRACE is now differentiated into a bit flag so that TRACE messages can be turned on and off for individual groups of messages. This was necessary as the amount of verbose output was growing too much
    • Redirection understands now `URI:' and `Location:'. Implemented after discussion on www-talk
    • Changed 404 Error Message to `Access Forbidden'. The URL is no more included in the message as it is sensitive information
    • FTP client now sends full email address of the user as the password for anonymous access instead of USER@. This allows access to some servers which don't accept the old format
    • The data connection in a FTP session is now based on the return value sent by the PASV return code rather than the URL. It is not always the case that the data connection is on the same host as the control connection
    • UserID and Passwd in FTP URLs can now contain special characters, like '@' etc.
    • The Gopher listings are now slightly lighter and don't contain the `name' and `files' any more
    • Support of Gopher info items. They are treated as normal messages. The gopher code for this is `i'
    • WAIS module now guesses the stream format when TEXT is returned from the WAIS library as it might be HTML.
    • The Protocol modules: FTP, WAIS, and Gopher now produce proper HTML with etc. in the beginning
    • Added a function that returns the domain name taken from the same location as HTGetHostName(). The functionality of obtaining current host names, mail addresses etc. have improved, see HTTCP.html for more
    • Introduced the flag HTInteractive in HTAccess.html to tell whether functions in HTAlert can prompt the User from within the Library or not. Default is YES.
    • The common BUILD for the Line Mode Browser, the CERN Server and the W3C Sample Code Library now accepts a command line option:
              BUILD linemode | daemon | library

      to build a specific component. The default action is to build all three parts. BUILD is now also provided in a Bourne Shell version

    Bug Fixes

    • Fixed memory leak in HTWAIS Doc retrieval. However, the functionality or performance has not changes
    • If no host is found in the URL then no attempt is made to connect to host 0.0.0.0 that is localhost. Some hosts do have an alias for this address
    • Fixed free memory read in redirections. Put redirection counter into request object. Now no more than (default) 10 redirections are allowed
    • Fixed bug in FTP module to handle really slow hosts in the select call. The select timed out without the right action taken.
    • FTP module chopped off the first line of a Windows NT ftp server as it doesn't send a traditional first UNIX line. Fixed! Well, it did look like UNIX, but no more than that :-(
    • Problem in HTTeXGen. Some markups was spread over a new line, and LaTeX doesn't like that.
    • Remove the ACCESS_AUTH define as it is never used anymore (no more compilation without access authentication)
    • Fixed bug in the ISO Latin 1 translation table in HTML.c. This was a problem for estonian documents or other with many special characters
    • Fixed bug in HTSimplify not skipping host names. HTSimplify is made faster and is now only called once (both from the server and the client). Before it was called 2-3 times.
    • Bug found in FTP URLs containing UserID and Passwd fixed
    • Bug fixed in name generation in client cache
    • Removed bug in FTP and IP-rotation on multi-homed hosts. When FTP server is in PASV mode it sends back a port number on a specific host. In this case we can't use IP-address rotation.
    • Bug with FTP IP-address network order fixed for PASV mode
    • Gopher errors (code 3) are now just put as a string as they are not real error
    • Bug fixed in HTWriter.c function flush() where a partial success in NETWRITE would produce a wrong output (repeated buffer)

    2.16 Prerelease 2, November 1994

    WAIS Client

    The WAIS client has been improved and some bugs have been fixed:

    • Bug in the parser of the search result from the WAIS module fixed
    • Maximum number of lines presented from a search made a configuration variable. Default value is 100 (was 40)
    • Introduced WAIS's own error messages as they are returned from the WAIS library
    • The presentation of WAIS on the screen made nicer (well - I think it is!)

    HTTCP Module

    • Bug in the host cache fixed

    Access Authorisation

    • Premature free of memory fixed
    • Missing initialization fixed

    2.16 Prerelease 1, April 1994

    New Features and Changed Interfaces

    HTTP Client

    HTTP module contains the code for the HTTP client. The module is now reorganized and made more modular.

    Automatic Redirection
    Now supported by the HTTP Module. The name of the new URL is parsed to the client via the error_stack as a ERR_INFO message, see HTError module. The maximum number of redirections is set by the variable HTMaxRedirections.
    Referer Field in HTTP request
    Clients are provided the possibility of sending a Referer Field in a HTTP Request. This is done by filling out the HTRequest->parentAnchor field.
    From field in HTTP Request
    Clients can now send the full email address of the current user in the HTTP From field. The feature is turned off by default as it might get a bit tricky through a Proxy.
    204 Response
    Support of return code `204 No Response'

    FTP Client

    HTFTP module contains the code for the FTP client. The FTP client has changed a lot in this release. It is now a complete state machine where the actual action executed is a function of the current state.

    • The client now follows the suggestions given in rfc 1123: "Requirements for Internet Hosts -- Application and Support".
    • Establishment of the data connection now comply to rfc 1579: "Firewall- friendly FTP" such that the procedure is
      1. try PASV
      2. if that fails, try PORT
    • The URL is now parsed according to the (latest) specifications:
              url        : f t p: / / login / path [  ftptype ]
              login        : [ user [ : password ] @ ] hostport
              hostport: host [ : port ]  
              ftptype        : A formcode | E formcode | I | L digits
              formcode:  N | T | C
    • Both directory listings and file retrieval use the same procedure:
      1. First try to go to the location directly, as we are often talking to a UNIX server or one that 'understands' UNIX syntax
      2. If it fails, then go to the location step by step using CWD. In that way we should not have any problems on any platform, and thus it is not necessary to make special hacks for VMS, etc.
    • Long directory listings are supported for unix-like systems and VMS. This includes NetWare and WindowsNT. See Future plans for more and Directory Listings
    • Information from the FTP-server is pr default presented to the client using the following rule:
      1. If you are connecting to the root directory at a ftp site, we show the 'login' message (might be a concatenation of several messages) just like in a normal ftp session.
      2. If you have a more specific URL, then you probably already know the site and are less interested in the login message. Instead we show any local message when making a CWD to the right location.

    Gopher Client

    The Gopher has been revised and improved error handling has been implemented.

    Information Messages
    Some Gopher servers send back information messages in a line containing "error.host". This information is treated like login information from FTP servers so that it is represented as a message before or after the actual listing.
    Iconized Listings
    Listings now contain icons in the same way as the other listings.
    CSO Name Server
    The CSO Name Server client outputs in HTML and not only <PRE> as before.
    Content Type Recognition
    The Gopher module uses it's own content-type recognition inherited from HTTP when handling gopher text and gopher binary files. This means, that e.g. PostScript files get handled correctly.

    Local File Access

    The new version of HTFile module is a lot smaller as all Directory listing stuff has moved to HTDirBrw module. New error handling has been implemented.

    Passive and Active Connection Establishment

    Calls to connect() and accept() now go through the functions HTDoConnect() and HTDoAccept() respectively.

    Cache of Host Names and Addresses

    HTInetParse() that is called from within HTDoConnect now has an internal cache of the names and (possible multiple) IP-addresses of visited hosts. This minimizes the access to the file /etc/hosts and the Domain Name Server, even though aliases are not recognized in the cache.

    The default cache size is 500 entries and a host stays as long as a connect() succeeds. That is, if connection is refused for some reason, the host is taken out of the cache.

    The time to make a connection to a multihomed host is measured every time and a mean access time is calculated so that HTDoConnect always takes the fastest IP-address.

    Improved Functionality of DNS requests

    The Library now provides functionality for obtaining the full mail address of the user, full domain name of the host and also the possibility for setting both values. This means that the user can use his official email address, e.g. in the HTTP request.

    Long Directory Listings

    Long directory listings for HTTP, FTP and files on the local file system supported. For the moment only a part of the functionality, e.g, sorting, which columns to show etc. is exploited.

    Icon Management

    Icons in directory listings are bound to MIME content-types and encoding. They can be found in the HTIcons module. The default set of icons is set up using HTStdIconInit() and new icons can be added dynamicly using HTAddIcon().

    File Descriptions in Directory Listings

    File descriptions are supported for long HTTP directory listings. The default thing is to peek the title of the HTML files.

    Error and Information Message Management

    A new error handling module is introduced in HTError. It uses the error_stack entry in the HTRequest object. It handles nested error messages so that we can give a reason for the error, e.g.

        Error in ...
            This error occurred because ...
                This is caused by ...
                    etc.

    It also makes it possible for the Library to pass information back to the client so that the the Library doesn't act like a `black hole'. An example is HTTP redirection with status code `Moved 301'. Now the new URL is parsed back to the client via the error_stack so that the client can update the reference when possible.

    The function that generates and outputs the error messages to the user is put into HTErrorMsg Module so that it can be overwritten by a smart client or server.

    Guessing the Content Type of a Stream

    The HTGuess module reads a part a stream and determines the content type with the highest probability from a statistical analysis.

    Minor Stuff

    tmpnam()
    Because of problems on NeXT platforms the tmpnam() function is now replaced by HTFWriter_filename() in HTFWriter.c. The function has two modes: Give back a hash name or the last part of the URL (which normally is more readable).
    HTMLPutImg()
    New function to make it easier to put out an HTML <IMG> tag.
    HTParseInet()
    Added one more parameter to tell whether it is a multihomed host or not. (This is used in the host cache).
    HTInetStatus()
    Should no more be used directly but is called from HTErrorAdd so that the message goes all the way back to the user
    HTError
    This typedef is now obsolete and will be removed in future releases
    HTLoad()
    Added new parameter to HTLoad: BOOL keep_error_stack. If YES then the error_stack is not cleared. This is used in redirection etc.
    HTLoadError()
    Because of the new HTError module, this function in HTML.c is not needed anymore.

    Bug Fixes

    This is a list of fixed bugs from earlier versions.

    • Memory faults in HTSimplify() in HTParse.c has been fixed
    • README files in directory listings now know how to handle '<', '>' and '&' correctly. Though the file still has to be Ascii.
    • tmpnam is no more used in the Library because of problems on NeXT platform. Instead a new function called HTFWriter_filename() in HTFWriter.c is written.
    • HTInputSocket_getCharacter now returns a int and not a char so that EOF is no longer a member of the char set.
    • HTMLGen_start_element() is only allowed to put extra '\n' in <PRE> mode if it is between parameters in a tag
    • Changed type of <IMG> into SGML_EMPTY so that it doesn't expect end tag <\IMG>
    • Nested <PRE> is no more a problem in HTMLGen_start_element.
    • Removed all #elif as not all compilers on HPUX likes it.
    • Changed HTChunk such that chunk->data is '\0' terminated at any time. This actually makes HTChunkTerminate less needed but be aware that HTChunk->size changes.
    • Removed non-portable d_namlen field in HTMulti.
    • Moved definition of NO_GROUPS to tch.html
    • Moved definition of HT_MAX_PATH to tch.html
    • Proxy server now closes connection in HTTP.c. This was only problem in non-forking servers (VMS).
    • Definition of HT_NO_DATA moved to HTUtils.html where the other return codes are placed.
    • Functions from HTAlert Module that prompt the user don't get confused about ctrl-D anymore.

    27 March 94 2.16beta VMS version

    25 March 94 - 2.15

    General Upgrade

    • Lou Montulli's Lynx and LIST NEWSGROUP diffs put in to HTNews.c
    • Complete HTML+ DTD in parser as per Dave Raggett's internet draft 00. All 78 elements in the spec plus COMMENT, H7, HTML, XMP, LISTING and PLAINTEXT for back-compatibility.
    • Backup files created on PUT to local file (in server or client) according to global flag HTTakeBackup, defaults to YES.
    • Changed interface to HText -- added HText_new3 creation method. All clients using this interface should ensure that the structured stream used during creation is reopen()ed if it is still needed to hold dcoument structure after the original load has been done. In this case it should later be freed.
    • CHANGED INTERFACE to HTAccess: Now an HTRequest environment is passed to almost all calls. Allows better reentrant use of library for image embedding, etc. Implies (minor) changes to all clients.
    • Changed HTConverter definition. Should be internal only, uness you register new converters. Now take more useful parameters.
    • HTSaveAndCallBack stream allows simple implementation of embedded graphics: just load them with all conversions you can hadle using HTSaveAndCallBack -- you will be called back with a filename when the image is on disk.
    • Initialization: Calling of HTInit functions now not done by library -- if you want them, you call them from the application.
    • xxx_proxy environment variables for forwarding requests to a proxy (e.g. http_proxy , ftp_proxy , gopher_proxy ).
    • no_proxy environment variable to override the proxy; e.g.
              setenv no_proxy "cern.ch, foo.bar:8001, ncsa.uiuc.edu"
    • Bug causing FTP binary file transfers failing fixed.
    • Fix to Gopher code -- Now tries to do own filetyping with unknown gopher types. Even if this fails doesn't truncate binary files.
    • Local directory listing bug with trailing slash fixed.
    • Better multiformat handling, HTMulti(), with welcome page support.
    • The eight misplaced cern_httpd access authorization modules moved away from the library.
    • Parts with inefficient list handling rewritten -- better performance.
    • Non-modal changes for password prompting -- I suspect this doesn't work yet. Someone who is implementing a GUI client please contact me <luotonen@dxcern.cern.ch>.
    • The PlainToHTML text converter now works.
    • A basic HTMLToTeX converter is implemented. It understands fairly well written HTML documents but can not recover serious HTML errors.
    • All caching is turned off on the client side in this release until a more stable solution is found.
    • tmpnam() not used any more as it caused problems on a NeXT. Instead the function HTFWriter_filename() returns a hash or the last part of the URL as filename.
    • HTML titles now get parsed as well. This is in order to convert foreign letters etc. But if somebody puts a list into the title....

    International

    Bug Fixes

    • Bug fixed in HTFile.c prevented .multi multiformat links from working under Solaris, maybe other SYSV.
    • Bug fix in client HTTP: "Accept" line params preceded by ";" now as per spec.
    • Bug fixed in HTBTree.c that crashed for some large directories.

    15 December 2.14vms

    17 November 2.14

    • Contains port to VMS.
    • Bug fix in HTML generation -- line wrapping code produced garbage. Affected servers working as gateways and also editors writing back HTML.
    • Buf fix: static string returned by crypt() was free() 'd.

    4 Nov 93 Version 2.13

    • Bug fix: FTP text transfer don't end when 8 bit characters used. Still end on character -1. Thanks to Bjoern Stabell (bjoerns@staff.cs.uit.no)
    • A single function HTPromptUsernameAndPassword() so that GUIs can have a single authentication dialog box.
    • Extensive filename suffix recognition defaults.

    11 Oct 93 Version 2.12

    • Authroization in. See Ari's documentation. Everything is back-compatible, but there are large extenions to the rule file syntax, plus new ACL and protection setup files. Authorization is done by password in the clear now, with hooks for public key later.
    • Some other bug fixes. Not all the reported ones.

    8 Sept 93 Version 2.11

    • Binary transfer problems tackled in HTTP. Yukky problem of existing illegal 0.9 server producing binary which looks like text is unsolved. No problems with HTTP 1.0 transfer.
    • Streams: end_document method removed. "Abort" method added as requested at W5 -- use this when a pipe (stream stack) is broken by an error prevents execution etc of partially written files for example.
    • New stream HTNetToText for converting Net ASCII to local C representation.
    • Bug fix: Directories represented with anchors all with empty string (as opposed to no) names: many NAME="" in anchors.
    • Bug fix: application/octet-stream replaces application/binary as per MIME.
    • CSO Nameserver code to HTGopher added as Mosaic originally from ???. (AS)
    • Bug fix: HTTPD would return an old-style (non-MIME) response when sending back a file in unrecognised format, evn if client was using HTTP 1.0.

    Version 2.10 Not released due to WWWWW

    • Bug fix: crashed with error message when doing a Gopher search.
    • WAIS type "HTML" recognised as HTML. Other types treated as application/binary.

    30 November 1993, version 2.09a

    • Bug fix: A space was not allowed befoe the tagcloser (>) of an end tag. Now it is. Also (untested), empty close tags should be allowed a la "<h1>heading</>". Not recommended, but in.
    • Bug fix: HTML nesting stack overflow check.
    • Bug fix: Compilation under IBM MVS didn't work.

    23 November 1993, version 2.09

    At last this stupid library is aware of content-transfer-encoding. When defining file suffixes you must define not only the content-type (eg application/postscript) but also the encoding (eg binary, or 7bit). The first effect of this is to get the proper mode selected for FTP transfers. This means you can do a

            www -source ftp:/xx.yy.edu/pub/junk/foo.tar.Z > junk.tar.Z
    

    and it will work as expected.

    On the client side, you can define the presentation method for any given MIME-style 'content type". This is done in the rule file too.

    2.08

    • You can define file suffix conventions in the server and/or client rule files. This allows you to set up a server which for example, trateas .ai files as application/postscript, etc, or specifies that .ME is generally text.
    • You can define how a new content type will be rendered in the rule file of a client.

    15 November 93, version 2.07

    • If you telnet to the www client (-h option): 1. it is more secure: No local file access. 2. you can use /etc/www-remote.url file to specify the url of the home page for telnet users.
    • Library uses fopen() rather than open(), allowing file access on non-unix machines.

    7 November 93, 2.06

    • Check against local hostname in file access is now string insensitive.
    • HTML parser: entities were not expanded at outer level.
    • HTTP client sends client name and version. Requires HTAppName
    • FTP client fix: Continuation lines which do not have - in are now handled properly as per the spec.

    May 1993 version 2.05a

    • Bug fix in directory reading of local files -- it didn't work! The stopped the daemon working on directories.
    • Bug fix in DIR handling for browers: tabs work again in directory listsings.

    22 April 2025 version 2.04

    • WAIS handling code in library, no need to go through a gateway of you compile with the right options abd link with freeWAIS. First version of this, no bells or whistles.
    • wwwsys.h systems specifics for SCO picked up from mosaic but directory handling not fixed yet ...

    20 April 2025 version 2.03c:

    • Use of identifier "this" removed to prevent conflicts with C++
    • _AIX cpp defined picked up for AIX.
    • In networking code, no assumption that \n is 10 on even on ASCII machines (for Mac/MPW).
    • Server bug fix after Sebastian.Wilhelmi@isst.fhg.de -- exited with bad status even if all OK.

    19 April 2025 version 2.03b

    • Distribution bug fix: s/Specific/All/ on line 2 of WWW/All/Makefile.product
    • SGML bug fix: treatment of entities was on when would be off and vice-cversa.
    • Sun binaries linked with -Bstatic to make them transportable
    • Bug fix: Sometimes, client would ignore first part of returned file.

    17 Mar 93 Version 2.02-beta

    • Bug fix: Falls back to old HTTP with servers which don't like the new HTTP.
    • BUILD file for easy installation of library, httpd and www

    15 Mar 93 Version 2.0 alpha:

    Incompatible library release has cleaned up interfaces. Developers read the .h files! Version 2 libraries must be compiled with version 2 products and vice-versa. Version 2 clients will access (most) version 1 servers OK, version 2 servers will respond correctly to (all) version 1 clients.

    • Bug fix: Gopher connections wasted socket numbers and eventually used them all up. (Thanks Marc Andreessen)
    • Rule file used by clients as well as servers.
    • MIME parser takes content-type field from MIME messages and invokes appropriate registerd presentation method for each type.
    • Local and remote multiformat files.
    • ***HTSearch and HTLoadRelative parameters changed! HTMainAnchor and HTMainText globals are no longer used by the library.
    • HTAccess package now registers known protocols in list.
    • HT{G,S}etNewsHost available from HTNews module.
    • SGML parser speeded up
    • New software intrerface introduced: HTStructuredClass. This should make use of the library easier with clients, and allow more code in common between clients and servers.
    • Hooks for handling new formats with other applications
    • General hooks for status messages, user query, progress monitoring, etc. (HTAlert module)

    6 January 1993, Version1.1a

    • Can revisit telnet nodes.
    • Tn3270 access type accepted.
    • FTP password for anonymous is now WWWuser@ withouyt a hostname, for software on ftp.uu.net etc.
    • Bug fix in HTML.c: Would crash when a list was the first visible element in a text object.

    11 December 1992, Version 1.1

    • Added <PRE> tag as in new HTML spec.
    • Added numeric character reference handling for future use.

    December 1992, Version 1.0c

    • Fixed bug in FTP handling (FTP file retrieve put control connection in bad state)
    • Fixed bug in Gopher handling on non-ASCII platforms. Also, bug fix in Gopher search of index whose name contained characters (like blanks) escapes with %.
    • Fixed bug in NEWS handling, failed on non-ASCII platforms.

    November 1992 Version1.0b

    • Fix some bugs in Make system.
    • Memory bug fixed: On failure to connect to HTTP server, it would free() an uninitialized pointer!
    • Some trace messages were output to stdout instead of stderr
    • Allow "ftp:" prefix on URL . Effect is currently equivalent to that of the "file:" prefix.
    • Local file access not allowed in secure mode. (telnet access was never allowed in this mode). Secure mode is used for telnet server and mail robot.

    November 1992 version 1.0

    • Library libwww.a made independently of browsers to save time and space and to force good modularity


    José Kahan,
    @(#) $Id: History.html,v 1.40 2025/12/14 12:05:53 kahan Exp $
    libwww/Library/User/Makefile.am0100644000076400001440000000114607142302320016122 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign noinst_PROGRAM = export DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) SUBDIRS = Patch Architecture Using Guide Style Platform BUILT_SOURCES = \ Extrnals.html SUFFIXES = .html DEPENDENCIES = \ ../src/libwww.la Extrnals.html: (cd $(srcdir) && \ perl $(top_srcdir)/config/makeindx.pl ../src/ ../src/WWW*.html \ > $(srcdir)/Extrnals.html) export: Extrnals.html -rm $(srcdir)/Extrnals.html; (cd $(srcdir) && \ perl $(top_srcdir)/config/makeindx.pl ../src/ ../src/WWW*.html \ > $(srcdir)/Extrnals.html) libwww/Library/User/Overview.html0100644000076400001440000000606407142500626016577 0ustar danielusers W3C Libwww Documentation

    Documentation

    W3C Libwww Documentation

    Get Started | Install and Use | Architecture & APIs | How to Help

    Get Started

    Get it!
    Instructions on how to get the code - including directly from CVS
    Release Notes
    Listing new features and bug fixes and complete release history
    Supported Platforms
    Listing supported platforms and known tricks and hints about these platforms

    Compile, Install, and Use libwww

    Installation Guide
    Describing how to unpack, compile, and install libwww and its sample applications.
    Sample Applications
    Some really basic samples and also some more elaborate applications that actually can do useful stuff
    Libwww Quick Guide
    A quick guide describing how to get started writing an application
    Use the libwww-config script
    A script for easier compiling and linking applications using libwww based on the GTK gtk-script

    Architecture and APIs

    Library Architecture
    Describes the overall architecture of libwww
    User's Guide
    Explains how to use libwww for building applications.
    Library Packages and Interfaces
    Describes the interfaces of libwww and how they can be integrated into Web applications

    How can I Help?

    How can I help?
    Here's an initial list but remember, only the sky is the limit!
    Programming style Guide
    Why is libwww coded as it is and how does it interface to for example C++ applications?
    Known Bugs
    Listing what we already know is wrong. See also the latest CVS changes


    Jose Kahan,
    @(#) $Id: Overview.html,v 1.30 2025/08/04 08:40:54 kahan Exp $
    libwww/Library/User/ReleaseNotes.html0100644000076400001440000000643307220141560017355 0ustar danielusers W3C Sample Code Library Release Notes

    RELEASE

    Release Notes for Libwww

    See also the the latest changes that are committed to and available from CVS but not yet in a release. See also the full libwww release history.

    Release 5.3.2, Dec 20, 2025

    This is a minor release that mainly provides bug fixes and small enhancements that have been commited to CVS since the last release. Vladimir Koslov provided indispensable help for testing and preparing the Win32 release. Special thanks to Wayne Davison, Art Barstow, Peter Stamfest, Zhu Qun-Ying, Jens Meggers, Ken Olum for their contributions.

    • Summary of principal changes (the ChangeLog provides a detailed account)
      • The following sample applications could core dump under Windows: head.c, getheaders.c, chunk.c, chunkbody.c, multichunk.c
      • When retrieving an object from the cache, the HTTP headers associated with the object weren't stored in the HTResponse object.
      • The cache garbage collector could go into an endless loop.
      • The HTResponse object now returns the HTTP reason.
      • Update of expat to version 19990728.
      • Optimization, enhancements, and bugs fixes to the HTRDF module
      • Some memory leaks and compiler warning fixes.
      • The robot could hang when accessing local files.
      • Optimization of the HTChunk and HTHash modules.
    • Outstanding bugs
      • The webbot crashes from time to time under Windows. It seems to be a problem while reading the robots.txt file, where the application frees a request that's still registred in the Windows async. loop.,
      • The tiny.c sample application doesn't prompt the user with a text input.
      • Interpretation of FD_CLOSE under Windows.
      • The FTP implementation has memory leaks and doesn't remember the path or authentication information correctly.
      • Compiling with -O2 and -Wall reveals some unitialized variables in HTDIR and HTFTP.
    • To do
      • Compile the answers to the libwww survey (volunteers are welcome).

    Jose Kahan,
    @(#) $Id: ReleaseNotes.html,v 1.92 2025/12/20 14:34:24 kahan Exp $
    libwww/Library/User/Start.html0100644000076400001440000002377407142501332016070 0ustar danielusers Libwww Quick Guide

    Documentation

    Libwww Quick Guide

    The libwww core is the central part of libwww. By itself it doesn't do much - it is not capable of accessing any local files, HTTP servers,  or any other Internet service. Also, it does not know about authentication, redirection, caching or any other often used feature. The reason for this is that not all applications need the same amount of functionality and also they do not need it to be done in the same order. Therefore, in order to accommodate the various needs of different types of applications, libwww has a set of application profiles which initialize the libwww core with a standard set of features provided as a part of the libwww distribution-file.

    Installation

    If you have not already installed and compiled libwww then have a look at our installation guide before you continue.

    Application Profiles

    Libwww comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing RFC 822 headers etc. but it must all be registered by the application before the core knows about it. You can either register the parts directly through the many initialization functions in the Initialization Interface or you can use these "precompiled" profiles which are set up to contain the features often used by the a specific type of application, for example a client and a robot.

    Client Profile

    The Client profile initializes a large set of features often used in client applications. These include features like:

    • HTTP, FTP, Gopher, News, Telnet Access , local file access and optionally WAIS access
    • MIME parser
    • Access authentication and Automatic redirection
    • Rule file management, proxy server and gateway support
    • Chunked Encoders and decoders
    • Request Log Manager
    • History Manager

    Robot Profile

    The Robot profile initializes a large set of features often used in robot applications. These include features like:

    • HTTP, FTP, Gopher, News, Telnet Access , local file access and optionally WAIS access
    • MIME parser
    • Access authentication and Automatic redirection
    • Rule file management, proxy server and gateway support
    • Chunked Encoders and decoders
    • Request Log Manager

    Issuing a Request

    When you want to load a URL, or perform some other method, for example sending a document to a remote server, you must create a Request object -fill it out with your preferences, and pass it to libwww. In the application interface, there is already a large set of functions that help you set up the request in order to perform the operation you want. For example, there are functions that download a document into a memory buffer, save a document to local file, or to POST form data to a remote HTTP server.

    When a request is passed to libwww, libwww calls a set of filters that can modify the request in various ways before it is passed on to the network layers of libwww. Also, after a request has terminated, libwww calls a set of AFTER filters that interpret the result and can perform variousoperations based on this result. If the request succeeds and we start receiving data from the other end of the connection, libwww creates a stream pipe which feeds data from the network layers back to the application. In the request object you can specify the final destination for your data, for example presenting it to a user, save it to a file, or to send it over the network.

    Filters

    Libwww has a concept of filters that can be called when a request object has been passed to libwww and when the request has terminated.These filters handle a lot of the functionality enabled by the application profiles. For  example, access authentication, redirection, logging,cache validation, proxy support and much more are implemented as filters.Filters can be registered either locally to a single request of globally for all requests. Global filters is useful if the filter is to be performed very often and local filters can either add to or override the global set of filters.

    All filters are registered at run-time, and filters can be cascaded so that one filter can call other filters and so on. Filters can also start new requests or terminate existing requests, so the set of possibilities is very big. Normally, filters do only handle metainformation about a resource.For example, the authentication filters looks to see if we have been asked to provide some credentials in order to access a URL. If so then it adds a protocol defined header to the request, and if not then the request just proceeds.

    Streams

    One thing filters can not do is to add a document to the request- for example if you are using a PUT method in order to send a document  to a remote HTTP server. Instead, libwww uses streams to transport data objects from the application over the network, or the other way. Streams are advantageous as they handle data as soon as it arrives and they can be cascaded into stream pipes. Each stream element in a stream pipe can do some operation on the data object. Streams can be used for many things: they can convert data object from one data type to another, or they can apply a compression algorithm or a transport encoding, for example base 64. However,streams can also be used for calculating the content length, or to generate an MD5 hash of the data object.

    Stream pipes are generated by looking at the content-type, the content-encoding, and the transport-encoding of a data object.That is, if libwww receives a document encoded using chunked transfer-encoding, then it looks to see if it has a stream object which can decode this encoding and pass it to the next stream in the stream pipe.

    Another feature of streams is that they can be forked into multiple streams and then do different operations on each branch of the stream. This is for example how we cache a document while we are presenting it to the user, or you can also preserve the original HTML text in one branch while parsing the document in another.

    Request a URL

    The application interface provides many helper functions that make libwww core easier to use. This is particular the case for accessing URLs where you can find a large set of functions in the HTAccess module. If these functions for some reason are not what you are looking for then you can of course go ahead and write your own additions but you should find what is needed at least to get started!

    Should I use the Internal SGML/HTML Parser?

    Libwww contains code for parsing an HTML document but not to present it to the user. The reason for that is that libwww is platform independent and doesn't know about the UI interface at all. The libwww HTML parser is quite crude as it has not been updated for a long time. Instead we refer you to the Amaya browser/edirtor for a full HTML parser. However, if you prefer using the default libwww HTML parser (like for example the Line Mode Browser) then you must provide a set of functions that meet the HText Interface definition.

    The HTML parser calls the HText interface each time it has identified an HTML element, but doesn't put any restrictions on what the HText function actually do with the data. Two different examples are the Line Mode Browser which renders the information and presents it to the user; and the Mini Robot which uses the anchor information to start new requests in order to traverse the Web space. The illustration below shows how the libwww HTML parser is organized with a description of the model below.

    Interfaces

    Stream Interface
    Use this interface if you do not want to use any of the SGML/HTML parsers in libwww. The default mode is not to initialize the libwww SGML/HTML parser. You will have to set if up explicitly, for example by calling HTMLInit.
    Structured Stream Interface
    Use this interface if you do want the libwww SGML parser but not the HTML parser. The SGML parser is a generic (but crude) SGML parser which can be setup with a specific DTD. It should of course only be a SGML lexer but this is not the case. It normally feeds the HTML parser with structured data. In this case, you will be emulating the HTML module, and generating a hypertext object from the structured stream.
    HText Call Back Interface
    This requires the full SGML/HTML parser in libwww. After the data object has been parsed by the SGML and the HTML parser, the HTML parser calls the HText interface so that the application can render it. The callback functions are all declared but not defined in the HText module. The client must provide the actual code that defines the presentation method used for a specific HTML tag. You can set up this mode by calling HTMLInit.


    Jose Kahan, libwww@w3.org,
    @(#) $Id: Start.html,v 1.9 2025/08/04 08:46:18 kahan Exp $
    libwww/Library/User/ToDo.html0100644000076400001440000001752707142501332015637 0ustar danielusers Libwww ToDo List

    Libwww ToDo List

    Open Projects | Completed Projects

    This is the current work plan for new libwww features but remember, the sky's the limit! Before you start, make sure that you have an up-to-date version of the code hot from CVS.

    Open Projects

    Project Description Started Status Owner
    C++ representations of streams and other libwww classes This would make inheritance a lot easier - especially with respect to anchors and streams Mar 1999 Ongoing Martin Durst
    RDF parser Implement an RDF parser on top of the Expat parser that John Punin integrated Mar 1999 Ongoing (pending on getting in libwww) Henrik & John
    Mirroring facility in Webbot Use the webbot to mirror a site using the very fast HTTP/1.1 engine with pipeline and regular expressions! Sep 1998 Ongoing Bob Racko
    HTTP Extension Framework We have many exiting HTTP extensions waiting for the HTTP Extension Framework. The implementation can be based on the existing PEP implementation. Oct 1998 Ongoing  Eric Prud'hommeaux
    Regular expressions in URI mapping rules Libwww already supports URI mappings in the rules module but support for sed like regular expressions would be extremely useful, especially for mirroring done by the Webbot. Libwww already uses regular expressions for handling proxies and other things. Sep 1998 Open  
    Drag-and-drop support in Web Commander Would like to be able to drag and drop URIs to save, load, etc. Would also be cool to have as well as integration with the Explorer menu. Sep 1998 Open  
    GUI Interface for the Webbot We already have a sketchy Tcl/Tk interface but it hasn't been maintained. We need a GUI expert for this one! Oct 1998 Under discussion  

    Completed Projects

    Project Description Started Status Owner
    Better Windows Makefiles Pending on autoconf and automake to be released with support for Windows. Any better ideas plan for improving Windows makefiles? Apr 1999 Done - see new msvc files  
    Libwww RPM file Can use a lot of the information already used by GNU automake - need a spec file expert! Apr 1999 Done  Jim Gettys
    SSL transport Libwww's flexible transport architecture allows for multiple transports of which SSL could be one Apr 1999 Done - NOTE: Because of US Export restrictions, we don't believe we can distribute this module for now
    HTTP Cookies Make libwww toss 'em around! Mar 1999 Done - however, there is no cookie jar - just the parsing/generation

    HTTP Digest Authentication Digest is becoming important is is beginning to see widespread deployment. Libwww supports easy addition of multiple authentication schemes so digest can be implemented as a plug-in module Oct 1998 Done Jose Kahan
    Robot txt file parser The Webbot already knows about the robot META tags - help turning it into a well-behaving robot by understanding robot.txt files as well. Oct 1998 Done John Punin
    Libwww Installshield for Windows Libwww and the sample apps like the Web Commander could really use an in install shield to get Windows people up and going. Vladimir's version installs all the libwww DLLs in a shared location so that they are available to other apps as well Oct 1998 Done Vladimir Kozlov
    Better Windows Makefiles Pending on autoconf and automake to be released with support for Windows. Any better ideas plan for improving Windows makefiles? Sep 1998 Done - Get the separate MSVC makefiles  


    José Kahan,
    @(#) $Id: ToDo.html,v 1.29 2025/08/04 08:46:18 kahan Exp $
    libwww/Library/User/Using.html0100644000076400001440000005625007142501332016053 0ustar danielusers How to get Started Writing an App

    QUICKGUIDE

    How to get Started Writing an App

    This note explains the overall moves to make when you are writing an application on top of the W3C Sample Code Library (libwww). For details on how to use the library, you should look at the User's Guide.

    NOTE It is a good idea to have a look at our example applications:

    This quick guide takes you through the basic steps necessary to create your own application with all the power of the W3C Sample Code Library:

    1. Define preferences and application capabilities
    2. Binding File Suffixes and Data Formats
    3. Should I use the Internal SGML/HTML Parse Stream?

    4. Register a memory cache handler
    5. Register event handlers for user input
    6. Register a request termination handler
    7. Register a "Unknown Header" handler
    8. Register a select Timeout Function

    9. Issue requests to the Library
    10. Putting a request into a context
    11. Interrupt a request
    12. Logging and History Management
    13. User Messages
    14. When to free Objects

    Define preferences and application capabilities

    The HTInit module is a special module in that it defines the capabilities of the Library. Think of libwww as a core that can do absolutely nothing on its own. All the functionality comes from modules that are registered dynamically at runtime. This is why it is so important to use the initialization function mentioned above. The library basically boot-straps itself to find out what it is capable of doing.

    When you unpack the library you already have a lot of functionality to plug in. You have protocol modules that can access HTTP, FTP, Gopher, WAIS, NNTP, Telnet, TN3270, rlogin, services and the local file system. You also have stream converters that handles HTML documents, plain text documents, MIME documents and various conversions between these data formats. Furthermore you have the possibility of defining presenters that use external viewers to present for example images, audio files etc.

    By default, the HTInit module contains functions to enable all the functionality that the library provides, but you might want to change this, for example if you have a special image viewer that you would like to use. The way to do this is either to modify the HTInit module or to override HTInit with your own version. It's described in more detail in the User's Guide what it means to override a Library module.

    Both converters and presenters are stored in a linked list (the HTList object). This list can either be bound to a global list of converters and presenters that are used in all requests or you can bind the lists locally to a single request object in which case it is only used in this particular case.

    Data Format Conversions

    Converters are streams that are capable of converting directly from one data format to another, for example from a HTML document to some kind of presentation format that the user can actually see on the screen. This is the fastest way of presenting an object to the user as it doesn't require external applications to step in and do the presentation.

    extern void HTConverterInit (HTList * conversions);
    

    External Presenters

    Presenters are used to present a data format to the user by calling an external program, for example a post script viewer. In practice presenters work by first saving the data object in local file and then spawn off the external viewer. This is the reason why it is a big advantage to use a converter instead as the presentation to the user then can happen as more and more of the data object arrives over the network.

    extern void HTPresenterInit (HTList * conversions);
    

    Protocol Modules

    By default the Library enables all available protocol modules but if this is desired then it can easily be changed using the HTProtocolInit function. An example is if you want to make an application that only can speak HTTP, then you can disable the initialization of all the other protocol modules by simply taking them out of the HTProtocolInit function.

    extern void HTProtocolInit (void);
    

    Binding File Suffixes and Data Formats

    Not all protocols support the notion of describing the data format of a data object. An example if FTP where only two modes are possible: text and binary. However this is not sufficient in order to select an appropriate converter of presenter (both images and audio files are binary data object but can in general not be handled by the same application). This is also a problem when accessing the local file system which in most cases do not keep information about the data format.

    The library solves this by looking into a table of bindings between a file suffix and the corresponding data format. By default the Library defines a long list of the "most common file suffixes" but the list is of course configurable! If you look into the HTInit module again, you will find a function called:

    extern void HTFileInit (void);
    

    you will find that it is just a question of adding new suffixes that are not mentioned. However, it is not necessary to list all possible suffixes. Luckily the first couple of line in many data objects tell what kind of data they contain and the Library uses this to try and guess unknown data formats.

    Should I use the Internal SGML/HTML Parse Stream?

    The library contains code for presenting a data object in a text based application as is the case with the Line Mode Browser, but as this is not generally sufficient GUI clients must overwrite the data object presentation modules in the Library in order to take advantage of a more advanced user-interface. Just to make it more flexible this can be done in three ways depending on how much you want to do yourself. The three interfaces are illustrated below:

    Interfaces

    SGML Stream Interface
    Use this interface if you do not want to use the SGML parser in the Library and the following transition to a structured stream which is a subclass of the stream class. This can all be set up with out overwriting any module but simply by defining the converters not to use the SGML/HTML parsers.
    HTML Structured Stream Interface
    If the client has its own HTML parser then the interface is between the client HTML parser and the Library SGML parser. The SGML parser is a general SGML parser which can be setup with a specific DTD and it feeds the HTML parser with structured data. In this case, you will be emulating the HTML module, and generating a hypertext object from the structured stream.
    HText Call Back Interface
    If the client wants to use the HTML parser in the Library then this is the interface to use for the application. The hypertext object is parsed and the communication with the client is based on a set of call-back functions in the HTML parser. The call-back functions are all defined as prototypes in the HText module but the client must provide the actual code that defines the presentation method used for a specific HTML tag. If you wish to maintain the structure of the SGML file within your object, then the SGML interface will be a better place to connect your code.

    You are free to define the structure of the hypertext object (the declaration can be found in the HText module. You may want to define your own styles and font definitions.

    Register a memory cache handler

    The library handles a persistent file cache which provides intermediate term storage of cacheable objects. However the Library also has a notion of a memory cache but this is not maintained by the Library itself but by the application. The reason for this is that the Library does not know what kind of data format the the application is capable of storing or where they are stored, and it also allows the application to control the memory management, that is how much space to use for storing data objects in memory.

    If the application wants a memory cache (which has an important performance impact) it must register a memory cache handler that can make a decision whether a data object is in memory or not and if it is stale or not. Every URL has an associated HTAnchor object that stores all known information about that URL, for example the title, length of the data object (if any) etc. The Library calls the memory handler on every request but before making a decision about a data object, the memory cache manager can consult the requested anchor object to find out if it has expired etc. A memory handler is registered and unregistered using the functions

    typedef int HTMemoryCacheHandler	(HTRequest * request, HTExpiresMode mode, char * message);
    extern BOOL HTMemoryCache_register	(HTMemoryCacheHandler * cbf);
    extern BOOL HTMemoryCache_unRegister	(void);
    

    The handler can use two return codes which both are defined in the HTUtils modules.

    HT_LOADED
    If the object was found and looked good
    HT_ERROR
    If the object was not found, has expired etc.

    An example of a memory handler can be found in the Line Mode Browser in the GridText module. You can also see where it is registered as the memory handler in the Library in the HTBrowse.c module

    Register event handlers for user input

    The Library has a very flexible event model that allows an application to either use it's own event loop that the library can makes calls to or to use the event loop in the HTEvent module in the library. In most cases the library event loop is sufficient which is the case for example on Mac, Window, and Unix platforms.

    The application can register as many event handlers for as many channels that it can get input on. In the case of the Line Mode Browser, input can only be sent via standard input, so only one event handler is necessary. However if more than one channel is available then they can all be associated with an event handler by registering them in the Library. An event handler is a function of the type

    typedef int HTEventCallBack (SOCKET sockfd, HTRequest * request, SockOps ops);
    

    and they can be registered in two ways depending on the event channel:

    • The event channel can be redirected to a BSD socket
    • The event channel is connected to a TTY console (for example under NT)

    In the first case use the following functions to register and unregister a handler:

    extern int HTEvent_Register	(SOCKET sockfd, HTRequest * request, SockOps ops,
    				 HTEventCallBack *cbf, HTPriority priority);
    extern int HTEvent_UnRegister	(SOCKET sockfd, SockOps ops);
    

    See the HTEvent module for more information on the arguments. Likewise if you are on for example a Windows NT platform then use the following functions:

    extern int HTEvent_RegisterTTY	(SOCKET sockfd, HTRequest * request, SockOps ops,
    				 HTEventCallBack *cbf, HTPriority priority);
    extern int HTEvent_UnRegisterTTY(SOCKET sockfd, SockOps ops);
    

    The return code from an event handler is simple but very important. There are two allowed values:

    HT_OK
    If the handler could handle the event
    HT_ERROR
    If an internal error occured, for example a NULL argument was passed etc. This code will result in that the event loop is exit'ed and the application is ready to be terminated.

    It helps understanding event handlers if you think of the Library as a coke machine (the ones with a coin slot only - the ones which also has a bill slot work differently!) Event handlers are the coin slot on top where you can request a service from the library. You are guaranteed that the machine never returns any coins to you the same way - they always come out at the bottom of the machine. This means that the Library always returns "Thanks, I have received your request - please look for the response at the bottom" on any request started from within an event handler. In the library case the result is always returned in the request termination handler that is the "bottom" of the Library machine.

    Register a request termination handler

    The application can register a callback function that is called whenever a request has terminated, regardless. The callback function can furthermore be registered to be called regardless of the status code or on upon a specific codes. The set of status codes is:

    HT_LOADED
    The request was successful
    HT_INTERRUPTED
    The request was interrupted
    HT_ERROR
    An error occured
    HT_NO_DATA
    The request resulted in an object with no data, for example a telnet session
    HT_RETRY
    The service was unavailable but the request can be repeated at at later time. This later time can be obtained using the function
    extern time_t HTRequest_retryTime (HTRequest * request);
    

    Return codes are not used from termination handlers.

    Register an "Unknown Header" Handler

    If you have additional headers that you want to experiment with you can register a header parser to handle all unknown headers. This handler is called whenever an unknown header is encountered when parsing the object header. If the returns YES then the MIME parser stores the metainformation in the anchor object if self so that it can be found at a later point in time. If the handler returns NO, then the header is discarded.

    The header passed to the call back function will be in normal NULL terminated C string without any CRLF. The line will also be unwrapped so that it is easier to parse for the call back function.

    typedef int HTMIMEHandler	(HTRequest * request, char * header);
    extern int HTMIME_register	(HTMIMEHandler * cbf);
    extern int HTMIME_unRegister	(void);
    

    Register a Select Timeout Function

    You can register a call back function together with a timeout that is used in the select call of the event loop. When the select() call times out, the call back function is called. The registration can either be so that the call back always is called when that the select call times out or only when Library sockets are in use.

    typedef int HTEventTimeout (HTRequest *);
    extern BOOL HTEvent_registerTimeout (struct timeval *tp, HTRequest * request, HTEventTimeout *tcbf, BOOL always);
    

    Issue Requests to the Library

    The Access module has a set of functions that works as a user interface to the request manager. You can call the request manager directly but often it is simpler to use the Access module. As mentioned, the request manager returns immediately and the result of the request is handled back to the application using the termination handlers.

    What and When to Escape Strings

    The Library's represents internally location strings as URLs which means that they always are escaped. Only when it is required to access a resource are they unescaped, for example via FTP. All location strings passed to the Library are also treated as URLs which means that they must be escaped already. Hence in the case of the request methods mentioned aboce, all URL arguments must be escaped if the resource is to be found.

    Most often this is only a problem when people type in location strings directly, for example using "goto location" etc. In the Escape module the Library provides two functions for escaping location strings into URLs and unescaping URLs into location strings:

    typedef enum _HTURIEncoding {
        URL_XALPHAS         = 0x1,
        URL_XPALPHAS        = 0x2,
        URL_PATH            = 0x4
    } HTURIEncoding;
    extern char * HTEscape (const char * str, HTURIEncoding mask);
    extern char * HTUnEscape (char * str);
    

    Multiple Simultaneous Requests

    Multiple simultaneous requests can be started at any time from within an event handler. It is simply a question of calling one of the load functions in the Access module. The Library keeps a request queue where all active requests are kept. The application can define the maximum number of open sockets that can be open at any one time. This number is by default 6 but can be changed using the following functions:

    extern BOOL HTNet_setMaxSocket (int newmax);
    extern int  HTNet_maxSocket (void);
    

    If there are no free sockets available the request is put into a pending queue and started as soon as possible.

    Putting a request into a Context

    When multiple requests can be initiated simultaneously it is in general not possible to predict the order that the results return to the application. This is a function of the size of the individual data objects, net work speed etc. In order to keep track of ordering of the requests, for example in the history list, it is necessary to put them into some kind of context. The Library provides the hooks for maintaining a context together with the Request object by the following methods:

    typedef int HTRequestCallback (HTRequest * request, void *param);
    extern void HTRequest_setCallback (HTRequest *request, HTRequestCallback *cb);
    extern HTRequestCallback *HTRequest_callback (HTRequest *request);
    

    The callback function can be passed an arbitrary pointer (the void part) which can describe the context of the current request structure. If such context information is desired then it can be set using the following methods:

    extern void HTRequest_setContext (HTRequest *request, void *context);
    extern void *HTRequest_context (HTRequest *request);
    

    There is no limit to the definition of a context data object and the memory management if entirely up to the application. The Request object simply carries the information around.

    Interrupt a request

    Any request can be interrupted from an event handler by calling either of the functions (the first kills a specific request, the second is more radical and kills them all):

    extern BOOL HTRequest_kill	(HTRequest * request);
    extern BOOL HTNet_killAll	(void);
    

    Logging and History Management

    The library has a set of modules that are not called from within the library at all but can be used by the application. Two examples are a History manager and a Log manager that provides functionality for keeping a history list of visited objects and to provide logging of the results. The application is free to use there modules but does not have to.

    User Messages

    The library has a basic User Messages and Prompts module which is intended for the Line Mode Browser. In case you are building a GUI client you would probably want to write your own version using windows etc. This can be done by overriding the module in the Library with your own that has the same set of functions as described in the User's Guide.

    When to free Objects

    This is a short set of recommendation on when to free objects in memory.

    Anchors
    Anchors are normally not freed before the application terminates as they have important information about the part of the Web that the user has been in tough with. However, anchors can be freed at any time if they are not used by an ongoing request
    Requests
    Request objects are only intended to live as long as a request is being executed. A request object is a "information binder" that binds various data objects together as long as the request is running. As the Library uses asynchronous network I/O many requests can be handled "in parallel" but each request object only knows about one request. Therefore a request object can be free whenever a it has terminated which is the case when the request termination handler is called.
    Streams
    Streams are used as the main media for data transportation in the Library. Therefore they are normally hooked together in what is called stream chains where data can carry the data from the user to the network and vice verse. As any operation on a stream ripples through the whole chain of streams you should not free any streams on your own. The free method is initiated in the Library, for example when all data has been transferred from a remote server and the connection closed.
    Memory Cache Objects
    As mentioned in the section on memory cache handlers the application can handle all data objects in memory as it likes. Therefore the app is also free to delete any object at any time but of course this is a balance between memory and performance - it takes a lot longer to get a data object from a remote server than to keep it in memory!


    José Kahan,
    libwww@w3.org

    @(#) $Id: Using.html,v 1.23 2025/08/04 08:46:18 kahan Exp $

    libwww/Library/User/WAIS.html0100644000076400001440000000341507142501332015524 0ustar danielusers WAIS to HTTP Gateway

    The WAIS to WWW gateway

    Libwww supports direct WAIS access which means that applications using libwww can access WAIS servers. In order to do this you must have the following:

    If you do not enable direct WAIS access, your application may still access WAIS servers through a HTTP-WAIS gateway.

    WSRC files

    The gateway keeps a cache of WAIS "source" files. These are files describing WAIS servers, and are parsed, and are kept in the directory /usr/local/lib/WAIS under the server name, port, and database name.

    They are normally picked up automatically by searching a directory of servers index. Once the gateway has picked up a description of a server, it uses the description to describe the server to those who follow links to it. (See the HTWSRC module in libwww)

    More Information


    José Kahan,
    @(#) $Id: WAIS.html,v 1.9 2025/08/04 08:46:18 kahan Exp $
    libwww/Library/User/Guide/0040755000076400001440000000000007405520567015145 5ustar danieluserslibwww/Library/User/Guide/CVS/0040755000076400001440000000000007405517343015576 5ustar danieluserslibwww/Library/User/Guide/CVS/Root0100644000076400001440000000005607405517342016441 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/User/Guide/CVS/Repository0100644000076400001440000000003207405517342017667 0ustar danieluserslibwww/Library/User/Guide libwww/Library/User/Guide/CVS/Entries0100644000076400001440000000163507405517343017134 0ustar danielusers/.cvsignore/1.2/Thu Apr 18 01:41:25 1996// /App.html/1.15/Mon Dec 9 03:21:23 1996// /Central.html/1.14/Mon Dec 9 03:21:26 1996// /Core.html/1.14/Mon Dec 9 03:21:29 1996// /Interfaces.gif/1.1/Sat May 27 22:46:37 1995/-kb/ /Interfaces.html/1.11/Sun May 3 20:05:40 1998// /Makefile.am/1.3/Fri Apr 12 17:45:16 1996// /Network.html/1.11/Mon Dec 9 03:21:34 1996// /Overview.html/1.34/Wed Jul 12 10:34:49 2000// /Prefs.html/1.13/Mon Dec 9 03:21:38 1996// /Presentation.html/1.14/Mon Dec 9 03:21:41 1996// /Protocol.html/1.17/Mon Dec 9 03:21:43 1996// /ProtocolUtils.html/1.14/Mon Dec 9 03:21:46 1996// /Streams.html/1.12/Mon Dec 9 03:21:49 1996// /StrucStreams.html/1.12/Mon Dec 9 03:21:52 1996// /Styles.html/1.11/Mon Dec 9 03:21:55 1996// /Threads.html/1.14/Sun Feb 16 18:41:35 1997// /URI.html/1.11/Mon Dec 9 03:22:00 1996// /Utils.html/1.16/Sun May 3 19:44:48 1998// /choppy.html/1.21/Sun Feb 16 18:41:36 1997// D libwww/Library/User/Guide/Makefile0100644000076400001440000001406607405520570016603 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Guide/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Guide distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Guide/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Guide/.cvsignore0100644000076400001440000000002506135316705017133 0ustar danielusersMakefile Makefile.in libwww/Library/User/Guide/App.html0100644000076400001440000000452306252702663016552 0ustar danielusers Internals - Application Specific Modules W3C libwww LibGuide

    Application Specific Modules

    When all public functions and variables within a module are overwritten by module other than the one in the Library, the linker takes the new version and ignores the module in the Library. The following modules are implemented in the Library in order to support the Line Mode Browser but can be overwritten by GUI clients etc.

    Displaying and Prompting User Messages

    The HTAlert module contains the code for prompting the user for file names, userid, password etc. Furthermore, it presents messages containing status information, error messages etc. to the user. The implementation in the library is meant for the Line Mode Browser (i.e. it writes to stderr) but can easily be overwritten by GUI browsers.

    History Manager

    The HTHist module records and replays on request the documents which the user visits. There are no calls to this module within the Library so if the application does not use it then it is not linked in at all. If the application wants a more advanced history management, then this should be overwritten.

    Internal Event loop

    The internal event loop in the HTEvtrg module is made to support libwww threads If an application wants its own event loop, then this module must be overwritten.

    Default Initializations

    The HTInit module defines a standard set of initializations where all protocol modules and converters are setup at startup time of the application in the HTLibInit(). Often you can take this module and just override it with your own preferences.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: App.html,v 1.15 2025/12/09 03:21:23 jigsaw Exp $
    libwww/Library/User/Guide/Central.html0100644000076400001440000000336206252702666017425 0ustar danielusers Internals - Core Objects W3C libwww LibGuide

    Core Objects

    The core objects are the structures that are a part of the core entity. Each of the core modules as explained in section "Control and Data Flow"are relying on one or more of the core objects. This section describes the relationship between the core objects

    Anchor Objects

    All anchor management is handled by the HTAnchor module. You should normally not have to look directly into the HTAnchor structure, but use the methods provided by the anchor manager.

    Request Objects

    The HTRequest object contains all information neccessary in order to handle a request.

    Stream Objects

    Almost each stream module has its specific implementation of the stream structure, but the generic one is defined in the HTStream Module. The structured stream definition is placed in the HTStruct module. None of these modules have any code directly associated with - this is left to the specific stream modules, for example the HTFWrite stream.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Central.html,v 1.14 2025/12/09 03:21:26 jigsaw Exp $
    libwww/Library/User/Guide/Core.html0100644000076400001440000000771406252702671016726 0ustar danielusers Internals - Core Modules W3C libwww Internals

    Core Modules

    The "core modules" are the fundamental part of the Library. The core entity contains hooks for the dynamic modules and provides the major access points for applications issuing requests, for example to access a data object.
    WWWLib Include
    This is not really a core module, but an important part as this is the only include file you need to use the Library.
    Access Manager
    The access manager is the main entry point for requesting a data object pointed to by a URI. It has a set of methods that allows the application to request different services, for example to get a URI, post a URI, or to search a URI.
    Protocol Manager
    The protocol manager is invoked by the access manager in order to access a document not found in memory or in file cache. The manager consists of a set of protocol modules handling the access schemes HTTP, FTP, NNTP, Gopher, WAIS, Telnet, and access to the local file system. The protocol modules are registered dynamically (using static linking) and the User's Guide describes how modules can be registered. Each protocol module is responsible for establishing the connection to the remote server (or the local file-system) and extract information using a specific access method. When data arrives from the network, it is passed on to the format manager.
    Format Manager
    The stream format manager takes care of data format conversion requested based on a set of registered format converters and a simple algorithm for selecting the best conversion.
    Cache Manager
    The cache manager is used to save data objects once they have been down loaded from the network. The cache uses the hierarchy indicated in the URLs as a way to identify items in the cache but is still under construction and requires a lot of work to be a highly efficient cache manager!
    Error Manager
    This module manages an information stack which contains information of all errors occurred during the communication with a remote server or simply information about the current state. Using a stack for this kind of information provides the possibility of nested error messages where each message can be classified and filtered according to its impact on the current request, for example "Fatal", "Non-Fatal", "Warning" etc. The filtering can be used to decide which level of messages will be passed back to the user.
    Event Manager
    The event manager is a "session layer" handling which thread should be the active thread. A thread can either be an internal libwww thread or an external thread, for example a Posix thread, and the event manager can itself be either the internal Library manager or an external event manager. Currently the internal event manager uses a select function call to decide which thread should be made the active one, however an external event manager can use another decision model. The event manager is described together with the internal thread model in the section "Libwww Threads", and more modules are described in the section Libwww thread Modules


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Core.html,v 1.14 2025/12/09 03:21:29 jigsaw Exp $
    libwww/Library/User/Guide/Interfaces.gif0100644000076400001440000000655705761725715017736 0ustar danielusersGIF89a¯?ñÿÿÿÿÿÿ!ù,¯?þ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹Çä²ùŒN«e€ªí6¶5óE½¾Î3ñ>Çâ7ø˜p‡¨Ç(·è`Høø6ùPX)‰ ÙØÙÙˆi)jjh I êéZçxëF g@š»Ù{Èû»+<'+Ì©ÈúËìÌ<|ÛÜúZ}ê }é¬+Ý l\Ë->hK N>Ž}MíœÛnk}_q®þÍÏ? pß3{ÚÒ 4TkŸ=ƒ Žõ‹ço™@|U¹{Pá"þ„" 7jⳋ ^4è§#¯~WU¤hrd9z?S†KZ»ƒ5=N”…N¤F”5¹•tùò^Ì‚#bœ5¦ Vò]ʨì"º£–ôÕÒŒMOÊ̈³Ï#¦,¯zÍ곬ʂ)u…½ëÔd·<ûF È–e`·-É ýë÷êV°x;íÚífÏÈÐØË ï@ª”›Î\‹¹0:}4ã6Æûøç¿¼ -µ©é\l®‚›m“ü­Ýâ–¦Oûþ}ƒ1ðáÄA/Ž<ù!¤Ê›;WËü¹ôéÔ«[¿Ž=»öíÜ»{ÿ>¼øñäË›?>½úõìÛ»?¾üùôëÛ¿?¿þýüþûûÿ`€H`ˆ`‚ .È`ƒ>a„NHa…^ˆa†nÈa‡‘Sˆ"ŽHb‰&Úö!uÑí°bŠ¿µ˜Œ.6&cp3ZW£ 9ÞøÒŽ4øÈ#>@²ätCÆpd‘®$ù“J6âd Q>™Ç”+XIeX¦°e–føxY2"té%;~d—c–‰Ü™Ý +ÑÁfq`n”¦œ³ÄIgà YHžpÊ™'dæ7Àø$êA’{ú(gùtÀ¨€•Zsénò‰ ¤…jJ©¢–ŠŠ)© ö™f§‘ò™™þ÷ª+±ÊÁe z\"¡8k'½ZÐ%–®š +±²Kþk)' Ë+²¾: ¬²Ëî:ê¢ÐNj‰š°Pௌxû‡ZV!É-€àæqn&â~¨>¹Í9($åkm£}ª'¾\=šï@œºÄlµ÷¤KȽªêªoC /ŒTÀÝ^«Á÷fÛ/Tw°Ì­7©ËÄôy|È ¬²gÉœžl—Æ Ü1Äø‰\ÌÚÊ+(Ã(WÌ/¿o ó{=‹ñó&3lÌ•y³«;k4{Mñ4¾MÖ:¯Qwõ¡BzÃæº¼FÖMæŠ0Ï`Ûw5b+á5½Ÿ=4m[ 7k'1wioq·ÜUë]wȼDÞüí­Eß þ}øà1;>³ß-7þ[oZ“`ø~ˆg¡¸ŒkùYŸHz馸¹~›c±ºѺx±W1»ÜDíßé.ïÜþú¾s7üÅ_<î>ŸóL8?AòÊ÷½uÕ'q=ÒO¿CöÓyoø l<õ¡»'>é+@>÷9¬¯ü°ŸBûåwO¿ÓùC½? îó ?äPxý«_ðH¹·áøK`©xÀå=” ççÀjTð ÔÁóÁ¡ƒï›àyBèA’€„8@ái\ØBŽ€…7€!^lhƒÒ0‡2$k Ãš/ƒ¯"öÀ €=Ïi`ÄÜ5QvS¤]þm·D>¬r?Ø!¯¸;0öNŒ¿Ëb ‰x¬ Jžˆ"‘¨A2jÀ‹P”ãvž87ZŽE´#è˜G?6OÏ#d)ìq3ÖEÿÕµ=÷‘ÿ˜ìä{Û›þö°£½î>Xù Zž÷—÷Úë€O»Ý¡Îv¸ý矼Ö¿l(¯xó&Š{ž9ú[^À¡/ý3oÊ“:Å”éê¡ÐúZÂò.±ï£.“RûHÎ>,¹ßäí_ÒûUî÷¯—NðY^|'ÿ[ÉW_ó ©Ìˆ= Ë—þï9ýäT¿Ûçiöø}\ò>üÄéþÌ¿ôÛü¤¤=ûAø~-þº?úèŠÿÔ/¸ëSÿfà¿üo(:öWB/D€’t€É„€ô6 (~t£ˆ(øEÈ€j €$a°'/CudªôK!˜J´d{ H‚Ì7‚(¨{ó·‚Ö§‚.è{3˜K©ƒ4(|9xƒÃ|&ˆ}({=8„ãwiÐ!„^°„ЧzG¸~-H„)ø„1XRè6>„VØ€X8h„\ˆ@˜I:X‚^8BH…Sø‚ah†,hƒYX„Ä…ù‡_¨…ûG†jˆ„{ØKb؇hØ8|Xƒo(ƒUhˆWx‡i†tˆQ¸ˆƒØˆ?X‡ýç‡ è'™¨‰›Èþ‰è‰ŸŠ¡(Š£HŠ¥hЧˆŠ©¨Š«ÈŠ­èŠ¯‹á‘TQ0‹„‡wÙàhN n:szuvffxCm‘\ÀhfVo ÆÁ( áj”V‰†ÎxZÕg*Óg('j|ý5Œ30Q†Œúâ.ß(ukàvj1B[¥ÖZÉæŽá&WûrpòP]àXrm&5ðX^ÌØŒÿöZÇŒâhYzçfÉönË¥$£’Ò]dÓ&·ölù Yeüñ˜]Ö& #ƒrfŸ"‘¾aŒ»…lúø#¤F_ùŽYZ) l Œ•ðj㨑å¥4Y Internals - Library Interfaces

    W3C libwww LibGuide

    Library Interfaces

    This is the overall set of interfaces in the W3C Sample Code Library. An interface can cover multiple related C modules and it is defined by a WWW*.h include file, for example WWWCore.h. On Windows platforms, each interface corresponds to a DLL with a DLL definition file defining all exported methods and data objects.

    Core Interfaces

    The core interfaces must be included in all applications.

    wwwdll.dll

    The wwwdll library is a tiny library that contains a few global variables like the global WWW_TraceFlag. When Windows loads a DLL, the exported function and data pointers get "fixed up" in the other modules. Consequently, what may be a directly addressable piece of data in it's home library will be a pointer in the other libraries and executables that dynamically link to it.

    wwwutils.dll

    The Utility modules are mostly container modules, dynamic strings and other stuff that you can't live without when building applications. The modules are used by the core part of the W3C Sample Code Library but can also be used by the application. See also the main Library include file called WWWLib.h which contains all converters and protocol modules known to the Library. You can include this one if the application is to use all the functionality of the Library.

    wwwcore.dll

    This is the basic include file for the core of the W3C Sample Code Library. Together with the WWWUtil module it contains all core specific modules which are required to compile and build the Library. The core part of the Library is designed as a set of registration modules with no real functionality in itself. Instead all the functionality comes when the application registers the modules that provides a desired functionality, for example accessing HTTP servers or the local file system. The Library has a special include file called WWWApp.h which a lot of application helper modules that makes it easier to use the core.

    Stream Interfaces

    wwwstream.dll

    wwwcache.dll

    The cache contains details of temporary disk files which contain the contents of remote documents.

    wwwhtml.dll

    This is the include file for the basic HTML module that can be used together with the core of the W3C Sample Code Library. It contains all HTML specific modules which are required to compile and build the HTML DLL. Please note that as the HText is not included in this interface. The reason is that the HText interface only is declared by the Library but must be defined by the application. Therefore it can not be part of a DLL but must be included directly in the application.

    wwwdir.dll

    This is the include file for the directory handling modules that can be used together with the core of the W3C Sample Code Library. It contains all Directory specific modules which are required to compile and build the DIRECTORY DLL.

    wwwmime.dll

    This is the module for basic RFC822/MIME parsing that can be used together with the core of the W3C Sample Code Library. It contains all MIME specific modules which are required to compile and build the MIME DLL.

    Application Interfaces

    wwwapp.dll

    A way to initialize applications is to use a rule file, also known as a configuration file. This is for example the case with the W3C httpd and the W3C Line Mode Browser. This module provides basic support for configuration file management and the application can use this is desired. The module is not referred to by the Library. Reading a rule file is implemented as a stream converter so that a rule file can come from anywhere, even across the network!

    Applications do not have to provide native support for all protocols, they can in many situations rely on the support of proxies and gateways to help doing the job. Proxy servers are often used to carry client requests through a firewall where they can provide services like corporate caching and other network optimizations. Both Proxy servers and gateways can serve as "protocol translators" which can convert a request in the main Web protocol, HTTP, to an equivalent request in another protocol, for example NNTP, FTP, or Gopher. In case a proxy server or a gateway is available to the application, it can therefore by use of HTTP forward all requests to for example a proxy server which then handle the communications with the remote server, for example using FTP about the document and return it to the application (proxy client) using HTTP.

    This module provides some "make life easier" functions in order to get the application going. They help you generate the first anchor, also called the home anchor. It also contains a nice set of default WWW addresses.

    Initialization Modules

    The core parts of the Library is a framework for adding functionality. It has hooks for adding protocol modules, like for example HTTP, FTP, and also for adding streams that can convert from one media type to some other type, or presenting the result to the user. In the distribution file of the Library you will find a large set of protocol modules and streams already implemented. However, in order to use these you need to initialize them. This can be done by using the methods in the WWWInit module. You can modify these modules as you like to fit your particular needs. The modules in this interface are not part of any DLL and so must be included directly if desired.

    Protocol Interfaces

    wwwfile.dll

    This is the include file for local file handling modules that can be used together with the core of the W3C Sample Code Library. It contains modules which are required to compile and build the FILE DLL.

    wwwftp.dll

    This is the include file for the basic FTP module that can be used together with the core of the W3C Sample Code Library. It contains all FTP specific modules which are required to compile and build the FTP DLL.

    wwwgophe.dll

    This is the include file for the basic GOPHER module that can be used together with the core of the W3C Sample Code Library. It contains all GOPHER specific modules which are required to compile and build the GOPHER DLL.

    wwwhttp.dll

    This is the include file for all HTTP access including the server side and the client side. It can be used together with the core of the W3C Sample Code Library. It contains all HTTP specific modules which are required to compile and build the HTTP DLL.

    wwwnews.dll

    This is the include file for the basic NNTP module that can be used together with the core of the W3C Sample Code Library. It contains all News specific modules which are required to compile and build the News DLL.

    wwwtelnt.dll

    This is the include file for the basic Telnet, rlogin, and TN3270 module that can be used together with the core of the W3C Sample Code Library. It contains all Telnet, rlogin, and TN3270 specific modules which are required to compile and build the Telnet, rlogin, and TN3270 DLL.

    wwwwais.dll

    This is the include file for the basic WAIS module that can be used together with the core of the W3C Sample Code Library. It contains all WAIS specific modules which are required to compile and build the WAIS DLL.

    wwwtrans.dll

    Description here.

    wwwzip.dll

    The stream part of the Library is a set of streams that can be used to encode/decode, or compress/decompress content. Many of the streams are based on zlib which is a freely available compression library.


    Henrik Frystyk Nielsen,
    @(#) $Id: Interfaces.html,v 1.11 2025/05/03 20:05:40 frystyk Exp $
    libwww/Library/User/Guide/Makefile.am0100644000076400001440000000022106133513254017161 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) libwww/Library/User/Guide/Network.html0100644000076400001440000000361406252702676017467 0ustar danielusers Internals - Network Modules W3C libwww LibGuide

    Network Modules

    Network modules handles all the network access including DNS access, reading and writing to the and from the network etc. Most of these modules are internal to the Library, however some applications might use some of them directly.

    TCP Communication

    The functionality of the HTTCP Module covers several topics but they are all related to TCP/IP communication. All active and passive connection establishment from the Protocol Modules goes through this module. Furthermore, the module manages a local host cache of visited hosts so that the Domain Name Server is only consulted when necessary.

    Other topics includes:

    • I/O status indication (errno etc.)
    • Information on remote hosts
    • Information on local host (domain name etc.)
    • Information on current user (mail address)

    Reading Data from a Socket

    The HTSocket Module controls all the functionality for reading information from a socket and from the local file system using either a socket or a ANSI C file descriptor.

    The module is currently being transformed into a completely reentrant version, but the old non-reentrant interface is still needed for some functions. However, it will be taken out as soon as possible.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Network.html,v 1.11 2025/12/09 03:21:34 jigsaw Exp $
    libwww/Library/User/Guide/Overview.html0100644000076400001440000003767207133044711017643 0ustar danielusers W3C Library Packages and Interfaces

    W3C libwww LibGuide

    W3C Library Packages and Interfaces

    Libwww consists of a set of APIs called packages which covers multiple related source modules; on Wintel packages are organized into DLLs and on Unix we organize them into separate libraries. A package interface is exported via a single include file of the type WWW*.h, for example WWWCore.h.

    You can also have a look at the complete list of all public functions.

    Basic Utility Packages

    The core interfaces must be included in all applications.

    Windows Specific Package

    This is a small interface that handles trace messages on Windows

    Basic Utility Package

    The basic utility package contains mostly container modules, dynamic strings and other stuff that you can't live without when building applications. The modules are used by all other libwww packages but can also be used by the application.

    Libwww Core Package

    The libwww core package is designed as a set of registration modules where features can be registered dynamically by the application. Examples of features that the application may want to register is HTTP access, local file access, HTML parser, etc. In the application package, you can find a set of default profiles helping you registering the most commonly used features.

    Libwww Initialization Packages

    These packages help the application set up functionality.

    Profile Initialization Package

    Libwww is a framework for adding functionality. It has hooks for adding protocol modules, like for example HTTP, FTP, and also for adding streams that can convert from one media type to some other type, or presenting the result to the user. In the distribution file of the Library you will find a large set of protocol modules and streams already implemented. However, in order to use these you need to initialize them. This can be done by using the services provided by the WWWInit module.

    High Level Application Packages

    These packages provides services including handling proxies, gateways, configuration files, support for PUT, POST, OPTIONS, HEAD, etc. requests.

    Application Utilities

    This application package handles a lot of features that many applications need: dialogs and progress notifications, high level URI resolving, rule files etc.

    Transport Packages

    Transports are registered dynamically in libwww. This means that libwww is independent of the transport being used (for example TCP) and you can therefore use libwww in any context you like. Each transport is registered with a set of parameters describing how the transport behaves, for example whether it supports preemptive access etc.

    TCP and Local File Transport Package

    This is the package that provides the TCP and Local file transports used by the protocol packages.

    WebMUX Transport Package - Experimental!!!

    This is a very experimental package that provides pieces of the WebMUX specification

    SSL Transport Package

    This is the package that provides SSL transport access used by the https URI scheme, for example

    MIME Packages

    These packages handle MIME and the like.

    MIME Parser and Generator

    The MIME parser package contains all the libwww functionality for handling RFC822/MIME parsing and generation including multipart MIME etc.

    Protocol Packages

    Protocols are also registered dynamically in libwww. They are registered to use a specific transport and whether they support preemptive access etc. See the application level packages for how to resolve URIs using libwww

    Local File Access

    This is the include file for resolving file: addresses or equivalent

    FTP Access

    This is the include file for resolving ftp: addresses or equivalent

    Gopher Access

    This is the include file for resolving gopher: addresses or equivalent

    HTTP Access

    This is the include file for resolving http: addresses or equivalent

    News Access

    This is the include file for resolving news: and nntp: addresses or equivalent.

    Telnet Access

    This is the include file for resolving telnet:, rlogin:, tn3270: addresses or equivalent.

    WAIS Access

    This is the include file for resolving wais: addresses or equivalent

    Persistent Caching Packages

    These packages handle persistent management of information

    HTTP/1.1 Persistent Cache Package

    This module implements a HTTP/1.1 persistent cache manager.

    Stream Packages

    Streams and converters are an essential part of libwww - all dataflow happens using streams.

    Special Streams Package

    This interface provides a set of specialized stream. For example a stream for guessing unknown media types from magic words. It also contains streams for downloading a document into a memory buffer, counting content length and much more.

    Directory Browsing Package

    The directory browsing pacakge contains code for handling browsing folders in both local files including handling icons and the like.

    ZLib Compression and Decompression Streams Package

    Libwww can use zlib to compress/decompress content on the fly. This requires that zlib is available to link against, see the instructions on how to interact with external packages for detail.

    HTML and XML Parser Packages

    HTML Parser and Generator

    This is the default libwww HTML parser based on a simple callback scheme into the application. It also contains code for generating HTML.

    Expat XML Wrapper Package

    Libwww can use the Expat XML parser to handle XML. This requires that the expat parser is available, see the instructions on how to interact with external packages for detail

    Database Access Packages

    Database access can for example be used to handle logging etc.

    MySQL Access Package

    Libwww can use MySQL for various types of logging etc. This requires that the mysql client library is available, see the instructions on how to interact with external packages for detail


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.34 2025/07/12 10:34:49 kahan Exp $
    libwww/Library/User/Guide/Prefs.html0100644000076400001440000000501006252702702017073 0ustar danielusers Internals - Application Preferences W3C libwww LibGuide

    Application Preferences

    These modules handles all the modules that can be registered either dynamically (using static binding) or statically by the application.

    Default Initializations

    The HTInit module defines a standard set of initializations where all protocol modules and converters are setup at startup time of the application in the HTLibInit(). Often you can take this module and just override it with your own preferences.

    Handling a Configuration File

    Bindings can also be set up by a rule file that is handled by the Configuration File Manager. The format of the rule file is yet to be specified and it does still need some work.

    Bindings to the local file system

    The Bind Module makes bindings between file suffixes and content-type, content-language, charset etc. As an application this is used when talking to, for example FTP servers that do not support media types, and servers use it when performing format negotiation between multiple representations of a document.

    Registering of Methods

    The idea behind this module is to allow dynamic registration of HTTP methods, for example PUT, POST, GET etc. and then also allow new methods to be registered. This has not yet been implemented but the structure is there :-)

    Registration of Access Schemes

    Access schemes like HTTP, FTP etc. can be registered dynamically (using static binding) and the HTProt module provides the support for this.

    Registration of Proxies and Gateways

    The HTProxy Module provides functionality for registering proxies and gateways dynamically. This has traditionally been handled by environment variables, but is now a registration module just like the registration of access schemes.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Prefs.html,v 1.13 2025/12/09 03:21:38 jigsaw Exp $
    libwww/Library/User/Guide/Presentation.html0100644000076400001440000000574106252702705020505 0ustar danielusers Internals - Presentation Modules W3C libwww LibGuide

    Presentation Modules

    Generating a Graphic Object

    This document describes the methods provided for presentation a graphic object to the user. The implementation in the Library is made for a text oriented browser, so more advanced GUI clients must overwrite some of these modules. See more information on which modules to overwrite. As mentioned in the how to get started guide, the definition of a graphic object is free for the application. Some graphic objects work by storing the whole document. Others work by converting the nested structure into a linear sequence of styled text for display.

    Generally, a new platform has a new implementation of the hypertext object. A GUI client must overwrite the graphic object modules in the Library in order to take advantage of a more advanced user-interface. The graphic object as defined in the Library has two interfaces, depending on how much of the Library code the client wants to handle on its own:

    SGML Level
    If the client has its own HTML parser then the interface is between the client HTML parser and the Library SGML parser. The SGML parser is a general SGML parser which can be setup with a specific DTD and it feeds the HTML parser with structured data. In this case, you will be emulating the HTML module, and generating a hypertext object from the structured stream. The actual structured stream definition is in the SGML module.
    HTML Level
    If the client wants to use the HTML parser in the Library then this is the second interface to the Library. The hypertext object is parsed and the communication with the client is based on a set of call-back functions in the HTML parser. The call-back functions are all defined as prototypes in the HText module but the client must provide the actual code that defines the presentation method used for a specific HTML tag. If you wish to maintain the structure of the SGML file within your object, then the SGML interface will be a better place to connect your code.
    You are free to define the structure of the hypertext object declared in the HText module. You may want to define your own styles and font definitions.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Presentation.html,v 1.14 2025/12/09 03:21:41 jigsaw Exp $
    libwww/Library/User/Guide/Protocol.html0100644000076400001440000001047406252702707017634 0ustar danielusers Internals - Protocol Modules W3C libwww LibGuide

    Protocol Modules

    A protocol module is invoked by the HTAccess module in order to access a document. Each protocol module is responsible for handling the transmission of a data object either from the application to a remote server, or vice verse.

    The protocol modules are registered dynamically (using static linking) and the User's Guide describes how modules can be registered. Each protocol module is responsible for establishing the connection to the remote server (or the local file-system) and extract information using a specific access method. When data arrives from the network, it is passed on to the format manager.

    Most of the protocol modules are now implemented as state machines in order to support libwww Threads. When the client parses a request to the library a HTRequest Structure is filled out and parsed to a load function in the access manager, for example HTLoadAnchor. HTRequest contains all information needed by the Library in order to fulfill a request.

    File access
    This module provides access to files on a local file system. Due to general confusion of the "file://" access scheme in the URL Specifications tries FTP access on failure.
    FTP access
    This is a complete state based FTP client which is capable of communicating with a lot of weird FTP servers. It uses PASV as the default method for establishing the data connection as PORT does not work if the application is run from a firewall machine, as is often the case with proxy server.
    HTTP access
    The HTTP module handles document search and retrieve using the HTTP protocol. See also information on the current implementation of the HTTP client. The module is now a complete state machine which is a required functionality in the libwww thread model. It uses streams for both outgoing and incoming data, the outgoing stream is implemented in HTTPReq.c and the incoming stream in HTTP.c
    News access
    The NNTP internet news protocol is handled by HTNews which builds a hypertext object.

    This module is under reconstruction!

    Gopher access
    The internet gopher access to menus and flat files (and links to telnet nodes, WhoIs servers, CSO Name Server etc.) is handled by HTGopher Module.
    Telnet access
    This module provides the possibility of running telnet sessions in a subshell. It also provides functionality for rlogin and tn3270.
    WAIS access
    WAIS access is not compiled into the Library by default as it requires the freeWAIS library. This is easily changed in the platform dependent Makefile.include in the
    	WWW/All/<platform⁢
    
    directory. However, if this library is present then the application can communicate directly with a WAIS server. Otherwise it must go through a gateway program.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Protocol.html,v 1.17 2025/12/09 03:21:43 jigsaw Exp $
    libwww/Library/User/Guide/ProtocolUtils.html0100644000076400001440000000532606252702712020651 0ustar danielusers Internals - Protocol Utility Modules W3C libwww LibGuide

    Protocol Utility Modules

    The protocol modules themselves can be registered dynamically (using static binding) but some of the functionality used by the modules are kept in a set of protocol utility modules that are described in this section.

    Access Authorization

    In order to prevent unauthorized access on a Web server, a basic authorization scheme has been developed, see Access Authorization for more details on the scheme. The access authorization is implemented in the following modules:
    HTAABrow
    This module contains WWW Browser specific code, that is composing the HTTP Authorization Header, recording users information etc.
    HTAAUtil
    This module contains the authorization code that is common to both the servers and clients, e.g., handling information on different authentication etc.
    UU Encoding and Decoding
    Provides functions to encode and decode a data buffer according to the RFC 1421 "Privacy Enhancement for Internet Electronic Mail".

    Presenting Directory Listings and other Listings

    When listings return from the protocol modules they are converted into HTML and parsed to the client. Listings might be HTTP directory listings, Gopher menus, FTP directory listings, CSO Name server etc. The modules providing this functionality are:
    HTDir
    This is a very configurable module to actually present the listings
    HTDescript
    This module handles the description field in a HTTP directory listing. For a HTML file, the default action is to peek the title of the document.
    HTIcons
    This module handles the set of icons used in the listings (HTTP, Gopher, FTP etc.).

    Logging Requests

    The HTLog Module is a simple log manager that can log the result of a request to the access manager.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: ProtocolUtils.html,v 1.14 2025/12/09 03:21:46 jigsaw Exp $
    libwww/Library/User/Guide/Streams.html0100644000076400001440000001226006252702715017443 0ustar danielusers Internals - Stream Modules W3C libwww Internals

    Stream Modules

    A stream is an object which accepts sequences of characters. It is a destination of data which can be thought of much like an output stream in C++ or an ANSI C-file stream for writing data to a disk or another peripheral device. The Library defines a generic stream class in the HTStream module, but almost all stream modules define their own sub class definition of the stream object.

    Protocol Streams

    These are normally internal streams that parses or generates protocol specific information to communicate with remote servers.
    HTTP Request Stream
    This stream is one of the first real protocol streams - more are to come!

    Converters and Presenters

    Streams that can be used to convert data from one media type to another or create a graphic object and present it to the user. These are streams that save the data to a local file and then calls an external program, for example a postscript viewer. These are normally initialized as a application preference.
    SGML Tokenizer
    Parses the data and generates a structured stream. Each parser instance is created with reference to a particular DTD structure.
    Plain to HTML Converter
    This stream takes a plain file and converts it into HTML. Like the SGML tokenizer, it also converts a generic stream into a structured stream.
    Plain Text Presentation
    Takes plain ASCII text and presents it to the user as preformatted text.
    HTTP/MIME header parser
    Parse a MIME format message and puts all the information in an Anchor object
    WAIS source file Stream
    Parses a WAIS source description file. By default, this is enabled even if direct WAIS access is not present (no linking with the freeWAIS library).
    Guessing Stream
    If the input format is unknown at the time when putting up a stream stack, then this module scans a part of the stream and on a statistical basis determines the type of stream needed from the content-type.
    External Parser with Call back
    This is a call back stream module where the implementation is defined in the application and not in the Library.
    Save Locally
    The HTSaveLocally stream saves the data object to a local file.
    Save Locally and Execute Application
    The HTSaveAndExecute stream saves the data object to a local file and calls an external application, for example a post script viewer.
    Save Locally and Execute Application
    The HTSaveAndCallBack stream saves the data object to a local file, calls an external application and when the stream is freed, the libwww application gets called with a specified call back function.

    I/O Streams

    Streams that can write data to a socket or an ANSI C FILE object. This can be used when redirecting a request to a local file of when saving a document in the cache.
    ANSI C File Writer stream
    Writes to an ANSI C FILE * object, as opened by fopen, etc.
    Cache Writer Stream
    This is the stream that's used by the cache manager
    Socket Writer Stream
    Writes to a socket or something opened with the UNIX file I/O open function.
    Net to Text Converter
    Converts "Net ASCII" line terminators <CRLF> into the equivalent C representation which is a '\n'.

    Basic Streams

    A set of basic utility streams with no or little internal contents but required in order to cascade streams.
    Tee Stream
    Just writes into two streams at once. Useful for taking a copy for a cache.
    Black Hole
    A quite expensive way of piping data into a hole for then to be forgotten forever.
    Through Line
    A short circuited stream that returns the same output sink as it is called with.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Streams.html,v 1.12 2025/12/09 03:21:49 jigsaw Exp $
    libwww/Library/User/Guide/StrucStreams.html0100644000076400001440000000444106252702720020462 0ustar danielusers Internals - Structured Stream Modules W3C libwww Internals

    Structured Stream Modules

    The SGML stream generates a structured stream that is sub class of a generic stream. The Library defines a structured stream class in the HTStruct module, but almost all stream modules define their own sub class definition of the stream object.

    A structured stream uses a DTD definition expressed in a C data structure - no, it doesn't not understand a real DTD (yet). The definition of the HTML DTD is placed in the HTMLPDTD module.

    HTML Presentation
    The HTMLPresent stream presents a HTML object to the user using the "HText API" as explained in the section on HTML Presentation.
    HTML Generation
    The HTMLGenerator stream generates a HTML object which for example can be written to a file.
    HTML to C conversion
    The HTMLToC stream converts an HTML object into a C compliant text object. This is for example used by the Line Mode Browser in order to generate C like include files from the HTML files that you have been reading throughout this document.
    HTML to LaTeX Conversion
    The HTMLToTeX stream is a very simple HTML to LaTeX converter. It is not error free but a start.
    HTML to Plain Text Converter
    The HTMLToPlain stream takes a HTML object and converts it into plain text using the styles in the "HText API"


    Henrik Frystyk, libwww@w3.org, @(#) $Id: StrucStreams.html,v 1.12 2025/12/09 03:21:52 jigsaw Exp $
    libwww/Library/User/Guide/Styles.html0100644000076400001440000000223006252702723017303 0ustar danielusers Internals - Style Sheets W3C libwww LibGuide

    Style Sheets

    We are currently working on implementing a HTML level 3 parser in the Library, so the following description will soon be out of date.

    The Style module in the Library currently only handles a flat style structure with no functionality for nested styles. You don't have to use this module, as you can replace the entry points in the HTML module with your own, to prevent the library version from being loaded.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Styles.html,v 1.11 2025/12/09 03:21:55 jigsaw Exp $
    libwww/Library/User/Guide/Threads.html0100644000076400001440000000332706301652337017422 0ustar danielusers Internals - Thread Modules W3C libwww LibGuide

    Thread Modules

    From version 3.0 (unreleased) of the W3C Sample Code Library, support for libwww threads and other thread models has been implemented multi threaded functionality has been added as an extra set of modules. For the moment, only the HTTP module can take full advantage of libwww threads but both FTP and Gopher are foreseen for the same functionality. The modules included are:

    Net Manager

    The HTNet module registers sockets as ready for read or write (this includes the connect statement that is basically a write request). It is an internal module to the Library.

    Internal Event Loop

    The HTEvent module is the Library's own version of the event-loop serving the HTTP client, and it is the application interface to the multi threaded Library. Clients can either use this module as is or they can overwrite it with their own even-loop. Note, that GUI-clients can use the current implementation!

    The module is now ported to Windows NT thanks to Charlie Brooks


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Threads.html,v 1.14 2025/02/16 18:41:35 frystyk Exp $
    libwww/Library/User/Guide/URI.html0100644000076400001440000000234606252702730016465 0ustar danielusers Internals - URI Management W3C libwww LibGuide

    URI Management

    The functionality for handling URIs is placed in the following modules:

    Parsing URIs

    The HTParse module provides functions for parsing URIs, simplify them by removing redundant information. This is automatically called by the Anchor manager every time an anchor is created in order to minimize the number of redundant anchors.

    URI Encoding and Decoding

    The HTEscape module can search a URI for unsafe characteres and escape and unescape them according to the URI Specifications.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: URI.html,v 1.11 2025/12/09 03:22:00 jigsaw Exp $
    libwww/Library/User/Guide/Utils.html0100644000076400001440000000670506523144460017132 0ustar danielusers Internals - Utilities

    W3C libwww LibGuide

    Utilities

    This document covers the basic programming utilities that can be used in the client or server to make life easier.

    Container Modules

    These modules are generic data object storage modules that might be used wherever convenient. The general rule for freeing memory from these modules is that free methods handles data object generated within the modules whereas user data is for the caller to free. The modules consist of:

    Binary Trees
    This is a complete balanced binary tree that might be used for storage and sort of a large number of data objects, e.g. filenames in directory listings etc.
    Dynamic Strings
    A Chunk is a block wise expandable array of type (char *) and is a sort of apology for real strings in C. Chunks make it easier to handle dynamic strings of unknown size. It is often faster than using the String Copy Routines.
    Linked Lists
    This module provides the functionality for managing a generic list of data objects. The module is implemented as a single linked list using the scheme first in - last out (FILO).
    Association Lists
    This is a small module build on top of HTList that provides a way to store Name-Value pairs in an easy way.
    Strings
    Routines for dynamic arrays of characters include string copy, case insensitive comparison etc. It also contains functions for generating date and time stamps, MessageID etc.
    Atoms
    Atoms are strings which are given representative pointer values so that they can be stored more efficiently, and comparisons for equality done more efficiently. The pointer values are in fact entries into a hash table.

    Basic Utilities

    Note: Look into these modules before you start defining system dependent stuff. Most things are already defined here! The list of basic utility modules are currently as follows

    System specifics
    The sysdep.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI.
    Platform Independent macros
    The HTUtil.h include file contains things we need everywhere, generally macros for declarations, booleans, etc.


    Henrik Frystyk Nielsen,
    @(#) $Id: Utils.html,v 1.16 2025/05/03 19:44:48 frystyk Exp $
    libwww/Library/User/Guide/choppy.html0100644000076400001440000003506406301652340017327 0ustar danielusers W3C Library Interfaces

    W3C libwww LibGuide

    W3C Library Interfaces

    THIS HAS NOT BEEN REGENERATED!!!

    This is the overall set of interfaces in the W3C Sample Code Library. An interface can cover multiple related C modules and it is defined by a WWW*.h include file, for example WWWCore.h. On Windows platforms, each interface corresponds to a DLL with a DLL definition file defining all exported methods and data objects. You can also have a look at the complete list of all public functions.

    Every module in the Library has a HTML document associated with it containing a detailed description of the functionality and interface to other modules. This page is the top node for the implementation specific documentation and contains links to all the modules in the Library. The documentation is dynamically kept up to date as the actual include files (.h) are generated from the HTML documents using the Line Mode Browser.

    When compiling the Library please make sure that you have a relatively new version of the Line Mode Browser that parses the HTML documents correctly (2.13 and newer versions). Find out what version of the Line Mode Browser you are using by typing

    	./www -version
    

    Also remember that when editing the module interfaces or adding functionality then always use the HTML files and not the .h files!

    NOTE This document is also available as one big HTML file intended for printout. Please note that not all links in this version work!

    Core Interfaces

    The core interfaces must be included in all applications.

    Windows Specifics

    The wwwdll library is a tiny library that contains a pointer to the TTYPrint function. When Windows loads a DLL, the exported function and data pointers get "fixed up" in the other modules. Consequently, what may be a directly addressable piece of data in it's home library will be a pointer in the other libraries and executables that dynamically link to it. The TTYPrint pointer is exported to the other modules and referenced via the TTYPrint macro in HTUtils.h. wwwdll.dll also contains the WWW_TraceFlag to the same end of macroing the indirection.

    Basic Utilities

    The Utility modules are mostly container modules, dynamic strings and other stuff that you can't live without when building applications. The modules are used by the core part of the W3C Sample Code Library but can also be used by the application. See also the main Library include file called WWWLib.h which contains all converters and protocol modules known to the Library. You can include this one if the application is to use all the functionality of the Library.

    Core Interface

    This is the basic include file for the core of the W3C Sample Code Library. Together with the WWWUtil module it contains all core specific modules which are required to compile and build the Library. The core part of the Library is designed as a set of registration modules with no real functionality in itself. Instead all the functionality comes when the application registers the modules that provides a desired functionality, for example accessing HTTP servers or the local file system. The Library has a special include file called WWWApp.h which a lot of application helper modules that makes it easier to use the core.

    Stream Interfaces

    Persistent Cache

    The cache contains details of temporary disk files which contain the contents of remote documents.

    HTML Parser and Generator

    This is the include file for the basic HTML module that can be used together with the core of the W3C Sample Code Library. It contains all HTML specific modules which are required to compile and build the HTML DLL. Please note that as the HText is not included in this interface. The reason is that the HText interface only is declared by the Library but must be defined by the application. Therefore it can not be part of a DLL but must be included directly in the application.

    Directory Browsing

    This is the include file for the directory handling modules that can be used together with the core of the W3C Sample Code Library. It contains all Directory specific modules which are required to compile and build the DIRECTORY DLL.

    Content Type Guessing Stream

    This interface provides functionality for guessing unknown media types from magic words. The stream is a one that reads first a chunk of stuff, tries to figure out the format, and calls HTStreamStack(). This is a kind of lazy-evaluation of HTStreamStack(). This could be extended arbitrarily to recognize all the possible file formats in the world, if someone only had time to do it.

    MIME Parser and Generator

    This is the module for basic RFC822/MIME parsing that can be used together with the core of the W3C Sample Code Library. It contains all MIME specific modules which are required to compile and build the MIME DLL.

    Application Interfaces

    Rule File Management

    A way to initialize applications is to use a rule file, also known as a configuration file. This is for example the case with the W3C httpd and the W3C Line Mode Browser. This module provides basic support for configuration file management and the application can use this is desired. The module is not referred to by the Library. Reading a rule file is implemented as a stream converter so that a rule file can come from anywhere, even across the network!

    Applications do not have to provide native support for all protocols, they can in many situations rely on the support of proxies and gateways to help doing the job. Proxy servers are often used to carry client requests through a firewall where they can provide services like corporate caching and other network optimizations. Both Proxy servers and gateways can serve as "protocol translators" which can convert a request in the main Web protocol, HTTP, to an equivalent request in another protocol, for example NNTP, FTP, or Gopher. In case a proxy server or a gateway is available to the application, it can therefore by use of HTTP forward all requests to for example a proxy server which then handle the communications with the remote server, for example using FTP about the document and return it to the application (proxy client) using HTTP.

    Application Specific

    This module provides some "make life easier" functions in order to get the application going. They help you generate the first anchor, also called the home anchor. It also contains a nice set of default WWW addresses.

    Initialization Modules

    The core parts of the Library is a framework for adding functionality. It has hooks for adding protocol modules, like for example HTTP, FTP, and also for adding streams that can convert from one media type to some other type, or presenting the result to the user. In the distribution file of the Library you will find a large set of protocol modules and streams already implemented. However, in order to use these you need to initialize them. This can be done by using the methods in the WWWInit module. You can modify these modules as you like to fit your particular needs. The modules in this interface are not part of any DLL and so must be included directly if desired.

    Protocol Interfaces

    Local File Access

    This is the include file for local file handling modules that can be used together with the core of the W3C Sample Code Library. It contains modules which are required to compile and build the FILE DLL.

    FTP Access

    This is the include file for the basic FTP module that can be used together with the core of the W3C Sample Code Library. It contains all FTP specific modules which are required to compile and build the FTP DLL.

    Gopher Access

    This is the include file for the basic GOPHER module that can be used together with the core of the W3C Sample Code Library. It contains all GOPHER specific modules which are required to compile and build the GOPHER DLL.

    HTTP Access

    This is the include file for all HTTP access including the server side and the client side. It can be used together with the core of the W3C Sample Code Library. It contains all HTTP specific modules which are required to compile and build the HTTP DLL.

    News Access

    This is the include file for the basic NNTP module that can be used together with the core of the W3C Sample Code Library. It contains all News specific modules which are required to compile and build the News DLL.

    Telnet Access

    This is the include file for the basic Telnet, rlogin, and TN3270 module that can be used together with the core of the W3C Sample Code Library. It contains all Telnet, rlogin, and TN3270 specific modules which are required to compile and build the Telnet, rlogin, and TN3270 DLL.

    WAIS Access

    This is the include file for the basic WAIS module that can be used together with the core of the W3C Sample Code Library. It contains all WAIS specific modules which are required to compile and build the WAIS DLL.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: choppy.html,v 1.18 2025/05/21 01:24:05 frystyk Exp $
    libwww/Library/User/Guide/Makefile.in0100644000076400001440000001346607405520525017213 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Guide/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Guide distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Guide/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Paper/0040755000076400001440000000000007405517346015160 5ustar danieluserslibwww/Library/User/Paper/CVS/0040755000076400001440000000000007405517346015613 5ustar danieluserslibwww/Library/User/Paper/CVS/Root0100644000076400001440000000005607405517343016454 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/User/Paper/CVS/Repository0100644000076400001440000000003207405517343017702 0ustar danieluserslibwww/Library/User/Paper libwww/Library/User/Paper/CVS/Entries0100644000076400001440000000137507405517346017152 0ustar danielusers/Anchors.gif/1.1/Wed Feb 19 00:07:09 1997/-kb/ /Delta.gif/1.1/Wed Feb 19 00:07:09 1997/-kb/ /Equation.gif/1.1/Wed Feb 19 00:07:10 1997/-kb/ /EventLoop.gif/1.1/Wed Feb 19 00:07:10 1997/-kb/ /HTTP.gif/1.1/Wed Feb 19 00:07:12 1997/-kb/ /Internal.gif/1.1/Wed Feb 19 00:07:12 1997/-kb/ /Library.gif/1.1/Wed Feb 19 00:07:13 1997/-kb/ /LibraryPaper.html/1.2/Thu May 14 02:10:06 1998// /LibraryPaper8.5x11.ps/1.1/Wed Feb 19 00:07:14 1997// /LibraryPaperA4.ps/1.1/Wed Feb 19 00:07:16 1997// /Position.html/1.2/Thu May 14 02:10:08 1998// /Stream.gif/1.1/Wed Feb 19 00:07:18 1997/-kb/ /StrucStream.gif/1.1/Wed Feb 19 00:07:18 1997/-kb/ /Thread.gif/1.1/Wed Feb 19 00:07:19 1997/-kb/ /WWWlogo.gif/1.1/Wed Feb 19 00:07:19 1997/-kb/ /alpha.gif/1.1/Wed Feb 19 00:07:20 1997/-kb/ D libwww/Library/User/Paper/Anchors.gif0100644000076400001440000001661006302442055017232 0ustar danielusersGIF87a¬òÿÿÿÿÿÿÿÿÿÿ,¬þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ F£¤£¤¦"¨ª¬°² ª´·«®©»¡/®¹µ¼$½ ƳÃÈ­ÊÍ ÈÌ!үξ¿ÖÔ¸Ö³)Úßµ`ÜÓäáÑæºá×ÅÙêÐñòÞóíÛ_øèöÇæûˆqèî+%«”n[´“Í÷ÙPªÙî“×2æ²™ÅÇ>üáÏ߹䓹·"ÓÈS ¶àÛs~<–—uôí†ËûºÎk›9ìVw^½ð×oO9Í™ÊI{YZÍ.åëEýî'¾Ä}m"(Ö7¿ê0}íkŽêì¿áÉ/qt [@¥C…2¼ÚÞg·V©>Úó#²¼ëJÏã\Ÿ”¦AZˆp¼ˆ©È'šç~cs‚ÍJ@¢UJ„!œàg€ˆµj `F Dp`(¼Î$þ‰Kb1¢{¤¤‡òà7Š(±'bŒ‹~€ÎÈø3|tphœA½æ8Ç“McôÁ ½ ½±{$Øc“³:w’]x‚òô¸G>âîhŠS“QÐHGž/… +í72† Dà*¤(ÓÇD‚]*NtŒ*ÉÊVºò•ŽÌ\ û‚È&š€•ŸÄ$پ˙і€lšRIÌIG‘ŤW`ÉÌf6òbÍ—ÍìáÌj6RlÏA ÁT'!)xÅ‹dm¨ÈIðH¿Ì‚_–ÈSŠŒaܤ\YJL..0Ü‹€5÷8u·#åe7&= N|‘c[B¿ D-~-þDÜb¾èÏeZ’¸$ÌÕÖ)A_– •ÈÓ żMš´uëKX ð©oƒcX' €vŸ/f’mÝSÔâyÑ T’Š^ÃK¢r:‚Ÿ.Ð!,'·•µ J/|¤\TY*Uüéc—PlgëÙ»­Þ4m<ý€<ëÄÎŒ®ëßëÊÔïµP. „`UéçR‘îf²ü™D·ŠR÷Ù‡¨å°èÉØˆÓ¤íoq­›ö¡ú ð,¼žQBYP%q «gÔ*Ý„Ð*za½Y×¶6Hl@t¯¦f ñ”R`¾C°7;-jK«WÙ¦ö¶„téìš ØÀ®²§ºJk±ÈIÚ®@¦ûþЍj”AÌ:·¢¿lo?ûUãÆÖ¶w¼n2ÌéW…ó4¡%âÿtPÅ׺àÅî1íxIO,¼[üãf’ø@]¢¬sèw «\8®·°¯|¥©¹ýw/oê“ðn¸Ó½rÃ8×Î6¹ï p|s»D¸ºHp‚Û{ÞâÂf¿Ü"ìXWÂ6ÁÃ*zË,†y‘Ì ÷&>¤¯gíëûøÇ@òˆ+¼Vn†–§ûÈY»öÕœŽ¥z@õ¹Œ¹œéÔÈG^¦Ä ²˜Ç7dp­ë êSƒöµÙåóÊ,}iø˜Äg^[«O|h¬úÍ"ó!&ÜâUûð†µ°Ahê±-Ëe>*G™Ê<9V›ðIråGëËZYÓ/3f—¤–åo÷Ù÷Íp·¿-àfaYÖX[7»Ó=·šr˜´Þ†÷¹›MoJCT¾ø6ú…;ïr÷[¢^¼3Ÿ^†›NÞòF#rg©k ß[àünÄnÇ)®U²öNƒÃûŒn€ ³7ÁÿLÕ'Út¤®Nv¨\®êÁDxïªþ¹Gpò“·—àùÜ3ÌùZ0ëÜÛ¯³ÍNÝ- à³¶q2'Ðóª[ýêX÷¹ “ÔeÂ Š¡ÇV^yÆæ¸H茸ójl#õæWµ§ÐeN„¬ÛýîZ7³ê:[н¿uÔßKèœÍËæÃf¡:Ý‚°³º©Âòï†aŒ±°¾õÚˆúã—o¨¸\WgÑ«}©UKÆvÆçûOEö2ÛÕ~«w:¯k®ybI½ùýéöÓÖš½\Kúë0,t@ç/Æí+å—¯ž Uÿ9]ý.ÆÌ+µy¶¿¼®:{ÊvwѬ_û/ý,iœëÒ„öYökwióºJÑç|áZmþOÙTk]þ´ÍÒ÷Lü]Ç!} Ütþ‚ŸÕÂÇq]0qØ"xU´xã§úF_N<&€Š‡@?D ÆaÜ·3˜Pé¶Öi^p<4(þåƒ\P„E¸SœÒ`ÐWk/7t;ø¿‡_0@:`†bè7Øeqm3†h˜† …l؆nø†SHdãE½ÔU°ÇÔ%3öç…/†~ø‡e³…ê€Xˆ³†p˜ˆŠh„ù”"…y/æ~.Èm¦dè§G^sÐ…ìÕþC(€S†?HHL؇8oV…:µ~nÅ]¸wxÛDÍ…xú5s#çŸ(ƒOCw$0ÎЋ_xŠ0ІJ˜7+u{WxR`‡6×z¦[ŒÖ2Mø_žHŒ40„¹¨ØÈ»¸lHb~—j0·ŒvU«imE`¢wW´‡èݨ€97ߨq(ŽÀF{j’EŽü8‹EV‹ÒƒCÀ‰ÚuŠT 8 Yþ¡mî×Xãc(•5‹“UlõWp ) ‰Ùè9ØNÛ’§$’öH’%X'¹÷˜. É‹-yF/©1Y79Œ5éo;é4,)“*Ɉ¦Ø“àþ5y”! où¨‹Ai”àf0<™’|ŽS •ùn I•û²ˆMY9‰•T(uÄt•5S^ù•$–bùÀõl9“ÇÆØj9qÙ–+pVA—!X[t©–w™@O©—-pMCà—;˜ @” 0˜! ˜†ùQˆ)’©•R9 —9™!R–Y˜%·˜vé˜`)šžyKÕ—¨©’˜ù›ù™šðJ¡¹”¤É±é³I›óô–>Л2–™°› œ¾éSÀÙȯéÆÉÍ™œÀ—@0ý•›iškÙšÔù™ËÉØyaŒ ѹãù`péÚɇþÅÉxéžêY›á¹é‰[ÏYš)Ÿõùìœô)1dYLpžàŸmt‹  Ì9 =mižòYš Ún6Dnã â ¡< ¡ƒy¡ÛÙŸ º ¢Â¡ã¡øy¢: ¢wI¢Y¡‘é¢þ¦I â:¡/mVÉŸ £À£;5i££9@¤-Pfn4ª™O*›6új7ê0HŠJÊLZ—º™–Šh¢ HXHÉ+WzYºC‡¥é¥jª”8Ðm *ejgª0šuzqÄÙ/sZy m Ö¥x:¥sç„A×`Ó§#wŠê£è‹’º,Šº’Œ¨%êþ¨„*ŽE§~©“hP/•Ú— ¤Gð¨XÈY;6©È2ª4 zª›ze„æh‰v}LÇ5Z–Ey)½šJfZ« —jЗTœ§&—nªBÌꔣù] ÔŠ6çq¾ò“ƃ›{j©Ïš…àÁm0õ€¹‚­zz¨º«¦Ç­®É©…Ê5ÏZ®CJ¬úYž¤ú®6•»B®]‚žòkù¦¿¢¯³” ýjÛZ¯{ÊJ [‡æz°<¸®f™°þ2°öZ°*±øJ¯±º°BÙ+KVp®I9œ û¯Ñê®Û¬;± »•-ÛIˆ‡6{+#[£þ:¯Ö}?˜}|îþ˜„âŠ+9Ë™6Ê ðÊ~ÂG‡tʱK»T©9£©³2p†ˆÙµF®õ©Øö0 µèhléÔ°;n/KˆYë‡[«YÄ{.T´Ðº²ßçXR6Šh›¶r§‚Õ(°‰Y)Õkδb;¶Òzm&†®FëxŒys¸Ù5Ö:=Jµ2;³ì{f‹¨Àât´jov³Þwoö~˜ °öúvcçkD˲(P uå‚G“«læ´~z¸©ûºÅÊ+ ع†&~ |G¤¹ªk·pǸ°»TxŽo„wÒ;½Ô[½Ök½Gk&û·0+,ÁÛ??ä€>q½ä[¾æ{¾=—½§y±þ1›¯Ívu1Å®¿û«€»Ÿ‹Æë{Gõ²ôû¦d4¦Ÿ²=¿Çh«)ë/rÀÄ(w¼ÁdÀ›4k´·žŒB'Œú[Àó[·ÀºlÝbÁY…¥ Áœ¹Àš¢ Ü*ÜgÁm«†\YÂ'kÂò"nï„.+<-ìÂΊ¼a›***-‚È}¡˜­/l¿œE “b?N"¼¾E챋J[,)JºÂ§ Û ¶Ù©®J°ÄÊRŮʽüª­F,âàÅÉ¢¾ÇÉ»<—OëÃh|,j,lLÂézÀg\Ã÷2ÇcüÄn¼»MÂ8›±óIÆPÜ¿I ȶÂÇkȼ¨>œÄ ¥¼YþÇ0œ•œÈÜ#Û(…`êÇwœÉR¼É’‹?ª½–|¯‡|Äš,Éì”–„éÈ¡ÅG Èµ2p^Ë'¬õ2¬LÊøápM*¨:ûÊYL®,k§˜ºœ É<À'ù•Bêќټ¿£¯×4© ÛœãÍ”¯¥JÌ´úËËü¯ßÌãŒb6£ƒÊÎÝl¯ï,„á,BFÏšjÏcÎÏÌ@æñÌÓl]ÌMPÐMpÐÒÎkªR*«"öm:Ì˽ê4¶³Ì{ì`T-Ž(nÃn• ä?^Ø;mX¶¾èp®èØ.ë³°OÍ4tUV›ÐµÜµr[µ´†Ö)(¿Ùþp‹ìãíÎM%$C!7ÑþŒØÝÊfÌ=•víË   ÕäV~fðnèX¤ï…Ëèæ-éݩ̿u¯OÊNïjÅVÛ~ä›Åð;îð¾Å_nãqleÊŽÓm¾e—ðÐuTöµÜ^íßrè2òÏ]¸nË¡þJ4¿±{^ܬüðÎ]æ~ÖŸë£í”9œµ™~ê=/LQ?â°ôרô†øôw´é>õ\žèC?‚E¿¯:'´JOGO×?óÜèØ4ð6Kî¢à·ïÄ`ïö8ö/¾¯SYøgöêôÊ^É4¦¸ÀGí:C÷p_óÍß¿!r/“Ëî ~ÎñŸïê­µ[» ß•¨¥<­»D1¿úÿìžý¿ßÀxÎÌž¬Îè½û,¯ü…îúIðü]Ï”Ö Ò¹¾óâþi/?mܯû kšÄ¯ódŽý¢?éÞ‹¼Ä¸éÙ´X¿ÿüßÿþÿÿ`ºÜ0ÊI«ïÂR´  'ŽUFžhª®ì×¶æ{6tmßx®ï|ïÿÀ 0&#+#àX1›Ð¨Tôœb¬Ø¬vËí^ªYð¦ã y¯ç´º´^¶ßð¸œ%¶Ö“Nw»>ï«øS€~ƒ†„ŠyjwdTfk‚‹”“P—•o‰œšŸziŽJ™M¥ }§/ª¨\ž…‡­¬´"x¶+»²¢{¾‹¯ÃÁ0µ2½'£ËoÊÆ[ÏJÐ~ÃÅÔ)½ÒT¸Œ’Ø  ãäåæçèéásֱ뷡téóôþõÝ(õùúæïý&äòªÁlÛ4Dbaà ‡#úY(¢DB/R¢XÑ¢Å{CÆá8F¤0w°L" €ƒGoaªœ©…åGšk2â°£K 75ÝI”…M™EÓèLª†¤ËŸ‘‚dJÕhÏC«ZYª• ǧO£‚Kj׳"Ž¢õÂu­–-¥–;Ö­] jïfi«· ܬ}§È+8 ßÂVJEÌxáÆ/C>ñwñäËcN!y³Â«X-{ž¬yôˆÎ¦ñ‚.™ÚtéÖPÆPyöÚ}¸ó–-8·ot¶C&ô0|&ïÀÅ-$g9ÏÇû:GÃ<âtêþ˜£ë½n©ºDîÝ¡£$6þ2øxÞûG?YûÝóëÓ‡&QùÉðå\?‘L€á2hÑùé§};ý÷…*÷ F *¸ðˆ“Á†n˜`‡²Gž}„àa$šˆ €Šx!8¾#>¨ph£ ®è"W!Æpc-?.Ñâã˜2cŒÔˆAzC8!>‘T⡎:Éblã Ó#8I¥J˜ qEúè䙄‰ä*ø vÏÑè"!-ZÙa()ZÀ#u~9¥ *úQä˜O 'šp®é þ饒ð¨9aŸŽÚ"‰Œ·å¦–ti蜿€:˜Ýºaþ“i*šd›%V©G”‡N#逪Xi©ˆŽ˜i|æY«Ÿ—ú‡*/¬~p*•°&ªjņw§Í.“lQÞ-žž2º¬1Úºà* Äí–å}u묣¹:»m+æ~úì«"ÒXµÔ–×.Š]N«îºâè»†Æ ¹wÑK”!¯(Yf§½‚:+¿Ü̈0Áv¼ÓÄîTñ'bìñÇ ‡,òÈ$—lòÉÛ‡òÊ,·ìòË‹jÇÆÌJóÍ8ç|³Ê:÷ìóÏkL3%c<´J)Ë«œGÍ`ÌM‡uºmªòpÔÞ"t ×`ÝO1¥Xíµ"™€›áØE…} Ú‚²y6Û8©MþÜ©ÈC‡ÉtïGìÜyû·÷Ý%÷½àÛL ~ä¨|CH±á5‡Êx#,I8]?ÞøW¡•[ÎñážGà –¡s zéXl®8ꋞꪓþúå^dîuìz.>{Ýïžúè¹ûþyïÂÃ|ï7ñÊéú®Í“ý|ôÙO¹îÔ;ŽyöEàŽ<öÜw!tøÕOŸùrŒ¾¿µ/ùêë7ç¾ûñ{µÚ^à×ÏSTú3•|ÿ‹ ß @üo€DLOpÀ:°+¯‘Aè¸PŒLþ.¸ r°‚ a·0ÁNA„(Œ‹ »€Âj¡„+ŒB ²À® …þ®Ø  ¡€Cî°&"Ìá›DÖ ñ-.4¢atxı‰tŠhVC(Zå~V| ÿ¦PÅ,ª‹^¬ÚüÚ'‚.fqŒd´¡÷®ÆòiÏ„kÄTW»ÆzsüÆöÔh=9æ1\̃cñøÇk‰ÏŽƒŒ€­¨¾ ÞQ‘Lôb#)øÈóÒB¤ùtuÉBÕ‘›\$'ù@…ýëKTCÔ¸:‰Ic2XÓ$©Ü•µTÆa~„£-îõ¦Z¦ ”³ÌÑHòX,{°œÜ¾®Ô£aùòƒíú”¯¼ÄªÀÅP×:²¢ Ílâ Z_ÀÛ5m±`þj˜±f¬À•'[> i£þÜ¥7© Î¥q—ß„W1§ÆJ=þ’šÒÔ§'»)FKéS`–ì'!ݹ0z>ª•”L¤B!™°M"°’5¦'Hé@þí£ ©HGJR)Í——°ÖÁœø¦H=øâu‡èƤ{§¶êéIÍ{{?ŸË%Qá gG_àê‡M’oïɨóøüþ»ÌožQQ¤Gú·×H6Æà$æ`v`„W¨ÆÙEô•§\2nX…aÆÕµÔ€ÜaÈa‰YŒÜ*Æ$7`;³u\†?œfb‡ÂðZ‚vwH)bC‰ßvq}(ãQ*q„‘Bž§’LF5d îðN~0>ib”=&Ø™bŽù؃MfRÉe„^òÓâY]·™<•˜g4¦ßšká÷Ÿ‚%9Yœ’áÉ¡ž$¶ZY &YœâÚ%*_¹b¢ÆÑäWä d%£r%J–w†Y!šžÒkv~z  ÖAÈj¬B¸j$²Þ ­æýˆk¯:Œêk°ÂKl±Æ‹1l²Ê.Ël³Î> m´ÒNKmµÖ^‹m¶ÚnËm·Þ~ n¸âŽKn¹æž‹nºê®Ë®¬;libwww/Library/User/Paper/EventLoop.gif0100644000076400001440000001006306302442056017545 0ustar danielusersGIF89aà/òÿÿÿÿÿÿÿ!ù,à/þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.£ètš†vµeoÛ;î ìõ o.«ÿ)| ‚&„*†nƒŠˆˆj'qŽ}^”#„— š$œgŒ™Œ!¢…¥•¨žw§ «¯›­p ³‹˜¶ ±»©W¡®¥‘ºµÅz t€È÷ÌÁªÇÐÑҧ΋m|Ê·ÒÚ޵݊ÎÚד¢É€èÛÑÊâÂãÅÁ½¾l¹êåæÔç÷üäîþÈåÓ³æ˜;bñ.û¶/ÏÁ‚sÀ5xÛ@‰Ùø=ƒÖþpŸ¾m5¶Xo@Ä@r´¸²e”.?²ÄcPâÊøZNÓé/åË”8m¾D)3¨Ë1å­ƒY”©>™%‰œÜ5"R`G­R­ÆuÙB•>—zE*6¬Y‡ûE¡Z•Z›½½Ù5éѨF Åjw)A¡tÇÚ\W¡Â€ †÷í_¿q!Gž'¨ªPls'GÆl o½6+3–\Ö§â¬un&z-ØÕ¿¦ûøYíÖ­á^~ÎtáÑ= 4ˆ,Y¨‹“ouš§Ã¶¯S—¾›Ñ7ôèÎïN‹OÖÙÖÏj΃:¢À¿[æŽ|fè÷AškÕÔ¸|ÞeC¡g~gþÓÝ÷ñ nÙ‘ÄIÒ]D`|±QäVM‡=ø×;ÆœÇ _”Õd_HÜÜÖaœIßZéÈa|ó]ÈX„ú€ såœk$ýCá,œÁƒ5CÑ‘c3ŠálÀ$””† ê–ÖUÖ¬ÆÎhµ(¥ôLiå•Xö–å–\vyA•^†)&*`Žiæ™h¦©æšl¶éæ›pÆ)çœtÖiçxæ©çž|öé矀*è „j衈&ªè¢Œ6êè£F*餔Vj饘fªé¦œvêé§ †*ꨤ–jꩨ¦ªêª¬®Šà«;µ*kQ~문êP¦+¹öºC.²ø*ì »v3ì±-þ[‚²È6 K Ì:+­Ñv2íµT»l‹°vëí·à†+®·ØÖQƒ¶d ëG¹Èœk ºé²«Ë ð‚Q¯÷Ê Š±Û'\¾öÊëï=…ðêÀ_ ìêÀ´1(Ž*ŸS\ˆþâ¥p£*ñM ŒÑ¼ 󯔟ºñÉï›2È‹|0É£Üq; CÜqÄíZìXÌÚr1ÁÙÆÌòÐ6\´Ì8]}JSÐs#{P)ôÍ*#}òÇÕ¼œóPómÑ“GçdPÒøM8ïŽM_kµ_5¯8ñeZ3·vÒGWlóD?ìñÞw¯Ì‘ÊiO[òÊNEf^›…tÝŒ»l4àUçÍ/»†þOµÎ@n·’x·iæR-zØyLÍBáq×Ü÷Íg«n÷âí2=ºæEo^;¶ŽÛ΋îÝ @T²Ï.yãw¾ºÞ«ß9ñÉ»®vÓõ¾»ï¿û‚ã“:zîžml±·qßA}Ÿé·÷ô6P)ã5õ¾§Ry†¿/jîÉc½ÎÊ4)À~û}ÈOo¿”ËPþê&³–•û£žü'–‹~Á_Þ"£$°0“ýfÀ™mMi ¬Þº¸E¾¬1lË£ù'Â10p /ôÔ+‚€}ô¦ Â9Ëq^®œ¤Ü_TØ Nl®2”0§‰ zŠÀŸ–tgè Ï}  ÿ´ç—ð™O>òs þADÍ(ÐÀm3’¾˜¨D*ÄhJ  íg4ÊÄ3^¤ x(HJ– 'Ý€J³àÒ–r´—ÐÊJSJ†š–À§Ï3©vÊ€™N™Eª´Æy/¢ZШOPê ¤Ú¬ ŒNÕßJ›@UdëÈ*µÐÕ©Þ§¦X¡Š„²¢À­ÇúêíB°V+Àõ­g%Ü­¨µ×`£N(ã]S0X¯"ÑYekYXÂæ5 ‰U¬{…Æ>VÕd‹T)Xö²˜uªdkÀÙÎz´%êhgÀY²¢6µÝe·úZ(d–«}#»ðÙÚÒ5“·åéH{kMß«ÓþÌ­+ä1JŒn·¾@\æ†Õ¹£¬hШkÝ&`¹Î3IªÛÝ“~¼sïxËëì¦w8e¯´û,1W¾Û=}×9ª$ni¿p² ©ZñU®Yð#ÜW§5PrE°¼Ð_¤õP ¤ðg’ aHø½}ú°xêÑáŽÂðt%®S|̼î,ŽWN1§ß 5ÄÚ¤±‹ç;c>U4Æ¥s¬'홊5†‚‘÷Dß#{ NÞIXß('øKã°’_gâ |ÏNûµòwìéíKCrØ$Â+§§Y4¿îÓr™U÷±‰y®ƒõËSÏègL˹ þ_ë$ø8¿YÊm3ºÄì†?3áËÚ£ž9øf7E«†„1•ã å'@ÚИ¶s¡kÇh÷2…Ë«V©õè‘;Túžœ g=èæ­Ú‡´D!AXGNë±¹¾Ù ðœÃ›=ž˜o&¯fӥʹ‡©ÚϺßš#òi–|-&Ãfh– :PW˜Óé[çø¼6EgËÛÎuú§­[Ëq ”žóÊé%(ØÝžn±ŠÙ\CÖ$.xš´Ð9Pbw9ÙšnÓ½¡ýÞPšÜ^sø‘xEÁ¨àÇ÷¹ƒ¬¿`Zâ×쎷íÊM;Püä(Oy-¾·Ym|‡þ«+Fq|Izkæ[þp°w¾_{@¹E=ùÈ ÈP=9É“†"B? ”ƒÒBCþI”âqG‰”|FKÉ”y²FO •vÒGÒu•áB•~bTb¥•¦Â•]é•£–b9,G‡aY–žU¤¨–©Â–•è–¬—q)—oi^h—^b“2 Xm©—X²’Ö’Zµu ˜Y91t––ˆÉŽ¡—«å˜Ù?y¹E™•©[hrfׇ›ù_ iu–š¢ùWS¦˜ëŒ O«i%KÆv:›W2›®Y›¶9%ål¥™»ùqÙh~œ¼¹Œ±UšÆ™AÃ)Źœ$4“}ÅrógEÏ ©x@“8ihE†‰Ì V— c¸zÂ¥›à™–C;ÔY YþÀ™ž[P8ÂÈãž!…žòI¨³y\&jyxNß¹ŸÑÙ'DjêvNðI á)xÊóŸÅçs£Ÿ ª’ˆ>GRž­P=Z¡ š‹G‰ú¡ýèv¯Yˆ#zœ¾„uP‹)š:á@“åY3Rç†/z›êÖn߯¢à¢7:2]vl CKòÔ˜?š%Ü&oÒÓK}·ŠGФ,©zKª£'ê£OÊŸ :væ¹¥Vz¥XZ¶¤Ê]º—3)}LHhºz)ÉIúp¼6¦È$…¬xkWŠ d-¯Ö¦ó™¥IÒ’‰Tð—˜LeJ-=g6v¦7ÅVa‡6ºFCCãlÅÖ ]cm³wþ©ç ™‡ ‡ŸZˆ·u˜8nyv<,cfìyª÷St&´{r÷ªöèK¡:„ŠqXŠ„zbšj¨çm©*ps¬Ãj¬é¶G· ¹Úfˆ‰‰§¤náA£³n¦Z­bhÕz¬Ûš¬BH¡3@ª%„ÐÚ«Ò­ÅÊ8†‡­pW>Úڪ݋ÈYÍZäzOæÊ­ð ¯ou6«º®ý*nb ŒÓø‡àŠ‚/G¬ë¶©™ú®šê}ÂjmF×r¯×‚«gÇšœŠ‘£i›[¹›!Û©¨é¥f²‹(;&*»²aÒ².Û%0[!³ÚšäQ£^6eß–¦ D?k˜þuAX>;¯ "`%’…r8v-C!gS©Ô±cÃ0J!{ƒ´[дEЧpÊ7÷y­ªª=œ×8Ï¡Ÿ`KË´†t¢¶âoò¦BŸmöéŸêêp&ó‹c@xO  4 y‹$f+‡ [±G»)½i~ l±3o—®ýÚÃK¼$V&Ç‹¼#£Óʼ2.Ð;½Ô[½Ö{½Ø›½Ú»½ÜÛ½Þû½à¾â;¾ä[¾æ{¾è›¾ê»¾ìÛ¾î; ;libwww/Library/User/Paper/HTTP.gif0100644000076400001440000001333206302442060016406 0ustar danielusersGIF89a Éñÿÿÿþ!ù, Éþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹Çä²ùŒN«×ì¶û Ëçt[àŽÏî¾ÂŸ°'ˆG(˜8˜¤¸âÇi1‰PY‡yQhpIáɸyX8ú¸°ÙØÙèù™Ê‚jéÚÀ:+»h;ÁJ›É›k»›ˆ{¹;,ËykÌø®=ï!®š _._»;ž®ìݤP¥¸QÓSŽÚ3IšBøÏ ;ˆ¥Þ-”†ñ BþzrÄ=4察E~·‰dHHà1>ÞSYlÐF!_®t…(¢N›‘HIs˜ò#EŽ Ž(ÑgM}Èr–|éÅžäRb¼:kSpV¯R]§LsY¿¾´J­X¢tì©{OÔS”[7jeðmY€yƒ¥‹ ÷¬×µ%¥Æì:7#Ù£„ÙÆq«ØiV¸Ä¸»è^†%W³ûo²SªžëÛwiTÂrÜšibÄ'ïr†º8ßæÐXižugö÷ÄÉtW/ŒØ8c×™`/W50qÛtŸ*¼æº~wöN²Óžå§_7ͼŽó©–)ŸëŸÞ›É‡sîöp5ïÁþéÏ…˜WÏ¡'•`ñ¤÷Åzµ7]eµÅ7~9(˜@ õÌL­]h iRY‡šÍטR®¡à(Õ¹݃¸iTˆ Zèa-cq¦!&[oÝ“h¹íˆá‰F‰d’J.Éd“N> e”RNIe•V^‰e–ZnÉe—^~ f˜bŽIf™fž‰fšj®Éf›n¾ gœrÎIgvÞ‰gžzîÉgŸ~þ (Ѝ Jh¡†Š(¢.ÚÂ_Z8Êh¤@Š¥’^J‰–bÊi›Vñi§¢ž¢é¨¦f꩞:êªQ¸Ê*§°>1k¬’ÖÚ®¶.ªë½îú篎K,©e[þ¬žÈ±l²w6[´ÎÒ)íÕNçµAh‹­›È å €Ð,ÒL·Ä~kÉxƪkŸº!pkîšèŽ+Þ’ŒËN¹ñÚ:/»ë’;^¾"À»/šßØ…õֻоŸÚ/ÃÿJì®L?ÜêÅ Û›îÂùFŒq§o̱¿îR·Á!yðM‰{ò ¨¼r˜4ïpsÍ^æœÏ:oéó AÿŒåÐ5Mt•HϰtÒR6ÔN?)õ UOÍäÕbͨ֯pÍk©`ê5$c“-öÙ}–­Ûj»æ6 q¿MÔÜ&ØM÷J\Fc6A_¸/ ,`5ñ ’áƒÉšÕ„¦"p´—ÅÌÑ0œ”À©!jìÁZ £c2” ÉdVkà…d@’à»z¸Ã’‘€ Ôá¿~(°tõƒ ôTþÂ*†/%P`I˜E˜?\u‘bX$×—XÅD¬+Šó"þ¸8±˜5‹„À£C\6¾,ˆú+—8G“°3ndâÿĸFž1`>´ ý¨H@Î0‹h#ùxHLvÌde”â&uå¨ ùZa-)ÇIfR“”Ù¡HET¹ G‰£+ïæÁe\‘“@„/'5KUÒkœð!åGÇ”1{`ƒ5˜9¼döÁtÉßÿP<áuNš²@6¡ÉÊ04â›Û;žA‚D%Â)ü9ß Ïx/•ðå/×Éαì’}4œ…<ÿ Ѐ t -¨AZÐvÀm$c+þ§(¬T3~nŒ"ØÎ'Ñ¢zÏ&ê&mîo¡÷‚cEOfÑpzœ$5`)_8LQ±ýü…xRZH«`OzK¨¦ñ°*kBÂÐOz1£´Yêœ&K¿Ê2Ÿ*i%jL5…©½´¡Šh{ÛÚ6ÖN¨M­3­ÖÁ¾· 4ã&ŒþˆÞú6A0@îVñ¤Ü\‰³¹Ã=-œލUW²iÀndSàÝB·»Ä¥àv£ª†ð~‘«cP¯¢û×Jͽ¯ @e‡ó ¾#}Òè =ñw ÙV{Mû>&} >T á™…#0`/dØTÃ…!ðáltXT#Ö0ìÊÙ€÷¢Äœb1XŠM+Æ•q\|)kÆ:µqŒ[Çã8è8RC¾ÂN—ä$ûxE^T“«päDYÊKîñ“¡på?eY Õ¤2»<ã)ßl[Æ2˜üe1×8Èo(3ŸÜì„l"YÍV^ò™ÇŒ#× ÎXưŸA<þÑ‘ÀDáóTœâ?‹8Ž—M–¡ã¬hÑEšŸK,¡Ùòè& z™“ÎD¥õxéBW¸ÓR&5ž Ô=Ь~@¦ði½jvT¯^¦KÝê˳oU­•pë›ZÈwæ§i9¼jW›+.vÍ~„`›nÙppöÊ i3;ט ó³“-insºÙU¶aMm¦»Í寨¹ í®Û l~Ø»‹ou‹[×dw¢÷-lmÜ›§˜^w¾«Ýï‚|Ú 7°„þpû{ÜÊn8BýÝýN×ï8³ôû¦áà0È .j‹ëÛãFÀx)é$r!|Þíxo¹03bË^Wýêºß¶èå=¬Ñ³Kó¡X¡Ó‰?xµO¾÷Ñ2:›°þɾú †þçy¿ûé Áçëõ|Ô]b„ªýX¸òÙÖ±þßÖDÓxô©/}U6Õ„…»žaËz‡~Và~<ÄhžYè}ç·tØWÇe€/…€=R~!dvß'~Ƈ_Ç¥B¤4V8%§cOÝØ쨊î(%ÈxЬB¸˜‰QkÂ(ôÖˆ”†ŽFòYùžV'rË\R°¿¨‰àÈŠ³v&½R‘ÆxˆMò¥‘e²C^× Ó‘’ø‘HòMƒ%wmRxQ™¨Ž7PrYlå˜á{e$ )i‡“˜ŽÖÆ']þôG@”T(”CYoxb”‘„”ÉKÇ’M锉ä“1X“6p“8ÙnÊÒ“S¡•íH‰Ub•Å’”{H•U¹•W’–¹–Cù3o9•KÉ’s)•ÝÖ°ˆ— ©—qI€(˜èc~ö”+ù`Z%^ièbqy:0˜‘I>˜8Ð+Ýè5'‰R™é‡Z¸—GÓu"ùuÂçZÓP)Å™–˜mŸù>l—x·7]5×I°Ù3‡¬É4a¹XQX^8•ºerª‰n•)4X™x¦Wš5–#©] o¸i^ˆ·›Ø›ù›ÌI]ΉoÐÙœ¤wœª·eã˜È™_ÚI]Ù3˹y¼É;©|þhkÜ)]wƒG2¹ Ðâž—œ”i—mø{­˜Gع'ryòGLbµ­e[*´[À&ŸáSv§‚æ8‚"cí %k®5„·$|t„žx80´yšÔ9|ºkM¥‚¨œZÁGž&zž–5úŒ×â!˜öc£=꣕XŽ…ƒ¸•‚—ÄPÉ`üùf3¤%zxR³—y±OÀY¤G:õ„ šÖÊ»‰£Qwg|W{weYåX~ñ˜êmIyc¦]¦‘·ddú¥³H­h¤õ¡‡Ö¥ô™£,X¤¸‡ ŠgŸ¶gYÞ9¡wê¢|m:†…XaÅ|“ª —þ!P˜q3:˜™$žª¤¯a›˜ª\Ú©¨ÒŽùJ ZLi„GRªLà¦^ú€B*„ˆYl£u㥥´I¨zª:(¤WÕ¡[: ’Ê7¡à©Zñ9¬4§Œ„ ð¬ÊÚw9˜§O*«ŠõYƒ7è"HT°J{Dø’Õ¢ÞZ«)hRš«ÉšËâwŽGúùœÑ „ªX¸Ú¬2Z_FB¯„„[-úžZ?Ú£H­ÿšYcDš¹ °6*›GW©T°+¬$Ж »|YŘ .Κ¤~ê›+’«²¿­;‡±i²v¹¥­ºúªÝš°/ Òôk±Ú²#б£þz›'© ´:Ë\}F´Œ‰³.;ˆE‹°2kž#gÂ.òW!ÏŸM[›S+sU+…;Š2Jå¤7Ûµ?k™B›#&Ud;Œpk)>» ã©0·q·V–R µÃé´­pE¨™/°iûªùx¥Œw¶}›¯û€¨ÙG\ô)t[EfûH’‹˜æ¸Û™³â%·xuŠ©b¹íª¸%ËFѳl‹n;¶4T˜KºB n‹Z„« ¶I'¶­`·{’I¼“¬˜{€›=[¼Íë`¡8`ph§¸ûE`ÚŸÝâºÜšÔ‹BZëJß¼Œën½K–ú¹I³½þç‹´0«ëh¾õø—S³¾ò{jÀ¿ü—ô›¿¼)”µwk³È5õ[†È[ZP™ºªO„rC–SÀýë‘Æ²w“S‹®rg¼Ñ¹(Á*)¶ZýJ¬¼ª¢…ÂÈÇ¿Ÿ[wµ»¸fÕ.L¸'¸)õ¾ZbÀþk§®j¶®ê{TQB¤~io|˜×›±(̬›5ü‰SCqÃY’ÃLv[›®ìD²xús;¨?Á,l¿‹¹vÀ›Á)\F)J4S Â:Æ9H¸&Q1“@”E Æú«kg‰-j|Äçmå[ÇþKnQì–F¬”b*ÈV¢Ç…L§‡l–„¬–…ö•û’È,þ¦_œ¾€¬ÈiìÈûkÇt|ÉT¼Æ}ùÉ¡|A«ùÇ ¬Ϋʉ ÀÈ.´»û‡›\—ËÅ´—8Ê{ì+¬ &“ÌÉóÙ¹GGËókˆ«q§LÊ ˜b ³‹x´®Qf¿RºÇœË™Ì^yQÓ9Í!7Ì÷˹ …¸ÀºŸ…(9ÌͺٰZ«ÛªTª·×Ê]Ȭ˜õ›~7Àó“ÎCªÎL\˜ÑkÎLcœö¼Ï$Ðú<ÐRèÌå ÍÂŽE¯+ £ìÉÆñ\Í”l5ê9¸{¹ìÜ|‡ŠŸzÁ ý´†T¦ýÑ­ü¯Ü±üx%mI'MÎþ,Ò”¥1ü¯øŠrÏ̾ã÷žþZ©oŠË:Æ<-ËhÔ7±I}ÔH­Ôθͻ¢ÒŠÓ¾Õ™Çÿ<Ò3“¥õ™¨‹–VMÓˬ•Å@8-Q½,}Láj¥]ÂeíÕÅ<|j xƒ WU=Óp {+A‹Í*-ùIf­h Fr]Hê/€‚×*z{†m.ˆŠ­Ia½ÅÜë,í8SÝY£› Ï]}×À|Ë—ýÖ¢m̪ÚZÔ$VÚª̾ÖÚ»¼Ú‚ÙÝLÔ¯­±Ê¼ìdº|¸}*µ-ÏE7Û-æÛÄ ÜȖڲܴvÜ̲ÊÑíè½Ór Ü9ÝÉÞL;×-Ô˜œ:Ï]Ë·ÃÝ =ÔÎÞþÄ,Þç­Ý±3Þ2]Þµ£Þ}<ííÊËM³k8ñÍd-¸¾£ßÖ¼zJ7ôÒËm¬­¾ÿ-d‘æ¦à'Ax6hÈxœ\gvà÷ìn}ü×sÌdb&ÖlÆþá$nÝjÄ"ž‹&Nl,^m.Ž;No2~á‘=¾0þâ8^&4^ã<ž>Î8BŽŠ6Þâ½cä'^a@ÞãÐÌäA>ßÞfQnßÖ¬3Ò=™8ƒå‚Ó˜[n¼¼òÎ]Þà)æÊ9æd~æ³Tæob\<“æGãæÜäתâ\oεšÍ²›x••˜wòõ á5ç¦íŸ–=è@]èpBhŽÝž„~èÞBÕ\Ýþè(Ëçlž´n…yÞ@ˆÞÌÍôè'ºè޾³–>霞 ¾éuêÁúéò2ÚŸ½êžÞéf¢ŒÒÜÜw>ÎSÜ zë÷ê™ëžé°¾ë²þ뻚A¼Þë$‰#ªÚÑŠ”ªŸ± ½¤×N,ì¾1µÑ®ámíu‹OØÙAü-&/ »…îªÁ HíÈî fl¯Â¸Zî¾Îë¼Ä*ÚHŠàÛ%æn½µEÙäâžD× L½­›JˆTí%‹jH,Zúî*^>ü=­){¬ÙÕßNåQô®F¿Õ÷N×Ì\®õñø~º+Ãd‚¥ùäÑóì…5ð$Üñ¨¾Ñ©–ð"þ¯âŽ*¯N·žn\S;òïëÆiÒê®Do½%Zó®º8ò)þÀäÞÖb¬Ö'ÏÑâŽ@oúÒ‹jÓ^¿×) ì¶nºW¿ðÞ)Î$ßó…‹ö³Y·Êíe¯%þžô)o«4¼îá«ôT¿˜ïk½²U_òö^³¼–«kß÷,oñ¯UÅaNq¦-ó ¶ªºVC<øü\øÞ>[G¥“fŒà\ßõ­Þö±~ú¥®&³Nê•nó®_ô¦ŸúÁÞúÉ®ìµîð©^ûª¿ú²?û£þú¶Oì§Mø¨ßùÆû°où—.é¼Ï&.÷Чîñ‰hêÂ?ý¨êÌOéÖ¿üØßü‘þüÈýÁ_éàþÇnèæŸýÞ¿ýÚ/7€/vþµv"ÿpþÍìÏè¹BúxíÚM`DÁ1u¹ýa4‘V{qÖ›óð§NÁpìÊSÕÒݘjåÚ¾q¹ÜùÞÿÁ`î%4‘Gb1Ùt&—Qé”Zµ^±Yí–Ûõ~Áañ˜\6ŸÑiõšÝv¿áqùœ^·ßñyýžß÷ÿ !#%')+-/13579;=?ACEGIKMOQSUWY[]_acC ;libwww/Library/User/Paper/Internal.gif0100644000076400001440000001472106302442060017406 0ustar danielusersGIF89a0›òÿÿÿÿÿÿÿÿ!ù,0›þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ¾«ãÊíÆ´40G¬!3ÀæªzÍΤ!ïSºKOͱaüE¯ÄÑzm‚ƒ„ } ‡$w0‹G|n‰…•–K” ™!.E”›—¥¦?¡\šu¬dZ°x«†^¬[’´gµ¶ª€¼¾­º³¶Àº½Å´^¿ˆÊ¹“²XÀ±®¡ÕЧÚÛcz±Å¯ÃÕßͳŸÎÈÖ×¼çÄÔtÞ𸀾ϽÁâÃÙèõùøßƦíÂÅ­ Á[˲¥Jö(Þ=zÎàíƒÈÐá½}ü‚)Œgþ‘¸y¡…ËèqáG‘ 5\ÉòáÀéFb¬wQ2Š2eªœY“"C’?y¦ôiæ´’p|j$ղ頡åÈÑœ¤C8å]LY£Ò¯W§vU™Sk:„;—B’˜V©Ó·¥ ÂŒvVíÔv1;’äšÖ«Ø 3‰‚¤:¶n^¤ Õ"†Ëø’\—IëfíšH–a” ý«ø²`º[9£E»94Ê-š«¶ô˜l*cótGìôÜË·]'î+ûÍ㓸íæ~–éêã˜ô6\V v9·R×oþÒUÄ|úÌö;˜·Õ³ÚmB”JU hÞÈÓGi½óäÐÉãv™ù;{ÙÍkþkÔ4þóhlÑC_Bn¡§Þ¶dœ6 &èàƒm4hŠ„Vh¡VbÏ…vHE†…lèáˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TVi%Ù2Æ•\>¹––Ôå˜BΓZ˜2 &™h¦ ›NàÍ©±¢j §b¾¹çSr‚¹ dgÂçŸôÙ'¢P,:çU~‚é ‡2›úñÏMø bi Žj é—…Rºæ§“ÀÑžHà Z*ªŒZ§V¤NêB¥°jš*¤¶êj뜹~¡j¤Ó +é¢'àþl¯u¢Æ,Yž¾º, aZ,2µ"k‚²Ábêì@ì ¦í´%TGl©–ù:. Üæêm´À+.¹2di-8шB»°¾«k¼ÖÎKïƒü¢Š©«ç*4ÚÀ ü©YÅRC©2ì Ã›pgƧ`Ìñë~Ì’Ç"‡rÉ‘ŒòÊ*ªÌòË%º óÌÊLóÍŸŠóÎ$ÚÌóÏ«ù ôÐo MôÑ+ôÒÛ(ÍôÓ—8 õÔƒHMõÕjXõÖQhÍõ×Lx öØGˆMöÙB˜öÚ=¨ÍöÛ8¸ ÷Ü3Èmdxç­÷Þ|÷í÷߀ûM7v©÷‡îCá>âý„ãŠïÀ8þLQyä9Lž#ä–_Žy šßè¹£Cè6–^…ꦷ€:¬S{ë*¼>ãì–Ón¨ÎUâ.»î·òN¥ïm A<ð!Øãñ|>«óÈw ü‹Ð':éG!ÕBõÑã)|”Ü #¨¨äŸ™nºÛwŸÂô-†éø¾ük î«_û,Ö Åño§}úö+þV¤¿|5«bª8‚¦¨€|Ó£Êç§óI«d`ˆ¢ JÊ|˱Îÿ>àA *€ƒ'*aT¨Ašˆ…ˆ3¡\X"Á†ö£!‚¸£šÉx2LÞ÷†$Ÿš (>À¡útx èhÁ‡Ò¡@j“ iLþƒAâÄè,À‡çº–-h>cêdPb÷¶È†.:Qúø¢Ä(Æö }t¼`Ô=6&Á»EŸ h™ó­"^ÍU"I˜ÅøQl!˜G`Y’‚Üû8Ä•„‡“ Ø+?XÀ‹ôÀ#óÀÊB^4áÌH=^`“È[%µ"™», —ÀÓe¹âØ`ú!“"0¦î„i2B™‰ dSéÈN6¡•¦€& ´Ù:fòÉ™Ûàf Äi:o^ œ!§ Ô‰9sÒ9ì\A<#gNlª†sRÀ'5UiMØS=óA@ÛÙÏüÓAúTBB÷ÉO=ùþJ\$ÊÐTMaà6ÊÑŽn´¢ûº¨ÐH$’‚´n"™4{dÒ“ž.¥Í$SK]j*‡Úa¦HÂ)MYP8ˆRI§;­L¿ T%5¨ÉªœŽº$¦"•]JвœúT‹Ú´ +õRUU}l«mªOV¸,«V¢jY¥wQ´^I­kÝÆÜÊ%¸Æ5£k—ìz× ´K¯o%f_kœ’ v°®;`e:VÄnkM|ÝSc UDV²—¥ìÜY¤Ìj–œ­¡GGKÚŽ~-¡hÞ·ZÍ’!µZ(d»Õ4ÀöA AnÏFÛ"ˆ¶LîIûà[€³¶þ(nzvkæN YÊ=ŽséÔLDw5Ó¥®K×uÝÆd·¹ÃÅ@w£¿Ã:kK¨Ü§qÆû–PÚ²n`$5IÊ^§¸—”V”b8²ç< |wfªoKÀxFùáQ”§äÀ_6S³Šø2°„ÕõÞ ,xe8uðJœ¯K&,[¶° ï¤át¢é¼ö0,uza޵ÄÉà?á°‰ýLd'»KÏö¯µ¯mAd»®4Øu ×ðí·‚nÚE®BËmîp£ûn½Äµ ÄÎo«{mÑÞ໑DÑ!ô›Õ7 ÷†KKð‚ïÍËóÞ÷’ãšoÜD Ÿ[ÄððMüm—¶²o–q´u\اÙÇÉöñŠ“hä`¹ÉG„ò¯©\áÓj9×^rƒå+÷þ̱†s˜O¹’󹔫ÚòœwhçÏ kÍa†t¦ñ2áKg0RŸ~¬éK£º»­Žá©g4x\Ÿ# ÇNö²›ýìhO»Ú×Îö¶»ýíp»ÜÑΚ¯[ºX™#0Äw@i¨Ù+@]Þ­°÷kö]ƒfÑ…n¬ž ‰Ÿßÿ®t¼"ò!†äá_÷ÊSëòÇÄæÛ讆ֈ½0ßxÒ³Æô–Ÿ<XÏåÕƒ~s_û”cŸz#ÐþÓ¶—=ìŽwÀG@ð·Åèÿ˜ü,–@E¾ð5oøê÷žÙ´‘ô¯?ûåc©ù6x> (49­7ʼ90Ôö_ý»lþ4ÿ÷ŸÄÇþýßGô_ïR@_Œw²/ð%~c€¸Ç€'¶r5€x SÉñ{»±ˆzè=§·˜¾‡³ $Ø&w‚²âWA¨zÌg}œgP/(^ÃF8˜ƒ:¸ƒ<؃;È>„Bȃ'0„F(„.p„JH„,°„N˜ƒ;ð„O¨3x?J¥ƒ)€…3 …E…À…&†" †$à…%`†]H5€†aˆƒœ`=È´õ·‚ïÂa§†0€‡yz¨}Øø…¨n8†ƒ˜…‡ˆˆy˜ˆÍC‡-ÅTÚÂ])Uˆ|Ȉeh‰(@‰ ‰/Àþ‰~ˆ‰™Šà‰I(Š@Š€hŠÀÇeÊ!KÆ&?µ4F?V‡VuªX„Mx¦x‹aؼ؋ð‹g¸ÂX† xL¥kðuj”g’W‹PŒÆ˜…9ŠÒ8¿xظÚ8†ÔXe€Œ¨¶b×Á?ªÖi‘h‡Ñ¨Ýí˜øŽ§è‡QH옉õXé»Ê ¼ÃK¼‹§·F ºÉ‹¡»k»[½¸¨½ØH»-² d¼Â‹¼»¼ÞۻܬþQh¾+¢¹E½Gà¾çë¶ë›½é«²"y¿,'¾B$¿óË¿"0麈Ï[¾ü½@ÀÀ+#sxw„€‡ù{ ¬±¯Ë¼W›À×Z\Šh:#,jÌLK¿û[Âöú'Lˆ¬ !,T#Ü>ûÂ-<À^‹½A †lˆÃÀJÁ˜#îvÛÀÂÄ'k'܇1,œ¨ÄƒŠR¬À|kVä»UœÃ!°ÅñÉÄK|¾^¬¿ ³0ÆÒs5œh ©ÐÚÆ<ŒRüÄåšÄì[ÆÄèpì 4'{¼Ã)°ÇË:ÇÂê¿›|µzŒ¸:À^‰œÜ°rÌÅClþÇëŠÈ…{Æ.RrYìܤ8ùÇ?IÈù꟬«B ‘šü"'`§|´%È¡LÉy,¯ǘ܆ pË ’qÆË )Ë“¬¯kÉA¼¼ Ê] Â×É0Ì)Ì`L˪lÈǬɌˋL#WbÉ,ŒÄPÅÌk‰·\ŒÙ<ÁÙœÆU×ßüŽŸÍ ˆ&ü´Û àŒ#cë¬Î¬ªÃÔ¼ÁÆì±«|ÍˬÏ['ëüÁ»l­MÌßhËÿ̯ŒÄ ]! wd ¾§œÏ=ÑÖLÐݳÓ|ÅܦÐ:{Ï( ¾ íŽ,ˆÁÎÖ»ÀýÍ!Ñ–e7-müÆaþ\Ë!}ÉxŒyÓG·;k\;Î=ª¤œ„ °õLÒ'`Ô:×jÎ|FÍÔLJ<»mÐSͯ]R\ [-Œ==Ë?°¦,Õ Ê£œS"\ ¼_+ÈîwÜßœË=êÄ*LÅFxYÍÆø ʃÖlÓMÆoØ„ ¶\ÈÑL2g‡Ø’}ÐM]Òu±A=œݼœÝTë“Ùš-Ö#ÝØ«ÊBÚ’ Ø5-Û—}fÚÍ¥ÝÕŽ ѳ=Ϊ=Ö,›ÛM‚V÷×- ÙÇÍ×" Ûd×½ÛSâT7¸ ÝË­Ü ÐÑȼÙ6mÕ5ÂT+÷ÎÖÝÙe­Ýþæ ÜÍö|Þi5¾I é\ÞºMÑÙíÚ °Þ´ÝÜÝÍXÿËéÌÓËMßø°‘-Ú£MÕî m†Ú@ÐÏz,Ê^}ßæÜÛ.ÏØÍ(äçà.´*]ßýÞmíÛ ÜŸ˜á#€ñ=ÍÕÈ}Æ_ÝÜÔÜ Þ´žm0$ËáA0ã}Ê6>ÜÄéMâD>àCÍß Þ9•¬ŒÁãVÌÞ±½ÌÔ-ä$:åEå>þã@®äM¥-›ßŽÌ¾åVÉü9åNnäq-Í[nX‹òå~àIŽäTŒæTޤvŽáuNÔ^ÍåRB\:ŽiîÝ{>äInç0žçj®Þ² Î~^%oþçŒ^“ØÜÓßçŒéƒnàIÎ}þ3Ê éþä•â¬èuŽæ%~áUÛæG³ ¢nË›¾èÜÁ³ÎÐ]¬ê |ëÈæ¼ÎÚ©þ\±n¿¾‰<ÍÀeþÅ—^Ì`>ãÅÞ—Ú˜ìT“'bËÆÏí®ëhè­ží`s(þ[ÒN粮타é^é>0ʹ -ÓbŽêï.ï×=çkóWîÎãnꦬéë.þNîþïã0áÎ ûŽÂ‰~íK`î'ŽÈ ¿5$“ïú>è¿NÇ‚Àˆñ_sV¿ežð5ò?6>sðOï4‚îË4jð»,¿ò*_NïöòÛð1‚óPþ2ºi·{*õñJàï%!Bï$6¯þÛS(ß!×ô·3@ÿMÿ½Go!ÿf<­…aÙ×à+.”Õ®PPÀnï{‚Þõrõ–po%ö§´~èUß^¤c1_¯âÃ÷Áö  ÷Gݸ~xÿjǵpò÷&¸ôƒÏ|ÑŽ)ž‚¿:Õös[±ç‡øÁU ‹ßËUH¶#ù®ôóèT›¿C*ùˆ3\{ª¯”f÷©ï0tTTUúê,‹9¬™–­›õøøWDùT.>–_¤‹É´ºŽX±ü¯Ù ºïp¼Ÿ~¾CÀ‘ñêžÇFV§jÕ‡º™ÇäªñF¬þ6 É?Ÿ×/gy¬EŠ¢_ŠþÓ)¦ÏN©xöPþªòhÅ efvü.« ±ÎP…9åjñé¼ø](ŽdižhÚQlëVá …JbZƒáWÏÙpH,ÈäoåàEœ?¨¥ZJÒÍG ìz¿à‹lLv³kúê5‡ßð¸|„nÚŸìÝÍSûMu s„…†M/ nI.w3~@‹‡•–—"’3 }{-Ž›>Ošš[˜ª«D,”¬r°±´µg¶_Yœ©¸½¾A¿p³ÁÄÅ¢Æ6N¡ ¼ÈΪÃÏ6ÑÒÕ«§Ö>2‚\ÙÞqÔ­Ááßåq¦@ØØtd,[îñòóôþõö÷øùùaì‡äæs¡èW„ “M®˜ Ȱȿd( ÒÃéËÆ‡°ódEž:8ŽêÔPÄ] 3ª4q1Em õ„i¹²&¤vè촆̑Nœjf³è+0/¯”dÓÆ¨S8óHýAÍŸ?±˜ úÔ)M“{`N!Õ´«Y°h—ýé™Sb)··¦TÊÓ…‘Rf©å–^`Éå—`†™[7b–iæ™c¢©æškzÉæ›p6èfœt֙ݜvæ©çbxîéçŸ6õ è „š#h¡ˆ&ŠÌ¡Š6êh-Œ>*餇DJ饘‚ai¦œvJĦž†**  Žjꯩ ”ŠêªžªÊê«—º 묎ÊJë­…ÚŠë®~êÊë¯uú ì°l Kì±f‹ì²_*Ëì³R: í´GJKíµ#Z‹í¶jËí·ïy î¸Ò‰K™‹îº~©Ëî»O¹ ï¼5ÉKï½ Ù‹ï¾åèËï¿Õø ðÀÆLðÁ¾Œð´(ÌðØ8 ñĆHLñÅqXŒñÆ_hÌñÇHx òÈ$—lòÉ(§¬òÊ,·ìòË0›•;libwww/Library/User/Paper/Library.gif0100644000076400001440000003016506302442061017237 0ustar danielusersGIF87aCÉòÿÿÿÿÿÿÿÿ,CÉþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËhÎÎ9Ð ÏÔÐÒ1Ï×Û Ö3Ý Òâ,åÙ0åÕÓàêÌÕÔ!ðâóÙö(ôÞîïÿ¸ô0ÜÀqîöÀ‡n¹ƒò]{èA¡­† 0r°(þï :Ž$ÎýÙñÄ o¤tA±ƒFt$µÔ%DL„>ÎLQ3ãN ûnŠXYƒ¨¹„?M–,X/i-Øáˆ”Þ7„ĺmâHˆR©6œÇô%TŸQÁ}몶ª×‚lszüÊu+Ó»bå^åzÕkV¤Sý‘¥ÚNäÏ–>ãÜËb>œaß>Œ<7-ß·h3 î§ÙîZ¿guŠåÜw-Ú½ã<–®fÆ£¡JvÛ:/ç­Ÿ¿ÞN½ôl˜Ni9vMøµnÏÄ/#Æ|—y`Åí°N…®š`íÄÏ«ªîÙuY∛Ž=»ôâ=¯SÇkù;nÌB])ìžùúð‰¥â‡˜¼þy¹ÛõÇ›hô XXjøh]@ü÷žÿ!( sÓ1h`@õ§Ø†ÁÍ2ß@õg!yZUè_KZQè`…°ñvˆÆ&¡‹™a(‘‰â †á‰#>¸"‰=ÞhW(>¶ZŒ¼œ5¤{Þ‡¤hìI–{Q&!“2Y¶#[ÂH#–/©Ö”*ÎÈã’ËYYc‡Õe{k “ž—G^¹ee½ÑIæž"·TTö à~R™P–U:Î;|Ò¸c¡fÚÖ…H êc‚ÝUº‹Y"*øã%‚ £v®÷édÕ)jÚ©®1äfJו÷W§åA*ê•8®©&§q&¦I ™_¬9JH™¥È…þ•«^·–©rÌö“±ú`úáJF.;¬o²Y™­¤µ•ìnÛª§›´lvø¹£ Éa´Kªjahš ¡™ê¤£¸ÍŽ fªŽ›g¸sy÷©½Mžä—mš•oÇCL|WŒ ÅgŠ’w¼ LJ,òÈ$—lòÉ(§¬òÊ,·ìòË0Ç,óÌ4×lóÍ8ç¬óÎ<÷ìóÏ@-ôÐDg¬ìH­4 .úºKGýXS>­´ÂŒJÍ=NçEfkPÓ¼SØZ[­Ó ‚zõÙeOÍu£‹6]5ÑX·Õ\ÍÂ5MÛ޼ͨGYwMöžLÝi×h+Ò|wUÜÉø …þpøã€O¾÷ÜsÞ3Ö)ÏæšÇPùå£g®0ã‚7Þ7‰qG'¹ç!œŽLÝ9qÎà´û 1ã‰ÏnƒíÇà¾9ëçÞ»ïyw>é@¼1Æ¿Ž|èÊ»þÅôÅ þ:öÏ!«½ÜO¬ãßYmVÖèãwQ~ÎÑ·oÄû8//ôÛÿýDäÏÿÿ<ðxð€20 Ø2ð(p 'H8ÃQð‚, 7¨ rðƒð G’ð„ 0! O¨Âް….ü c¸ÁÒð‚6¼ás¨Ãò°‡ë’ˆ‡HÄ"²‹?ÁŒ2ãÖ*h9]` o„™ýŠ2G2npŒ#Ëæ¨’ÚYÐz´B QÆG,‚ÀŽ˜¤ WVÈ>Jï´Pd$9²FR‹”%'IÈ+Б–Ø$'MfÉh`²³å:„ ÊŠ•Rž%%ZyÑ–Ì@žçfœøÅ2“°Àelé+°¹‹ÂDî\B¤a¥²”D2ýv¨FÙ²šØÁ4‹÷½ÐÍ+vUz&âµY &wˆf$¶ÙÌp’.yšk$;»×Íl‚ïnëËðì©O´9ŽsP'$æI°jþóXëAåTO€ïxþþ¼ç?û =tv˜®Xh7ÿöÎÒtý…ä¼É‡Â“6ð,'¼:z:"¤EšL#ÊOÀ´1ï”[æ"JÑÔ ÝhK1ÊŠ›Æ³VÆô”6E6R{>Ôz4åéOO:ÑÁ¹×0*´JfózSýëŽCªZ ÕW==¸j¶ââ•<0¢\çJ׺Úõ®xÍ«^ñêV"`¯€ ¬`KXÂÖƒ V%ª)Öj6–ö ¯œ°\wXT~ì}Ô-“tØUZ´•MåÓè“#¨¬ÄÔd7!YÜ‹²éT¬*2‹½kæó©Ö@[ïV«‰Ö®ƒ´äô‹uΓZ „V´Ìþœiß®GQŽºó¼Í„o#RÛ{ ·SÏq5Y>¹|*ýZi¡ËY›p£ºP5©DáFÝ ¤• ½®5×ÛÜâî§æõ¬è¾k]rèVÌt¯lgÛÝä)·¾á´­G1]é>³½û¥¯‚ŸTãÆÖ²± èX±CNŸ©ä-o~1°a OXqì%ñMÞKˆÁ4س&xñ%æ¶ /¦¿ú¼¦Ï P °¸Åœ‘15O dKÐ8®%HZL ŒY&¯|2%ø8Ygö¸±_jÀ!ÎH9_ž•±¨Æ :e˸^˜]°fI²Ê4ख़ü‰}´yw†Ä›=‰¨Ò¹NÉþ3 ýˆFÂy~sšùÐ!p’«u #EÌ7q¥bæ!Ïxþp®@œw» >ÿ˜ÄK~iš§æÊ’ãЇ Á”{!èÃÄv'NtŒëÁéÁ:=©Îôm_™PWqØO1öûÀ„Z‡¹ÒÎi® ¡…e¿6bW¾ó–Ÿ›Á¿Î»Þeìýï€âOxÀƒvéo÷ºø"ðŶʚÄ;h¼_ÏÉÁòqF|rh(“í8õV5}ÑÇÚ‘,¯yg!`ú$´þë3 ½dz8Ú ì Ì@ôgÍa‹è˜>õ/íoÿÞW¨ÜݾyÝ‹)á'5÷»¿…á§_ýˆ®»êþ›B÷Ãôµçíí·‘ÿúæGüGj7€ªõX_ dÈ7%G#!WeAzñ%ufge@Qgò{‹'€*÷?`Gz„OFiÄÇñuVŸ…pý‡¸$iW&g⇂©Wu1NÞdctAV¹b®9áš¶‚þD*ÀñM ö}0haÙ³_ÁQè$NIÈ`þwƒ]WtÍwbÏÕS(æ\aµc'%_"h´¥[T%aô•‘ç„@2†c=NUa c ˆƒ$H5Õ…üÄ;|˜RRè\e†£õàTˆ¦Xz6h‰Y˜ƒ­V‚†à¤‹Ëô‡Ì%}£X`õ\ˆ¸†lØ„n˜‰Ž¸S¥Ã‹¿Èx³FÉ·Tõ„‹“ƒMÙʼnº$U9ÆzÈ(ŒÊHŒÜXŒ/X«hQ<ˆŽªU°W‡Ñøs ƒ4;?xCÈaõhˆñ”[û´`wRTsbuNKÈ„æXK¨;v G%a1ñbwX‹yè›|cp|˜u‘ïh¹§…©¨|“¨Šß h˲¬ê²Vë´\ [C‹¶:«±!‘tRÐ" %·Íf·Š·«·B©¶T·6ª°X”+£ƒ›£…o‡›sfë®¶ö’S“¸·'¹qE¹”e¹a„¹Œ;µpû¸k¹¿…{ k£‹'W­#Kk‹s¥;Z‚»ºe˹-[µ&ë·k»V lbû$¾û»À¼Â;¼Â»Ä{¼È;¼&¼Ì›¼-мЫ¼,½Ôû»Æ[½Ô[²WÛ¹`½)¼4à½(¾ ¾'@¾$`¾Ëë»þç˾ßë¾3 ¾% ¿{»=:ðëùû¼пÓ;¬ü¿ûûü¾0À,¶Ñê, œ¾áÁ`Á ŒÁ0Á \¾¬¿¼¾œh²{¶ÂÀ6€Â|,Œ¿8ð Ã*ü½1ìr%ì¸ @Ã5|¾9@Ã<¼AÌCLÀPÄ6<¾:€Â¨{¿-¼ÄJ Å3l¼€ÄFŒVœÄóË!ÜÄ@{ÂTìÃRܽa|YÅfÌÅb<ÆP9¢êzÆh,À=€Âp¼ÆPÇv Ãs¼Å{Ü‚o;» €Ç|LÁj ‚LÈpȈ|Ç> È àÈ"ðÁ^ܧ—öþÂM#W£Ç‹ ¶×¹›V!u!LÃӥɌ €¨d^Sʉ eêÒ;<Äd9‹+É»ëÜ#ÃMÕ‚¨LÆrls_ÓPŽã,Ê«§ÊSŒ™yʼÊõÛ!Ë£ÈELƒ½ˆÅ~¼½€ ¸œSºÜÀDœ! ‘Í3µÁÌÌ;Œ‰Tbh̼lÊ­ØÎLÎÕ „iyÎê Í8 ÌÛÍm¬¡ÉšÍøüQ€‰Á¤6΄9ÎMÊœŒöŠêlÈXŠ YÅðì|ù—ֵΠÍÍÌͽÏF¸ ÌØ.=РQÎoC†Í¹Á¡Á<ìS°§ž`üÐÍ4&éøZ½Ó™(†Ùþh˜<ÝѼó"<ɱŠaþœÐMÍês~ÍÎ8­ƒöHÑ*ÍÎËèUÄ•6Õ:6ýÄœl&-Çý{®Ïü·ØŒÕU½QaãÈKíÕééÑ5}Õ8lŒ¥yÖ~-Õ1ÅÔýÑcÝÐä¸Ò¹ÐB ¶k Ò¤úÀoûÜi<Èjýœ¨ 5¡lΆMÕƒÔFVàžAÌÄ>ù˜¨ivG­ØfÅØ ýÏïÌÖõ¢–¬ÍÅÙËK˜)Ûa=Ù¬<èÜe ڣؠøÛbM0ôœO;H‡­}.çÈýY´CËk›@Àɽۅœ×l\Ü7¼Ì}+Ô˜ÞþùÙn ÛãíÝ?,ÞákÕè ß›ûÜ ÜïÍÉlÂúœßîÝÞ„ àíÂòMŸhÇ®ßÖÌßý½ÂWœàô½ÀG<ßÊ-áqìà »à:Üà5pßÔ-àÞáîßN â½lâédÚÊÞñÛÃ-NÞ"þ¿(>à,Ä3δêͽzÁú;Â%οuÌÁãä~ÇENÄG>÷ݦ3`B¾ÉÓ›äËÅR¾ãÌã‘\å¬å[Žå$¼ßnÈOnÀc>¿e¾ÁôKåG޾|æUìæ‰ çf,çhMçqÄHm«$‹½Ù»Ä|½ëûçÌû¼‚>èQ^èÈ{½ˆ~¼Ú‹» Zþ+³d+µ`žºn›»—ÞÖöºËä0`°‘îÆ”Žµ»›þÅ™t©žµ¥^»´«á˜ë¬.뜞Ãjgé¶®ê´N0[Ë{Ú¶½^ÛÅúši{ë­.é£îŸÉ®çº^뎾뮵«Žìanì°Nì Žz•^íÚ¾ÞØ®éÒ®ì¯.îÞ>í’îÐníÑÞîs‹êãîìçîéÍÎÏå¾îHkêò>ìïïöìèžïNÉ<°ߺbwð ¿ð ßððîî¼NïÝêïÜ~ì¸îÄý>®{Ëþí:Þ´uVïŸí"¯´Að€VòÁNíŸÔ¾N­*ŸyÂ~ñ¯j0¿ñ+ßí-þ¿ï¯ñ϶,OóŸë>Ïî9nî;o³žÎ·bÆô){·‹+ôÿžîŠ«¹‹àôP›·VóYîé†ðp°õñ§õ3óÚ}ò# öo ö!È4jÿìF_ó§>ñ?ÿôAoöMŽö(0|ß÷~ÿ÷€ø‚?ø}O„øˆŸø|ÿ¡* øŽÿø…÷¤^ì2ù6`ùk€ù4 ùüœ_ùŸo÷Iÿ­z/‹ß§©¿«/ð&Ðú:0“?ú&_°Ï·ÿ¹û²ßùÐû@°û9/õ<À?ÇÉË_Ì$Ðü>ýÃ÷¡¾´ ý?€ýX ý¨ïú¦Üßö´ßµþ¥ÿûHþU€þ±ïýžþ*®ïJêÏúʯóïÙíþ@?þ[þpÿºÜþ0²!«½8_ª»ÇÜ¢–èw¦,ɾž ÏaÓ®Gëî{½.X’ÁˆÂ2é02iΧÈF.–VUvÛÀr3^M4þVÊ̱¹£^G¨[4cLrѼ^$w³ús{yxuGPCzmI€>Œ~‘ pVŽ… „vN›‡”B˜xs# “Z0§`Ф_¢ˆ l±–R˜„£™¹ª¯³&E2‹‚¸¦%¿­Ÿb¥È¦ÇÇ»@”½ÀÖnµO·º£†Þ †Ø<À;¯ÒÝßĺã3íä²ÃáÏþàìõÊ/ð‘ü[ÚL¸­S—Î[±dåt(‹FϽi|ÞÑD ׺‚Pèk‘ð‚¿,‰pHòÁW:NLU É»)‰¡©%4cFЭê§RRO!EÒ´çòäÌŸÌä™lhÓaD‰+›µº¨&c‡˜)PšÑú$h(VMm"ÓŠµ'·‡œîA[vÖ ŠS×b\*(®\ð&ñúÃÑE¢ .zŠôOAk]B„‡U/¿ˆ3U¬˜‹ZµÂó óõQöfßÝA}:ååÒøzn挺³ÙÖ8?.íz$êÔ*W³þ\û5o²gcî uðºÍ…&Þ‘y¢ØÊ‡Ï:žsòèþH7—|÷OíR[¿afx>çš7[›zz ï=Þ®››üšõÀðÏŸßqêõçKG Qà ×5" úí§Ð‚]8w`ƒ~P8Ý|Â`@Zèàƒnx¸C†.h„òÝF" nsâ‹0Æ(ãŒ4žøá%5樣ŽY¬¨ÀŽ@ica>ºõS‹?yãJ ƒY“Lb8^KâVe•P‡T–Vp‰‚— Ù˜WŽø™ i ”šÙ·¤še޶å™qf&^›TbYg™púôäž5©8%Ÿ€êùç¡…Ò‡è‘nÞØg¢Z&I'¤¦9è••BÞœ‹š©Ÿ6 ¦J¡j êþ¤DjZê —jª Ž©*›HJà«´rš*¥¹ªÖ臫âj'©éZh°Ãúšç›ÂÞ™ä`ÆzÚk}Ë:ÚliÈF&+¯°Öú«ƒÈ^keBÚ’:k·ŒV ¬¸¨F»m¢áê­ºà²+ ä«ï¾üöëïšÜ:›.¡öºËÂÀ=1l¤´è*‹pÂï¾ïmË ±ÁcJ±¤ðaÆŒm«Ì~lîÂWŠ\2¼Óvd+¹*¯\ÉUâéžñ²Õ±«5_ƒ‚Ë{½s=v°ÇA—ÃÑE; sÄÔNÜt,Ok uIÅqÕL_µ[G}tœ]+šÐÌN‹}á.;þ®Ÿ¶)êTeŸjrhȲ-´ÛwÁ­ôGþ0’µRÇÆ¼ö·û¥ýj;D[UR!9mbCßÈäÔå'QæDÞ8εâåøý6àWj¹;3õ×23Núï]z ¼ñ“Y4ÓŽ›òjÙn<]Ä#;⟌§Õê祺¼°ûKýê§¹ºLÎ}àƒˆøðdzéÍÂtcëßVþˆÈÜrlC|¦–h(&-QóÇ7”YK‚_À†Ÿ@2iŒ‡Bÿi`…þIì¸)òl@«¡T˜:àè8œ[Øô7/þ ±:7ÌJ²Ê‘Dµ9ñ^ç»â@Ä/u¢TU¥¨=ôÅp‹³@›ðÅ›Œ¥r•cæ†öB´‘3< ¡ˆ7)‚o îë`æÒBÇ6ŒY\â¹HAa$ðuô`÷ 9ºÝa±tÒCä"v5Æes{ 1-”„±|L\Z7ÙF‚Å(ò‹Ÿ$G(8CÂP“ÀÈcYi&Wz푃 'I6¯%—̤ùx¹öI*– L(ãF%vÒ˜>¼d.•™JfròšmÛÁŘ¢enÓŒÈôfÝ|é†Î`œ¨þ,áþ©ÎfÖ²G´ØÙ´¨°D®²žR¼'¤®‘M캎úU™òõ²˜­Xf'«ÙHt´ 5þhiwIÚÑVÖ±©*em6ØÏ¶õ¥±%©`]ÛUÂÆÔ­  —pãÉØßâ6¶«*F° Ùâöô¸©].´xkT¯š¬z .‘Ê•×Åf·³À½l¶òNïζ±›Íí 4\©®6Ø=¯zÛ+_èv·®ÀR®~÷Ëßþú÷¿°€LàøÀN°‚LÜï^׳êm„wJ]ãN˜³v®„o›aßvغrÅï‡+öˆ1kfºÜp•w½û]I>ß_ õ_×ÍFqTóáŠÑ'(šW•–`®†4þâ= î6ÀÝþV2‡©\jt²xr”Ì;.ÛíprãBùÉí‡èê!œ ¿k«7(À¨Râ~_Åe–ðe& ÀTã¿ïp§Ø”[)tX7—~S¥³¾ Œ{œ ô(sš×œ…L¯»Ó÷ …x Þ‚žø9ËXÝež‡#ã×äÕù‡K ì‰Ç¹Ý/ rQ_¾K2(=³9ÈUl#uñV}°ém =È~➇ÎÍÿ1ú ß^« þïYü‡ž÷°ï0TïÐ0Ê­h0Be~ó1þxµ4'ÿîYiãôXûûFóH¹^Ó¬Ïååk”O¿ãîÌ {üÔ7H© qÝ~žzä¿òòçÈÀך)0|÷%ü‡f7sµÓwn“úG€ìL.gñs3jçHä5QxöW˜eM÷eÑ'?œà §=o4JXuS(˜Óô-H¿Ã€dç$°$„w!w¸·‚³3I³4;节Xt8¨w*Guçw¿I9(‚S(ƒ3(iN6R=‡A˜G‚^˜q!¥‚QƒKèF™7FgoÕ‡…IV„¡nè}!†qe¯§mzu(‡vv{øcÏþ…„wÑf HyƒH(e4VƒEmæÖ?4X~ÉVi“‰le‰H‡ÊV‰ê‰’X4™8€ XCžX~¡x3§èº¦l©¨ˆ#çf«Èl­±8T³èŠè‹µ¸»t½˜i·ˆvhâÓhOõ‹gŒ¬ˆŒ SŠÄXŒ‚gõgÒX£NÎøŒº§¤x‰ÜÈ߈BÙŽtFŽW8væøM鸆踎 åŽ èð¨Sóh/ãX‡Asú¸výH1üøº#ÙrÉ.™iȸ²ifyU8‘Wg‘ –‹IKé^Ù‘ ’æd"Ù%Y]"V’þy’o¨‘¨W|0“29“4Y“6y“8y“õ‘½4’ö•^µÅJ<ÙJ>IaFiY‹4”Û”½ÕZG)DJ©ŽáU/ù”ÝØŽoÆ”(é”H¹GQÙzS™>UÙ•hô•àX”di•TéMfùŽ\ [MyHl)›ö–@i—kÉLmYŽr©•ay|ñˆ•Q2–p¹•}ÉK{PhY˜¹{yR–‘Iw§•t9w~ù“y‰—”˜I¸˜wy˜¢¹Ižij£i˜q™šIy™j•™j)– )ެyo± ›®™–OTšLÅ™€éz¡Iš³Ih„ù›¨Yœ^œ=y›Œ©™¶‰˜ÈI”ÊIœ“Éþi¹ùœlF{obe˜¢XÂÙ‰ei×IˆžŽbžùõuéIž²)˜/ /ìYž+©yó9z)ž× Ÿõyyû™{hŸ‰Ÿg›yšÓ‰:º©°  Ú ú ú ³¡Z¡ š¡:¡Ú¡Ê¡¢–èžÀ BРk`¢>€¢f ¢;À¢_à¢:£\ £8@£ì™(° [ 5ê£V¤YÀ£Aú£Cj¤A*¤ã'  Ú¢Jz¢O*DÊSzR¥P£Qº¢[úXZLÚ¥Ešb*¥TÚrR¦0 ¦gJ¦‘À¦Âb–pÚ¦+J s*[zéàþOwZ¢vz¢ ð§Ãih%@¨uúˆú¢‚ªqðG<=g‚ °¨@©3ª¨ƒºøi©—ʨ™ê©ƒ°…¤xjé`ª4€ª ª3ÀªË9Œàª, « @«;š¨~"J^ˆ`«MŠ¡ ¨*•¾z«7 ¶*¦WxG@¬å@«Åj¬)že ú•,Œ­# žšª™rD‡<î´Ü owm ­åuƒ¡§±:¬ÖêlõÖvÀ®Ãâ#øÚ­—A|Z®æz¬@Åw³*°áêv·Cë*¯$zªWgAöix½ ®-™®?ê)«ˆz ›J;ú«/À¦V1xþm„ ÓºdwèjŠtÒô²:®z­%KxA¸­­J‘9kŸì¦-wº¬E'©0³kGp±äpñZ­ +³)4× D+ [¨0»ª;‹W qއ?Ënäã¬C{µ¡jeýöG²F(z‹×²×…« Q«7¸CÞ°kÚp‡cð¤[›=“šÒô‚kµwÛ®lq@h·Íhl+/¢ÚuбÇ„ãj’µJ±¬’¦)¹õJt`¹b‹YF{±‚¶J«£IZ¢ºº ‹¹4…’št„º.ËŸhا‹†"[¸þè¹NÛº¡‹£©©»¸KË´cëAg±Ö´¯xþ±»ÊŸÒ‹¼´{tN›y±C¹ŠË»+½±[©Y«­‡û²u{¹`z¼³û©®+¬ë«\§w½äês¾ì˽êk¼¨ ¾ú­÷k¿U¡«$H®1ç ¬ë[¿ö¸©Ì¿~P¬JÊ|Ÿ;µÄäÀûËÀ \3rŠÀô£I£J¾0‹r)‹¶ú¬n@Â* ^‡ªÁÌÁ˜j¥,Õ´º‘·½ì¸zÁ¦:ÜÁ-J§?ì¦' ÄA¼Ãè{¯N*¥(Ü«Kü¥^ÚÄK<©PœÄKzÄ÷Å»«ÄGÚ£XŒÅ ÚÅHªÅbSš6z£eœ¤ÓŠ£CêÄkzÆJœÆnüÄpÌÆ ›¿³¢xþ ¢x¬¡z¼ÇÚÇ~L¡€È:¢v|nµÙ›Š¸’µ œV,œ‰ì˜ÆÈš[œœ¼)É‹l˜ý‰È)is‘L™îBÉiɇ ÊÚœNDÊ™k™— ™,Ê®ÅÊ–Ûž§¼t…ªÊôDËCxŽ·Œx¹¬ÈJÆË‰ëËŸŒË¡LªLÌŒÊSæÉ±¬ÌÓÂÌÎùÊKÍ•9Íœ\Í¿\—ÊœÒ\ ÍœCå›m±–Ì٬ɳLšè¹²–“ðÏò<Ïô\ÏöŒ`•LŠ!›n,©³6Îi°ÏØÏôaíͯHнûa°^öЛG]Aý¾(sýÈ\ã|Ðí4þ€Ñú¨Ñþ’yžWÒø(ÒÁü$ &](ÎóÕ -=/ÊP6ÓðXÓØd8íŽ:ýÍál/=½Ž}Ïôüš\9ÔéØÐ×|•øû½×‘L-• JmŽS – eÔþ¥˜pÕä˜ÕZQíüÎm`Žbí–/g Õ×'’kÍ—†:]£iýsíÕ¶|°ØÒ Œ×ܸןÙ×-)ÍÕé¾®ìÔ‡íUm ØÄX΀Cؘ\ ‡-Ù“ýÖOÍÍHíš}hÞZÙØÔ´ ØiÙ»éÈÆy¡bBÛA¢¦\ʸ ×9$!""6]Ƕm»r ÂÝ´¯}a¼}(Íu]þ˃‡™~­®sSÜêuÜ‘@ÝŸ}¾¿=8ÓKÐGÔyö‡­¸}Ém)MÚª»7K?LŸ†3ÞYÞ;ÑÛè-µ[…?ŸûÜ®Ú_&ßæMßcߦ½Üá w@¸uN(±Ð-Ò Zàž£ÌÝÜÔ: xߣ ð°áÕáÞÚõâ ÞžãyDã¥ËßÑíßT†\!ÑÑëá.þ˜0^SÊÝÊ*~X<> m` ,®Õ/ÞËÞ´ƒéÁ_­ãN¶t°§Û=ºX7 MÎÖ[„ \žÝÕS.‘måI†åö*»csðåt]Û˳pþÂë·Ý\ÃÕz¾ç|.“jî¸ssAÅâæg°Óšº)Ä;®¸<Å,päwõçI1X»îúæ†..\y§ƒs>ƒë<Öéo%év>ém®u…þáUÜÊ¢NÑ„4â¼ Ã]hžæ~ͬÄdéþ#ÞÙn´C÷é©Áï]å Nf<Þ³un†»w„çqnÌP.쯣ÞðêÐ}æÉþßó!í|}œKçл¼ÊK‘Üßßþë þÍé®î´Ó­Îê }ëW¾ç-äªÉàäïò®é-hmï÷^àæøð˜¤¾âÒnÝ·Ý˶Ýð—ñqpðN®ïd®Ìþï>‘Ï!Í¢ÚT}To‘!oËž-ðFNð.Û2?# ÜÖÚݮР¿Õà¯óOí¡ªÎ ðó@Oô‰µäâFôAmÄy¾%ÆßNoó-£]eœmEM_õië•}®·Tïõs©ó'Oö÷‰ö•ój?òm_ôlÿö#çÔÓõrocŠBv÷X¶óó.*qÏ÷ÿ~-$ÿò9/øoöcøŽÝÏgÏø†Mö{ùç¬ö“Où¼Öøuø˜ξ­>—ßùSùØ]ï‡/úùì¥ø§úìžÑ‹ïúãGÙ;ö`ú²_{YÏÎ[»ÿ¸Ÿû\Ôûø—\ÁþüÂ?"ħJïÑ8€üÉÏòØeHý¹oØ_V„):!ûøÑÿFjÌØ÷ï`Þÿýá72ÁXòÙ|þèOj9“ôÀåþïoze2þ¸ô Ïùõo…q²þºÜ.ÊI«½ âHúþ`(Ždižhª®NÁ¾¦ Ï’öÐ8f‡‘ÿÀ pH$ÊŠÁ#2µc4—³ç¦­Z¯Ø,I©eq»ºˆô(-ÏsH 8SÁð¸|¾ö†”]ÙñÅ8lny…†‡txf#gŠˆ7Ž5m fmœ›™e%jƒ>”¦§¨@“™NQ‘«§°z5¬ž˜¡˜¼6´­¯o©ÄÅÆ#²~þ¬»¹ ¾¹šœÌ¾»Õ²”¿ÀÓ¸µ¼ºŸ·&ÜÃÇéêë ÚÊÑ›·Ðð½ã¸Ð×Úˆæß÷NÒðÙ 'j:vRrÇèS¸jàêý'/žÃ ûä¤)lžDqûuqP¡É“qÜzvÍZÀÓ*>œ©ÕFŽiæ›G®Ÿ¹’(ƒ …¢²ÁŽFeJìI³BF87EI#¨ b¾œSEŒFh¨×¯Böíqñ#S³!-úÃhÓ¨‘Z)K·î ±+Ÿ-è‘™^l¯•ð4\¾ïö^8ü-ª v#KþPX]e:Œ©^\ 6Ç OMºEÝËsߨO¨¬$þÉžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸qÚ¨%£ºÒÎÆÐ3þ º´õÑË9“½ hKÕòŒXns…ê×ÓŸ.פ™œîP¾Ç ¿Œ%9íóytUÏ_rw÷Ñìäšk½4S2m‘›sâ¹µ]~y=¶_‚õßL²v–_<ÁßcØs:©%¢\\•RáŠ_e—áQ/ÒÒG[¬#]V.2 (ž¡(z,iGeQcLÑ5ô e6‘Ù‚¤(ä”'¹Xߌ1ŽwåH"|ØÅ“‹ÑT–iŠ•Ñ™¸!ZÖȘ>:I™fÖiÈr}ýÕ×klê…ß^"1œ_þÎ9¡ˆžÉÜ]©<’Ht&*)–÷g • z B|Ì5駇d*¡íãh“hH êªyˆJ)J¤‚¦ª¬Öú^•AŪiª´Úê«®+”®ržé¯ÈþìËBE €†ª˜ì´D±S@³EtJ, `Kí·^`Ö£³mœ½‚«î¸Ä\«P#JB[¹é®ko׺{g¾éçï¼P^àí½ÇïÁ'¬ð 7ÜpÁÙ |(ÄWlñÀg¬1ÛƒñÆ ‡¼i®$M,òÉ(ózÒ/§ìòËépÓ2Ì4WŒãÍîÅ‹¤ŽöŒØÏ&Ì\óÐD³#tÑH'}ÊÑJ7íôrL?-õÔVDMõÕXauÖ\w­ÂÖ^‡-vÉÒŽmöÙ3€öÚh«ÍöÛa» ÷ÜXËM÷ÝOÛ÷ÞHëÍ÷ß4û øà( NøáŽøâŒ7îøãG.ùä”Wnùå˜g®ùæœwîùç ‡.ú褗nú騯;libwww/Library/User/Paper/LibraryPaper.html0100644000076400001440000010431606526451176020445 0ustar danielusers Towards a Uniform Library of Common Code
    Henrik Frystyk, Håkon W Lie, CERN

    [WWW Icon]

    Towards a Uniform Library of Common Code

    A Presentation of the CERN World-Wide Web Library

    NoteThis paper was presented at the WWW Chicago Conference October 1994 and does not represent an up to date view of the Library. Please read the Libwww Architecture for the latest information.


    Note

    This is a slightly revised version of the paper submitted for the WWW Chicago Conference.

    This paper is also available in Postscript for A4 and PostScript for 8.5x11".

    Abstract

    This paper describes the current status of the World-Wide Web Library of Common Code and the work done in order to start the convergence process towards a uniform Library. Currently many World-Wide Web applications are using different versions of the Library with a set of added functionality that is often either incompatible with the other versions or represents an overlap of code development. A new initiative has been taken at CERN in the context of the W3C collaboration with MIT in order to converge the current versions of the Library so that existing and future World-Wide Web applications have a powerful and uniform interface to the Internet.

    1. Introduction

    The CERN World-Wide Web Library of Common Code is a general code base that can be used as the basis for building World-Wide Web clients and servers. It allows software suppliers and researchers to achieve the state of the art technology and derive their own resources to pushing forward that technology. As an example, the CERN Line Mode Browser, the NeXTStep Editor and the HTTP Server (including the CERN Proxy Server) are all built on top of the Library. It contains code for accessing HTTP, FTP, Gopher, NNTP, and WAIS servers, perform telnet sessions and access the local file system. Furthermore it provides functionality for loading, parsing and caching graphic objects plus a wide spectrum of generic programming utilities. The development of the World-Wide Web Library of Common Code was started by Tim Berners-Lee in 1990. Ever since the code has been subject to changes due to modifications in the architectural model, additions of new features etc. This paper describes the current architecture in the Library and some of the ongoing projects of implementing new features and changing the architecture. The Library is available from the Status of the Library of Common Code Page.

    2. Implementation and Portability Concerns

    The Library is written in plain C and is especially designed to be used on a large set of different platforms. Currently it supports more than 15 Unix flavors and VMS. A year ago it also supported the MS-DOS, Macintosh, VM/CMS, and other platforms but this was with a limited set of the current functionality. Recently a new initiative has been taken at CERN as a result of the "First International Conference on the World-Wide Web" held in Geneva, Switzerland, May 1994. It involves the development teams from Lynx, Spyglass, NCSA, OmniWeb and others with special interest in the development of a uniform Library. The goal is to converge current versions of the Library into a single version which can support a broad spectrum of applications. Current topics of discussion and development involve:

    • Re-porting the Library to MS-DOS and Macintosh
    • Enhancing the current architecture of the Library - especially on defining a client API
    • Adding new features such as security, enhanced error handling, multiple threads, format converters, protocol modules.
    • Whether to use ANSI C and Posix standards and the possible portability problems this might involve

    Especially the last topic is a practical problem as many platforms do not fully support the standards as defined, but only implements a subset of these. It is therefore a compromise between choosing the largest possible subset of the set of standardized functions with a minimal loss in portability. Unfortunately there is no simple answer to this problem.

    3. Library Architecture

    The general architecture of the Library as viewed from a client is illustrated in Figure 1. Servers and proxy servers have a slightly different view of the Library, but the client view is the most descriptive.

    [Library]

    The flow of the Library shows that all network communication and parsing of data objects is handled internally. The client then has to present the information to the user. The main elements in the figure are explained below. A more detailed description of the implementation of the Library is given in Library Internals and Programmer's Guide.

    Graphic Object
    A graphic object is a displayable entity handled and maintained by the client. It is built from the data contained in a server response upon a successful request initiated by the user. The data can be of any format handled by the client. The object can either be built directly from the data, e.g., if the data object returned is an HTML document, or it can be generated from a format converter within the Library. An example of the latter could be the generation of an HTML object from an FTP directory listing (7-bit ASCII). Graphic objects are in general coded differently on different GUI platforms. The graphic object is responsible for displaying itself, catching mouse clicks, and calling the Anchor Manager, either directly or via the History and Navigation Manager. Often the more common term "document" is used to describe the logical entity which a graphics object represents and displays. The client can keep the latest generated documents in memory in order to speed up back-tracking through already visited documents.
    Stream Manager
    The Stream Manager takes care of the transportation of streams of data from the Internet to the client and vice versa. This module is described in more detail in Section 4.

    Anchor Manager
    When a request is passed from the client to the Library it always has an anchor associated with it. An anchor is an object representing the URI of either a graphic or a fragment of a graphic object. It contains all information known about the URI. The Anchor Manager registers all requested anchors together with anchors found when parsing hypertext objects. The anchors are stored in a hash table so that multiple references to a URI all points to the same graphic object. It furthermore binds all registered anchors together corresponding to the logical binding between the related data objects. In other words, this module generates an internal model of the part of the Web the user has been in touch with. The actual bindings between anchors are described in more detail in Section 5.

    Navigation and History
    This module keeps track of all visited anchors. The set of visited anchors is always less than or equal to the total set of anchors registered in the Anchor Manager. Whereas the Anchor Manager manages a small part of the Web, this module keeps an ordered list of all visited anchors so the user can do quick navigation through a history list.

    Client Cache Manager
    This is a single-user disk cache module specifically for WWW Clients. It is used to save data objects once they have been downloaded from the Internet. The difference between a graphic object stored in memory and a cached data object is that the former is already parsed and can immediately be displayed to the user whereas the cached object must be parsed into a graphic object. The CERN proxy server has its own cache manager to handle a large scale cache that can serve hundreds of clients connected to it. The client cache is especially made for clients not using a proxy cache or having a very slow link but a large local temporary storage.

    Protocol Manager
    The Protocol Manager is invoked by the Anchor Manager in order to access a document not found in memory or in the cache (for the proxy server it is the proxy cache). Each protocol module is responsible for establishing the connection to the remote server (or the local file-system) and extract information using a specific access method. Depending on the protocol, the Protocol Module either builds a hypertext object itself from the server response, or it passes a socket descriptor to the Stream Manager for parsing by one of the parser modules.

    Error Manager
    This module manages an information stack which contains information of all errors occurred during the communication with a remote server or simply information about the current state. Using a stack for this kind of information provides the possibility of nested error messages like:
    	Error 500
    	Can't access document (ftp://ftp.w3.org/foo.bar)
    	Reason: FTP-server replies: foo.bar: No such file or directory
    
    Directory Listing Manager
    This module handles long directory listings with icons for HTTP and FTP, and local file access. Long directory listings are supported for Unix, VMS, and Window NT.

    3.1 Modularity of the Library

    The Stream Manager and the Protocol Manager are both designed in a highly modular style in that they use pointers to functions when they decide on what protocol or parser to use respectively. For the Protocol Manager, the actual binding between an access scheme specified in the URL and the protocol module used is done in a separate protocol structure which can be setup at run-time. Likewise for the Stream Manager where the binding is based on MIME-types, either found directly in the response code from the remote server or by guessing. This model makes it very easy to install new stream converters and protocol modules.

    4. The Stream Concept

    Streams are the main method used in the Library for transporting data from the network to the client or vice versa, and they do therefore deserve a more thorough presentation.

    4.1 What is a Stream

    A stream is an object which accepts sequences of characters. It is a destination of data which can be thought of much like an output stream in C++ or an ANSI C-file stream for writing data to a disk or another pheripheral device. The Library defines a generic stream class with five methods as illustrated in Figure 2. The output is also a stream and is often referred to as the "target" or "sink". This class is a superclass of all other stream classes in the Library and it provides a uniform interface to all stream objects regardless of what stream sub-class they originate from.

    [Stream]

    Streams can be cascaded so that one stream writes into another using one or more of the methods shown in Figure 2. This means that a required processing of data, for example reading data from the Internet can be done as the total effect of several cascaded streams. The Library currently includes a large set of specific stream modules for writing to an ANSI file structure, writing to a socket, stripping Carriage Returns, splitting a stream into two (used for caching) etc. The stream-based architecture allows the Library (and hence applications built on top of it) to be event-driven in the sense that when input arrives, it is put into a stream, and any necessary actions then cascade off this event. An event can either be data arriving from the Internet, or data arriving from the client application. The latter would be the case when the client is posting a data object to a remote server.

    4.2 Structured Streams

    A structured stream is a subclass of a stream, but instead of just accepting data, it also accepts the SGML "begin element", "end element", and "put entity" as illustrated in Figure 3

    [StrucStream]

    A structured stream therefore represents a structured document and can be thought of as the output from an SGML parser. It is more efficient for modules which generate hypertext objects to output a structured stream than to output SGML which is then parsed. The elements and entities in the stream are referred to by numbers, rather than strings. A DTD contains the mapping between element names and numbers, so each instance of a structured stream is associated with a corresponding DTD. The only DTD which is currently in the Library is an extended version of the HTML DTD level 1, but current work is done to update this to comply with the emerging HTML level 3 specification.

    4.3 Format Conversion Using the Stream Stack

    The stream stack is used to select the most appropriate converter from the input format given by the protocol modules and the desired output format specified by the client. A converter is simply a stream which is registered as a converter from a given input MIME-type to a output MIME-type. If more than one converter is capable of doing the same conversion a quality factor is used to (subjectively) distinguish which one is the best. Currently the stream stack module only manages a single converter at the time, for example from text/plain to text/html, that is, the size of the stack is always 1. However, work is being done to expand the stack so that several converters can be cascaded in order to obtain the desired conversion.

    5. Anchors

    Anchors represent any references to graphic objects which may be the sources or destinations of hypertext links. There are basically two types of anchors: parent anchors which represent whole graphic objects and child anchors which represent parts of a graphic object. As mentioned in Section 3, every request and hence every graphic object has a parent anchor associated with it. Anchors exist throughout the lifetime of the client, but as this generally is not the case for graphic objects, it is possible to have a parent anchor without a graphic object. If the data object is stored in the client cache, the parent anchor contains a link to it so that the client can access it through the Cache Manager. Both types of anchors are subclasses of a generic anchor class which defines a set of outgoing links to where the anchor points. The relationship between parent anchors and child anchors is illustrated in Figure 4.

    [Anchors]

    Every parent anchor points to a remote data object. In the case of posting an anchor to a remote server, the data object is yet to be created. The client can assign a URI for the object but it might be overwritten (or completely denied) by the server. In Figure 4, parent A has no associated graphic object. This can either be because the anchor has not yet been requested by the user or the graphic object has been discarded from memory. When child B1 is created, pointing to parent A, parent B is registered in parent A as pointing to A. The same is the case for the link between child BL and A2, but parent B is only registered once in parent A (this is marked with b in the figure). The same is the case for the links marked a and c. A child can have more than one link to other anchors as indicated in child BL. This is often the case using the POST method, where for example the same data object is to posted to a News group, a mailing list and a HTTP server.

    6. Implementation of the HTTP Module

    The HTTP client is based on the HTTP 1.0 specification but is backwards compatible with version 0.9. The major difference between this and previous implementations is that this version is a state machine based on the state diagram illustrated in Figure 5. As will be discussed in Section 8, the state-machine design has some inherent advantages which makes it suitable in a multi-threaded environment, even though the HTTP protocol is stateless by nature.

    [HTTP]

    The individual states and the transitions between them are explained below.

    Begin
    This state is the initial state where the HTTP module sets up the required data structures needed for handling the request.
    Need Connection
    The HTTP client is ready for setting up a connection to the remote host. The connection is always initiated by a connect system call. This procedure has been optimized by using a cache of visited host names as will be explained in Section 7.
    Need Request
    After connection establishment, the module sends the HTTP request to the remote server. The request consists of an HTTP header line, a set of MIME Headers, and possibly a data object to be posted to the server. Current methods supported in the module are GET and HEAD, but support for PUT and POST is under development. The supported MIME-headers are:
    • Accept: The current implementation uses one accept line for each MIME-type supported by the client. For advanced clients this means that the "Accept:" sequence is repeated 20-30 times which gives a overhead of 200-300 bytes per request (including the CRLF telnet EOL-sequence). This should be changed so that either a comma separated list is transmitted instead or only the MIME content types without any subtypes.
    • Referer: If any parent anchor is known to the requested URI it is sent in the referer field. This is to let the server know what link has led to the current request. Nothing is sent if the parent anchor is unknown or does not exist.
    • From: The full email address is sent along the request. It is meant as an informative service to the recipient and can be changed to any value the user wishes to sign the request with. As it is possible to manipulate the email address, this field can not be used as identity verification for access authentication.
    • User-Agent: The user agent is by many clients currently generated in a somewhat verbose format. The goal is to make this field machine readable so it can be used on the server side to perform individual actions as a function of the client implementation. As a side effect it can also be used for statistics etc.
    • Authorization: If the user already has typed in a user ID and a password for access authorization in a previous HTTP request the HTTP client also transmits the authorization MIME-header. However, this does not guarantee that the user ID and password are sufficient for actually accessing the requested resource.
    Sent Request
    The client waits until a response is given from the server or the connection is timed out in case of an error situation. The client is capable of differentiating HTTP 0.9 responses from HTTP 1.0 responses.
    Need Access Authorization
    If a 401 Unauthorized status code is returned, the module prompts the user for a user ID and a password. The connection is closed before the user is actually asked, so any new request initiated upon a 401 status code causes a new connection to be established.
    Redirection
    The module supports both a temporarily (302) and a permanent (301) redirection code returned from the server. In both cases, the connection is closed and the Protocol Manager is called recursively until a document is found, an error has occurred, or the maximum number of redirections has been reached. The URI returned in the redirection response from the remote server is parsed back to the client via the Error and Information Manager. If it is a 301 code, an intelligent client can use this information to change the document in which the redirected URI originates.
    Need Body
    If a body is included in the response from the server, the module reads the data from the network and direct it to the Stream Manager which sets up a stream stack to handle the desired format conversion.
    Got Data
    When the data object has been loaded from the Internet, the module terminates the request and handles control back to the client.
    Error or Failure
    If at any point in the request handling an error occurs the request is aborted and the connection closed. All information about the error is parsed back to the client via the Error and Information Manager. As the HTTP protocol is stateless, all errors are fatal between the server and the client. If the erroneous request is to be corrected, the state machine jumps back to the initial state.

    7. Cache of Host Names

    As excessive communication with Domain Name Servers (DNS) can produce a significant time-overhead, a new memory cache of host names have been implemented to limit the amount of requests to DNS. Once a host name has been resolved into an IP-address, it is stored in the cache. The entry stays in the cache until an error occurs when connecting to the remote host or it is removed during garbage collection. Multi-homed hosts are treated specially as all available IP-addresses returned from DNS are stored in the cache. Every time a request is made to the host, the time-to-connect is measured and a weight function is calculated to indicate how fast the IP-address was. The weight function used is

    [Equation]

    where [alpha]" indicates the sensitivity of the function and [Delta] is the connect time. If one IP-address is not reachable a penalty of x seconds is added to the weight where the penalty is a function of the error returned from the "connect" call. The next time a request is initiated to the remote host, the IP-address with the smallest weight is used. A problem with both the host cache and the document cache (either on server side or client side) is to detect when two URLs are equivalent. The only way this can be done internally in the Library is to canonicalize the URLs before they are compared. This has for some time been done by looking at the path segment of the URLs and remove redundant information by converting URLs like

    	foo/./bar/ = foo/redundant/../bar/ = foo/bar/
    

    The method is now optimized and expanded so that also host names are canonicalized. Hence the following URLs are all recognized to be identical:

    	http://info/ = http://info.cern.ch:80/ = http://INFO.CeRn.CH/ =
    	http://info.cern.ch./ = http://info.cern.ch/
    

    However, the canonicalization does not recognize alias host names which would require that this information is stored in the cache.

    8. Support for Multi-threaded I/O Operation

    In a single-process, single-threaded environment all requests to, e.g., the I/O interface traditionally block any further processing. However, a combination of a multi-process or multi-threaded implementation makes provision for the user to request several independent URIs at the same time without getting blocked by slow I/O operations. As a World-Wide Web client is expected to use much of the execution time doing I/O operation such as "connect" and "read", a high degree of optimization can be obtained if multiple threads can run at the same time. This section describes the current implementation of multiple threads in the HTTP Module. Later it is expected that other protocol modules are added. The NNTP, Gopher, and FTP module have all been rewritten as state machines so they can with minor changes be included in the event-loop.

    8.1 Platform Independent Implementation

    The major concern in the design of the multi-threaded Library has been to make a platform independent implementation which excludes use of traditional thread packages like DECthreads. IEEE has publicized the POSIX standard 1003.4 for multi-threaded programming but even this will eventually limit the portability referring to the discussion in Section 2. Instead, the multi-threaded functionality of the HTTP client has been designed to be used in a single-processor, single-threaded environment as illustrated in Figure 6

    [Thread]

    The difference between this technique and "traditional" threads is that all information about a thread is stored in a data object which exists throughout the lifetime of the thread. This implies that the following rules must be kept regarding memory management:

    • Global variables can be used only if they at all time are independent of the current state of the active thread.
    • Automatic variables can be used only if they are initialized on every entry to the function and stay state independent of the current thread throughout their lifetime.
    • All information necessary for completing a thread must be kept in an autonomous data object that is passed round the control flow via the stack.

    These rules makes it possible to imply a multi-threaded data model using only one stack without causing portability problems as it is all done in plain C.

    8.2 Modes of Operation

    In order to keep the functionality of the Library as general as possible, three different modes of operation are implemented:

    Base Mode
    This mode is strictly single-threaded. The difference between this mode and the other two is that all sockets are made blocking instead of non-blocking. The mode preserves compatibility with World-Wide Web applications with a single-threaded approach. Currently this mode does not provide interruptible I/O as this is a integral part of the event-loop.
    Active Mode
    In this mode the event-loop is placed in the Library. This mode is for dumb terminal clients which can interrupt the execution through the keyboard. The client can, however, still be multi-threaded in the sense that it can actively pre-fetch documents not yet requested by the user. If a key is hit, the Library calls a call-back function in the client so the client can decide whether the current operation should be interrupted or not. If so, the Library stops all I/O activity and handles the execution back to the client. The active mode should cause only minor changes to the client in order to obtain a simple form of multiple threads and interruptible I/O.
    Passive mode
    This mode requires the most advanced clients, for example GUI clients. The event-loop is now placed outside the Library. On every URI request from the client, the Library initiates the connection and as soon as it normally would block, it returns a list of active socket descriptors to the client. When the client is notified about an event on a socket, it calls a Library socket-handler passing the socket number. Then the socket handler finds the corresponding request and starts the thread. As soon as the thread would perform a blocking I/O operation, the socket handler stops the thread and returns the execution to the client event-loop.

    8.3 Control Flow

    A consequence of having multiple threads in the Library is that the control flow changes to be event driven where any action is initiated by an event either caused by the client or the network interface. However, as the current implementation of multiple threads is valid for HTTP access only, the control flow of the Library from Figure 1 has been preserved but with the addition of an event-loop in the HTTP module. All other access schemes still use blocking I/O and the user will not notice any difference from the current implementation. The result of this is that full multi-threaded functionality is enabled only if the client uses consecutive HTTP requests. The internal event-loop is based on call-back functions and events on a set of registered socket descriptors as illustrated in Figure 7.

    [EventLoop]

    The event-loop handles two kinds of call back functions: Ones that are internal Library functions such as the specific protocol modules, and the ones that require an action taken by the client application.

    8.4 Interrupting a HTTP Request

    The interrupt handler implemented for active mode is non-eager as it is a part of the select function in the socket event-loop. That is, an interrupt through standard input is caught when the executing thread is about to execute a blocking I/O operation such as read from the Internet and execution is handled back to the event-loop. The reason for this is that the user is not blocked even though the interrupt does not get caught right away so it is not as critical as in a single-threaded environment. In passive mode the client has complete control over when to catch interrupts from the user and also how and when to handle them.

    9. Conclusions and Future Developments

    The Library of Common Code has recently gone through a phase of heavy code development and set of new features are either being developed or is already available in the current version. However, in order to have any effect on the general evolution of the World-Wide Web project, much work must still be put into the development and maintenance of the code. Furthermore it is vital that World-Wide Web developers see the Library as a powerful tool that offers a wide spectrum of functionality relevant to World-Wide Web applications. The functionality must span fundamental World-Wide Web features as well as experimental implementations such as gateways and format converters. We believe that the only way this can be achieved is by cooperation between the developers and the WWW-team at CERN which has the responsibility of organizing and synchronizing development on the Library. Therefore, the goal of this paper is to show the current state of the Library and at the same time to invite interested parties to join the working group for future developments. Some of the plans for new features are

    • Security encryption and authentication
    • New MIME-parser which replaces a large number of small sub-parsers
    • Implementing general support for Put and Post methods for HTTP, NNTP, and SMTP
    • Implementation of forms support
    • Integrating a WhoIs++ module as a new URI access scheme
    • Gateway to a Hyper-G server as a new access scheme

    Acknowledgments

    We would like to thank Tim Berners-Lee and the large group of contributors for having started the work on the World-Wide Web Library of Common Code. We would also like to thank the current working group for inspiration and attributing code so that new features are integrated into the Library.

    This work has been partly sponsored by the Norwegian Research Council.

    Authors

    Henrik Frystyk Nielsen, frystyk@info.cern.ch

    Joined the World-Wide Web Team at CERN, February 1994. He completed his MSc degree as Engineer of Telecommunications at Aalborg University, Denmark, in august 1994. Henrik is working in the CN division as a code developer in the World-Wide Web team. His research interests are enhanced network protocols and communications systems. Henrik is currently responsible for the World-Wide Web Library of Common Code and the Line Mode Browser.

    Håkon W Lie, howcome@info.cern.ch

    Håkon is currently a Scientific Associate with the WWW project at CERN while on leave from Norwegian Telecom Research where he holds a Research Scientist Position. At CERN he works on the client side of the Library. He holds an MS from Massachusetts Institute of Technology where he worked in the Electronic Publishing group of the MIT Media Lab.

    Authors' present Address

    CERN, 1211 Geneva 23, Switzerland


    Henrik Frystyk, Håkon W. Lie, CERN

    libwww/Library/User/Paper/LibraryPaper8.5x11.ps0100644000076400001440000037213506302442062020700 0ustar danielusers%!PS-Adobe-3.0 %%BoundingBox: (atend) %%Pages: (atend) %%PageOrder: (atend) %%DocumentFonts: (atend) %%Creator: Frame 4.0 %%DocumentData: Clean7Bit %%EndComments %%BeginProlog % % Frame ps_prolog 4.0, for use with Frame 4.0 products % This ps_prolog file is Copyright (c) 1986-1993 Frame Technology % Corporation. All rights reserved. This ps_prolog file may be % freely copied and distributed in conjunction with documents created % using FrameMaker, FrameBuilder and FrameViewer as long as this % copyright notice is preserved. % % Frame products normally print colors as their true color on a color printer % or as shades of gray, based on luminance, on a black-and white printer. The % following flag, if set to True, forces all non-white colors to print as pure % black. This has no effect on bitmap images. /FMPrintAllColorsAsBlack false def % % Frame products can either set their own line screens or use a printer's % default settings. Three flags below control this separately for no % separations, spot separations and process separations. If a flag % is true, then the default printer settings will not be changed. If it is % false, Frame products will use their own settings from a table based on % the printer's resolution. /FMUseDefaultNoSeparationScreen true def /FMUseDefaultSpotSeparationScreen true def /FMUseDefaultProcessSeparationScreen false def % % For any given PostScript printer resolution, Frame products have two sets of % screen angles and frequencies for printing process separations, which are % recomended by Adobe. The following variable chooses the higher frequencies % when set to true or the lower frequencies when set to false. This is only % effective if the appropriate FMUseDefault...SeparationScreen flag is false. /FMUseHighFrequencyScreens true def % % PostScript Level 2 printers contain an "Accurate Screens" feature which can % improve process separation rendering at the expense of compute time. This % flag is ignored by PostScript Level 1 printers. /FMUseAcccurateScreens true def % % The following PostScript procedure defines the spot function that Frame % products will use for process separations. You may un-comment-out one of % the alternative functions below, or use your own. % % Dot function /FMSpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub } {dup mul exch dup mul add 1 exch sub }ifelse } def % % Line function % /FMSpotFunction { pop } def % % Elipse function % /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add % sqrt 1 exch sub } def % % /FMversion (4.0) def /FMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def /FMPColor FMLevel1 { false /colorimage where {pop pop true} if } { true } ifelse def /FrameDict 400 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } bind def } if /FMshowpage /showpage load def /FMquit /quit load def /FMFAILURE { dup = flush FMshowpage /Helvetica findfont 12 scalefont setfont 72 200 moveto show FMshowpage FMquit } def /FMVERSION { FMversion ne { (Frame product version does not match ps_prolog!) FMFAILURE } if } def /FMBADEPSF { (PostScript Lang. Ref. Man., 2nd Ed., H.2.4 says EPS must not call X ) dup dup (X) search pop exch pop exch pop length 4 -1 roll putinterval FMFAILURE } def /FMLOCAL { FrameDict begin 0 def end } def /concatprocs { /proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }def FrameDict begin /FMnone 0 def /FMcyan 1 def /FMmagenta 2 def /FMyellow 3 def /FMblack 4 def /FMcustom 5 def /FrameNegative false def /FrameSepIs FMnone def /FrameSepBlack 0 def /FrameSepYellow 0 def /FrameSepMagenta 0 def /FrameSepCyan 0 def /FrameSepRed 1 def /FrameSepGreen 1 def /FrameSepBlue 1 def /FrameCurGray 1 def /FrameCurPat null def /FrameCurColors [ 0 0 0 1 0 0 0 ] def /FrameColorEpsilon .001 def /eqepsilon { sub dup 0 lt {neg} if FrameColorEpsilon le } bind def /FrameCmpColorsCMYK { 2 copy 0 get exch 0 get eqepsilon { 2 copy 1 get exch 1 get eqepsilon { 2 copy 2 get exch 2 get eqepsilon { 3 get exch 3 get eqepsilon } {pop pop false} ifelse }{pop pop false} ifelse } {pop pop false} ifelse } bind def /FrameCmpColorsRGB { 2 copy 4 get exch 0 get eqepsilon { 2 copy 5 get exch 1 get eqepsilon { 6 get exch 2 get eqepsilon }{pop pop false} ifelse } {pop pop false} ifelse } bind def /RGBtoCMYK { 1 exch sub 3 1 roll 1 exch sub 3 1 roll 1 exch sub 3 1 roll 3 copy 2 copy le { pop } { exch pop } ifelse 2 copy le { pop } { exch pop } ifelse dup dup dup 6 1 roll 4 1 roll 7 1 roll sub 6 1 roll sub 5 1 roll sub 4 1 roll } bind def /CMYKtoRGB { dup dup 4 -1 roll add 5 1 roll 3 -1 roll add 4 1 roll add 1 exch sub dup 0 lt {pop 0} if 3 1 roll 1 exch sub dup 0 lt {pop 0} if exch 1 exch sub dup 0 lt {pop 0} if exch } bind def /FrameSepInit { 1.0 RealSetgray } bind def /FrameSetSepColor { /FrameSepBlue exch def /FrameSepGreen exch def /FrameSepRed exch def /FrameSepBlack exch def /FrameSepYellow exch def /FrameSepMagenta exch def /FrameSepCyan exch def /FrameSepIs FMcustom def setCurrentScreen } bind def /FrameSetCyan { /FrameSepBlue 1.0 def /FrameSepGreen 1.0 def /FrameSepRed 0.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 1.0 def /FrameSepIs FMcyan def setCurrentScreen } bind def /FrameSetMagenta { /FrameSepBlue 1.0 def /FrameSepGreen 0.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 1.0 def /FrameSepCyan 0.0 def /FrameSepIs FMmagenta def setCurrentScreen } bind def /FrameSetYellow { /FrameSepBlue 0.0 def /FrameSepGreen 1.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 1.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMyellow def setCurrentScreen } bind def /FrameSetBlack { /FrameSepBlue 0.0 def /FrameSepGreen 0.0 def /FrameSepRed 0.0 def /FrameSepBlack 1.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMblack def setCurrentScreen } bind def /FrameNoSep { /FrameSepIs FMnone def setCurrentScreen } bind def /FrameSetSepColors { FrameDict begin [ exch 1 add 1 roll ] /FrameSepColors exch def end } bind def /FrameColorInSepListCMYK { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsCMYK { pop true exit } if } forall dup true ne {pop false} if } bind def /FrameColorInSepListRGB { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsRGB { pop true exit } if } forall dup true ne {pop false} if } bind def /RealSetgray /setgray load def /RealSetrgbcolor /setrgbcolor load def /RealSethsbcolor /sethsbcolor load def end /setgray { FrameDict begin FrameSepIs FMnone eq { RealSetgray } { FrameSepIs FMblack eq { RealSetgray } { FrameSepIs FMcustom eq FrameSepRed 0 eq and FrameSepGreen 0 eq and FrameSepBlue 0 eq and { RealSetgray } { 1 RealSetgray pop } ifelse } ifelse } ifelse end } bind def /setrgbcolor { FrameDict begin FrameSepIs FMnone eq { RealSetrgbcolor } { 3 copy [ 4 1 roll ] FrameColorInSepListRGB { FrameSepBlue eq exch FrameSepGreen eq and exch FrameSepRed eq and { 0 } { 1 } ifelse } { FMPColor { RealSetrgbcolor currentcmykcolor } { RGBtoCMYK } ifelse FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind def /sethsbcolor { FrameDict begin FrameSepIs FMnone eq { RealSethsbcolor } { RealSethsbcolor currentrgbcolor setrgbcolor } ifelse end } bind def FrameDict begin /setcmykcolor where { pop /RealSetcmykcolor /setcmykcolor load def } { /RealSetcmykcolor { 4 1 roll 3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat setrgbcolor pop } bind def } ifelse userdict /setcmykcolor { FrameDict begin FrameSepIs FMnone eq { RealSetcmykcolor } { 4 copy [ 5 1 roll ] FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and { 0 } { 1 } ifelse } { FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind put FMLevel1 not { /patProcDict 5 dict dup begin <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -1 -1 moveto 9 9 lineto stroke } bind def <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def end def /patDict 15 dict dup begin /PatternType 1 def /PaintType 2 def /TilingType 3 def /BBox [ 0 0 8 8 ] def /XStep 8 def /YStep 8 def /PaintProc { begin patProcDict bstring known { patProcDict bstring get exec } { 8 8 true [1 0 0 -1 0 8] bstring imagemask } ifelse end } bind def end def } if /combineColor { FrameSepIs FMnone eq { graymode FMLevel1 or not { [/Pattern [/DeviceCMYK]] setcolorspace FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor } { FrameCurColors 3 get 1.0 ge { FrameCurGray RealSetgray } { FMPColor graymode and { 0 1 3 { FrameCurColors exch get 1 FrameCurGray sub mul } for RealSetcmykcolor } { 4 1 6 { FrameCurColors exch get graymode { 1 exch sub 1 FrameCurGray sub mul 1 exch sub } { 1.0 lt {FrameCurGray} {1} ifelse } ifelse } for RealSetrgbcolor } ifelse } ifelse } ifelse } { FrameCurColors 0 4 getinterval aload FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and FrameSepIs FMcustom eq and { FrameCurGray } { 1 } ifelse } { FrameSepIs FMblack eq {FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse graymode FMLevel1 or not { [/Pattern [/DeviceGray]] setcolorspace FrameCurPat setcolor } { graymode not FMLevel1 and { dup 1 lt {pop FrameCurGray} if } if RealSetgray } ifelse } ifelse } bind def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /dpiranges [ 2540 2400 1693 1270 1200 635 600 0 ] def /CMLowFreqs [ 100.402 94.8683 89.2289 100.402 94.8683 66.9349 63.2456 47.4342 ] def /YLowFreqs [ 95.25 90.0 84.65 95.25 90.0 70.5556 66.6667 50.0 ] def /KLowFreqs [ 89.8026 84.8528 79.8088 89.8026 84.8528 74.8355 70.7107 53.033 ] def /CLowAngles [ 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 ] def /MLowAngles [ 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 ] def /YLowTDot [ true true false true true false false false ] def /CMHighFreqs [ 133.87 126.491 133.843 108.503 102.523 100.402 94.8683 63.2456 ] def /YHighFreqs [ 127.0 120.0 126.975 115.455 109.091 95.25 90.0 60.0 ] def /KHighFreqs [ 119.737 113.137 119.713 128.289 121.218 89.8026 84.8528 63.6395 ] def /CHighAngles [ 71.5651 71.5651 71.5651 70.0169 70.0169 71.5651 71.5651 71.5651 ] def /MHighAngles [ 18.4349 18.4349 18.4349 19.9831 19.9831 18.4349 18.4349 18.4349 ] def /YHighTDot [ false false true false false true true false ] def /PatFreq [ 10.5833 10.0 9.4055 10.5833 10.0 10.5833 10.0 9.375 ] def /screenIndex { 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for } bind def /getCyanScreen { FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getMagentaScreen { FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getYellowScreen { FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse screenIndex dup 3 1 roll get 3 1 roll get { 3 div {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat FMSpotFunction } } {/FMSpotFunction load } ifelse 0.0 exch } bind def /getBlackScreen { FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse screenIndex get 45.0 /FMSpotFunction load } bind def /getSpotScreen { getBlackScreen } bind def /getCompositeScreen { getBlackScreen } bind def /FMSetScreen FMLevel1 { /setscreen load }{ { 8 dict begin /HalftoneType 1 def /SpotFunction exch def /Angle exch def /Frequency exch def /AccurateScreens FMUseAcccurateScreens def currentdict end sethalftone } bind } ifelse def /setDefaultScreen { FMPColor { orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer } { orgxfer cvx settransfer } ifelse orgfreq organgle orgproc cvx setscreen } bind def /setCurrentScreen { FrameSepIs FMnone eq { FMUseDefaultNoSeparationScreen { setDefaultScreen } { getCompositeScreen FMSetScreen } ifelse } { FrameSepIs FMcustom eq { FMUseDefaultSpotSeparationScreen { setDefaultScreen } { getSpotScreen FMSetScreen } ifelse } { FMUseDefaultProcessSeparationScreen { setDefaultScreen } { FrameSepIs FMcyan eq { getCyanScreen FMSetScreen } { FrameSepIs FMmagenta eq { getMagentaScreen FMSetScreen } { FrameSepIs FMyellow eq { getYellowScreen FMSetScreen } { getBlackScreen FMSetScreen } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse } bind def end /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgrxfer FMLOCAL /orggxfer FMLOCAL /orgbxfer FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /orgrproc FMLOCAL /orggproc FMLOCAL /orgbproc FMLOCAL /organgle FMLOCAL /orgrangle FMLOCAL /orggangle FMLOCAL /orgbangle FMLOCAL /orgfreq FMLOCAL /orgrfreq FMLOCAL /orggfreq FMLOCAL /orgbfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /edown FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne /manualfeed exch def /paperheight exch def /paperwidth exch def 0 ne /FrameNegative exch def 0 ne /edown exch def /yscale exch def /xscale exch def FMLevel1 { manualfeed {setmanualfeed} if /FMdicttop countdictstack 1 add def /FMoptop count def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} {false} ifelse { (Can't select requested paper size for Frame print job!) FMFAILURE } if count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for } {{1 dict dup /PageSize [paperwidth paperheight]put setpagedevice}stopped { (Can't select requested paper size for Frame print job!) FMFAILURE } if {1 dict dup /ManualFeed manualfeed put setpagedevice } stopped pop } ifelse FMPColor { currentcolorscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def cvlit /orgbproc exch def /orgbangle exch def /orgbfreq exch def cvlit /orggproc exch def /orggangle exch def /orggfreq exch def cvlit /orgrproc exch def /orgrangle exch def /orgrfreq exch def currentcolortransfer FrameNegative { 1 1 4 { pop { 1 exch sub } concatprocs 4 1 roll } for 4 copy setcolortransfer } if cvlit /orgxfer exch def cvlit /orgbxfer exch def cvlit /orggxfer exch def cvlit /orgrxfer exch def } { currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def currenttransfer FrameNegative { { 1 exch sub } concatprocs dup settransfer } if cvlit /orgxfer exch def } ifelse end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /pwid FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch dup /pwid exch def neg translate pop }{ pop /pwid exch def } ifelse edown { [-1 0 0 1 pwid 0] concat } if 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 0 paperheight lineto 0 0 lineto 1 setgray fill xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin dup array /fillvals exch def dict /patCache exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def % See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714. % "...the following operators MUST NOT be used in an EPS file:" (emphasis ours) /banddevice {(banddevice) FMBADEPSF} def /clear {(clear) FMBADEPSF} def /cleardictstack {(cleardictstack) FMBADEPSF} def /copypage {(copypage) FMBADEPSF} def /erasepage {(erasepage) FMBADEPSF} def /exitserver {(exitserver) FMBADEPSF} def /framedevice {(framedevice) FMBADEPSF} def /grestoreall {(grestoreall) FMBADEPSF} def /initclip {(initclip) FMBADEPSF} def /initgraphics {(initgraphics) FMBADEPSF} def /initmatrix {(initmatrix) FMBADEPSF} def /quit {(quit) FMBADEPSF} def /renderbands {(renderbands) FMBADEPSF} def /setglobal {(setglobal) FMBADEPSF} def /setpagedevice {(setpagedevice) FMBADEPSF} def /setshared {(setshared) FMBADEPSF} def /startjob {(startjob) FMBADEPSF} def /lettertray {(lettertray) FMBADEPSF} def /letter {(letter) FMBADEPSF} def /lettersmall {(lettersmall) FMBADEPSF} def /11x17tray {(11x17tray) FMBADEPSF} def /11x17 {(11x17) FMBADEPSF} def /ledgertray {(ledgertray) FMBADEPSF} def /ledger {(ledger) FMBADEPSF} def /legaltray {(legaltray) FMBADEPSF} def /legal {(legal) FMBADEPSF} def /statementtray {(statementtray) FMBADEPSF} def /statement {(statement) FMBADEPSF} def /executivetray {(executivetray) FMBADEPSF} def /executive {(executive) FMBADEPSF} def /a3tray {(a3tray) FMBADEPSF} def /a3 {(a3) FMBADEPSF} def /a4tray {(a4tray) FMBADEPSF} def /a4 {(a4) FMBADEPSF} def /a4small {(a4small) FMBADEPSF} def /b4tray {(b4tray) FMBADEPSF} def /b4 {(b4) FMBADEPSF} def /b5tray {(b5tray) FMBADEPSF} def /b5 {(b5) FMBADEPSF} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fw 2 div add fy fh 2 div add translate rotate fw 2 div neg fh 2 div neg translate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate /FMdicttop countdictstack 1 add def /FMoptop count def } bind def /FMENDEPSF { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } bind def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } bind def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } bind def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end statusdict begin stopped end } bind def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } bind def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped end } {true} ifelse } bind def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def FMPColor { /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def } ifelse /K { FMPrintAllColorsAsBlack { dup 1 eq 2 index 1 eq and 3 index 1 eq and not {7 {pop} repeat 0 0 0 1 0 0 0} if } if FrameCurColors astore pop combineColor } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setPatternMode { FMLevel1 { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne FrameNegative {not} if {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen offbits offbits onbits add div FrameNegative {1.0 exch sub} if /FrameCurGray exch def } { pop pop dup patCache exch known { patCache exch get } { dup patDict /bstring 3 -1 roll put patDict 9 PatFreq screenIndex get div dup matrix scale makepattern dup patCache 4 -1 roll 3 -1 roll put } ifelse /FrameCurGray 0 def /FrameCurPat exch def } ifelse /graymode false def combineColor } bind def /setGrayScaleMode { graymode not { /graymode true def FMLevel1 { setCurrentScreen } if } if /FrameCurGray exch def combineColor } bind def /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /PFill { graymode FMLevel1 or not { gsave 1 setgray eofill grestore } if } bind def /PStroke { graymode FMLevel1 or not { gsave 1 setgray stroke grestore } if stroke } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setPatternMode} {setGrayScaleMode} ifelse } bind def /V { PFill gsave eofill grestore } bind def /Vclip { clip } bind def /Vstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /N { PStroke } bind def /Nclip { strokepath clip newpath } bind def /Nstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /rad FMLOCAL /rarc {rad arcto } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath { x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath } stopped {x1 y1 x2 y2 R} if cleartomark } bind def /RRR { /rad exch def normalize /y4 exch def /x4 exch def normalize /y3 exch def /x3 exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath normalize moveto mark { x2 y2 x3 y3 rarc x3 y3 x4 y4 rarc x4 y4 x1 y1 rarc x1 y1 x2 y2 rarc closepath } stopped {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if cleartomark } bind def /C { grestore gsave R clip setCurrentScreen } bind def /CP { grestore gsave Y clip setCurrentScreen } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /Gstrk { savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /Gclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GG { gsave newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /GGclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GGstrk { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /Aclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /Astrk { Gstrk } bind def /AA { gsave savematrix newpath 3 index 2 div add exch 4 index 2 div sub exch normalize 3 index 2 div sub exch 4 index 2 div add exch translate rotate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /AAclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /AAstrk { GGstrk } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 7 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /rip { bis ris copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop ris gis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop gis bis copy pop dup add is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup dup 24 eq { pop pop 3 mul } { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL FMLevel1 { /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def % /u 0 def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def } { /colorSetup2 { [ /Indexed /DeviceRGB 255 {dup red exch get 255 div exch dup green exch get 255 div exch blue exch get 255 div} ] setcolorspace } bind def } ifelse /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch concatprocs settransfer } bind def /BITMAPCOLOR { /d 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def FMLevel1 { colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage } { colorSetup2 /is w d wbytes string def /cf currentfile def 7 dict dup begin /ImageType 1 def /Width w def /Height h def /ImageMatrix [w 0 0 h neg 0 h] def /DataSource {cf is readhexstring pop} bind def /BitsPerComponent d def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def FMLevel1 { colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage } { colorSetup2 /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def 7 dict dup begin /ImageType 1 def /Width w def /Height h def /ImageMatrix [w 0 0 h neg 0 h] def /DataSource {ip} bind def /BitsPerComponent d def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { /d 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 w getinterval def /gis im w w getinterval def /bis im w 2 mul w getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {w rip pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { /d 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 w getinterval def /gis im w w getinterval def /bis im w 2 mul w getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {w rip pop ris gis bis w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def /I { setdash } bind def /J { [] 0 setdash } bind def %%EndProlog %%BeginSetup (4.0) FMVERSION 1 1 0 0 612 792 0 1 14 FMDOCUMENT 0 0 /Times-Bold FMFONTDEFINE 1 0 /Times-Roman FMFONTDEFINE 2 0 /Times-Italic FMFONTDEFINE 3 0 /Helvetica FMFONTDEFINE 4 1 /Symbol FMFONTDEFINE 5 0 /Times-BoldItalic FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "11" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 14 Q 0 X 0 0 0 1 0 0 0 K (Authors) 72 710.67 T 0 10 Q (Henrik Frystyk Nielsen, frystyk@info.cern.ch:) 72 691.33 T 0 0 0 1 0 0 0 K 1 F 0.79 (Joined the World-Wide Web Team at CERN, February 1994. He) 273.23 691.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.39 (completed his MSc degree as Engineer of Telecommunications at Aalborg University, Denmark, in august 1994. Hen-) 72 679.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.61 (rik is working in the CN division as a code developer in the World-Wide Web team. His research interests are enhanced) 72 667.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.04 (network protocols and communications systems. Henrik is currently responsible for the World-Wide Web Library of) 72 655.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Common Code and the Line Mode Browser.) 72 643.33 T 0 0 0 1 0 0 0 K 0 F (H\214kon W. Lie, howcome@info.cern.ch:) 72 625.33 T 0 0 0 1 0 0 0 K 1 F -0.14 (H\214kon is currently a Scientific Associate with the WWW project at CERN) 242.96 625.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.01 (while on leave from Norwegian Telecom Research where he holds a Research Scientist Position. At CERN he works) 72 613.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.14 (on the client side of the Library. He holds an MS from Massachusetts Institute of Technology where he worked in the) 72 601.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Electronic Publishing group of the MIT Media Lab.) 72 589.33 T 0 0 0 1 0 0 0 K 0 F (Authors\325 present Address:) 72 571.33 T 0 0 0 1 0 0 0 K 1 F (CERN, 1211 Geneva 23, Switzerland) 187.82 571.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "11" 1 %%Page: "10" 2 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 14 Q 0 X 0 0 0 1 0 0 0 K (9. Conclusions and Futur) 72 710.67 T (e Developments) 222.67 710.67 T 0 0 0 1 0 0 0 K 1 10 Q 0 (The Library of Common Code has recently gone through a phase of heavy code development and set of new features) 72 691.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.34 (are either being developed or is already available in the current version[1]. However, in order to have any effect on the) 72 679.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.34 (general evolution of the World-Wide Web project, much work must still be put into the development and maintenance) 72 667.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.31 (of the code. Furthermore it is vital that World-Wide Web developers see the Library as a powerful tool that offers a) 72 655.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.41 (wide spectrum of functionality relevant to World-Wide Web applications. The functionality must span fundamental) 72 643.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.06 (World-Wide Web features as well as experimental implementations such as gateways and format converters. We be-) 72 631.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.09 (lieve that the only way this can be achieved is by cooperation between the developers and the WWW-team at CERN) 72 619.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.05 (which has the responsibility of organizing and synchronizing development on the Library. Therefore, the goal of this) 72 607.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.39 (paper is to show the current state of the Library and at the same time to invite interested parties to join the working) 72 595.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (group for future developments.) 72 583.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Some of the plans for new features are) 72 565.33 T 0 0 0 1 0 0 0 K (\245) 86.4 547.33 T (Security encryption and authentication) 93.6 547.33 T (\245) 86.4 529.33 T (New MIME-parser which replaces a lar) 93.6 529.33 T (ge number of small sub-parsers) 251.97 529.33 T (\245) 86.4 511.33 T (Implementing general support for Put and Post methods for HTTP) 93.6 511.33 T (, NNTP) 357.75 511.33 T (, and SMTP) 387.75 511.33 T (\245) 86.4 493.33 T (Implementation of forms support) 93.6 493.33 T (\245) 86.4 475.33 T (Integrating a WhoIs++ module as a new URI access scheme) 93.6 475.33 T (\245) 86.4 457.33 T (Gateway to a Hyper) 93.6 457.33 T (-G server as a new access scheme) 173.65 457.33 T 0 14 Q (Acknowledgments) 72 428.67 T 0 0 0 1 0 0 0 K 1 10 Q -0.4 (We would like to thank Tim Berners-Lee and the large group of contributors for having started the work on the World-) 72 409.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.22 (Wide Web Library of Common Code. We would also like to thank the current working group for inspiration and at-) 72 397.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (tributing code so that new features are integrated into the Library.) 72 385.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (This work has been partly sponsored by the Norwegian research Council.) 72 367.33 T 0 0 0 1 0 0 0 K 0 14 Q (Refer) 72 338.67 T (ences) 105.17 338.67 T 0 0 0 1 0 0 0 K 1 10 Q ([1]) 72 319.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.cern.ch/hypertext/WWW/Library/Status.html,) 93.6 319.33 T 0 0 0 1 0 0 0 K 2 F (Status of the Library of Common Code) 322.75 319.33 T 0 0 0 1 0 0 0 K 1 F ([2]) 72 307.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1.89 (http://info.cern.ch/hypertext/WWW/Library/Implementation/Overview.html,) 93.6 307.33 P 0 0 0 1 0 0 0 K 2 F 1.89 (Library Internals and Program-) 405.73 307.33 P (mer\325s Guide) 93.6 295.33 T 0 0 0 1 0 0 0 K 1 F ([3]) 72 283.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.7 (http://info.cern.ch/hypertext/WWW/Protocols/HTTP/HTTP2.html,) 93.6 283.33 P 0 0 0 1 0 0 0 K 2 F 0.7 ( HTTP: A Protocol for Networked Informa-) 361.37 283.33 P (tion) 93.6 271.33 T 0 0 0 1 0 0 0 K 1 F ([4]) 72 259.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 2.35 (http://info.cern.ch/hypertext/WWW/MarkUp/MarkUp.html,) 93.6 259.33 P 0 0 0 1 0 0 0 K 2 F 2.35 (Hypertext Markup Language \050HTML\051: Working) 338.42 259.33 P (and background Material) 93.6 247.33 T 0 0 0 1 0 0 0 K 1 F ([5]) 72 235.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (http://info.cern.ch/hypertext/WWW/Addressing/Addressing.html,) 93.6 235.33 P 0 0 0 1 0 0 0 K 2 F 0.25 (UR* and the Names and Addresses of WWW) 359.66 235.33 P (Objects) 93.6 223.33 T 0 0 0 1 0 0 0 K 1 F ([6]) 72 211.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.internet.isi.edu/0/in-notes/rfc/files/rfc1521.txt) 93.6 211.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K ([7]) 72 199.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.internet.isi.edu/0/in-notes/rfc/files/rfc765.txt) 93.6 199.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K ([8]) 72 187.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.internet.isi.edu/0/in-notes/rfc/files/rfc977.txt) 93.6 187.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K ([9]) 72 175.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.internet.isi.edu/0/in-notes/rfc/files/rfc1436.txt) 93.6 175.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K ([10]) 72 163.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://server.wais.com/z3950.html,) 93.6 163.33 T 0 0 0 1 0 0 0 K 2 F (WAIS Network Publishing using Z3950) 235.54 163.33 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "10" 2 %%Page: "9" 3 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.28 (ets are made blocking instead of non-blocking. The mode preserves compatibility with World-Wide Web applications) 72 713.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.13 (with a single-threaded approach. Currently this mode does not provide interruptible I/O as this is a integral part of the) 72 701.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (event-loop.) 72 689.33 T 0 0 0 1 0 0 0 K 0 F (Active Mode:) 72 671.33 T 0 0 0 1 0 0 0 K 1 F -0.06 (In this mode the event-loop is placed in the Library. This mode is for dumb terminal clients which can) 131.98 671.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.22 (interrupt the execution through the keyboard. The client can, however, still be multi-threaded in the sense that it can) 72 659.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.02 (actively pre-fetch documents not yet requested by the user. If a key is hit, the Library calls a call-back function in the) 72 647.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.38 (client so the client can decide whether the current operation should be interrupted or not. If so, the Library stops all) 72 635.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.58 (I/O activity and handles the execution back to the client. The active mode should cause only minor changes to the client) 72 623.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (in order to obtain a simple form of multiple threads and interruptible I/O.) 72 611.33 T 0 0 0 1 0 0 0 K 0 F (Passive mode:) 72 593.33 T 0 0 0 1 0 0 0 K 1 F -0.18 (This mode requires the most advanced clients, for example GUI clients. The event-loop is now placed) 134.77 593.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.26 (outside the Library. On every URI request from the client, the Library initiates the connection and as soon as it nor-) 72 581.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.13 (mally would block, it returns a list of active socket descriptors to the client. When the client is notified about an event) 72 569.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.32 (on a socket, it calls a Library socket-handler passing the socket number. Then the socket handler finds the correspond-) 72 557.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.53 (ing request and starts the thread. As soon as the thread would perform a blocking I/O operation, the socket handler) 72 545.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (stops the thread and returns the execution to the client event-loop.) 72 533.33 T 0 0 0 1 0 0 0 K 0 12 Q (8.3 Contr) 72 508 T (ol Flow) 120.44 508 T 0 0 0 1 0 0 0 K 1 10 Q -0.21 (A consequence of having multiple threads in the Library is that the control flow changes to be event driven where any) 72 492.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.06 (action is initiated by an event either caused by the client or the network interface. However, as the current implemen-) 72 480.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.23 (tation of multiple threads is valid for HTTP access only, the control flow of the Library from Figure 1 has been pre-) 72 468.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (served but with the addition of an event-loop in the HTTP module. All other access schemes still use blocking I/O and) 72 456.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.34 (the user will not notice any difference from the current implementation. The result of this is that full multi-threaded) 72 444.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.44 (functionality is enabled only if the client uses consecutive HTTP requests. The internal event-loop is based on call-) 72 432.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (back functions and events on a set of registered socket descriptors as illustrated in Figure 7.) 72 420.33 T 0 0 0 1 0 0 0 K 0 F (Figur) 206.38 213.17 T (e 7) 230.1 213.17 T 1 F (Event-loop based on call-back functions) 244.54 213.17 T 0 0 0 1 0 0 0 K 0.02 (The event-loop handles two kinds of call back functions: Ones that are internal Library functions such as the specific) 72 196.17 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (protocol modules, and the ones that require an action taken by the client application.) 72 184.17 T 0 0 0 1 0 0 0 K 0 12 Q (8.4 Interrupting a HTTP Request) 72 158.84 T 0 0 0 1 0 0 0 K 1 10 Q -0.4 (The interrupt handler implemented for) 72 143.17 P 0 0 0 1 0 0 0 K 2 F -0.4 (active mode) 226.39 143.17 P 0 0 0 1 0 0 0 K 1 F -0.4 ( is non-eager as it is a part of the select function in the socket event-) 274.03 143.17 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.29 (loop. That is, an interrupt through standard input is caught when the executing thread is about to execute a blocking) 72 131.17 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.41 (I/O operation such as) 72 119.17 P 0 0 0 1 0 0 0 K 2 F -0.41 (read) 158.13 119.17 P 0 0 0 1 0 0 0 K 1 F -0.41 ( from the Internet and execution is handled back to the event-loop. The reason for this is that) 176.46 119.17 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.29 (the user is not blocked even though the interrupt does not get caught right away so it is not as critical as in a single-) 72 107.17 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.34 (threaded environment. In) 72 95.17 P 0 0 0 1 0 0 0 K 2 F -0.34 (passive mode) 174.3 95.17 P 0 0 0 1 0 0 0 K 1 F -0.34 ( the client has complete control over when to catch interrupts from the user and) 227.56 95.17 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (also how and when to handle them.) 72 83.17 T 0 0 0 1 0 0 0 K 72 72 540 720 C 128.44 227.84 483.56 417 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 272.05 319.97 284.01 319.05 273.38 313.49 272.71 316.73 4 Y 0 X 0 0 0 1 0 0 0 K V 272.71 316.72 M 246.33 311.41 242.6 312.18 209.6 319.05 D 0.5 H 2 Z N 221.14 326.2 209.6 329.5 221.14 332.81 221.14 329.5 4 Y V 284.01 326.02 278.7 326.02 246.81 326.02 252.12 329.5 221.14 329.5 5 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 333.61 313.49 322.98 319.05 334.94 319.97 334.27 316.73 4 Y V 334.29 316.72 M 360.67 311.41 364.4 312.18 397.4 319.05 D N 385.86 332.81 397.4 329.5 385.86 326.2 385.86 329.5 4 Y V 322.99 326.02 328.3 326.02 360.19 326.02 354.88 329.5 385.86 329.5 5 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 249.7 269.44 238.59 264.91 245.61 274.64 247.66 272.04 4 Y V 282.8 304.7 279.41 302.04 259.09 286.06 265.68 286.21 247.66 272.03 5 L N 278.16 290.18 287.55 297.65 283.54 286.34 280.85 288.26 4 Y V 237.95 258.64 M 265.27 270.54 269.21 272.26 280.86 288.25 D N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 245.61 370.2 238.59 379.93 249.7 375.4 247.65 372.8 4 Y V 282.79 340.14 279.41 342.8 259.09 358.77 265.68 358.63 247.66 372.8 5 L N 283.55 358.5 287.55 347.19 278.16 354.67 280.86 356.58 4 Y V 237.95 386.2 M 265.27 374.29 269.2 372.58 280.86 356.59 D N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 198.97 361.39 237.95 411 R 7 X V 0 X N 170.63 297.62 209.6 347.22 R 7 X V 0 X N 397.4 297.62 436.37 347.22 R 7 X V 0 X N 284.01 297.62 322.99 347.22 R 7 X V 0 X N 3 9 Q (Event-) 290.49 333.62 T (Protocol) 400.38 333.86 T (Module) 402.13 324.39 T (Interrupt) 201.7 397.64 T (Handler) 202.71 388.17 T (New) 181.11 333.86 T (Request) 173.36 324.39 T 341.22 263.07 352.75 259.76 341.22 256.45 341.22 259.76 4 Y V 312.36 255.56 315.24 255.56 332.55 255.56 329.67 259.76 341.22 259.76 5 L N 342.8 274.4 352.75 267.69 340.76 268.1 341.78 271.25 4 Y V 341.78 271.24 M 331.55 274.18 328.04 272.99 312.36 267.68 D N (Information returned to loop) 354.88 267.7 T (Event has occurred) 354.88 255.62 T 3 10 Q (Client) 134.44 321.06 T (Library) 447 321.06 T 3 9 Q (Loop) 293.49 324.62 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 198.97 233.84 237.95 283.44 R 7 X V 0 X N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Put &) 207.45 269.27 T (Post) 209.46 260.27 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 319.45 368.48 404.48 382.65 R 7 X V 0 X N (Socket descriptors) 324.95 372.29 T 333.77 341.85 322.98 336.59 329.35 346.77 331.56 344.31 4 Y V 331.56 344.31 358.42 368.48 2 L N 374.24 357.66 369.05 368.48 379.18 362.06 376.71 359.86 4 Y V 376.71 359.86 397.4 336.59 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 72 540 720 C 0 -208 1000 792 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "9" 3 %%Page: "8" 4 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.31 (However, the canonicalization does not recognize alias host names which would require that this information is stored) 72 713.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (in the cache.) 72 701.33 T 0 0 0 1 0 0 0 K 0 14 Q (8. Support for Multi-thr) 72 672.67 T (eaded I/O Operation) 216.41 672.67 T 0 0 0 1 0 0 0 K 1 10 Q 0.17 (In a single-process, single-threaded environment all requests to, e.g., the I/O interface traditionally block any further) 72 653.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.5 (processing. However, a combination of a multi-process or multi-threaded implementation makes provision for the user) 72 641.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.52 (to request several independent URIs at the same time without getting blocked by slow I/O operations. As a World-) 72 629.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.03 (Wide Web client is expected to use much of the execution time doing I/O operations such as \322connect\323 and \322read\323, a) 72 617.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.43 (high degree of optimization can be obtained if multiple threads can run at the same time. This section describes the) 72 605.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.08 (current implementation of multiple threads in the HTTP Module. Later it is expected that other protocol modules are) 72 593.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.34 (added. The NNTP, Gopher, and FTP module have all been rewritten as state machines so they can with minor changes) 72 581.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (be included in the event-loop.) 72 569.33 T 0 0 0 1 0 0 0 K 0 12 Q (8.1 Platform Independent Implementation) 72 544 T 0 0 0 1 0 0 0 K 1 10 Q -0.03 (The major concern in the design of the multi-threaded Library has been to make a platform independent implementa-) 72 528.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.87 (tion which excludes use of traditional thread packages like DECthreads. IEEE has publicized the POSIX standard) 72 516.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.31 (1003.4 for multi-threaded programming but even this will eventually limit the portability referring to the discussion in) 72 504.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.26 (Section 2. Instead, the multi-threaded functionality of the HTTP client has been designed to be used in a single-pro-) 72 492.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (cessor, single-threaded environment as illustrated in Figure 6) 72 480.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 F (Figur) 163.92 300.33 T (e 6) 187.63 300.33 T 2 F (Left:) 202.07 300.33 T 1 F ( T) 220.96 300.33 T (raditional threads and) 229.22 300.33 T 2 F (right:) 318.37 300.33 T 1 F (Model used in the Library) 343.65 300.33 T 0 0 0 1 0 0 0 K -0.32 (The difference between this technique and \322traditional\323 threads is that all information about a thread is stored in a data) 72 283.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.06 (object which exists throughout the lifetime of the thread. This implies that the following rules must be kept regarding) 72 271.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (memory management:) 72 259.33 T 0 0 0 1 0 0 0 K (\245) 86.4 241.33 T (Global variables can be used only if they at all time are independent of the current state of the active thread.) 93.6 241.33 T (\245) 86.4 223.33 T -0.23 (Automatic variables can be used only if they are initialized on every entry to the function and stay state indepen-) 93.6 223.33 P (dent of the current thread throughout their lifetime.) 93.6 211.33 T (\245) 86.4 193.33 T (All information necessary for completing a thread must be kept in an autonomous data object that is passed) 93.6 193.33 T (round the control \337ow via the stack.) 93.6 181.33 T 0 0 0 1 0 0 0 K 0.29 (These rules makes it possible to imply a multi-threaded data model using only one stack without causing portability) 72 163.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (problems as it is all done in plain C.) 72 151.33 T 0 0 0 1 0 0 0 K 0 12 Q (8.2 Modes of Operation) 72 126 T 0 0 0 1 0 0 0 K 1 10 Q 0.22 (In order to keep the functionality of the Library as general as possible, three different modes of operation are imple-) 72 110.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (mented:) 72 98.33 T 0 0 0 1 0 0 0 K 0 F (Base Mode:) 72 80.33 T 0 0 0 1 0 0 0 K 1 F -0.44 (This mode is strictly single-threaded. The difference between this mode and the other two is that all sock-) 124.77 80.33 P 0 0 0 1 0 0 0 K 72 72 540 720 C 72 315 540 459 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 319.62 315 540 459 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 433.27 377.3 438.47 374.3 433.27 371.3 433.27 374.3 4 Y V 369.14 374.3 433.27 374.3 2 L 1 H N 383.12 391.92 388.95 393.36 387.28 387.59 385.2 389.75 4 Y V 369.14 374.3 385.2 389.75 2 L N 387.28 361 388.95 355.24 383.12 356.68 385.2 358.84 4 Y V 369.14 374.3 385.2 358.84 2 L N 72 315 292.38 459 R 7 X V 0.5 H 0 X N 237.9 334.06 282.47 454.77 R 7 X V 0 X N 3 9 Q (Thread) 245.93 442.89 T 188.38 334.06 232.95 454.77 R 7 X V 0 X N (Thread) 196.4 442.89 T 138.85 334.06 183.42 454.77 R 7 X V 0 X N 141.33 420.88 180.95 437.82 R 7 X V 0 X N 141.33 336.18 180.95 412.41 R 7 X V 0 X N (Registers) 142.14 425.95 T (Stack) 149.88 370.89 T 190.85 420.88 230.47 437.82 R 7 X V 0 X N 190.85 336.18 230.47 412.41 R 7 X V 0 X N (Registers) 191.66 425.95 T (Stack) 199.41 370.89 T 240.38 420.88 279.99 437.82 R 7 X V 0 X N 240.38 336.18 279.99 412.41 R 7 X V 0 X N (Registers) 241.18 425.95 T (Stack) 248.93 370.89 T (Thread) 146.88 442.89 T 81.9 365.83 121.52 382.77 R 7 X V 0 X N (Heap) 90.96 370.89 T 81.9 391.24 121.52 408.18 R 7 X V 0 X N (Static) 90.46 396.3 T 81.9 340.41 121.52 357.36 R 7 X V 0 X N (Code) 90.96 345.48 T J 76.95 416.65 287.42 416.65 287.42 319.24 76.95 319.24 4 Y J 76.95 415.9 76.95 416.65 77.7 416.65 3 L N [1.503 4.51] 1.503 I 77.7 416.65 286.67 416.65 2 L N J 286.67 416.65 287.42 416.65 287.42 415.9 3 L N [1.522 4.567] 1.522 I 287.42 415.9 287.42 319.99 2 L N J 287.42 319.99 287.42 319.24 286.67 319.24 3 L N [1.503 4.51] 1.503 I 286.67 319.24 77.71 319.24 2 L N J 77.71 319.24 76.95 319.24 76.95 319.99 3 L N [1.522 4.567] 1.522 I 76.95 319.99 76.95 415.9 2 L N (Memory) 165.94 322.51 T J (Process) 79.43 446.89 T 485.52 334.06 530.09 454.77 R 7 X V 0 X N (Thread) 493.55 442.89 T 487.99 420.88 527.61 437.82 R 7 X V 0 X N 487.99 336.18 527.61 412.41 R 7 X V 0 X N (Registers) 488.8 425.95 T (Stack) 496.55 370.89 T 329.52 365.83 369.14 382.77 R 7 X V 0 X N (Heap) 338.58 370.89 T 329.52 391.24 369.14 408.18 R 7 X V 0 X N (Static) 338.08 396.3 T 329.52 340.41 369.14 357.36 R 7 X V 0 X N (Code) 338.58 345.48 T J 324.57 416.65 535.04 416.65 535.04 319.24 324.57 319.24 4 Y J 324.57 415.9 324.57 416.65 325.32 416.65 3 L N [1.503 4.51] 1.503 I 325.32 416.65 534.29 416.65 2 L N J 534.29 416.65 535.04 416.65 535.04 415.9 3 L N [1.522 4.567] 1.522 I 535.04 415.9 535.04 319.99 2 L N J 535.04 319.99 535.04 319.24 534.29 319.24 3 L N [1.503 4.51] 1.503 I 534.29 319.24 325.32 319.24 2 L N J 325.32 319.24 324.57 319.24 324.57 319.99 3 L N [1.522 4.567] 1.522 I 324.57 319.99 324.57 415.9 2 L N (Memory) 413.55 322.51 T J (Process) 327.05 446.89 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 386.47 389.12 428.57 410.3 10.59 RR 6 X V 0 X N (Thread) 393.26 400.67 T (State) 397.01 393.49 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 437.23 363.71 479.33 384.89 10.59 RR 6 X V 0 X N (Thread) 444.02 375.25 T (State) 447.77 368.08 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 386.47 338.3 428.57 359.47 10.59 RR 6 X V 0 X N (Thread) 393.26 349.84 T (State) 397.01 342.67 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 72 540 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "8" 4 %%Page: "7" 5 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (\245) 86.4 713.33 T 2 F -0.23 (User) 93.6 713.33 P -0.23 (-Agent:) 112.84 713.33 P 1 F -0.23 ( The user agent is by many clients currently generated in a somewhat verbose format. The goal is to) 142.83 713.33 P -0.08 (make this \336eld machine readable so it can be used on the server side to perform individual actions as a function) 93.6 701.33 P (of the client implementation. As a side ef) 93.6 689.33 T (fect it can also be used for statistics etc.) 258.4 689.33 T (\245) 86.4 671.33 T 2 F (Authorization:) 93.6 671.33 T 0 0 0 1 0 0 0 K 1 F (If the user already has typed in a user ID and a password for access authorization in a previous) 154.44 671.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.37 (HTTP request the HTTP client also transmits the authorization MIME-header. However, this does not guarantee) 93.6 659.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (that the user ID and password are sufficient for actually accessing the requested resource.) 93.6 647.33 T 0 0 0 1 0 0 0 K 0 F (Sent Request:) 72 629.33 T 0 0 0 1 0 0 0 K 1 F 0.26 (The client waits until a response is given from the server or the connection is timed out in case of an) 133.66 629.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (error situation. The client is capable of differentiating HTTP 0.9 responses from HTTP 1.0 responses.) 72 617.33 T 0 0 0 1 0 0 0 K 0 F (Need Access Authorization:) 72 599.33 T 0 0 0 1 0 0 0 K 1 F -0.29 (If a 401 Unauthorized status code is returned, the module prompts the user for a user ID) 192.81 599.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.41 (and a password. The connection is closed before the user is actually asked, so any new request initiated upon a 401) 72 587.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (status code causes a new connection to be established.) 72 575.33 T 0 0 0 1 0 0 0 K 0 F (Redirection:) 72 557.33 T 0 0 0 1 0 0 0 K 1 F -0.35 (The module supports both a temporarily \050302\051 and a permanent \050301\051 redirection code returned from the) 127.82 557.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.54 (server. In both cases, the connection is closed and the Protocol Manager is called recursively until a document is found,) 72 545.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.05 (an error has occurred, or the maximum number of redirections has been reached. The URI returned in the redirection) 72 533.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.24 (response from the remote server is parsed back to the client via the Error and Information Manager. If it is a 301 code,) 72 521.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (an intelligent client can use this information to change the document in which the redirected URI originates.) 72 509.33 T 0 0 0 1 0 0 0 K 0 F (Need Body:) 72 491.33 T 0 0 0 1 0 0 0 K 1 F 0.6 (If a body is included in the response from the server, the module reads the data from the network and) 124.22 491.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (direct it to the Stream Manager which sets up a stream stack to handle the desired format conversion.) 72 479.33 T 0 0 0 1 0 0 0 K 0 F (Got Data:) 72 461.33 T 0 0 0 1 0 0 0 K 1 F -0.5 (When the data object has been loaded from the Internet, the module terminates the request and handles con-) 116.99 461.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (trol back to the client.) 72 449.33 T 0 0 0 1 0 0 0 K 0 F (Error or Failure:) 72 431.33 T 0 0 0 1 0 0 0 K 1 F 0.77 (If at any point in the request handling an error occurs the request is aborted and the connection) 148.37 431.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.6 (closed. All information about the error is parsed back to the client via the Error and Information Manager. As the HTTP) 72 419.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.34 (protocol is stateless, all errors are fatal between the server and the client. If the erroneous request is to be corrected,) 72 407.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (the state machine jumps back to the initial state.) 72 395.33 T 0 0 0 1 0 0 0 K 0 14 Q (7. Cache of Host Names) 72 366.67 T 0 0 0 1 0 0 0 K 1 10 Q -0.61 (As excessive communication with Domain Name Servers \050DNS\051 can produce a significant time-overhead, a new mem-) 72 347.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.12 (ory cache of host names have been implemented to limit the amount of requests to DNS. Once a host name has been) 72 335.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.37 (resolved into an IP-address, it is stored in the cache. The entry stays in the cache until an error occurs when connecting) 72 323.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (to the remote host or it is removed during garbage collection.) 72 311.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.37 (Multi-homed hosts are treated specially as all available IP-addresses returned from DNS are stored in the cache. Every) 72 293.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.22 (time a request is made to the host, the time-to-connect is measured and a weight function is calculated to indicate how) 72 281.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (fast the IP-address was. The weight function used is) 72 269.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.18 (where) 72 216.7 P 4 F -0.18 (a) 98.75 216.7 P 1 F -0.18 ( indicates the sensitivity of the function and) 105.06 216.7 P 4 F -0.18 (D) 280.83 216.7 P 1 F -0.18 ( is the connect time. If one IP-address is not reachable a penalty) 286.95 216.7 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.13 (of) 72 204.7 P 0 0 0 1 0 0 0 K 2 F 0.13 (x) 82.96 204.7 P 0 0 0 1 0 0 0 K 1 F 0.13 ( seconds is added to the weight where the penalty is a function of the error returned from the \322connect\323 call. The) 87.4 204.7 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (next time a request is initiated to the remote host, the IP-address with the smallest weight is used.) 72 192.7 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.24 (A problem with both the host cache and the document cache \050either on server side or client side\051 is to detect when two) 72 174.7 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.05 (URLs are equivalent. The only way this can be done internally in the Library is to canonicalize the URLs before they) 72 162.7 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.22 (are compared. This has for some time been done by looking at the path segment of the URLs and remove redundant) 72 150.7 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (information by converting URLs like) 72 138.7 T 0 0 0 1 0 0 0 K 3 9 Q (foo/./bar/ = foo/redundant/../bar/ = foo/bar/) 222.19 121.37 T 0 0 0 1 0 0 0 K 1 10 Q -0.21 (The method is now optimized and expanded so that also host names are canonicalized. Hence the following URLs are) 72 104.7 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (all recognized to be identical:) 72 92.7 T 0 0 0 1 0 0 0 K 3 9 Q (http://info/ = http://info.cern.ch:80/ = http://INFO.CeRn.CH/ = http://info.cern.ch./ = http://info.cern.ch/) 107.14 75.37 T 72 72 540 720 C 197.57 231.37 414.43 266 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 2 9 Q 0 X 0 0 0 1 0 0 0 K (W) 198.57 245.78 T (n) 211.96 245.78 T 1 F (1) 226.03 245.78 T (+) 218.7 245.78 T 4 F (\050) 208.1 245.78 T (\051) 230.94 245.78 T 2 F (W) 260.18 252.86 T (n) 273.57 252.86 T 4 F (\050) 269.71 252.86 T (\051) 278.48 252.86 T 1 F (1) 297.91 252.86 T 4 F (a) 311.41 252.86 T 1 F (\320) 304.66 252.86 T 4 F (\050) 294.05 252.86 T (\051) 317.5 252.86 T (D) 328.74 252.86 T (\327) 324.24 252.86 T 1 F (+) 285.23 252.86 T (i) 337.84 252.86 T (f) 340.35 252.86 T (a) 345.59 252.86 T (c) 349.59 252.86 T (t) 353.58 252.86 T (i) 356.09 252.86 T (v) 358.59 252.86 T (e) 363.09 252.86 T (I) 369.33 252.86 T (P) 372.33 252.86 T (-) 377.34 252.86 T (a) 380.33 252.86 T (d) 384.33 252.86 T (d) 388.83 252.86 T (r) 393.33 252.86 T (e) 396.33 252.86 T (s) 400.32 252.86 T (s) 403.82 252.86 T (0) 260.18 240.26 T (.) 264.68 240.26 T (9) 266.93 240.26 T 2 F (W) 278.18 240.26 T (n) 291.57 240.26 T 4 F (\050) 287.71 240.26 T (\051) 296.48 240.26 T (\327) 273.68 240.26 T 1 F (e) 337.84 240.26 T (l) 341.84 240.26 T (s) 344.34 240.26 T (e) 347.84 240.26 T 4 F (\356) 251 238.41 T (\355) 251 246.12 T (\354) 251 253.84 T 1 F (=) 239.93 245.78 T 72 72 540 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "7" 5 %%Page: "6" 6 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 14 Q 0 X 0 0 0 1 0 0 0 K (6. Implementation of the HTTP Module) 72 710.67 T 0 0 0 1 0 0 0 K 1 10 Q -0.25 (The HTTP client is based on the HTTP 1.0 specification but is backwards compatible with version 0.9. The major dif-) 72 691.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.29 (ference between this and previous implementations is that this version is a state machine based on the state diagram) 72 679.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.45 (illustrated in Figure 5. As will be discussed in Section 8, the state-machine design has some inherent advantages which) 72 667.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (makes it suitable in a multi-threaded environment, even though the HTTP protocol is stateless by nature.) 72 655.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (.) 72 637.33 T 0 0 0 1 0 0 0 K 0 F (Figur) 178.18 355.33 T (e 5) 201.9 355.33 T 1 F (State Diagram of the Client part of the HTTP Protocol) 216.34 355.33 T 0 0 0 1 0 0 0 K (The individual states and the transitions between them are explained below.) 72 338.33 T 0 0 0 1 0 0 0 K 0 F (Begin:) 72 320.33 T 0 0 0 1 0 0 0 K 1 F 0.19 (This state is the initial state where the HTTP module sets up the required data structures needed for handling) 102.28 320.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (the request.) 72 308.33 T 0 0 0 1 0 0 0 K 0 F (Need Connection:) 72 290.33 T 0 0 0 1 0 0 0 K 1 F -0.15 (The HTTP client is ready for setting up a connection to the remote host. The connection is always) 150.88 290.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (initiated by a) 72 278.33 P 0 0 0 1 0 0 0 K 2 F 0.25 (connect) 127.47 278.33 P 0 0 0 1 0 0 0 K 1 F 0.25 ( system call. This procedure has been optimized by using a cache of visited host names as will) 158.57 278.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (be explained in Section 7.) 72 266.33 T 0 0 0 1 0 0 0 K 0 F (Need Request:) 72 248.33 T 0 0 0 1 0 0 0 K 1 F -0.26 (After connection establishment, the module sends the HTTP request to the remote server. The request) 136.43 248.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (consists of an HTTP header line, a set of MIME Headers, and possibly a data object to be posted to the server. Current) 72 236.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.41 (methods supported in the module are GET and HEAD, but support for PUT and POST is under development. The sup-) 72 224.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (ported MIME-headers are:) 72 212.33 T 0 0 0 1 0 0 0 K (\245) 86.4 194.33 T 2 F (Accept:) 93.6 194.33 T 1 F ( The current implementation uses one accept line for each MIME-type supported by the client. For) 124.14 194.33 T -0.16 (advanced clients this means that the \322Accept:\323 sequence is repeated 20-30 times which gives a overhead of 200-) 93.6 182.33 P (300 bytes per request \050including the CRLF telnet EOL-sequence\051. This should be changed so that either a) 93.6 170.33 T (comma separated list is transmitted instead or only the MIME content types without any subtypes.) 93.6 158.33 T (\245) 86.4 140.33 T 2 F -0.14 (Refer) 93.6 140.33 P -0.14 (er:) 114.89 140.33 P 1 F -0.14 ( If any parent anchor is known to the requested URI it is sent in the referer \336eld. This is to let the server) 126.55 140.33 P (know what link has led to the current request. Nothing is sent if the parent anchor is unknown or does not exist.) 93.6 128.33 T (\245) 86.4 110.33 T 2 F -0.04 (Fr) 93.6 110.33 P -0.04 (om:) 103.23 110.33 P 1 F -0.04 ( The full email address is sent along the request. It is meant as an informative service to the recipient and) 118.78 110.33 P (can be changed to any value the user wishes to sign the request with. As it is possible to manipulate the email) 93.6 98.33 T (address, this \336eld can not be used as identity veri\336cation for access authentication.) 93.6 86.33 T 72 72 540 720 C 84 370 528 634 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 383.14 408.2 380.14 403.01 377.15 408.2 380.14 408.2 4 Y 0 X 0 0 0 1 0 0 0 K V 380.14 408.2 380.14 421 2 L 0.5 H 2 Z N 314.42 566.5 309.22 569.5 314.42 572.5 314.42 569.5 4 Y V 314.42 569.5 476.86 569.5 476.86 493 3 L N 270.54 506.5 470.41 506.5 2 L N 470.41 506.15 470.41 492.65 2 L N 112.79 550.8 115.79 556 118.79 550.8 115.79 550.8 4 Y V 115.79 434.5 115.79 550.8 2 L N 115.79 434.5 141.58 434.5 2 L N 154.48 434.5 257.64 434.5 2 L N 329.82 437.5 335.01 434.5 329.82 431.5 329.82 434.5 4 Y V 270.54 434.5 329.82 434.5 2 L N 267.09 588.2 264.09 583 261.09 588.2 264.09 588.2 4 Y V 264.09 601 264.09 588.2 2 L N 267.09 543.2 264.09 538 261.09 543.2 264.09 543.2 4 Y V 264.09 556 264.09 543.2 2 L N 267.09 498.2 264.09 493 261.09 498.2 264.09 498.2 4 Y V 264.09 511 264.09 498.2 2 L N 267.09 408.2 264.09 403.01 261.09 408.2 264.09 408.2 4 Y V 264.09 466 264.09 408.2 2 L N 383.14 453.2 380.14 448 377.15 453.2 380.14 453.2 4 Y V 309.22 475 380.14 475 380.14 453.2 3 L N 185.46 566.5 180.27 569.5 185.46 572.5 185.46 569.5 4 Y V 218.95 569.5 185.46 569.5 2 L N 151.48 550.8 154.48 556 157.48 550.8 154.48 550.8 4 Y V 218.95 524.5 154.48 524.5 154.48 550.8 3 L N 125.69 550.8 128.69 556 131.69 550.8 128.69 550.8 4 Y V 218.95 484 128.69 484 128.69 550.8 3 L N 151.03 408.2 148.03 403.01 145.03 408.2 148.03 408.2 4 Y V 218.95 475 148.03 475 148.03 408.2 3 L N 426.53 487 431.73 484 426.53 481 426.53 484 4 Y V 309.22 484 426.53 484 2 L N 138.58 550.8 141.58 556 144.58 550.8 141.58 550.8 4 Y V 141.58 506.5 141.58 550.8 2 L N 141.58 506.5 257.64 506.5 2 L N 90 556 180.27 583 13.5 RR 7 X V 0 X N 218.95 376 309.22 403.01 13.5 RR 7 X V 0 X N 102.89 376 193.16 403.01 13.5 RR 7 X V 0 X N 218.95 601 309.22 628 R 7 X V 0 X N 218.95 556 309.22 583 R 7 X V 0 X N 218.95 466 309.22 493 R 7 X V 0 X N 335.01 420.66 425.28 447.65 R 7 X V 0 X N 3 10 Q (Begin) 251.3 610.79 T (Need) 252.14 570.42 T 218.95 511 309.22 538 R 7 X V 0 X N (Need) 252.14 525.42 T (Error/) 122.63 570.42 T (Sent) 253.8 480.42 T (Need) 368.2 435.08 T (No Data) 246.29 385.79 T (Redirection) 122.21 385.79 T 431.73 465.65 522 492.65 R 7 X V 0 X N (Need Access) 447.41 480.08 T 3 9 Q (401) 362.97 487.13 T (Ok) 482.15 504.78 T (Error) 440.64 495.61 T (301, 302) 165.98 464.98 T (HTTP 0.9,) 330.55 463.05 T (204, 304) 224.77 455.64 T 335.01 376 425.28 403.01 13.5 RR 7 X V 0 X N 3 10 Q (Got Data) 360.67 385.79 T 3 9 Q (Ok) 386.59 408.39 T (Error) 304.14 438.9 T (Error) 191.47 486.43 T (Error) 191.47 571.92 T (Ok) 270.54 543.38 T (Error) 191.47 526.93 T (Ok) 270.42 496.71 T 3 10 Q (Request) 245.47 469.92 T (Failure) 119.85 559.92 T (Authorization) 447.68 469.58 T (Connection) 238.8 559.92 T (Request) 245.47 514.92 T (Body) 368.75 424.58 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 3 9 Q (200,203) 334.8 454.05 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 72 540 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "6" 6 %%Page: "5" 7 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.19 (and the desired output format specified by the client. A converter is simply a stream which is registered as a converter) 72 713.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 (from a given input MIME-type to a output MIME-type. If more than one converter is capable of doing the same con-) 72 701.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.12 (version a quality factor is used to \050subjectively\051 distinguish which one is the best. Currently the stream stack module) 72 689.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.44 (only manages a single converter at the time, for example from) 72 677.33 P 0 0 0 1 0 0 0 K 2 F 0.44 (text/plain) 327.86 677.33 P 0 0 0 1 0 0 0 K 1 F 0.44 ( to) 365.64 677.33 P 0 0 0 1 0 0 0 K 2 F 0.44 (text/html) 379.3 677.33 P 0 0 0 1 0 0 0 K 1 F 0.44 (, that is, the size of the stack is) 414.3 677.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.58 (always 1. However, work is being done to expand the stack so that several converters can be cascaded in order to obtain) 72 665.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (the desired conversion.) 72 653.33 T 0 0 0 1 0 0 0 K 0 14 Q (5. Anchors) 72 624.67 T 0 0 0 1 0 0 0 K 1 10 Q -0.44 (Anchors represent any references to graphic objects which may be the sources or destinations of hypertext links. There) 72 605.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.45 (are basically two types of anchors:) 72 593.33 P 0 0 0 1 0 0 0 K 2 F -0.45 (parent) 210.35 593.33 P 0 0 0 1 0 0 0 K 1 F -0.45 ( anchors which represent whole graphic objects and) 236.46 593.33 P 0 0 0 1 0 0 0 K 2 F -0.45 (child) 442.22 593.33 P 0 0 0 1 0 0 0 K 1 F -0.45 ( anchors which rep-) 462.22 593.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.09 (resent parts of a graphic object. As mentioned in Section 3, every request and hence every graphic object has a parent) 72 581.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.26 (anchor associated with it. Anchors exist throughout the lifetime of the client, but as this generally is not the case for) 72 569.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.06 (graphic objects, it is possible to have a parent anchor without a graphic object. If the data object is stored in the client) 72 557.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (cache, the parent anchor contains a link to it so that the client can access it through the Cache Manager.) 72 545.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.53 (Both types of anchors are subclasses of a generic anchor class which defines a set of outgoing links to where the anchor) 72 527.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (points. The relationship between parent anchors and child anchors is illustrated in Figure 4.) 72 515.33 T 0 0 0 1 0 0 0 K 0 F (Figur) 193.1 197.33 T (e 4) 216.8 197.33 T 1 F (Relationship between) 231.24 197.33 T 2 F (par) 320.12 197.33 T (ent) 333.64 197.33 T 1 F ( and) 345.86 197.33 T 2 F (child) 365.3 197.33 T 1 F ( anchors) 385.3 197.33 T 0 0 0 1 0 0 0 K -0.16 (Every parent anchor points to a remote data object. In the case of posting an anchor to a remote server, the data object) 72 180.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (is yet to be created. The client can assign a URI for the object but it might be overwritten \050or completely denied\051 by) 72 168.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.36 (the server. In Figure 4, parent) 72 156.33 P 0 0 0 1 0 0 0 K 0 F 0.36 (A) 195.24 156.33 P 0 0 0 1 0 0 0 K 1 F 0.36 ( has no associated graphic object. This can either be because the anchor has not yet) 202.46 156.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (been requested by the user or the graphic object has been discarded from memory.) 72 144.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.4 (When child) 72 126.33 P 0 0 0 1 0 0 0 K 0 F 0.4 (B1) 121.68 126.33 P 0 0 0 1 0 0 0 K 1 F 0.4 ( is created, pointing to parent) 133.35 126.33 P 0 0 0 1 0 0 0 K 0 F 0.4 (A) 254.89 126.33 P 0 0 0 1 0 0 0 K 1 F 0.4 (, parent) 262.11 126.33 P 0 0 0 1 0 0 0 K 0 F 0.4 (B) 295.4 126.33 P 0 0 0 1 0 0 0 K 1 F 0.4 ( is registered in parent) 302.07 126.33 P 0 0 0 1 0 0 0 K 0 F 0.4 (A) 395.43 126.33 P 0 0 0 1 0 0 0 K 1 F 0.4 ( as pointing to) 402.65 126.33 P 0 0 0 1 0 0 0 K 0 F 0.4 (A) 463.7 126.33 P 0 0 0 1 0 0 0 K 1 F 0.4 (. The same is the) 470.92 126.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.12 (case for the link between child) 72 114.33 P 0 0 0 1 0 0 0 K 0 F 0.12 (BL) 197.66 114.33 P 0 0 0 1 0 0 0 K 1 F 0.12 ( and) 211.01 114.33 P 0 0 0 1 0 0 0 K 0 F 0.12 (A2) 230.68 114.33 P 0 0 0 1 0 0 0 K 1 F 0.12 (, but parent) 242.9 114.33 P 0 0 0 1 0 0 0 K 0 F 0.12 (B) 291.01 114.33 P 0 0 0 1 0 0 0 K 1 F 0.12 ( is only registered once in parent) 297.68 114.33 P 0 0 0 1 0 0 0 K 0 F 0.12 (A) 431.52 114.33 P 0 0 0 1 0 0 0 K 1 F 0.12 ( \050this is marked with) 438.74 114.33 P 0 0 0 1 0 0 0 K 0 F 0.12 (b) 524.04 114.33 P 0 0 0 1 0 0 0 K 1 F 0.12 ( in) 529.6 114.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.15 (the figure\051. The same is the case for the links marked) 72 102.33 P 0 0 0 1 0 0 0 K 0 F -0.15 (a) 285.26 102.33 P 0 0 0 1 0 0 0 K 1 F -0.15 ( and) 290.26 102.33 P 0 0 0 1 0 0 0 K 0 F -0.15 (c) 309.39 102.33 P 0 0 0 1 0 0 0 K 1 F -0.15 (. A child can have more than one link to other anchors as) 313.83 102.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.56 (indicated in child) 72 90.33 P 0 0 0 1 0 0 0 K 0 F 0.56 (BL) 145.61 90.33 P 0 0 0 1 0 0 0 K 1 F 0.56 (. This is often the case using the POST method, where for example the same data object is to) 158.95 90.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (posted to a News group, a mailing list and a HTTP server.) 72 78.33 T 0 0 0 1 0 0 0 K 72 72 540 720 C 82.47 212 529.53 512 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K J 393.36 271.45 393.36 250.66 2 L J 393.36 271.45 393.36 270.95 2 L 2 H 2 Z 0 X 0 0 0 1 0 0 0 K N [0.86 4.301] 0.86 I 393.36 270.95 393.36 251.16 2 L N J 393.36 251.16 393.36 250.66 2 L N J 254.77 333.8 254.77 321.92 2 L J 254.77 333.8 254.77 330.05 2 L 0.5 H N [5.049 4.376] 5.049 I 254.77 330.05 254.77 325.67 2 L N J 254.77 325.67 254.77 321.92 2 L N J 247.84 333.8 247.84 321.92 2 L J 247.84 333.8 247.84 330.05 2 L N [5.049 4.376] 5.049 I 247.84 330.05 247.84 325.67 2 L N J 247.84 325.67 247.84 321.92 2 L N J 386.89 379.07 389.89 384.27 392.89 379.07 389.89 379.07 4 Y V J 389.89 360.52 389.89 379.07 2 L J 389.89 360.52 389.89 361.02 2 L 1 H N [1.033 5.164] 1.033 I 389.89 361.02 389.89 378.57 2 L N J 389.89 378.57 389.89 379.07 2 L N J 277.29 440.65 272.09 443.65 277.29 446.65 277.29 443.65 4 Y V 369.1 330.83 320.6 330.83 320.6 443.65 277.29 443.65 4 L 0.5 H N J 280.76 482.28 285.95 479.28 280.76 476.28 280.76 479.28 4 Y V J 254.77 467.4 254.77 479.28 280.76 479.28 3 L J 254.77 467.4 254.77 468.9 2 L 1 H N [2.048 3.414] 2.048 I 254.77 468.9 254.77 477.78 2 L N J 254.77 477.78 254.77 479.28 256.27 479.28 3 L N [3.284 5.473] 3.284 I 256.27 479.28 279.26 479.28 2 L N J 279.26 479.28 280.76 479.28 2 L N J 221.85 476.28 216.66 479.28 221.85 482.28 221.85 479.28 4 Y V J 247.84 467.4 247.84 479.28 221.85 479.28 3 L J 247.84 467.4 247.84 467.9 2 L N [0.989 4.944] 0.989 I 247.84 467.9 247.84 478.78 2 L N J 247.84 478.78 247.84 479.28 247.34 479.28 3 L N [0.862 4.308] 0.862 I 247.34 479.28 222.35 479.28 2 L N J 222.35 479.28 221.85 479.28 2 L N J 7 X 90 450 27.72 17.81 188.94 479.28 G 0.5 H 0 X 90 450 27.72 17.81 188.94 479.28 A 418.47 320.39 410.68 324.89 418.47 329.39 418.47 324.89 4 Y V 403.75 315.98 403.75 307.07 424.54 307.07 424.54 324.89 418.47 324.89 5 L 2 H N 279.89 427.27 272.09 431.77 279.89 436.27 279.89 431.77 4 Y V 265.16 422.87 265.16 413.96 285.95 413.96 285.95 431.77 279.89 431.77 5 L N J 254.77 384.27 254.77 354.58 2 L J 254.77 384.27 254.77 383.77 2 L N [0.989 4.947] 0.989 I 254.77 383.77 254.77 355.08 2 L N J 254.77 355.08 254.77 354.58 2 L N J 109.72 426.58 112.72 431.77 115.72 426.58 112.72 426.58 4 Y V J 112.72 426.58 112.72 408.02 2 L J 112.72 426.58 112.72 425.08 2 L 1 H N [3.59 5.983] 3.59 I 112.72 425.08 112.72 409.52 2 L N J 112.72 409.52 112.72 408.02 2 L N J 141.3 367.89 133.51 372.39 141.3 376.89 141.3 372.39 4 Y V 126.58 363.49 126.58 354.58 147.37 354.58 147.37 372.39 141.3 372.39 5 L 2 H N J 116.18 274.41 116.18 247.69 2 L J 116.18 274.41 116.18 273.91 2 L N [0.887 4.435] 0.887 I 116.18 273.91 116.18 248.19 2 L N J 116.18 248.19 116.18 247.69 2 L N J 138.7 280.32 133.51 283.32 138.7 286.32 138.7 283.32 4 Y V J 247.84 315.98 247.84 283.32 138.7 283.32 3 L J 247.84 315.98 247.84 312.23 2 L 0.5 H N [9.205 7.977] 9.205 I 247.84 312.23 247.84 287.07 2 L N J 247.84 287.07 247.84 283.32 244.09 283.32 3 L N [7.294 6.322] 7.294 I 244.09 283.32 142.45 283.32 2 L N J 142.45 283.32 138.7 283.32 2 L N J 254.77 315.98 254.77 283.32 2 L J 254.77 315.98 254.77 312.23 2 L N [9.205 7.977] 9.205 I 254.77 312.23 254.77 287.07 2 L N J 254.77 287.07 254.77 283.32 2 L N J 363.91 286.32 369.1 283.32 363.91 280.32 363.91 283.32 4 Y V J 254.77 283.32 363.91 283.32 2 L J 254.77 283.32 258.52 283.32 2 L N [7.294 6.322] 7.294 I 258.52 283.32 360.15 283.32 2 L N J 360.15 283.32 363.91 283.32 2 L N J 225.32 446.65 230.52 443.65 225.32 440.65 225.32 443.65 4 Y V 225.32 443.65 175.08 443.65 175.08 396.14 133.51 396.14 4 L N 138.7 381.27 133.51 384.27 138.7 387.27 138.7 384.27 4 Y V 138.7 384.27 175.08 384.27 175.08 318.95 369.1 318.95 4 L N J 433.2 339.76 438.39 336.76 433.2 333.76 433.2 336.76 4 Y V J 410.68 336.76 433.2 336.76 2 L J 410.68 336.76 412.18 336.76 2 L 1 H N [2.789 4.648] 2.789 I 412.18 336.76 431.7 336.76 2 L N J 431.7 336.76 433.2 336.76 2 L N J 138.7 387.21 133.51 390.21 138.7 393.21 138.7 390.21 4 Y V J 138.7 390.21 230.52 390.21 2 L J 138.7 390.21 142.45 390.21 2 L 0.5 H N [6.987 6.056] 6.987 I 142.45 390.21 226.77 390.21 2 L N J 226.77 390.21 230.52 390.21 2 L N J 138.7 238.75 133.51 241.75 138.7 244.75 138.7 241.75 4 Y V J 138.7 241.75 147.37 241.75 147.37 277.38 133.51 277.38 4 L J 138.7 241.75 142.45 241.75 2 L N [1.341 1.162] 1.341 I 142.45 241.75 143.62 241.75 2 L N J 143.62 241.75 147.37 241.75 147.37 245.5 3 L N [6.115 5.3] 6.115 I 147.37 245.5 147.37 273.63 2 L N J 147.37 273.63 147.37 277.38 143.62 277.38 3 L N [7.337 6.359] 7.337 I 143.62 277.38 137.26 277.38 2 L N J 137.26 277.38 133.51 277.38 2 L N J 363.91 238.82 369.1 235.82 363.91 232.82 363.91 235.82 4 Y V J 133.51 235.82 363.91 235.82 2 L J 133.51 235.82 137.26 235.82 2 L N [7.722 6.692] 7.722 I 137.26 235.82 360.15 235.82 2 L N J 360.15 235.82 363.91 235.82 2 L N 1 0 0 0 0 1 1 K J 252.34 368.31 247.84 360.52 243.34 368.31 247.84 368.31 4 Y 1 0 0 0 0 1 1 K V J 247.84 381.3 247.84 368.31 2 L J 247.84 381.3 247.84 380.8 2 L 2 H N [1.09 5.45] 1.09 I 247.84 380.8 247.84 368.81 2 L N J 247.84 368.81 247.84 368.31 2 L N J 247.84 419.9 247.84 390.21 2 L N J 113.75 261.42 109.25 253.63 104.75 261.42 109.25 261.42 4 Y V J 109.25 289.26 109.25 261.42 2 L J 109.25 289.26 109.25 288.76 2 L N [0.925 4.627] 0.925 I 109.25 288.76 109.25 261.92 2 L N J 109.25 261.92 109.25 261.42 2 L N 0 0 0 1 0 0 0 K J 111.68 352.72 116.18 360.52 120.68 352.72 116.18 352.72 4 Y 0 0 0 1 0 0 0 K V 116.18 352.72 116.18 298.17 2 L N 1 0 0 0 0 1 1 K 109.25 363.49 109.25 295.2 2 L 1 0 0 0 0 1 1 K N 0 0 0 1 0 0 0 K 91.93 313.01 133.51 348.64 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 0 X N 91.93 360.52 133.51 408.02 R 7 X V 0 X N 250.27 412.1 254.77 419.9 259.27 412.1 254.77 412.1 4 Y V 254.77 412.1 254.77 390.21 2 L 2 H N 1 0 0 0 0 1 1 K J 390.92 261.42 386.42 253.63 381.93 261.42 386.42 261.42 4 Y 1 0 0 0 0 1 1 K V J 386.42 289.26 386.42 261.42 2 L J 386.42 289.26 386.42 288.76 2 L N [0.925 4.627] 0.925 I 386.42 288.76 386.42 261.92 2 L N J 386.42 261.92 386.42 261.42 2 L N 0 0 0 1 0 0 0 K J 388.86 305.22 393.36 313.01 397.86 305.22 393.36 305.22 4 Y 0 0 0 1 0 0 0 K V 393.36 305.22 393.36 292.23 2 L N 1 0 0 0 0 1 1 K 386.42 298.17 386.42 327.86 2 L 1 0 0 0 0 1 1 K N 0 0 0 1 0 0 0 K 343.57 490.48 371.29 490.48 2 L 0.5 H 0 0 0 1 0 0 0 K N J 343.57 478.61 371.29 478.61 2 L J 343.57 478.61 345.07 478.61 2 L 1 H N [2.557 4.262] 2.557 I 345.07 478.61 369.79 478.61 2 L N J 369.79 478.61 371.29 478.61 2 L N 1 0 0 0 0 1 1 K J 343.57 466.73 371.29 466.73 2 L 2 H 1 0 0 0 0 1 1 K N 0 0 0 1 0 0 0 K J 343.57 454.85 371.29 454.85 2 L J 343.57 454.85 347.32 454.85 2 L 0.5 H 0 0 0 1 0 0 0 K N [7.396 6.41] 7.396 I 347.32 454.85 367.54 454.85 2 L N J 367.54 454.85 371.29 454.85 2 L N J 343.57 442.98 371.29 442.98 2 L 2 H N 3 9 Q (Parents of links to this anchor) 385.14 486.64 T (Destination of this Child anchor) 385.14 451.01 T (Parent) 99.46 390.15 T (Parent of this Child anchor) 385.14 439.13 T (List of Child anchors) 385.14 462.89 T (Address of this Parent anchor) 385.14 474.76 T (Child) 102.47 333.1 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 91.93 265.51 133.51 301.14 R 7 X V 0.5 H 0 X N (Child) 102.47 285.6 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 91.93 218 133.51 253.63 R 7 X V 0 X N (Child) 102.47 238.09 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 369.1 265.51 410.68 301.14 R 7 X V 0 X N (Child) 379.64 285.6 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 369.1 218 410.68 253.63 R 7 X V 0 X N (Child) 379.64 238.09 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 230.52 372.39 272.09 408.02 R 7 X V 0 X N (Child) 241.05 392.48 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 230.52 324.89 272.09 360.52 R 7 X V 0 X N (Child) 241.05 344.98 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 230.52 419.9 272.09 467.4 R 7 X V 0 X N (Parent) 238.05 449.54 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 438.39 315.4 480.72 363.49 R 4 X V 0 X N 441.11 313.01 483.44 360.52 R 7 X V 0 X N (Remote) 446.52 344.36 T (data) 453.52 334.3 T (object) 450.27 324.25 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 285.95 457.92 328.27 506 R 4 X V 0 X N 288.67 455.53 330.99 503.03 R 7 X V 0 X N (Remote) 294.08 486.87 T (data) 301.07 476.82 T (object) 297.82 466.76 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 88.47 434.16 130.79 482.25 R 4 X V 0 X N 91.18 431.77 133.51 479.28 R 7 X V 0 X N (Remote) 96.59 463.12 T (mainlink) 261.92 288.67 T (1) 110.22 323.05 T (2) 110.22 275.54 T (N) 109.47 228.04 T (A) 109.72 380.1 T (data) 103.59 454.74 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 369.1 313.01 410.68 360.52 R 7 X V 0 X N (Parent) 376.63 342.65 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Graphic) 173.19 483.01 T (Object) 175.94 470.44 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (object) 100.34 446.36 T 7 X 90 450 27.72 17.81 389.89 402.08 G 0 X 90 450 27.72 17.81 389.89 402.08 A (Graphic) 374.14 405.82 T (Object) 376.89 393.25 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (sublink) 211.69 288.67 T (a) 342.35 335.26 T (a) 342.35 288.89 T (b) 151.79 400.58 T (b) 151.79 287.75 T (b) 200.3 394.64 T (c) 342.6 240.07 T (c) 342.6 311.32 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K J (Pointer to Graphic Object) 385.14 426.88 T J 371.29 430.43 343.57 430.43 2 L J 371.29 430.43 370.79 430.43 2 L 1 H N [0.921 4.606] 0.921 I 370.79 430.43 344.07 430.43 2 L N J 344.07 430.43 343.57 430.43 2 L N 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K (B) 248.3 439.54 T (C) 386.64 332.65 T (1) 387.39 275.6 T (M) 386.14 228.09 T (1) 248.8 382.48 T (L) 248.8 334.98 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 72 540 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "5" 7 %%Page: "4" 8 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K 0.21 ([6], either found directly in the response code from the remote server or by guessing. This model makes it very easy) 72 713.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (to install new stream converters and protocol modules.) 72 701.33 T 0 0 0 1 0 0 0 K 0 14 Q (4. The Str) 72 672.67 T (eam Concept) 131.25 672.67 T 0 0 0 1 0 0 0 K 1 10 Q -0.28 (Streams are the main method used in the Library for transporting data from the network to the client or vice versa, and) 72 653.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (they do therefore deserve a more thorough presentation.) 72 641.33 T 0 0 0 1 0 0 0 K 0 12 Q (4.1 What is a Str) 72 616 T (eam) 157.45 616 T 0 0 0 1 0 0 0 K 1 10 Q 0.02 (A stream is an object which accepts sequences of characters. It is a destination of data which can be thought of much) 72 600.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.14 (like an output stream in C++ or an ANSI file stream for writing data to a disk or another pheripheral device. The Li-) 72 588.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.48 (brary defines a generic stream class with five methods as illustrated in Figure 2. The output is also a stream and is often) 72 576.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.1 (referred to as the \322target\323 or \322sink\323. This class is a superclass of all other stream classes in the Library and it provides) 72 564.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (a uniform interface to all stream objects regardless of what stream sub-class they originate from.) 72 552.33 T 0 0 0 1 0 0 0 K 0 F (Figur) 237.63 465.64 T (e 2) 261.35 465.64 T 1 F (The generic stream class) 275.79 465.64 T 0 0 0 1 0 0 0 K 0.09 (Streams can be cascaded so that one stream writes into another using one or more of the methods shown in Figure 2.) 72 448.64 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.46 (This means that a required processing of data, for example reading data from the Internet can be done as the total effect) 72 436.64 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.5 (of several cascaded streams. The Library currently includes a large set of specific stream modules for writing to an) 72 424.64 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.57 (ANSI C-file structure, writing to a socket, stripping Carriage Returns, splitting a stream into two \050used for caching\051 etc.) 72 412.64 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.2 (The stream-based architecture allows the Library \050and hence applications built on top of it\051 to be event-driven in the) 72 394.64 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.2 (sense that when input arrives, it is put into a stream, and any necessary actions then cascade off this event. An event) 72 382.64 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.05 (can either be data arriving from the Internet, or data arriving from the client application. The latter would be the case) 72 370.64 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (when the client is posting a data object to a remote server.) 72 358.64 T 0 0 0 1 0 0 0 K 0 12 Q (4.2 Structur) 72 333.31 T (ed Str) 133.78 333.31 T (eams) 164.56 333.31 T 0 0 0 1 0 0 0 K 1 10 Q 0.05 (A structured stream is a subclass of a stream, but instead of just accepting data, it also accepts the SGML \322begin ele-) 72 317.64 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (ment\323, \322end element\323, and \322put entity\323 as illustrated in Figure 3) 72 305.64 T 0 0 0 1 0 0 0 K 0 F (Figur) 216.39 197.69 T (e 3) 240.1 197.69 T 1 F (The generic structured stream class) 254.54 197.69 T 0 0 0 1 0 0 0 K 0.51 (A structured stream therefore represents a structured document and can be thought of as the output from an SGML) 72 180.69 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (parser. It is more efficient for modules which generate hypertext objects to output a structured stream than to output) 72 168.69 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.17 (SGML which is then parsed. The elements and entities in the stream are referred to by numbers, rather than strings. A) 72 156.69 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (DTD contains the mapping between element names and numbers, so each instance of a structured stream is associated) 72 144.69 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.33 (with a corresponding DTD. The only DTD which is currently in the Library is an extended version of the HTML DTD) 72 132.69 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (level 1, but current work is done to update this to comply with the emerging HTML level 2.) 72 120.69 T 0 0 0 1 0 0 0 K 0 12 Q (4.3 Format Conversion Using the Str) 72 95.35 T (eam Stack) 260.44 95.35 T 0 0 0 1 0 0 0 K 1 10 Q -0.17 (The stream stack is used to select the most appropriate converter from the input format given by the protocol modules) 72 79.69 P 0 0 0 1 0 0 0 K 72 72 540 720 C 188.2 480.31 423.8 549 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 292.13 538.91 297.33 535.91 292.13 532.91 292.13 535.91 4 Y 0 X 0 0 0 1 0 0 0 K V 254.81 535.91 292.13 535.91 2 L 0.5 H 2 Z N 292.13 528.28 297.33 525.28 292.13 522.28 292.13 525.28 4 Y V 254.81 525.28 292.13 525.28 2 L N 292.13 517.65 297.33 514.65 292.13 511.65 292.13 514.65 4 Y V 254.81 514.65 292.13 514.65 2 L N 380.71 496.39 385.91 493.39 380.71 490.39 380.71 493.39 4 Y V 343.39 493.39 380.71 493.39 2 L N 3 9 Q (Put character) 194.2 532.63 T (Put string) 209.71 522 T (Put block) 210.71 511.37 T (Output) 390.78 490.38 T 292.13 507.02 297.33 504.02 292.13 501.02 292.13 504.02 4 Y V 254.81 504.02 292.13 504.02 2 L N (Free) 229.22 500.74 T 292.13 496.39 297.33 493.39 292.13 490.39 292.13 493.39 4 Y V 254.81 493.39 292.13 493.39 2 L N (Abort) 226.46 490.11 T 297.33 486.31 343.39 543 R 7 X V 0 X N (Generic) 302.83 525.81 T (Stream) 304.08 513.81 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 72 540 720 C 0 0 612 792 C 72 72 540 720 C 186.2 212.35 425.8 302.31 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 294.14 290.39 299.33 287.39 294.14 284.39 294.14 287.39 4 Y 0 X 0 0 0 1 0 0 0 K V 256.81 287.39 294.14 287.39 2 L 0.5 H 2 Z N 294.14 279.76 299.33 276.76 294.14 273.76 294.14 276.76 4 Y V 256.81 276.76 294.14 276.76 2 L N 294.14 269.13 299.33 266.13 294.14 263.13 294.14 266.13 4 Y V 256.81 266.13 294.14 266.13 2 L N 3 9 Q (Begin element) 192.2 284.11 T (End element) 199.2 273.47 T (Put Entity) 211.21 262.84 T 299.33 257.33 345.39 296.31 R 7 X V 0 X N (Structured) 301.6 279.12 T (Part) 314.11 267.12 T 382.72 228.44 387.91 225.44 382.72 222.44 382.72 225.44 4 Y V 345.39 225.44 382.72 225.44 2 L N (Output) 392.79 222.42 T 299.33 218.35 345.39 257.33 R 7 X V 0 X N (Generic) 306.61 240.14 T (Stream) 307.86 228.14 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 72 540 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "4" 8 %%Page: "3" 9 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K 0.46 (client then has to present the information to the user. The main elements in the figure are explained below. A more) 72 713.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (detailed description of the implementation of the Library is given in [2].) 72 701.33 T 0 0 0 1 0 0 0 K 0 F (Graphic Object:) 72 683.33 T 0 0 0 1 0 0 0 K 1 F -0.43 (A graphic object is a displayable entity handled and maintained by the client. It is built from the data) 144.77 683.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.11 (contained in a server response upon a successful request initiated by the user. The data can be of any format handled) 72 671.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.15 (by the client. The object can either be built directly from the data, e.g., if the data object returned is an HTML[4] doc-) 72 659.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.16 (ument, or it can be generated from a format converter within the Library. An example of the latter could be the gener-) 72 647.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (ation of an HTML object from an FTP directory listing \0507-bit ASCII\051. Graphic objects are in general coded differently) 72 635.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.03 (on different GUI platforms. The graphic object is responsible for displaying itself, catching mouse clicks, and calling) 72 623.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.07 (the Anchor Manager, either directly or via the History and Navigation Manager. Often the more common term \322doc-) 72 611.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.13 (ument\323 is used to describe the logical entity which a graphics object represents and displays. The client can keep the) 72 599.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (latest generated documents in memory in order to speed up back-tracking through already visited documents.) 72 587.33 T 0 0 0 1 0 0 0 K 0 F (Stream Manager:) 72 569.33 T 0 0 0 1 0 0 0 K 1 F -0.32 (The Stream Manager takes care of the transportation of streams of data from the Internet to the cli-) 150.31 569.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (ent and vice versa. This module is described in more detail in Section 4.) 72 557.33 T 0 0 0 1 0 0 0 K 0 F (Anchor Manager:) 72 539.33 T 0 0 0 1 0 0 0 K 1 F -0.06 (When a request is passed from the client to the Library it always has an anchor associated with it.) 151.43 539.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.08 (An anchor is an object representing the URI of a either a graphic object or a fragment of a graphic object. It contains) 72 527.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.62 (all information known about the URI. The Anchor Manager registers all requested anchors together with anchors found) 72 515.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.14 (when parsing hypertext objects. The anchors are stored in a hash table so that multiple references to a URI all points) 72 503.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.42 (to the same graphic object. It furthermore binds all registered anchors together corresponding to the logical binding) 72 491.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.35 (between the related data objects. In other words, this module generates an internal model of the part of the Web the) 72 479.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (user has been in touch with. The actual bindings between anchors are described in more detail in Section 5.) 72 467.33 T 0 0 0 1 0 0 0 K 0 F (Navigation and History:) 72 449.33 T 0 0 0 1 0 0 0 K 1 F -0.37 (This module keeps track of all) 177.84 449.33 P 0 0 0 1 0 0 0 K 2 F -0.37 (visited) 299.52 449.33 P 0 0 0 1 0 0 0 K 1 F -0.37 (anchors. The set of visited anchors is always less than) 327.77 449.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.05 (or equal to the total set of anchors registered in the Anchor Manager. Whereas the Anchor Manager manages a small) 72 437.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.08 (part of the Web, this module keeps an ordered list of all visited anchors so the user can do quick navigation through a) 72 425.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (history list.) 72 413.33 T 0 0 0 1 0 0 0 K 0 F (Client Cache Manager:) 72 395.33 T 0 0 0 1 0 0 0 K 1 F -0.43 (This is a single-user disk cache module specifically for WWW Clients. It is used to save data) 174.48 395.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.27 (objects once they have been downloaded from the Internet. The difference between a graphic object stored in memory) 72 383.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.16 (and a cached data object is that the former is already parsed and can immediately be displayed to the user whereas the) 72 371.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.39 (cached object must be parsed into a graphic object. The CERN proxy server has its own cache manager to handle a) 72 359.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.08 (large scale cache that can serve hundreds of clients connected to it. The client cache is especially made for clients not) 72 347.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (using a proxy cache or having a very slow link but a large local temporary storage.) 72 335.33 T 0 0 0 1 0 0 0 K 0 F (Protocol Manager:) 72 317.33 T 0 0 0 1 0 0 0 K 1 F -0.57 (The Protocol Manager is invoked by the Anchor Manager in order to access a document not found) 155.31 317.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.04 (in memory or in the cache \050for the proxy server it is the proxy cache\051. Each protocol module is responsible for estab-) 72 305.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.43 (lishing the connection to the remote server \050or the local file-system\051 and extract information using a specific access) 72 293.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.75 (method. Depending on the protocol, the Protocol Module either builds a hypertext object itself from the server re-) 72 281.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (sponse, or it passes a socket descriptor to the Stream Manager for parsing by one of the parser modules.) 72 269.33 T 0 0 0 1 0 0 0 K 0 F (Error Manager:) 72 251.33 T 0 0 0 1 0 0 0 K 1 F -0.34 (This module manages an information stack which contains information of all errors occurred during) 144.2 251.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.22 (the communication with a remote server or simply information about the current state. Using a stack for this kind of) 72 239.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (information provides the possibility of nested error messages like:) 72 227.33 T 0 0 0 1 0 0 0 K 3 9 Q (Fatal Error 500) 108 210 T (Can\325t access document \050ftp://info.cern.ch/foo.bar\051) 108 199 T (Reason: FTP-server replies: foo.bar: No such file or directory) 108 188 T 0 10 Q (Directory Listing Manager:) 72 171.33 T 0 0 0 1 0 0 0 K 1 F -0.42 (This module handles long directory listings with icons for HTTP and FTP, and local file) 192.81 171.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (access. Long directory listings are supported for Unix, VMS, and Window NT.) 72 159.33 T 0 0 0 1 0 0 0 K 0 12 Q (3.1 Modularity of the Library) 72 134 T 0 0 0 1 0 0 0 K 1 10 Q 0.2 (The Stream Manager and the Protocol Manager are both designed in a highly modular style in that they use pointers) 72 118.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.63 (to functions when they decide on what protocol or parser to use respectively. For the Protocol Manager, the actual) 72 106.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.57 (binding between an access scheme specified in the URL [5] and the protocol module used is done in a separate protocol) 72 94.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.43 (structure which can be setup at run-time. Likewise for the Stream Manager where the binding is based on MIME-types) 72 82.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "3" 9 %%Page: "2" 10 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (\245) 86.4 713.33 T (Whether to use ANSI C and Posix standards and the possible portability problems this might involve) 93.6 713.33 T 0 0 0 1 0 0 0 K 0.51 (Especially the last topic is a practical problem as many platforms do not fully support the standards as defined, but) 72 695.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (only implements a subset of these. It is therefore a compromise between choosing the largest possible subset of the set) 72 683.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (of standardized functions with a minimal loss in portability. Unfortunately there is no simple answer to this problem.) 72 671.33 T 0 0 0 1 0 0 0 K 0 14 Q (3. Library Ar) 72 642.67 T (chitectur) 153.02 642.67 T (e) 206.41 642.67 T 0 0 0 1 0 0 0 K 1 10 Q 0.54 (The general architecture of the Library as viewed from a client is illustrated in Figure 1. Servers and proxy servers) 72 623.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (have a slightly different view of the Library, but the client view is the most descriptive.) 72 611.33 T 0 0 0 1 0 0 0 K 0 F (Figur) 184.99 99.19 T (e 1) 208.7 99.19 T 1 F (Control \337ow of the Library viewed from the Client) 223.14 99.19 T 0 0 0 1 0 0 0 K 0.09 (The flow of the Library shows that all network communication and parsing of data objects is handled internally. The) 72 82.19 P 0 0 0 1 0 0 0 K 72 72 540 720 C 72 113.86 540 608 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 423.76 513.25 428.96 510.25 423.76 507.25 423.76 510.25 4 Y 0 X 0 0 0 1 0 0 0 K V 423.76 510.25 382.9 510.25 2 L 1 H 2 Z N 424.48 241.02 424.48 232.95 2 L N 489.64 241.02 489.64 230.25 2 L N 424.48 227.56 424.48 222.18 495.56 222.18 495.56 241.02 4 L N 309.59 549.66 315.57 550.14 312.99 544.72 311.29 547.19 4 Y V 258.88 511.16 311.29 547.19 2 L N 1 0 1 0 0 1 0 K 166.78 596.4 166.78 119.86 2 L 3 H 1 0 1 0 0 1 0 K N 0 0 0 1 0 0 0 K 192.54 523.67 195.1 518.25 189.12 518.74 190.83 521.2 4 Y 0 0 0 1 0 0 0 K V 149.04 550.13 190.83 521.2 2 L 1 H N 463.02 173.53 460.02 168.33 457.02 173.53 460.02 173.53 4 Y V 460.02 222.18 460.02 173.53 2 L N 320.81 445.63 320.81 434.86 2 L N 362.27 402.56 362.27 343.33 2 L N 154.21 197.64 149.01 200.64 154.21 203.64 154.21 200.64 4 Y V 332.65 200.64 154.21 200.64 2 L N 513.23 310.71 508.04 313.71 513.23 316.71 513.23 313.71 4 Y V 388.93 558.71 540 558.71 540 313.71 513.23 313.71 4 L N 425.2 316.71 430.4 313.71 425.2 310.71 425.2 313.71 4 Y V 394.13 310.71 388.93 313.71 394.13 316.71 394.13 313.71 4 Y V 425.2 313.71 394.13 313.71 2 L 0 Z N 208.25 230.25 489.64 230.25 2 L 2 Z N 208.25 241.02 208.25 230.25 2 L N 279.34 241.02 279.34 230.25 2 L N 350.43 241.02 350.43 230.25 2 L N 418.55 241.02 418.55 230.25 2 L N 365.27 216.6 362.27 211.41 359.27 216.6 362.27 216.6 4 Y V 362.27 230.25 362.27 216.6 2 L N 116.47 232.76 113.47 227.56 110.47 232.76 113.47 232.76 4 Y V 113.47 539.86 113.47 232.76 2 L N 306.72 561.71 311.92 558.71 306.72 555.71 306.72 558.71 4 Y V 137.16 558.71 306.72 558.71 2 L N 353.43 531.6 350.43 526.4 347.43 531.6 350.43 531.6 4 Y V 350.43 542.55 350.43 531.6 2 L N 196.4 480.63 510.37 480.63 2 L N 350.43 494.09 350.43 480.63 2 L N 199.4 472.37 196.4 467.17 193.4 472.37 196.4 472.37 4 Y V 196.4 480.63 196.4 472.37 2 L N 270.49 472.37 267.49 467.17 264.49 472.37 267.49 472.37 4 Y V 267.49 480.63 267.49 472.37 2 L N 323.81 472.37 320.81 467.17 317.81 472.37 320.81 472.37 4 Y V 320.81 480.63 320.81 472.37 2 L N 442.29 472.37 439.29 467.17 436.29 472.37 439.29 472.37 4 Y V 439.29 480.63 439.29 472.37 2 L N 513.37 472.37 510.37 467.17 507.37 472.37 510.37 472.37 4 Y V 510.37 480.63 510.37 472.37 2 L N 196.4 434.86 267.49 434.86 2 L N 196.4 445.63 196.4 434.86 2 L N 267.49 445.63 267.49 434.86 2 L N 234.95 429.29 231.95 424.1 228.95 429.29 231.95 429.29 4 Y V 231.95 434.86 231.95 429.29 2 L N 320.81 434.86 510.37 434.86 2 L N 380.05 445.63 380.05 434.86 2 L N 439.29 445.63 439.29 434.86 2 L N 510.37 445.63 510.37 434.86 2 L N 365.27 429.29 362.27 424.1 359.27 429.29 362.27 429.29 4 Y V 362.27 434.86 362.27 429.29 2 L N 471.9 429.29 468.9 424.1 465.9 429.29 468.9 429.29 4 Y V 468.9 434.86 468.9 429.29 2 L N 231.95 343.33 468.9 343.33 2 L N 418.59 348.52 415.59 343.33 412.59 348.52 415.59 348.52 4 Y V 415.59 356.79 415.59 348.52 2 L N 468.9 402.56 468.9 343.33 2 L N 231.95 402.56 231.95 343.33 2 L N 208.25 284.1 492.6 284.1 2 L N 350.43 297.56 350.43 284.1 2 L N 211.25 267.76 208.25 262.56 205.25 267.76 208.25 267.76 4 Y V 208.25 284.1 208.25 267.76 2 L N 282.34 267.76 279.34 262.56 276.34 267.76 279.34 267.76 4 Y V 279.34 284.1 279.34 267.76 2 L N 353.43 267.76 350.43 262.56 347.43 267.76 350.43 267.76 4 Y V 350.43 284.1 350.43 267.76 2 L N 424.51 267.76 421.51 262.56 418.51 267.76 421.51 267.76 4 Y V 421.51 284.1 421.51 267.76 2 L N 495.6 267.76 492.6 262.56 489.6 267.76 492.6 267.76 4 Y V 492.6 284.1 492.6 267.76 2 L N 202.33 402.56 261.57 424.1 10.77 RR 7 X V 0.5 H 0 X N 77.92 539.86 149.01 574.86 17.5 RR 7 X V 0 X N 311.92 494.1 388.93 526.4 16.15 RR 7 X V 0 X N 172.71 445.63 220.1 467.17 10.77 RR 7 X V 0 X N 243.79 445.63 291.19 467.17 10.77 RR 7 X V 0 X N 415.59 445.63 462.98 467.17 10.77 RR 7 X V 0 X N 3 12 Q (Client) 95.7 593.25 T (Library) 329 591.73 T 3 10 Q (HTTP) 183.35 452.66 T (NNTP) 253.88 452.66 T 356.35 445.63 403.74 467.17 10.77 RR 7 X V 0 X N (W) 367.45 452.66 T (AIS) 376.52 452.66 T (Gopher) 422.61 452.66 T 486.68 445.63 534.07 467.17 10.77 RR 7 X V 0 X N (FTP) 500.93 452.66 T (MIME) 218.89 409.58 T 332.65 402.56 391.89 424.1 10.77 RR 7 X V 0 X N 439.29 402.56 498.53 424.1 10.77 RR 7 X V 0 X N (Suf) 349.86 409.58 T (\336x) 364.69 409.58 T (Guess) 454.45 409.58 T 311.92 297.56 388.93 329.87 16.15 RR 7 X V 0 X N (Stream) 334.31 315.31 T 184.55 241.02 231.95 262.56 10.77 RR 7 X V 0 X N 255.64 241.02 303.04 262.56 10.77 RR 7 X V 0 X N 397.82 241.02 445.21 262.56 10.77 RR 7 X V 0 X N 326.73 241.02 374.12 262.56 10.77 RR 7 X V 0 X N 468.91 241.02 516.3 262.56 10.77 RR 7 X V 0 X N (Source) 263.5 248.05 T (Plain) 410.4 248.05 T (LaT) 194.08 248.05 T (eX) 210.2 248.05 T (HTML) 478.99 248.05 T (External) 332.09 247.78 T 332.65 189.87 391.89 211.41 10.77 RR 7 X V 0 X N 430.4 297.56 507.41 329.87 16.15 RR 7 X V 0 X N 311.92 542.55 388.93 574.86 16.15 RR 7 X V 0 X N (Client Cache) 440.29 315.31 T (Access) 334.31 560.31 T (Local File) 340.88 196.9 T 192.5 494.1 269.51 526.4 16.15 RR 7 X V 0 X N (Navigation) 207.39 512.05 T (and History) 205.72 502.94 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Protocol) 332.09 512.05 T (Manager) 330.7 502.94 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 77.92 184.48 149.01 219.48 17.5 RR 7 X V 0 X N J 226.02 456.4 237.87 456.4 2 L J 226.02 456.4 226.52 456.4 2 L 3 H N [0.723 5.062] 0.723 I 226.52 456.4 237.37 456.4 2 L N J 237.37 456.4 237.87 456.4 2 L N J 468.9 453.71 480.75 453.71 2 L J 468.9 453.71 469.4 453.71 2 L N [0.723 5.062] 0.723 I 469.4 453.71 480.25 453.71 2 L N J 480.25 453.71 480.75 453.71 2 L N J 380.05 251.79 391.89 251.79 2 L J 380.05 251.79 380.55 251.79 2 L N [0.723 5.062] 0.723 I 380.55 251.79 391.39 251.79 2 L N J 391.39 251.79 391.89 251.79 2 L N J (Requested) 89.29 202.93 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 77.92 136.02 149.01 171.02 17.5 RR 7 X V 0.5 H 0 X N (Graphic) 95.96 154.47 T (Object) 99.02 147.07 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Resource) 92.07 195.53 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 297.11 445.63 344.5 467.17 10.77 RR 7 X V 0 X N (Local) 308.86 452.66 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 383.05 472.37 380.05 467.17 377.05 472.37 380.05 472.37 4 Y V 380.05 480.63 380.05 472.37 2 L 1 H N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 377.08 356.79 454.1 389.1 16.15 RR 7 X V 0.5 H 0 X N (Directory) 395.59 374.75 T (Listings) 398.64 365.63 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 418.59 394.29 415.59 389.1 412.59 394.29 415.59 394.29 4 Y V 415.59 434.86 415.59 394.29 2 L 1 H N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (User Interface) 82.07 558.96 T (Manager) 93.74 549.85 T J 154.21 149.18 149.01 152.18 154.21 155.18 154.21 152.18 4 Y V 454.1 152.18 154.21 152.18 2 L N [2.982 4.971] 0 I 72 130.64 157.9 227.56 18 RR N J 353.43 335.06 350.43 329.87 347.43 335.06 350.43 335.06 4 Y V 350.43 343.33 350.43 335.06 2 L N 421.51 136.02 498.53 168.33 16.15 RR 7 X V 0.5 H 0 X N (Presentation) 431.95 153.78 T (Manager) 440.29 144.66 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Manager) 330.7 306.2 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Manager) 449.17 306.2 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Manager) 330.7 551.19 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 429.9 494.1 506.91 526.4 16.15 RR 7 X V 0 X N (Error & Info) 442.84 512.05 T (Manager) 448.68 502.94 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 72 540 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "2" 10 %%Page: "1" 11 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 18 Q 0 X 0 0 0 1 0 0 0 K (T) 128.34 708 T (owards a Uniform Library of Common Code) 138.69 708 T 5 16 Q (A Presentation of the CERN W) 128.14 673.33 T (orld-W) 332.76 673.33 T (ide W) 378.39 673.33 T (eb Library) 414.98 673.33 T 0 14 Q (Henrik Frystyk, H\214kon W) 191.14 635.67 T (. Lie, CERN) 347.76 635.67 T (Note:) 72 603.67 T 0 0 0 1 0 0 0 K 1 10 Q (This is a slightly revised version of the paper submitted for the WWW Chicago Conference.) 72 584.33 T 0 0 0 1 0 0 0 K 2 F (Henrik Frystyk, CERN October 24, 2025) 376.41 566.33 T 0 14 Q (Abstract) 72 537.67 T 2 10 Q -0.05 (This paper describes the curr) 72 518.33 P -0.05 (ent status of the W) 189.19 518.33 P -0.05 (orld-W) 261.94 518.33 P -0.05 (ide W) 289.72 518.33 P -0.05 (eb Library of Common Code and the work done in or) 311.8 518.33 P -0.05 (der) 524.22 518.33 P -0.01 (to start the conver) 72 506.33 P -0.01 (gence pr) 144.63 506.33 P -0.01 (ocess towar) 178.96 506.33 P -0.01 (ds a uniform Library) 226.07 506.33 P -0.01 (. Curr) 309.1 506.33 P -0.01 (ently many W) 333.17 506.33 P -0.01 (orld-W) 386.64 506.33 P -0.01 (ide W) 414.42 506.33 P -0.01 (eb applications ar) 436.54 506.33 P -0.01 (e using) 508.92 506.33 P (differ) 72 494.33 T (ent versions of the Library with a set of added functionality that is often either incompatible with the other ver-) 93.3 494.33 T (sions or r) 72 482.33 T (epr) 109.97 482.33 T (esents an overlap of code development. A new initiative has been taken at CERN in the context of the) 122.93 482.33 T (W3O collaboration with MIT in or) 72 470.33 T (der to conver) 210.25 470.33 T (ge the curr) 263.2 470.33 T (ent versions of the Library so that existing and futur) 306.71 470.33 T (e) 514.96 470.33 T (W) 72 458.33 T (orld-W) 79.41 458.33 T (ide W) 107.19 458.33 T (eb applications have a powerful and uniform interface to the Internet.) 129.32 458.33 T 0 14 Q (1. Intr) 72 429.67 T (oduction) 109.86 429.67 T 0 0 0 1 0 0 0 K 1 10 Q -0.58 (The CERN World-Wide Web Library of Common Code is a general code base that can be used as the basis for building) 72 410.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 (World-Wide Web clients and servers. It allows software suppliers and researchers to achieve the state of the art tech-) 72 398.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.85 (nology and derive their own resources to pushing forward that technology. As an example, the CERN Line Mode) 72 386.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.48 (Browser, the NeXTStep Editor and the HTTP Server \050including the CERN Proxy Server\051 are all built on top of the) 72 374.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.48 (Library. It contains code for accessing HTTP [3], FTP[7], Gopher[9], NNTP[8], and WAIS[10] servers, perform telnet) 72 362.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.4 (sessions and access the local file system. Furthermore it provides functionality for loading, parsing and caching graph-) 72 350.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (ic objects plus a wide spectrum of generic programming utilities.) 72 338.33 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (The development of the World-Wide Web Library of Common Code was started by Tim Berners-Lee in 1990. Ever) 72 320.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.16 (since the code has been subject to changes due to modifications in the architectural model, additions of new features) 72 308.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.4 (etc. This paper describes the current architecture in the Library and some of the ongoing projects of implementing new) 72 296.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.6 (features and changing the architecture. The Library code is public domain together with the CERN Line Mode Browser) 72 284.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (and the CERN HTTP Server and it is available from [1].) 72 272.33 T 0 0 0 1 0 0 0 K 0 14 Q (2. Implementation and Portability Concerns) 72 243.67 T 0 0 0 1 0 0 0 K 1 10 Q 0.04 (The Library is written in plain C and is especially designed to be used on a large set of different platforms. Currently) 72 224.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.38 (it supports more than 15 Unix flavors and VMS. A year ago it also supported the MS-DOS, Macintosh, VM/CMS, and) 72 212.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.06 (other platforms but this was with a limited set of the current functionality. Recently a new initiative has been taken at) 72 200.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.04 (CERN as a result of the \322First International Conference on the World-Wide Web\323 held in Geneva, Switzerland, May) 72 188.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.29 (1994. It involves the development teams from Lynx, Spyglass, NCSA, OmniWeb and others with special interest in) 72 176.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.51 (the development of a uniform Library. The goal is to converge current versions of the Library into a single version) 72 164.33 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (which can support a broad spectrum of applications. Current topics of discussion and development involve:) 72 152.33 T 0 0 0 1 0 0 0 K (\245) 86.4 134.33 T (Re-porting the Library to MS-DOS and Macintosh) 93.6 134.33 T (\245) 86.4 116.33 T (Enhancing the current architecture of the Library\321especially on de\336ning a client API) 93.6 116.33 T (\245) 86.4 98.33 T (Adding new features such as security) 93.6 98.33 T (, enhanced error handling, multiple threads, format converters, protocol) 242.08 98.33 T (modules.) 93.6 86.33 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "1" 11 %%Trailer %%BoundingBox: 0 0 612 792 %%PageOrder: Descend %%Pages: 11 %%DocumentFonts: Times-Bold %%+ Times-Roman %%+ Times-Italic %%+ Helvetica %%+ Symbol %%+ Times-BoldItalic %%EOF libwww/Library/User/Paper/LibraryPaperA4.ps0100644000076400001440000037505106302442064020302 0ustar danielusers%!PS-Adobe-3.0 %%BoundingBox: (atend) %%Pages: (atend) %%PageOrder: (atend) %%DocumentFonts: (atend) %%Creator: Frame 4.0 %%DocumentData: Clean7Bit %%EndComments %%BeginProlog % % Frame ps_prolog 4.0, for use with Frame 4.0 products % This ps_prolog file is Copyright (c) 1986-1993 Frame Technology % Corporation. All rights reserved. This ps_prolog file may be % freely copied and distributed in conjunction with documents created % using FrameMaker, FrameBuilder and FrameViewer as long as this % copyright notice is preserved. % % Frame products normally print colors as their true color on a color printer % or as shades of gray, based on luminance, on a black-and white printer. The % following flag, if set to True, forces all non-white colors to print as pure % black. This has no effect on bitmap images. /FMPrintAllColorsAsBlack false def % % Frame products can either set their own line screens or use a printer's % default settings. Three flags below control this separately for no % separations, spot separations and process separations. If a flag % is true, then the default printer settings will not be changed. If it is % false, Frame products will use their own settings from a table based on % the printer's resolution. /FMUseDefaultNoSeparationScreen true def /FMUseDefaultSpotSeparationScreen true def /FMUseDefaultProcessSeparationScreen false def % % For any given PostScript printer resolution, Frame products have two sets of % screen angles and frequencies for printing process separations, which are % recomended by Adobe. The following variable chooses the higher frequencies % when set to true or the lower frequencies when set to false. This is only % effective if the appropriate FMUseDefault...SeparationScreen flag is false. /FMUseHighFrequencyScreens true def % % PostScript Level 2 printers contain an "Accurate Screens" feature which can % improve process separation rendering at the expense of compute time. This % flag is ignored by PostScript Level 1 printers. /FMUseAcccurateScreens true def % % The following PostScript procedure defines the spot function that Frame % products will use for process separations. You may un-comment-out one of % the alternative functions below, or use your own. % % Dot function /FMSpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub } {dup mul exch dup mul add 1 exch sub }ifelse } def % % Line function % /FMSpotFunction { pop } def % % Elipse function % /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add % sqrt 1 exch sub } def % % /FMversion (4.0) def /FMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def /FMPColor FMLevel1 { false /colorimage where {pop pop true} if } { true } ifelse def /FrameDict 400 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } bind def } if /FMshowpage /showpage load def /FMquit /quit load def /FMFAILURE { dup = flush FMshowpage /Helvetica findfont 12 scalefont setfont 72 200 moveto show FMshowpage FMquit } def /FMVERSION { FMversion ne { (Frame product version does not match ps_prolog!) FMFAILURE } if } def /FMBADEPSF { (PostScript Lang. Ref. Man., 2nd Ed., H.2.4 says EPS must not call X ) dup dup (X) search pop exch pop exch pop length 4 -1 roll putinterval FMFAILURE } def /FMLOCAL { FrameDict begin 0 def end } def /concatprocs { /proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }def FrameDict begin /FMnone 0 def /FMcyan 1 def /FMmagenta 2 def /FMyellow 3 def /FMblack 4 def /FMcustom 5 def /FrameNegative false def /FrameSepIs FMnone def /FrameSepBlack 0 def /FrameSepYellow 0 def /FrameSepMagenta 0 def /FrameSepCyan 0 def /FrameSepRed 1 def /FrameSepGreen 1 def /FrameSepBlue 1 def /FrameCurGray 1 def /FrameCurPat null def /FrameCurColors [ 0 0 0 1 0 0 0 ] def /FrameColorEpsilon .001 def /eqepsilon { sub dup 0 lt {neg} if FrameColorEpsilon le } bind def /FrameCmpColorsCMYK { 2 copy 0 get exch 0 get eqepsilon { 2 copy 1 get exch 1 get eqepsilon { 2 copy 2 get exch 2 get eqepsilon { 3 get exch 3 get eqepsilon } {pop pop false} ifelse }{pop pop false} ifelse } {pop pop false} ifelse } bind def /FrameCmpColorsRGB { 2 copy 4 get exch 0 get eqepsilon { 2 copy 5 get exch 1 get eqepsilon { 6 get exch 2 get eqepsilon }{pop pop false} ifelse } {pop pop false} ifelse } bind def /RGBtoCMYK { 1 exch sub 3 1 roll 1 exch sub 3 1 roll 1 exch sub 3 1 roll 3 copy 2 copy le { pop } { exch pop } ifelse 2 copy le { pop } { exch pop } ifelse dup dup dup 6 1 roll 4 1 roll 7 1 roll sub 6 1 roll sub 5 1 roll sub 4 1 roll } bind def /CMYKtoRGB { dup dup 4 -1 roll add 5 1 roll 3 -1 roll add 4 1 roll add 1 exch sub dup 0 lt {pop 0} if 3 1 roll 1 exch sub dup 0 lt {pop 0} if exch 1 exch sub dup 0 lt {pop 0} if exch } bind def /FrameSepInit { 1.0 RealSetgray } bind def /FrameSetSepColor { /FrameSepBlue exch def /FrameSepGreen exch def /FrameSepRed exch def /FrameSepBlack exch def /FrameSepYellow exch def /FrameSepMagenta exch def /FrameSepCyan exch def /FrameSepIs FMcustom def setCurrentScreen } bind def /FrameSetCyan { /FrameSepBlue 1.0 def /FrameSepGreen 1.0 def /FrameSepRed 0.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 1.0 def /FrameSepIs FMcyan def setCurrentScreen } bind def /FrameSetMagenta { /FrameSepBlue 1.0 def /FrameSepGreen 0.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 1.0 def /FrameSepCyan 0.0 def /FrameSepIs FMmagenta def setCurrentScreen } bind def /FrameSetYellow { /FrameSepBlue 0.0 def /FrameSepGreen 1.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 1.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMyellow def setCurrentScreen } bind def /FrameSetBlack { /FrameSepBlue 0.0 def /FrameSepGreen 0.0 def /FrameSepRed 0.0 def /FrameSepBlack 1.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMblack def setCurrentScreen } bind def /FrameNoSep { /FrameSepIs FMnone def setCurrentScreen } bind def /FrameSetSepColors { FrameDict begin [ exch 1 add 1 roll ] /FrameSepColors exch def end } bind def /FrameColorInSepListCMYK { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsCMYK { pop true exit } if } forall dup true ne {pop false} if } bind def /FrameColorInSepListRGB { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsRGB { pop true exit } if } forall dup true ne {pop false} if } bind def /RealSetgray /setgray load def /RealSetrgbcolor /setrgbcolor load def /RealSethsbcolor /sethsbcolor load def end /setgray { FrameDict begin FrameSepIs FMnone eq { RealSetgray } { FrameSepIs FMblack eq { RealSetgray } { FrameSepIs FMcustom eq FrameSepRed 0 eq and FrameSepGreen 0 eq and FrameSepBlue 0 eq and { RealSetgray } { 1 RealSetgray pop } ifelse } ifelse } ifelse end } bind def /setrgbcolor { FrameDict begin FrameSepIs FMnone eq { RealSetrgbcolor } { 3 copy [ 4 1 roll ] FrameColorInSepListRGB { FrameSepBlue eq exch FrameSepGreen eq and exch FrameSepRed eq and { 0 } { 1 } ifelse } { FMPColor { RealSetrgbcolor currentcmykcolor } { RGBtoCMYK } ifelse FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind def /sethsbcolor { FrameDict begin FrameSepIs FMnone eq { RealSethsbcolor } { RealSethsbcolor currentrgbcolor setrgbcolor } ifelse end } bind def FrameDict begin /setcmykcolor where { pop /RealSetcmykcolor /setcmykcolor load def } { /RealSetcmykcolor { 4 1 roll 3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat setrgbcolor pop } bind def } ifelse userdict /setcmykcolor { FrameDict begin FrameSepIs FMnone eq { RealSetcmykcolor } { 4 copy [ 5 1 roll ] FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and { 0 } { 1 } ifelse } { FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind put FMLevel1 not { /patProcDict 5 dict dup begin <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -1 -1 moveto 9 9 lineto stroke } bind def <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def end def /patDict 15 dict dup begin /PatternType 1 def /PaintType 2 def /TilingType 3 def /BBox [ 0 0 8 8 ] def /XStep 8 def /YStep 8 def /PaintProc { begin patProcDict bstring known { patProcDict bstring get exec } { 8 8 true [1 0 0 -1 0 8] bstring imagemask } ifelse end } bind def end def } if /combineColor { FrameSepIs FMnone eq { graymode FMLevel1 or not { [/Pattern [/DeviceCMYK]] setcolorspace FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor } { FrameCurColors 3 get 1.0 ge { FrameCurGray RealSetgray } { FMPColor graymode and { 0 1 3 { FrameCurColors exch get 1 FrameCurGray sub mul } for RealSetcmykcolor } { 4 1 6 { FrameCurColors exch get graymode { 1 exch sub 1 FrameCurGray sub mul 1 exch sub } { 1.0 lt {FrameCurGray} {1} ifelse } ifelse } for RealSetrgbcolor } ifelse } ifelse } ifelse } { FrameCurColors 0 4 getinterval aload FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and FrameSepIs FMcustom eq and { FrameCurGray } { 1 } ifelse } { FrameSepIs FMblack eq {FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse graymode FMLevel1 or not { [/Pattern [/DeviceGray]] setcolorspace FrameCurPat setcolor } { graymode not FMLevel1 and { dup 1 lt {pop FrameCurGray} if } if RealSetgray } ifelse } ifelse } bind def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /dpiranges [ 2540 2400 1693 1270 1200 635 600 0 ] def /CMLowFreqs [ 100.402 94.8683 89.2289 100.402 94.8683 66.9349 63.2456 47.4342 ] def /YLowFreqs [ 95.25 90.0 84.65 95.25 90.0 70.5556 66.6667 50.0 ] def /KLowFreqs [ 89.8026 84.8528 79.8088 89.8026 84.8528 74.8355 70.7107 53.033 ] def /CLowAngles [ 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 ] def /MLowAngles [ 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 ] def /YLowTDot [ true true false true true false false false ] def /CMHighFreqs [ 133.87 126.491 133.843 108.503 102.523 100.402 94.8683 63.2456 ] def /YHighFreqs [ 127.0 120.0 126.975 115.455 109.091 95.25 90.0 60.0 ] def /KHighFreqs [ 119.737 113.137 119.713 128.289 121.218 89.8026 84.8528 63.6395 ] def /CHighAngles [ 71.5651 71.5651 71.5651 70.0169 70.0169 71.5651 71.5651 71.5651 ] def /MHighAngles [ 18.4349 18.4349 18.4349 19.9831 19.9831 18.4349 18.4349 18.4349 ] def /YHighTDot [ false false true false false true true false ] def /PatFreq [ 10.5833 10.0 9.4055 10.5833 10.0 10.5833 10.0 9.375 ] def /screenIndex { 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for } bind def /getCyanScreen { FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getMagentaScreen { FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getYellowScreen { FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse screenIndex dup 3 1 roll get 3 1 roll get { 3 div {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat FMSpotFunction } } {/FMSpotFunction load } ifelse 0.0 exch } bind def /getBlackScreen { FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse screenIndex get 45.0 /FMSpotFunction load } bind def /getSpotScreen { getBlackScreen } bind def /getCompositeScreen { getBlackScreen } bind def /FMSetScreen FMLevel1 { /setscreen load }{ { 8 dict begin /HalftoneType 1 def /SpotFunction exch def /Angle exch def /Frequency exch def /AccurateScreens FMUseAcccurateScreens def currentdict end sethalftone } bind } ifelse def /setDefaultScreen { FMPColor { orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer } { orgxfer cvx settransfer } ifelse orgfreq organgle orgproc cvx setscreen } bind def /setCurrentScreen { FrameSepIs FMnone eq { FMUseDefaultNoSeparationScreen { setDefaultScreen } { getCompositeScreen FMSetScreen } ifelse } { FrameSepIs FMcustom eq { FMUseDefaultSpotSeparationScreen { setDefaultScreen } { getSpotScreen FMSetScreen } ifelse } { FMUseDefaultProcessSeparationScreen { setDefaultScreen } { FrameSepIs FMcyan eq { getCyanScreen FMSetScreen } { FrameSepIs FMmagenta eq { getMagentaScreen FMSetScreen } { FrameSepIs FMyellow eq { getYellowScreen FMSetScreen } { getBlackScreen FMSetScreen } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse } bind def end /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgrxfer FMLOCAL /orggxfer FMLOCAL /orgbxfer FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /orgrproc FMLOCAL /orggproc FMLOCAL /orgbproc FMLOCAL /organgle FMLOCAL /orgrangle FMLOCAL /orggangle FMLOCAL /orgbangle FMLOCAL /orgfreq FMLOCAL /orgrfreq FMLOCAL /orggfreq FMLOCAL /orgbfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /edown FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne /manualfeed exch def /paperheight exch def /paperwidth exch def 0 ne /FrameNegative exch def 0 ne /edown exch def /yscale exch def /xscale exch def FMLevel1 { manualfeed {setmanualfeed} if /FMdicttop countdictstack 1 add def /FMoptop count def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} {false} ifelse { (Can't select requested paper size for Frame print job!) FMFAILURE } if count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for } {{1 dict dup /PageSize [paperwidth paperheight]put setpagedevice}stopped { (Can't select requested paper size for Frame print job!) FMFAILURE } if {1 dict dup /ManualFeed manualfeed put setpagedevice } stopped pop } ifelse FMPColor { currentcolorscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def cvlit /orgbproc exch def /orgbangle exch def /orgbfreq exch def cvlit /orggproc exch def /orggangle exch def /orggfreq exch def cvlit /orgrproc exch def /orgrangle exch def /orgrfreq exch def currentcolortransfer FrameNegative { 1 1 4 { pop { 1 exch sub } concatprocs 4 1 roll } for 4 copy setcolortransfer } if cvlit /orgxfer exch def cvlit /orgbxfer exch def cvlit /orggxfer exch def cvlit /orgrxfer exch def } { currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def currenttransfer FrameNegative { { 1 exch sub } concatprocs dup settransfer } if cvlit /orgxfer exch def } ifelse end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /pwid FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch dup /pwid exch def neg translate pop }{ pop /pwid exch def } ifelse edown { [-1 0 0 1 pwid 0] concat } if 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 0 paperheight lineto 0 0 lineto 1 setgray fill xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin dup array /fillvals exch def dict /patCache exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def % See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714. % "...the following operators MUST NOT be used in an EPS file:" (emphasis ours) /banddevice {(banddevice) FMBADEPSF} def /clear {(clear) FMBADEPSF} def /cleardictstack {(cleardictstack) FMBADEPSF} def /copypage {(copypage) FMBADEPSF} def /erasepage {(erasepage) FMBADEPSF} def /exitserver {(exitserver) FMBADEPSF} def /framedevice {(framedevice) FMBADEPSF} def /grestoreall {(grestoreall) FMBADEPSF} def /initclip {(initclip) FMBADEPSF} def /initgraphics {(initgraphics) FMBADEPSF} def /initmatrix {(initmatrix) FMBADEPSF} def /quit {(quit) FMBADEPSF} def /renderbands {(renderbands) FMBADEPSF} def /setglobal {(setglobal) FMBADEPSF} def /setpagedevice {(setpagedevice) FMBADEPSF} def /setshared {(setshared) FMBADEPSF} def /startjob {(startjob) FMBADEPSF} def /lettertray {(lettertray) FMBADEPSF} def /letter {(letter) FMBADEPSF} def /lettersmall {(lettersmall) FMBADEPSF} def /11x17tray {(11x17tray) FMBADEPSF} def /11x17 {(11x17) FMBADEPSF} def /ledgertray {(ledgertray) FMBADEPSF} def /ledger {(ledger) FMBADEPSF} def /legaltray {(legaltray) FMBADEPSF} def /legal {(legal) FMBADEPSF} def /statementtray {(statementtray) FMBADEPSF} def /statement {(statement) FMBADEPSF} def /executivetray {(executivetray) FMBADEPSF} def /executive {(executive) FMBADEPSF} def /a3tray {(a3tray) FMBADEPSF} def /a3 {(a3) FMBADEPSF} def /a4tray {(a4tray) FMBADEPSF} def /a4 {(a4) FMBADEPSF} def /a4small {(a4small) FMBADEPSF} def /b4tray {(b4tray) FMBADEPSF} def /b4 {(b4) FMBADEPSF} def /b5tray {(b5tray) FMBADEPSF} def /b5 {(b5) FMBADEPSF} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fw 2 div add fy fh 2 div add translate rotate fw 2 div neg fh 2 div neg translate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate /FMdicttop countdictstack 1 add def /FMoptop count def } bind def /FMENDEPSF { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } bind def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } bind def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } bind def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end statusdict begin stopped end } bind def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } bind def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped end } {true} ifelse } bind def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def FMPColor { /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def } ifelse /K { FMPrintAllColorsAsBlack { dup 1 eq 2 index 1 eq and 3 index 1 eq and not {7 {pop} repeat 0 0 0 1 0 0 0} if } if FrameCurColors astore pop combineColor } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setPatternMode { FMLevel1 { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne FrameNegative {not} if {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen offbits offbits onbits add div FrameNegative {1.0 exch sub} if /FrameCurGray exch def } { pop pop dup patCache exch known { patCache exch get } { dup patDict /bstring 3 -1 roll put patDict 9 PatFreq screenIndex get div dup matrix scale makepattern dup patCache 4 -1 roll 3 -1 roll put } ifelse /FrameCurGray 0 def /FrameCurPat exch def } ifelse /graymode false def combineColor } bind def /setGrayScaleMode { graymode not { /graymode true def FMLevel1 { setCurrentScreen } if } if /FrameCurGray exch def combineColor } bind def /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /PFill { graymode FMLevel1 or not { gsave 1 setgray eofill grestore } if } bind def /PStroke { graymode FMLevel1 or not { gsave 1 setgray stroke grestore } if stroke } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setPatternMode} {setGrayScaleMode} ifelse } bind def /V { PFill gsave eofill grestore } bind def /Vclip { clip } bind def /Vstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /N { PStroke } bind def /Nclip { strokepath clip newpath } bind def /Nstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /rad FMLOCAL /rarc {rad arcto } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath { x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath } stopped {x1 y1 x2 y2 R} if cleartomark } bind def /RRR { /rad exch def normalize /y4 exch def /x4 exch def normalize /y3 exch def /x3 exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath normalize moveto mark { x2 y2 x3 y3 rarc x3 y3 x4 y4 rarc x4 y4 x1 y1 rarc x1 y1 x2 y2 rarc closepath } stopped {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if cleartomark } bind def /C { grestore gsave R clip setCurrentScreen } bind def /CP { grestore gsave Y clip setCurrentScreen } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /Gstrk { savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /Gclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GG { gsave newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /GGclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GGstrk { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /Aclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /Astrk { Gstrk } bind def /AA { gsave savematrix newpath 3 index 2 div add exch 4 index 2 div sub exch normalize 3 index 2 div sub exch 4 index 2 div add exch translate rotate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /AAclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /AAstrk { GGstrk } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 7 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /rip { bis ris copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop ris gis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop gis bis copy pop dup add is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup dup 24 eq { pop pop 3 mul } { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL FMLevel1 { /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def % /u 0 def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def } { /colorSetup2 { [ /Indexed /DeviceRGB 255 {dup red exch get 255 div exch dup green exch get 255 div exch blue exch get 255 div} ] setcolorspace } bind def } ifelse /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch concatprocs settransfer } bind def /BITMAPCOLOR { /d 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def FMLevel1 { colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage } { colorSetup2 /is w d wbytes string def /cf currentfile def 7 dict dup begin /ImageType 1 def /Width w def /Height h def /ImageMatrix [w 0 0 h neg 0 h] def /DataSource {cf is readhexstring pop} bind def /BitsPerComponent d def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def FMLevel1 { colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage } { colorSetup2 /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def 7 dict dup begin /ImageType 1 def /Width w def /Height h def /ImageMatrix [w 0 0 h neg 0 h] def /DataSource {ip} bind def /BitsPerComponent d def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { /d 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 w getinterval def /gis im w w getinterval def /bis im w 2 mul w getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {w rip pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { /d 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 w getinterval def /gis im w w getinterval def /bis im w 2 mul w getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {w rip pop ris gis bis w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def /I { setdash } bind def /J { [] 0 setdash } bind def %%EndProlog %%BeginSetup (4.0) FMVERSION 1 1 0 0 595.28 841.89 0 1 14 FMDOCUMENT 0 0 /Times-Bold FMFONTDEFINE 1 0 /Times-Roman FMFONTDEFINE 2 0 /Times-Italic FMFONTDEFINE 3 0 /Helvetica FMFONTDEFINE 4 1 /Symbol FMFONTDEFINE 5 0 /Times-BoldItalic FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "11" 1 %%BeginPaperSize: A4 %%EndPaperSize 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 14 Q 0 X 0 0 0 1 0 0 0 K (Authors) 63.64 735.61 T 0 10 Q (Henrik Frystyk Nielsen, frystyk@info.cern.ch:) 63.64 716.28 T 0 0 0 1 0 0 0 K 1 F 0.79 (Joined the World-Wide Web Team at CERN, February 1994. He) 264.87 716.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.39 (completed his MSc degree as Engineer of Telecommunications at Aalborg University, Denmark, in august 1994. Hen-) 63.64 704.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.61 (rik is working in the CN division as a code developer in the World-Wide Web team. His research interests are enhanced) 63.64 692.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.04 (network protocols and communications systems. Henrik is currently responsible for the World-Wide Web Library of) 63.64 680.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Common Code and the Line Mode Browser.) 63.64 668.28 T 0 0 0 1 0 0 0 K 0 F (H\214kon W. Lie, howcome@info.cern.ch:) 63.64 650.28 T 0 0 0 1 0 0 0 K 1 F -0.14 (H\214kon is currently a Scientific Associate with the WWW project at CERN) 234.6 650.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.01 (while on leave from Norwegian Telecom Research where he holds a Research Scientist Position. At CERN he works) 63.64 638.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.14 (on the client side of the Library. He holds an MS from Massachusetts Institute of Technology where he worked in the) 63.64 626.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Electronic Publishing group of the MIT Media Lab.) 63.64 614.28 T 0 0 0 1 0 0 0 K 0 F (Authors\325 present Address:) 63.64 596.28 T 0 0 0 1 0 0 0 K 1 F (CERN, 1211 Geneva 23, Switzerland) 179.46 596.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "11" 1 %%Page: "10" 2 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 14 Q 0 X 0 0 0 1 0 0 0 K (9. Conclusions and Futur) 63.64 735.61 T (e Developments) 214.31 735.61 T 0 0 0 1 0 0 0 K 1 10 Q 0 (The Library of Common Code has recently gone through a phase of heavy code development and set of new features) 63.64 716.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.34 (are either being developed or is already available in the current version[1]. However, in order to have any effect on the) 63.64 704.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.34 (general evolution of the World-Wide Web project, much work must still be put into the development and maintenance) 63.64 692.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.31 (of the code. Furthermore it is vital that World-Wide Web developers see the Library as a powerful tool that offers a) 63.64 680.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.41 (wide spectrum of functionality relevant to World-Wide Web applications. The functionality must span fundamental) 63.64 668.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.06 (World-Wide Web features as well as experimental implementations such as gateways and format converters. We be-) 63.64 656.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.09 (lieve that the only way this can be achieved is by cooperation between the developers and the WWW-team at CERN) 63.64 644.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.05 (which has the responsibility of organizing and synchronizing development on the Library. Therefore, the goal of this) 63.64 632.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.39 (paper is to show the current state of the Library and at the same time to invite interested parties to join the working) 63.64 620.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (group for future developments.) 63.64 608.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Some of the plans for new features are) 63.64 590.28 T 0 0 0 1 0 0 0 K (\245) 78.04 572.28 T (Security encryption and authentication) 85.24 572.28 T (\245) 78.04 554.28 T (New MIME-parser which replaces a lar) 85.24 554.28 T (ge number of small sub-parsers) 243.61 554.28 T (\245) 78.04 536.28 T (Implementing general support for Put and Post methods for HTTP) 85.24 536.28 T (, NNTP) 349.39 536.28 T (, and SMTP) 379.39 536.28 T (\245) 78.04 518.28 T (Implementation of forms support) 85.24 518.28 T (\245) 78.04 500.28 T (Integrating a WhoIs++ module as a new URI access scheme) 85.24 500.28 T (\245) 78.04 482.28 T (Gateway to a Hyper) 85.24 482.28 T (-G server as a new access scheme) 165.29 482.28 T 0 14 Q (Acknowledgments) 63.64 453.61 T 0 0 0 1 0 0 0 K 1 10 Q -0.4 (We would like to thank Tim Berners-Lee and the large group of contributors for having started the work on the World-) 63.64 434.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.22 (Wide Web Library of Common Code. We would also like to thank the current working group for inspiration and at-) 63.64 422.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (tributing code so that new features are integrated into the Library.) 63.64 410.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (This work has been partly sponsored by the Norwegian research Council.) 63.64 392.28 T 0 0 0 1 0 0 0 K 0 14 Q (Refer) 63.64 363.61 T (ences) 96.8 363.61 T 0 0 0 1 0 0 0 K 1 10 Q ([1]) 63.64 344.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.cern.ch/hypertext/WWW/Library/Status.html,) 85.24 344.28 T 0 0 0 1 0 0 0 K 2 F (Status of the Library of Common Code) 314.39 344.28 T 0 0 0 1 0 0 0 K 1 F ([2]) 63.64 332.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1.89 (http://info.cern.ch/hypertext/WWW/Library/Implementation/Overview.html,) 85.24 332.28 P 0 0 0 1 0 0 0 K 2 F 1.89 (Library Internals and Program-) 397.36 332.28 P (mer\325s Guide) 85.24 320.28 T 0 0 0 1 0 0 0 K 1 F ([3]) 63.64 308.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.7 (http://info.cern.ch/hypertext/WWW/Protocols/HTTP/HTTP2.html,) 85.24 308.28 P 0 0 0 1 0 0 0 K 2 F 0.7 ( HTTP: A Protocol for Networked Informa-) 353.01 308.28 P (tion) 85.24 296.28 T 0 0 0 1 0 0 0 K 1 F ([4]) 63.64 284.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 2.35 (http://info.cern.ch/hypertext/WWW/MarkUp/MarkUp.html,) 85.24 284.28 P 0 0 0 1 0 0 0 K 2 F 2.35 (Hypertext Markup Language \050HTML\051: Working) 330.06 284.28 P (and background Material) 85.24 272.28 T 0 0 0 1 0 0 0 K 1 F ([5]) 63.64 260.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (http://info.cern.ch/hypertext/WWW/Addressing/Addressing.html,) 85.24 260.28 P 0 0 0 1 0 0 0 K 2 F 0.25 (UR* and the Names and Addresses of WWW) 351.3 260.28 P (Objects) 85.24 248.28 T 0 0 0 1 0 0 0 K 1 F ([6]) 63.64 236.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.internet.isi.edu/0/in-notes/rfc/files/rfc1521.txt) 85.24 236.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K ([7]) 63.64 224.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.internet.isi.edu/0/in-notes/rfc/files/rfc765.txt) 85.24 224.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K ([8]) 63.64 212.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.internet.isi.edu/0/in-notes/rfc/files/rfc977.txt) 85.24 212.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K ([9]) 63.64 200.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://info.internet.isi.edu/0/in-notes/rfc/files/rfc1436.txt) 85.24 200.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K ([10]) 63.64 188.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (http://server.wais.com/z3950.html,) 85.24 188.28 T 0 0 0 1 0 0 0 K 2 F (WAIS Network Publishing using Z3950) 227.18 188.28 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "10" 2 %%Page: "9" 3 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.28 (ets are made blocking instead of non-blocking. The mode preserves compatibility with World-Wide Web applications) 63.64 738.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.13 (with a single-threaded approach. Currently this mode does not provide interruptible I/O as this is a integral part of the) 63.64 726.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (event-loop.) 63.64 714.28 T 0 0 0 1 0 0 0 K 0 F (Active Mode:) 63.64 696.28 T 0 0 0 1 0 0 0 K 1 F -0.06 (In this mode the event-loop is placed in the Library. This mode is for dumb terminal clients which can) 123.62 696.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.22 (interrupt the execution through the keyboard. The client can, however, still be multi-threaded in the sense that it can) 63.64 684.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.02 (actively pre-fetch documents not yet requested by the user. If a key is hit, the Library calls a call-back function in the) 63.64 672.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.38 (client so the client can decide whether the current operation should be interrupted or not. If so, the Library stops all) 63.64 660.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.58 (I/O activity and handles the execution back to the client. The active mode should cause only minor changes to the client) 63.64 648.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (in order to obtain a simple form of multiple threads and interruptible I/O.) 63.64 636.28 T 0 0 0 1 0 0 0 K 0 F (Passive mode:) 63.64 618.28 T 0 0 0 1 0 0 0 K 1 F -0.18 (This mode requires the most advanced clients, for example GUI clients. The event-loop is now placed) 126.41 618.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.26 (outside the Library. On every URI request from the client, the Library initiates the connection and as soon as it nor-) 63.64 606.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.13 (mally would block, it returns a list of active socket descriptors to the client. When the client is notified about an event) 63.64 594.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.32 (on a socket, it calls a Library socket-handler passing the socket number. Then the socket handler finds the correspond-) 63.64 582.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.53 (ing request and starts the thread. As soon as the thread would perform a blocking I/O operation, the socket handler) 63.64 570.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (stops the thread and returns the execution to the client event-loop.) 63.64 558.28 T 0 0 0 1 0 0 0 K 0 12 Q (8.3 Contr) 63.64 532.95 T (ol Flow) 112.08 532.95 T 0 0 0 1 0 0 0 K 1 10 Q -0.21 (A consequence of having multiple threads in the Library is that the control flow changes to be event driven where any) 63.64 517.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.06 (action is initiated by an event either caused by the client or the network interface. However, as the current implemen-) 63.64 505.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.23 (tation of multiple threads is valid for HTTP access only, the control flow of the Library from Figure 1 has been pre-) 63.64 493.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (served but with the addition of an event-loop in the HTTP module. All other access schemes still use blocking I/O and) 63.64 481.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.34 (the user will not notice any difference from the current implementation. The result of this is that full multi-threaded) 63.64 469.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.44 (functionality is enabled only if the client uses consecutive HTTP requests. The internal event-loop is based on call-) 63.64 457.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (back functions and events on a set of registered socket descriptors as illustrated in Figure 7.) 63.64 445.28 T 0 0 0 1 0 0 0 K 0 F (Figur) 198.02 238.11 T (e 7) 221.73 238.11 T 1 F (Event-loop based on call-back functions) 236.17 238.11 T 0 0 0 1 0 0 0 K 0.02 (The event-loop handles two kinds of call back functions: Ones that are internal Library functions such as the specific) 63.64 221.11 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (protocol modules, and the ones that require an action taken by the client application.) 63.64 209.11 T 0 0 0 1 0 0 0 K 0 12 Q (8.4 Interrupting a HTTP Request) 63.64 183.78 T 0 0 0 1 0 0 0 K 1 10 Q -0.4 (The interrupt handler implemented for) 63.64 168.11 P 0 0 0 1 0 0 0 K 2 F -0.4 (active mode) 218.02 168.11 P 0 0 0 1 0 0 0 K 1 F -0.4 ( is non-eager as it is a part of the select function in the socket event-) 265.67 168.11 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.29 (loop. That is, an interrupt through standard input is caught when the executing thread is about to execute a blocking) 63.64 156.11 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.41 (I/O operation such as) 63.64 144.11 P 0 0 0 1 0 0 0 K 2 F -0.41 (read) 149.76 144.11 P 0 0 0 1 0 0 0 K 1 F -0.41 ( from the Internet and execution is handled back to the event-loop. The reason for this is that) 168.09 144.11 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.29 (the user is not blocked even though the interrupt does not get caught right away so it is not as critical as in a single-) 63.64 132.11 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.34 (threaded environment. In) 63.64 120.11 P 0 0 0 1 0 0 0 K 2 F -0.34 (passive mode) 165.94 120.11 P 0 0 0 1 0 0 0 K 1 F -0.34 ( the client has complete control over when to catch interrupts from the user and) 219.2 120.11 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (also how and when to handle them.) 63.64 108.11 T 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C 120.07 252.78 475.2 441.95 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 263.68 344.92 275.65 344 265.02 338.44 264.35 341.68 4 Y 0 X 0 0 0 1 0 0 0 K V 264.35 341.67 M 237.97 336.35 234.24 337.13 201.24 344 D 0.5 H 2 Z N 212.77 351.14 201.24 354.45 212.77 357.76 212.77 354.45 4 Y V 275.65 350.97 270.33 350.97 238.45 350.97 243.76 354.45 212.77 354.45 5 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 325.24 338.44 314.62 344 326.58 344.91 325.91 341.68 4 Y V 325.92 341.67 M 352.31 336.35 356.04 337.13 389.04 344 D N 377.5 357.76 389.04 354.45 377.5 351.14 377.5 354.45 4 Y V 314.63 350.97 319.94 350.97 351.83 350.97 346.52 354.45 377.5 354.45 5 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 241.34 294.38 230.23 289.85 237.25 299.58 239.3 296.98 4 Y V 274.43 329.65 271.05 326.98 250.73 311.01 257.32 311.15 239.3 296.98 5 L N 269.8 315.13 279.19 322.59 275.18 311.29 272.49 313.21 4 Y V 229.59 283.58 M 256.91 295.49 260.85 297.2 272.5 313.19 D N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 237.25 395.15 230.23 404.88 241.34 400.35 239.29 397.75 4 Y V 274.43 365.08 271.04 367.74 250.73 383.72 257.32 383.58 239.29 397.75 5 L N 275.19 383.45 279.19 372.14 269.8 379.61 272.49 381.53 4 Y V 229.58 411.14 M 256.9 399.24 260.84 397.52 272.5 381.54 D N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 190.61 386.34 229.59 435.95 R 7 X V 0 X N 162.26 322.56 201.24 372.17 R 7 X V 0 X N 389.04 322.56 428.01 372.17 R 7 X V 0 X N 275.65 322.56 314.63 372.17 R 7 X V 0 X N 3 9 Q (Event-) 282.13 358.57 T (Protocol) 392.02 358.81 T (Module) 393.77 349.33 T (Interrupt) 193.34 422.59 T (Handler) 194.34 413.11 T (New) 172.75 358.81 T (Request) 164.99 349.33 T 332.86 288.01 344.39 284.71 332.86 281.4 332.86 284.71 4 Y V 304 280.51 306.88 280.51 324.19 280.51 321.31 284.71 332.86 284.71 5 L N 334.44 299.34 344.39 292.63 332.39 293.05 333.42 296.2 4 Y V 333.42 296.19 M 323.18 299.12 319.68 297.94 304 292.63 D N (Information returned to loop) 346.52 292.64 T (Event has occurred) 346.52 280.57 T 3 10 Q (Client) 126.07 346.01 T (Library) 438.64 346.01 T 3 9 Q (Loop) 285.13 349.57 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 190.61 258.78 229.59 308.39 R 7 X V 0 X N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Put &) 199.09 294.21 T (Post) 201.09 285.21 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 311.08 393.43 396.12 407.6 R 7 X V 0 X N (Socket descriptors) 316.59 397.23 T 325.41 366.8 314.62 361.54 320.98 371.71 323.2 369.25 4 Y V 323.2 369.25 350.06 393.43 2 L N 365.88 382.61 360.68 393.43 370.82 387 368.35 384.81 4 Y V 368.35 384.8 389.04 361.54 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C -8.36 24.95 603.64 816.95 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "9" 3 %%Page: "8" 4 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.31 (However, the canonicalization does not recognize alias host names which would require that this information is stored) 63.64 738.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (in the cache.) 63.64 726.28 T 0 0 0 1 0 0 0 K 0 14 Q (8. Support for Multi-thr) 63.64 697.61 T (eaded I/O Operation) 208.05 697.61 T 0 0 0 1 0 0 0 K 1 10 Q 0.17 (In a single-process, single-threaded environment all requests to, e.g., the I/O interface traditionally block any further) 63.64 678.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.5 (processing. However, a combination of a multi-process or multi-threaded implementation makes provision for the user) 63.64 666.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.52 (to request several independent URIs at the same time without getting blocked by slow I/O operations. As a World-) 63.64 654.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.03 (Wide Web client is expected to use much of the execution time doing I/O operations such as \322connect\323 and \322read\323, a) 63.64 642.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.43 (high degree of optimization can be obtained if multiple threads can run at the same time. This section describes the) 63.64 630.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.08 (current implementation of multiple threads in the HTTP Module. Later it is expected that other protocol modules are) 63.64 618.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.34 (added. The NNTP, Gopher, and FTP module have all been rewritten as state machines so they can with minor changes) 63.64 606.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (be included in the event-loop.) 63.64 594.28 T 0 0 0 1 0 0 0 K 0 12 Q (8.1 Platform Independent Implementation) 63.64 568.95 T 0 0 0 1 0 0 0 K 1 10 Q -0.03 (The major concern in the design of the multi-threaded Library has been to make a platform independent implementa-) 63.64 553.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.87 (tion which excludes use of traditional thread packages like DECthreads. IEEE has publicized the POSIX standard) 63.64 541.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.31 (1003.4 for multi-threaded programming but even this will eventually limit the portability referring to the discussion in) 63.64 529.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.26 (Section 2. Instead, the multi-threaded functionality of the HTTP client has been designed to be used in a single-pro-) 63.64 517.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (cessor, single-threaded environment as illustrated in Figure 6) 63.64 505.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 F (Figur) 155.56 325.28 T (e 6) 179.27 325.28 T 2 F (Left:) 193.71 325.28 T 1 F ( T) 212.6 325.28 T (raditional threads and) 220.86 325.28 T 2 F (right:) 310.01 325.28 T 1 F (Model used in the Library) 335.29 325.28 T 0 0 0 1 0 0 0 K -0.32 (The difference between this technique and \322traditional\323 threads is that all information about a thread is stored in a data) 63.64 308.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.06 (object which exists throughout the lifetime of the thread. This implies that the following rules must be kept regarding) 63.64 296.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (memory management:) 63.64 284.28 T 0 0 0 1 0 0 0 K (\245) 78.04 266.28 T (Global variables can be used only if they at all time are independent of the current state of the active thread.) 85.24 266.28 T (\245) 78.04 248.28 T -0.23 (Automatic variables can be used only if they are initialized on every entry to the function and stay state indepen-) 85.24 248.28 P (dent of the current thread throughout their lifetime.) 85.24 236.28 T (\245) 78.04 218.28 T (All information necessary for completing a thread must be kept in an autonomous data object that is passed) 85.24 218.28 T (round the control \337ow via the stack.) 85.24 206.28 T 0 0 0 1 0 0 0 K 0.29 (These rules makes it possible to imply a multi-threaded data model using only one stack without causing portability) 63.64 188.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (problems as it is all done in plain C.) 63.64 176.28 T 0 0 0 1 0 0 0 K 0 12 Q (8.2 Modes of Operation) 63.64 150.95 T 0 0 0 1 0 0 0 K 1 10 Q 0.22 (In order to keep the functionality of the Library as general as possible, three different modes of operation are imple-) 63.64 135.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (mented:) 63.64 123.28 T 0 0 0 1 0 0 0 K 0 F (Base Mode:) 63.64 105.28 T 0 0 0 1 0 0 0 K 1 F -0.44 (This mode is strictly single-threaded. The difference between this mode and the other two is that all sock-) 116.41 105.28 P 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C 63.64 339.95 531.64 483.95 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 311.26 339.95 531.64 483.95 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 424.91 402.24 430.11 399.24 424.91 396.24 424.91 399.24 4 Y V 360.78 399.24 424.91 399.24 2 L 1 H N 374.76 416.86 380.58 418.3 378.92 412.54 376.84 414.7 4 Y V 360.78 399.24 376.84 414.7 2 L N 378.92 385.95 380.58 380.19 374.76 381.63 376.84 383.79 4 Y V 360.78 399.24 376.84 383.79 2 L N 63.64 339.95 284.02 483.95 R 7 X V 0.5 H 0 X N 229.54 359.01 274.11 479.71 R 7 X V 0 X N 3 9 Q (Thread) 237.57 467.83 T 180.01 359.01 224.58 479.71 R 7 X V 0 X N (Thread) 188.04 467.83 T 130.49 359.01 175.06 479.71 R 7 X V 0 X N 132.97 445.83 172.59 462.77 R 7 X V 0 X N 132.97 361.13 172.59 437.36 R 7 X V 0 X N (Registers) 133.77 450.89 T (Stack) 141.52 395.84 T 182.49 445.83 222.11 462.77 R 7 X V 0 X N 182.49 361.13 222.11 437.36 R 7 X V 0 X N (Registers) 183.3 450.89 T (Stack) 191.04 395.84 T 232.01 445.83 271.63 462.77 R 7 X V 0 X N 232.01 361.13 271.63 437.36 R 7 X V 0 X N (Registers) 232.82 450.89 T (Stack) 240.57 395.84 T (Thread) 138.52 467.83 T 73.54 390.77 113.16 407.71 R 7 X V 0 X N (Heap) 82.6 395.84 T 73.54 416.18 113.16 433.12 R 7 X V 0 X N (Static) 82.1 421.25 T 73.54 365.36 113.16 382.3 R 7 X V 0 X N (Code) 82.6 370.42 T J 68.59 441.59 279.06 441.59 279.06 344.19 68.59 344.19 4 Y J 68.59 440.84 68.59 441.59 69.34 441.59 3 L N [1.503 4.51] 1.503 I 69.34 441.59 278.3 441.59 2 L N J 278.3 441.59 279.06 441.59 279.06 440.84 3 L N [1.522 4.567] 1.522 I 279.06 440.84 279.06 344.94 2 L N J 279.06 344.94 279.06 344.19 278.31 344.19 3 L N [1.503 4.51] 1.503 I 278.31 344.19 69.34 344.19 2 L N J 69.34 344.19 68.59 344.19 68.59 344.94 3 L N [1.522 4.567] 1.522 I 68.59 344.94 68.59 440.84 2 L N (Memory) 157.57 347.46 T J (Process) 71.07 471.84 T 477.15 359.01 521.72 479.71 R 7 X V 0 X N (Thread) 485.18 467.83 T 479.63 445.83 519.25 462.77 R 7 X V 0 X N 479.63 361.13 519.25 437.36 R 7 X V 0 X N (Registers) 480.44 450.89 T (Stack) 488.18 395.84 T 321.16 390.77 360.78 407.71 R 7 X V 0 X N (Heap) 330.21 395.84 T 321.16 416.18 360.78 433.12 R 7 X V 0 X N (Static) 329.71 421.25 T 321.16 365.36 360.78 382.3 R 7 X V 0 X N (Code) 330.21 370.42 T J 316.21 441.59 526.68 441.59 526.68 344.19 316.21 344.19 4 Y J 316.21 440.84 316.21 441.59 316.96 441.59 3 L N [1.503 4.51] 1.503 I 316.96 441.59 525.92 441.59 2 L N J 525.92 441.59 526.68 441.59 526.68 440.84 3 L N [1.522 4.567] 1.522 I 526.68 440.84 526.68 344.94 2 L N J 526.68 344.94 526.68 344.19 525.93 344.19 3 L N [1.503 4.51] 1.503 I 525.93 344.19 316.96 344.19 2 L N J 316.96 344.19 316.21 344.19 316.21 344.94 3 L N [1.522 4.567] 1.522 I 316.21 344.94 316.21 440.84 2 L N (Memory) 405.19 347.46 T J (Process) 318.68 471.84 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 378.11 414.07 420.2 435.24 10.59 RR 6 X V 0 X N (Thread) 384.9 425.61 T (State) 388.65 418.44 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 428.87 388.65 470.96 409.83 10.59 RR 6 X V 0 X N (Thread) 435.66 400.2 T (State) 439.41 393.03 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 378.11 363.24 420.2 384.42 10.59 RR 6 X V 0 X N (Thread) 384.9 374.79 T (State) 388.65 367.62 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C -8.36 24.95 603.64 816.95 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "8" 4 %%Page: "7" 5 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (\245) 78.04 738.28 T 2 F -0.23 (User) 85.24 738.28 P -0.23 (-Agent:) 104.48 738.28 P 1 F -0.23 ( The user agent is by many clients currently generated in a somewhat verbose format. The goal is to) 134.47 738.28 P -0.08 (make this \336eld machine readable so it can be used on the server side to perform individual actions as a function) 85.24 726.28 P (of the client implementation. As a side ef) 85.24 714.28 T (fect it can also be used for statistics etc.) 250.04 714.28 T (\245) 78.04 696.28 T 2 F (Authorization:) 85.24 696.28 T 0 0 0 1 0 0 0 K 1 F (If the user already has typed in a user ID and a password for access authorization in a previous) 146.08 696.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.37 (HTTP request the HTTP client also transmits the authorization MIME-header. However, this does not guarantee) 85.24 684.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (that the user ID and password are sufficient for actually accessing the requested resource.) 85.24 672.28 T 0 0 0 1 0 0 0 K 0 F (Sent Request:) 63.64 654.28 T 0 0 0 1 0 0 0 K 1 F 0.26 (The client waits until a response is given from the server or the connection is timed out in case of an) 125.3 654.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (error situation. The client is capable of differentiating HTTP 0.9 responses from HTTP 1.0 responses.) 63.64 642.28 T 0 0 0 1 0 0 0 K 0 F (Need Access Authorization:) 63.64 624.28 T 0 0 0 1 0 0 0 K 1 F -0.29 (If a 401 Unauthorized status code is returned, the module prompts the user for a user ID) 184.45 624.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.41 (and a password. The connection is closed before the user is actually asked, so any new request initiated upon a 401) 63.64 612.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (status code causes a new connection to be established.) 63.64 600.28 T 0 0 0 1 0 0 0 K 0 F (Redirection:) 63.64 582.28 T 0 0 0 1 0 0 0 K 1 F -0.35 (The module supports both a temporarily \050302\051 and a permanent \050301\051 redirection code returned from the) 119.46 582.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.54 (server. In both cases, the connection is closed and the Protocol Manager is called recursively until a document is found,) 63.64 570.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.05 (an error has occurred, or the maximum number of redirections has been reached. The URI returned in the redirection) 63.64 558.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.24 (response from the remote server is parsed back to the client via the Error and Information Manager. If it is a 301 code,) 63.64 546.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (an intelligent client can use this information to change the document in which the redirected URI originates.) 63.64 534.28 T 0 0 0 1 0 0 0 K 0 F (Need Body:) 63.64 516.28 T 0 0 0 1 0 0 0 K 1 F 0.6 (If a body is included in the response from the server, the module reads the data from the network and) 115.86 516.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (direct it to the Stream Manager which sets up a stream stack to handle the desired format conversion.) 63.64 504.28 T 0 0 0 1 0 0 0 K 0 F (Got Data:) 63.64 486.28 T 0 0 0 1 0 0 0 K 1 F -0.5 (When the data object has been loaded from the Internet, the module terminates the request and handles con-) 108.63 486.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (trol back to the client.) 63.64 474.28 T 0 0 0 1 0 0 0 K 0 F (Error or Failure:) 63.64 456.28 T 0 0 0 1 0 0 0 K 1 F 0.77 (If at any point in the request handling an error occurs the request is aborted and the connection) 140.01 456.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.6 (closed. All information about the error is parsed back to the client via the Error and Information Manager. As the HTTP) 63.64 444.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.34 (protocol is stateless, all errors are fatal between the server and the client. If the erroneous request is to be corrected,) 63.64 432.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (the state machine jumps back to the initial state.) 63.64 420.28 T 0 0 0 1 0 0 0 K 0 14 Q (7. Cache of Host Names) 63.64 391.61 T 0 0 0 1 0 0 0 K 1 10 Q -0.61 (As excessive communication with Domain Name Servers \050DNS\051 can produce a significant time-overhead, a new mem-) 63.64 372.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.12 (ory cache of host names have been implemented to limit the amount of requests to DNS. Once a host name has been) 63.64 360.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.37 (resolved into an IP-address, it is stored in the cache. The entry stays in the cache until an error occurs when connecting) 63.64 348.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (to the remote host or it is removed during garbage collection.) 63.64 336.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.37 (Multi-homed hosts are treated specially as all available IP-addresses returned from DNS are stored in the cache. Every) 63.64 318.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.22 (time a request is made to the host, the time-to-connect is measured and a weight function is calculated to indicate how) 63.64 306.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (fast the IP-address was. The weight function used is) 63.64 294.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.18 (where) 63.64 241.65 P 4 F -0.18 (a) 90.39 241.65 P 1 F -0.18 ( indicates the sensitivity of the function and) 96.7 241.65 P 4 F -0.18 (D) 272.46 241.65 P 1 F -0.18 ( is the connect time. If one IP-address is not reachable a penalty) 278.58 241.65 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.13 (of) 63.64 229.65 P 0 0 0 1 0 0 0 K 2 F 0.13 (x) 74.6 229.65 P 0 0 0 1 0 0 0 K 1 F 0.13 ( seconds is added to the weight where the penalty is a function of the error returned from the \322connect\323 call. The) 79.04 229.65 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (next time a request is initiated to the remote host, the IP-address with the smallest weight is used.) 63.64 217.65 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.24 (A problem with both the host cache and the document cache \050either on server side or client side\051 is to detect when two) 63.64 199.65 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.05 (URLs are equivalent. The only way this can be done internally in the Library is to canonicalize the URLs before they) 63.64 187.65 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.22 (are compared. This has for some time been done by looking at the path segment of the URLs and remove redundant) 63.64 175.65 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (information by converting URLs like) 63.64 163.65 T 0 0 0 1 0 0 0 K 3 9 Q (foo/./bar/ = foo/redundant/../bar/ = foo/bar/) 213.83 146.31 T 0 0 0 1 0 0 0 K 1 10 Q -0.21 (The method is now optimized and expanded so that also host names are canonicalized. Hence the following URLs are) 63.64 129.65 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (all recognized to be identical:) 63.64 117.65 T 0 0 0 1 0 0 0 K 3 9 Q (http://info/ = http://info.cern.ch:80/ = http://INFO.CeRn.CH/ = http://info.cern.ch./ = http://info.cern.ch/) 98.77 100.31 T 63.64 96.95 531.64 744.95 C 189.21 256.31 406.07 290.95 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 2 9 Q 0 X 0 0 0 1 0 0 0 K (W) 190.21 270.73 T (n) 203.59 270.73 T 1 F (1) 217.66 270.73 T (+) 210.34 270.73 T 4 F (\050) 199.73 270.73 T (\051) 222.58 270.73 T 2 F (W) 251.82 277.8 T (n) 265.21 277.8 T 4 F (\050) 261.35 277.8 T (\051) 270.12 277.8 T 1 F (1) 289.55 277.8 T 4 F (a) 303.05 277.8 T 1 F (\320) 296.3 277.8 T 4 F (\050) 285.69 277.8 T (\051) 309.14 277.8 T (D) 320.38 277.8 T (\327) 315.88 277.8 T 1 F (+) 276.87 277.8 T (i) 329.48 277.8 T (f) 331.98 277.8 T (a) 337.23 277.8 T (c) 341.23 277.8 T (t) 345.22 277.8 T (i) 347.73 277.8 T (v) 350.23 277.8 T (e) 354.73 277.8 T (I) 360.97 277.8 T (P) 363.97 277.8 T (-) 368.97 277.8 T (a) 371.97 277.8 T (d) 375.97 277.8 T (d) 380.47 277.8 T (r) 384.97 277.8 T (e) 387.96 277.8 T (s) 391.96 277.8 T (s) 395.46 277.8 T (0) 251.82 265.21 T (.) 256.32 265.21 T (9) 258.57 265.21 T 2 F (W) 269.82 265.21 T (n) 283.2 265.21 T 4 F (\050) 279.34 265.21 T (\051) 288.12 265.21 T (\327) 265.32 265.21 T 1 F (e) 329.48 265.21 T (l) 333.48 265.21 T (s) 335.98 265.21 T (e) 339.48 265.21 T 4 F (\356) 242.64 263.35 T (\355) 242.64 271.07 T (\354) 242.64 278.78 T 1 F (=) 231.57 270.73 T 63.64 96.95 531.64 744.95 C -8.36 24.95 603.64 816.95 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "7" 5 %%Page: "6" 6 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 14 Q 0 X 0 0 0 1 0 0 0 K (6. Implementation of the HTTP Module) 63.64 735.61 T 0 0 0 1 0 0 0 K 1 10 Q -0.25 (The HTTP client is based on the HTTP 1.0 specification but is backwards compatible with version 0.9. The major dif-) 63.64 716.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.29 (ference between this and previous implementations is that this version is a state machine based on the state diagram) 63.64 704.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.45 (illustrated in Figure 5. As will be discussed in Section 8, the state-machine design has some inherent advantages which) 63.64 692.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (makes it suitable in a multi-threaded environment, even though the HTTP protocol is stateless by nature.) 63.64 680.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (.) 63.64 662.28 T 0 0 0 1 0 0 0 K 0 F (Figur) 169.82 380.28 T (e 5) 193.53 380.28 T 1 F (State Diagram of the Client part of the HTTP Protocol) 207.97 380.28 T 0 0 0 1 0 0 0 K (The individual states and the transitions between them are explained below.) 63.64 363.28 T 0 0 0 1 0 0 0 K 0 F (Begin:) 63.64 345.28 T 0 0 0 1 0 0 0 K 1 F 0.19 (This state is the initial state where the HTTP module sets up the required data structures needed for handling) 93.92 345.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (the request.) 63.64 333.28 T 0 0 0 1 0 0 0 K 0 F (Need Connection:) 63.64 315.28 T 0 0 0 1 0 0 0 K 1 F -0.15 (The HTTP client is ready for setting up a connection to the remote host. The connection is always) 142.52 315.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (initiated by a) 63.64 303.28 P 0 0 0 1 0 0 0 K 2 F 0.25 (connect) 119.11 303.28 P 0 0 0 1 0 0 0 K 1 F 0.25 ( system call. This procedure has been optimized by using a cache of visited host names as will) 150.21 303.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (be explained in Section 7.) 63.64 291.28 T 0 0 0 1 0 0 0 K 0 F (Need Request:) 63.64 273.28 T 0 0 0 1 0 0 0 K 1 F -0.26 (After connection establishment, the module sends the HTTP request to the remote server. The request) 128.07 273.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (consists of an HTTP header line, a set of MIME Headers, and possibly a data object to be posted to the server. Current) 63.64 261.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.41 (methods supported in the module are GET and HEAD, but support for PUT and POST is under development. The sup-) 63.64 249.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (ported MIME-headers are:) 63.64 237.28 T 0 0 0 1 0 0 0 K (\245) 78.04 219.28 T 2 F (Accept:) 85.24 219.28 T 1 F ( The current implementation uses one accept line for each MIME-type supported by the client. For) 115.78 219.28 T -0.16 (advanced clients this means that the \322Accept:\323 sequence is repeated 20-30 times which gives a overhead of 200-) 85.24 207.28 P (300 bytes per request \050including the CRLF telnet EOL-sequence\051. This should be changed so that either a) 85.24 195.28 T (comma separated list is transmitted instead or only the MIME content types without any subtypes.) 85.24 183.28 T (\245) 78.04 165.28 T 2 F -0.14 (Refer) 85.24 165.28 P -0.14 (er:) 106.53 165.28 P 1 F -0.14 ( If any parent anchor is known to the requested URI it is sent in the referer \336eld. This is to let the server) 118.19 165.28 P (know what link has led to the current request. Nothing is sent if the parent anchor is unknown or does not exist.) 85.24 153.28 T (\245) 78.04 135.28 T 2 F -0.04 (Fr) 85.24 135.28 P -0.04 (om:) 94.87 135.28 P 1 F -0.04 ( The full email address is sent along the request. It is meant as an informative service to the recipient and) 110.42 135.28 P (can be changed to any value the user wishes to sign the request with. As it is possible to manipulate the email) 85.24 123.28 T (address, this \336eld can not be used as identity veri\336cation for access authentication.) 85.24 111.28 T 63.64 96.95 531.64 744.95 C 75.64 394.95 519.64 658.95 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 374.78 433.15 371.78 427.95 368.78 433.15 371.78 433.15 4 Y 0 X 0 0 0 1 0 0 0 K V 371.78 433.15 371.78 445.95 2 L 0.5 H 2 Z N 306.05 591.45 300.86 594.45 306.05 597.45 306.05 594.45 4 Y V 306.05 594.45 468.5 594.45 468.5 517.95 3 L N 262.17 531.45 462.05 531.45 2 L N 462.05 531.1 462.05 517.6 2 L N 104.43 575.75 107.43 580.95 110.43 575.75 107.43 575.75 4 Y V 107.43 459.45 107.43 575.75 2 L N 107.43 459.45 133.22 459.45 2 L N 146.11 459.45 249.28 459.45 2 L N 321.45 462.45 326.65 459.45 321.45 456.45 321.45 459.45 4 Y V 262.17 459.45 321.45 459.45 2 L N 258.73 613.14 255.73 607.95 252.73 613.14 255.73 613.14 4 Y V 255.73 625.95 255.73 613.14 2 L N 258.73 568.14 255.73 562.95 252.73 568.14 255.73 568.14 4 Y V 255.73 580.95 255.73 568.14 2 L N 258.73 523.14 255.73 517.95 252.73 523.14 255.73 523.14 4 Y V 255.73 535.95 255.73 523.14 2 L N 258.73 433.15 255.73 427.95 252.73 433.15 255.73 433.15 4 Y V 255.73 490.95 255.73 433.15 2 L N 374.78 478.15 371.78 472.95 368.78 478.15 371.78 478.15 4 Y V 300.86 499.95 371.78 499.95 371.78 478.15 3 L N 177.1 591.45 171.9 594.45 177.1 597.45 177.1 594.45 4 Y V 210.59 594.45 177.1 594.45 2 L N 143.12 575.75 146.11 580.95 149.11 575.75 146.11 575.75 4 Y V 210.59 549.45 146.11 549.45 146.11 575.75 3 L N 117.32 575.75 120.32 580.95 123.32 575.75 120.32 575.75 4 Y V 210.59 508.95 120.32 508.95 120.32 575.75 3 L N 142.67 433.15 139.67 427.95 136.67 433.15 139.67 433.15 4 Y V 210.59 499.95 139.67 499.95 139.67 433.15 3 L N 418.17 511.95 423.36 508.95 418.17 505.95 418.17 508.95 4 Y V 300.86 508.95 418.17 508.95 2 L N 130.22 575.75 133.22 580.95 136.22 575.75 133.22 575.75 4 Y V 133.22 531.45 133.22 575.75 2 L N 133.22 531.45 249.28 531.45 2 L N 81.64 580.95 171.9 607.95 13.5 RR 7 X V 0 X N 210.59 400.95 300.86 427.95 13.5 RR 7 X V 0 X N 94.53 400.95 184.8 427.95 13.5 RR 7 X V 0 X N 210.59 625.95 300.86 652.95 R 7 X V 0 X N 210.59 580.95 300.86 607.95 R 7 X V 0 X N 210.59 490.95 300.86 517.95 R 7 X V 0 X N 326.65 445.6 416.92 472.6 R 7 X V 0 X N 3 10 Q (Begin) 242.94 635.73 T (Need) 243.77 595.37 T 210.59 535.95 300.86 562.95 R 7 X V 0 X N (Need) 243.77 550.37 T (Error/) 114.27 595.37 T (Sent) 245.44 505.37 T (Need) 359.83 460.02 T (No Data) 237.92 410.74 T (Redirection) 113.85 410.74 T 423.36 490.6 513.64 517.6 R 7 X V 0 X N (Need Access) 439.04 505.02 T 3 9 Q (401) 354.61 512.08 T (Ok) 473.79 529.73 T (Error) 432.28 520.55 T (301, 302) 157.62 489.93 T (HTTP 0.9,) 322.19 488 T (204, 304) 216.4 480.59 T 326.65 400.95 416.92 427.95 13.5 RR 7 X V 0 X N 3 10 Q (Got Data) 352.31 410.74 T 3 9 Q (Ok) 378.23 433.33 T (Error) 295.78 463.85 T (Error) 183.11 511.37 T (Error) 183.11 596.87 T (Ok) 262.17 568.33 T (Error) 183.11 551.87 T (Ok) 262.06 521.66 T 3 10 Q (Request) 237.1 494.87 T (Failure) 111.49 584.87 T (Authorization) 439.32 494.52 T (Connection) 230.43 584.87 T (Request) 237.1 539.87 T (Body) 360.39 449.52 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 3 9 Q (200,203) 326.43 479 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C -8.36 24.95 603.64 816.95 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "6" 6 %%Page: "5" 7 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K 0.44 (only manages a single converter at the time, for example from) 63.64 738.28 P 0 0 0 1 0 0 0 K 2 F 0.44 (text/plain) 319.5 738.28 P 0 0 0 1 0 0 0 K 1 F 0.44 ( to) 357.28 738.28 P 0 0 0 1 0 0 0 K 2 F 0.44 (text/html) 370.93 738.28 P 0 0 0 1 0 0 0 K 1 F 0.44 (, that is, the size of the stack is) 405.93 738.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.58 (always 1. However, work is being done to expand the stack so that several converters can be cascaded in order to obtain) 63.64 726.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (the desired conversion.) 63.64 714.28 T 0 0 0 1 0 0 0 K 0 14 Q (5. Anchors) 63.64 685.61 T 0 0 0 1 0 0 0 K 1 10 Q -0.44 (Anchors represent any references to graphic objects which may be the sources or destinations of hypertext links. There) 63.64 666.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.45 (are basically two types of anchors:) 63.64 654.28 P 0 0 0 1 0 0 0 K 2 F -0.45 (parent) 201.99 654.28 P 0 0 0 1 0 0 0 K 1 F -0.45 ( anchors which represent whole graphic objects and) 228.1 654.28 P 0 0 0 1 0 0 0 K 2 F -0.45 (child) 433.86 654.28 P 0 0 0 1 0 0 0 K 1 F -0.45 ( anchors which rep-) 453.86 654.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.09 (resent parts of a graphic object. As mentioned in Section 3, every request and hence every graphic object has a parent) 63.64 642.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.26 (anchor associated with it. Anchors exist throughout the lifetime of the client, but as this generally is not the case for) 63.64 630.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.06 (graphic objects, it is possible to have a parent anchor without a graphic object. If the data object is stored in the client) 63.64 618.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (cache, the parent anchor contains a link to it so that the client can access it through the Cache Manager.) 63.64 606.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.53 (Both types of anchors are subclasses of a generic anchor class which defines a set of outgoing links to where the anchor) 63.64 588.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (points. The relationship between parent anchors and child anchors is illustrated in Figure 4.) 63.64 576.28 T 0 0 0 1 0 0 0 K 0 F (Figur) 184.73 258.28 T (e 4) 208.44 258.28 T 1 F (Relationship between) 222.88 258.28 T 2 F (par) 311.76 258.28 T (ent) 325.28 258.28 T 1 F ( and) 337.5 258.28 T 2 F (child) 356.94 258.28 T 1 F ( anchors) 376.94 258.28 T 0 0 0 1 0 0 0 K -0.16 (Every parent anchor points to a remote data object. In the case of posting an anchor to a remote server, the data object) 63.64 241.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (is yet to be created. The client can assign a URI for the object but it might be overwritten \050or completely denied\051 by) 63.64 229.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.36 (the server. In Figure 4, parent) 63.64 217.28 P 0 0 0 1 0 0 0 K 0 F 0.36 (A) 186.88 217.28 P 0 0 0 1 0 0 0 K 1 F 0.36 ( has no associated graphic object. This can either be because the anchor has not yet) 194.1 217.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (been requested by the user or the graphic object has been discarded from memory.) 63.64 205.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.4 (When child) 63.64 187.28 P 0 0 0 1 0 0 0 K 0 F 0.4 (B1) 113.32 187.28 P 0 0 0 1 0 0 0 K 1 F 0.4 ( is created, pointing to parent) 124.99 187.28 P 0 0 0 1 0 0 0 K 0 F 0.4 (A) 246.53 187.28 P 0 0 0 1 0 0 0 K 1 F 0.4 (, parent) 253.75 187.28 P 0 0 0 1 0 0 0 K 0 F 0.4 (B) 287.04 187.28 P 0 0 0 1 0 0 0 K 1 F 0.4 ( is registered in parent) 293.7 187.28 P 0 0 0 1 0 0 0 K 0 F 0.4 (A) 387.07 187.28 P 0 0 0 1 0 0 0 K 1 F 0.4 ( as pointing to) 394.29 187.28 P 0 0 0 1 0 0 0 K 0 F 0.4 (A) 455.33 187.28 P 0 0 0 1 0 0 0 K 1 F 0.4 (. The same is the) 462.55 187.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.12 (case for the link between child) 63.64 175.28 P 0 0 0 1 0 0 0 K 0 F 0.12 (BL) 189.3 175.28 P 0 0 0 1 0 0 0 K 1 F 0.12 ( and) 202.64 175.28 P 0 0 0 1 0 0 0 K 0 F 0.12 (A2) 222.31 175.28 P 0 0 0 1 0 0 0 K 1 F 0.12 (, but parent) 234.53 175.28 P 0 0 0 1 0 0 0 K 0 F 0.12 (B) 282.65 175.28 P 0 0 0 1 0 0 0 K 1 F 0.12 ( is only registered once in parent) 289.32 175.28 P 0 0 0 1 0 0 0 K 0 F 0.12 (A) 423.16 175.28 P 0 0 0 1 0 0 0 K 1 F 0.12 ( \050this is marked with) 430.38 175.28 P 0 0 0 1 0 0 0 K 0 F 0.12 (b) 515.68 175.28 P 0 0 0 1 0 0 0 K 1 F 0.12 ( in) 521.24 175.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.15 (the figure\051. The same is the case for the links marked) 63.64 163.28 P 0 0 0 1 0 0 0 K 0 F -0.15 (a) 276.9 163.28 P 0 0 0 1 0 0 0 K 1 F -0.15 ( and) 281.9 163.28 P 0 0 0 1 0 0 0 K 0 F -0.15 (c) 301.03 163.28 P 0 0 0 1 0 0 0 K 1 F -0.15 (. A child can have more than one link to other anchors as) 305.47 163.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.56 (indicated in child) 63.64 151.28 P 0 0 0 1 0 0 0 K 0 F 0.56 (BL) 137.24 151.28 P 0 0 0 1 0 0 0 K 1 F 0.56 (. This is often the case using the POST method, where for example the same data object is to) 150.58 151.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (posted to a News group, a mailing list and a HTTP server.) 63.64 139.28 T 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C 74.1 272.95 521.17 572.95 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K J 384.99 332.39 384.99 311.61 2 L J 384.99 332.39 384.99 331.89 2 L 2 H 2 Z 0 X 0 0 0 1 0 0 0 K N [0.86 4.301] 0.86 I 384.99 331.89 384.99 312.11 2 L N J 384.99 312.11 384.99 311.61 2 L N J 246.41 394.74 246.41 382.86 2 L J 246.41 394.74 246.41 390.99 2 L 0.5 H N [5.049 4.376] 5.049 I 246.41 390.99 246.41 386.61 2 L N J 246.41 386.61 246.41 382.86 2 L N J 239.48 394.74 239.48 382.86 2 L J 239.48 394.74 239.48 390.99 2 L N [5.049 4.376] 5.049 I 239.48 390.99 239.48 386.61 2 L N J 239.48 386.61 239.48 382.86 2 L N J 378.53 440.02 381.53 445.21 384.53 440.02 381.53 440.02 4 Y V J 381.53 421.46 381.53 440.02 2 L J 381.53 421.46 381.53 421.96 2 L 1 H N [1.033 5.164] 1.033 I 381.53 421.96 381.53 439.52 2 L N J 381.53 439.52 381.53 440.02 2 L N J 268.93 501.6 263.73 504.6 268.93 507.6 268.93 504.6 4 Y V 360.74 391.77 312.23 391.77 312.23 504.6 268.93 504.6 4 L 0.5 H N J 272.39 543.22 277.59 540.22 272.39 537.22 272.39 540.22 4 Y V J 246.41 528.35 246.41 540.22 272.39 540.22 3 L J 246.41 528.35 246.41 529.85 2 L 1 H N [2.048 3.414] 2.048 I 246.41 529.85 246.41 538.72 2 L N J 246.41 538.72 246.41 540.22 247.91 540.22 3 L N [3.284 5.473] 3.284 I 247.91 540.22 270.89 540.22 2 L N J 270.89 540.22 272.39 540.22 2 L N J 213.49 537.22 208.3 540.22 213.49 543.22 213.49 540.22 4 Y V J 239.48 528.35 239.48 540.22 213.49 540.22 3 L J 239.48 528.35 239.48 528.85 2 L N [0.989 4.944] 0.989 I 239.48 528.85 239.48 539.72 2 L N J 239.48 539.72 239.48 540.22 238.98 540.22 3 L N [0.862 4.308] 0.862 I 238.98 540.22 213.99 540.22 2 L N J 213.99 540.22 213.49 540.22 2 L N J 7 X 90 450 27.72 17.81 180.58 540.22 G 0.5 H 0 X 90 450 27.72 17.81 180.58 540.22 A 410.11 381.33 402.32 385.83 410.11 390.33 410.11 385.83 4 Y V 395.39 376.93 395.39 368.02 416.17 368.02 416.17 385.83 410.11 385.83 5 L 2 H N 271.52 488.22 263.73 492.72 271.52 497.22 271.52 492.72 4 Y V 256.8 483.81 256.8 474.91 277.59 474.91 277.59 492.72 271.52 492.72 5 L N J 246.41 445.21 246.41 415.52 2 L J 246.41 445.21 246.41 444.71 2 L N [0.989 4.947] 0.989 I 246.41 444.71 246.41 416.02 2 L N J 246.41 416.02 246.41 415.52 2 L N J 101.36 487.52 104.36 492.72 107.36 487.52 104.36 487.52 4 Y V J 104.36 487.52 104.36 468.97 2 L J 104.36 487.52 104.36 486.02 2 L 1 H N [3.59 5.983] 3.59 I 104.36 486.02 104.36 470.47 2 L N J 104.36 470.47 104.36 468.97 2 L N J 132.94 428.84 125.14 433.34 132.94 437.84 132.94 433.34 4 Y V 118.21 424.43 118.21 415.52 139 415.52 139 433.34 132.94 433.34 5 L 2 H N J 107.82 335.36 107.82 308.64 2 L J 107.82 335.36 107.82 334.86 2 L N [0.887 4.435] 0.887 I 107.82 334.86 107.82 309.14 2 L N J 107.82 309.14 107.82 308.64 2 L N J 130.34 341.27 125.14 344.27 130.34 347.27 130.34 344.27 4 Y V J 239.48 376.93 239.48 344.27 130.34 344.27 3 L J 239.48 376.93 239.48 373.18 2 L 0.5 H N [9.205 7.977] 9.205 I 239.48 373.18 239.48 348.02 2 L N J 239.48 348.02 239.48 344.27 235.73 344.27 3 L N [7.294 6.322] 7.294 I 235.73 344.27 134.09 344.27 2 L N J 134.09 344.27 130.34 344.27 2 L N J 246.41 376.93 246.41 344.27 2 L J 246.41 376.93 246.41 373.18 2 L N [9.205 7.977] 9.205 I 246.41 373.18 246.41 348.02 2 L N J 246.41 348.02 246.41 344.27 2 L N J 355.54 347.27 360.74 344.27 355.54 341.27 355.54 344.27 4 Y V J 246.41 344.27 355.54 344.27 2 L J 246.41 344.27 250.16 344.27 2 L N [7.294 6.322] 7.294 I 250.16 344.27 351.79 344.27 2 L N J 351.79 344.27 355.54 344.27 2 L N J 216.96 507.6 222.15 504.6 216.96 501.6 216.96 504.6 4 Y V 216.96 504.6 166.72 504.6 166.72 457.09 125.14 457.09 4 L N 130.34 442.21 125.14 445.21 130.34 448.21 130.34 445.21 4 Y V 130.34 445.21 166.72 445.21 166.72 379.9 360.74 379.9 4 L N J 424.84 400.71 430.03 397.71 424.84 394.71 424.84 397.71 4 Y V J 402.32 397.71 424.84 397.71 2 L J 402.32 397.71 403.82 397.71 2 L 1 H N [2.789 4.648] 2.789 I 403.82 397.71 423.34 397.71 2 L N J 423.34 397.71 424.84 397.71 2 L N J 130.34 448.15 125.14 451.15 130.34 454.15 130.34 451.15 4 Y V J 130.34 451.15 222.15 451.15 2 L J 130.34 451.15 134.09 451.15 2 L 0.5 H N [6.987 6.056] 6.987 I 134.09 451.15 218.4 451.15 2 L N J 218.4 451.15 222.15 451.15 2 L N J 130.34 299.7 125.14 302.7 130.34 305.7 130.34 302.7 4 Y V J 130.34 302.7 139 302.7 139 338.33 125.14 338.33 4 L J 130.34 302.7 134.09 302.7 2 L N [1.341 1.162] 1.341 I 134.09 302.7 135.25 302.7 2 L N J 135.25 302.7 139 302.7 139 306.45 3 L N [6.115 5.3] 6.115 I 139 306.45 139 334.58 2 L N J 139 334.58 139 338.33 135.25 338.33 3 L N [7.337 6.359] 7.337 I 135.25 338.33 128.9 338.33 2 L N J 128.9 338.33 125.14 338.33 2 L N J 355.54 299.76 360.74 296.76 355.54 293.76 355.54 296.76 4 Y V J 125.14 296.76 355.54 296.76 2 L J 125.14 296.76 128.9 296.76 2 L N [7.722 6.692] 7.722 I 128.9 296.76 351.79 296.76 2 L N J 351.79 296.76 355.54 296.76 2 L N 1 0 0 0 0 1 1 K J 243.98 429.26 239.48 421.46 234.98 429.26 239.48 429.26 4 Y 1 0 0 0 0 1 1 K V J 239.48 442.25 239.48 429.26 2 L J 239.48 442.25 239.48 441.75 2 L 2 H N [1.09 5.45] 1.09 I 239.48 441.75 239.48 429.76 2 L N J 239.48 429.76 239.48 429.26 2 L N J 239.48 480.84 239.48 451.15 2 L N J 105.39 322.37 100.89 314.58 96.39 322.37 100.89 322.37 4 Y V J 100.89 350.2 100.89 322.37 2 L J 100.89 350.2 100.89 349.7 2 L N [0.925 4.627] 0.925 I 100.89 349.7 100.89 322.87 2 L N J 100.89 322.87 100.89 322.37 2 L N 0 0 0 1 0 0 0 K J 103.32 413.67 107.82 421.46 112.32 413.67 107.82 413.67 4 Y 0 0 0 1 0 0 0 K V 107.82 413.67 107.82 359.11 2 L N 1 0 0 0 0 1 1 K 100.89 424.43 100.89 356.14 2 L 1 0 0 0 0 1 1 K N 0 0 0 1 0 0 0 K 83.57 373.96 125.15 409.59 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 0 X N 83.57 421.46 125.15 468.97 R 7 X V 0 X N 241.91 473.05 246.41 480.84 250.91 473.05 246.41 473.05 4 Y V 246.41 473.05 246.41 451.15 2 L 2 H N 1 0 0 0 0 1 1 K J 382.56 322.37 378.06 314.58 373.56 322.37 378.06 322.37 4 Y 1 0 0 0 0 1 1 K V J 378.06 350.2 378.06 322.37 2 L J 378.06 350.2 378.06 349.7 2 L N [0.925 4.627] 0.925 I 378.06 349.7 378.06 322.87 2 L N J 378.06 322.87 378.06 322.37 2 L N 0 0 0 1 0 0 0 K J 380.49 366.16 384.99 373.96 389.49 366.16 384.99 366.16 4 Y 0 0 0 1 0 0 0 K V 384.99 366.16 384.99 353.17 2 L N 1 0 0 0 0 1 1 K 378.06 359.11 378.06 388.8 2 L 1 0 0 0 0 1 1 K N 0 0 0 1 0 0 0 K 335.21 551.43 362.92 551.43 2 L 0.5 H 0 0 0 1 0 0 0 K N J 335.21 539.55 362.92 539.55 2 L J 335.21 539.55 336.71 539.55 2 L 1 H N [2.557 4.262] 2.557 I 336.71 539.55 361.42 539.55 2 L N J 361.42 539.55 362.92 539.55 2 L N 1 0 0 0 0 1 1 K J 335.21 527.67 362.92 527.67 2 L 2 H 1 0 0 0 0 1 1 K N 0 0 0 1 0 0 0 K J 335.21 515.8 362.92 515.8 2 L J 335.21 515.8 338.96 515.8 2 L 0.5 H 0 0 0 1 0 0 0 K N [7.396 6.41] 7.396 I 338.96 515.8 359.17 515.8 2 L N J 359.17 515.8 362.92 515.8 2 L N J 335.21 503.92 362.92 503.92 2 L 2 H N 3 9 Q (Parents of links to this anchor) 376.78 547.58 T (Destination of this Child anchor) 376.78 511.96 T (Parent) 91.1 451.1 T (Parent of this Child anchor) 376.78 500.08 T (List of Child anchors) 376.78 523.83 T (Address of this Parent anchor) 376.78 535.71 T (Child) 94.11 394.05 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 83.57 326.45 125.15 362.08 R 7 X V 0.5 H 0 X N (Child) 94.11 346.54 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 83.57 278.95 125.15 314.58 R 7 X V 0 X N (Child) 94.11 299.04 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 360.74 326.45 402.32 362.08 R 7 X V 0 X N (Child) 371.28 346.54 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 360.74 278.95 402.32 314.58 R 7 X V 0 X N (Child) 371.28 299.04 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 222.15 433.34 263.73 468.97 R 7 X V 0 X N (Child) 232.69 453.43 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 222.15 385.83 263.73 421.46 R 7 X V 0 X N (Child) 232.69 405.92 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 222.15 480.84 263.73 528.35 R 7 X V 0 X N (Parent) 229.68 510.48 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 430.03 376.35 472.36 424.43 R 4 X V 0 X N 432.75 373.96 475.07 421.46 R 7 X V 0 X N (Remote) 438.16 405.3 T (data) 445.15 395.25 T (object) 441.9 385.19 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 277.59 518.86 319.91 566.95 R 4 X V 0 X N 280.3 516.47 322.63 563.98 R 7 X V 0 X N (Remote) 285.71 547.82 T (data) 292.71 537.76 T (object) 289.46 527.71 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 80.1 495.11 122.43 543.19 R 4 X V 0 X N 82.82 492.72 125.15 540.22 R 7 X V 0 X N (Remote) 88.23 524.07 T (mainlink) 253.55 349.62 T (1) 101.86 383.99 T (2) 101.86 336.49 T (N) 101.11 288.98 T (A) 101.36 441.05 T (data) 95.23 515.69 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 360.74 373.96 402.32 421.46 R 7 X V 0 X N (Parent) 368.27 403.6 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Graphic) 164.82 543.96 T (Object) 167.57 531.39 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (object) 91.98 507.31 T 7 X 90 450 27.72 17.81 381.53 463.03 G 0 X 90 450 27.72 17.81 381.53 463.03 A (Graphic) 365.77 466.76 T (Object) 368.52 454.19 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (sublink) 203.33 349.62 T (a) 333.99 396.2 T (a) 333.99 349.83 T (b) 143.43 461.52 T (b) 143.43 348.7 T (b) 191.93 455.58 T (c) 334.24 301.01 T (c) 334.24 372.27 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K J (Pointer to Graphic Object) 376.78 487.83 T J 362.92 491.38 335.21 491.38 2 L J 362.92 491.38 362.42 491.38 2 L 1 H N [0.921 4.606] 0.921 I 362.42 491.38 335.71 491.38 2 L N J 335.71 491.38 335.21 491.38 2 L N 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K (B) 239.94 500.48 T (C) 378.28 393.6 T (1) 379.03 336.54 T (M) 377.78 289.04 T (1) 240.44 443.43 T (L) 240.44 395.92 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C -8.36 24.95 603.64 816.95 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "5" 7 %%Page: "4" 8 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 14 Q 0 X 0 0 0 1 0 0 0 K (4. The Str) 63.64 735.61 T (eam Concept) 122.89 735.61 T 0 0 0 1 0 0 0 K 1 10 Q -0.28 (Streams are the main method used in the Library for transporting data from the network to the client or vice versa, and) 63.64 716.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (they do therefore deserve a more thorough presentation.) 63.64 704.28 T 0 0 0 1 0 0 0 K 0 12 Q (4.1 What is a Str) 63.64 678.95 T (eam) 149.09 678.95 T 0 0 0 1 0 0 0 K 1 10 Q 0.02 (A stream is an object which accepts sequences of characters. It is a destination of data which can be thought of much) 63.64 663.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.14 (like an output stream in C++ or an ANSI file stream for writing data to a disk or another pheripheral device. The Li-) 63.64 651.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.48 (brary defines a generic stream class with five methods as illustrated in Figure 2. The output is also a stream and is often) 63.64 639.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.1 (referred to as the \322target\323 or \322sink\323. This class is a superclass of all other stream classes in the Library and it provides) 63.64 627.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (a uniform interface to all stream objects regardless of what stream sub-class they originate from.) 63.64 615.28 T 0 0 0 1 0 0 0 K 0 F (Figur) 229.27 528.59 T (e 2) 252.98 528.59 T 1 F (The generic stream class) 267.42 528.59 T 0 0 0 1 0 0 0 K 0.09 (Streams can be cascaded so that one stream writes into another using one or more of the methods shown in Figure 2.) 63.64 511.59 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.46 (This means that a required processing of data, for example reading data from the Internet can be done as the total effect) 63.64 499.59 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.5 (of several cascaded streams. The Library currently includes a large set of specific stream modules for writing to an) 63.64 487.59 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.57 (ANSI C-file structure, writing to a socket, stripping Carriage Returns, splitting a stream into two \050used for caching\051 etc.) 63.64 475.59 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.2 (The stream-based architecture allows the Library \050and hence applications built on top of it\051 to be event-driven in the) 63.64 457.59 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.2 (sense that when input arrives, it is put into a stream, and any necessary actions then cascade off this event. An event) 63.64 445.59 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.05 (can either be data arriving from the Internet, or data arriving from the client application. The latter would be the case) 63.64 433.59 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (when the client is posting a data object to a remote server.) 63.64 421.59 T 0 0 0 1 0 0 0 K 0 12 Q (4.2 Structur) 63.64 396.25 T (ed Str) 125.41 396.25 T (eams) 156.19 396.25 T 0 0 0 1 0 0 0 K 1 10 Q 0.05 (A structured stream is a subclass of a stream, but instead of just accepting data, it also accepts the SGML \322begin ele-) 63.64 380.59 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (ment\323, \322end element\323, and \322put entity\323 as illustrated in Figure 3) 63.64 368.59 T 0 0 0 1 0 0 0 K 0 F (Figur) 208.03 260.63 T (e 3) 231.74 260.63 T 1 F (The generic structured stream class) 246.18 260.63 T 0 0 0 1 0 0 0 K 0.51 (A structured stream therefore represents a structured document and can be thought of as the output from an SGML) 63.64 243.63 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (parser. It is more efficient for modules which generate hypertext objects to output a structured stream than to output) 63.64 231.63 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.17 (SGML which is then parsed. The elements and entities in the stream are referred to by numbers, rather than strings. A) 63.64 219.63 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (DTD contains the mapping between element names and numbers, so each instance of a structured stream is associated) 63.64 207.63 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.33 (with a corresponding DTD. The only DTD which is currently in the Library is an extended version of the HTML DTD) 63.64 195.63 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (level 1, but current work is done to update this to comply with the emerging HTML level 2.) 63.64 183.63 T 0 0 0 1 0 0 0 K 0 12 Q (4.3 Format Conversion Using the Str) 63.64 158.3 T (eam Stack) 252.07 158.3 T 0 0 0 1 0 0 0 K 1 10 Q -0.17 (The stream stack is used to select the most appropriate converter from the input format given by the protocol modules) 63.64 142.63 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.19 (and the desired output format specified by the client. A converter is simply a stream which is registered as a converter) 63.64 130.63 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 (from a given input MIME-type to a output MIME-type. If more than one converter is capable of doing the same con-) 63.64 118.63 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.12 (version a quality factor is used to \050subjectively\051 distinguish which one is the best. Currently the stream stack module) 63.64 106.63 P 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C 179.84 543.25 415.44 611.95 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 283.77 601.86 288.97 598.86 283.77 595.86 283.77 598.86 4 Y 0 X 0 0 0 1 0 0 0 K V 246.45 598.86 283.77 598.86 2 L 0.5 H 2 Z N 283.77 591.23 288.97 588.23 283.77 585.23 283.77 588.23 4 Y V 246.45 588.23 283.77 588.23 2 L N 283.77 580.6 288.97 577.6 283.77 574.6 283.77 577.6 4 Y V 246.45 577.6 283.77 577.6 2 L N 372.35 559.34 377.55 556.34 372.35 553.34 372.35 556.34 4 Y V 335.03 556.34 372.35 556.34 2 L N 3 9 Q (Put character) 185.84 595.58 T (Put string) 201.34 584.95 T (Put block) 202.34 574.32 T (Output) 382.42 553.32 T 283.77 569.97 288.97 566.97 283.77 563.97 283.77 566.97 4 Y V 246.45 566.97 283.77 566.97 2 L N (Free) 220.86 563.69 T 283.77 559.34 288.97 556.34 283.77 553.34 283.77 556.34 4 Y V 246.45 556.34 283.77 556.34 2 L N (Abort) 218.1 553.06 T 288.97 549.25 335.03 605.95 R 7 X V 0 X N (Generic) 294.47 588.75 T (Stream) 295.72 576.75 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C -8.36 24.95 603.64 816.95 C 63.64 96.95 531.64 744.95 C 177.83 275.3 417.44 365.25 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 285.77 353.33 290.97 350.33 285.77 347.33 285.77 350.33 4 Y 0 X 0 0 0 1 0 0 0 K V 248.45 350.33 285.77 350.33 2 L 0.5 H 2 Z N 285.77 342.7 290.97 339.7 285.77 336.7 285.77 339.7 4 Y V 248.45 339.7 285.77 339.7 2 L N 285.77 332.07 290.97 329.07 285.77 326.07 285.77 329.07 4 Y V 248.45 329.07 285.77 329.07 2 L N 3 9 Q (Begin element) 183.83 347.05 T (End element) 190.84 336.42 T (Put Entity) 202.84 325.79 T 290.97 320.28 337.03 359.25 R 7 X V 0 X N (Structured) 293.24 342.06 T (Part) 305.75 330.06 T 374.36 291.39 379.55 288.39 374.36 285.39 374.36 288.39 4 Y V 337.03 288.39 374.36 288.39 2 L N (Output) 384.42 285.37 T 290.97 281.3 337.03 320.28 R 7 X V 0 X N (Generic) 298.25 303.09 T (Stream) 299.5 291.09 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C -8.36 24.95 603.64 816.95 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "4" 8 %%Page: "3" 9 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 10 Q 0 X 0 0 0 1 0 0 0 K (Graphic Object:) 63.64 738.28 T 0 0 0 1 0 0 0 K 1 F -0.43 (A graphic object is a displayable entity handled and maintained by the client. It is built from the data) 136.41 738.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.11 (contained in a server response upon a successful request initiated by the user. The data can be of any format handled) 63.64 726.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.15 (by the client. The object can either be built directly from the data, e.g., if the data object returned is an HTML[4] doc-) 63.64 714.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.16 (ument, or it can be generated from a format converter within the Library. An example of the latter could be the gener-) 63.64 702.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (ation of an HTML object from an FTP directory listing \0507-bit ASCII\051. Graphic objects are in general coded differently) 63.64 690.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.03 (on different GUI platforms. The graphic object is responsible for displaying itself, catching mouse clicks, and calling) 63.64 678.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.07 (the Anchor Manager, either directly or via the History and Navigation Manager. Often the more common term \322doc-) 63.64 666.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.13 (ument\323 is used to describe the logical entity which a graphics object represents and displays. The client can keep the) 63.64 654.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (latest generated documents in memory in order to speed up back-tracking through already visited documents.) 63.64 642.28 T 0 0 0 1 0 0 0 K 0 F (Stream Manager:) 63.64 624.28 T 0 0 0 1 0 0 0 K 1 F -0.32 (The Stream Manager takes care of the transportation of streams of data from the Internet to the cli-) 141.95 624.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (ent and vice versa. This module is described in more detail in Section 4.) 63.64 612.28 T 0 0 0 1 0 0 0 K 0 F (Anchor Manager:) 63.64 594.28 T 0 0 0 1 0 0 0 K 1 F -0.06 (When a request is passed from the client to the Library it always has an anchor associated with it.) 143.07 594.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.08 (An anchor is an object representing the URI of a either a graphic object or a fragment of a graphic object. It contains) 63.64 582.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.62 (all information known about the URI. The Anchor Manager registers all requested anchors together with anchors found) 63.64 570.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.14 (when parsing hypertext objects. The anchors are stored in a hash table so that multiple references to a URI all points) 63.64 558.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.42 (to the same graphic object. It furthermore binds all registered anchors together corresponding to the logical binding) 63.64 546.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.35 (between the related data objects. In other words, this module generates an internal model of the part of the Web the) 63.64 534.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (user has been in touch with. The actual bindings between anchors are described in more detail in Section 5.) 63.64 522.28 T 0 0 0 1 0 0 0 K 0 F (Navigation and History:) 63.64 504.28 T 0 0 0 1 0 0 0 K 1 F -0.37 (This module keeps track of all) 169.48 504.28 P 0 0 0 1 0 0 0 K 2 F -0.37 (visited) 291.16 504.28 P 0 0 0 1 0 0 0 K 1 F -0.37 (anchors. The set of visited anchors is always less than) 319.4 504.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.05 (or equal to the total set of anchors registered in the Anchor Manager. Whereas the Anchor Manager manages a small) 63.64 492.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.08 (part of the Web, this module keeps an ordered list of all visited anchors so the user can do quick navigation through a) 63.64 480.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (history list.) 63.64 468.28 T 0 0 0 1 0 0 0 K 0 F (Client Cache Manager:) 63.64 450.28 T 0 0 0 1 0 0 0 K 1 F -0.43 (This is a single-user disk cache module specifically for WWW Clients. It is used to save data) 166.12 450.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.27 (objects once they have been downloaded from the Internet. The difference between a graphic object stored in memory) 63.64 438.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.16 (and a cached data object is that the former is already parsed and can immediately be displayed to the user whereas the) 63.64 426.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.39 (cached object must be parsed into a graphic object. The CERN proxy server has its own cache manager to handle a) 63.64 414.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.08 (large scale cache that can serve hundreds of clients connected to it. The client cache is especially made for clients not) 63.64 402.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (using a proxy cache or having a very slow link but a large local temporary storage.) 63.64 390.28 T 0 0 0 1 0 0 0 K 0 F (Protocol Manager:) 63.64 372.28 T 0 0 0 1 0 0 0 K 1 F -0.57 (The Protocol Manager is invoked by the Anchor Manager in order to access a document not found) 146.95 372.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.04 (in memory or in the cache \050for the proxy server it is the proxy cache\051. Each protocol module is responsible for estab-) 63.64 360.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.43 (lishing the connection to the remote server \050or the local file-system\051 and extract information using a specific access) 63.64 348.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.75 (method. Depending on the protocol, the Protocol Module either builds a hypertext object itself from the server re-) 63.64 336.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (sponse, or it passes a socket descriptor to the Stream Manager for parsing by one of the parser modules.) 63.64 324.28 T 0 0 0 1 0 0 0 K 0 F (Error Manager:) 63.64 306.28 T 0 0 0 1 0 0 0 K 1 F -0.34 (This module manages an information stack which contains information of all errors occurred during) 135.84 306.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.22 (the communication with a remote server or simply information about the current state. Using a stack for this kind of) 63.64 294.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (information provides the possibility of nested error messages like:) 63.64 282.28 T 0 0 0 1 0 0 0 K 3 9 Q (Fatal Error 500) 99.64 264.95 T (Can\325t access document \050ftp://info.cern.ch/foo.bar\051) 99.64 253.95 T (Reason: FTP-server replies: foo.bar: No such file or directory) 99.64 242.95 T 0 10 Q (Directory Listing Manager:) 63.64 226.28 T 0 0 0 1 0 0 0 K 1 F -0.42 (This module handles long directory listings with icons for HTTP and FTP, and local file) 184.45 226.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (access. Long directory listings are supported for Unix, VMS, and Window NT.) 63.64 214.28 T 0 0 0 1 0 0 0 K 0 12 Q (3.1 Modularity of the Library) 63.64 188.95 T 0 0 0 1 0 0 0 K 1 10 Q 0.2 (The Stream Manager and the Protocol Manager are both designed in a highly modular style in that they use pointers) 63.64 173.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.63 (to functions when they decide on what protocol or parser to use respectively. For the Protocol Manager, the actual) 63.64 161.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.57 (binding between an access scheme specified in the URL [5] and the protocol module used is done in a separate protocol) 63.64 149.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.43 (structure which can be setup at run-time. Likewise for the Stream Manager where the binding is based on MIME-types) 63.64 137.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.21 ([6], either found directly in the response code from the remote server or by guessing. This model makes it very easy) 63.64 125.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (to install new stream converters and protocol modules.) 63.64 113.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "3" 9 %%Page: "2" 10 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K 0.51 (Especially the last topic is a practical problem as many platforms do not fully support the standards as defined, but) 63.64 738.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.28 (only implements a subset of these. It is therefore a compromise between choosing the largest possible subset of the set) 63.64 726.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (of standardized functions with a minimal loss in portability. Unfortunately there is no simple answer to this problem.) 63.64 714.28 T 0 0 0 1 0 0 0 K 0 14 Q (3. Library Ar) 63.64 685.61 T (chitectur) 144.66 685.61 T (e) 198.05 685.61 T 0 0 0 1 0 0 0 K 1 10 Q 0.54 (The general architecture of the Library as viewed from a client is illustrated in Figure 1. Servers and proxy servers) 63.64 666.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (have a slightly different view of the Library, but the client view is the most descriptive.) 63.64 654.28 T 0 0 0 1 0 0 0 K 0 F (Figur) 176.63 142.14 T (e 1) 200.34 142.14 T 1 F (Control \337ow of the Library viewed from the Client) 214.78 142.14 T 0 0 0 1 0 0 0 K 0.09 (The flow of the Library shows that all network communication and parsing of data objects is handled internally. The) 63.64 125.14 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.46 (client then has to present the information to the user. The main elements in the figure are explained below. A more) 63.64 113.14 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (detailed description of the implementation of the Library is given in [2].) 63.64 101.14 T 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C 63.64 156.8 531.64 650.95 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 415.4 556.19 420.6 553.19 415.4 550.19 415.4 553.19 4 Y 0 X 0 0 0 1 0 0 0 K V 415.4 553.19 374.54 553.19 2 L 1 H 2 Z N 416.11 283.97 416.11 275.89 2 L N 481.28 283.97 481.28 273.2 2 L N 416.11 270.51 416.11 265.12 487.2 265.12 487.2 283.97 4 L N 301.23 592.61 307.21 593.08 304.63 587.67 302.93 590.14 4 Y V 250.52 554.1 302.93 590.14 2 L N 1 0 1 0 0 1 0 K 158.42 639.35 158.42 162.8 2 L 3 H 1 0 1 0 0 1 0 K N 0 0 0 1 0 0 0 K 184.17 566.62 186.74 561.19 180.76 561.68 182.47 564.15 4 Y 0 0 0 1 0 0 0 K V 140.68 593.08 182.47 564.15 2 L 1 H N 454.66 216.47 451.66 211.28 448.66 216.47 451.66 216.47 4 Y V 451.66 265.12 451.66 216.47 2 L N 312.44 488.58 312.44 477.81 2 L N 353.91 445.5 353.91 386.27 2 L N 145.85 240.58 140.65 243.58 145.85 246.58 145.85 243.58 4 Y V 324.29 243.58 145.85 243.58 2 L N 504.87 353.66 499.67 356.66 504.87 359.66 504.87 356.66 4 Y V 380.57 601.65 531.64 601.65 531.64 356.66 504.87 356.66 4 L N 416.84 359.66 422.04 356.66 416.84 353.66 416.84 356.66 4 Y V 385.77 353.66 380.57 356.66 385.77 359.66 385.77 356.66 4 Y V 416.84 356.66 385.77 356.66 2 L 0 Z N 199.89 273.2 481.28 273.2 2 L 2 Z N 199.89 283.97 199.89 273.2 2 L N 270.98 283.97 270.98 273.2 2 L N 342.06 283.97 342.06 273.2 2 L N 410.19 283.97 410.19 273.2 2 L N 356.91 259.55 353.91 254.35 350.91 259.55 353.91 259.55 4 Y V 353.91 273.2 353.91 259.55 2 L N 108.11 275.7 105.11 270.51 102.11 275.7 105.11 275.7 4 Y V 105.11 582.81 105.11 275.7 2 L N 298.36 604.65 303.56 601.65 298.36 598.65 298.36 601.65 4 Y V 128.8 601.65 298.36 601.65 2 L N 345.06 574.54 342.06 569.35 339.06 574.54 342.06 574.54 4 Y V 342.06 585.5 342.06 574.54 2 L N 188.04 523.58 502.01 523.58 2 L N 342.06 537.04 342.06 523.58 2 L N 191.04 515.31 188.04 510.12 185.04 515.31 188.04 515.31 4 Y V 188.04 523.58 188.04 515.31 2 L N 262.13 515.31 259.13 510.12 256.13 515.31 259.13 515.31 4 Y V 259.13 523.58 259.13 515.31 2 L N 315.44 515.31 312.44 510.12 309.44 515.31 312.44 515.31 4 Y V 312.44 523.58 312.44 515.31 2 L N 433.92 515.31 430.92 510.12 427.92 515.31 430.92 515.31 4 Y V 430.92 523.58 430.92 515.31 2 L N 505.01 515.31 502.01 510.12 499.01 515.31 502.01 515.31 4 Y V 502.01 523.58 502.01 515.31 2 L N 188.04 477.81 259.13 477.81 2 L N 188.04 488.58 188.04 477.81 2 L N 259.13 488.58 259.13 477.81 2 L N 226.59 472.24 223.59 467.04 220.59 472.24 223.59 472.24 4 Y V 223.59 477.81 223.59 472.24 2 L N 312.44 477.81 502.01 477.81 2 L N 371.68 488.58 371.68 477.81 2 L N 430.92 488.58 430.92 477.81 2 L N 502.01 488.58 502.01 477.81 2 L N 356.91 472.24 353.91 467.04 350.91 472.24 353.91 472.24 4 Y V 353.91 477.81 353.91 472.24 2 L N 463.54 472.24 460.54 467.04 457.54 472.24 460.54 472.24 4 Y V 460.54 477.81 460.54 472.24 2 L N 223.59 386.27 460.54 386.27 2 L N 410.23 391.47 407.23 386.27 404.23 391.47 407.23 391.47 4 Y V 407.23 399.73 407.23 391.47 2 L N 460.54 445.5 460.54 386.27 2 L N 223.59 445.5 223.59 386.27 2 L N 199.89 327.04 484.24 327.04 2 L N 342.06 340.5 342.06 327.04 2 L N 202.89 310.7 199.89 305.51 196.89 310.7 199.89 310.7 4 Y V 199.89 327.04 199.89 310.7 2 L N 273.98 310.7 270.98 305.51 267.98 310.7 270.98 310.7 4 Y V 270.98 327.04 270.98 310.7 2 L N 345.06 310.7 342.06 305.51 339.06 310.7 342.06 310.7 4 Y V 342.06 327.04 342.06 310.7 2 L N 416.15 310.7 413.15 305.51 410.15 310.7 413.15 310.7 4 Y V 413.15 327.04 413.15 310.7 2 L N 487.24 310.7 484.24 305.51 481.24 310.7 484.24 310.7 4 Y V 484.24 327.04 484.24 310.7 2 L N 193.96 445.5 253.21 467.04 10.77 RR 7 X V 0.5 H 0 X N 69.56 582.81 140.65 617.81 17.5 RR 7 X V 0 X N 303.56 537.04 380.57 569.35 16.15 RR 7 X V 0 X N 164.35 488.58 211.74 510.12 10.77 RR 7 X V 0 X N 235.43 488.58 282.83 510.12 10.77 RR 7 X V 0 X N 407.23 488.58 454.62 510.12 10.77 RR 7 X V 0 X N 3 12 Q (Client) 87.33 636.2 T (Library) 320.63 634.67 T 3 10 Q (HTTP) 174.99 495.61 T (NNTP) 245.52 495.61 T 347.99 488.58 395.38 510.12 10.77 RR 7 X V 0 X N (W) 359.09 495.61 T (AIS) 368.16 495.61 T (Gopher) 414.25 495.61 T 478.32 488.58 525.71 510.12 10.77 RR 7 X V 0 X N (FTP) 492.57 495.61 T (MIME) 210.53 452.53 T 324.29 445.5 383.53 467.04 10.77 RR 7 X V 0 X N 430.92 445.5 490.16 467.04 10.77 RR 7 X V 0 X N (Suf) 341.5 452.53 T (\336x) 356.33 452.53 T (Guess) 446.09 452.53 T 303.56 340.5 380.57 372.81 16.15 RR 7 X V 0 X N (Stream) 325.95 358.26 T 176.19 283.97 223.58 305.51 10.77 RR 7 X V 0 X N 247.28 283.97 294.67 305.51 10.77 RR 7 X V 0 X N 389.46 283.97 436.85 305.51 10.77 RR 7 X V 0 X N 318.37 283.97 365.76 305.51 10.77 RR 7 X V 0 X N 460.54 283.97 507.93 305.51 10.77 RR 7 X V 0 X N (Source) 255.14 290.99 T (Plain) 402.04 290.99 T (LaT) 185.71 290.99 T (eX) 201.83 290.99 T (HTML) 470.63 290.99 T (External) 323.72 290.73 T 324.29 232.81 383.53 254.35 10.77 RR 7 X V 0 X N 422.04 340.5 499.05 372.81 16.15 RR 7 X V 0 X N 303.56 585.5 380.57 617.81 16.15 RR 7 X V 0 X N (Client Cache) 431.92 358.26 T (Access) 325.95 603.26 T (Local File) 332.52 239.84 T 184.14 537.04 261.15 569.35 16.15 RR 7 X V 0 X N (Navigation) 199.02 555 T (and History) 197.36 545.88 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Protocol) 323.72 555 T (Manager) 322.33 545.88 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 69.56 227.43 140.65 262.43 17.5 RR 7 X V 0 X N J 217.66 499.35 229.51 499.35 2 L J 217.66 499.35 218.16 499.35 2 L 3 H N [0.723 5.062] 0.723 I 218.16 499.35 229.01 499.35 2 L N J 229.01 499.35 229.51 499.35 2 L N J 460.54 496.66 472.39 496.66 2 L J 460.54 496.66 461.04 496.66 2 L N [0.723 5.062] 0.723 I 461.04 496.66 471.89 496.66 2 L N J 471.89 496.66 472.39 496.66 2 L N J 371.68 294.74 383.53 294.74 2 L J 371.68 294.74 372.18 294.74 2 L N [0.723 5.062] 0.723 I 372.18 294.74 383.03 294.74 2 L N J 383.03 294.74 383.53 294.74 2 L N J (Requested) 80.93 245.88 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 69.56 178.97 140.65 213.97 17.5 RR 7 X V 0.5 H 0 X N (Graphic) 87.6 197.42 T (Object) 90.65 190.01 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Resource) 83.71 238.47 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 288.75 488.58 336.14 510.12 10.77 RR 7 X V 0 X N (Local) 300.49 495.61 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 374.68 515.31 371.68 510.12 368.68 515.31 371.68 515.31 4 Y V 371.68 523.58 371.68 515.31 2 L 1 H N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 368.72 399.73 445.73 432.04 16.15 RR 7 X V 0.5 H 0 X N (Directory) 387.23 417.69 T (Listings) 390.28 408.58 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 410.23 437.24 407.23 432.04 404.23 437.24 407.23 437.24 4 Y V 407.23 477.81 407.23 437.24 2 L 1 H N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (User Interface) 73.71 601.91 T (Manager) 85.38 592.79 T J 145.85 192.12 140.65 195.12 145.85 198.12 145.85 195.12 4 Y V 445.73 195.12 145.85 195.12 2 L N [2.982 4.971] 0 I 63.64 173.58 149.54 270.51 18 RR N J 345.06 378.01 342.06 372.81 339.06 378.01 342.06 378.01 4 Y V 342.06 386.27 342.06 378.01 2 L N 413.15 178.97 490.16 211.28 16.15 RR 7 X V 0.5 H 0 X N (Presentation) 423.59 196.72 T (Manager) 431.93 187.61 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Manager) 322.33 349.14 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Manager) 440.81 349.14 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Manager) 322.33 594.14 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 421.54 537.04 498.55 569.35 16.15 RR 7 X V 0 X N (Error & Info) 434.48 555 T (Manager) 440.32 545.88 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 63.64 96.95 531.64 744.95 C -8.36 24.95 603.64 816.95 C 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "2" 10 %%Page: "1" 11 595.28 841.89 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 0 0 0 1 1 1] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 8 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 18 Q 0 X 0 0 0 1 0 0 0 K (T) 119.98 732.95 T (owards a Uniform Library of Common Code) 130.33 732.95 T 5 16 Q (A Presentation of the CERN W) 119.77 698.28 T (orld-W) 324.4 698.28 T (ide W) 370.03 698.28 T (eb Library) 406.62 698.28 T 0 14 Q (Henrik Frystyk, H\214kon W) 182.77 660.61 T (. Lie, CERN) 339.39 660.61 T (Note:) 63.64 628.61 T 0 0 0 1 0 0 0 K 1 10 Q (This is a slightly revised version of the paper submitted for the WWW Chicago Conference.) 63.64 609.28 T 0 0 0 1 0 0 0 K 2 F (Henrik Frystyk, CERN October 24, 2025) 368.05 591.28 T 0 14 Q (Abstract) 63.64 562.61 T 2 10 Q -0.05 (This paper describes the curr) 63.64 543.28 P -0.05 (ent status of the W) 180.82 543.28 P -0.05 (orld-W) 253.58 543.28 P -0.05 (ide W) 281.36 543.28 P -0.05 (eb Library of Common Code and the work done in or) 303.44 543.28 P -0.05 (der) 515.86 543.28 P -0.01 (to start the conver) 63.64 531.28 P -0.01 (gence pr) 136.27 531.28 P -0.01 (ocess towar) 170.6 531.28 P -0.01 (ds a uniform Library) 217.71 531.28 P -0.01 (. Curr) 300.74 531.28 P -0.01 (ently many W) 324.8 531.28 P -0.01 (orld-W) 378.28 531.28 P -0.01 (ide W) 406.06 531.28 P -0.01 (eb applications ar) 428.18 531.28 P -0.01 (e using) 500.56 531.28 P (differ) 63.64 519.28 T (ent versions of the Library with a set of added functionality that is often either incompatible with the other ver-) 84.94 519.28 T (sions or r) 63.64 507.28 T (epr) 101.61 507.28 T (esents an overlap of code development. A new initiative has been taken at CERN in the context of the) 114.57 507.28 T (W3O collaboration with MIT in or) 63.64 495.28 T (der to conver) 201.89 495.28 T (ge the curr) 254.84 495.28 T (ent versions of the Library so that existing and futur) 298.35 495.28 T (e) 506.6 495.28 T (W) 63.64 483.28 T (orld-W) 71.05 483.28 T (ide W) 98.83 483.28 T (eb applications have a powerful and uniform interface to the Internet.) 120.96 483.28 T 0 14 Q (1. Intr) 63.64 454.61 T (oduction) 101.49 454.61 T 0 0 0 1 0 0 0 K 1 10 Q -0.58 (The CERN World-Wide Web Library of Common Code is a general code base that can be used as the basis for building) 63.64 435.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 (World-Wide Web clients and servers. It allows software suppliers and researchers to achieve the state of the art tech-) 63.64 423.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.85 (nology and derive their own resources to pushing forward that technology. As an example, the CERN Line Mode) 63.64 411.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.48 (Browser, the NeXTStep Editor and the HTTP Server \050including the CERN Proxy Server\051 are all built on top of the) 63.64 399.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.48 (Library. It contains code for accessing HTTP [3], FTP[7], Gopher[9], NNTP[8], and WAIS[10] servers, perform telnet) 63.64 387.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.4 (sessions and access the local file system. Furthermore it provides functionality for loading, parsing and caching graph-) 63.64 375.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (ic objects plus a wide spectrum of generic programming utilities.) 63.64 363.28 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.25 (The development of the World-Wide Web Library of Common Code was started by Tim Berners-Lee in 1990. Ever) 63.64 345.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.16 (since the code has been subject to changes due to modifications in the architectural model, additions of new features) 63.64 333.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.4 (etc. This paper describes the current architecture in the Library and some of the ongoing projects of implementing new) 63.64 321.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (features and changing the architecture. The Library is available from [1].) 63.64 309.28 T 0 0 0 1 0 0 0 K 0 14 Q (2. Implementation and Portability Concerns) 63.64 280.61 T 0 0 0 1 0 0 0 K 1 10 Q 0.04 (The Library is written in plain C and is especially designed to be used on a large set of different platforms. Currently) 63.64 261.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.38 (it supports more than 15 Unix flavors and VMS. A year ago it also supported the MS-DOS, Macintosh, VM/CMS, and) 63.64 249.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K -0.06 (other platforms but this was with a limited set of the current functionality. Recently a new initiative has been taken at) 63.64 237.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.04 (CERN as a result of the \322First International Conference on the World-Wide Web\323 held in Geneva, Switzerland, May) 63.64 225.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.29 (1994. It involves the development teams from Lynx, Spyglass, NCSA, OmniWeb and others with special interest in) 63.64 213.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.51 (the development of a uniform Library. The goal is to converge current versions of the Library into a single version) 63.64 201.28 P 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (which can support a broad spectrum of applications. Current topics of discussion and development involve:) 63.64 189.28 T 0 0 0 1 0 0 0 K (\245) 78.04 171.28 T (Re-porting the Library to MS-DOS and Macintosh) 85.24 171.28 T (\245) 78.04 153.28 T (Enhancing the current architecture of the Library\321especially on de\336ning a client API) 85.24 153.28 T (\245) 78.04 135.28 T (Adding new features such as security) 85.24 135.28 T (, enhanced error handling, multiple threads, format converters, protocol) 233.72 135.28 T (modules.) 85.24 123.28 T (\245) 78.04 105.28 T (Whether to use ANSI C and Posix standards and the possible portability problems this might involve) 85.24 105.28 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "1" 11 %%Trailer %%BoundingBox: 0 0 595.28 841.89 %%PageOrder: Descend %%Pages: 11 %%DocumentFonts: Times-Bold %%+ Times-Roman %%+ Times-Italic %%+ Helvetica %%+ Symbol %%+ Times-BoldItalic %%EOF libwww/Library/User/Paper/Position.html0100644000076400001440000003443606526451200017646 0ustar danielusers Libwww API

    W3C libwww

    Henrik Frystyk Nielsen
    World-Wide Web Consortium, MIT/LCS,
    @(#) $Id: Position.html,v 1.2 2025/05/14 02:10:08 frystyk Exp $

    W3C Reference Library

    Abstract

    This position paper discusses the API of the W3C Reference Library, a.k.a. "libwww". It introduces some of the basic concepts like streams, call-out functions, and plug-in modules. Libwww is freely available from the World-Wide Web Consortium's Web site together with documentation and example applications.

    Introduction

    Most Web applications regardless of functionality share some commonalties such as protocol modules, transport interfaces, and other various low-level Internet related features. While many application programmers get around this by "reinventing the wheel" every time a new application is written, there is an obvious need for a basic Web API. The libwww was designed to provide such an API. In this paper we will discuss some of the experiences that we encountered doing so and what can be improved.

    Libwww has been part of the World-Wide Web almost from the beginning. However, as the design criteria for Web applications in general have changed dramatically, the basic design of libwww has undergone several major revisions. The design ideas presented in this document are based on the most recent version 4.1 which is to be released in June 1996. The current libwww API was designed with the following goals for a generic Web API in mind:

    Light-weight:
    The API should be a platform independent, medium level API with support for an open-ended feature set rather than directly providing a full-fleshed feature set by itself.
    Application independent:
    The API should impose no restrictions on the type of application using it. It should be usable by all types of applications such as servers, clients, robots, and proxies. To borrow a term from the X world: It should provide a set of mechanisms for accessing the Web without imposing a special policy on how to do it.
    Layered:
    The API should allow for easy integration with other APIs both below and above the libwww itself in complexity and level of abstraction.

    The libwww Core

    The libwww API is a small, light-weight API based on a central registry called the core. The core provides a frame work for applications to register an open-ended set of modules that can provide the functionality and profile desired by that application. The core is itself divided into three layers described by each of their object:

    Request Object
    The Request object represents a request issued by the application. All requests are associated with a URL representing the resource on which an operation is to be performed. In most cases, a libwww request results in some kind of network activity handled by a protocol module. All protocol modules are application plug-ins so there is no limit to the type of request libwww can perform. Each Request object has an input and an output stream associated with them that can accept data from and return data to the application respectively.
    Net Object
    The Net object represents a connection, for example to the Internet or the local file system. Depending on the URL and the method specified by the request, there can be multiple Net objects per request. As connections are directly associated with system resources, the number of active Net objects is limited by the core to a maximum number specified by the application. Also, in handling Net objects, a considerable effort is made to maximize use of persistent connections in that multiple requests to the same remote host are serialized where possible.
    Channel Object
    Each open socket and file descriptor is associated with a Channel object. The Channel object is associated with an input stream and an output stream that are capable of reading and writing data to a transport respectively. The channel streams are connected to the Request object streams either directly or via stream chains as described later.

    By itself, the core is not capable of performing any Web related tasks, they are all provided through plug-ins and call-out functions registered by the application. This model enables libwww to be application neutral in that the application feature set or profile is provided by the application and not by libwww. In the next two sections the concept of plug-ins and call-out functions are described.

    Stream Objects

    All data flow between the application layer and the transport layer is handled using streams. Streams are objects that accept sequences of characters. Streams do not require an output, but in most cases, they send data along after having performed a certain operation on the data. Examples can be to insert MIME headers, or strip out a HTTP response line. In case the output is itself a stream, stream objects can be cascaded into stream chains. As mentioned, Channel objects and Request objects both have two stream chains associated with them. The connection between the request streams and the channel streams is made using stream chains which can be setup at run-time using Converters.

    The Converter stream class is sub-classed from the generic stream class. Converters are filters which can change the current representation (or media type) of a data object. Examples of conversions can be from one image format to another, or to "convert" an HTML document into presenting the document to the user in a widget. As Converters are in fact streams, there can be multiple Converters inserted into a single stream chain from the Request object to the Channel object, for example.

    Input and output streams are responsible for reading and writing data to and from a transport, for example a BSD socket interface. By using a stream based interface to the transport layer, it is very easy to add special transport mechanisms, for example, using a multiplexed transport protocol. Also it gives a consistent interface for sending objects, as well as reading objects, which is a requisite for building interactive Web applications.

    Plug-in Modules

    Plug-ins are modules that can be registered by the application at run-time. Plug-ins are an open-ended method for adding new functionality to the application. Characteristic for the evolution of libwww is that the set of features that are handled through plug-ins are constantly increasing. In version 4.1 of the Library, the categories of plug-ins include:

    • Client and server side protocol modules
    • Low-level protocol transport modules
    • User dependent modules
    • Data format handlers

    One of the main advantages of using plug-ins is that the feature set can change dynamically as required by the application. This allows the traditional boundaries between application types such as "clients" and "servers" to be broken down. In fact there is little difference between registering a server profile and a client feature set, or profile, or having an application change profile from a client to a server application at run-time.

    Request Call-out Functions

    Request call-out functions is another open-ended method for applications to add functionality to the core. An application registers a new feature simply by using a generic callback registration process. There are two main points where call-out functions are activated:

    • Before a request is handed to the protocol module
    • After the protocol module has terminated

    At each of these points the list of registered call-out functions is traversed and each of the call-out functions are called. The Library comes with a set of standard call-out functions that cover some often-used features like:

    • Cache validation
    • Rule file matching
    • Proxying requests
    • Logging
    • History List
    • ...

    Request call-out functions can be registered as being local to a specific request, or as being global to all requests. This mechanism allows existing applications to be extended with little or no modifications, New features can be inserted by sub-modules by registering independent call-out routines to be handled by libwww. The latest example of how this mechanism can be used is the implementation of a PICS module, which is incorporated into any libwww client application by registering itself as call-out functions. Other functions like signature handling can be handed the same way.

    Threads and Pseudo Threads

    Threads are in many situations a great advantage, but in general can only be regarded as reliable if they are native to a specific platform, or as an integral part of the programming language used. Unfortunately, as this is not the case in ANSI C, libwww has a model for handling pseudo-threads based on interleaved I/O. This requires that the I/O descriptor can be handled non-preemptively, which is the case for BSD sockets and WinSock socket descriptors. As real threads, pseudo-threads impose certain programming techniques to be applied on the application programmer. For example, pseudo-threads are single stack, single process entities, and all state dependent variables must be stored in a "thread" object. The result of this is that all streams and protocol modules must keep local state of where they are. Real threads do not require non-preemptive I/O and hence, much of the state information can be kept as part of the thread environment.

    Implementation Experience

    Most of the libwww API has been designed using a large set of iterations based on trial and error. The library has been around for a considerable amount of time and represents a significant knowledge base for designing Web APIs. As a drawback on the history behind libwww, it can be noted that as libwww is based on ANSI C, it can not take advantage of many of the features that are now available in modern programming languages. In order to prove that libwww provides a consistent API that can be used by multiple types of applications, a small set of example applications was developed representing the most typical Web applications.

    Command Line Tool
    This application which shows how to use libwww for building simple batch mode tools for accessing the Web. The tool supports HTTP, FTP, Gopher, NNTP, Telnet, and WAIS. The HTTP support is consistent with the HTTP/1.0 specification including the methods PUT, POST, and DELETE.
    Mini Robot
    A simple application which shows how to use libwww for building robots. The robot has no constraint model but uses pseudo-threads and interleaved I/O which allows for a large number of outstanding requests. The robot supports HTTP, NNTP, FTP and Gopher using either the GET or the HEAD method.
    Mini Server
    A small application showing how to implement a server or a proxy using libwww. The Mini Server also uses pseudo-threads and interleaved I/O which makes it highly portable and very fast. The server does only support GET.

    In addition to this set we have much experience from real applications like the Arena browser and other Web GUI based clients. The Library is freely available from the World-Wide Web Consortium software distribution together with all the example applications as well as Arena.

    Lessons Learned

    A summarization of the lessons learned from developing the libwww API as it looks today is a follows:

    APIs must be layered
    No single API can provide the flexibility required to support different types of applications. Medium level APIs can provide cross application functionality, and high level APIs can provide support for specialized applications.
    APIs must support a dynamic, open-ended set of features
    No API, regardless of the complexity, should impose a limit on adding functionality. The experience from developing libwww shows that no feature can in fact be considered essential enough that it should not be dynamically replaceable. The core registry mechanism in libwww is a step in that direction but does still impose a set of assumptions on what is considered "essential".
    APIs must be thread safe
    As native kernel threads become increasingly common and programming languages start supporting threads, more and more applications will take advantage of threads and the flexibility they provide. This means that APIs need not only to be thread aware but must actively support threads. Currently, libwww, is thread aware via its pseudo thread model, but it is does not have full thread support.
    Formalized APIs are required
    In practice, most APIs depend on their immediate environment such as the features provided by a specific programming language. Examples of features that do have a major impact on API design are garbage collection, class inheritance and character sets. Better tools for describing API in a language independent, formalized fashion, are required in order to supply truly language independent, interoperable APIs.


    Henrik Frystyk Nielsen, frystyk@w3.org
    libwww/Library/User/Paper/Stream.gif0100644000076400001440000000215406302442066017070 0ustar danielusersGIF89a‰fñÿÿÿÿÿ!ù,‰fþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹=²ùŒN«×ì¶{ ¯DºüŽÙ…û¼ÿoÑ$Xh¸@è“xÈX¸ÈóØ˜„æ `y9Y'Õ÷h©Y!zDZcÚ9ˆ`·Gg¶Zvàú{i{YkðŠËZëZ$ Ë™êô©;|‹¼ì»lÛÌœÌ:œ;¬„ZÜCé<¼Nè,Mþp­¾ÎÞîþï¾-3Ï­“ØjN˜¯ûJ -ŽW¬z3ÔeSeo ¾sã¾9äwkŸ¹ƒB°MüA0¡þ…¸ô1ŒˆN8")Éè¥Æ‹öƒ±ÕÀsù¸iˆÊ•«JêèÓ­4¢–c64ˆ´r=ûÂ+/‡%Å~œ`íÆ3Kë2­¢ì®|ÞÜŽ’ëén‚P_ò’dúkð[ q³ È·Zǵ¿ÂÒ2éÃ"f%Û~)ª±ãÇ: × l´ÉÖ®mîWmª4«ß$Û­.ÛÓŠMv/¸ðáðD—0Ž»ÇÃUû¾øÃ òÓ“«X>²7èÝ h®®ÇºÂ¯8Innû§6ñJZ&–l3ña™¯òa¯¼ ýþøã7Özöý×QH E[Z.˜ÒmÙ)Ç`„×Ý2½ÈÄtø'!Cõ6Y†ª¹ôW‡ÚèÆ@i‚Q˜SY1…Ûy˜¸^€œ­(€Œ±%Ð…¨iÈ"÷@FU ¸=|ç 1ÊXßWB*åÜePÎw•Ò5Ù™g«=‡S‚¢_Ü=×Ä­ÉfpÒ—ÍT.ýXâ˜;`w#̱Œkbnð§;*`&z‹ÉG“: z'yÙuf–‚0)•2š#"ïEcl]ʨubJjY–Š*ˆ5¦Ê*ŽT¶ «¨È «=´Z+«·†™ë$Þd±ë†½F°¦ëþ“b¤¥0J‰lûœGV[.mº½Øåm~ î5Æ™í«î…bE~žZ®¹<Úh­³Qâ0n»RÂè±ØÚ‹¡Ìb5Þ¾ü YoŠYð½w˜°¿ ÓØ°ªG±«7¯Á-®*­ãz–|¨Tœé}Éi ÉíµE“…³ë.ÇYÙ‹/'%–ž©Í‹ƒ¢&ß0ÀNJ㤫…\e¾êb£2Ï+tÉ!é)W}%­d¸Z³ÙtP vØbMvÙakL4Cf‚‰³²X;mõ?ÛðµÔ3ùöV¼e¢òvCÔC›‡å9µ7Ÿ²½¤ïÜÚzZÓ3—íA|1 € Uù€šSÑô—_ÑùÁŸgî!̤'7úéì¹Áz뮿ºê²ÏN{í¶ßŽ{îºïÎ{ï¾ÿ|ðÂO¼c;libwww/Library/User/Paper/StrucStream.gif0100644000076400001440000000237206302442066020113 0ustar danielusersGIF89a{‚ñÿÿÿÿÿ!ù,{‚þ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·ÜVà ‹Çä²ùŒîª×¯ÑÍŽËKpa}ŽÏkî@¾þøàç3hxXÈ“xȘ·¨óØ(¹‰S9I#Vq‰À¹©ä™‰Ù×y:qjù6úsWÖé7 ð¥kðj›[Ë{€Û» l”S̪âêÛË,œKûÝ,m[½< } # m‡Ü£y=>½Ì\þê›MÍNÄÍ}¤ n¢\F/Ž»~ï¯]ƒw <ˆ0¡Âƒó¼ÐÛaÏOºrûn™S‡1ÁÄþ†-Æ#õ0GÄvÎÎÙCG2#E}Bà]8ñÓ>C‚÷Ì•,•4w™ôù 7lIh–ú(¡¡Q› ˜2XkçÎkÕ¬aìëcM§+brõökiÉ•dïå{¦ñëŸj_¢å)®IPÛÚ-²(èÆ´s¼¸õ®àuõÆ-ë•ØÁŒñ͸QßT¢}ÑÕml §ƒH"‘Ì*Z]”­êÔ©³(™›Itv8äµj֥؊34E¡¼„±Å»j¶±%)•[qЖÝ܆ž_ßÄ{§C¦ë¼‡GÙt ÃT]«ô~ÅÕ?¬`¡úõìrwí½ qìžÑÿ“ˆþÇöàñþY€' •a(Y§s‹µÒŸü 5UT VGÚqf}Æ_‚š²‡t‚Ìta‡õìQßSzHbÚœ†¼Wb‚'•ÎX°Øb|'ªMbÐX#t/‹Ž´õØŽå4 _,5ñãc ÎÃ#‘­¸Ø%—1ѤgOŽ(¥|Ø óŸoR‰%.!EA!Aêb—^"wdXו5Ä~±¹Y¤nÂ4Ö}Š1Ð^ ‚.T¦…âIexnA8§;ï ù¢þÍ·çsÆhÄ™‡r°)¢–ʈ&£sujb…’¢ æd§ýÕŒªTwç©YZj¬²ZAk­ßÜZE®ºÊÃ뭾ÃYþl—Ǧ™¬¤Ë¢Ò¬§¦FÛ#Ö^‹m¶ÏR ȶxË­#Ó†K"¸’[í¸è^hî”ë–Ønñ¾Ëż”Ò롽ᛯºüúè￳é§ÀÞ¢ÁÛªðÁ7<˜•I¶É,ÄCp’ [Ì$Æò5!oÁøå1ÇÂq&¢y½Q# ¼&Ÿ\2oámIà·/³y¬ÊrÞžîÞÌÊ0î;²“Ù tÄ6Ó‡)œGCšôW۲ΊìrÔJ3¬u[?ÝõC_CvHc]6‚\§ÍÔÙl«åöÛ\Å-wÛIé9iÝvç¼$azï}®ƒE‡rß?ÿ ŽÄNJ6ÏdŒø(žTÏ]™X>gyâÄV>Þ_†§œ92•Œô'ŸßºäKË5jJ'œz#S³¹PÖ,8^ÃŽy쨃kv“ûÞ;ð6 0@î+÷v{nXÿªc8 |ñE[æ4ô‡C}÷Þ~øâÿ=è9ºŽ˜öH_C÷ÖÓÌxÍꃭÊôÉ~½€ŠÎOw…Ùü™Óù®k¡Z«‚ãðïaN@[´H6 ‚S`²(8?q­-ƒŽÐ–?ˆ-Šp„$,¡ OˆÂªp…,l¡ _Ãް;libwww/Library/User/Paper/Thread.gif0100644000076400001440000001672106302442067017052 0ustar danielusersGIF89aCøòÿÿÿÿÿÿÿ!ù,CøþºÜþ0ʪ½3ƒªøóZ¸€Ýe–b‘jë¾p̰ Úu »,~ë/œÇ·+Hˆé$7Ob¬·´ ’)vË…µÊçJÜÍ™S px -»ßð1Ò¦n’g÷zQïs­|#w‚;†gmA„‰~Ž{Œ‹p>4ˆ“š•BˆZ˜^’"i¢¥Š›©ª¦…:N€ƒNP$LW°´¤rg°²Q¹ºdµÀ ««9¶Éx¿Íb—ÐÒTÑÎx¸ÕV¯Ê„(Ìm¯»ÖWÇæÑá¿ÅL»åUƒÂ%®³l×íôó¾ë±øàç³ÓÕ/Wvî®ÅÓG ÜÁ^ô¢Z×p 7aûÔEü–þoaÀ ›yLˆ$°‘îRJª¶0cË“ïÈÙ‡œ:”!KJ+çQ‘ʜŠÂLärY#….iáTÊs&Í.é¡ó%ıxEåsgÏyZm>Ïh=«H½FÅF í׳\—²}Ën×0S‡å% r-ýi—RåZÑ.Ö¦€ÿNÌñ߀õ"ë ›w‰V•÷YŽ;Øh«žâþ]ì¬7éÇóL›ëögà—€-©~}ì] Q#‹Íû*í­žÖæ<s[ãq?·=õ¶[Ý»•W%>Ý9k熿"N”qr§ÐçDéðܺyíÜËÓõ];áù­×­»žA>ü1¿&›ç¯îy¾þtÐŒ5TCb_MìÈœN0­¥l 2×ÞP]Q˜6zužc>‚?Š%ö b‚5âq%çSQ^‡‡hXà--"dØ ¡MÃÌC¿Ñ×b¥á"€]ø"Œ™¦Žòè†K÷ZªQƒ™5"題ËXe?‡ÙVQ+ÙP‡œrÜqÈã,O*óÞ‘ZÆ)çœtÖiçpÞ©çž|öégxyþ)è „j¨¹ªè¢Œ6ꨉ>*餔Vj饘fªé¦œvêé§ †*ꨤ–jꩨ¦ªêª¬¶êê«°Æ*무Öjë­¸æªë®¼öêë¯À+ì°Äkì±È"þIÀ²Ì6ëì³ÐF+í´ÔVkíµØf«í¶Üvëí·àJA¸ä–kî¹è¦«îºì,­îBï»±.K¯¬ó:ï½­ÚËï«û2ð¿©úK0«+ðÁ¥ÌpÁã>¼ªÃ›ºðƒJñžtìñÇ ‡,òÈ$—üq&§¬òÊ$£ÌòË0·<ÁÅóÍ8ÁÆzêL“Ï ý‘Ð}ŽÑúF\³*HÛ¼3Æ4Ú×´Ó L½ ÑV§’54éÒ1l­ÉÖ<@_‡bòSXÿ¼³ÒJœ 6i?B6Ôg»bÛÞI]H7Ûk»]µàt·Ù$Î"‹}ZkÝŽÜEÞSþ!>ÞåõUÞä‘RÛŸ¿-ïä–k®8æäinúÁœ÷!¹×i ~z fGë®{>´î‘ ·T±×7»ÜzË-1î·?M:í¯.Ï™\ Ÿüà„+ ½¾¾Â²;/¤vÿ^_Æë‡3¯øð²›/üSÃcà €¼6G”"?™µÔ/Aöà]H÷ë;ŸúH°öYæ}ÚŸò¶÷¿æ9uª:Œ×„øñŽ{é« ©·<Naƒ…û]Í7žó/qô ¿¶ ýE€|TŸA„ìM°vìRY,ÈA¦.‡«ùƒvÃÖŽof¡ÖÁôÍ0(5<^QÄæñþ… ô ‘‚ ËÑoDìaù|ÒÅÌ}Q ÷ãʈB/‚±h¢ëßÜ6±Å–°ñ„ª ùTGš0ƒm  ÒÃ?Òƒx¢õ¦XÂÐtzŒcÒæ‰>Ò‘¶;äöÈ1Fºñyq$9ÂKL¢ÜäKÙÈSD“ƒ”d0FÉÍyÒŒÂye*W9KZÎÉ’­$êT(F`~2_$f—éCS0˜Ê„ãÌ–XË7—<¦ååK9]}Ð,yi¼pjÓ;±c!Í™:7“¬fî(@͜œY7ã$> ªóhädš,™(щV›‚ê¨-?jRR-„-© C§Ñ”Ž¥/]$Ma Q™Îtw5ý“J£R‘âÔ¨<§OW ÔÂmTKCe_Qµ6UµM3¦K•êNÇõT$E .ÍiB{7Òt5«-øêß‚ªÅ› ”¬G¥êU{ŠV°ž´gE›[uºÕ±‚t®J­ëZ›ÊU›†è ˆM¬b7ºÅ:ö±Ž¨Ï KÙÊ&ž³¬V-ËYÈòµ°B¤&€ÐXs<¡´÷ù,VIªÙµ"Ð ¤Õ'E ‰ØRïµe8màp ÕÒ5³­u­i}«¯¼h¼þýƒj';Üå r´Äîoƒ+æ¦Ö¯Å5,@kâÜíÆA··m.fYKÝXјq¥F[u7¹x’ìsk›^³R³¼.8¯*lëTí üÕé“Þ0xõUØ}ñ«ý¦"À( í|Ý;Vo¢ÀoYÌàêNØÆ«5ÞëVøÃ~q`ÉÛáü¢˜»Øí¥£6Åö’®´4¦g)á÷Þ7ÑÆ‡¯}[ ƒÉú¸™L`ŒÕ;ã$· ¹fn 5ˆùfON0×Lä ÙÉYVŠe,á+ïÍ¡EbåDô^Bñм¢8Mר)Ÿù  ÚF;ɸä!O·Ë!øþ²“˜çÊœQsœìhü|pÃÃqÞܹfl^.‚–¦-˜æB²ŒÅ2‡Ýà¦pz/žf4¦µ\6;!÷ìÄè!y6ïH›÷´'­…Wg‡œó™Œv"«¹LêQþ¥žô^°+Êêõ†çÕÝ3 ¥£M¿‘´“ÒÆeðä¡+oûyà ^;¸ØçQ¯¸Ø<üö¸÷<‘\v»Ü\s6t MÐe[z€‘Þ­›…IÐO'ù„uFv=3é~ò|}ì¿­'Uë`µlÕ¤J7ùU­$Õþ½Â»ü®GFþ að÷UüG+Rã/ÿôÛmý5ç~øgú'WæÇbý7€æ%[ Ѐ¨ø€ (hˆ˜¨‚‚8x‚$˜‚#¸‚Ø‚"G%ø‚8ƒ2Xƒ(7Ø>;¨‚.hƒ˜ƒ4(„5ˆ|,æƒCˆ„D¸„H„,h?È„Oè„Q„M(…U8…(…=¨…W¨„_è…¨0û†.ˆ…I(†YØ‚&h†i¸†oø‚:ƒhH…qÈ…Ø…ph‡uX‡FègP‡|è†vXˆL¸‡}Hˆ[¨ˆŒ¨††Ø€z(ˆh˜ˆSH† ‚´'€šØW˜¨þrÕ‰v§€ÆØj·‰÷wWçö‡è'Ša€|×~²HÆŠÛ§Šdˆ±˜Š³BŠ`Š¡xR¥˜/ÂÈQ¨H®Xd¤8†¶hŒÎ˜xËøDSŒÍÈ~¼˜¾xçw~ǸrÓèbÜhV¯G¯Ö}Ô×cè8}Þ¶Žì(zµx‹5⎞õ}Í·x°z¸§–}ñÈ{±bÍÆy˧z&v{ý«(¾‡eöø^Õw•ÀÐE‘š÷‹ÑŒÑH(9#2ƒ)¦ZÖHØØ‡`‘V| ‚ †r2ùç1÷h’TÎè0 #µzY‘*É“ãˆÞ¸‘³ŒþSu4ùAc5’AÅŒø˜[()S’ Ùóã””“~p”±˜”^0:F|i%‘oeQÙ[U cˆ7–¡·€êwŠrw–bùc>Y–i©\?¹{™mi—š7Š$b’dŽ&5—ùøÑ–c'Žˆ)•}é“=y‘AùŒ•ù˜j)˜åäBo‘˜©—6™‹,‰owYjy_‘˜“){—©‘;–¯¸Nífhw&kïwv§ùwKy“.Iš‰—Ÿ‰š«I•©Éš$‰•€ŠŒ¹v±ÉJyô@Óæ|’ly‰¼Yc° œËfÃi•ÅI•‰dÙ阬„kÙKä÷Ôù]u)ž¥™þ;¹Ý cßi•á9F|I uL¦Q¢e˜3µbÖžø9žði–‰9Ÿì¹– zŸWg ºŸ2wj´ +% z§Oʉ¾À@¸õ_ñé—Ê÷– :‘ Œ¿³¡…çvØwäYžJk蔞昛^š§‹@6e+јÚÙzš¶z%J—'š‘)º˜nYp fÖA eQ¨flÈœº‰£äx™¥P%bÒP‹ó  ·¤j9¤‰YŸÕyœ˜œHúc b"Œç¥_úWPe£dg¥–è–ö s' ¦ 9¢|)¦é ¯ùsÑ´§Û§Tz£°(‘ßfrr‡¨‹:§~ ›€¦»gþ§¼`p†ª©o )Z Ÿª“rÚxŠäŸèã©MZª¿w©zI¦ š©€y8 Ò©µªxJÖ¢¾ÉrSŠ¡xC**¡þ†q¬ê«®ê°Šš²j¢Ù’Xš¤xÊ«î9ªâ¹¦Lñ5É^“jª•‰“iJ¬Ëæo¢ÚªÝúª•*™éJ™f*”ä5¬U¨yš«ºÊ¡§qVg¡Du®Êj¢ ¯xQhÿôf劬üz’ÍJ¤ › ­y¤ƒÊ ’ë¦æ ª€4¯õê™ÀÊctoØùžŸº±J¶¬º¹°J«Õš’ú9w·š§ ¯û*²74{Ke?j|ëi¢&‹©€…œ½Jœ+ë¤ÓþŠ˜0»Y@*bÇ ´¦Y³JI²^·³}Ú³gú³Þ •âjq@V´Fk|H«£ÉаŽ)³:æ´dµÂÙ°1°º´°±’±Š*¶7æ¯9:šLª´Ê´ai¶%K¶Þ굞8”«²V—¿ôµ5I·WÚ®ˆ«”a ¤9«°~‹®Œ¸ï®oÉ µ·‰›z;vkŠ»·‹³£Û˜“Û¯R뮃‹· ŠE˹[»’õ;Z¹•A+· ”º`Ë»‰»º¶è|·Yš ^9Q²;»@É|³uºk绎 ½{+¨w Ç»9ɳG›]•ëM|z¶žG¢ëjœ€ëšvÒ.=Ù{¡þ@Ê”v+—Ÿû¼ãKœÒ ºhKW9i"“EÀ¿3Ù¾×Ù½S¿Ü9¿ÞY¿ò ¼ž˜¿Ð[ “†¥»Avª‡ë¼¾jÀez€¬;'\(‘˰Ì[u< |û´|Á¼ZòÁiÁ&,¬D©¨%œ¡l©<«•k¾qâÂ/\ÃÁª¸u ¸Þ Ã6lÄ—Â1|¿JÅÀ|áÃ? ňº½¹‹R\J»À˜›ŸT·Ä™ðËQ˸¢‹Ê ÌkÄi,Ës«À¾ÔÊËì™›ù{ÛŠÄË{zôJŸ7ûÊØwÚ¼»|L±®ûÈZ%C³Y›'qVÍàkÎ)ëºÖlºÔ<–í<ÁÜ\Í„І[NÏéLDù¼Î©Ì|¾ü›KÌŠœ’}x´Œ¦¸¼ ß«McgäqÿyÊ-ÍUüÑO›Îå<|â{Ñà¹Ñæ6Ñ*+Ïó £à´#ÕFLM£ÏUþªÊàÚÑ:ËÒòIÌcšÑ dÌS‹ÌB­°6}Óô<¡7_= Ñ<Æ lÌJÔøc–„–Ûuk.º<ó)Ö»:Ë´çY²OmWñZ¨7£1FfÕµFÁYúÍÌÉÕáüÕA Óû6—ï3x(Æ£iŒÖŒÜÍvºœJ€o½s«!±§lÀ†=Öî<¶œIF·f"©zJ&öL­IMÙ ½Ù¢-7Ý©¥¦½ªÖôªÙþôOÔÖˆBÇ MΊ­bRØíIÓZmNvΓ¥÷k½–=`oGWDe]Ü÷f›£ÝÅi›Ì;V¬8ôbŽcZ°¾I×Î×a-’ ¸Ä½nÇ¢þw;D½KÞ3Øxü¨¬ „©ìýLÇ]¤ÐÊÊ+ªªç­v¡üß•6u­×óØÖv¯aÒÚ(­M䲨äߘŒw-  îÒ74á >BbšªÁ-%w-ÝøKÝäàú€ž„z¾Û}ÖM¥HÂÞÞ½àjýÝSÞ¹+´òJ;÷Ú·P¹V><ޝñmãÔ›Þ4ØÐ)fÛ¤gº ·£ÖM§ÀäÓœ××+þÑf,l9¾gU^•• ܼ-æ=þkeåu‡å'wÝ6NÛI 6ɵy×âe©àæ ÏkíOb1Êê½¢n›­;ŠÜ2gäCÍ­ˆÞpÑØv þÛ:ôç1çùx+Õ“­Á:ͦ„þaVžÒÜvЭŒÔÌ£ÔÌÔfqgéhÂ~d,åÓŒŠÕú«g]Ñ׬ä@nÔb\¾^œÞŽ«âöwµÁäÀRzÒ^Ô­n–²½~êÀγÂ>ÝMíê»ëp‰ìBþ²& À¢ èèÌë¦.¤ÕÍlÜÏ·ìë])è"ÛÚúÐîþè %ÜCmîê\ïæƒêéj]îV}Ûÿî\˽ø®°|½ÈQžÈ¸-¢®Íî?ðOðé¾Ï÷þ¾/ñÃ=íènà:|í!žíÉç¹ÅW$ÜN€p Ár¼öu¬ñüõr_õG=öPÏ÷<Œõ¶òö”õ|_Ä~Å‚÷Ÿø„?ìtøOЊïÄ8ù¤Tÿðglô¢nø³‚øª«øm?õIù§¿îçK+¦°4ËønÏùÎú²?÷rR÷«÷C¼ø\û>qïø3ÿÉfŸwÅ*¿÷š?o*=øž¿ú€ì“íu²¿¦LÛÿ•ÍÿûÏÒÑ¿ÆþÓÿÒ Ïð(ŠýÙ!ÝÈÿËËãm»I7þòÔþäëúY9ÿ´^xé‹=0°Üþ0ÊIëR ØÍ£ØDÕל‰†*êJ_x-ík7¦ ÒwïÄRD8©ù^FK`™Ó'çsêÂ$© eTÂÚ®–9kXÇ®œãŒ>iE"¬íN3—;ºDª×³û]y"r`€ ˆPЉ:Ž <’s‚…r„†?—˜HK2wLS-|¢O‘­™š  \ ›¡°¹U±º±•©¾½À‹‰o³œq ¸8½7R*ÅYkÎT¯ºÇÈ ¶ ÌϾÓbÖÚØ°jf–ÎÇß ÜË´àÙþ>|Ò&¨4xŠû°²vâ\+mîº&N =te(­c(Q]0v• „±Ç=üü­ h‰_9¥ ‚ÂIålëHŒ`ºŠ é´L¶‘BÎ6?«ÁItb0}ãRz4ZO–Kx‡lÊ|x0cž cn–Áêe§'E¤B[ˆôâ)ÿÊ Uúbå%¯Ü>E-ÑcŠ©L!Êr+IëU±2Ü€úNÞ\Ÿu}¢àê´Y¯F˪]˶`Þª²ÊÝEVÉb¼)î½Ì²"NÀ†¿öô6ô³b?ÄWò±Ù’IPVŽÀ×ÂÖ #º’IØ S1纯魨oµ v›ã…þ?þ‰<î4ÚGAê3¾÷îÍ}[Õl÷ûPÈäÓs)ºfL«½YuY}¨ÿëð‘Úè&ŠçvŸn/¹–ƒáñ0*QUÚh6…¡rªìÇŠ=xd©L!zYÔEœw R pÕBØuÞvÛY!ò’ž~ŠÕã‚Aôwâ¶ÝxG{RËŠmµ¸Á‹}ÄøÎf4YR Ígá[øíãs)݇d —ã.$ Ø]“HöãfZÚ¹èä“^F¹pTn9Qš¸Ù("Šêe_G?Ò”Z<«Y§gh|%à"²¥˜‹dEÉ9guêñ›'yîx$@Ò”vIfªSþ—bVh}‡ÖR™tÅYœ¨q’Zª¤LÁ·hc— Åá›Æ…¤^:¦zá ¢­އªøç²cu¦›hÕšT¯–þz„”ƒÍ¸ë—lË¥²" -ƒB–l¸EaCÎ ¥¦Ì {&´Åjësâ:‡ª¾=p;£·¦eÏ™ºÖæ§yØfÝ ­Œ†–gõ¯æ6ØtGܯzK!¦œ‘ŒiÃŒ|Ì£ìɾ€|¿2æ¼§f"XÇ.W©a´°Ä{)Îg†§Ç5“nÒi\|¹‚zÌ3kêÂÌâ%BË[qWwr:¬ª1? ÝÓG½Eº/ÿ 4Ö(ŸÌôg¼Úûþ¬Ú·¾]Ôª–º‰ÖxáYÞ¶ÛbAp>§$®øâŒ7Žc¾…=ñÍ[c!0Úâ9®ùæ›_x[Ÿk­2¸ v:øµ£Û‰÷ßz+õ«ÓN§².fÏSz\»ivKë4¡­»1™Í*ºû“QxEè½Jn±Ñ^ã~<ï‘W¾å©Ó«3ǰO_Åòà‡/þøà{ïðíTËm>ê½ßµú¸ïûË·³ëן ó\Ç-£ýìWŸ}ÎñÙüˆÇ¿Z–«×þ È;Î9ð‰û'ø@ìQð‚Ó_aúÆÀ¶Â  áâ˜;éyy}ÆnTÈ–á¯x‚ñ  Ñ€B:°ìhþ&œ^ mH™ö0%.Dýb8Ã"Na‡4t@ËÒW?$&Ñ"+ü!A‚èªDшX\›Rn½’ï‹` £¿¸†1šñŒh,#×ÈÆð‰ƒYŒ£+ÚHG6áprÌã §¦Ç>ƱA~ ¤ù(ÈB208±3¤"/µ³î-ò‘ [¢ñ IÉÝ4ÒŠ‰¬¤&­!ÉMz²W„ü¤(ÈQš2%¡<¥*QÊUºR©|¥,HU¡}ž¼ä3YÉ[Îò ’¼b/[`­_¢@—eâ%%kULcž ˜Ê„$3¹S¢ÈŒ¬šÖÃ"2aÍGN-²&––KÊòQØ,Ñ>ÐÙ'rª2–¦þD§<×é'“TÊ•­¥ù9NwQꞫ̧(CÂÐ#%ÌŸKú¥@Nu¢â¡u×+kyJ†V4¢õÜÓÿü¸M!NÒ“M§Âþ)R€®š¶´MA¥Q5•“€Udâ@‰2ÓJ‘H¥Ÿ„iG‹D­š^Óg›,iNOºI–"n¥â‡K_jNgP–µê¶Œ©P­Ì™YõªÍ¸ŠG±Â«˜3ëXɪÄnªU¬ é0ߪÖN2£´À«t@¡WÖäõ®€ý«`÷JX¿ö°³,bûšØÂ6ö±e¬dëØÉò•²‹Åld5;ÙÊrV³¤Ÿu,ëÙË*v³§%³mfÿZÚÖ®ÖµU-ja+Û¾Öö³©Åíkw Ùö춦¥­ny«Zà 7·Š5.q‡[æ*w¶™=.lCK<çbö¹Øµ®t—‹ÜÂf·»Ü ¯x¡Û\ð’×·tMï ªÞö.нð…ãKßnÕ÷¾&}!~ãÛÕýª•½þõj,à´ج#H°‚Ìà;øÁް„'Lá [øÂΰ†7ÌáG8±ˆGLâ›øÄ(Fq;libwww/Library/User/Paper/WWWlogo.gif0100644000076400001440000000167706302442067017214 0ustar danielusersGIF89a``óþþþþ‰‹\dµ‡÷¢R©ÿ  R¿sË g!ù,``þÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pHŽÈb Él”,gAE8¡'fu»ebIÚjaÌå~aÄx]ÞΞôz,iSéðÍ‘»¦ìËxy|€o‚b…‡„ŠsHm‘“•„‰˜"ŒžŸh–£¤q¡j—¨iw}­¯«¬²Rnš·N§¼›SvVÁ®Ãv^Ç”µdmGÌ™sÅvTÒƒÖjت°ÜÞ«åæå!êëììïîï¸É[ç÷øæòë üøøn £zTòÀ°!¾ Hœ(Ñ ÄˆXÌ°Ž¢ÁGþ÷Š)RŒ+þÓÐ1ãFJÔyü˜ìÉ›$MZ™RãJŽ<]þ¥Ï•Bâ\Z]… B/öô®RÔƒlâ4Àµ+S Îd)vâK¬ÉÌÒÔ*²«Û·\qØitìɲj‰rQ™€‰9’p Px+÷iݼw§ªô#Οßr#ßvXxsî¼T/´œºQ\•¤”Jöz$Ì™ ¶;A•š¥ÝŠ€LòôêÔ¶#®àmÑ\Gü»çÙÍŠ°6fx×Ã{[9Fœ‡R—HmŽóé$¾Où2¨¿êÚ¡úóþû¹ ñ—ÑÛFy>»aµC¿ ~_Zú~˜mþÔ’? È}Áw‚‚®& ‚Ø ‚ü\ ¸Òfi~2]lÿ5hß„|™h܆æ%ØxüµU¢‡*µÝŠ(.bd%Ž(ã}äýÃáO¶¨"†G"AhQ‘Z¤pKŽ'”‘VÎÔâS†`!C0Þx%…YªÅ\VÉ_hî•)‘“éU‡¥”/ö8‰v¢6Ó‘˜m‰A—¤M©gŠtéFhš‘Øå hjh£ˆŽd™—_úg§˜'jvÛnö'À¤êwi+ùargÑ™Ól&“AšŠi¬D÷)¨Vj©T™&Ö«žÞz ñø*¬{òJ+iro)Ôª«Ç" "YÙÉúçWJÝ$A8î㠵˔±Ñjº¬²ÓŠ`À¸[mÏ¹Ô î^±ki¹ñrŠ.n#ÀEîh"DàÀ Known Bugs in W3C Sample Code Library - libwww

    W3C libwwwBugs

    Known Bugs and Patches

    As we now have made libwww available directly via CVS, it is much easier to get the latest updates and bug fixes. This means that we do not maintain this list very much anymore. Instead, you should look at the latest release notes to see if your problem has been addressed.

    Please report new bugs or bug-fixes to <www-lib@w3.org> and describe what caused the bug to appear. The better diffs you can prepare, that is, if they are generated against the latest version in CVS, the faster they can be incorporated into the code base.

    How to Apply a Patch

    The provided patches are relative to the WWW directory in the distribution tree. In order to apply a patch, do the following in the WWW directory:

    1. Download the patch, for example lib-1.fix
    2. Invoke the patch command by typing
      	patch < lib-1.fix
      
    3. Rebuild the code by following the normal instructions for autoconf builds. In many cases you can simply type
      	make
      

      from the place where you have run the configure script.

    Available Patches

    Version 5.1m

    • These are the patches that I have received which will be applied to the upcoming version before libwww is released.

    Version 5.1j

    • These are the patches that I have received for this release and that I will apply before the next release.

    Version 5.1d

    Contribution from Rick Curry (not a patch)
    A new version of HTWWWStr with a better date stamp string parser

    Version 5.1b

    Patch 1
    A generic collection of patches fixing several bugs in libwww suggested by Hidekazu SHIOZAWA
    Problems on FreeBSD
    Gecse Roland pointed out these problems on FreeBSD

    Version 5.0a

    Bulding on SunOS: Sun uses the symbol "__STDC__" in their headers, not "STDC_HEADERS" which the configure script is looking for. This causes a problem compiling HTString.c which uses the ANSI definition of variable arguments. The fix is to define STDC_HEADERS when running configure. Depending on your shell, this may look like this

    	BASH> CFLAGS='-g -Wall -DSTDC_HEADERS' ./configure
    	CSH> env CFLAGS='-g -Wall -DSTDC_HEADERS' ./configure
    

    Version 5.0

    Patch 1
    This patch fixes some minor problems in the library and example applications. If you have downloaded version 5.0a then you do not need this patch.
    • Bugfix in handling OPTIONS requests on URL other than "/". The path didn't contain an initial "/"
    • Changed 204 handling so that it never expects a body
    • Added support for OPTIONS in line mode browser.
    • Bugfix: now the memory cache filter only checks for cached documents on GET requests.
    • Bugfix: HTTP State machine didn't catch an error code returned by a POST callback function
    • Bugfix: Do not flush metainformation on a TRACE method and a OPTIONS method request.
    • Bugfix: Now we copy information from the cache index back to the amchor obejct when we read the index
    • Change: Cache controls are now added as replacements instead of add so that we don't get duplicate entries
    • Added HTCache_flushAll() to the cache manager.
    • Added flush as command in the Line mode browser. It flushes the persistent cache completely.
    • Bugfix: Automatic connection recovery had a problem when restarting a HTTP/1.1 persistent connection (thanks to Markku Savela)

    Version 4.0D

    Library

    New Multiple T stream (May 27 1996)
    Sacha has provided this new module for handling Tee'ing of multiple simultanous streams. We have the  C file and the H file
    Patch for better logging

    Mini Server

    Event Loop and Timeouts
    The current implementation of the server has a problem with requests that timeout. That is, if the remote server is not capable of generating a response within the amount of time the server is willing to wait. The server is not capable of finding which request object timed out so it has to stop the search completely. This is a limitatation of the current implementation of the internal Event loop in the Library. It is not a design limitation, but the event loop is currently optimized for use by user active applications and not so much "non-user" application.
    DNS lookup
    The current DNS resolution uses the standard getXbyY system calls. However, as they traditionally are implemented using blocking sockets, the server may block as we only have a single process and a single stack. The solution is of course to have a non-blocking DNS resolver library.

    Version 4.0C

    Patch for PUT and POST
    This patch is rather big but it contains some fixes and modifications that enables PUT and POST to work reliably. If you download the 4.0C version of the distribution then the patch has already been applied. It is basically the difference between versions 4.0B and 4.0C. The main set of differences are:
    • Automatic redirection and Access authentication has been take n out of the HTTP module. Instead the new mechanism with request callback functions are used so that the application can register handlers to handle these situations. The reason for this change is that not all applications are interested in having this functionality performed automatically.
    • Authentication handler and redirection handler added to both the Line Mode Browser and the Command Line Tool
    • Added three possible return codes on which a request callback function can be called:
      • HT_PERM_REDIRECT for permanently moved objects
      • HT_TEMP_REDIRECT for temporarily moved objects
      • HT_NO_ACCESS for insufficient credentials
    • PUT and POST do now work reliably in the Line Mode Browser and the Command Line Tool. Both can PUT or POST a document from either a remote HTTP server or the local file system to a remote HTTP server.
    • An important bug-fix in the internal event manager that prevented a socket to be registered for multiple events at the same time.
    • Cleanup of the POSTWeb management in the file module and the HTTP module
    • In addition to progress notification on READ we now support progress notification when sending a data object
    • Spelling mistake fixed. preemtive is changed to preemptive
    • The W3C Mini Robot has now the ability to stop at a certain depth while traversing the Web.

    Library 4.0

    Library 3.1

    Bug in time stamp on files in FTP directory listings
    The Library supports "long" directory listings for FTP Unix, VMS and Windows NT servers with file type, size, time and date etc. However, the time stamp is wrong by one hour for files created when daylight saving time is enabled. The reason is that the FTP module in the Library doesn't know the time-zone of the remote FTP server and hence doesn't know when DSR is enabled or disabled. This is fixed in the next version
    Problem with nested HTML tags in the HTML parser
    A bug which makes the HTML parser crash if is gets more than 20 nested HTML tags. Thanks to Robert M. Fleischman for pointing this out!

    Library 3.0

    Problems with redirection
    Until now all HTTP servers have sent back a small HTML document with a redirection message going:
    	If you can see this message then your browser
    	does not support automatic redirection.
    

    However, new severs like Netscape and other servers don't send this and hence no stream should be set up. This confuses the Library and it dumps core.


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.43 2025/08/04 17:23:30 frystyk Exp $
    libwww/Library/User/Patch/lib_3.0_1.fix0100644000076400001440000000336306043012140017203 0ustar danielusers=================================================================== RCS file: /afs/w3.org/hypertext/WWW/Library/Repository/Implementation/HTTP.c,v retrieving revision 1.79 diff -c -r1.79 HTTP.c *** 1.79 2025/03/21 20:44:20 --- /Library/Implementation/HTTP.c 2025/07/10 03:19:05 *************** *** 492,498 **** req->output_format, req->output_stream); PUTBLOCK(me->buffer, me->cnt); } else { ! if (req->output_format == WWW_SOURCE) { me->target = HTMIMEConvert(req, NULL, WWW_MIME, req->output_format, req->output_stream); --- 492,521 ---- req->output_format, req->output_stream); PUTBLOCK(me->buffer, me->cnt); } else { ! if (me->status==200) { ! HTStream *s; ! if (req->output_format == WWW_SOURCE) { ! me->target = HTMIMEConvert(req, NULL, WWW_MIME, ! req->output_format, ! req->output_stream); ! } else { ! me->target = HTStreamStack(WWW_MIME, req->output_format, ! req->output_stream, req, NO); ! ! if (req->method==METHOD_GET && HTCacheDir && ! (s = HTCacheWriter(req, NULL, WWW_MIME, ! req->output_format, ! req->output_stream))) { ! me->target = HTTee(me->target, s); ! } ! } ! } else { ! me->target = HTMIMEConvert(req,NULL, WWW_MIME, WWW_SOURCE, ! req->output_flush); ! } ! ! #if 0 ! if (req->output_format == WWW_SOURCE) { me->target = HTMIMEConvert(req, NULL, WWW_MIME, req->output_format, req->output_stream); *************** *** 516,521 **** --- 539,545 ---- WWW_SOURCE, req->output_flush ? req->output_flush : HTBlackHole()); } + #endif if (!me->target) me->target = HTBlackHole(); /* What else */ } libwww/Library/User/Patch/lib_3.1_1.fix0100644000076400001440000000410506040555164017216 0ustar danielusers=================================================================== RCS file: /afs/w3.org/hypertext/WWW/Library/Repository/Implementation/HTML.c,v retrieving revision 1.43 diff -c -r1.43 HTML.c *** 1.43 2025/05/19 02:05:35 --- Library/Implementation/HTML.c 2025/10/16 22:13:47 *************** *** 68,75 **** HTStyle * new_style; HTStyle * old_style; BOOL in_word; /* Have just had a non-white char */ ! stack_element stack[MAX_NESTING]; ! stack_element *sp; /* Style stack pointer */ }; struct _HTStream { --- 68,76 ---- HTStyle * new_style; HTStyle * old_style; BOOL in_word; /* Have just had a non-white char */ ! stack_element stack[MAX_NESTING]; ! stack_element *sp; /* Style stack pointer */ ! int overflow; /* Keep track of overflow nesting */ }; struct _HTStream { *************** *** 626,633 **** if (me->dtd->tags[element_number].contents!= SGML_EMPTY) { if (me->sp == me->stack) { ! fprintf(TDEST, "HTML: ****** Maximum nesting of %d exceded!\n", ! MAX_NESTING); return; } --(me->sp); --- 627,636 ---- if (me->dtd->tags[element_number].contents!= SGML_EMPTY) { if (me->sp == me->stack) { ! if (SGML_TRACE) ! fprintf(TDEST, "HTML........ Maximum nesting of %d exceded!\n", ! MAX_NESTING); ! me->overflow++; return; } --(me->sp); *************** *** 663,668 **** --- 666,677 ---- } #endif + /* If overflow of nestings, we need to get back to reality */ + if (me->overflow > 0) { + me->overflow--; + return; + } + me->sp++; /* Pop state off stack */ switch(element_number) { *************** *** 831,837 **** exit (-99); } ! me = (HTStructured*) malloc(sizeof(*me)); if (me == NULL) outofmem(__FILE__, "HTML_new"); if (!got_styles) get_styles(); --- 840,846 ---- exit (-99); } ! me = (HTStructured*) calloc(1, sizeof(*me)); if (me == NULL) outofmem(__FILE__, "HTML_new"); if (!got_styles) get_styles(); libwww/Library/User/Patch/lib_4.0C_1.fix0100644000076400001440000040012306160370666017326 0ustar danielusersdiff -c Library/Repository/Implementation/HTAABrow.c:2.28.4.1 Library/Repository/Implementation/HTAABrow.c:2.28 *** Library/Repository/Implementation/HTAABrow.c:2.28.4.1 Tue Jan 23 16:31:15 1996 --- Library/Repository/Implementation/HTAABrow.c Tue Jan 23 16:31:15 1996 *************** *** 768,810 **** return (HTPasswordDialog(req)); } - /* - ** Setup HTTP access authentication - */ - PUBLIC BOOL HTAA_authentication (HTRequest * request) - { - HTAAScheme scheme; - HTList *valid_schemes = HTList_new(); - HTAssocList **scheme_specifics = NULL; - char *tmplate = NULL; - - if (request->WWWAAScheme) { - if ((scheme = HTAAScheme_enum(request->WWWAAScheme)) != HTAA_UNKNOWN) { - HTList_addObject(valid_schemes, (void *) scheme); - if (!scheme_specifics) { - int i; - scheme_specifics = (HTAssocList**) - malloc(HTAA_MAX_SCHEMES * sizeof(HTAssocList*)); - if (!scheme_specifics) - outofmem(__FILE__, "HTTPAuthentication"); - for (i=0; i < HTAA_MAX_SCHEMES; i++) - scheme_specifics[i] = NULL; - } - scheme_specifics[scheme] = HTAA_parseArgList(request->WWWAARealm); - } else if (PROT_TRACE) { - HTRequest_addError(request, ERR_INFO, NO, HTERR_UNKNOWN_AA, - (void *) request->WWWAAScheme, 0, "HTTPAuthentication"); - return NO; - } - } - if (request->WWWprotection) { - if (PROT_TRACE) - TTYPrint(TDEST, "Protection template set to `%s'\n", - request->WWWprotection); - StrAllocCopy(tmplate, request->WWWprotection); - } - request->valid_schemes = valid_schemes; - request->scheme_specifics = scheme_specifics; - request->prot_template = tmplate; - return YES; - } --- 768,770 ---- diff -c Library/Repository/Implementation/HTAABrow.html:2.20.4.1 Library/Repository/Implementation/HTAABrow.html:2.20 *** Library/Repository/Implementation/HTAABrow.html:2.20.4.1 Tue Jan 23 16:31:16 1996 --- Library/Repository/Implementation/HTAABrow.html Tue Jan 23 16:31:16 1996 *************** *** 1,6 **** Browser side Access Auth ! --- 1,6 ---- Browser side Access Auth ! *************** *** 186,197 **** extern void HTAAForwardAuth_set (CONST char * scheme_name, CONST char * scheme_specifics); extern void HTAAForwardAuth_reset (void); - - -

    Setup HTTP access authentication

    - -
    - extern BOOL HTAA_authentication (HTRequest * request);
      
    --- 186,191 ----
    diff -c Library/Repository/Implementation/HTAccess.c:1.108.2.1 Library/Repository/Implementation/HTAccess.c:1.108
    *** Library/Repository/Implementation/HTAccess.c:1.108.2.1	Tue Jan 23 16:31:17 1996
    --- Library/Repository/Implementation/HTAccess.c	Tue Jan 23 16:31:17 1996
    ***************
    *** 423,443 ****
      **	to NNTP and puts into the "newsgroups" header
      **	Returns YES if request accepted, else NO
      */
    ! PUBLIC BOOL HTCopyAnchor (HTAnchor * src_anchor, HTRequest * main_dest)
      { 
          HTRequest * src_req;
          HTList * cur;
    !     if (!src_anchor || !main_dest) {
    ! 	if (WWWTRACE) TTYPrint(TDEST, "Copy........ BAD ARGUMENT\n");
      	return NO;
    -     }
          /* Build the POST web if not already there */
    !     if (!main_dest->source) {
    ! 	src_req = HTRequest_dupInternal(main_dest);	  /* Get a duplicate */
      	HTAnchor_clearHeader((HTParentAnchor *) src_anchor);
    - 	src_req->method = METHOD_GET;
      	src_req->reload = HT_MEM_REFRESH;
      	src_req->output_stream = NULL;
      	src_req->output_format = WWW_SOURCE;	 /* We want source (for now) */
    --- 423,441 ----
      **	to NNTP and puts into the "newsgroups" header
      **	Returns YES if request accepted, else NO
      */
    ! PUBLIC BOOL HTCopyAnchor (HTAnchor * src_anchor, HTRequest * main_req)
      { 
          HTRequest * src_req;
          HTList * cur;
    !     if (!src_anchor || !main_req)
      	return NO;
          /* Build the POST web if not already there */
    !     if (!main_req->source) {
    ! 	src_req = HTRequest_dup(main_req);	  /* First set up the source */
      	HTAnchor_clearHeader((HTParentAnchor *) src_anchor);
      	src_req->reload = HT_MEM_REFRESH;
    + 	src_req->source = src_req;			  /* Point to myself */
      	src_req->output_stream = NULL;
      	src_req->output_format = WWW_SOURCE;	 /* We want source (for now) */
    ***************
    *** 448,470 ****
      	    HTMethod method = HTLink_method(main_link);
      	    if (!main_link || method==METHOD_INVALID) {
      		if (WWWTRACE)
    ! 		    TTYPrint(TDEST, "Copy Anchor. No destination found or unspecified method\n");
      		HTRequest_delete(src_req);
      		return NO;
      	    }
    ! 	    main_dest->GenMask |= HT_G_DATE;		 /* Send date header */
    ! 	    main_dest->reload = HT_CACHE_REFRESH;
    ! 	    main_dest->method = method;
    ! 	    main_dest->input_format = WWW_SOURCE;
    ! 	    HTRequest_addDestination(src_req, main_dest);
    ! 	    if (HTLoadAnchor(main_anchor, main_dest) == NO)
    ! 		return NO;
      	}
      	/* For all other links in the source anchor */
      	if ((cur = HTAnchor_subLinks(src_anchor))) {
      	    HTLink * pres;
    ! 	    while ((pres = (HTLink *) HTList_nextObject(cur))) {
      		HTAnchor *dest = HTLink_destination(pres);
      		HTMethod method = HTLink_method(pres);
      		HTRequest *dest_req;
    --- 446,472 ----
      	    HTMethod method = HTLink_method(main_link);
      	    if (!main_link || method==METHOD_INVALID) {
      		if (WWWTRACE)
    ! 		    TTYPrint(TDEST, "Copy Anchor. No destination found or unspecified method");
      		HTRequest_delete(src_req);
      		return NO;
      	    }
    ! 	    if (HTLink_result(main_link) == HT_LINK_NONE) {
    ! 		main_req->GenMask |= HT_G_DATE;		 /* Send date header */
    ! 		main_req->source = src_req;
    ! 		main_req->reload = HT_CACHE_REFRESH;
    ! 		main_req->method = method;
    ! 		HTRequest_addDestination(src_req, main_req);
    ! 		main_req->input_format = WWW_SOURCE;
    ! 		if (HTLoadAnchor(main_anchor, main_req) == NO)
    ! 		    return NO;
    ! 	    }
      	}
      	/* For all other links in the source anchor */
      	if ((cur = HTAnchor_subLinks(src_anchor))) {
      	    HTLink * pres;
    ! 	    while ((pres = (HTLink *) HTList_nextObject(cur)) &&
    ! 		   HTLink_result(pres) == HT_LINK_NONE) {
      		HTAnchor *dest = HTLink_destination(pres);
      		HTMethod method = HTLink_method(pres);
      		HTRequest *dest_req;
    ***************
    *** 474,495 ****
      				dest);
      		    return NO;
      		}
    ! 		dest_req = HTRequest_dupInternal(main_dest);
      		dest_req->GenMask |= HT_G_DATE;		 /* Send date header */
      		dest_req->reload = HT_CACHE_REFRESH;
      		dest_req->method = method;
      		dest_req->output_stream = NULL;
      		dest_req->output_format = WWW_SOURCE;
    - 		HTRequest_addDestination(src_req, dest_req);
      		if (HTLoadAnchor(dest, dest_req) == NO)
      		    return NO;
      	    }
      	}
          } else {			 /* Use the existing Post Web and restart it */
    ! 	src_req = main_dest->source;
      	if (src_req->mainDestination)
    ! 	    if (HTLoadDocument(main_dest, NO) == NO)
      		return NO;
      	if (src_req->destinations) {
      	    HTRequest * pres;
    --- 476,499 ----
      				dest);
      		    return NO;
      		}
    ! 		dest_req = HTRequest_dup(main_req);
      		dest_req->GenMask |= HT_G_DATE;		 /* Send date header */
    + 		dest_req->source = src_req;
      		dest_req->reload = HT_CACHE_REFRESH;
      		dest_req->method = method;
    + 		HTRequest_addDestination(src_req, dest_req);
    + 
      		dest_req->output_stream = NULL;
      		dest_req->output_format = WWW_SOURCE;
      		if (HTLoadAnchor(dest, dest_req) == NO)
      		    return NO;
      	    }
      	}
          } else {			 /* Use the existing Post Web and restart it */
    ! 	src_req = main_req->source;
      	if (src_req->mainDestination)
    ! 	    if (HTLoadDocument(main_req, NO) == NO)
      		return NO;
      	if (src_req->destinations) {
      	    HTRequest * pres;
    ***************
    *** 519,528 ****
      			    HTRequest *		dest_req)
      {
          HTMethod allowed = HTAnchor_methods(dest_anchor);
    !     if (!src_anchor || !dest_anchor || !dest_req) {
    ! 	if (WWWTRACE) TTYPrint(TDEST, "Upload...... BAD ARGUMENT\n");
      	return NO;
    -     }
          if (!(allowed & dest_req->method)) {
      	BOOL confirm = NO;
      	HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM);
    --- 523,530 ----
      			    HTRequest *		dest_req)
      {
          HTMethod allowed = HTAnchor_methods(dest_anchor);
    !     if (!src_anchor || !dest_anchor || !dest_req)
      	return NO;
          if (!(allowed & dest_req->method)) {
      	BOOL confirm = NO;
      	HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM);
    diff -c Library/Repository/Implementation/HTConLen.c:2.4.4.1 Library/Repository/Implementation/HTConLen.c:2.4
    *** Library/Repository/Implementation/HTConLen.c:2.4.4.1	Tue Jan 23 16:31:18 1996
    --- Library/Repository/Implementation/HTConLen.c	Tue Jan 23 16:31:18 1996
    ***************
    *** 125,131 ****
      	me->head = cur->next;
      	free_buf(cur);
          }
    -     me->give_up = YES;
          return HT_OK;
      }
    --- 125,130 ----
    ***************
    *** 187,201 ****
      PRIVATE int buf_abort (HTStream * me, HTList * e)
      {
    -     HTBufItem * cur;
          if (!me->give_up)
      	free_buf_all(me);
          if (me->target)
      	(*me->target->isa->abort)(me->target,e);
    -     while ((cur = me->head)) {
    - 	me->head = cur->next;
    - 	free_buf(cur);
    -     }
          free(me);
          if (PROT_TRACE) TTYPrint(TDEST, "Length...... ABORTING...\n");
          return HT_ERROR;
    --- 186,195 ----
    diff -c Library/Repository/Implementation/HTDialog.c:2.3.2.1 Library/Repository/Implementation/HTDialog.c:2.3
    *** Library/Repository/Implementation/HTDialog.c:2.3.2.1	Tue Jan 23 16:31:19 1996
    --- Library/Repository/Implementation/HTDialog.c	Tue Jan 23 16:31:20 1996
    ***************
    *** 136,153 ****
      	break;
            case HT_PROG_WRITE:
    ! 	if (HTRequest_isPostWeb(request)) {
    ! 	    HTParentAnchor *anchor=HTRequest_anchor(HTRequest_source(request));
    ! 	    long cl = HTAnchor_length(anchor);
    ! 	    if (cl > 0) {
    ! 		long b_write = HTRequest_bytesWritten(request);
    ! 		double pro = (double) b_write/cl*100;
    ! 		char buf[10];
    ! 		HTNumToStr((unsigned long) cl, buf, 10);
    ! 		TTYPrint(TDEST, "Written (%d%% of %s)\n", (int) pro, buf);
    ! 	    } else
    ! 		TTYPrint(TDEST, "Writing...\n");
    ! 	}
      	break;
            case HT_PROG_DONE:
    --- 136,142 ----
      	break;
            case HT_PROG_WRITE:
    ! 	TTYPrint(TDEST, "Writing...\n");
      	break;
            case HT_PROG_DONE:
    diff -c Library/Repository/Implementation/HTEvntrg.c:2.24.2.1 Library/Repository/Implementation/HTEvntrg.c:2.24
    *** Library/Repository/Implementation/HTEvntrg.c:2.24.2.1	Tue Jan 23 16:31:20 1996
    --- Library/Repository/Implementation/HTEvntrg.c	Tue Jan 23 16:31:20 1996
    ***************
    *** 431,437 ****
          	TTYPrint(TDEST, "Req Update.. updating for socket %u\n", s) ;
          rqp->unregister = (ops & FD_UNREGISTER) ? YES : NO;
          rqp->actions[0].rq = rq ;
    !     rqp->actions[0].ops |= ops ;
          rqp->actions[0].cbf = cbf ;
          rqp->actions[0].p = p ;
          return;
    --- 431,437 ----
          	TTYPrint(TDEST, "Req Update.. updating for socket %u\n", s) ;
          rqp->unregister = (ops & FD_UNREGISTER) ? YES : NO;
          rqp->actions[0].rq = rq ;
    !     rqp->actions[0].ops = ops ;
          rqp->actions[0].cbf = cbf ;
          rqp->actions[0].p = p ;
          return;
    ***************
    *** 459,466 ****
          }
          if (THD_TRACE)
    !     	TTYPrint(TDEST, "UnRegister.. %s entry for socket %d with ops %x\n",
    ! 		 (found) ? "Found" : "Didn't find", s, (unsigned) ops);
          if (! found) 
              return 0;
    --- 459,466 ----
          }
          if (THD_TRACE)
    !     	TTYPrint(TDEST, "UnRegister.. %s entry for socket %d\n",
    ! 		(found) ? "Found" : "Didn't find", s);
          if (! found) 
              return 0;
    ***************
    *** 844,853 ****
          HTRequest * rqp = NULL;
          HTEventCallback *cbf = HTEvent_Retrieve( s, ops, &rqp);
          /* although it makes no sense, callbacks can be null */
    !     if (!cbf || !rqp || rqp->priority == HT_PRIORITY_OFF) {
    ! 	if (THD_TRACE) TTYPrint(TDEST, "Callback.... No callback found\n");
              return (0);
    -     }
          return (*cbf)(s, rqp, ops);
      }
    --- 844,851 ----
          HTRequest * rqp = NULL;
          HTEventCallback *cbf = HTEvent_Retrieve( s, ops, &rqp);
          /* although it makes no sense, callbacks can be null */
    !     if (!cbf || rqp->priority == HT_PRIORITY_OFF)
              return (0);
          return (*cbf)(s, rqp, ops);
      }
    ***************
    *** 860,869 ****
          HTRequest * rqp = NULL;
          HTEventCallback *cbf = HTEvent_Retrieve( s, ops, &rqp);
          /* although it makes no sense, callbacks can be null*/
    !     if (!cbf || !rqp || rqp->priority == HT_PRIORITY_OFF) {
    ! 	if (THD_TRACE) TTYPrint(TDEST, "UserCallback No callback found\n");
              return (0);
    -     }
          return (*cbf)(s, rqp, ops);
      }
    --- 858,865 ----
          HTRequest * rqp = NULL;
          HTEventCallback *cbf = HTEvent_Retrieve( s, ops, &rqp);
          /* although it makes no sense, callbacks can be null*/
    !     if (!cbf || rqp->priority == HT_PRIORITY_OFF)
              return (0);
          return (*cbf)(s, rqp, ops);
      }
    ***************
    *** 966,972 ****
                  s = all_fds.fd_array[ui] ;
      #else 
              for (s = 0 ; s <= max_sock; s++) { 
    !             if (FD_ISSET(s, fdp))
      #endif
      	    {
      	        TTYPrint(TDEST, "%4d\n", s);
    --- 962,968 ----
                  s = all_fds.fd_array[ui] ;
      #else 
              for (s = 0 ; s <= max_sock; s++) { 
    !             if (FD_ISSET(s, &all_fds))
      #endif
      	    {
      	        TTYPrint(TDEST, "%4d\n", s);
    diff -c Library/Repository/Implementation/HTFile.c:1.106.2.1 Library/Repository/Implementation/HTFile.c:1.106
    *** Library/Repository/Implementation/HTFile.c:1.106.2.1	Tue Jan 23 16:31:21 1996
    --- Library/Repository/Implementation/HTFile.c	Tue Jan 23 16:31:21 1996
    ***************
    *** 119,125 ****
      **	Reads the directory "path"
      **	Returns:
      **		HT_ERROR	Error
    ! **		HT_FORBIDDEN	Directory reading not allowed
      **		HT_LOADED	Successfully read the directory
      */
      PRIVATE int HTFile_readDir (HTRequest * request, file_info *file)
    --- 119,125 ----
      **	Reads the directory "path"
      **	Returns:
      **		HT_ERROR	Error
    ! **		HT_NO_ACCESS	Directory reading not allowed
      **		HT_LOADED	Successfully read the directory
      */
      PRIVATE int HTFile_readDir (HTRequest * request, file_info *file)
    ***************
    *** 136,142 ****
          if (dir_access == HT_DIR_FORBID) {
      	HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN,
      		   NULL, 0, "HTFile_readDir");
    ! 	return HT_FORBIDDEN;
          }
          /* Initialize path name for stat() */
    --- 136,142 ----
          if (dir_access == HT_DIR_FORBID) {
      	HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN,
      		   NULL, 0, "HTFile_readDir");
    ! 	return HT_NO_ACCESS;
          }
          /* Initialize path name for stat() */
    ***************
    *** 160,166 ****
      			"Read dir.... `%s\' not found\n", DEFAULT_DIR_FILE);
      	    HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN,
      		       NULL, 0, "HTFile_readDir");
    ! 	    return HT_FORBIDDEN;
      	}
          }
    --- 160,166 ----
      			"Read dir.... `%s\' not found\n", DEFAULT_DIR_FILE);
      	    HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN,
      		       NULL, 0, "HTFile_readDir");
    ! 	    return HT_NO_ACCESS;
      	}
          }
    ***************
    *** 363,371 ****
          file_info *file = (file_info *) net->context;
          /* Free stream with data TO Local file system */
    !     if (HTRequest_isDestination(req))
    ! 	HTRequest_removeDestination(req);
    !     else  if (req->input_stream) {
      	if (status == HT_INTERRUPTED)
      	    (*req->input_stream->isa->abort)(req->input_stream, NULL);
      	else
    --- 363,369 ----
          file_info *file = (file_info *) net->context;
          /* Free stream with data TO Local file system */
    !     if (!HTRequest_isDestination(req) && req->input_stream) {
      	if (status == HT_INTERRUPTED)
      	    (*req->input_stream->isa->abort)(req->input_stream, NULL);
      	else
    ***************
    *** 384,390 ****
      	FREE(file->local);
      	free(file);
          }
    !     HTNet_delete(net, req->internal ? HT_IGNORE : status);
          return YES;
      }
    --- 382,388 ----
      	FREE(file->local);
      	free(file);
          }
    !     HTNet_delete(net, status);
          return YES;
      }
    ***************
    *** 418,426 ****
      	file->state = FS_BEGIN;
      	net->context = file;
          } if (ops == FD_CLOSE) {				      /* Interrupted */
    ! 	HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED,
    ! 			   NULL, 0, "HTLoadHTTP");
    ! 	FileCleanup(request, HT_INTERRUPTED);
      	return HT_OK;
          } else
      	file = (file_info *) net->context;		/* Get existing copy */
    --- 416,425 ----
      	file->state = FS_BEGIN;
      	net->context = file;
          } if (ops == FD_CLOSE) {				      /* Interrupted */
    ! 	if(HTRequest_isPostWeb(request)&&!HTRequest_isMainDestination(request))
    ! 	    FileCleanup(request, HT_IGNORE);
    ! 	else
    ! 	    FileCleanup(request, HT_INTERRUPTED);
      	return HT_OK;
          } else
      	file = (file_info *) net->context;		/* Get existing copy */
    ***************
    *** 560,565 ****
    --- 559,573 ----
      		TTYPrint(TDEST,"HTLoadFile.. `%s' opened using FILE %p\n",
      			file->local, file->fp);
      #endif /* !NO_UNIX_IO */
    + 	    file->state = FS_NEED_TARGET;
    + 	    break;
    + 
    + 	  case FS_NEED_TARGET:
    + 	    /*
    + 	    ** We need to wait for the destinations to get ready
    + 	    */
    + 	    if (HTRequest_isSource(request) && !request->output_stream)
    + 		return HT_OK;
      	    /* Set up stream TO local file system */
      	    request->input_stream = HTBufWriter_new(net, YES, 512);
    ***************
    *** 570,586 ****
      	    ** before all destinations are ready. If destination then
      	    ** register the input stream and get ready for read
      	    */
    ! 	    if (HTRequest_isDestination(request)) {
      		HTEvent_Register(net->sockfd, request, (SockOps) FD_READ,
      				 HTLoadFile, net->priority);
      		HTRequest_linkDestination(request);
      	    }
    - 	    file->state = FS_NEED_TARGET;
    - 	    if (HTRequest_isSource(request) && !HTRequest_destinationsReady(request))
    - 		return HT_OK;
    - 	    break;
    - 	  case FS_NEED_TARGET:
      	    /*
      	    ** Set up read buffer and streams.
      	    ** If cache element, we know that it's MIME, so call MIME parser
    --- 578,589 ----
      	    ** before all destinations are ready. If destination then
      	    ** register the input stream and get ready for read
      	    */
    ! 	    if (HTRequest_isPostWeb(request)) {
      		HTEvent_Register(net->sockfd, request, (SockOps) FD_READ,
      				 HTLoadFile, net->priority);
      		HTRequest_linkDestination(request);
      	    }
      	    /*
      	    ** Set up read buffer and streams.
      	    ** If cache element, we know that it's MIME, so call MIME parser
    ***************
    *** 636,690 ****
      	  case FS_GOT_DATA:
      	    if (HTRequest_isPostWeb(request)) {
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
      					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_OK);
      		}
    ! 	    }
    ! 	    FileCleanup(request, HT_LOADED);
      	    return HT_OK;
      	    break;
      	  case FS_NO_DATA:
      	    if (HTRequest_isPostWeb(request)) {
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
      					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_OK);
      		}
    ! 	    }
    ! 	    FileCleanup(request, HT_NO_DATA);
      	    return HT_OK;
      	    break;
      	  case FS_RETRY:
      	    if (HTRequest_isPostWeb(request)) {
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
      					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_killPostWeb(request);
    ! 	    }
    ! 	    FileCleanup(request, HT_RETRY);
      	    return HT_OK;
      	    break;
      	  case FS_ERROR:
      	    if (HTRequest_isPostWeb(request)) {
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
      					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_killPostWeb(request);
    ! 	    }
    ! 	    FileCleanup(request, HT_ERROR);
      	    return HT_OK;
      	    break;
      	}
    --- 639,706 ----
      	  case FS_GOT_DATA:
      	    if (HTRequest_isPostWeb(request)) {
    + 		FileCleanup(request, HTRequest_isMainDestination(request) ?
    + 			    HT_LOADED : HT_IGNORE);
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
      					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_OK);
      		}
    ! 		HTRequest_removeDestination(request);
    ! 	    } else
    ! 		FileCleanup(request, HT_LOADED);
      	    return HT_OK;
      	    break;
      	  case FS_NO_DATA:
      	    if (HTRequest_isPostWeb(request)) {
    + 		FileCleanup(request, HTRequest_isMainDestination(request) ?
    + 			    HT_NO_DATA : HT_IGNORE);
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
      					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_OK);
      		}
    ! 		HTRequest_removeDestination(request);
    ! 	    } else
    ! 		FileCleanup(request, HT_NO_DATA);
      	    return HT_OK;
      	    break;
      	  case FS_RETRY:
      	    if (HTRequest_isPostWeb(request)) {
    + 		FileCleanup(request, HTRequest_isMainDestination(request) ?
    + 			    HT_RETRY : HT_IGNORE);
    + 		HTRequest_killPostWeb(request);
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
      					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_removeDestination(request);
    ! 	    } else
    ! 		FileCleanup(request, HT_RETRY);
      	    return HT_OK;
      	    break;
      	  case FS_ERROR:
    + 	    /* Clean up the other connections or just this one */
      	    if (HTRequest_isPostWeb(request)) {
    + 		FileCleanup(request, HTRequest_isMainDestination(request) ?
    + 			    HT_ERROR : HT_IGNORE);
    + 		HTRequest_killPostWeb(request);
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
      					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_removeDestination(request);
    ! 	    } else
    ! 		FileCleanup(request, HT_ERROR);
      	    return HT_OK;
      	    break;
      	}
    diff -c Library/Repository/Implementation/HTInit.html:2.28.2.1 Library/Repository/Implementation/HTInit.html:2.28
    *** Library/Repository/Implementation/HTInit.html:2.28.2.1	Tue Jan 23 16:31:22 1996
    --- Library/Repository/Implementation/HTInit.html	Tue Jan 23 16:31:22 1996
    ***************
    *** 1,7 ****
      
      
      Initialization Routines
    ! 
      
      
      

    Initialization Module

    --- 1,7 ---- Initialization Routines !

    Initialization Module

    *************** *** 36,42 **** PLEASE SEE THE HTBInit MODULE FOR STANDARD BINDINGS BETWEEN ! FILE EXTENSIONS AND MEDIA TYPES.
      #ifndef HTINIT_H
    --- 36,42 ----
       PLEASE SEE THE HTBInit MODULE FOR STANDARD BINDINGS BETWEEN
    ! FILE EXTENSIONS AND MEDIA TYPES.
      
      #ifndef HTINIT_H
    ***************
    *** 95,101 ****
      
      #include "HTIcons.h"
    ! #include "WWWHTTP.h"
      #include "HTFile.h"
      #include "HTFTP.h"
      #include "HTGopher.h"
    --- 95,101 ----
      
      #include "HTIcons.h"
    ! #include "HTTP.h"
      #include "HTFile.h"
      #include "HTFTP.h"
      #include "HTGopher.h"
    diff -c Library/Repository/Implementation/HTMIME.c:2.45.2.1 Library/Repository/Implementation/HTMIME.c:2.45
    *** Library/Repository/Implementation/HTMIME.c:2.45.2.1	Tue Jan 23 16:31:23 1996
    --- Library/Repository/Implementation/HTMIME.c	Tue Jan 23 16:31:23 1996
    ***************
    *** 499,505 ****
      	    break;
      	  case LOCATION:
    ! 	    request->redirectionAnchor = HTAnchor_findAddress(HTStrip(ptr));
      	    state = JUNK_LINE;
      	    break;
    --- 499,513 ----
      	    break;
      	  case LOCATION:
    ! #if 0
    ! 	    /*
    ! 	    ** Doesn't work as a redirection header might contain a '='
    ! 	    ** Thanks to mitch@tam.net (Mitch DeShields)
    ! 	    */
    ! 	    if ((value = HTNextField(&ptr)) != NULL)
    ! 		StrAllocCopy(request->redirect, value);
    ! #endif
    ! 	    StrAllocCopy(request->redirect, ptr);
      	    state = JUNK_LINE;
      	    break;
    ***************
    *** 586,592 ****
      	if (me->EOLstate == EOL_FCR) {
      	    if (*b == CR) {				    /* End of header */
      		int status = parseheader(me, me->request, me->anchor);
    ! 		HTNet_setBytesRead(me->net, l);
      		if (status != HT_OK)
      		    return status;
      	    } else if (*b == LF)			   	     /* CRLF */
    --- 594,600 ----
      	if (me->EOLstate == EOL_FCR) {
      	    if (*b == CR) {				    /* End of header */
      		int status = parseheader(me, me->request, me->anchor);
    ! 		me->net->bytes_read = l;
      		if (status != HT_OK)
      		    return status;
      	    } else if (*b == LF)			   	     /* CRLF */
    ***************
    *** 604,610 ****
      		me->EOLstate = EOL_SCR;
      	    else if (*b == LF) {			    /* End of header */
      		int status = parseheader(me, me->request, me->anchor);
    ! 		HTNet_setBytesRead(me->net, l);
      		if (status != HT_OK)
      		    return status;
      	    } else if (WHITE(*b)) {	       /* Folding: LF SP or CR LF SP */
    --- 612,618 ----
      		me->EOLstate = EOL_SCR;
      	    else if (*b == LF) {			    /* End of header */
      		int status = parseheader(me, me->request, me->anchor);
    ! 		me->net->bytes_read = l;
      		if (status != HT_OK)
      		    return status;
      	    } else if (WHITE(*b)) {	       /* Folding: LF SP or CR LF SP */
    ***************
    *** 618,624 ****
      	} else if (me->EOLstate == EOL_SCR) {
      	    if (*b==CR || *b==LF) {			    /* End of header */
      		int status = parseheader(me, me->request, me->anchor);
    ! 		HTNet_setBytesRead(me->net, l);
      		if (status != HT_OK)
      		    return status;
      	    } else if (WHITE(*b)) {	 /* Folding: LF CR SP or CR LF CR SP */
    --- 626,632 ----
      	} else if (me->EOLstate == EOL_SCR) {
      	    if (*b==CR || *b==LF) {			    /* End of header */
      		int status = parseheader(me, me->request, me->anchor);
    ! 		me->net->bytes_read = l;
      		if (status != HT_OK)
      		    return status;
      	    } else if (WHITE(*b)) {	 /* Folding: LF CR SP or CR LF CR SP */
    ***************
    *** 643,662 ****
          ** that we get the correct content length of data
          */
          if (l > 0) {
    - 	HTParentAnchor * anchor = me->anchor;
      	if (me->target) {
      	    int status = (*me->target->isa->put_block)(me->target, b, l);
      	    if (status == HT_OK)
      		/* Check if CL at all - thanks to jwei@hal.com (John Wei) */
      		return (me->request->method == METHOD_HEAD ||
    ! 			(anchor->content_length >= 0 &&
    ! 			 HTNet_bytesRead(me->net) >= anchor->content_length)) ?
      			     HT_LOADED : HT_OK;
      	    else
      		return status;
    ! 	} else if (anchor->header_parsed)
    ! 	    return HT_LOADED;
    ! 	else
      	    return HT_WOULD_BLOCK;
          }
          return HT_OK;
    --- 651,667 ----
          ** that we get the correct content length of data
          */
          if (l > 0) {
      	if (me->target) {
      	    int status = (*me->target->isa->put_block)(me->target, b, l);
      	    if (status == HT_OK)
      		/* Check if CL at all - thanks to jwei@hal.com (John Wei) */
      		return (me->request->method == METHOD_HEAD ||
    ! 			(me->anchor->content_length >= 0 &&
    ! 			 me->net->bytes_read >= me->anchor->content_length)) ?
      			     HT_LOADED : HT_OK;
      	    else
      		return status;
    ! 	} else
      	    return HT_WOULD_BLOCK;
          }
          return HT_OK;
    diff -c Library/Repository/Implementation/HTMIMERq.c:2.8.2.1 Library/Repository/Implementation/HTMIMERq.c:2.8
    *** Library/Repository/Implementation/HTMIMERq.c:2.8.2.1	Tue Jan 23 16:31:24 1996
    --- Library/Repository/Implementation/HTMIMERq.c	Tue Jan 23 16:31:24 1996
    ***************
    *** 197,207 ****
      	return b ? PUTBLOCK(b, l) : HT_OK;
          else {
      	MIMEMakeRequest(me, me->request);
    ! 	if (HTRequest_isDestination(me->request)) {
    ! 	    (*me->target->isa->flush)(me->target);
    ! 	    HTNet_setBytesWritten(me->request->net, 0);
      	}
    ! 	me->transparent = YES;	
      	return b ? PUTBLOCK(b, l) : HT_OK;
          }
      }
    --- 197,210 ----
      	return b ? PUTBLOCK(b, l) : HT_OK;
          else {
      	MIMEMakeRequest(me, me->request);
    ! #if 0
    ! 	if ((status = PUTBLOCK(HTChunk_data(me->buffer),
    ! 			       HTChunk_size(me->buffer))) == HT_OK) {
    ! 	    me->transparent = YES;
    ! 	    return b ? PUTBLOCK(b, l) : HT_OK;
      	}
    ! #endif
    ! 	me->transparent = YES;
      	return b ? PUTBLOCK(b, l) : HT_OK;
          }
      }
    diff -c Library/Repository/Implementation/HTNet.c:2.44.2.1 Library/Repository/Implementation/HTNet.c:2.44
    *** Library/Repository/Implementation/HTNet.c:2.44.2.1	Tue Jan 23 16:31:25 1996
    --- Library/Repository/Implementation/HTNet.c	Tue Jan 23 16:31:25 1996
    ***************
    *** 503,520 ****
      	/* Close socket */
      	if (net->sockfd != INVSOC) {
    - 	    HTEvent_UnRegister(net->sockfd, (SockOps) FD_ALL);
      	    if (HTDNS_socket(net->dns) == INVSOC) {
      		if ((status = NETCLOSE(net->sockfd)) < 0)
      		    HTRequest_addSystemError(net->request, ERR_FATAL,
      					     socerrno, NO, "NETCLOSE");
      		if (WWWTRACE)
      		    TTYPrint(TDEST, "HTNet_delete closing %d\n", net->sockfd);
      	    } else {
      		if (WWWTRACE)
      		    TTYPrint(TDEST, "HTNet_delete keeping %d\n", net->sockfd);
      		HTDNS_clearActive(net->dns);
      		/* Here we should probably use a low priority */
      		HTEvent_Register(net->sockfd, net->request, (SockOps) FD_READ,
      				 HTDNS_closeSocket, net->priority);
      	    }
    --- 503,521 ----
      	/* Close socket */
      	if (net->sockfd != INVSOC) {
      	    if (HTDNS_socket(net->dns) == INVSOC) {
      		if ((status = NETCLOSE(net->sockfd)) < 0)
      		    HTRequest_addSystemError(net->request, ERR_FATAL,
      					     socerrno, NO, "NETCLOSE");
      		if (WWWTRACE)
      		    TTYPrint(TDEST, "HTNet_delete closing %d\n", net->sockfd);
    + 		HTEvent_UnRegister(net->sockfd, (SockOps) FD_ALL);
      	    } else {
      		if (WWWTRACE)
      		    TTYPrint(TDEST, "HTNet_delete keeping %d\n", net->sockfd);
      		HTDNS_clearActive(net->dns);
      		/* Here we should probably use a low priority */
    + 		HTEvent_UnRegister(net->sockfd, (SockOps) FD_ALL);
      		HTEvent_Register(net->sockfd, net->request, (SockOps) FD_READ,
      				 HTDNS_closeSocket, net->priority);
      	    }
    diff -c Library/Repository/Implementation/HTNetMan.html:2.5.4.1 Library/Repository/Implementation/HTNetMan.html:2.6
    *** Library/Repository/Implementation/HTNetMan.html:2.5.4.1	Tue Jan 23 16:31:26 1996
    --- Library/Repository/Implementation/HTNetMan.html	Tue Jan 23 16:31:26 1996
    ***************
    *** 1,7 ****
      
      
      Asyncronous Socket Management
    ! 
      
      
    --- 1,7 ----
      
      
      Asyncronous Socket Management
    ! 
      
      
    ***************
    *** 65,85 ****
          int 		home;			 /* Current home if multiple */
          time_t		connecttime;		 /* Used on multihomed hosts */
          long		bytes_read;		  /* Bytes read from network */
    !     long		bytes_written;		 /* Bytes written to network */
    !     BOOL		preemtive;   /* Eff result from Request and Protocol */
          HTPriority		priority;	 /* Priority of this request (event) */
          HTEventCallback *	cbf;			     /* Library load routine */
          HTRequest *		request;	   /* Link back to request structure */
          void *		context;		/* Protocol Specific context */
      };
    ! #define HTNet_bytesRead(me)		((me) ? (me)->bytes_read : -1)
    ! #define HTNet_bytesWritten(me)		((me) ? (me)->bytes_written : -1)
    ! 
    ! #define HTNet_setBytesRead(me,l)	((me) ? (me->bytes_read=(l)) : -1)
    ! #define HTNet_setBytesWritten(me,l)	((me) ? (me->bytes_written=(l)) :-1)
    ! 
    ! #define HTNet_dns(me)			((me) ? (me)->dns : NULL)
      
    --- 65,79 ----
          int 		home;			 /* Current home if multiple */
          time_t		connecttime;		 /* Used on multihomed hosts */
          long		bytes_read;		  /* Bytes read from network */
    !     BOOL		preemptive;   /* Eff result from Request and Protocol */
          HTPriority		priority;	 /* Priority of this request (event) */
          HTEventCallback *	cbf;			     /* Library load routine */
          HTRequest *		request;	   /* Link back to request structure */
          void *		context;		/* Protocol Specific context */
      };
    ! #define HTNet_bytesRead(me)	((me) ? (me)->bytes_read : -1)
    ! #define HTNet_dns(me)		((me) ? (me)->dns : NULL)
      
    diff -c Library/Repository/Implementation/HTProt.html:2.11 Library/Repository/Implementation/HTProt.html:2.12
    *** Library/Repository/Implementation/HTProt.html:2.11	Tue Jan 23 16:31:27 1996
    --- Library/Repository/Implementation/HTProt.html	Tue Jan 23 16:31:27 1996
    ***************
    *** 59,69 ****
      access acheme. For example HTTP.c is bound to http URLs. The call back
      function is the function to be called for loading. The reason why it
      is of type HTEventCallback is that it then can be used directly in the
    ! event loop when used in non-preemtive mode.
      
      extern BOOL HTProtocol_add (CONST char *       	name,
    ! 			    BOOL		preemtive,
      			    HTEventCallback *	client,
      			    HTEventCallback *	server);
      
    --- 59,69 ---- access acheme. For example HTTP.c is bound to http URLs. The call back function is the function to be called for loading. The reason why it is of type HTEventCallback is that it then can be used directly in the ! event loop when used in non-preemptive mode.
      extern BOOL HTProtocol_add (CONST char *       	name,
    ! 			    BOOL		preemptive,
      			    HTEventCallback *	client,
      			    HTEventCallback *	server);
      
    *************** *** 106,118 **** extern HTEventCallback * HTProtocol_server (HTProtocol * protocol);
    !

    Is Access Scheme Preemtive

    Returns YES if the implementation of the access scheme supports ! preemtive access only.
    ! extern BOOL HTProtocol_preemtive (HTProtocol * protocol);
      
    --- 106,118 ----
      extern HTEventCallback * HTProtocol_server (HTProtocol * protocol);
      
    !

    Is Access Scheme Preemptive

    Returns YES if the implementation of the access scheme supports ! preemptive access only.
    ! extern BOOL HTProtocol_preemptive (HTProtocol * protocol);
      
    diff -c Library/Repository/Implementation/HTReq.html:2.17.2.1 Library/Repository/Implementation/HTReq.html:2.18
    *** Library/Repository/Implementation/HTReq.html:2.17.2.1	Tue Jan 23 16:31:28 1996
    --- Library/Repository/Implementation/HTReq.html	Tue Jan 23 16:31:28 1996
    ***************
    *** 1,7 ****
      
      
      Public Declaration of Request Manager
    ! 
      
      
      
    --- 1,7 ----
      
      
      Public Declaration of Request Manager
    ! 
      
      
      
    ***************
    *** 85,102 ****
      extern HTRequest * HTRequest_dup (HTRequest * src);
      
    -

    Create a duplicate for Internal use

    - - Creates a new HTRequest object as a duplicate of the src request. The - difference to the HTRequest_dup function is that we don't copy the - error_stack and other information that the application keeps in its - copy of the request object. Otherwise it will be freed multiple times. - Returns YES if OK, else NO - -
    - extern HTRequest * HTRequest_dupInternal (HTRequest * src);
    - 
    -

    Delete Object

    This function deletes the object and cleans up the memory. --- 85,90 ---- *************** *** 164,182 **** extern HTReload HTRequest_reloadMode (HTRequest *request);
    -

    Redirections

    - - When a redirection response is returned to the Library, for example - from a remote HTTP server, this code is passed back to the - application. The application can then decide whether a new request - should be established or not. These two methods return the redirection - information required to issue a new request, that is the new anchor - and any list of keywords associated with this anchor. - -
    - extern HTAnchor * HTRequest_redirection (HTRequest * request);
    - 
    -

    Max number of Retrys for a Down Load

    Automatic reload can happen in two situations: --- 152,157 ---- *************** *** 499,507 **** extern void *HTRequest_context (HTRequest *request);
    !

    Preemtive or Non-preemtive Access

    ! A access scheme is defined with a default for using either preemtive (blocking I/O) or non-premitve (non-blocking I/O). This is basically a result of the implementation of the protocol module itself. However, if non-blocking I/O is the default then some times it is nice to be --- 474,482 ---- extern void *HTRequest_context (HTRequest *request);
    !

    Preemptive or Non-preemptive Access

    ! A access scheme is defined with a default for using either preemptive (blocking I/O) or non-premitve (non-blocking I/O). This is basically a result of the implementation of the protocol module itself. However, if non-blocking I/O is the default then some times it is nice to be *************** *** 510,517 **** non-blocking.
    ! extern void HTRequest_setPreemtive (HTRequest *request, BOOL mode);
    ! extern BOOL HTRequest_preemtive (HTRequest *request);
      

    Priority Management

    --- 485,492 ---- non-blocking.
    ! extern void HTRequest_setPreemptive (HTRequest *request, BOOL mode);
    ! extern BOOL HTRequest_preemptive (HTRequest *request);
      

    Priority Management

    *************** *** 586,602 **** char * syscall);
    !

    Bytes Read or Written in a Request

    This function returns the bytes read in the current request. For a deeper description of what the current request is, please read the user's guide. This function can be used in for example the HTAlert module to give the number of bytes ! read or written in a progress message.
    ! extern long HTRequest_bytesRead (HTRequest * request);
    ! extern long HTRequest_bytesWritten (HTRequest * request);
      

    Kill a Request

    --- 561,576 ---- char * syscall); !

    Bytes Read in Current Request

    This function returns the bytes read in the current request. For a deeper description of what the current request is, please read the user's guide. This function can be used in for example the HTAlert module to give the number of bytes ! read in a progress message.
    ! extern long HTRequest_bytesRead(HTRequest * request);
      

    Kill a Request

    diff -c Library/Repository/Implementation/HTReqMan.c:2.22.2.1 Library/Repository/Implementation/HTReqMan.c:2.22 *** Library/Repository/Implementation/HTReqMan.c:2.22.2.1 Tue Jan 23 16:31:29 1996 --- Library/Repository/Implementation/HTReqMan.c Tue Jan 23 16:31:29 1996 *************** *** 108,149 **** return me; } - /* HTRequest_dupInternal - ** --------------------- - ** Creates a new HTRequest object as a duplicate of the src request. - ** The difference to the HTRequest_dup function is that we don't copy the - ** error_stack and other information that the application keeps in its - ** copy of the request object. Otherwise it will be freed multiple times - ** Returns YES if OK, else NO - */ - PUBLIC HTRequest * HTRequest_dupInternal (HTRequest * src) - { - HTRequest * me; - if (!src) return NO; - if ((me = (HTRequest *) malloc(sizeof(HTRequest))) == NULL) - outofmem(__FILE__, "HTRequest_dup"); - memcpy(me, src, sizeof(HTRequest)); - me->internal = YES; - me->boundary = NULL; - me->authenticate = NULL; - me->error_stack = NULL; - me->access = NULL; - me->authorization = NULL; - me->prot_template = NULL; - me->dialog_msg = NULL; - me->net = NULL; - me->WWWAAScheme = NULL; - me->WWWAARealm = NULL; - me->WWWprotection = NULL; - return me; - } - /* Delete a request structure ** -------------------------- */ PUBLIC void HTRequest_delete (HTRequest * request) { if (request) { FREE(request->boundary); FREE(request->authenticate); if (request->error_stack) HTError_deleteAll(request->error_stack); --- 108,120 ---- return me; } /* Delete a request structure ** -------------------------- */ PUBLIC void HTRequest_delete (HTRequest * request) { if (request) { + FREE(request->redirect); FREE(request->boundary); FREE(request->authenticate); if (request->error_stack) HTError_deleteAll(request->error_stack); *************** *** 158,163 **** --- 129,135 ---- request->net->request = NULL; /* These are temporary until we get a MIME thingy */ + FREE(request->redirect); FREE(request->WWWAAScheme); FREE(request->WWWAARealm); FREE(request->WWWprotection); *************** *** 534,547 **** } /* - ** Bytes written in this request - */ - PUBLIC long HTRequest_bytesWritten (HTRequest * request) - { - return request ? HTNet_bytesWritten(request->net) : -1; - } - - /* ** Kill this request */ PUBLIC BOOL HTRequest_kill(HTRequest * request) --- 506,511 ---- *************** *** 603,616 **** } /* - ** Redirection informantion - */ - PUBLIC HTAnchor * HTRequest_redirection (HTRequest * request) - { - return (request ? request->redirectionAnchor : NULL); - } - - /* ** Set max number of automatic reload. Default is HT_MAX_RELOADS */ PUBLIC BOOL HTRequest_setMaxRetry (int newmax) --- 567,572 ---- *************** *** 682,705 **** ** build the internal request representation of the POST web ** Returns YES if OK, else NO */ ! PUBLIC BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest) { if (src && dest) { - dest->source = src->source = src; if (!src->mainDestination) { src->mainDestination = dest; src->destRequests = 1; - if (WWWTRACE) - TTYPrint(TDEST,"POSTWeb..... Adding dest %p to src %p\n", - dest, src); return YES; } else { ! if (!src->destinations) src->destinations = HTList_new(); if (HTList_addObject(src->destinations, (void *) dest)==YES) { src->destRequests++; - if (WWWTRACE) - TTYPrint(TDEST,"POSTWeb..... Adding dest %p to src %p\n", - dest, src); return YES; } } --- 638,655 ---- ** build the internal request representation of the POST web ** Returns YES if OK, else NO */ ! PUBLIC BOOL HTRequest_addDestination (HTRequest *src, HTRequest *dest) { if (src && dest) { if (!src->mainDestination) { src->mainDestination = dest; src->destRequests = 1; return YES; } else { ! if (!src->destinations) ! src->destinations = HTList_new(); if (HTList_addObject(src->destinations, (void *) dest)==YES) { src->destRequests++; return YES; } } *************** *** 709,719 **** /* ** Remove a destination request from this source request structure ! ** Remember only to delete the internal request objects as the other ! ** comes from the application! ** Returns YES if OK, else NO */ ! PUBLIC BOOL HTRequest_removeDestination (HTRequest * dest) { BOOL found=NO; if (dest && dest->source) { --- 659,669 ---- /* ** Remove a destination request from this source request structure ! ** Remember not to delete the main destination as it comes from the ! ** application! ** Returns YES if OK, else NO */ ! PUBLIC BOOL HTRequest_removeDestination (HTRequest *dest) { BOOL found=NO; if (dest && dest->source) { *************** *** 723,773 **** src->mainDestination = NULL; src->destRequests--; found = YES; ! } else if (src->destinations) { if (HTList_removeObject(src->destinations, (void *) dest)) { src->destRequests--; found = YES; } } if (found) { - if (dest->internal) HTRequest_delete(dest); if (WWWTRACE) ! TTYPrint(TDEST, "POSTWeb..... Deleting dest %p from src %p\n", ! dest, src); } ! if (src->destRequests <= 0) { if (WWWTRACE) ! TTYPrint(TDEST, "POSTWeb..... terminated\n"); ! if (src->internal) HTRequest_delete(src); } } return found; } /* ! ** Check to see whether all destinations are ready. If so then enable the ! ** source as ready for reading. ! ** Returns YES if all dests are ready, NO otherwise ! */ ! PUBLIC BOOL HTRequest_destinationsReady (HTRequest * me) ! { ! HTRequest * source = me ? me->source : NULL; ! if (source) { ! if (source->destStreams == source->destRequests) { ! HTNet * net = source->net; ! if (WWWTRACE) ! TTYPrint(TDEST, "POSTWeb..... All destinations are ready!\n"); ! if (net) /* Might already have finished */ ! HTEvent_Register(net->sockfd, source, (SockOps) FD_READ, ! net->cbf, net->priority); ! return YES; ! } ! } ! return NO; ! } ! ! /* ! ** Find the source request object and make the link between the ** source output stream and the destination input stream. There can be ** a conversion between the two streams! ** Returns YES if link is made, NO otherwise --- 673,701 ---- src->mainDestination = NULL; src->destRequests--; found = YES; ! } if (src->destinations) { if (HTList_removeObject(src->destinations, (void *) dest)) { + HTRequest_delete(dest); src->destRequests--; found = YES; } } if (found) { if (WWWTRACE) ! TTYPrint(TDEST, "Destination. %p removed from %p\n", ! dest, src); } ! if (!src->destRequests) { if (WWWTRACE) ! TTYPrint(TDEST, "Destination. PostWeb terminated\n"); ! HTRequest_delete(src); } } return found; } /* ! ** Find the source request structure and make the link between the ** source output stream and the destination input stream. There can be ** a conversion between the two streams! ** Returns YES if link is made, NO otherwise *************** *** 782,801 **** dest, YES); /* Check if we are the only one - else spawn off T streams */ /* @@@ We don't do this yet @@@ */ - /* Now set up output stream of the source */ - if (source->output_stream) - (*source->output_stream->isa->_free)(source->output_stream); source->output_stream = pipe ? pipe : dest->input_stream; ! if (WWWTRACE) ! TTYPrint(TDEST,"POSTWeb..... Linking dest %p to src %p\n", ! dest, source); if (++source->destStreams == source->destRequests) { HTNet *net = source->net; ! if (WWWTRACE) ! TTYPrint(TDEST, "POSTWeb..... All destinations ready!\n"); if (net) /* Might already have finished */ HTEvent_Register(net->sockfd, source, (SockOps) FD_READ, net->cbf, net->priority); --- 710,726 ---- dest, YES); /* Check if we are the only one - else spawn off T streams */ + /* @@@ We don't do this yet @@@ */ source->output_stream = pipe ? pipe : dest->input_stream; ! if (STREAM_TRACE) ! TTYPrint(TDEST,"Destination. Linked %p to source %p\n",dest,source); if (++source->destStreams == source->destRequests) { HTNet *net = source->net; ! if (STREAM_TRACE) ! TTYPrint(TDEST, "Destination. All destinations ready!\n"); if (net) /* Might already have finished */ HTEvent_Register(net->sockfd, source, (SockOps) FD_READ, net->cbf, net->priority); *************** *** 828,836 **** } if (found) { src->destStreams--; ! if (WWWTRACE) ! TTYPrint(TDEST, "POSTWeb..... Unlinking dest %p from src %p\n", ! dest, src); return YES; } } --- 753,761 ---- } if (found) { src->destStreams--; ! if (STREAM_TRACE) ! TTYPrint(TDEST, "Destination. Unlinked %p from source %p\n", ! dest, src); return YES; } } *************** *** 866,872 **** /* ** Kills all threads in a POST WEB connected to this request but ! ** NOT this request itself. We also keep the request structures. ** Some requests might be preemtive, for example a SMTP request (when ** that has been implemented). However, this will be handled internally ** in the load function. --- 791,797 ---- /* ** Kills all threads in a POST WEB connected to this request but ! ** keep the request structures. ** Some requests might be preemtive, for example a SMTP request (when ** that has been implemented). However, this will be handled internally ** in the load function. *************** *** 875,902 **** { if (me && me->source) { HTRequest *source = me->source; - if (WWWTRACE) TTYPrint(TDEST, "POSTWeb..... Killing\n"); ! /* ! ** Kill source. The stream tree is now freed so we have to build ! ** that again. This is done in HTRequest_linkDestination() ! */ ! if (me != source) { ! HTNet_kill(source->net); ! source->output_stream = NULL; ! } /* Kill all other destinations */ if (source->destinations) { HTList *cur = source->destinations; HTRequest *pres; while ((pres = (HTRequest *) HTList_nextObject(cur)) != NULL) ! if (me != pres) HTNet_kill(pres->net); } ! ! /* Kill main destination */ ! if (source->mainDestination && me != source->mainDestination) ! HTNet_kill(source->mainDestination->net); return YES; } return NO; --- 800,823 ---- { if (me && me->source) { HTRequest *source = me->source; ! /* Kill main destination */ ! if (source->mainDestination) ! HTNet_kill(source->mainDestination->net); /* Kill all other destinations */ if (source->destinations) { HTList *cur = source->destinations; HTRequest *pres; while ((pres = (HTRequest *) HTList_nextObject(cur)) != NULL) ! HTNet_kill(pres->net); } ! /* ! ** Kill source. The stream tree is now freed so we have to build ! ** that again. This is done in HTRequest_linkDestination() ! */ ! HTNet_kill(source->net); ! source->output_stream = NULL; return YES; } return NO; diff -c Library/Repository/Implementation/HTReqMan.html:2.12.2.1 Library/Repository/Implementation/HTReqMan.html:2.13 *** Library/Repository/Implementation/HTReqMan.html:2.12.2.1 Tue Jan 23 16:31:31 1996 --- Library/Repository/Implementation/HTReqMan.html Tue Jan 23 16:31:31 1996 *************** *** 1,7 **** Request Object ! --- 1,7 ---- Request Object ! *************** *** 49,60 ****
      struct _HTRequest {
    - 
    -     BOOL		internal;      /* Does the app knows about this one? */
    - 
          HTMethod		method;
          HTReload		reload;
          char *		boundary;		  /* MIME multipart boundary */
          int			retrys;       	      /* Number of automatic reloads */
          time_t		retry_after;		 /* Absolut time for a retry */
    --- 49,58 ----
      
      struct _HTRequest {
          HTMethod		method;
          HTReload		reload;
    +     char *		redirect;			  /* Location or URI */
          char *		boundary;		  /* MIME multipart boundary */
          int			retrys;       	      /* Number of automatic reloads */
          time_t		retry_after;		 /* Absolut time for a retry */
    ***************
    *** 103,117 ****
          HTParentAnchor *	parentAnchor;			/* For referer field */
      
    -

    Redirection

    - - If we get a redirection back then we return the new destination for - this request to the application using this anchor. - -
    -     HTAnchor *		redirectionAnchor;		  /* Redirection URL */
    - 
    -

    Streams From Network to Application

    --- 101,106 ----
    ***************
    *** 145,151 ****
      

    Other Flags

    !     BOOL		preemtive;
          BOOL		ContentNegotiation;
          BOOL		using_proxy;
      
    --- 134,140 ----

    Other Flags

    !     BOOL		preemptive;
          BOOL		ContentNegotiation;
          BOOL		using_proxy;
      
    *************** *** 210,216 ****
      extern BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest);
      extern BOOL HTRequest_removeDestination	(HTRequest * dest);
    - extern BOOL HTRequest_destinationsReady (HTRequest * me);
      extern BOOL HTRequest_linkDestination (HTRequest * dest);
      extern BOOL HTRequest_unlinkDestination (HTRequest * dest);
    --- 199,204 ----
    diff -c Library/Repository/Implementation/HTSocket.c:2.19.2.1 Library/Repository/Implementation/HTSocket.c:2.19
    *** Library/Repository/Implementation/HTSocket.c:2.19.2.1	Tue Jan 23 16:31:32 1996
    --- Library/Repository/Implementation/HTSocket.c	Tue Jan 23 16:31:33 1996
    ***************
    *** 114,121 ****
      				     net->cbf, net->priority);
      		    return HT_WOULD_BLOCK;
      		} else { /* We have a real error */
    ! 		    HTRequest_addSystemError(request,  ERR_FATAL, socerrno, NO,
    ! 					     "NETREAD");
      		    return HT_ERROR;
      		}
      	    } else if (!b_read) {
    --- 114,122 ----
      				     net->cbf, net->priority);
      		    return HT_WOULD_BLOCK;
      		} else { /* We have a real error */
    ! 		    if (PROT_TRACE)
    ! 			TTYPrint(TDEST, "Read Socket. READ ERROR %d\n",
    ! 				socerrno);
      		    return HT_ERROR;
      		}
      	    } else if (!b_read) {
    diff -c Library/Repository/Implementation/HTTP.c:1.111.2.1 Library/Repository/Implementation/HTTP.c:1.111
    *** Library/Repository/Implementation/HTTP.c:1.111.2.1	Tue Jan 23 16:31:34 1996
    --- Library/Repository/Implementation/HTTP.c	Tue Jan 23 16:31:34 1996
    ***************
    *** 61,69 ****
          HTTP_BEGIN		= 0,
          HTTP_NEED_CONNECTION,
          HTTP_NEED_REQUEST,
    !     HTTP_PERM_REDIRECT,
    !     HTTP_TEMP_REDIRECT,
          HTTP_NOT_MODIFIED,
          HTTP_AA
      } HTTPState;
    --- 61,69 ----
          HTTP_BEGIN		= 0,
          HTTP_NEED_CONNECTION,
          HTTP_NEED_REQUEST,
    !     HTTP_REDIRECTION,
          HTTP_NOT_MODIFIED,
    +     HTTP_EXPIRED,
          HTTP_AA
      } HTTPState;
    ***************
    *** 104,112 ****
          http_info *http = (http_info *) net->context;
          /* Free stream with data TO network */
    !     if (HTRequest_isDestination(req))
    ! 	HTRequest_removeDestination(req);
    !     else if (req->input_stream) {
      	if (status == HT_INTERRUPTED)
      	    (*req->input_stream->isa->abort)(req->input_stream, NULL);
      	else
    --- 104,110 ----
          http_info *http = (http_info *) net->context;
          /* Free stream with data TO network */
    !     if (!HTRequest_isDestination(req) && req->input_stream) {
      	if (status == HT_INTERRUPTED)
      	    (*req->input_stream->isa->abort)(req->input_stream, NULL);
      	else
    ***************
    *** 114,129 ****
      	req->input_stream = NULL;
          }
    -     /* Free user part of stream pipe if error */
    -     if (!net->target && req->output_stream)
    - 	(*req->output_stream->isa->abort)(req->output_stream, NULL);
    - 
          /* Remove the request object and our own context structure for http */
    !     HTNet_delete(net, req->internal ? HT_IGNORE : status);
          FREE(http);
          return YES;
      }
      /*
      **	This is a big switch handling all HTTP return codes. It puts in any
      **	appropiate error message and decides whether we should expect data
    --- 112,163 ----
      	req->input_stream = NULL;
          }
          /* Remove the request object and our own context structure for http */
    !     HTNet_delete(net, status);
          FREE(http);
          return YES;
      }
    + 
    + PRIVATE BOOL HTTPAuthentication (HTRequest * request)
    + {
    +     HTAAScheme scheme;
    +     HTList *valid_schemes = HTList_new();
    +     HTAssocList **scheme_specifics = NULL;
    +     char *tmplate = NULL;
    + 
    +     if (request->WWWAAScheme) {
    + 	if ((scheme = HTAAScheme_enum(request->WWWAAScheme)) != HTAA_UNKNOWN) {
    + 	    HTList_addObject(valid_schemes, (void *) scheme);
    + 	    if (!scheme_specifics) {
    + 		int i;
    + 		scheme_specifics = (HTAssocList**)
    + 		    malloc(HTAA_MAX_SCHEMES * sizeof(HTAssocList*));
    + 		if (!scheme_specifics)
    + 		    outofmem(__FILE__, "HTTPAuthentication");
    + 		for (i=0; i < HTAA_MAX_SCHEMES; i++)
    + 		    scheme_specifics[i] = NULL;
    + 	    }
    + 	    scheme_specifics[scheme] = HTAA_parseArgList(request->WWWAARealm);
    + 	} else if (PROT_TRACE) {
    + 	    HTRequest_addError(request, ERR_INFO, NO, HTERR_UNKNOWN_AA,
    + 		       (void *) request->WWWAAScheme, 0, "HTTPAuthentication");
    + 	    return NO;
    + 	}
    +     }
    +     if (request->WWWprotection) {
    + 	if (PROT_TRACE)
    + 	    TTYPrint(TDEST, "Protection template set to `%s'\n",
    + 		    request->WWWprotection);
    + 	StrAllocCopy(tmplate, request->WWWprotection);
    +     }
    +     request->valid_schemes = valid_schemes;
    +     request->scheme_specifics = scheme_specifics;
    +     request->prot_template = tmplate;
    +     return YES;
    + }
    + 
    + 
      /*
      **	This is a big switch handling all HTTP return codes. It puts in any
      **	appropiate error message and decides whether we should expect data
    ***************
    *** 135,183 ****
            case 0:						     /* 0.9 response */
            case 200:
    - 	me->http->next = HTTP_GOT_DATA;
    - 	break;
    - 
            case 201:
    - 	HTRequest_addError(me->request, ERR_INFO, NO, HTERR_CREATED,
    - 			   me->reason, (int) strlen(me->reason),
    - 			   "HTTPNextState");
    - 	me->http->next = HTTP_GOT_DATA;
    - 	break;
    - 
            case 202:
    - 	HTRequest_addError(me->request, ERR_INFO, NO, HTERR_ACCEPTED,
    - 			   me->reason, (int) strlen(me->reason),
    - 			   "HTTPNextState");
    - 	me->http->next = HTTP_GOT_DATA;
    - 	break;
    - 
            case 203:
    - 	HTRequest_addError(me->request, ERR_INFO, NO, HTERR_PARTIAL,
    - 			   me->reason, (int) strlen(me->reason),
    - 			   "HTTPNextState");
      	me->http->next = HTTP_GOT_DATA;
      	break;
            case 204:						      /* No Response */
    - 	HTRequest_addError(me->request, ERR_INFO, NO, HTERR_NO_CONTENT,
    - 			   me->reason, (int) strlen(me->reason),
    - 			   "HTTPNextState");
      	me->http->next = HTTP_NO_DATA;
      	break;
            case 301:						   	    /* Moved */
    - 	HTRequest_addError(me->request, ERR_INFO, NO, HTERR_MOVED,
    - 			   me->reason, (int) strlen(me->reason),
    - 			   "HTTPNextState");
    - 	me->http->next = HTTP_PERM_REDIRECT;
    - 	break;
    - 
            case 302:							    /* Found */
    ! 	HTRequest_addError(me->request, ERR_INFO, NO, HTERR_FOUND,
    ! 			   me->reason, (int) strlen(me->reason),
    ! 			   "HTTPNextState");
    ! 	me->http->next = HTTP_TEMP_REDIRECT;
      	break;
            case 303:							   /* Method */
    --- 169,187 ----
            case 0:						     /* 0.9 response */
            case 200:
            case 201:
            case 202:
            case 203:
      	me->http->next = HTTP_GOT_DATA;
      	break;
            case 204:						      /* No Response */
      	me->http->next = HTTP_NO_DATA;
      	break;
            case 301:						   	    /* Moved */
            case 302:							    /* Found */
    ! 	me->http->next = HTTP_REDIRECTION;
      	break;
            case 303:							   /* Method */
    ***************
    *** 188,196 ****
      	break;
            case 304:						     /* Not Modified */
    - 	HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_NOT_MODIFIED,
    - 			   me->reason, (int) strlen(me->reason),
    - 			   "HTTPNextState");
      	me->http->next = HTTP_NOT_MODIFIED;
      	break;
    --- 192,197 ----
    ***************
    *** 350,356 ****
      	    *ptr = '\0';
      	/* Set up the streams */
    ! 	if (me->status==200) {
      	    HTStream *s;
      	    me->target = HTStreamStack(WWW_MIME, req->output_format,
      				       req->output_stream, req, NO);
    --- 351,357 ----
      	    *ptr = '\0';
      	/* Set up the streams */
    ! 	if (me->status==200 && req->method==METHOD_GET) {
      	    HTStream *s;
      	    me->target = HTStreamStack(WWW_MIME, req->output_format,
      				       req->output_stream, req, NO);
    ***************
    *** 492,499 ****
          int status = HT_ERROR;
          HTNet *net = request->net;		     /* Generic protocol information */
          http_info *http;			    /* Specific protocol information */
    !     HTParentAnchor *anchor = HTRequest_anchor(request);
    ! 
          /*
          ** Initiate a new http structure and bind to request structure
          ** This is actually state HTTP_BEGIN, but it can't be in the state
    --- 493,499 ----
          int status = HT_ERROR;
          HTNet *net = request->net;		     /* Generic protocol information */
          http_info *http;			    /* Specific protocol information */
    !     
          /*
          ** Initiate a new http structure and bind to request structure
          ** This is actually state HTTP_BEGIN, but it can't be in the state
    ***************
    *** 501,516 ****
          */
          if (ops == FD_NONE) {
      	if (PROT_TRACE) TTYPrint(TDEST, "HTTP........ Looking for `%s\'\n",
    ! 				HTAnchor_physical(anchor));
      	if ((http = (http_info *) calloc(1, sizeof(http_info))) == NULL)
      	    outofmem(__FILE__, "HTLoadHTTP");
      	http->state = HTTP_BEGIN;
      	http->next = HTTP_ERROR;
      	net->context = http;
          } else if (ops == FD_CLOSE) {			      /* Interrupted */
    ! 	HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED,
    ! 			   NULL, 0, "HTLoadHTTP");
    ! 	HTTPCleanup(request, HT_INTERRUPTED);
      	return HT_OK;
          } else
      	http = (http_info *) net->context;		/* Get existing copy */
    --- 501,521 ----
          */
          if (ops == FD_NONE) {
      	if (PROT_TRACE) TTYPrint(TDEST, "HTTP........ Looking for `%s\'\n",
    ! 				HTAnchor_physical(request->anchor));
      	if ((http = (http_info *) calloc(1, sizeof(http_info))) == NULL)
      	    outofmem(__FILE__, "HTLoadHTTP");
      	http->state = HTTP_BEGIN;
      	http->next = HTTP_ERROR;
      	net->context = http;
          } else if (ops == FD_CLOSE) {			      /* Interrupted */
    ! #if 1
    ! 	if (HTRequest_isPostWeb(request))
    ! #else
    ! 	if(HTRequest_isPostWeb(request)&&!HTRequest_isMainDestination(request))
    ! #endif
    ! 	    HTTPCleanup(request, HT_IGNORE);
    ! 	else
    ! 	    HTTPCleanup(request, HT_INTERRUPTED);
      	return HT_OK;
          } else
      	http = (http_info *) net->context;		/* Get existing copy */
    ***************
    *** 538,544 ****
      	    break;
      	  case HTTP_NEED_CONNECTION: 	    /* Now let's set up a connection */
    ! 	    status = HTDoConnect(net, HTAnchor_physical(anchor),
      				 HTTP_PORT);
      	    if (status == HT_OK) {
    --- 543,549 ----
      	    break;
      	  case HTTP_NEED_CONNECTION: 	    /* Now let's set up a connection */
    ! 	    status = HTDoConnect(net, HTAnchor_physical(request->anchor),
      				 HTTP_PORT);
      	    if (status == HT_OK) {
    ***************
    *** 566,572 ****
      		** before all destinations are ready. If destination then
      		** register the input stream and get ready for read
      		*/
    ! 		if (HTRequest_isDestination(request)) {
      		    HTEvent_Register(net->sockfd, request, (SockOps) FD_READ,
      				     HTLoadHTTP, net->priority);
      		    HTRequest_linkDestination(request);
    --- 571,577 ----
      		** before all destinations are ready. If destination then
      		** register the input stream and get ready for read
      		*/
    ! 		if (HTRequest_isPostWeb(request)) {
      		    HTEvent_Register(net->sockfd, request, (SockOps) FD_READ,
      				     HTLoadHTTP, net->priority);
      		    HTRequest_linkDestination(request);
    ***************
    *** 574,581 ****
      		/* Set up stream FROM network and corresponding read buffer */
      		net->isoc = HTInputSocket_new(net->sockfd);
    - 		net->target = HTTPStatus_new(request, http);
      		http->state = HTTP_NEED_REQUEST;
      	    } else if (status == HT_WOULD_BLOCK || status == HT_PERSISTENT)
      		return HT_OK;
    --- 579,587 ----
      		/* Set up stream FROM network and corresponding read buffer */
      		net->isoc = HTInputSocket_new(net->sockfd);
    + 		/* @@@ USE STREAM STACK @@@ */
    + 		net->target = HTTPStatus_new(request, http);
      		http->state = HTTP_NEED_REQUEST;
      	    } else if (status == HT_WOULD_BLOCK || status == HT_PERSISTENT)
      		return HT_OK;
    ***************
    *** 588,599 ****
      	    if (ops == FD_WRITE || ops == FD_NONE) {
      		if (HTRequest_isDestination(request)) {
      		    HTNet *srcnet = request->source->net;
    ! 		    if (srcnet) {
    ! 			HTEvent_Register(srcnet->sockfd, request->source,
    ! 					 (SockOps) FD_READ,
    ! 					 srcnet->cbf, srcnet->priority);
    ! 			HTEvent_UnRegister(net->sockfd, FD_WRITE);
    ! 		    }
      		    return HT_OK;
      		}
      		status = request->PostCallback ?
    --- 594,603 ----
      	    if (ops == FD_WRITE || ops == FD_NONE) {
      		if (HTRequest_isDestination(request)) {
      		    HTNet *srcnet = request->source->net;
    ! 		    TTYPrint(TDEST,"File Serve. HERE!\n");		
    ! 		    HTEvent_Register(srcnet->sockfd, request->source,
    ! 				     (SockOps) FD_READ,
    ! 				     srcnet->cbf, srcnet->priority);
      		    return HT_OK;
      		}
      		status = request->PostCallback ?
    ***************
    *** 609,614 ****
    --- 613,620 ----
      		    return HT_OK;
      		else if (status == HT_LOADED)
      		    http->state = http->next;	       /* Jump to next state */
    + 		else if (status == HT_RELOAD)
    + 		    http->state = HTTP_EXPIRED;
      		else
      		    http->state = HTTP_ERROR;
      	    } else {
    ***************
    *** 620,719 ****
      	    http->state = HTTP_ERROR;
      	    break;
    ! 	  case HTTP_PERM_REDIRECT:
    ! 	    if (HTRequest_isPostWeb(request)) {
    ! 		if (HTRequest_isDestination(request)) {
    ! 		    HTLink *link =
    ! 			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) anchor);
    ! 		    HTLink_setResult(link, HT_LINK_ERROR);
    ! 		}
      		HTRequest_killPostWeb(request);
    ! 	    }
    ! 	    HTTPCleanup(request, HT_PERM_REDIRECT);
    ! 	    return HT_OK;
    ! 	    break;
    ! 
    ! 	  case HTTP_TEMP_REDIRECT:
    ! 	    if (HTRequest_isPostWeb(request)) {
    ! 		if (HTRequest_isDestination(request)) {
    ! 		    HTLink *link =
    ! 			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) anchor);
    ! 		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_killPostWeb(request);
      	    }
    - 	    HTTPCleanup(request, HT_TEMP_REDIRECT);
    - 	    return HT_OK;
      	    break;
    ! 
      	  case HTTP_AA:
    ! 	    if (HTRequest_isPostWeb(request)) {
    ! 		if (HTRequest_isDestination(request)) {
    ! 		    HTLink *link =
    ! 			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) anchor);
    ! 		    HTLink_setResult(link, HT_LINK_ERROR);
    ! 		}
      		HTRequest_killPostWeb(request);
      	    }
    - 	    HTTPCleanup(request, HT_NO_ACCESS);
    - 	    return HT_OK;
      	    break;
    ! 
      	  case HTTP_GOT_DATA:
      	    if (HTRequest_isPostWeb(request)) {
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_OK);
      		}
    ! 	    }
    ! 	    HTTPCleanup(request, HT_LOADED);
      	    return HT_OK;
      	    break;
      	  case HTTP_NO_DATA:
      	    if (HTRequest_isPostWeb(request)) {
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_OK);
      		}
    ! 	    }
    ! 	    HTTPCleanup(request, HT_NO_DATA);
      	    return HT_OK;
      	    break;
      	  case HTTP_RETRY:
      	    if (HTRequest_isPostWeb(request)) {
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link = 
      			HTAnchor_findLink((HTAnchor*) request->source->anchor,
    ! 					  (HTAnchor*) anchor);
      		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_killPostWeb(request);
    ! 	    }
    ! 	    HTTPCleanup(request, HT_RETRY);
      	    return HT_OK;
      	    break;
      	  case HTTP_ERROR:
      	    if (HTRequest_isPostWeb(request)) {
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) anchor);
      		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_killPostWeb(request);
    ! 	    }
    ! 	    HTTPCleanup(request, HT_ERROR);
      	    return HT_OK;
      	    break;
      	}
    --- 626,821 ----
      	    http->state = HTTP_ERROR;
      	    break;
    ! 	  case HTTP_EXPIRED:
    ! #if 0
    ! 	    /* Dirty hack and fall through */
    ! 	    if (PROT_TRACE) TTYPrint(TDEST, "HTTP........ Expired\n");
    ! 	    request->redirect = request->anchor->address;
    ! #endif
    ! 
    ! 	  case HTTP_REDIRECTION:
    ! 	    /* Clean up the other connections or just this one */
    ! 	    if (HTRequest_isPostWeb(request))
      		HTRequest_killPostWeb(request);
    ! 	    else
    ! 		HTTPCleanup(request, HT_IGNORE);
    ! 	    /* If we found a new URL in the response */
    ! 	    if (request->redirect) {
    ! 		if (status == 301) {
    ! 		    HTRequest_addError(request, ERR_INFO, NO, HTERR_MOVED,
    ! 			       (void *) request->redirect,
    ! 			       (int) strlen(request->redirect), "HTLoadHTTP");
    ! 		} else if (status == 302) {
    ! 		    HTRequest_addError(request, ERR_INFO, NO, HTERR_FOUND,
    ! 			       (void *) request->redirect,
    ! 			       (int) strlen(request->redirect), "HTLoadHTTP");
    ! 		}
    ! 
    ! 		/* If we haven't reached the limit for redirection */
    ! 		if (HTRequest_retry(request)) {
    ! 		    HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM);
    ! 		    HTAnchor *anchor = HTAnchor_findAddress(request->redirect);
    ! 
    ! 		    /* Make sure that we don't get this from cache */
    ! 		    HTRequest_setReloadMode(request, HT_FORCE_RELOAD);
    ! 		    
    ! 		    if (HTRequest_isPostWeb(request)) {
    ! 			HTRequest *dest = HTRequest_mainDestination(request);
    ! 			if (cbf && (*cbf)(request, HT_A_CONFIRM, HT_MSG_MOVED,
    ! 					  NULL, request->redirect, NULL)) {
    ! 
    ! 			    /* The new anchor inherits the Post Web */
    ! 			    HTAnchor_moveAllLinks((HTAnchor *) request->anchor,
    ! 						  anchor);
    ! 			    if (HTRequest_isSource(request))
    ! 				HTRequest_delete(request);
    ! 			    return HTCopyAnchor((HTAnchor *) anchor, dest) ?
    ! 				HT_OK : HT_ERROR;
    ! 			}
    ! 			return HT_OK;
    ! 		    } if (request->PostCallback) {
    ! #if 0
    ! 			return HTUploadAnchor((HTAnchor*) anchor, request) ?
    ! 			    HT_OK : HT_ERROR;
    ! #endif
    ! 		    } else {
    ! 			return HTLoadAnchor((HTAnchor *) anchor, request) ?
    ! 			    HT_OK : HT_ERROR;
    ! 		    }
    ! 		} else {
    ! 		    HTRequest_addError(request, ERR_FATAL, NO,
    ! 				       HTERR_MAX_REDIRECT,NULL,0,"HTLoadHTTP");
    ! 		    if (HTRequest_isPostWeb(request)) {
    ! 			BOOL main = HTRequest_isMainDestination(request);
    ! 			if (HTRequest_isDestination(request)) {
    ! 			    HTLink *link =
    ! 				HTAnchor_findLink((HTAnchor *)request->source->anchor,
    ! 						  (HTAnchor *)request->anchor);
    ! 			    HTLink_setResult(link, HT_LINK_ERROR);
    ! 			}
    ! 			HTNet_callAfter(request, main ? HT_ERROR : HT_IGNORE);
    ! 			HTRequest_removeDestination(request);
    ! 		    }
    ! 		    return HT_OK;
      		}
    ! 	    } else {
    ! 		HTRequest_addError(request, ERR_FATAL, NO, HTERR_BAD_REPLY,
    ! 			   NULL, 0, "HTLoadHTTP");
    ! 		return HT_OK;
      	    }
      	    break;
    ! 	    
      	  case HTTP_AA:
    ! 	    /* Clean up the other connections or just this one */
    ! 	    if (HTRequest_isPostWeb(request))
      		HTRequest_killPostWeb(request);
    + 	    else
    + 		HTTPCleanup(request, HT_IGNORE);
    + 
    + 	    /* Ask the user for a UserID and a passwd */
    + 	    if (HTTPAuthentication(request) && HTAA_retryWithAuth(request)) {
    + 		int ret;
    + 
    + 		/* Make sure that we don't get this from cache */
    + 		HTRequest_setReloadMode(request, HT_FORCE_RELOAD);
    + 
    + 		if (HTRequest_isPostWeb(request)) {
    + 		    HTRequest *dest = HTRequest_mainDestination(request);
    + 		    HTAnchor_appendMethods(request->anchor, request->method);
    + 		    ret=HTCopyAnchor((HTAnchor*)request->source->anchor, dest);
    + 		    return ret ? HT_OK : HT_ERROR;
    + 		} else if (request->PostCallback) {
    + #if 0
    + 		    ret = HTUploadAnchor((HTAnchor*) request->anchor,request);
    + 		    return ret ? HT_OK : HT_ERROR;
    + #endif
    + 		} else {
    + 		    ret = HTLoadAnchor((HTAnchor *) request->anchor, request);
    + 		    return ret ? HT_OK : HT_ERROR;
    + 		}
    + 	    } else {				   /* If the guy said no :-( */
    + 		HTRequest_addError(request, ERR_FATAL, NO, HTERR_UNAUTHORIZED,
    + 			   NULL, 0, "HTLoadHTTP");
    + 		if (HTRequest_isPostWeb(request)) {
    + 		    BOOL main = HTRequest_isMainDestination(request);
    + 		    if (HTRequest_isDestination(request)) {
    + 			HTLink *link =
    + 			    HTAnchor_findLink((HTAnchor *) request->source->anchor,
    + 					      (HTAnchor *) request->anchor);
    + 			HTLink_setResult(link, HT_LINK_ERROR);
    + 		    }
    + 		    HTNet_callAfter(request, main ? HT_ERROR : HT_IGNORE);
    + 		    HTRequest_removeDestination(request);
    + 		}
    + 		return HT_OK;
      	    }
      	    break;
    ! 	    
      	  case HTTP_GOT_DATA:
      	    if (HTRequest_isPostWeb(request)) {
    + 		HTTPCleanup(request, HTRequest_isMainDestination(request) ?
    + 			    HT_LOADED : HT_IGNORE);
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) request->anchor);
      		    HTLink_setResult(link, HT_LINK_OK);
      		}
    ! 		HTRequest_removeDestination(request);
    ! 	    } else
    ! 		HTTPCleanup(request, HT_LOADED);
      	    return HT_OK;
      	    break;
      	  case HTTP_NO_DATA:
      	    if (HTRequest_isPostWeb(request)) {
    + 		HTTPCleanup(request, HTRequest_isMainDestination(request) ?
    + 			    HT_NO_DATA : HT_IGNORE);
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) request->anchor);
      		    HTLink_setResult(link, HT_LINK_OK);
      		}
    ! 		HTRequest_removeDestination(request);
    ! 	    } else
    ! 		HTTPCleanup(request, HT_NO_DATA);
      	    return HT_OK;
      	    break;
      	  case HTTP_RETRY:
      	    if (HTRequest_isPostWeb(request)) {
    + 		HTTPCleanup(request, HTRequest_isMainDestination(request) ?
    + 			    HT_RETRY : HT_IGNORE);
    + 		HTRequest_killPostWeb(request);
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link = 
      			HTAnchor_findLink((HTAnchor*) request->source->anchor,
    ! 					  (HTAnchor*) request->anchor);
      		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_removeDestination(request);
    ! 	    } else
    ! 		HTTPCleanup(request, HT_RETRY);
      	    return HT_OK;
      	    break;
      	  case HTTP_ERROR:
    + 	    /* Clean up the other connections or just this one */
      	    if (HTRequest_isPostWeb(request)) {
    + 		HTTPCleanup(request, HTRequest_isMainDestination(request) ?
    + 			    HT_ERROR : HT_IGNORE);
    + 		HTRequest_killPostWeb(request);
      		if (HTRequest_isDestination(request)) {
      		    HTLink *link =
      			HTAnchor_findLink((HTAnchor *) request->source->anchor,
    ! 					  (HTAnchor *) request->anchor);
      		    HTLink_setResult(link, HT_LINK_ERROR);
      		}
    ! 		HTRequest_removeDestination(request);
    ! 	    } else
    ! 		HTTPCleanup(request, HT_ERROR);
      	    return HT_OK;
      	    break;
      	}
    diff -c Library/Repository/Implementation/HTTPRes.c:2.2.2.1 Library/Repository/Implementation/HTTPRes.c:2.2
    *** Library/Repository/Implementation/HTTPRes.c:2.2.2.1	Tue Jan 23 16:31:36 1996
    --- Library/Repository/Implementation/HTTPRes.c	Tue Jan 23 16:31:36 1996
    ***************
    *** 76,81 ****
    --- 76,82 ----
      PRIVATE void HTTPMakeResponse (HTStream * me, HTRequest * request)
      {
          char linebuf[256];
    +     HTParentAnchor *anchor = HTRequest_anchor(request);
          /* Generate the HTTP/1.0 ResponseLine */
          if (request->error_stack) {
    diff -c Library/Repository/Implementation/HTTPServ.c:2.4.2.1 Library/Repository/Implementation/HTTPServ.c:2.4
    *** Library/Repository/Implementation/HTTPServ.c:2.4.2.1	Tue Jan 23 16:31:37 1996
    --- Library/Repository/Implementation/HTTPServ.c	Tue Jan 23 16:31:37 1996
    ***************
    *** 102,108 ****
      PRIVATE int ParseRequest (HTStream * me)
      {
          HTRequest * request = me->request;
    !     HTRequest * newreq = me->http->serve = HTRequest_dupInternal(request);
          char * line = HTChunk_data(me->buffer);
          char * method;
          char * request_uri;
    --- 102,108 ----
      PRIVATE int ParseRequest (HTStream * me)
      {
          HTRequest * request = me->request;
    !     HTRequest * newreq = me->http->serve = HTRequest_dup(request);
          char * line = HTChunk_data(me->buffer);
          char * method;
          char * request_uri;
    diff -c Library/Repository/Implementation/HTUtils.html:2.51.2.1 Library/Repository/Implementation/HTUtils.html:2.51
    *** Library/Repository/Implementation/HTUtils.html:2.51.2.1	Tue Jan 23 16:31:37 1996
    --- Library/Repository/Implementation/HTUtils.html	Tue Jan 23 16:31:37 1996
    ***************
    *** 1,7 ****
      
      
      Utility macros
    ! 
      
      
    --- 1,7 ----
      
      
      Utility macros
    ! 
      
      
    ***************
    *** 277,287 ****
      #define HT_OK			0	/* Generic success */
      #define HT_ALL			1	/* Used by Net Manager */
    ! #define HT_PERSISTENT		29993	/* Wait for persistent connection */
    ! #define HT_IGNORE		29994	/* Ignore this in the Net manager */
    ! #define HT_NO_DATA		29995	/* OK but no data was loaded */
    ! #define HT_PERM_REDIRECT	29997	/* Redo the retrieve with a new URL */
    ! #define HT_TEMP_REDIRECT	29998	/* Redo the retrieve with a new URL */
      #define HT_LOADED		29999	/* Instead of a socket */
      #define HT_ERROR		-1	/* Generic failure */
    --- 277,287 ----
      #define HT_OK			0	/* Generic success */
      #define HT_ALL			1	/* Used by Net Manager */
    ! #define HT_PERSISTENT		29995	/* Wait for persistent connection */
    ! #define HT_IGNORE		29996	/* Ignore this in the Net manager */
    ! #define HT_NO_DATA		29997	/* OK but no data was loaded */
    ! #define HT_REDIRECTION_ON_FLY   29998	/* Redo the retrieve with a new URL */
    ! #define HT_REDIRECT		29998	/* Redo the retrieve with a new URL */
      #define HT_LOADED		29999	/* Instead of a socket */
      #define HT_ERROR		-1	/* Generic failure */
    diff -c Library/Repository/Implementation/HTWriter.c:2.27.4.1 Library/Repository/Implementation/HTWriter.c:2.27
    *** Library/Repository/Implementation/HTWriter.c:2.27.4.1	Tue Jan 23 16:31:38 1996
    --- Library/Repository/Implementation/HTWriter.c	Tue Jan 23 16:31:38 1996
    ***************
    *** 18,24 ****
      #include "HTReq.h"
      #include "HTNetMan.h"
      #include "HTConLen.h"
    - #include "HTAlert.h"
      #include "HTWriter.h"					 /* Implemented here */
      struct _HTStream {
    --- 18,23 ----
    ***************
    *** 69,76 ****
      {
          int b_write;
          CONST char *limit = buf+len;
    -     HTRequest * request = me->net->request;
    -     HTNet * net = me->net;
      #ifdef NOT_ASCII
          if (me->make_ascii && len && !me->ascbuf) {	      /* Generate new buffer */
    --- 68,73 ----
    ***************
    *** 104,116 ****
      #endif
      	    {
      		if (PROT_TRACE)
    ! 		    TTYPrint(TDEST,"Write Socket WOULD BLOCK %d\n",me->sockfd);
    ! 		HTEvent_Register(me->sockfd, request, (SockOps) FD_WRITE,
    ! 				 net->cbf, net->priority);
      		return HT_WOULD_BLOCK;
      	    } else {
    ! 		HTRequest_addSystemError(request,  ERR_FATAL, socerrno, NO,
    ! 					 "NETWRITE");
      		return HT_ERROR;
      	    }
      	}
    --- 101,113 ----
      #endif
      	    {
      		if (PROT_TRACE)
    ! 		    TTYPrint(TDEST,"Write Socket WOULD BLOCK %d\n", me->sockfd);
    ! 		HTEvent_Register(me->sockfd,me->net->request,(SockOps)FD_WRITE,
    ! 				 me->net->cbf, me->net->priority);
      		return HT_WOULD_BLOCK;
      	    } else {
    ! 		if (PROT_TRACE)
    ! 		    TTYPrint(TDEST, "Write Socket WRITE ERROR %d\n", socerrno);
      		return HT_ERROR;
      	    }
      	}
    ***************
    *** 120,130 ****
      	if (PROT_TRACE)
      	    TTYPrint(TDEST, "Write Socket %d bytes written to socket %d\n",
      		    b_write, me->sockfd);
    - 	net->bytes_written += b_write;
    - 	{
    - 	    HTAlertCallback *cbf = HTAlert_find(HT_PROG_READ);
    - 	    if (cbf) (*cbf)(request, HT_PROG_WRITE,HT_MSG_NULL,NULL,NULL,NULL);
    - 	}
          }
      #ifdef NOT_ASCII
          FREE(me->ascbuf);
    --- 117,122 ----
    diff -c Library/Repository/Implementation/Version.make:1.47.2.1 Library/Repository/Implementation/Version.make:1.47
    *** Library/Repository/Implementation/Version.make:1.47.2.1	Tue Jan 23 16:31:39 1996
    --- Library/Repository/Implementation/Version.make	Tue Jan 23 16:31:39 1996
    ***************
    *** 1 ****
    ! VC = 4.0C
    --- 1 ----
    ! VC = 4.0B
    diff -c Library/Repository/Implementation/windows/wwwcore.def:1.5.2.2 Library/Repository/Implementation/windows/wwwcore.def:1.5
    *** Library/Repository/Implementation/windows/wwwcore.def:1.5.2.2	Tue Jan 23 16:31:41 1996
    --- Library/Repository/Implementation/windows/wwwcore.def	Tue Jan 23 16:31:42 1996
    ***************
    *** 190,208 ****
      HTEvent_getWinHandle	@ 1003
      HTEvent_winHandle	@ 1004
      HTEvent_setWinHandle	@ 1005
    ! HTEvent_getWinHandle	@ 1006
    ! HTEvent_registerTimeout	@ 1007
    ! HTEvent_unregisterTimeout @ 1008
    ! HTEvent_RegisterTTY	@ 1009
    ! HTEvent_UnRegisterTTY	@ 1010
    ! HTEvent_Register	@ 1011
    ! HTEvent_UnRegister	@ 1012
    ! HTEvent_Retrieve	@ 1013
    ! HTEvent_UnregisterAll	@ 1014
    ! AsyncWindowProc		@ 1015
      HTEvent_Loop		@ 1016
    - AsyncWindowProc		@ 1017
    - HTEvent_Loop		@ 1018
      ;HTFormat.c		@ 1100
      HTPresentation_add	@ 1101
    --- 190,206 ----
      HTEvent_getWinHandle	@ 1003
      HTEvent_winHandle	@ 1004
      HTEvent_setWinHandle	@ 1005
    ! HTEvent_registerTimeout	@ 1006
    ! HTEvent_unregisterTimeout @ 1007
    ! HTEvent_RegisterTTY	@ 1008
    ! HTEvent_UnRegisterTTY	@ 1009
    ! HTEvent_Register	@ 1010
    ! HTEvent_UnRegister	@ 1011
    ! HTEvent_Retrieve	@ 1012
    ! HTEvent_UnregisterAll	@ 1013
    ! AsyncWindowProc		@ 1014
    ! HTEvent_Loop		@ 1015
      HTEvent_Loop		@ 1016
      ;HTFormat.c		@ 1100
      HTPresentation_add	@ 1101
    ***************
    *** 295,377 ****
      ;HTReqMan.c		@ 1700
      HTRequest_new		@ 1701
      HTRequest_dup		@ 1702
    ! HTRequest_dupInternal	@ 1703
    ! HTRequest_delete	@ 1704
    ! HTRequest_setMethod	@ 1705
    ! HTRequest_method	@ 1706
    ! HTRequest_setReloadMode	@ 1707
    ! HTRequest_reloadMode	@ 1708
    ! HTRequest_setConversion	@ 1709
    ! HTRequest_conversion	@ 1710
    ! HTRequest_setEncoding	@ 1711
    ! HTRequest_encoding	@ 1712
    ! HTRequest_setLanguage	@ 1713
    ! HTRequest_language	@ 1714
    ! HTRequest_setCharset	@ 1715
    ! HTRequest_charset	@ 1716
    ! HTRequest_setGenerator	@ 1717
    ! HTRequest_generator	@ 1718
    ! HTRequest_setParser	@ 1719
    ! HTRequest_parser	@ 1720
    ! HTRequest_setGnHd	@ 1721
    ! HTRequest_addGnHd	@ 1722
    ! HTRequest_gnHd		@ 1723
    ! HTRequest_setRqHd	@ 1724
    ! HTRequest_addRqHd	@ 1725
    ! HTRequest_rqHd		@ 1726
    ! HTRequest_setRsHd	@ 1727
    ! HTRequest_addRsHd	@ 1728
    ! HTRequest_rsHd		@ 1729
    ! HTRequest_setEnHd	@ 1730
    ! HTRequest_addEnHd	@ 1731
    ! HTRequest_enHd		@ 1732
    ! HTRequest_setAccess	@ 1733
    ! HTRequest_access	@ 1734
    ! HTRequest_setAnchor	@ 1735
    ! HTRequest_anchor	@ 1736
    ! HTRequest_setParent	@ 1737
    ! HTRequest_parent	@ 1738
    ! HTRequest_setOutputStream @ 1739
    ! HTRequest_outputStream	@ 1740
    ! HTRequest_setOutputFormat @ 1741
    ! HTRequest_outputFormat	@ 1742
    ! HTRequest_setDebugStream @ 1743
    ! HTRequest_debugStream	@ 1744
    ! HTRequest_setDebugFormat @ 1745
    ! HTRequest_debugFormat	@ 1746
    ! HTRequest_setCallback	@ 1747
    ! HTRequest_callback	@ 1748
    ! HTRequest_setContext	@ 1749
    ! HTRequest_context	@ 1750
    ! HTRequest_setPreemtive	@ 1751
    ! HTRequest_preemtive	@ 1752
    ! HTRequest_setNegotiation @ 1753
    ! HTRequest_negotiation	@ 1754
    ! HTRequest_bytesRead	@ 1755
    ! HTRequest_bytesWritten	@ 1756
    ! HTRequest_kill		@ 1757
    ! HTRequest_error		@ 1758
    ! HTRequest_setError	@ 1759
    ! HTRequest_addError	@ 1760
    ! HTRequest_addSystemError @ 1761
    ! HTRequest_retryTime	@ 1762
    ! HTRequest_redirection	@ 1763
    ! HTRequest_setMaxRetry	@ 1764
    ! HTRequest_maxRetry	@ 1765
    ! HTRequest_retry		@ 1766
    ! HTRequest_setPriority	@ 1767
    ! HTRequest_priority	@ 1768
    ! HTRequest_setNet	@ 1769
    ! HTRequest_net		@ 1770
    ! HTRequest_addDestination @ 1771
    ! HTRequest_removeDestination @ 1772
    ! HTRequest_destinationsReady @ 1773
    ! HTRequest_linkDestination @ 1774
    ! HTRequest_unlinkDestination @ 1775
    ! HTRequest_removePostWeb	@ 1776
    ! HTRequest_killPostWeb	@ 1777
    ! HTLoad			@ 1778
    ! HTServ			@ 1779
      ;HTSocket.c		@ 1800
      HTInputSocket_new	@ 1801
    --- 293,371 ----
      ;HTReqMan.c		@ 1700
      HTRequest_new		@ 1701
      HTRequest_dup		@ 1702
    ! HTRequest_delete	@ 1703
    ! HTRequest_setMethod	@ 1704
    ! HTRequest_method	@ 1705
    ! HTRequest_setReloadMode	@ 1706
    ! HTRequest_reloadMode	@ 1707
    ! HTRequest_setConversion	@ 1708
    ! HTRequest_conversion	@ 1709
    ! HTRequest_setEncoding	@ 1710
    ! HTRequest_encoding	@ 1711
    ! HTRequest_setLanguage	@ 1712
    ! HTRequest_language	@ 1713
    ! HTRequest_setCharset	@ 1714
    ! HTRequest_charset	@ 1715
    ! HTRequest_setGenerator	@ 1716
    ! HTRequest_generator	@ 1717
    ! HTRequest_setParser	@ 1718
    ! HTRequest_parser	@ 1719
    ! HTRequest_setGnHd	@ 1720
    ! HTRequest_addGnHd	@ 1721
    ! HTRequest_gnHd		@ 1722
    ! HTRequest_setRqHd	@ 1723
    ! HTRequest_addRqHd	@ 1724
    ! HTRequest_rqHd		@ 1725
    ! HTRequest_setRsHd	@ 1726
    ! HTRequest_addRsHd	@ 1727
    ! HTRequest_rsHd		@ 1728
    ! HTRequest_setEnHd	@ 1729
    ! HTRequest_addEnHd	@ 1730
    ! HTRequest_enHd		@ 1731
    ! HTRequest_setAccess	@ 1732
    ! HTRequest_access	@ 1733
    ! HTRequest_setAnchor	@ 1734
    ! HTRequest_anchor	@ 1735
    ! HTRequest_setParent	@ 1736
    ! HTRequest_parent	@ 1737
    ! HTRequest_setOutputStream @ 1738
    ! HTRequest_outputStream	@ 1739
    ! HTRequest_setOutputFormat @ 1740
    ! HTRequest_outputFormat	@ 1741
    ! HTRequest_setDebugStream @ 1742
    ! HTRequest_debugStream	@ 1743
    ! HTRequest_setDebugFormat @ 1744
    ! HTRequest_debugFormat	@ 1745
    ! HTRequest_setCallback	@ 1746
    ! HTRequest_callback	@ 1747
    ! HTRequest_setContext	@ 1748
    ! HTRequest_context	@ 1749
    ! HTRequest_setPreemtive	@ 1750
    ! HTRequest_preemtive	@ 1751
    ! HTRequest_setNegotiation @ 1752
    ! HTRequest_negotiation	@ 1753
    ! HTRequest_bytesRead	@ 1754
    ! HTRequest_kill		@ 1755
    ! HTRequest_error		@ 1756
    ! HTRequest_setError	@ 1757
    ! HTRequest_addError	@ 1758
    ! HTRequest_addSystemError @ 1759
    ! HTRequest_retryTime	@ 1760
    ! HTRequest_setMaxRetry	@ 1761
    ! HTRequest_maxRetry	@ 1762
    ! HTRequest_retry		@ 1763
    ! HTRequest_setPriority	@ 1764
    ! HTRequest_priority	@ 1765
    ! HTRequest_setNet	@ 1766
    ! HTRequest_net		@ 1767
    ! HTRequest_addDestination @ 1768
    ! HTRequest_removeDestination @ 1769
    ! HTRequest_linkDestination @ 1770
    ! HTRequest_unlinkDestination @ 1771
    ! HTRequest_removePostWeb	@ 1772
    ! HTRequest_killPostWeb	@ 1773
    ! HTLoad			@ 1774
    ! HTServ			@ 1775
      ;HTSocket.c		@ 1800
      HTInputSocket_new	@ 1801
    diff -c Library/Repository/Implementation/windows/wwwhttp.def:1.3.2.1 Library/Repository/Implementation/windows/wwwhttp.def:1.3
    *** Library/Repository/Implementation/windows/wwwhttp.def:1.3.2.1	Tue Jan 23 16:31:42 1996
    --- Library/Repository/Implementation/windows/wwwhttp.def	Tue Jan 23 16:31:43 1996
    ***************
    *** 3,9 ****
      HTAA_composeAuth	@ 101
      HTPasswordDialog	@ 102
      HTAA_retryWithAuth	@ 103
    - HTAA_authentication	@ 104
      ;HTAAUtil.c		@ 200
      HTAAScheme_enum		@ 201
    --- 3,8 ----
    diff -c Library/Repository/Implementation/windows/wwwutils.def:1.4.2.1 Library/Repository/Implementation/windows/wwwutils.def:1.4
    *** Library/Repository/Implementation/windows/wwwutils.def:1.4.2.1	Tue Jan 23 16:31:43 1996
    --- Library/Repository/Implementation/windows/wwwutils.def	Tue Jan 23 16:31:43 1996
    ***************
    *** 23,32 ****
      HTChunk_clear		@ 402
      HTChunk_delete		@ 403
      HTChunk_putc		@ 404
    ! HTChunk_ensure		@ 405
    ! HTChunk_terminate	@ 406
    ! HTChunk_puts		@ 407
    ! HTChunk_putb		@ 408
      ;HTList.c		@ 500
      HTList_new		@ 501
    --- 23,32 ----
      HTChunk_clear		@ 402
      HTChunk_delete		@ 403
      HTChunk_putc		@ 404
    ! HTChunk_puts		@ 405
    ! HTChunk_putb		@ 406
    ! HTChunk_ensure		@ 407
    ! HTChunk_terminate	@ 408
      ;HTList.c		@ 500
      HTList_new		@ 501
    diff -c Library/Repository/User/ReleaseNotes.html:1.20 Library/Repository/User/ReleaseNotes.html:1.21
    *** Library/Repository/User/ReleaseNotes.html:1.20	Tue Jan 23 16:31:44 1996
    --- Library/Repository/User/ReleaseNotes.html	Tue Jan 23 16:31:44 1996
    ***************
    *** 88,94 ****
      HREF="../Implementation/WWWMIME.html">WWWMIME.html, and WWWFTP.html include files to be used by applications.
    ! 
  • Changed functions with the name preemtive to preemptive it was a spelling mistake

    Alpha Release 6, November 20 1995

    --- 88,94 ---- HREF="../Implementation/WWWMIME.html">WWWMIME.html, and WWWFTP.html include files to be used by applications. !
  • Changed functions with the name preemptive to preemptive it was a spelling mistake

    Alpha Release 6, November 20 1995

    diff -c Library/Repository/User/Architecture/Events.html:1.4 Library/Repository/User/Architecture/Events.html:1.5 *** Library/Repository/User/Architecture/Events.html:1.4 Tue Jan 23 16:31:46 1996 --- Library/Repository/User/Architecture/Events.html Tue Jan 23 16:31:46 1996 *************** *** 23,31 ****
    !
    Base Mode (preemtive) !
    In this mode all requests are handled in a preemtive way that does not allow for any events to pause the execution of a thread or kill it. This mode is in other words strictly single threaded and the major difference between this mode and the next two modes is that all --- 23,31 ----
    !
    Base Mode (preemptive) !
    In this mode all requests are handled in a preemptive way that does not allow for any events to pause the execution of a thread or kill it. This mode is in other words strictly single threaded and the major difference between this mode and the next two modes is that all diff -c Library/Repository/User/Architecture/Threads.html:1.8 Library/Repository/User/Architecture/Threads.html:1.9 *** Library/Repository/User/Architecture/Threads.html:1.8 Tue Jan 23 16:31:47 1996 --- Library/Repository/User/Architecture/Threads.html Tue Jan 23 16:31:47 1996 *************** *** 66,74 **** the same TCP socket. Net objects can be used in three different ways:
      !
    1. All requests are preemtive and all I/O is blocking !
    2. Requests are non-preemtive managed by an internal event loop !
    3. Requests are non-preemtive managed by an external event loop
    The three modes are described in more detail in the section on Internal and --- 66,74 ---- the same TCP socket. Net objects can be used in three different ways:
      !
    1. All requests are preemptive and all I/O is blocking !
    2. Requests are non-preemptive managed by an internal event loop !
    3. Requests are non-preemptive managed by an external event loop
    The three modes are described in more detail in the section on
    Internal and diff -c Library/Repository/User/Architecture/choppy.html:1.17 Library/Repository/User/Architecture/choppy.html:1.18 *** Library/Repository/User/Architecture/choppy.html:1.17 Tue Jan 23 16:31:48 1996 --- Library/Repository/User/Architecture/choppy.html Tue Jan 23 16:31:48 1996 *************** *** 747,755 **** the same TCP socket. Net objects can be used in three different ways:
      !
    1. All requests are preemtive and all I/O is blocking !
    2. Requests are non-preemtive managed by an internal event loop !
    3. Requests are non-preemtive managed by an external event loop
    The three modes are described in more detail in the section on
    Internal and --- 747,755 ---- the same TCP socket. Net objects can be used in three different ways:
      !
    1. All requests are preemptive and all I/O is blocking !
    2. Requests are non-preemptive managed by an internal event loop !
    3. Requests are non-preemptive managed by an external event loop
    The three modes are described in more detail in the section on
    Internal and *************** *** 1048,1056 ****
    !
    Base Mode (preemtive) !
    In this mode all requests are handled in a preemtive way that does not allow for any events to pause the execution of a thread or kill it. This mode is in other words strictly single threaded and the major difference between this mode and the next two modes is that all --- 1048,1056 ----
    !
    Base Mode (preemptive) !
    In this mode all requests are handled in a preemptive way that does not allow for any events to pause the execution of a thread or kill it. This mode is in other words strictly single threaded and the major difference between this mode and the next two modes is that all diff -c Library/Repository/User/Patch/Overview.html:1.17.2.1 Library/Repository/User/Patch/Overview.html:1.17 *** Library/Repository/User/Patch/Overview.html:1.17.2.1 Tue Jan 23 16:31:51 1996 --- Library/Repository/User/Patch/Overview.html Tue Jan 23 16:31:51 1996 *************** *** 1,7 **** Known Bugs in W3C Reference Library ! --- 1,7 ---- Known Bugs in W3C Reference Library ! *************** *** 41,48 ****

    Library 4.0

      - -
    • SGML fix from Maciej Puzio for better error handling
    • Generating DLLs under Windows using Borland compilers --- 41,46 ---- diff -c Library/Repository/User/Using/Methods.html:1.6 Library/Repository/User/Using/Methods.html:1.7 *** Library/Repository/User/Using/Methods.html:1.6 Tue Jan 23 16:31:54 1996 --- Library/Repository/User/Using/Methods.html Tue Jan 23 16:31:54 1996 *************** *** 1,7 **** Using - Access Modules ! --- 1,7 ---- Using - Access Modules ! *************** *** 36,42 ****
        extern BOOL HTProtocol_add (CONST char *       	scheme,
      ! 			    BOOL		preemtive,
        			    HTEventCallBack *	callback);
        
      --- 36,42 ----
        extern BOOL HTProtocol_add (CONST char *       	scheme,
      ! 			    BOOL		preemptive,
        			    HTEventCallBack *	callback);
        
      *************** *** 48,58 **** with the Telnet access module which also can handle rlogin and tn3270 terminal sessions.

      ! The next argument describes to the Library whether it is capable of handling non-blocking sockets or ! not. This is normally a design decision when implementing the protocol module, and we will not ! stretch this argument anymore in this guide. The Library Architecture ! document discusses in more detail how a protocol module can be designed to support non-blocking ! sockets.

      The last argument is the actual function name to call when a request has been issued and a protocol module has been found associated with the access scheme used. Even though it is not clear at this --- 48,61 ---- with the Telnet access module which also can handle rlogin and tn3270 terminal sessions.

      ! The preemptive argument describes to the Library whether it is ! capable of handling non-blocking sockets or not. This is normally a design decision when ! implementing the protocol module in that a module implemented for using blocking sockets normally ! can't use non-blocking sockets. However, the other way is often possible, and in some situations it ! is advantageous to use blocking sockets. The Library allows this to happen on a pr request basic as ! explained in the section "The Request Object". The Library Architecture document discusses in more detail how a protocol ! module can be designed to support non-blocking sockets.

      The last argument is the actual function name to call when a request has been issued and a protocol module has been found associated with the access scheme used. Even though it is not clear at this diff -c Library/Repository/User/Using/Net.html:1.2.2.1 Library/Repository/User/Using/Net.html:1.2 *** Library/Repository/User/Using/Net.html:1.2.2.1 Tue Jan 23 16:31:54 1996 --- Library/Repository/User/Using/Net.html Tue Jan 23 16:31:55 1996 *************** *** 1,7 **** User Guide - Request Callback functions ! --- 1,7 ---- User Guide - Request Callback functions ! *************** *** 55,74 ****

      HT_ERROR
      An error occured -
      HT_INTERRUPTED -
      The request was interrupted
      HT_LOADED
      The document was loaded
      HT_NO_DATA
      OK, but no data
      HT_RETRY
      Retry request after at a later time !
      HT_PERM_REDIRECT !
      The request has been permanently redirected and we send back the new URL !
      HT_TEMP_REDIRECT !
      The request has been temporarily redirected and we send back the new URL !
      HT_NO_ACCESS !
      The request could not be fulfilled because it didn't contain sufficient credentials
      When a callback function is registered, it may be registered with a status code for which it is to --- 55,68 ----
      HT_ERROR
      An error occured
      HT_LOADED
      The document was loaded
      HT_NO_DATA
      OK, but no data
      HT_RETRY
      Retry request after at a later time !
      HT_REDIRECT !
      The request has been redirected and we send back the new URL
      When a callback function is registered, it may be registered with a status code for which it is to diff -c Library/Repository/User/Using/Request.html:1.8 Library/Repository/User/Using/Request.html:1.9 *** Library/Repository/User/Using/Request.html:1.8 Tue Jan 23 16:31:55 1996 --- Library/Repository/User/Using/Request.html Tue Jan 23 16:31:55 1996 *************** *** 1,7 **** Using the W3C Reference Library ! --- 1,7 ---- Using the W3C Reference Library ! *************** *** 382,400 **** extern void *HTRequest_context (HTRequest *request);
  • !

    Preemtive or Non-preemtive Access

    ! A access scheme is defined with a default for using either preemtive ! (blocking I/O) or non-premitve (non-blocking I/O). This is basically a ! result of the implementation of the protocol module itself. However, ! if non-blocking I/O is the default then some times it is nice to be ! able to set the mode to blocking instead. For example when loading the ! first document (the home page) then blocking can be used instead of ! non-blocking.
    ! extern void HTRequest_setPreemtive (HTRequest *request, BOOL mode);
    ! extern BOOL HTRequest_preemtive (HTRequest *request);
      

    Format Negotiation

    --- 382,399 ---- extern void *HTRequest_context (HTRequest *request);
    !

    Preemptive or Non-preemptive Access

    ! A access scheme is registered with a default for using either preemptive (blocking I/O) or ! non-premitve (non-blocking I/O). This is basically a result of the implementation of the protocol ! module itself and is explained in the section Registering Access ! Schemes. However, if non-blocking I/O is the default then some times it is nice to be able to ! set the mode to blocking instead. For example when loading the first document (the home page) then ! blocking can be used instead of non-blocking.
    ! extern void HTRequest_setPreemptive (HTRequest *request, BOOL mode);
    ! extern BOOL HTRequest_preemptive (HTRequest *request);
      

    Format Negotiation

    diff -c Library/Repository/User/Using/Startup.html:1.10 Library/Repository/User/Using/Startup.html:1.11 *** Library/Repository/User/Using/Startup.html:1.10 Tue Jan 23 16:31:56 1996 --- Library/Repository/User/Using/Startup.html Tue Jan 23 16:31:56 1996 *************** *** 200,206 ****
      extern BOOL HTProtocol_add (const char *       	name,
    ! 			    BOOL		preemtive,
      			    HTEventCallBack *	callback);
      
    --- 200,206 ----
      extern BOOL HTProtocol_add (const char *       	name,
    ! 			    BOOL		preemptive,
      			    HTEventCallBack *	callback);
      
    diff -c Library/Repository/User/Using/choppy.html:1.15 Library/Repository/User/Using/choppy.html:1.16 *** Library/Repository/User/Using/choppy.html:1.15 Tue Jan 23 16:31:57 1996 --- Library/Repository/User/Using/choppy.html Tue Jan 23 16:31:57 1996 *************** *** 269,275 ****
      extern BOOL HTProtocol_add (const char *       	name,
    ! 			    BOOL		preemtive,
      			    HTEventCallBack *	callback);
      
    --- 269,275 ----
      extern BOOL HTProtocol_add (const char *       	name,
    ! 			    BOOL		preemptive,
      			    HTEventCallBack *	callback);
      
    *************** *** 841,847 ****
      extern BOOL HTProtocol_add (CONST char *       	scheme,
    ! 			    BOOL		preemtive,
      			    HTEventCallBack *	callback);
      
    --- 841,847 ----
      extern BOOL HTProtocol_add (CONST char *       	scheme,
    ! 			    BOOL		preemptive,
      			    HTEventCallBack *	callback);
      
    *************** *** 2169,2177 **** extern void *HTRequest_context (HTRequest *request);
    !

    Preemtive or Non-preemtive Access

    ! A access scheme is defined with a default for using either preemtive (blocking I/O) or non-premitve (non-blocking I/O). This is basically a result of the implementation of the protocol module itself. However, if non-blocking I/O is the default then some times it is nice to be --- 2169,2177 ---- extern void *HTRequest_context (HTRequest *request); !

    Preemptive or Non-preemptive Access

    ! A access scheme is defined with a default for using either preemptive (blocking I/O) or non-premitve (non-blocking I/O). This is basically a result of the implementation of the protocol module itself. However, if non-blocking I/O is the default then some times it is nice to be *************** *** 2180,2187 **** non-blocking.
    ! extern void HTRequest_setPreemtive (HTRequest *request, BOOL mode);
    ! extern BOOL HTRequest_preemtive (HTRequest *request);
      

    Format Negotiation

    --- 2180,2187 ---- non-blocking.
    ! extern void HTRequest_setPreemptive (HTRequest *request, BOOL mode);
    ! extern BOOL HTRequest_preemptive (HTRequest *request);
      

    Format Negotiation

    diff -c LineMode/Repository/Defaults/Commands.html:1.9 LineMode/Repository/Defaults/Commands.html:1.10 *** LineMode/Repository/Defaults/Commands.html:1.9 Tue Jan 23 16:31:59 1996 --- LineMode/Repository/Defaults/Commands.html Tue Jan 23 16:31:59 1996 *************** *** 1,7 **** Line Mode Browser Commands ! --- 1,7 ---- Line Mode Browser Commands ! *************** *** 122,127 **** --- 122,142 ---- server. The syntax is the same as for PUT. + +

    Delete a Document on a remote server

    + + You can also use the DELETE method i the Line Mode browser to remove a + document on a remote HTTP server. + +
    +
    delete + +
    Deletes a document (DELETE) on remote HTTP server. Example + +
    + 	delete
    + 	URL to delete: http://www.w3.org
    + 

    Killer Features

    diff -c LineMode/Repository/Implementation/HTBrowse.c:1.107.2.1 LineMode/Repository/Implementation/HTBrowse.c:1.107 *** LineMode/Repository/Implementation/HTBrowse.c:1.107.2.1 Tue Jan 23 16:32:01 1996 --- LineMode/Repository/Implementation/HTBrowse.c Tue Jan 23 16:32:01 1996 *************** *** 137,142 **** --- 137,143 ---- typedef struct _LineMode { HTRequest * request; HTParentAnchor * anchor; + HTParentAnchor * dest; /* Destination for PUT etc. */ struct timeval * tv; /* Timeout on socket */ HTList * active; /* List of acitve contexts */ HTList * converters; *************** *** 163,169 **** LMState state; HTRequest * request; LineMode * lm; - HTParentAnchor * source; /* The source if we are using PUT or POST */ } Context; #ifndef WWW_WIN_WINDOW --- 164,169 ---- *************** *** 544,558 **** HTMethod_name(HTLink_method(link)), HTLink_result(link)); doit = confirm(req, msg); free(msg); ! } else { ! HTAnchor_removeAllLinks((HTAnchor *) src); HTAnchor_link((HTAnchor *) src, (HTAnchor *) dest, NULL, method); - } if (doit) { ! HTRequest * new_request = Thread_new(lm, YES, LM_UPDATE); ! Context * new_context = (Context *) HTRequest_context(new_request); ! new_context->source = src; ! status = HTCopyAnchor((HTAnchor *) src, new_request); } free(fd); free(fs); --- 544,554 ---- HTMethod_name(HTLink_method(link)), HTLink_result(link)); doit = confirm(req, msg); free(msg); ! } else HTAnchor_link((HTAnchor *) src, (HTAnchor *) dest, NULL, method); if (doit) { ! req = Thread_new(lm, YES, LM_UPDATE); ! status = HTCopyAnchor((HTAnchor *) src, req); } free(fd); free(fs); *************** *** 564,590 **** } /* - ** Delete a URL - */ - PRIVATE int DeleteURL (LineMode * lm, HTRequest * request) - { - char * base = HTAnchor_address((HTAnchor*) HTMainAnchor); - char * url = NULL; - int status = HT_INTERNAL; - if ((url = AskUser(request, "URL to delete:", base)) != NULL) { - char * full = HTParse(HTStrip(url), base, PARSE_ALL); - HTParentAnchor * anchor=(HTParentAnchor *) HTAnchor_findAddress(full); - request = Thread_new(lm, YES, LM_UPDATE); - HTRequest_setMethod(request, METHOD_DELETE); - status = HTLoadAnchor((HTAnchor *) anchor, request); - free(full); - } - FREE(base); - FREE(url); - return status; - } - - /* ** This function puts up a stream to a file in order to save a document. This ** is activated by '>', '>>' or '>!' from the prompt line. */ --- 560,565 ---- *************** *** 735,743 **** break; case 'D': ! if (CHECK_INPUT("DELETE", token)) { /* DELETE */ ! status = DeleteURL(lm, req); ! } else if (CHECK_INPUT("DOWN", token)) { /* Scroll down one page */ down: if (HText_canScrollDown(HTMainText)) HText_scrollDown(HTMainText); --- 710,716 ---- break; case 'D': ! if (CHECK_INPUT("DOWN", token)) { /* Scroll down one page */ down: if (HText_canScrollDown(HTMainText)) HText_scrollDown(HTMainText); *************** *** 1211,1285 **** #endif } - /* authentication_handler - ** ---------------------- - ** This function is registered to handle access authentication, - ** for example for HTTP - */ - PRIVATE int authentication_handler (HTRequest * request, int status) - { - Context * context = (Context *) HTRequest_context(request); - LineMode * lm = context->lm; - - /* Ask the authentication module for getting credentials */ - if (HTAA_authentication(request) && HTAA_retryWithAuth(request)) { - HTMethod method = HTRequest_method(request); - - /* Make sure we do a reload from cache */ - HTRequest_setReloadMode(request, HT_FORCE_RELOAD); - - /* Log current request */ - if (HTLog_isOpen()) HTLog_add(request, status); - - /* Start request with new credentials */ - if (HTMethod_hasEntity(method)) { /* PUT, POST etc. */ - HTCopyAnchor((HTAnchor *) context->source, request); - } else /* GET, HEAD, DELETE etc. */ - HTLoadAnchor((HTAnchor *) HTRequest_anchor(request), request); - } else { - TTYPrint(OUTPUT, "Access denied\n"); - if (!HTAlert_interactive()) Cleanup(lm, -1); - } - return HT_ERROR; /* Make sure this is the last callback in the list */ - } - - /* redirection_handler - ** ------------------- - ** This function is registered to handle permanent and temporary - ** redirections - */ - PRIVATE int redirection_handler (HTRequest * request, int status) - { - Context * context = (Context *) HTRequest_context(request); - HTMethod method = HTRequest_method(request); - LineMode * lm = context->lm; - HTAnchor * new_anchor = HTRequest_redirection(request); - - /* Make sure we do a reload from cache */ - HTRequest_setReloadMode(request, HT_FORCE_RELOAD); - - /* If destination specified then bind source anchor with new destination */ - if (HTMethod_hasEntity(method)) { - HTAnchor_removeAllLinks((HTAnchor *) context->source); - HTAnchor_link((HTAnchor *) context->source, new_anchor, NULL, method); - } - - /* Log current request */ - if (HTLog_isOpen()) HTLog_add(request, status); - - /* Start new request */ - if (HTRequest_retry(request)) { - if (HTMethod_hasEntity(method)) /* PUT, POST etc. */ - HTCopyAnchor((HTAnchor *) context->source, request); - else /* GET, HEAD, DELETE etc. */ - HTLoadAnchor(new_anchor, request); - } else { - TTYPrint(OUTPUT, "Too many redirections detected\n"); - if (!HTAlert_interactive()) Cleanup(lm, -1); - } - return HT_ERROR; /* Make sure this is the last callback in the list */ - } - /* terminate_handler ** ----------------- ** This function is registered to handle the result of the request --- 1184,1189 ---- *************** *** 1386,1396 **** arc.locale=0; arc.encoding=0; arc.i_encoding=0; doinull(); #endif - /* Create a new Line Mode object */ lm = LineMode_new(); - /* Initiate W3C Reference Library */ HTLibInit(APP_NAME, APP_VERSION); /* Initialize the protocol modules */ HTAccessInit(); --- 1290,1299 ---- arc.locale=0; arc.encoding=0; arc.i_encoding=0; doinull(); #endif lm = LineMode_new(); /* Initiate W3C Reference Library */ HTLibInit(APP_NAME, APP_VERSION); + lm = LineMode_new(); /* Initialize the protocol modules */ HTAccessInit(); *************** *** 1748,1758 **** } /* Register a call back function for the Net Manager */ ! HTNetCall_addBefore(HTLoadStart, 0); ! HTNetCall_addAfter(authentication_handler, HT_NO_ACCESS); ! HTNetCall_addAfter(redirection_handler, HT_PERM_REDIRECT); ! HTNetCall_addAfter(redirection_handler, HT_TEMP_REDIRECT); ! HTNetCall_addAfter(HTLoadTerminate, HT_ALL); HTNetCall_addAfter(terminate_handler, HT_ALL); /* Register our own MIME header handler for extra headers */ --- 1651,1657 ---- } /* Register a call back function for the Net Manager */ ! HTNetInit(); HTNetCall_addAfter(terminate_handler, HT_ALL); /* Register our own MIME header handler for extra headers */ diff -c LineMode/Repository/Implementation/Version.make:1.35.2.1 LineMode/Repository/Implementation/Version.make:1.35 *** LineMode/Repository/Implementation/Version.make:1.35.2.1 Tue Jan 23 16:32:02 1996 --- LineMode/Repository/Implementation/Version.make Tue Jan 23 16:32:02 1996 *************** *** 1 **** ! VL = 4.0C --- 1 ---- ! VL = 4.0B diff -c ComLine/Repository/Implementation/HTLine.c:1.8.2.1 ComLine/Repository/Implementation/HTLine.c:1.8 *** ComLine/Repository/Implementation/HTLine.c:1.8.2.1 Tue Jan 23 16:32:04 1996 --- ComLine/Repository/Implementation/HTLine.c Tue Jan 23 16:32:05 1996 *************** *** 65,71 **** HTRequest * request; HTParentAnchor * anchor; HTParentAnchor * dest; /* Destination for PUT etc. */ - HTMethod method; /* What method are we envoking */ struct timeval * tv; /* Timeout on socket */ char * cwd; /* Current dir URL */ char * rules; --- 65,70 ---- *************** *** 155,226 **** TTYPrint(OUTPUT,"Please send feedback to \n"); } - /* authentication_handler - ** ---------------------- - ** This function is registered to handle access authentication, - ** for example for HTTP - */ - PRIVATE int authentication_handler (HTRequest * request, int status) - { - ComLine * cl = (ComLine *) HTRequest_context(request); - - /* Ask the authentication module for getting credentials */ - if (HTAA_authentication(request) && HTAA_retryWithAuth(request)) { - - /* Make sure we do a reload from cache */ - HTRequest_setReloadMode(request, HT_FORCE_RELOAD); - - /* Log current request */ - if (HTLog_isOpen()) HTLog_add(request, status); - - /* Start request with new credentials */ - if (cl->dest) /* PUT, POST etc. */ - HTCopyAnchor((HTAnchor *) cl->anchor, cl->request); - else /* GET, HEAD, DELETE etc. */ - HTLoadAnchor((HTAnchor *) cl->anchor, cl->request); - } else { - TTYPrint(OUTPUT, "Access denied\n"); - Cleanup(cl, -1); - } - return HT_ERROR; /* Make sure this is the last callback in the list */ - } - - /* redirection_handler - ** ------------------- - ** This function is registered to handle permanent and temporary - ** redirections - */ - PRIVATE int redirection_handler (HTRequest * request, int status) - { - BOOL result = YES; - ComLine * cl = (ComLine *) HTRequest_context(request); - HTAnchor * new_anchor = HTRequest_redirection(request); - - /* Make sure we do a reload from cache */ - HTRequest_setReloadMode(request, HT_FORCE_RELOAD); - - /* If destination specified then bind together anchors */ - if (cl->dest) { - HTAnchor_removeAllLinks((HTAnchor *) cl->anchor); - HTAnchor_link((HTAnchor *) cl->anchor, new_anchor, NULL, cl->method); - } - - /* Log current request */ - if (HTLog_isOpen()) HTLog_add(request, status); - - /* Start new request */ - if (HTRequest_retry(request)) { - if (cl->dest) /* PUT, POST etc. */ - result = HTCopyAnchor((HTAnchor *) cl->anchor, cl->request); - else /* GET, HEAD, DELETE etc. */ - result = HTLoadAnchor(new_anchor, cl->request); - } else { - TTYPrint(OUTPUT, "Too many redirections detected\n"); - Cleanup(cl, -1); - } - return HT_ERROR; /* Make sure this is the last callback in the list */ - } - /* terminate_handler ** ----------------- ** This function is registered to handle the result of the request --- 154,159 ---- *************** *** 234,247 **** TTYPrint(OUTPUT, "Content Length found to be %ld\n", HTAnchor_length(cl->anchor)); } } - } else { - HTAlertCallback *cbf = HTAlert_find(HT_A_MESSAGE); - if (cbf) (*cbf)(request, HT_A_MESSAGE, HT_MSG_NULL, NULL, - HTRequest_error(request), NULL); } if (HTLog_isOpen()) HTLog_add(request, status); - Cleanup(cl, status == HT_LOADED ? 0 : -1); return HT_OK; } --- 167,176 ---- TTYPrint(OUTPUT, "Content Length found to be %ld\n", HTAnchor_length(cl->anchor)); } + Cleanup(cl, status == HT_LOADED ? 0 : -1); } } if (HTLog_isOpen()) HTLog_add(request, status); return HT_OK; } *************** *** 300,306 **** /* Initiate W3C Reference Library */ HTLibInit(APP_NAME, APP_VERSION); - HTAlert_setInteractive(YES); /* Initialize the protocol modules */ HTProtocol_add("http", NO, HTLoadHTTP, NULL); --- 229,234 ---- *************** *** 445,467 **** } else if (!strcasecomp(argv[arg], "-delete")) { HTRequest_setMethod(cl->request, METHOD_DELETE); - /* - ** Note that we for PUT and POST still use the GET method as we - ** store methods in a POST web in the link relationship between - ** anchors. This allows us to have multiple destinations each - ** with their own method as described in the POST web in the online - ** documentation of the Library - */ - /* POST Method */ } else if (!strcasecomp(argv[arg], "-post")) { ! cl->method = METHOD_POST; ! HTRequest_setMethod(cl->request, METHOD_GET); /* PUT Method */ } else if (!strcasecomp(argv[arg], "-put")) { ! cl->method = METHOD_PUT; ! HTRequest_setMethod(cl->request, METHOD_GET); } else { if (SHOW_MSG) TTYPrint(TDEST,"Bad Argument (%s)\n", argv[arg]); --- 373,385 ---- } else if (!strcasecomp(argv[arg], "-delete")) { HTRequest_setMethod(cl->request, METHOD_DELETE); /* POST Method */ } else if (!strcasecomp(argv[arg], "-post")) { ! HTRequest_setMethod(cl->request, METHOD_POST); /* PUT Method */ } else if (!strcasecomp(argv[arg], "-put")) { ! HTRequest_setMethod(cl->request, METHOD_PUT); } else { if (SHOW_MSG) TTYPrint(TDEST,"Bad Argument (%s)\n", argv[arg]); *************** *** 493,501 **** Cleanup(cl, -1); } ! /* If destination specified then bind together anchors */ ! if (cl->dest) HTAnchor_link((HTAnchor*)cl->anchor, ! (HTAnchor*)cl->dest, NULL, cl->method); /* Output file specified? */ if (cl->outputfile) { --- 411,421 ---- Cleanup(cl, -1); } ! /* Destination specified? */ ! if (cl->dest) { ! HTMethod method = HTRequest_method(cl->request); ! HTAnchor_link((HTAnchor*)cl->anchor, (HTAnchor*)cl->dest, NULL,method); ! } /* Output file specified? */ if (cl->outputfile) { *************** *** 530,545 **** /* Register our User Prompts etc in the Alert Manager */ if (HTAlert_interactive()) { - HTAlert_add(HTProgress, HT_A_PROGRESS); HTAlert_add(HTError_print, HT_A_MESSAGE); HTAlert_add(HTPromptUsernameAndPassword, HT_A_USER_PW); - } /* Register a call back function for the Net Manager */ - HTNetCall_addAfter(authentication_handler, HT_NO_ACCESS); - HTNetCall_addAfter(redirection_handler, HT_PERM_REDIRECT); - HTNetCall_addAfter(redirection_handler, HT_TEMP_REDIRECT); HTNetCall_addAfter(terminate_handler, HT_ALL); /* Register our own MIME header handler for extra headers */ --- 450,460 ---- *************** *** 569,580 **** if (cl->dest) /* PUT, POST etc. */ status = HTCopyAnchor((HTAnchor *) cl->anchor, cl->request); else if (keywords) /* Search */ - /* - ** Note that a search also can be done by creating a URL with the '?' - ** and the set of keywords embedded and then use HTLoadAnchor directly - */ status = HTSearch(HTChunk_data(keywords), cl->anchor, cl->request); ! else /* GET, HEAD, DELETE etc. */ status = HTLoadAnchor((HTAnchor *) cl->anchor, cl->request); if (keywords) HTChunk_delete(keywords); --- 484,491 ---- if (cl->dest) /* PUT, POST etc. */ status = HTCopyAnchor((HTAnchor *) cl->anchor, cl->request); else if (keywords) /* Search */ status = HTSearch(HTChunk_data(keywords), cl->anchor, cl->request); ! else /* GET, HEAD etc. */ status = HTLoadAnchor((HTAnchor *) cl->anchor, cl->request); if (keywords) HTChunk_delete(keywords); diff -c ComLine/Repository/Implementation/Version.make:1.8.2.1 ComLine/Repository/Implementation/Version.make:1.8 *** ComLine/Repository/Implementation/Version.make:1.8.2.1 Tue Jan 23 16:32:06 1996 --- ComLine/Repository/Implementation/Version.make Tue Jan 23 16:32:06 1996 *************** *** 1 **** ! VT = 4.0C --- 1 ---- ! VT = 4.0B diff -c ComLine/Repository/User/CommandLine.html:1.3 ComLine/Repository/User/CommandLine.html:1.4 *** ComLine/Repository/User/CommandLine.html:1.3 Tue Jan 23 16:32:09 1996 --- ComLine/Repository/User/CommandLine.html Tue Jan 23 16:32:09 1996 *************** *** 1,7 **** Command Line Syntax for the W3C Command Line Tool ! --- 1,7 ---- Command Line Syntax for the W3C Command Line Tool ! *************** *** 119,130 ****
    -put
    Uploads a document from either the local file system or a remote HTTP server to a remote HTTP server (destination) using PUT method. You must indicate the destination using the ! -dest command line option.
    -post
    Uploads a document from either the local file system or a remote HTTP server to a remote HTTP server (destination) using POST method. You must indicate the destination using the ! -dest command line option.
    -link
    Being implemented --- 119,130 ----
    -put
    Uploads a document from either the local file system or a remote HTTP server to a remote HTTP server (destination) using PUT method. You must indicate the destination using the ! -dest command line option.
    -post
    Uploads a document from either the local file system or a remote HTTP server to a remote HTTP server (destination) using POST method. You must indicate the destination using the ! -dest command line option.
    -link
    Being implemented diff -c Robot/Repository/Implementation/HTRobot.c:1.6.2.2 Robot/Repository/Implementation/HTRobot.c:1.6 *** Robot/Repository/Implementation/HTRobot.c:1.6.2.2 Tue Jan 23 16:32:12 1996 --- Robot/Repository/Implementation/HTRobot.c Tue Jan 23 16:32:13 1996 *************** *** 32,42 **** #define DEFAULT_OUTPUT_FILE "robot.out" #define DEFAULT_RULE_FILE "robot.conf" #define DEFAULT_LOG_FILE "robot.log" - #define DEFAULT_DEPTH 0 #define SHOW_MSG (WWWTRACE || HTAlert_interactive()) ! #define DEFAULT_TIMEOUT 10 /* timeout in seconds */ #if defined(__svr4__) #define CATCH_SIG --- 32,41 ---- #define DEFAULT_OUTPUT_FILE "robot.out" #define DEFAULT_RULE_FILE "robot.conf" #define DEFAULT_LOG_FILE "robot.log" #define SHOW_MSG (WWWTRACE || HTAlert_interactive()) ! #define DEFAULT_TIMEOUT 60 /* timeout in seconds */ #if defined(__svr4__) #define CATCH_SIG *************** *** 50,56 **** typedef struct _Robot { HTRequest * request; - HTRequest * timeout; /* Until we get a server eventloop */ HTParentAnchor * anchor; int depth; /* How deep is our tree */ HTList * hyperdoc; /* List of our HyperDoc Objects */ --- 49,54 ---- *************** *** 116,121 **** --- 114,123 ---- /* Add this HyperDoc object to our list */ if (!mr->hyperdoc) mr->hyperdoc = HTList_new(); HTList_addObject(mr->hyperdoc, (void *) hd); + + if (SHOW_MSG) + TTYPrint(TDEST, "HyperDoc.... %p bound to anchor %p with depth %d\n", + hd, anchor, depth); return hd; } *************** *** 146,155 **** me->cwd = HTFindRelatedName(); me->output = OUTPUT; - /* We keep an extra timeout request object for the timeout_handler */ - me->timeout = HTRequest_new(); - HTRequest_setContext (me->timeout, me); - /* Bind the Robot object together with the Request Object */ me->request = HTRequest_new(); HTRequest_setContext (me->request, me); --- 148,153 ---- *************** *** 270,288 **** /* timeout_handler ** --------------- ** This function is registered to handle timeout in select eventloop - ** - ** BUG: This doesn't work as we don't get the right request object - ** back from the event loop */ PRIVATE int timeout_handler (HTRequest * request) { Robot * mr = (Robot *) HTRequest_context(request); if (SHOW_MSG) TTYPrint(TDEST, "Robot....... Request timeout...\n"); - #if 0 HTRequest_kill(request); Thread_delete(mr, request); ! #endif ! Cleanup(mr, -1); return HT_OK; } --- 268,281 ---- /* timeout_handler ** --------------- ** This function is registered to handle timeout in select eventloop */ PRIVATE int timeout_handler (HTRequest * request) { Robot * mr = (Robot *) HTRequest_context(request); if (SHOW_MSG) TTYPrint(TDEST, "Robot....... Request timeout...\n"); HTRequest_kill(request); Thread_delete(mr, request); ! if (HTNet_isEmpty()) Cleanup(mr, -1); return HT_OK; } *************** *** 317,327 **** Robot * mr = (Robot *) HTRequest_context(text->request); HTAnchor * dest = HTAnchor_followMainLink((HTAnchor *) anchor); HTParentAnchor * dest_parent = HTAnchor_parent(dest); - char * uri = HTAnchor_address((HTAnchor *) dest_parent); HyperDoc * hd = HTAnchor_document(dest_parent); - if (SHOW_MSG) TTYPrint(TDEST, "Robot....... Found `%s\' - ", uri ? uri : "NULL"); - /* Test whether we already have a hyperdoc for this document */ if (mr->flags & MR_LINK && dest_parent && !hd) { HTParentAnchor * parent = HTRequest_parent(text->request); --- 310,317 ---- *************** *** 329,351 **** int depth = last ? last->depth+1 : 0; HTRequest * newreq = Thread_new(mr, METHOD_GET); HyperDoc_new(mr, dest_parent, depth); ! HTRequest_setParent(newreq, HTRequest_anchor(text->request)); ! if (depth >= mr->depth) { ! if (SHOW_MSG) ! TTYPrint(TDEST, "loading at depth %d using HEAD\n", depth); ! HTRequest_setMethod(newreq, METHOD_HEAD); ! HTRequest_setOutputFormat(newreq, WWW_MIME); ! } else { ! if (SHOW_MSG) TTYPrint(TDEST, "loading at depth %d\n", depth); } if (HTLoadAnchor((HTAnchor *) dest_parent, newreq) != YES) { ! if (SHOW_MSG) TTYPrint(TDEST, "not tested!\n"); Thread_delete(mr, newreq); } - } else { - if (SHOW_MSG) TTYPrint(TDEST, "duplicate\n"); } - FREE(uri); } } --- 319,334 ---- int depth = last ? last->depth+1 : 0; HTRequest * newreq = Thread_new(mr, METHOD_GET); HyperDoc_new(mr, dest_parent, depth); ! if (SHOW_MSG) { ! char * uri = HTAnchor_address((HTAnchor *) dest_parent); ! TTYPrint(TDEST, "Robot....... Loading `%s\'\n", uri); ! free(uri); } if (HTLoadAnchor((HTAnchor *) dest_parent, newreq) != YES) { ! if (SHOW_MSG) TTYPrint(TDEST, "Robot...... URI Not tested!\n"); Thread_delete(mr, newreq); } } } } *************** *** 479,486 **** /* load anchors */ } else if (!strcmp(argv[arg], "-link")) { mr->flags |= MR_LINK; - mr->depth = (arg+1 < argc && *argv[arg+1] != '-') ? - atoi(argv[++arg]) : DEFAULT_DEPTH; /* preemtive or non-preemtive access */ } else if (!strcmp(argv[arg], "-single")) { --- 462,467 ---- *************** *** 523,529 **** if (!keycnt) { char * ref = HTParse(argv[arg], mr->cwd, PARSE_ALL); mr->anchor = (HTParentAnchor *) HTAnchor_findAddress(ref); - HyperDoc_new(mr, mr->anchor, 0); keycnt = 1; FREE(ref); } else { /* Check for successive keyword arguments */ --- 504,509 ---- *************** *** 591,597 **** HTNetCall_addAfter(terminate_handler, HT_ALL); /* Set timeout on sockets */ ! HTEvent_registerTimeout(mr->tv, mr->timeout, timeout_handler, NO); /* Start the request */ if (keywords) /* Search */ --- 571,577 ---- HTNetCall_addAfter(terminate_handler, HT_ALL); /* Set timeout on sockets */ ! HTEvent_registerTimeout(mr->tv, mr->request, timeout_handler, NO); /* Start the request */ if (keywords) /* Search */ diff -c Robot/Repository/Implementation/Version.make:1.5.2.1 Robot/Repository/Implementation/Version.make:1.5 *** Robot/Repository/Implementation/Version.make:1.5.2.1 Tue Jan 23 16:32:14 1996 --- Robot/Repository/Implementation/Version.make Tue Jan 23 16:32:15 1996 *************** *** 1 **** ! VR = 4.0C --- 1 ---- ! VR = 4.0B diff -c Robot/Repository/User/CommandLine.html:1.2 Robot/Repository/User/CommandLine.html:1.3 *** Robot/Repository/User/CommandLine.html:1.2 Tue Jan 23 16:32:17 1996 --- Robot/Repository/User/CommandLine.html Tue Jan 23 16:32:17 1996 *************** *** 1,7 **** Command Line Syntax for the W3C Mini Robot ! --- 1,7 ---- Command Line Syntax for the W3C Mini Robot ! *************** *** 71,78 ****
    Specifies a log file with a list of visited documents. The default value is "www-log" !
    -link !
    Fetch all links from this document
    -n
    Non-interactive mode. Outputs the formatted document to the --- 71,82 ----
    Specifies a log file with a list of visited documents. The default value is "www-log" !
    -link [ n ] ! !
    Fetch all links from this document. By indicating an integer "n" as the parameter you can ! specify the depth of which the search should go. The default value is 0 which means that only the ! start page is searched. Level 1 insicates that the start page and all pages directly linked ! from the start page are searched.
    -n
    Non-interactive mode. Outputs the formatted document to the diff -c Robot/Repository/User/Patch/Overview.html:1.1 Robot/Repository/User/Patch/Overview.html:1.2 *** Robot/Repository/User/Patch/Overview.html:1.1 Tue Jan 23 16:32:19 1996 --- Robot/Repository/User/Patch/Overview.html Tue Jan 23 16:32:19 1996 *************** *** 1,7 **** Known Bugs in W3C Mini Robot ! --- 1,7 ---- Known Bugs in W3C Mini Robot ! *************** *** 42,50 ****
    !
      !
    • !


    --- 42,55 ----
    !

    Robot 4.0

    ! !
    !
    Improvement patch !
    Fixes two problems in the anchor traversal and adds depth as a valid parameter so that ! you can specify how many hops to go from the start page. ! !


    diff -c MiniServ/Repository/Implementation/Version.make:1.7.2.1 MiniServ/Repository/Implementation/Version.make:1.7 *** MiniServ/Repository/Implementation/Version.make:1.7.2.1 Tue Jan 23 16:32:22 1996 --- MiniServ/Repository/Implementation/Version.make Tue Jan 23 16:32:22 1996 *************** *** 1 **** ! VS = 4.0C --- 1 ---- ! VS = 4.0B diff -c MiniServ/Repository/User/CommandLine.html:1.2 MiniServ/Repository/User/CommandLine.html:1.3 *** MiniServ/Repository/User/CommandLine.html:1.2 Tue Jan 23 16:32:24 1996 --- MiniServ/Repository/User/CommandLine.html Tue Jan 23 16:32:25 1996 *************** *** 129,136 ****
    -backlog <n>
    Number of connections pending in the listen queue !
    -preemtive !
    Preemtive (blocking) sockets
    --- 129,136 ----
    -backlog <n>
    Number of connections pending in the listen queue !
    -preemptive !
    Preemptive (blocking) sockets libwww/Library/User/Patch/lib_4.0_1.fix0100644000076400001440000001206606160370670017223 0ustar danielusers SGML fix

    SGML Fix

    I have a proposition to improve a little the SGML module. A small patch I send here improves the error recovery in parsing ill-formed HTML documents. I have a proposition to improve a little the SGML module. A small patch I send here improves the error recovery in parsing ill-formed HTML documents.

    The end_element function in sgml.c hanles ill-nested tags pretty well, ignoring bad end tags or assuming corresponding start tags. The rule used now states that if we encounter an ending tag without the corresponding start tag on the top of the element=20 stack, we do one of the following:

    1. If we are on the last level (that is there is only <HTML> on the element stack), we ignore the bad ending tag.
    2. If there are some other elements (start tags) on the stack, we assume the corresponding end tags (except </HTML>), free the stack from those elements, and=20 then check again the tag which caused the whole problem against the rules 1 and 2.
    In some cases this algorithm doesn't work well. Consider the example:
    	<HTML>
    	<BODY>
    	<UL>
    	<LI> <A...> <B> ... </A> </I> </B>
    	<LI> ...
    	</UL>
    	</BODY>
    	</HTML>
    
    There are two errors in this example:
    1. <A> and <B> are overlapping
    2. There is an </I> without any <I>
    According to the rules given above, this is parsed exactly as shown below:
    	<HTML>
    	<BODY>
    	<UL>
    	<LI> <A...> <B> ... </B> </A>
    	</UL>
    	</BODY>
    	<LI> ...
    	</HTML>
    
    This is because:
    1. When the parser encounters </A> (line 4 of the original example) it assumes </B> and then goes to </A>, which is now nested perfectly.
    2. Next it encounters </I>, so it assumes all open start tags (except <HTML>); this gives </UL> </BODY>.
    3. Again with </I>, the parser is now on the last level (only <HTML> hasn't been closed), so it ignores </I>.
    4. Now the parser encounters <LI>. Note that it's a <LI> outside <UL>! What=20 happen next depends on the quality of the HTML module (my version of html.c was crashing until I corrected it).
    The problem is that too many ending tags are assumed. I propose to ignore all the ill-nested end tags which doesn't have a corresponding opening tag on the element stack (on the whole stack, not only on its top). Considering the example, after seeing=20 </I> we simply ignore it (and not assume all pending tags and then ignore it).

    So, after this modification the example is parsed as:

    	<HTML>
    	<BODY>
    	<UL>
    	<LI> <A...> <B> ... </B> </A>
    	<LI> ...
    	</UL>
    	</BODY>
    	</HTML>
    
    Here's the patch:
    /*
    **	Helper function to check if the tag is on the stack
    */
    PRIVATE BOOL lookup_element_stack (HTElement* stack, HTTag *tag)
    {
        HTElement* elem;
        for (elem = stack; elem != NULL; elem = elem->next)
        {
            if (elem->tag == tag)  return TRUE;
        }
        return FALSE;
    }
    /* 
    ** Modified end_element function
    ** Only one line is added, it's marked with <==
    */
    PRIVATE void end_element (HTStream * context, HTTag * old_tag)
    {
        if (SGML_TRACE) TTYPrint(TDEST, "SGML: End   </%s>\n", old_tag->name);
        if (old_tag->contents == SGML_EMPTY) {
            if (SGML_TRACE) TTYPrint(TDEST,"SGML: Illegal end tag </%s> found.\n",
                    old_tag->name);
            return;
        }
        while (context->element_stack)      {/* Loop is error path only */
            HTElement * N = context->element_stack;
            HTTag * t = N->tag;
            if (old_tag != t) {             /* Mismatch: syntax error */
                if (context->element_stack->next    /* This is not the last level */
                        && lookup_element_stack(context->element_stack, old_tag)) {  /* <== */
                    if (SGML_TRACE) TTYPrint(TDEST,
                    "SGML: Found </%s> when expecting </%s>. </%s> assumed.\n",
                        old_tag->name, t->name, t->name);
                } else {                    /* last level */
                    if (SGML_TRACE) TTYPrint(TDEST,
                        "SGML: Found </%s> when expecting </%s>. </%s> Ignored.\n",
                        old_tag->name, t->name, old_tag->name);
                    return;                 /* Ignore */
                }
            }
            context->element_stack = N->next;               /* Remove from stack */
            free(N);
            (*context->actions->end_element)(context->target,
                     t - context->dtd->tags);
            if (old_tag == t) return;  /* Correct sequence */
            /* Syntax error path only */
        }
        if (SGML_TRACE) TTYPrint(TDEST,
            "SGML: Extra end tag </%s> found and ignored.\n", old_tag->name);
    }
    
    Tha't all for now. I have also another proposition concerning SGML module (better handling of <P> tags), but in my opinion it will need some discussion, and I don't know if you are interested in this.


    Maciej Puzio, puzio@laser.mimuw.edu.pl
    libwww/Library/User/Patch/lib_4.0_2.fix0100644000076400001440000000547606160370671017234 0ustar danielusers Better Log facilities ( 8-Feb-1996)

    Better Log facilities

    Kevin Hoogheem wrote this addition to the log manager.

    HTlog.h

    /* Defines for Loging
    ** heres the standard way of login looks like.
    **	Format: <HOST> - - <DATE> <METHOD> <URI> <RESULT> <CONTENT_LENTGH>
    */
    #define LOG_STANDARD 1
    /**	Format: <HOST> - - <DATE> <METHOD>*/
    #define LOG_HDM 2
    /**	Format: <HOST> - - <DATE> <URI>*/
    #define LOG_HDU 3
    /**	Format: <HOST> - - <DATE> <METHOD> <URI>*/
    #define LOG_HDMU 4
    /**	Format: <HOST> - - <DATE> <METHOD> <URI> <RESULT>*/
    #define LOG_HDMUR 5
    /**	Format: <URI>*/
    #define LOG_URI 6
    

    HTlog.c

    /*	Add entry to the log file
    **	-------------------------
    **	Format: <HOST> - - <DATE> <METHOD> <URI> <RESULT> <CONTENT_LENTGH>
    **	which is almost equivalent to Common Logformat. Permissions on UNIX
    **	are modified by umask.
    **
    **	Returns YES if OK, NO on error
    **
    **	BUG: No result code is produced :-( Should be taken from HTError.c
    */
    PUBLIC BOOL HTLog_add (HTRequest * request, int status, int method)
    {
        if (HTLogFile) {
    	time_t now = time(NULL);
    	HTParentAnchor *anchor = HTRequest_anchor(request);
    	char * uri = HTAnchor_address((HTAnchor *) anchor);
    	if (WWWTRACE) TTYPrint(TDEST, "Log......... Writing log\n");
    	switch(method){
    	  case LOG_STANDARD:
    	    fprintf(HTLogFile, "localhost - - [%s] %s %s %d %ld\n",
    		  HTDateTimeStr(&now, HTloglocal),
    		  HTMethod_name(HTRequest_method(request)),
    		  uri,
    		  status,
    		  HTAnchor_length(anchor));
    	    FREE(uri);
    	    break;
    	  case LOG_HDM:
    	    fprintf(HTLogFile, "localhost - - [%s] %s\n",
    		  HTDateTimeStr(&now, HTloglocal),
    		  HTMethod_name(HTRequest_method(request));
    		break;
    	  case LOG_HDU:
    	    fprintf(HTLogFile, "localhost - - [%s] %s\n",
    		  HTDateTimeStr(&now, HTloglocal),
    		  uri);
    	    FREE(uri);
    	    break;
    	  case LOG_HDMU:
    	    fprintf(HTLogFile, "localhost - - [%s] %s %s\n",
    		  HTDateTimeStr(&now, HTloglocal),
    		  HTMethod_name(HTRequest_method(request)),
    		  uri);
    	    FREE(uri);
    	    break;
    	  case LOG_HDMUR:
    	    fprintf(HTLogFile, "localhost - - [%s] %s %s %d\n",
    		  HTDateTimeStr(&now, HTloglocal),
    		  HTMethod_name(HTRequest_method(request)),
    		  uri,
    		  status);
    	    FREE(uri);
    	    break;
    	  case LOG_URI:
    	    fprintf(HTLogFile, "%s\n",uri);
    	    FREE(uri);
    	    break;
    	  default:
    	    fprintf(HTLogFile, "[%s] - - Loging Method Not defined\n",
    		  HTDateTimeStr(&now, HTloglocal));
    	    break;
    	}
    	return (fflush(HTLogFile)!=EOF);       /* Actually update it on disk */
        }
        return NO;
    }
    


    Henrik Frystyk, Feb 1996
    libwww/Library/User/Patch/lib_4.0_3.fix0100644000076400001440000000240606160370672017224 0ustar danielusers#include "WWWUtil.h" #include "HText.h" #define PROXY(type,name,args,shortargs) \ type (*APP_ ## name) args; \ type name args { return APP_ ## name shortargs; } #define PROXYVOID(name,args,shortargs) \ void (*APP_ ## name) args; \ void name args { APP_ ## name shortargs; } PROXY(HText *, HText_new2, (HTRequest * request, HTParentAnchor * anchor, HTStream * output_stream), (request, anchor, output_stream)) PROXYVOID(HText_beginAppend, (HText * text), (text)) PROXYVOID(HText_endAppend, (HText * text), (text)) PROXYVOID(HText_setStyle, (HText * text, HTStyle * style), (text, style)) PROXYVOID(HText_appendCharacter, (HText * text, char ch), (text, ch)) PROXYVOID(HText_appendText, (HText * text, CONST char * str), (text, str)) PROXYVOID(HText_appendParagraph, (HText * text), (text)) PROXYVOID(HText_beginAnchor, (HText * text, HTChildAnchor * anc), (text, anc)) PROXYVOID(HText_endAnchor, (HText * text), (text)) PROXYVOID(HText_appendImage, ( HText * text, HTChildAnchor * anc, CONST char * alternative_text, CONST char * alignment, BOOL isMap), (text, anc, alternative_text, alignment, isMap)) HTStyleSheet * styleSheet;libwww/Library/User/Patch/lib_4.0_4.fix0100644000076400001440000000133406160370673017225 0ustar danielusers/* ************************************************************************* */ /* HTMulTee.h */ /* */ /* Sacha Varma, April 1996 */ /* */ /* The HTMulTee writes to all the streams in an HTList. */ /* ************************************************************************* */ #ifndef _HTMULTEE_H #define _HTMULTEE_H #include "HTStream.h" extern HTStream* HTMulTee_new(HTList* list_of_destination_streams_p); #endif /* ! _HTMULTEE_H */ libwww/Library/User/Patch/lib_4.0_5.fix0100644000076400001440000001517706160370674017241 0ustar danielusers/* ************************************************************************* */ /* HTMulTee.c */ /* */ /* Sacha Varma, April 1996 */ /* */ /* The HTMulTee writes to all the streams in an HTList. */ /* */ /* NOTES: */ /* (23/4/96) The value returned by the methods does NOT depend in any way on */ /* the values returned by the methods of the destination streams: */ /* this ought to be fixed */ /* ************************************************************************* */ /* ************************************************************************* */ /* Preprocessor Stuff */ /* ************************************************************************* */ #include /* Library include files */ #include "tcp.h" #include "HTUtils.h" #include "HTMemory.h" #include "HTList.h" #include "HTMulTee.h" /* ************************************************************************* */ /* Prototype declarations */ /* ************************************************************************* */ PRIVATE int HTMulTee_abort(HTStream* this, HTList* errors_p); PRIVATE int HTMulTee_free(HTStream* this); PRIVATE int HTMulTee_put_string(HTStream* this, CONST char* str_p); PRIVATE int HTMulTee_put_character(HTStream* this, char ch); PRIVATE int HTMulTee_put_block(HTStream* this, CONST char* block_p, int len); PRIVATE int HTMulTee_flush(HTStream* this); /* ************************************************************************* */ /* HTMulTee data members */ /* ************************************************************************* */ struct _HTStream { CONST HTStreamClass* isa; /* pointer to base class */ char* buffer; /* buffer to store chars */ char* buffer_ptr; /* pointer to next free char */ int buffer_count; /* num chars un buffer */ int buffer_size; /* current buffer length */ HTList* dests_p; /* list of destinations */ }; /* ************************************************************************* */ /* HTMulTee overridden virtual methods */ /* ************************************************************************* */ PRIVATE CONST HTStreamClass HTMulTeeClass = { "HTMulTee", HTMulTee_flush, HTMulTee_free, HTMulTee_abort, HTMulTee_put_character, HTMulTee_put_string, HTMulTee_put_block }; /* ************************************************************************* */ /* Stream methods */ /* ************************************************************************* */ /* ************************************************************************* */ /* flush */ /* ************************************************************************* */ PRIVATE int HTMulTee_flush(HTStream* this) { void* obj_p; HTList* list_p = (this->dests_p); while (obj_p = HTList_nextObject(list_p)) ((HTStream*) obj_p)->isa->flush((HTStream*) obj_p); return HT_OK; } /* ************************************************************************* */ /* put_block */ /* ************************************************************************* */ PRIVATE int HTMulTee_put_block(HTStream* this, CONST char* block_p, int len) { int i; void* obj_p; HTList* list_p = (this->dests_p); while (obj_p = HTList_nextObject(list_p)) ((HTStream*) obj_p)->isa->put_block(obj_p,block_p,len); return HT_OK; } /* ************************************************************************* */ /* put_character */ /* ************************************************************************* */ PRIVATE int HTMulTee_put_character(HTStream* this, char ch) { int i; void* obj_p; HTList* list_p = (this->dests_p); while (obj_p = HTList_nextObject(list_p)) ((HTStream*) obj_p)->isa->put_character((HTStream*) obj_p,ch); return HT_OK; } /* ************************************************************************* */ /* put_string */ /* ************************************************************************* */ PRIVATE int HTMulTee_put_string(HTStream* this, CONST char* str_p) { int i; void* obj_p; HTList* list_p = (this->dests_p); while (obj_p = HTList_nextObject(list_p)) ((HTStream*) obj_p)->isa->put_string((HTStream*) obj_p,str_p); return HT_OK; } /* ************************************************************************* */ /* free DESTRUCTOR */ /* ************************************************************************* */ PRIVATE int HTMulTee_free(HTStream* this) { void* obj_p; HTList* list_p = (this->dests_p); while (obj_p = HTList_nextObject(this->dests_p)) { printf(" freeing %ld\n", obj_p); ((HTStream*) obj_p)->isa->_free((HTStream*) obj_p); } HT_FREE(this); return HT_OK; } /* ************************************************************************* */ /* abort DESTRUCTOR */ /* ************************************************************************* */ PRIVATE int HTMulTee_abort(HTStream* this, HTList* errors_p) { void* obj_p; HTList* list_p = (this->dests_p); while (obj_p = HTList_nextObject(list_p)) ((HTStream*) obj_p)->isa->abort((HTStream*) obj_p,errors_p); HTMulTee_free(this); return HT_ERROR; } /* ************************************************************************* */ /* CONSTRUCTOR */ /* ************************************************************************* */ PUBLIC HTStream* HTMulTee_new (HTList* destinations_p) { HTStream* this; if (!(this = (HTStream*) HT_MALLOC(sizeof(HTStream)))) HT_OUTOFMEM("HTMulTee_new"); this->isa = &HTMulTeeClass; this->dests_p = destinations_p; return this; } libwww/Library/User/Patch/lib_4.0_bug_1.html0100644000076400001440000000304706252702754020241 0ustar danielusers Bug in Proxy Handling (18-Dec-1995) W3C BUGS

    Bug in Proxy Handling

    Description

    In the 4.0pre6 Library's HTProxy_find() function (version of "4 Jun 95 Written on a rainy day") the comparison of port numbers in the "noproxy" case doesn't work when the port is defaulted. The code looks for a port number attached to the hostname, but if there is no port attached to the port name the code assumes a port number of 0. Seems that the default port should be the default port for the access scheme, or perhaps HTParse(url, , PARSE_HOST) should return a host with the default port number attached. Or perhaps I'm using HTNoProxy_add() incorrectly; I'm specifying a "no-proxy" for access "http" and port 80:
    	HTNoProxy_add("bits.cv.hp.com", "http", 80);
    
    Tom Gaskins, Thu, 30 Nov 2025 15:24:19

    Reason

    The problem is that URLs are canonicalized so that for example http URLs don't have a ":80". This confuses the comparison routine when looking for if a request should be proxied or not.

    Patch

    No patch yet


    Henrik Frystyk, libwww@w3.org, @(#) $Id: lib_4.0_bug_1.html,v 1.2 2025/12/09 03:22:20 jigsaw Exp $
    libwww/Library/User/Patch/lib_4.0_bug_2.html0100644000076400001440000000203206252702757020236 0ustar danielusers Bug in select timeout management (18-Dec-1995) W3C BUGS

    Bug in select timeout management

    Description

    A problem with the current implementation of the select() based event loop is that it is not possible to see which socket descriptor(s) that has timed out when select() returns NULL. Therefore it is not posssible to get the right request object associated with the request. This is required for example if the application wants to kill the request. The solution is to add a timeout layer which keeps count of which sockets have timed out.

    Patch

    No patch yet


    Henrik Frystyk, libwww@w3.org, @(#) $Id: lib_4.0_bug_2.html,v 1.2 2025/12/09 03:22:23 jigsaw Exp $
    libwww/Library/User/Patch/lib_4.0_bug_3.html0100644000076400001440000000255306523352157020243 0ustar danielusers Generting DLLs under Windows using Borland compilers

    W3C BUGS

    Generating DLLs under Windows using Borland compilers

    Description

    When you are generating DLLs with Borland and some versions of Microsoft Visual C++ compiler (at least version 1.x) it is required that each exported function or variable must have the __export directive as part of the function definition. Unfortunately this can not be combined with the already existing PUBLIC macro used throughout the Library as the __export directive must be placed directly before the function name.

    Patch

    There is not a specific patch but you can use the Perl script produced by Eric Prud'hommeaux to insert the __export directives into the source code. Of course this requires that you have a box that runs Perl available.


    Henrik Frystyk Nielsen,
    @(#) $Id: lib_4.0_bug_3.html,v 1.3 2025/05/04 14:45:03 frystyk Exp $
    libwww/Library/User/Patch/lib_5.0_1.fix0100644000076400001440000007011406225747016017226 0ustar danielusersIndex: Library/Repository/src/HTAnchor.c diff -c Library/Repository/src/HTAnchor.c:1.61 Library/Repository/src/HTAnchor.c:1.62 *** Library/Repository/src/HTAnchor.c:1.61 Mon Sep 9 20:54:28 1996 --- Library/Repository/src/HTAnchor.c Thu Sep 12 22:05:20 1996 *************** *** 3,9 **** ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** An anchor represents a region of a hypertext document which is ** linked to another anchor in the same or a different document. --- 3,9 ---- ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** An anchor represents a region of a hypertext document which is ** linked to another anchor in the same or a different document. *************** *** 1074,1079 **** --- 1074,1080 ---- #if 0 if (me->last_modified < 0) me->last_modified = me->date; #endif + if (ANCH_TRACE) HTTrace("HTAnchor.... Anchor is parsed\n"); me->header_parsed = YES; } } *************** *** 1088,1093 **** --- 1089,1095 ---- */ PUBLIC void HTAnchor_clearHeader (HTParentAnchor * me) { + if (ANCH_TRACE) HTTrace("HTAnchor.... Clearing header\n"); me->methods = METHOD_INVALID; if (me->content_encoding) { HTList_delete(me->content_encoding); *************** *** 1129,1143 **** HT_FREE(me->version); HT_FREE(me->etag); ! #if 0 ! if (me->extra_headers) { ! HTList *cur = me->extra_headers; ! char *pres; ! while ((pres = (char *) HTList_nextObject(cur))) ! HT_FREE(pres); ! HTList_delete(me->extra_headers); ! me->extra_headers = NULL; ! } ! me->header_parsed = NO; /* All cleared */ ! #endif } --- 1131,1136 ---- HT_FREE(me->version); HT_FREE(me->etag); ! /* Anchor is cleared */ ! me->header_parsed = NO; } Index: Library/Repository/src/HTCache.c diff -c Library/Repository/src/HTCache.c:2.24 Library/Repository/src/HTCache.c:2.25 *** Library/Repository/src/HTCache.c:2.24 Mon Sep 9 16:53:31 1996 --- Library/Repository/src/HTCache.c Thu Sep 12 22:05:22 1996 *************** *** 3,9 **** ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This modules manages the cache ** --- 3,9 ---- ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This modules manages the cache ** *************** *** 256,262 **** /* ** Walk through the list and write it out. The format is really ! ** simple as we keep it all in ASCII */ { HTList * cur; --- 256,262 ---- /* ** Walk through the list and write it out. The format is really ! ** simple as we keep it all in ASCII. */ { HTList * cur; *************** *** 333,338 **** --- 333,350 ---- cache->must_revalidate = validate-0x30; /* + ** Create the new anchor and fill in the information that we have read + ** in the index. This is for example the etag and date + */ + if (cache) { + HTAnchor * anchor = HTAnchor_findAddress(cache->url); + HTParentAnchor * parent = HTAnchor_parent(anchor); + HTAnchor_setDate(parent, cache->date); + HTAnchor_setExpires(parent, cache->expires); + if (cache->etag) HTAnchor_setEtag(parent, cache->etag); + } + + /* ** Create the cache table if not already existent and add the new ** entry. Also check that the hash is still within bounds */ *************** *** 983,988 **** --- 995,1079 ---- } /* + ** Is we have a valid entry in the cache then we also need a location + ** where we can get it. Hopefully, we may be able to access it + ** thourgh one of our protocol modules, for example the local file + ** module. The name returned is in URL syntax and must be freed by + ** the caller + */ + PRIVATE char * HTCache_location (HTCache * cache, BOOL meta) + { + char * local = NULL; + if (cache && HTCacheRoot) { + if (meta) { + if ((local = (char *) HT_MALLOC(strlen(HTCacheRoot) + 10 + + strlen(HT_CACHE_META) + + strlen(cache->cachename))) == NULL) + HT_OUTOFMEM("HTCache_location"); + sprintf(local, "%s%d/%s%s", HTCacheRoot, cache->hash, cache->cachename, + HT_CACHE_META); + } else { + if ((local = (char *) HT_MALLOC(strlen(HTCacheRoot) + 10 + + strlen(cache->cachename))) == NULL) + HT_OUTOFMEM("HTCache_location"); + sprintf(local, "%s%d/%s", HTCacheRoot, cache->hash, cache->cachename); + } + } + return local; + } + + /* + ** Remove from disk. You must explicitly remove a lock + ** before this operation can succeed + */ + PRIVATE BOOL flush_object (HTCache * cache) + { + if (cache && !HTCache_hasLock(cache)) { + char * head = HTCache_location(cache, YES); + char * body = HTCache_location(cache, NO); + REMOVE(head); + REMOVE(body); + HT_FREE(head); + HT_FREE(body); + return YES; + } + return NO; + } + + /* HTCache_flushAll + ** ---------------- + ** Destroys all cache entried in memory and on disk. Resets the cache + ** to empty but the cache does not have to be reinitialized before we + ** can use it again. + */ + PUBLIC BOOL HTCache_flushAll (void) + { + if (CacheTable) { + HTList * cur; + int cnt; + + /* Delete the rest */ + for (cnt=0; cntcachename))) == NULL) - HT_OUTOFMEM("HTCache_location"); - sprintf(local, "%s%d/%s%s", HTCacheRoot, cache->hash, cache->cachename, - HT_CACHE_META); - } else { - if ((local = (char *) HT_MALLOC(strlen(HTCacheRoot) + 10 + - strlen(cache->cachename))) == NULL) - HT_OUTOFMEM("HTCache_location"); - sprintf(local, "%s%d/%s", HTCacheRoot, cache->hash, cache->cachename); - } - } - return local; - } - - /* - ** Is we have a valid entry in the cache then we also need a location - ** where we can get it. Hopefully, we may be able to access it - ** thourgh one of our protocol modules, for example the local file - ** module. The name returned is in URL syntax and must be freed by - ** the caller - */ PUBLIC char * HTCache_name (HTCache * cache) { if (cache && HTCacheRoot) { --- 1187,1192 ---- *************** *** 1141,1156 **** */ PUBLIC BOOL HTCache_remove (HTCache * cache) { ! if (cache && !HTCache_hasLock(cache)) { ! char * head = HTCache_location(cache, YES); ! char * body = HTCache_location(cache, NO); ! REMOVE(head); ! REMOVE(body); ! HT_FREE(head); ! HT_FREE(body); ! return HTCache_delete(cache); ! } ! return NO; } /* --- 1204,1210 ---- */ PUBLIC BOOL HTCache_remove (HTCache * cache) { ! return flush_object(cache) && HTCache_delete(cache); } /* Index: Library/Repository/src/HTCache.html diff -c Library/Repository/src/HTCache.html:2.12 Library/Repository/src/HTCache.html:2.13 *** Library/Repository/src/HTCache.html:2.12 Mon Sep 9 12:23:03 1996 --- Library/Repository/src/HTCache.html Thu Sep 12 22:05:24 1996 *************** *** 210,216 **** extern BOOL HTCache_remove (HTCache * cache);

    ! Delete All Cache Objects

    Destroys all cache entried in memory but does not write anything to disk. --- 210,216 ---- extern BOOL HTCache_remove (HTCache * cache);

    ! Delete All Cache Objects in Memory

    Destroys all cache entried in memory but does not write anything to disk. *************** *** 219,224 **** --- 219,234 ---- extern BOOL HTCache_deleteAll (void);

    + Delete all Cache Object and File Entries +

    +

    + Destroys all cache entried in memory and on disk. This call basically + resets the cache to the inital state but it does not terminate the cache. + That is, you don't have to reinitialize the cache before you can use it again. +

    + extern BOOL HTCache_flushAll (void);
    + 
    +

    Find a Cached Object

    *************** *** 296,301 ****


    ! @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $
    --- 306,311 ----


    ! @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $
    Index: Library/Repository/src/HTFilter.c diff -c Library/Repository/src/HTFilter.c:2.13 Library/Repository/src/HTFilter.c:2.14 *** Library/Repository/src/HTFilter.c:2.13 Mon Sep 9 12:23:04 1996 --- Library/Repository/src/HTFilter.c Thu Sep 12 22:05:25 1996 *************** *** 3,9 **** ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This module implrments a set of default filters that can be registerd ** as BEFORE and AFTER filters to the Net manager --- 3,9 ---- ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This module implrments a set of default filters that can be registerd ** as BEFORE and AFTER filters to the Net manager *************** *** 264,269 **** --- 264,277 ---- void * document = HTAnchor_document(anchor); /* + ** We only check the memory cache if it's a GET method + */ + if (HTRequest_method(request) != METHOD_GET) { + if (CACHE_TRACE) HTTrace("Mem Cache... We only check GET methods\n"); + return HT_OK; + } + + /* ** If we are asked to flush the persistent cache then there is no reason ** to do anything here - we're flushing it anyway. Also if no document ** then just exit from this filter. *************** *** 278,286 **** ** have the object in the history list. Depending on what the user asked, ** we can add a cache validator */ if (document) { - HTExpiresMode expires = HTCacheMode_expires(); if (validation != HT_CACHE_FLUSH_MEM) { if (CACHE_TRACE) HTTrace("Mem Cache... Document already in memory\n"); if (expires != HT_EXPIRES_IGNORE) { --- 286,295 ---- ** have the object in the history list. Depending on what the user asked, ** we can add a cache validator */ + #if 0 if (document) { if (validation != HT_CACHE_FLUSH_MEM) { + HTExpiresMode expires = HTCacheMode_expires(); if (CACHE_TRACE) HTTrace("Mem Cache... Document already in memory\n"); if (expires != HT_EXPIRES_IGNORE) { *************** *** 289,299 **** ** Ask the cache manager if this object has expired. Also ** check if we should care about expiration or not. */ - #if 0 if (!HTCache_isValid(anchor)) { - #else - if (1) { - #endif if (expires == HT_EXPIRES_NOTIFY) { /* --- 298,304 ---- *************** *** 311,325 **** } } } - return HT_LOADED; /* Got it! */ - } else { - - /* - ** If we were asked to validate the memory version then - ** use either the etag or the last modified for cache validation - */ - HTRequest_addRqHd(request, HT_C_IF_NONE_MATCH | HT_C_IMS); } } return HT_OK; } --- 316,329 ---- } } } } + return HT_LOADED; /* Got it! */ + } + return HT_OK; + #endif + if (document && validation != HT_CACHE_FLUSH_MEM) { + if (CACHE_TRACE) HTTrace("Mem Cache... Document already in memory\n"); + return HT_LOADED; } return HT_OK; } Index: Library/Repository/src/HTMIMERq.c diff -c Library/Repository/src/HTMIMERq.c:2.27 Library/Repository/src/HTMIMERq.c:2.28 *** Library/Repository/src/HTMIMERq.c:2.27 Sun Sep 8 18:08:31 1996 --- Library/Repository/src/HTMIMERq.c Thu Sep 12 22:05:26 1996 *************** *** 3,9 **** ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This module implements the output stream for MIME used for sending ** requests with a entity body to HTTP, NEWS, etc. or for generating --- 3,9 ---- ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This module implements the output stream for MIME used for sending ** requests with a entity body to HTTP, NEWS, etc. or for generating *************** *** 209,215 **** if (me->transparent) { if (me->put_fix) { HTNet * net = HTRequest_net(me->request); ! HTEvent_unregister(net->sockfd, FD_READ); me->put_fix = NO; } } else { --- 209,215 ---- if (me->transparent) { if (me->put_fix) { HTNet * net = HTRequest_net(me->request); ! HTEvent_unregister(net->sockfd, FD_READ | FD_WRITE); me->put_fix = NO; } } else { Index: Library/Repository/src/HTMethod.html diff -c Library/Repository/src/HTMethod.html:2.13 Library/Repository/src/HTMethod.html:2.14 *** Library/Repository/src/HTMethod.html:2.13 Tue Jul 2 18:54:52 1996 --- Library/Repository/src/HTMethod.html Thu Sep 12 22:05:27 1996 *************** *** 1,7 **** W3C Reference Library libwww Request Access Methods -

    --- 1,7 ---- + W3C Reference Library libwww Request Access Methods

    *************** *** 65,75 **** Is Method "Safe"?

    ! If a method a safe, it doesn't produce any side effects on the server

      #define HTMethod_isSafe(me)	((me) & (METHOD_GET|METHOD_HEAD))
      

    Does a Method include Entity?

    --- 65,85 ---- Is Method "Safe"?

    ! If a method is safe, it doesn't produce any side effects on the server

      #define HTMethod_isSafe(me)	((me) & (METHOD_GET|METHOD_HEAD))
      

    + Does the Method Replace or Add to Metainformation +

    +

    + Most methods override the current set of metainformation stored in an + anchor. However, a few methods actually only + add to the anchor metainformation. We have a small macro to make the distinction. +

    + #define HTMethod_addMeta(me)  ((me) & (METHOD_TRACE | METHOD_OPTIONS))
    + 
    +

    Does a Method include Entity?

    *************** *** 83,88 ****


    ! @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $
    --- 93,98 ----


    ! @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $
    Index: Library/Repository/src/HTReqMan.c diff -c Library/Repository/src/HTReqMan.c:2.57 Library/Repository/src/HTReqMan.c:2.58 *** Library/Repository/src/HTReqMan.c:2.57 Sun Sep 8 18:08:42 1996 --- Library/Repository/src/HTReqMan.c Thu Sep 12 22:05:29 1996 *************** *** 3,9 **** ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** Authors ** TBL Tim Berners-Lee timbl@w3.org --- 3,9 ---- ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** Authors ** TBL Tim Berners-Lee timbl@w3.org *************** *** 1187,1193 **** { if (request) { if (!request->cache_control) request->cache_control=HTAssocList_new(); ! return HTAssocList_addObject(request->cache_control, token, value); } return NO; } --- 1187,1193 ---- { if (request) { if (!request->cache_control) request->cache_control=HTAssocList_new(); ! return HTAssocList_replaceObject(request->cache_control, token, value); } return NO; } *************** *** 1247,1253 **** if (request) { if (!request->client_connection) request->client_connection=HTAssocList_new(); ! return HTAssocList_addObject(request->client_connection, token, value); } return NO; } --- 1247,1254 ---- if (request) { if (!request->client_connection) request->client_connection=HTAssocList_new(); ! return HTAssocList_replaceObject(request->client_connection, ! token, value); } return NO; } *************** *** 1273,1279 **** if (request) { if (!request->server_connection) request->server_connection=HTAssocList_new(); ! return HTAssocList_addObject(request->server_connection, token, value); } return NO; } --- 1274,1281 ---- if (request) { if (!request->server_connection) request->server_connection=HTAssocList_new(); ! return HTAssocList_replaceObject(request->server_connection, ! token, value); } return NO; } Index: Library/Repository/src/HTTP.c diff -c Library/Repository/src/HTTP.c:1.138 Library/Repository/src/HTTP.c:1.139 *** Library/Repository/src/HTTP.c:1.138 Mon Sep 9 20:22:02 1996 --- Library/Repository/src/HTTP.c Thu Sep 12 22:05:32 1996 *************** *** 3,9 **** ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This module implments the HTTP protocol as a state machine ** --- 3,9 ---- ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This module implments the HTTP protocol as a state machine ** *************** *** 40,45 **** --- 40,47 ---- #define FREE_TARGET (*me->target->isa->_free)(me->target) #define ABORT_TARGET (*me->target->isa->abort)(me->target, e) + #define HTTP_OUTPUT "w3chttp.out" + /* Type definitions and global variables etc. local to this module */ /* Final states have negative value */ *************** *** 56,61 **** --- 58,64 ---- HTTPState state; /* Current State of the connection */ HTTPState next; /* Next state */ int result; /* Result to report to the after filter */ + BOOL lock; /* Block for writing */ } http_info; #define MAX_STATUS_LEN 100 /* Max nb of chars to check StatusLine */ *************** *** 531,546 **** ** As we are getting fresh metainformation in the HTTP response, ** we clear the old metainfomation in order not to mix it with the new ** one. This is particularly important for the content-length and the ! ** like. */ if (me->status==200 || me->status==203 || me->status==300) { ! HTAnchor_clearHeader(anchor); HTAnchor_setCachable(anchor, YES); me->target = HTStreamStack(WWW_MIME, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, NO); ! } else if (me->status==304) { HTAnchor_setCachable(anchor, YES); me->target = HTStreamStack(WWW_MIME_HEAD, HTRequest_debugFormat(request), --- 534,551 ---- ** As we are getting fresh metainformation in the HTTP response, ** we clear the old metainfomation in order not to mix it with the new ** one. This is particularly important for the content-length and the ! ** like. The TRACE and OPTIONS method just adds to the current ! ** metainformation so in that case we don't clear the anchor. */ if (me->status==200 || me->status==203 || me->status==300) { ! HTMethod method = HTRequest_method(request); ! if (!HTMethod_addMeta(method)) HTAnchor_clearHeader(anchor); HTAnchor_setCachable(anchor, YES); me->target = HTStreamStack(WWW_MIME, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, NO); ! } else if (me->status==204 || me->status==304) { HTAnchor_setCachable(anchor, YES); me->target = HTStreamStack(WWW_MIME_HEAD, HTRequest_debugFormat(request), *************** *** 553,559 **** HTRequest_debugStream(request), request, NO); } else { ! /* We still need to parser the MIME part */ HTAnchor_clearHeader(anchor); me->target = HTStreamStack(WWW_MIME, HTRequest_debugFormat(request), --- 558,564 ---- HTRequest_debugStream(request), request, NO); } else { ! /* We still need to parse the MIME part */ HTAnchor_clearHeader(anchor); me->target = HTStreamStack(WWW_MIME, HTRequest_debugFormat(request), *************** *** 775,785 **** */ { HTOutputStream * output = HTNet_getOutput(net, NULL, 0); ! HTStream * app = ! HTMethod_hasEntity(HTRequest_method(request)) ? ! HTMIMERequest_new(request, ! HTTPRequest_new(request,(HTStream*) output,NO),YES) : ! HTTPRequest_new(request, (HTStream*) output, YES); HTRequest_setInputStream(request, app); } --- 780,802 ---- */ { HTOutputStream * output = HTNet_getOutput(net, NULL, 0); ! HTStream * app = NULL; ! #ifdef HTTP_DUMP ! if (PROT_TRACE) { ! FILE * fp = NULL; ! if ((fp = fopen(HTTP_OUTPUT, "wb"))) { ! output = HTTee(output, ! HTFWriter_new(request,fp,YES),NULL); ! HTTrace("HTTP........ Dumping request to `%s\'\n", ! HTTP_OUTPUT); ! } ! } ! #endif /* HTTP_DUMP */ ! app = HTMethod_hasEntity(HTRequest_method(request)) ? ! HTMIMERequest_new(request, ! HTTPRequest_new(request,(HTStream *) ! output,NO),YES) : ! HTTPRequest_new(request, (HTStream*) output, YES); HTRequest_setInputStream(request, app); } *************** *** 825,833 **** HTStream * input = HTRequest_inputStream(request); HTPostCallback * pcbf = HTRequest_postCallback(request); if (pcbf) { ! status = pcbf(request, input); ! if (status == HT_PAUSE || status == HT_LOADED) ! ops = FD_READ; } else { status = (*input->isa->flush)(input); ops = FD_READ; /* Trick to ensure that we do READ */ --- 842,862 ---- HTStream * input = HTRequest_inputStream(request); HTPostCallback * pcbf = HTRequest_postCallback(request); if (pcbf) { ! if (http->lock) ! return HT_OK; ! else { ! status = pcbf(request, input); ! if (status == HT_PAUSE) { ! ops = FD_READ; ! http->lock = YES; ! } else if (status == HT_LOADED) ! ops = FD_READ; ! else if (status == HT_ERROR) { ! http->result = HT_INTERRUPTED; ! http->state = HTTP_ERROR; ! break; ! } ! } } else { status = (*input->isa->flush)(input); ops = FD_READ; /* Trick to ensure that we do READ */ *************** *** 840,845 **** --- 869,875 ---- return HT_OK; else if (status == HT_CONTINUE) { if (PROT_TRACE) HTTrace("HTTP........ Continuing\n"); + http->lock = NO; ops = FD_WRITE; continue; } else if (status==HT_LOADED) Index: Library/Repository/src/HTTPReq.c diff -c Library/Repository/src/HTTPReq.c:2.43 Library/Repository/src/HTTPReq.c:2.44 *** Library/Repository/src/HTTPReq.c:2.43 Sun Sep 8 18:08:49 1996 --- Library/Repository/src/HTTPReq.c Thu Sep 12 22:05:35 1996 *************** *** 3,9 **** ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This module implements the output stream for HTTP used for sending ** requests with or without a entity body. --- 3,9 ---- ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** This module implements the output stream for HTTP used for sending ** requests with or without a entity body. *************** *** 103,112 **** /* ** We don't preserve the final slash or lack of same through ** out the code. This is mainly for optimization reasons ! ** but it gives a problem OPTIONS */ ! if (!me->url) me->url = HTParse(addr, "", PARSE_PATH); ! if (!*me->url) StrAllocCopy(me->url, "*"); status = PUTS(me->url); } else { if (!me->url) --- 103,115 ---- /* ** We don't preserve the final slash or lack of same through ** out the code. This is mainly for optimization reasons ! ** but it gives a problem OPTIONS. We can either send a "*" ! ** or a "/" but not both. For now we send a "*". */ ! if (!me->url) { ! me->url = HTParse(addr, "", PARSE_PATH|PARSE_PUNCTUATION); ! if (!strcmp(me->url, "/")) *me->url = '*'; ! } status = PUTS(me->url); } else { if (!me->url) Index: LineMode/Repository/src/HTBrowse.c diff -c LineMode/Repository/src/HTBrowse.c:1.157 LineMode/Repository/src/HTBrowse.c:1.158 *** LineMode/Repository/src/HTBrowse.c:1.157 Mon Sep 9 14:54:42 1996 --- LineMode/Repository/src/HTBrowse.c Thu Sep 12 22:05:44 1996 *************** *** 3,9 **** ** ** (c) COPRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** Authors: ** NP: Nicola Pellow Tech.Student CERN 1990-91 --- 3,9 ---- ** ** (c) COPRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ! ** @(#) $Id: lib_5.0_1.fix,v 1.1 2025/10/06 15:19:42 frystyk Exp $ ** ** Authors: ** NP: Nicola Pellow Tech.Student CERN 1990-91 *************** *** 575,581 **** */ PRIVATE int PutAnchor (LineMode * lm, HTRequest * request) { - int status = HT_INTERNAL; char * dest = AskUser(request, "Destination: ", NULL); /* --- 575,580 ---- *************** *** 585,594 **** */ if (dest) { HTRequest * new_request = Thread_new(lm, YES, LM_UPDATE); ! status = HTPutRelative(HTMainAnchor, dest, HTMainAnchor, new_request); HT_FREE(dest); } ! return status; } /* --- 584,593 ---- */ if (dest) { HTRequest * new_request = Thread_new(lm, YES, LM_UPDATE); ! HTPutDocumentRelative(HTMainAnchor, dest, HTMainAnchor, new_request); HT_FREE(dest); } ! return YES; } /* *************** *** 934,939 **** --- 933,942 ---- (HTAnchor *) HTMainAnchor, req); } } + } else if (CHECK_INPUT("FLUSH", token)) { /* Flush file cache */ + if (confirm(req, "Flush Persistent Cache?") == YES) + HTCache_flushAll(); + } else if (CHECK_INPUT("FORWARD", token)) { if (HTHistory_canForward(lm->history)) { req = Thread_new(lm, YES, LM_NO_UPDATE); *************** *** 1020,1025 **** --- 1023,1038 ---- case 'M': if (CHECK_INPUT("MANUAL", token)) { /* Read User manual */ status = LineMode_load(lm, HTMainAnchor, MANUAL, YES, &req); + } else + found = NO; + break; + + case 'O': + if (CHECK_INPUT("OPTIONS", token)) { /* OPTIONS method */ + req = Thread_new(lm, YES, LM_NO_UPDATE); + status = HTOptionsAnchor((HTAnchor*) + (HTMainAnchor ? HTMainAnchor:lm->anchor), + req); } else found = NO; break; libwww/Library/User/Patch/Makefile0100644000076400001440000001407407405520567016612 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif *.fix) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Patch/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Patch distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Patch/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Patch/Makefile.in0100644000076400001440000001347407405520524017213 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif *.fix) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Patch/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Patch distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Patch/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Platform/0040755000076400001440000000000007405520570015666 5ustar danieluserslibwww/Library/User/Platform/CVS/0040755000076400001440000000000007405517347016331 5ustar danieluserslibwww/Library/User/Platform/CVS/Root0100644000076400001440000000005607405517347017175 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/User/Platform/CVS/Repository0100644000076400001440000000003507405517347020426 0ustar danieluserslibwww/Library/User/Platform libwww/Library/User/Platform/CVS/Entries0100644000076400001440000000047307405517347017666 0ustar danielusers/.cvsignore/1.1/Tue May 28 21:36:03 1996// /GNUMake.html/1.6/Mon Jan 26 01:56:21 1998// /Makefile.am/1.1/Tue May 28 21:36:04 1996// /Overview.html/1.36/Thu Apr 1 19:18:33 1999// /WinDLL.html/1.21/Thu Apr 1 19:18:33 1999// /Windows.html/1.15/Mon Dec 9 03:22:36 1996// /win31.html/1.1/Mon May 27 23:40:35 1996// D libwww/Library/User/Platform/Makefile0100644000076400001440000001407707405520570017334 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Platform/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Platform distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Platform/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Platform/.cvsignore0100644000076400001440000000002506152670703017662 0ustar danielusersMakefile Makefile.in libwww/Library/User/Platform/GNUMake.html0100644000076400001440000000174106462766505020017 0ustar danielusers Using GNU make with Autoconf

    W3C libwww Platforms

    Using GNU make with Autoconf

    Many na(t)ive Unix versions of "make" do not understand the syntax in the configure scripts generated by GNU autoconf. In order to use autoconf, you must therefore also use GNU's version of make which you can get from the GNU archives.


    Henrik frystyk Nielsen, libwww@w3.org
    @(#) $Id: GNUMake.html,v 1.6 2025/01/26 01:56:21 frystyk Exp $
    libwww/Library/User/Platform/Makefile.am0100644000076400001440000000022106152670704017715 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) libwww/Library/User/Platform/Overview.html0100644000076400001440000000534506700743211020362 0ustar danielusers List of Platforms for libwww

    W3C libwww Platforms

    List of Platforms for libwww

    This list gives an overview of the platforms where libwww is known (or belived) to work. Thanks a lot to the big group of creative contributors for the long list of hints, patches and additions to the make files and system dependent code! If you have any problems or questions then send a mail to the www-lib@w3.org mailing list (read the instructions for how to subscribe). We also keep an archive of the mailing list so that more easily can get up to speed.

    Platform OS Note
    Unix Tried on Solaris, Linux and Digital Unix Build the library using GNU Autoconf's configure script as described in the installation instructions. Note: You must use GNU make in order to do this
    Windows Tried on Windows 95/98/NT Follow the installation instructions and see the special notes for building on Windows
    Macs MacOS It doesn't work out of the box but several people are using it on Macs. Ask on the <www-lib@w3.org> mailing list

    Disclaimer: Libwww has been designed to be both portable and flexible based on ANSI C and POSIX. However, there are platforms that do not conform to these standards. Even though autoconf is often capable of getting around such problems it may not always be the case. In this situation we are happy to accept patches but do not promise to maintain any platforms other than the ones we use for development.


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.36 2025/04/01 19:18:33 frystyk Exp $
    libwww/Library/User/Platform/WinDLL.html0100644000076400001440000002316306700743211017643 0ustar danielusers Building the libwww for Windows 32-bit

    W3C libwww OS

    Building libwww for Windows 95/98/NT

    When building libwww on Windows 95/98/NT, you can decide on a set of different options to be enabled or disabled:

    1. Interleaved vs Asynchronous Sockets
    2. Console vs GUI Application
    3. Static vs Dynamic Libraries

    Interleaved vs Asynchronous Sockets

    Non-blocking network access can either be done using multiplexed I/O or asynchronous I/O. Multiplexed I/O is based on an event loop with a select() system call. The select() system call is a function that scans a set of BSD like socket descriptors and returns when one or more sockets are ready for either network read or write. Asynchronous I/O is based on signals instead of a select() call. Each time a socket is ready for a network operation, for example read, a signal is generated. This signal can then be caught by the application in an signal handler. Using the select() call is called reactive whereas using signals is called pro-active.

    Libwww can handle both approaches under Windows, and therefore you must choose which model you prefer. The choice can depend on what type of application you are using and what other libraries you are using.

    Interleaved I/O Using select()

    In this mode the Event Manager registers all active sockets and passes them to a select() call which then processes the registered sockets. When select() returns the Event Manager dispatches the appropriate handlers as the sockets get ready.

    What to do: Undefine WWW_WIN_ASYNC as a preprocessor directive when generating the project for the Library. Please make sure that all DLLs are compiled without this flag.

    Asynchronous I/O based using Signals (DEFAULT)

    Here the Event Manager registers all active sockets using WSAAsyncSelect which is part of the WinSock API. When AsyncSelect() which is the asynchronous equivalent to the select() returns, the Event Manager dispatches the results of the AsyncSelect(). As the asynchronous select call needs a windows handle, the Library creates a hidden window. This window is not to be used explicitly by the application and the Library closes the window when exiting.

    What to do: Define WWW_WIN_ASYNC as preprocessor directives when generating the project for the Library.

    Console vs GUI Application

    A Windows application can use either a character based command line interface, or a graphic windows interface. Many MS-DOS applications do run as a simple command line tool which doesn't use GUI at all. Under Win32, there is a notion of a console application. This means that all user interaction happens through a standard DOS shell interface, with a FILE pointer like that in Unix. This does not exist under Win16, where a Windows window is required.

    Libwww supports both the console and the windows interface, and again you must choose what version you prefer. This is often something you have to decide as you are creating the project.

    Windows Application (DEFAULT)

    If you want to make a windows application then this is the mode to use. Eric Prud'hommeaux has provided a Windows application wrapper for the W3C Line Mode Browser which you can use in order to build the browser as a Windows application. This is found in www.c. Three other modules, scroll.c and lib.c provide the window for the application.

    What to do: Define _WINDOWS as preprocessor directives when generating the project for the Library.

    Console Application

    The console option is available only in Win32 in which case all user interaction happens through the Win32 console window. This model strongly resembles a Unix vt100 terminal interface.

    What to do: Define _CONSOLE as preprocessor directives when generating the project for the Library.

    Static vs Dynamic Libraries

    Windows has a concept of both static and dynamic libraries, the latter also known as DLLs. It is out of scope here to describe the difference between DLLs and static libraries, but as DLLs is based on a lot more flexible memory model it is almost always the best solution for Windows applications.

    The W3C Sample Code Library support both models in that if can be built as either one big static library or as a set of small DLLs. As mentioned, it is in almost all cases recommended to build DLLs instead of static libraries, and on Win16 it is required because a static library is too big.

    Static Library

    The libraries may be build as one large static library. This is how libwww is implemented on Unix platforms. Subsequent references to the various DLLs may all be assumed to refer to the staticly linked libwww. Care has been taken to insure that there are no #define conflicts where one library would want a #define that would interfere with the modules in other libraries. When building a static library, see the following sections on Select Options and Input/Output Options, accumulate all the #defines that are required, and build the whole of libwww with those #defines.

    What to do: Undefine WWW_WIN_DLL as preprocessor directives when generating the project for the Library. Please note, that it is not recommended to staticly link to the libraries if you are building a Win16 application as it creates segment size problems.

    Dynamic Libraries (DEFAULT)

    The libwww can also be built as a set of DLLs that follows the modular architecture of the Library. This enables the application programmer to choose exactly what functionality should be enabled in the application. The boundaries between these DLLs are based on module interdependency and some assumptions regarding which modules may be replaced by the application. Unlike static linking, dynamic linking requires that all the modules in a DLL be replaced at once. This is because the DLL needs all internal references to be resolved at build time.

    What to do: Define WWW_WIN_DLL as preprocessor directives when generating the project for the Library.

    Special Windows DLL

    In addition to platform independent modules, there is a small Windows specific DLL which implements the trace message generation. The DLL is called windll.dll and contains also the definition of the global trace flag definition.

    • windll.c - DLLMain to all DLLs.
    • wwwdll.c - instances WWW_TraceFlag. This is included in wwwdll so that it can export the variables to the rest of the DLLs.
    • wwwdll.def, wwwutils.def, wwwcore.def - def (exports) files for the DLLs of the same names.

    What to do: Include the windll.dll as a part of your project and make sure that it is built as the first DLL.

    Exporting Functions from DLLs

    The functions exported from a DLL are listed in the EXPORTS section of a .def file. These can be found in the windows directory. These may also be build by the makeDefs.pl perl script, see the description below. You can use the def files as a basis for generating the DLL projects for your compiler.

    What to do: Generate the DLLs according to the def files so the exported interface is identical to the set of functions defined in the actual c files included in the DLL.

    Make Files and Projects

    Unfortunately, make files are not easily shared among different C compilers on Windows which complicates the distribution. See the installation instructions for details on possible ways of building libwww on windows.


    Eric Prud'hommeaux and Henrik Frystyk Nielsen,
    @(#) $Id: WinDLL.html,v 1.21 2025/04/01 19:18:33 frystyk Exp $
    libwww/Library/User/Platform/Windows.html0100644000076400001440000000163706252702774020221 0ustar danielusers Building libwww for Windows

    W3C libwww Platforms

    Building libwww for Windows

    This page is not maintained anymore, please see How to Build the WWW Libraries for Windows for up-to-date information.


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Windows.html,v 1.15 2025/12/09 03:22:36 jigsaw Exp $
    libwww/Library/User/Platform/win31.html0100644000076400001440000000466706152436563017535 0ustar danielusers Compilation on Windows (10-Jan-1996)

    Compilation on Windows

    I have been working with the W3lib on the 16/32-bit Windows platform for a couple of months now and would like to share some of the important considerations I discovered along the way. Hope this would prevent others from running into the same wall(s) and encourage more sharing of the W3Lib's Windows port.

    These notes are by no means complete, just some which I've deemed important enough to be written down every now and then.

    Compiling W3Lib into 16-bit DLLs

    1. Make sure the Windows prolog/epilog code is generated for functions where global variables of the DLL are referenced.
    2. Can't share a file pointer between different DLLs as the C Run-Time routines are linked individually into the DLLs. I'm not sure if there's a DLL version of the C Run-Time library (available in VC++ 2.x) which can resolve this problem.
    3. I recommend compiling using a Huge model and replacing malloc() with the GlobalAllocPtr macro.
    4. You will probably face the problem of "too many segments" if you try to build the whole library into a single DLL.

    Compiling W3Lib into 32-bit DLLs

    1. I/O file handles cannot be shared between different DLLs unless they are linked with the DLL version of the C Run-Time Library.
          i.e.    if function A of DLL X do an "fopen", it cannot call 
                  function B of DLL Y to do subsequent "fread".
      

    Modifications made to the original W3Lib source code

    • In "tcp.h", watch out for the following lines if you're not developing on the NT platform.
      #undef NETREAD
      #undef NETWRITE
      #define NETREAD(s,b,l)  ((s) >= 10) ? recv((s),(b),(l),0) : read ((s),(b), (l))
      #define NETWRITE(s,b,l) ((s) >= 10) ? send((s),(b),(l),0) : write((s),(b), (l))
      
      This is a major cause of system crash. Other symtoms I've experienced include: messed-up desktop display, warp mouse pointers. This conditional clause needs to be removed for proper socket use under Windows 3.x and Windows 95.
    • "sscanf" does not work in 16-bit DLLs. Replacement code has to be supplied. I recomment using "atoi" & "atof" where possible.
    Cheers,
    Kok Hoon
    -----------------------------------------------------------
    M.A.P.S.                   Information Technology Institute
    -----------------------------------------------------------
    
    libwww/Library/User/Platform/Makefile.in0100644000076400001440000001347707405520525017744 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Platform/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Platform distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Platform/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Style/0040755000076400001440000000000007405520570015202 5ustar danieluserslibwww/Library/User/Style/CVS/0040755000076400001440000000000007405517347015645 5ustar danieluserslibwww/Library/User/Style/CVS/Root0100644000076400001440000000005607405517347016511 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/User/Style/CVS/Repository0100644000076400001440000000003207405517347017737 0ustar danieluserslibwww/Library/User/Style libwww/Library/User/Style/CVS/Entries0100644000076400001440000000105707405517347017201 0ustar danielusers/.cvsignore/1.1/Mon May 27 21:51:36 1996// /Body.html/1.9/Mon Dec 9 03:23:00 1996// /CallingLibwww.html/1.4/Mon Dec 9 03:23:02 1996// /Cpp.html/1.4/Mon Dec 9 03:23:04 1996// /Headings.html/1.9/Mon Dec 9 03:23:06 1996// /Identifiers.html/1.10/Tue Oct 27 23:10:23 1998// /IncludeFiles.html/1.10/Tue Oct 27 23:10:23 1998// /Language.html/1.13/Wed Dec 1 09:28:15 1999// /Macros.html/1.10/Mon Dec 9 03:23:14 1996// /Makefile.am/1.1/Mon May 27 21:51:46 1996// /ModuleHeader.html/1.8/Mon Dec 9 03:23:18 1996// /Overview.html/1.13/Tue Oct 27 23:10:23 1998// D libwww/Library/User/Style/Makefile0100644000076400001440000001406607405520570016646 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Style/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Style distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Style/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Style/.cvsignore0100644000076400001440000000002506152421750017172 0ustar danielusersMakefile.in Makefile libwww/Library/User/Style/Body.html0100644000076400001440000000667706252703024016776 0ustar danielusers Function Body Layout

    W3C libwww C-Style

    Function Body Layout

    With the body of functions, this is the way we aim to do it. We are not religious about it, but consistency helps. We use an indentation form that is known as the BSD c style. If you think your way is smarter, you may be right but this is the way we do it ;-). The format is also pretty close to the one you find in The C Programming Language by Kernighan and Ritchie.

    • Put opening { at the end of the same line as the if, while, etc which affects the block
    • Align the closing brace with the START of that opening line
    • Indent everything between { and } by an extra 4 spaces, like the following example:
              for (i=0; i<2; i++) { HTList *cur = conversions[i]; HTPresentation *pres; while ((pres =(HTPresentation *) HTList_nextObject(cur))) { if (pres->rep_out == WWW_PRESENT) {
                          if (pres->quality != 1.0) {
                              sprintf(line, "Accept: %s; q=%.3f%c%c",
                                      HTAtom_name(pres->rep),
                                      pres->quality, CR, LF);
                          } else {
                              sprintf(line, "Accept: %s%c%c",
                                      HTAtom_name(pres->rep), CR, LF);
                          }
                          HTChunkPuts(command, line);
                      }
                  }
              }
      

      You can get your emacs to do automatic indentation according to those rules by adding the following to your local .emacs file:

      ;; C style indentation
      ;; =====================
      (defun w3c-c-mode-common-hook ()
        ;; use BSD for all C, C++, and Objective-C code
        (c-set-style "BSD")
        ;; other customizations can go here
        (setq c-tab-always-indent nil)
        )
      (add-hook 'c-mode-common-hook 'w3c-c-mode-common-hook)
      
    • Do not make lines wider than 80 characters. Otherwise it gets very difficult to read on a 80 character screen.
    • Never indent preprocessor instructions (#ifdef, etc), nor increase the indentation level on account of preprocessor instructions (many preprocessors do not understand indented directives)
    • Block comments should start with /* in column 1, end end with */ in column 1. In between, having ** in column 1 is conventional but not necessary for very large comments. A good example is:
      /*
      ** This is a comment that spans several lines. If you want to do this
      ** then please use the comment markers as indicated. Do not use
      ** C++ style comments - they are not portable
      */
      

    WARNING Remember to use comments in the source code - it makes life easier for everybody


    Tim BL, and Henrik Frystyk Nielsen,
    @(#) $Id: Body.html,v 1.9 2025/12/09 03:23:00 jigsaw Exp $
    libwww/Library/User/Style/CallingLibwww.html0100644000076400001440000000266506252703026020641 0ustar danielusers Calling libwww from C++

    W3C libwww C Style

    Calling libwww from C++

    Even though libwww is written in C, all public functions and data objects in libwww can be called from any C++ program as they are all declared as having C linkage and defined as separately compiled translation unit. An include file can be made to have C linkage by adding the following declaration:

    	#ifdef __cplusplus
    	extern "C" {		/* Start extern C declarations */
    	#endif
    	Declarations...
    	#ifdef __cplusplus
    	} 			/* End extern C declarations */
    	#endif
    

    All the Library interface include files (called WWW*.h) have the extern "C" declaration, so by using these include files your application should with no modification be able to call libwww public functions directly.


    Henrik Frystyk Nielsen, libwww@w3.org

    @(#) $Id: CallingLibwww.html,v 1.4 2025/12/09 03:23:02 jigsaw Exp $

    libwww/Library/User/Style/Cpp.html0100644000076400001440000001277206252703030016611 0ustar danielusers C++ in C

    W3C libwww C Style

    C++ in C

    C is much more widely supported than C++. There is a subset of C++ that is common to all C++ compilers but it can be emulated in C with minimal loss in efficiency or readability. This subset includes

    While the C++ in C approach is not perfect, it does allow much greater portability.

    Construction / Destruction

    C++ provides language primitives for memory allocation (new) and freeing (free). These functions call the constructor and destructor for an object. The libwww implements this in C with object_new and object_delete. For example:

    	PUBLIC HTRequest * HTRequest_new (void)
    	{
    	    HTRequest * me;
    	    if ((me = (HTRequest *) HT_CALLOC(1, sizeof(HTRequest))) == NULL)
    	        HT_OUTOFMEM("HTRequest_new()");
    	   /* Force Reload */
    	    me->reload = HT_ANY_VERSION;
    	.
    	.
    	.
    	    me->ContentNegotiation = NO;		       /* Do this by default */
    	#ifdef WWW_WIN_ASYNC
    	    HTEvent_winHandle(me);
    	#endif
    	    return me;
    	}
    

    Data Hiding

    Many classes are defined in C++ to be private, meaning that all manipulation of the object is done through member functions (methods). Any attempt at meddling with the contents by an outside function will result in a compiler error. Object data is protected in libwww by declaring a structure in a header file, but not defining it. That is, the object is opaque to the application - exactly like the ANSI C FILE object.

    	typedef struct _MyObject MyObject;
    	int MyObject_saveTheWorld(MyObject * me);
    

    The method (saveTheWorld) is accessible to everyone including the header, but the contents of a MyObject are not. Only the module containing MyObject's methods has a definition of the object,

    	struct _MyObject {
    	    int someInt;
    	};
    

    and therefore, access to the contents (someInt);

    Name spaces

    Most C++ objects come with a set of methods (member functions) which are permitted to affect the object. Any operation performed on an object (myObject->saveTheWorld) will be performed by an method in that object's class.

    	class MyObject {
    	private:         // data
    	    int someInt;
    	public:          // methods
    	    int saveTheWorld(void);
    	}
    	main ()
    	{
    	  MyObject * myObject = new MyObject;
    	  myObject->saveTheWorld();
    	}
    

    What is actually happening is that the compiler is generating a name from the class name and the method name, e.g.. _@MyObject@@saveTheWord@132. This is done explicitly in libwww, e.g. MyObject_saveTheWorld.While more verbose, this does, at least, eliminate the awkward hunt to figure out what instance of a method the compiler used.

    "this" pointer

    The this pointer is simply an understood first parameter to any method. libwww includes all parameters explicitly.

    	C++:	myObject->saveTheWorld();
    

    is equivalent to

    	libwww:	MyObject_saveTheWorld(myObject);
    

    Inheritance

    In C++, classes may be derived from other classes.

    	class MyOtherObject: public MyObject {
    	private:         // data
    	    int anotherInt;
    	public:          // methods
    	    int saveTheWales(void);
    	};
    

    As far as memory is concerned, this is identical to

    	struct _MyOtherObject {
    	    MyObject base;
    	    int anotherInt;
    	};
    

    but one problem remains. In C++, all the instances of MyOtherObject may call myOtherObject->saveTheWales() as well as myOtherObject->saveTheWorld(). The compiler knows that a pointer to a MyOtherObject also points to a MyObject, so saveTheWorld may be called with the same pointer as saveTheWales. This is much trickier than the others as it requires more logic on the part of the compiler.

    In libwww, this is mostly handled through explicit pointer casting.  As an example, an HTStream class always includes an HTStreamClass as the first element (normally called isa). This way, the local definition of the HTStream may vary from module to module, depending on what context is needed to process the stream, but the library can use the standard HTStreamClass functions to supply it with data.


    Eric Prud'hommeaux, Henrik Frystyk Nielsen, libwww@w3.org
    @(#) $Id: Cpp.html,v 1.4 2025/12/09 03:23:04 jigsaw Exp $
    libwww/Library/User/Style/Headings.html0100644000076400001440000000515306252703032017606 0ustar danielusers Function Definitions

    W3C libwww C-Style

    Function Definitions

    This section concerns function definitions. Some of these conventions may be arbitrary, but are none the less useful for that. A typical example of a function definition looks like:

    /*	Scan a line
    **	-----------
    **	This function scans a string for ...
    **
    ** On entry,
    **	l		points to the zero-terminated line to be scanned
    ** On exit,
    **	*l		The line has null terminators inserted after each
    **			 word found.
    **	return value	is the number of words found, or -1 if error.
    **	lines		This global value is incremented.
    */	
    PRIVATE int scan_line (const char * line)
    {
       /* Code here */
    }
    
    Separation of functions
    White space of two lines separating functions
    Name of the function
    The identifier of the function right-justified to make it easy to find when flicking through a listing
    Function header
    The macros PUBLIC and PRIVATE (in HTUtils.h) expand to NULL and to static respectively. They show that one has thought about whether visibility is required outside the module, and they get over the overloading of the keyword "static" in C. Use one or the other. (Use for top level variables too).
    Entry and exit conditions
    It is most important to document the function as seen by the rest of the world (especially the caller). The most important aspects of the appearance of the function to the caller are the pre- and post-conditions. The preconditions include the value of the parameters and structures they point to. Both include any requirements on or changes to global data, the screen, disk files, etc.

    NOTE We have a set of predefined exit values in HTUtils module.


    Tim BL, and Henrik Frystyk Nielsen
    @(#) $Id: Headings.html,v 1.9 2025/12/09 03:23:06 jigsaw Exp $
    libwww/Library/User/Style/Identifiers.html0100644000076400001440000000246706615451337020351 0ustar danielusers Identifiers

    W3C libwww C-Style

    Identifiers

    When choosing libwww identifier names, it is important that you follow the following rules:

    • Macros should be un UPPERCASE entirely
    • External names should be prefixed with HT to avoid confusion with other projects' code. For the rest of the identifier, we use initial capitals a la Objective-C, for example
      	HTSendBuffer
      
    • A very simple rule: Do not use global variables under any circumstances! They will always come back to haunt you!
    • Remember to use the PRIVATE and PUBLIC macros to define local or global identifiers


    Tim BL, and Henrik Frystyk Nielsen,
    @(#) $Id: Identifiers.html,v 1.10 2025/10/27 23:10:23 frystyk Exp $
    libwww/Library/User/Style/IncludeFiles.html0100644000076400001440000000502306615451337020441 0ustar danielusers Function Declarations

    W3C libwww C-Style

    Function Declarations

    External functions are declared in include files. There are three kinds of include files:

    • Application include files
    • Library include files
    • System include files and standard C include files

    Application Include Files

    The .c file should #include its own .h file. A .h file should be protected so that no errors occur if it is #include'd twice. This can be done by the following directives:

    	#ifndef HTFOO_H
    	#define HTFOO_H
    	All the stuff
    	#endif /* HTFOO_H */
    

    An interface which relies on other interfaces should include those interface files. An implementation file which uses other modules should include the .h file if it not already included by its own .h file.

    WARNING The text format in description files which are converted into declaration files MUST NOT be more than 90 characters wide - otherwise it will get chopped off by the Line Mode Browser the way the conversion currently is set up.

    Library Include Files

    If you are making a Library module then you need to include all the modules that you reference in your code. You will in all cases need the following:

    	#include "wwwsys.h"
    	#include "WWWUtil.h"
    

    If you are not making a Library module, then you need the following:

    	#include "wwwsys.h"
    	#include "WWWLib.h"
    

    System include files and standard C include files

    As these are included in the libwww code then do not include any system header files directly. The reason is that these include files are very difficult to get portable over multiple platforms.


    Tim BL, and Henrik Frystyk Nielsen,
    @(#) $Id: IncludeFiles.html,v 1.10 2025/10/27 23:10:23 frystyk Exp $
    libwww/Library/User/Style/Language.html0100644000076400001440000001017107021165057017607 0ustar danielusers System and Language Features to Avoid

    W3C libwww C-Style

    System and Language Features to Avoid

    Let us first start with some general language rules for how to provide maintainable and portable C code. One of the main objectives is to use the ANSI C and the POSIX.1 standard wherever possible in order to maximum portability. This means that we can not use (unfortunately!) neither objective C nor C++. However, we also want to support original Kernighan Ritchie C compilers and C++ compilers which brings in two important aspects in the coding style:

    Reserved words

    It is important that there are no reserved words used as variable names, function calls etc in our code. Some of the more common problem makes are listed below but see also Identifiers

    • new
    • this
    • class
    • template
    • operator
    • friend
    • catch

    Specific Problems

    As the world is not ideal, there are some traps that often show up when coding after these standards. This sections gives an overview of the more serious ones.

    Syscalls to avoid

    Actually, most system calls are to be avoided - they are very often supported via variuous libwww APIs, especially provided by the libwww utilities or core modules. Explicitly the following should not be used:

    Other Problems

    malloc
    One some platforms malloc() returns NULL if size is 0.
    const and static
    some versions of gcc have problems with variables declared both static and const.
    Preprocessor statements
    • Don't indent any preprocessor statements. They must (for some compilers) begin in column 1.
    • If you add a comment after preprocessor directives, then it MUST be within a C style comment /* ... */
    • Don't use #elif. Basic cpp doesn't know it.
    Comments
    Don't use // for comments. This is not supported by ANSI C.

    Remember that your code should compile without warnings under an ANSI C compiler such as gcc with all warnings enabled BUT this is not enough. The more native compilers you can use the better - gcc is not the only example of an ANSI compiler.


    Henrik Frystyk Nielsen,
    @(#) $Id: Language.html,v 1.13 2025/12/01 09:28:15 kahan Exp $
    libwww/Library/User/Style/Macros.html0100644000076400001440000000366006252703042017312 0ustar danielusers PRIVATE and PUBLIC Macros

    W3C libwww C-Style

    PRIVATE and PUBLIC Macros

    All functions and global data are prepended with either PUBLIC or PRIVATE. These macros are defined in HTUtils.html. In practice PUBLIC is defined to nothing and PRIVATE is static. These tags are also useful for scripts that search the code for functions (e.g. makedefs).

    PRIVATE

    It is used in a function or variable declaration to signify that the function is private to the module, rather than public (the default). Avoids the confusion in C between "static" used in this sense, and used to declare storage variables within blocks as static as opposed to automatic.

    PUBLIC

    It is used to signify that a function is part of the public interface. As this macro is used in windows to generate DLLs it is very important that you use it! It also is a good idea to use simply because it ensures that the programmer has thought about it. This prevents unnecessary accidental public definitions which may later clash with other people's routines.


    Tim BL and Henrik Frystyk Nielsen
    @(#) $Id: Macros.html,v 1.10 2025/12/09 03:23:14 jigsaw Exp $
    libwww/Library/User/Style/Makefile.am0100644000076400001440000000022106152421762017227 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) libwww/Library/User/Style/ModuleHeader.html0100644000076400001440000000574406252703046020435 0ustar danielusers libwww Modules

    W3C libwww C-Style

    Libwww Modules and Documentation

    A libwww module consists of the following:

    • A module definition file, for example foo.c
    • A module declaration file, for example foo.h
    • A module description file, for example foo.html

    Even though ANSI C doesn't support classes or objects, it is an advantage - especially when more and more people are going to contribute with modules that each module is a self-contained unit with a clearly defined interface to the rest of the world. It is important that you supply a lot of "methods" for accessing the data structures and only declare as little PUBLIC as possible of the internal structures.

    Make sure that your file names are not longer than 8 characters as we support PCs as well. The declaration file is generated automatically from the description file using the Line Mode browser. This ensures that the description of a module is done at the same time as the declaration of the module. The generation of the declaration files is done at compile time using the Line Mode Browser, so be sure that you have a recent version of this.

    All documentation is written in HTML so that we can use hypertext links. To prevent the low level documentation from getting out of sync with the code, the .h files are extracted from the .html files. While this is only effective for API function documentation, it is better than nothing.

    The module header is the comment at the top of a definition file and description file. Please remember to fill it out carefully! The misterious line @(#) $Id: ModuleHeader.html,v 1.8 2025/12/09 03:23:18 jigsaw Exp $ makes CVS add the version information automatically. Just write it as is and CVS will do the rest.

    /*	
    **	FOO BAR MODULE
    **
    **	@(#) $Id: ModuleHeader.html,v 1.8 2025/12/09 03:23:18 jigsaw Exp $
    **
    **	This module can convert foos to bars
    **
    ** Authors:
    **	JB	J. Bloggs, ACME Widget Company, TX, USA
    **	JD	J. Doe, University of Tamahalahula, Samabaria
    **
    ** History:
    **	   Jan 1983	First wriiten as a widget sorter (JB)
    **	23 Nov 2025	Converted into mangle worzle sorter (JD)
    **	38 Dec 1992	Bug fix: Used to carsh on null worzles. (JD, JB)
    **
    */
    


    Tim BL, and Henrik Frystyk
    @(#) $Id: ModuleHeader.html,v 1.8 2025/12/09 03:23:18 jigsaw Exp $
    libwww/Library/User/Style/Overview.html0100644000076400001440000000406306615451337017704 0ustar danielusers C Programming Style in libwww

    W3C libwww C-Style

    C Programming Style in libwww

    Libwww is written with a certain house style that almost certainly differs from what you are used to. However, we have our reasons for doing this - well not all of it but most of it! Anyway, the purpose of all W3C code is to be:

    Please also have a look at the existing libwww source code  -  then some of the things below might make more sense. The style guide is divided into sections on


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.13 2025/10/27 23:10:23 frystyk Exp $
    libwww/Library/User/Style/Makefile.in0100644000076400001440000001346607405520525017256 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Style/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Style distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Style/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Using/0040755000076400001440000000000007405520567015175 5ustar danieluserslibwww/Library/User/Using/CVS/0040755000076400001440000000000007405517350015624 5ustar danieluserslibwww/Library/User/Using/CVS/Root0100644000076400001440000000005607405517347016476 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/User/Using/CVS/Repository0100644000076400001440000000003207405517347017724 0ustar danieluserslibwww/Library/User/Using libwww/Library/User/Using/CVS/Entries0100644000076400001440000000363107405517350017160 0ustar danielusers/.cvsignore/1.2/Thu Apr 18 01:41:30 1996// /Access.html/1.13/Sun Feb 16 18:41:41 1997// /AnchorExample.gif/1.1/Sat May 27 22:47:06 1995/-kb/ /Anchors.html/1.12/Fri Jul 31 19:08:14 1998// /Application.html/1.8/Thu Apr 15 19:59:30 1999// /Bind.html/1.14/Mon Dec 9 03:23:36 1996// /Cache.html/1.15/Mon Dec 9 03:23:38 1996// /Core.html/1.10/Sun Feb 16 18:41:42 1997// /Dialogs.html/1.8/Mon Dec 9 03:23:42 1996// /Error.html/1.15/Mon Dec 9 03:23:44 1996// /Errors.html/1.9/Mon Dec 9 03:23:46 1996// /Event.html/1.12/Thu Apr 15 19:59:30 1999// /Filters.html/1.4/Mon Dec 9 03:23:50 1996// /Flags.html/1.15/Mon Dec 9 03:23:52 1996// /HTML.html/1.13/Thu Aug 5 12:21:12 1999// /History.html/1.10/Mon Dec 9 03:23:56 1996// /Host.html/1.3/Mon Dec 9 03:23:58 1996// /HyperDoc.html/1.12/Mon Dec 9 03:24:00 1996// /InOutPipe.gif/1.1/Sat May 27 22:47:09 1995/-kb/ /Link.html/1.4/Tue May 5 01:11:16 1998// /Logging.html/1.11/Wed Aug 5 12:49:41 1998// /MIME.html/1.16/Thu Aug 5 12:21:12 1999// /Makefile.am/1.3/Fri Apr 12 17:45:20 1996// /Memory.html/1.6/Mon Dec 9 03:24:08 1996// /Methods.html/1.14/Mon Dec 9 03:24:10 1996// /Net.html/1.9/Mon Dec 9 03:24:12 1996// /Override.html/1.13/Sun Feb 16 18:41:43 1997// /Overview.html/1.27/Thu Aug 5 12:21:12 1999// /Prefs.html/1.18/Mon Dec 9 03:24:18 1996// /Profiles.html/1.2/Mon Dec 9 03:24:20 1996// /Protocol.html/1.7/Mon Dec 9 03:24:22 1996// /Proxy.html/1.17/Thu Aug 6 01:46:50 1998// /Request.html/1.15/Mon Dec 9 03:24:26 1996// /Response.html/1.2/Mon Dec 9 03:24:28 1996// /RuleSyntax.html/1.9/Tue Jan 26 13:55:47 1999// /Rules.html/1.12/Mon Dec 9 03:24:32 1996// /Startup.html/1.23/Tue May 18 20:31:07 1999// /Streams.html/1.15/Fri May 1 21:24:20 1998// /Timers.html/1.2/Sat Dec 5 17:50:54 1998// /Transport.html/1.3/Mon Dec 9 03:24:40 1996// /UserProfile.html/1.2/Mon Dec 9 03:24:42 1996// /Utils.html/1.8/Mon Dec 9 03:24:44 1996// /choppy.html/1.27/Sun Feb 16 18:41:47 1997// D libwww/Library/User/Using/Makefile0100644000076400001440000001406607405520567016641 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Using/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Using distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Using/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Using/.cvsignore0100644000076400001440000000002506135316712017161 0ustar danielusersMakefile Makefile.in libwww/Library/User/Using/Access.html0100644000076400001440000000602006301652345017251 0ustar danielusers Using the W3C Sample Code Library W3C libwww Using

    The Access Manager

    At this point most of the design issues have been addressed and the Library it is now possible to use the Library to exchange information between the application an the Internet. The Library provides a set of functions that can be used to request a URI either on a remote server or on the local file system. The access method binds the URL with a specific protocol module as described in section Access Methods and the stream chains defines the data flow for incoming and outgoing data.

    Searching a URL

    MORE

    Receiving an Entity

    MORE

    Sending an Entity

    MORE

    Return Codes from the Access manager

    The access manager has a standard set of return codes that the application can use for diagnostics. They should only be used as indications of the result as a more detailed description of any error situation is registered in the error handler. The set of codes are:

    HT_LOADED
    A generic success code that indicates that the request has been fulfilled
    HT_NO_DATA
    Partly a success code, but no document has been retrieved and a client application is encouraged to maintain the previous document view as the current view. A HT_NO_DATA code might be the result when a telnet session is started etc.
    HT_ERROR
    An error has occured and the request could not be fulfilled
    HT_RETRY
    The remote server is temporarily unavailable and no more requests should be issued to the server before the calendar time indicated in HTRequest->retry_after field. No action is taken by the Library to automatically retry the request, this is uniquely for the application to decide.
    HT_WOULD_BLOCK
    An I/O operation would block and the request must pause. As the request is not yet terminated, the operation will continue at a later time when the blocking situation has ceased to exist.

    Context Swapping

    In a multithreaded environment it is necessary to keep track of the context of each simultanous requests issued to the Library as the response might return in another order than the one they were issued. The Library allows such a context registration in the HTRequest object by providing the registration mechanism of a call back function and a pointer to an arbitrary data object to be passed to that call back function.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Access.html,v 1.13 2025/02/16 18:41:41 frystyk Exp $
    libwww/Library/User/Using/AnchorExample.gif0100644000076400001440000001371405761725752020423 0ustar danielusersGIF89aãÎòÿÿÿÿÿÿÿ!ù,ãÎþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zݸßï™Û§Ô;ó<¯à‡ülR{prt€w‰#„|x‡‚”Q‘2—’‡™v“ˆŸ}“¤•§B‘u«…¢q­®w~±{ µŠœ¡s¹­½‹¯±À—…Ä ³°¼£»¸Á¨Ó-ÆÏ¢·ÂÌÙ˹Ø¡ºÉÑ„æÍçâ¬ÒæºÀ¬ÊÏ¿ÍòëëãÔú(ÛòªóØ\ÔVŽV>wI¥CXð“:vîL…‹&"Eo V,·þqŸGýБã¸Ì¢¬yÙʣСK{M6lmÓÃk0OŽÔ3äÇŸ":­ìö²¢F–UŽCêÉ$ÏDO—ÖÔÀ4fÏ©47VÅg ¨× ™†-iÔÙL›Y­‚ u-Ì¡jÑž•‰ÌíU­¿êÝ–Y¢$‘ÖìJð/X¶f §lèëH„[Ëî87žÌ½˜©"ÎxÓiczèÚ…&[L*ÞÑw¹v|—²ž?¢b'¥¹8³mÖ· j;¸¤_‘žõ•ŠÕ`dã¤×rý:°qqsßž¾ƒ0õëØÇXÏν{–íÞËO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿þÿÿ(à€âmcà&¨ h6HE^@@èà„OH胅f˜†8Õ·ªÂ߈S“·Þ„þóÝt G^Éä”3^ÁÐt¨¹ækpÞy¡H>Nú>ŠŸŽúC¾z­»þzß+È>;¦wîùí—‹Žïîhôî;#©“€ïòÄ›Q»íyÂþøòº7OÅóÐGûôÃ[Ï;öqÿ޼ô˜ì=Æ7°··É¯mþùŒpCi£ƒÉïøÙL~ùð³¿(NŸ¢Óªp’ü…O|öÚæú—ÀqÕŠOt` ¸¸0)6 Ê ›5»_Ì)€DÒç€õ ,x…kü,ÁŽ‹i#¤`øˆÖ¾¦¨œpa •C Èp†4¼  UH¼OUåˆo©Ÿ~Ä n/…/²^lœÑCâ|&þ$„€ C'ÄzE‘0ÈâN–£zñgL„ÖÆ0ñ€R2# _8?GAñjmÁ›XÆ.ÎñlÜÿ˜GˆQ‹•™e†)_0í–+¤!÷ÈÇ8.RWJ¡K¿sGIn€’•”ÒGIJE’¥áÙèI€2”ÁdÚTÙ*V¶’‡Œõ"ËSÑ2¶¼¥_YÁ½ôR´¢ßÜÒ(LäR[üJ^€ÈG*“`xl&ˆ K¯ÓWD'—©Ím& Ñä¥-–“ÌTARVå4ç9?Nuú(žòZêiÏêàsÜd?û9¢ó”ò eÐz<쀎*þ•£žY]:ôD]ä(ZÑDNÇEC¥ ÃóP ¡õèG!jCðˆ4;%=aPšR^x¡R¨ÉSm”¦ùƒ)Nw:T’J”½À@©C"Á¨§j€*¶~:OX´@E…礊®6ð@­©M»ÓÔ­Ž¯<^ÕŸ ÂZSô”ugåéQYT ,•;oÛS3úÄÔÕ®*5êP¡×ñꊷí¤P{ÕÙY™ª‡¡if«Í¢µ¸ß%§ÝŽåj÷~Î}®|¢+^¼vÒ¼^„oj?™^õ®¼rm¯|UÅÂìÆ¶õ5-}Ø‹M÷ê7Níܯtc¨ÏÔº 0±Ú^4±„º©l× /À]x—@=óÍŠËÛ—E!îψáJßÃàà J1Vü9 ˜¸„ŽÕŒ÷ó-—Ö˜Ã7>±Œv¬Ÿ‡ÌCöÀƒcDäü, »&]"f_ c 5? {ia9e*—ÉÕƒn ª90¸åÓÌ3¨²ŽÃ d…\.N2:sŒb6§‡znÞ°þÞÖå¨ùCWfþó ¬™ê¬k.®ÁŸmgOƒ3ä,‚E3:>Æí–Æg4§ÙÒV¦^ »3j=—ҥ货½üe‰ºÑ{)5¡·JÍ(ßÔŒôyMc;è× ¢Þ®aÝëóz™Mº&¬µ|OÛD™v´ÄúúéV+)ÚÜY63ñëçg£¸<²öµFU°d–žZ­ÚÓ‚„×mh5hÛÔÜv·=»`W©¨Žß‰w Þ ïf;˜Î}Ì*‹¿Ðëbó€ßýöç±uœY¼öØ]Žnj%œ‰Kg2N(ø)žð‚þ»ÕH< k-òjräœÙdÊ£³!}§ãÏAOï:?7™\Z7gäþ©òÞú| §Ì·íï”ÛV›ôàÏ“»oÔÜšh¤-™µÒÇQÁœõ†Nt…“Û»O·nÎÃi¥“CœR×!Õu|kúj¿×»îq£¼çÈÜá›}Ž!³ó]í9ß»mþã;ÆÝs_»Ì¿nm¤«€POâʧxÈÓÏòŠ×w#ƒarXÌwëG¡ Ôv‚°P𞇎tVy×ôw1×üa4)Μ  ‰Ï<G÷3Ãzïái{z{ݪ½÷½tY•w`~¾ É^Ù¸»;ïý†¿þËE-}jÓ³úÖ‡"™³Íá¿àÕÝý÷/°ÐŽ_‡Î{þ„~ÇÍ™ýí×8™^GänÛÓ¦~–|2,ìDvÍ‘ueÐ=‰%€Ô‡<tÛgIÞG[x#ˆŧ{_´G%Èì6‚ÿµ3xùWwM‚Zw|J…‚èrsµ#ÏWtFÂYœ§S5h8.Ø‚*xƒ¹bnxg|@h‚6{»'„CXTïwn'ƒF¸x~,’WGbQ˜„tG…ðl‚……§…+¸NW* ˜Fæ7k`†Wo·73ðäv†7_khjVˆo˜PX†)Dfo—†]xCºƒ ¸‡{’…"¸|hâ_Ð!ˆX’‡)(nöæ?[Hh¤Qzq!þR#ø‰‚H8¸.}˜SU!Œè);wF\•h+@‰1؇û‡n‹Xaòˆ˜}Æ{£è†…†<‡H¨‰Ž‡‹=HéÕ†MøƒJpLOX{µtŒz\ʸŒAtZuaªxM&UÆ‹ò‚Íh9³æØ‰S¸]ß8°˜ƒRXd|çøNp8®Xi†ˆ'âØr\¨‹lÕŽI²38#Hµjëç09}9÷x‚½x,ïè€èW iù8# ˜‘íÖ™PPðT¹hl+P‘/øi˜n[’A„©d)©*©n|e˜niU“2©¸R„D#·E’Ðþä“? Ô"”:C”kÅ“_ˆ”I)‘@Q“ù&‹õ(ŒÍe”Âe’×(‡™a•XpoCä”OÙ“Ry$@ù*÷RfY\ÙM㸖¤‚"ñ§„ƒ¸•PTµ¨”?!–W`—zE‹ ¹—ƒó 3I €i‚y-o —{ 4è—±˜UÐT$——šY}&™“‰A>¦“Gˆ –‰˜ýF«Vü8KÅ"°‘‹åiª¹šŽ™,Y)tèg yYfæ™’˜ñø?ª÷p!û›e°›—u˜6¹Zä…`9å%ø—ѧ°›¾y’©4MÛ¨vE¨••PÖyša”Ú©™äˆ«xŽàžHpþ×Éæyžxt(Ÿ¡têÙž¸¹”ù™4p2†išÚNpçx·IškБuk³‹—ˆíÄ_Ï,]¥ ¥änü)Ÿh—–¡´×zªŸú•[—¡ŒgN)¼±râ)!™¢äù¥É âã Sp‡›9¢^x3ªh‰Ä¡¨H—cŸ[УÕ@š‰A±‘.9žÌX¢LÀO6:EüÇ®U˜‰®˜DªFúq­F’­eŠ4J„¥„™Ž" £¸¡g€ÈŠšm(¦8wvº•£–˜¥ HmGtˆ£,ð¥Ê~ŠŸyǵR>•¦\¤›¸õ¦z X ¨' dM1u‡þ¶ùU{ꤦ&cBE8‰—W@©™•| e'A!ƒg‹êDɹ|¼åw‰¨¦“j¢09Š}6¦%÷H×À€xJª¥è©¿•`«´¥·J‹V‘TØg?€ÁÂ2e¬/Å|t—"¯†«%i’Iªï©¥z•ggp}ü‘Jȹ³ÉeºᆮµºebàŒØÇ®å§âI£êH5ùdÁX¬ùšÏØ|íê®ÿê£^‰¢B`g€j«*+åHy¶7š·jª¹j@˜;±hœëºŠôØ­TP® 7?°l!ÛU]š{‚[éÚö²é³2ûkyh£10£8ë¨1þ6JJ¹ú°RF®× –±:´>H¢Lè9ÀqAÛ´Oš˜­ù€¤5¯¹#iBÊ¥ñ# ’¥¤;Z’.0®‡ckO˧…Å|ˆˆ’eµ¤…xJ•ðÙ¤K÷¶kKˆf˛īp‹­yª¬{š‹aK®2€¶#ÀuU˶«Ÿ"[‡Ý9/ G‹Ëµk3²U'´o;¶~¸LÚ¯Æ)—[û³Ê´û¹øJ›Çz€äÕ_6Ÿ\†ºœËv0¹k®_YvÒY„þWˆHëJš+¹÷¸‚«]‚7†}ù©Å˜¬òG»à³Ê“1X;¤MÚ¢xëºÙú¼šzGÒ‹¤ÅK3ÖûµŒW+ѺfÄ\þaǭݯ#9¾P|È{°aKX¢9—3¡ëY ]9SŒ{襁ª›¼¿¤çº¯=ç¾/¾À0ÀK;ŒV µ—ŽØÁäÀ,¿Ó°§ØŸ\ œËZt¤ž'û&ÜÁ,À ¬§{k¿Wk¾å»ÂÁ¬²ŒÚ¹·ú[P6|Ã-ìÂô{½`;Ã" ÄB<Ä9z%$Ã/¿):h·^0ÅÜ"03¼*ÐEk´¥ë´ê6Æô‘ñƒagõÅ`Ì™÷(õ«-,I ÅêÆŒ²u»»¬/œ•·L)ŠV|q,ƒs¼”ÑC¡ÛÛ•ƒ­ÔKM]ßœ ز Þ Õ_,ÕS½Åªy©I­³]¢O ¸ÊÑYYÖ20³XyDFÝ҃ɇ8ÍÖ¹®fØÈÄÓ•<×ÃY×vÍWÌ«s¬ØÆE†‚€™ŠºÖ‹¨xÅ+¢Ù’j®@"† ؘݸs7ͼҊ‡ÑÕüÙÊÚ}½¦ÇLØÄzÙ…ô¥©—“¦X}q…!Œë Ù¨]7×dúZe:y´*ÜqáØj}Ú¿=2LÔ‡t¨‡wgÒ¯ÚÜ!ðÜXÙt®•v9•ÛóÖÃºÇØ ÚŠnþ£+ &»ÍæXÝüŒÖåÝ/œ…éM܈ºªÀ+Þú,×ñ=­:¬ÍÈmDë-rÑÉ+õÂÕýMÿâTq¾ÑzÈ »°wàdààÖÍëÃÎ2M3Á½á\QÕ>ñ‘ö.$⾬ NÀôɰ+Îâí¯/Îß §3€îâ7ÂJq†j’¸k€áåݧÌä6¾ãØbäˆäI¾yÚ+ªþ{äNž¿¾ËÞóx¹2:Ù‹­®·ØÙï]BŽÝ^~Ò Ë£\nØeNÓèæUž â§ÀИϰÚÜ÷æˆ}]ü‹¨¨Tçv>ßx§¿›Á»uÊV@>Ø&,л%»n>€žþè¤MÞfpÞ’nèð]écŽÚ)¾³—®è-ÞŒ"® +ÞéÎÒŸ]Ç^Û¡@­ækLé.Ñ þÇ=v£§>ÕLÙZ>æçì¼êžëqÈjÜê=Úì)ìLÕ¤Û”BýÛÆŽoÈN¶òHo%Ùe}ˇ—¼Ná ­¼ÍÎéâ\²«-D}GÛ57ÛÖÞÕÓ¼žÑºÛ¶‰Üüí©în«ˆÒ^î4MÐ¥^(µVï Ž³öåúŽâ·nƒøNè¿á¦nð¥œï­ðÏŒ™)ðÿëO¢ãôåωéK½ðW[oaòŽÙoÁS9ëŸãCß%¯ò'ßߣNêƒòŸ.Å4_ówk þÏ׎ó`ÀÙý§Ø>Ï@?íy>ô¨PôLÝëH¿Å‘¶ôãÝôNOkŠJ±Û.õY<¸j±ëXO œ½ñBßõ=ù–ù˜ÿ±•Ÿù2Îùžÿù ¯â¡n›?úóWú¦¿å©¯l¨¿ú2«Ý®OùˆûÓ1û´¶û¶a麿û›Þû¸×úÀ/æÃŸ ‘ ş숟ü]êÌOÅ1þü4œºÒOÙ+_ýÐýØOÁ ¹ìÕnÝÛŸõÓ¾äþ¦þ+äÿ^æï}åÞÌ5m÷ë¯}×ñÎññ/þOÝmÞó÷¥ùßÞÜÛ½H«½8ëÍ»ÿ`(Ždižhª® 5]o+92G7«ï|ïÿÀ p¼åj±‰²FƒŸÐ¨tJ­ZK9ãÒÖl1Ç«xL.›ÏÖã+°Æuë0M¯Ûïø<×Âî»÷H~rrz†‡ˆ‰Š!…O‹‘’“gC–”™š›œ+˜AŸ¢£¤¥3c¡¦ª«¬†–}°;©­´µ¶U¯.:³·½¾¿»_,¼ÀÆÇÈÂÊ^lÎÅÉÓÔɹÌÐ~ ¡ÒÕÞßµ¯°Ð§åsÝàêë¢×6p€çéì¨õöî{m]Ë÷þÿ¥ò5Ùgn=€¢ê§/7…#&ˆßC‰3Ò7Îa<ƒCмr0EÉ‘(S2L£²¥KYdN¾œ©R¦ ›4sjÄI‚§ÎŸ }Š ´è=¢ ] N©§L£ZGµªÕ«X¯JÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ«$;libwww/Library/User/Using/Anchors.html0100644000076400001440000000416206560413036017451 0ustar danielusers The Anchor Class

    W3C libwww Using

    The Anchor Class

    An anchor represents a region of a hypertext document which is linked to another anchor in the same or a different document. Another name for anchors would be URLs as an anchor represents all we know about a URL - including where it points to and who points to it. Because the anchor objects represent the part of the Web, the application has been in touch, it is often useful to maintain the anchors throughout the lifetime of the application. It would actually be most useful if we had persistent anchors so that an application could build up a higher knowledge about the Web topology.

    When to Escape and Unescape Addresses

    The URI escape policy in libwww is that all URIs created as anchors must already have been escaped. The reason for this is that if URIs are not escaped then the URI parser is not guaranteed to work as expected. Imagine, for example, that you have a ":" in a host name, then you could get something like this: http://my:host:8000/ instead of http://my%3Ahost:8000/.  Libwww provides support for escaping and unescaping URIs using this set of APIs.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen,
    @(#) $Id: Anchors.html,v 1.12 2025/07/31 19:08:14 frystyk Exp $
    libwww/Library/User/Using/Application.html0100644000076400001440000000234306705442442020322 0ustar danielusers User Guide - Application Modules W3C libwww Using

    Application Modules

    Until now we have described the libwww core and the utilities. You might think: "This is all OK, but how can I get libwww to do something useful, for example accessing a remote HTTP server?".

    As part of libwww, you will find many modules that actually can do this and much more. The application can register any of these modules in order to get the desired functionality. This section discusses the application modules and what functionality they provide.


    Henrik Frystyk Nielsen,
    @(#) $Id: Application.html,v 1.8 2025/04/15 19:59:30 frystyk Exp $
    libwww/Library/User/Using/Bind.html0100644000076400001440000000526406252703070016732 0ustar danielusers Bindings to the local File system

    W3C libwww Using

    Bindings to the local File system

    The preferences that we described in section Request Preferences did not mention what libwww should do if it doesn't know the data format of a document. In many protocols this information is provided by the remote server. Typical examples are MIME like protocols where the metainformation such as the Content-Type and the Content-Language is provided together with the document. However, applications often have access to the local file system using file URLs which in general do not keep any or at least very little information of the file type. It is therefore required to have some kind of binding between the file system and the preferences registered in the Library which provides this mateinformation about the object.

    Often files in a file system is classified by some sort of a suffix, for example GIF files are often ending in .gif, text files in .txt etc. This binding is not static and it is therefore required to have a dynamic binding just like the preferences themselves. An example of the latter is HTML files which on most Unix systems end in .html whereas they on many MS-DOS based systems end in .htm.

    The HTBind module provides a generic binding mechanism between a file and its representation internally in libwww. It is not limited to simple file suffix classification but can also be used in more advanced environments using data bases etc. However, at this point we are interested in how we can register bindings between file suffixes and for example content types, content languages etc. The Bind manager is born with a certain knowledge about the set of delimiters but more can be added to provide the functionality desired.

    DocumentationAdding and Deleting Bindings


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Bind.html,v 1.14 2025/12/09 03:23:36 jigsaw Exp $
    libwww/Library/User/Using/Cache.html0100644000076400001440000000525106252703072017057 0ustar danielusers The Persistent Cache

    W3C libwww Using

    The Cache Manager

    Caching is a required part of any efficient Internet access applications as it saves bandwidth and improves access performance significantly in almost all types of accesses. The Library supports two different types of cache: The memory cache and the file cache. The two types differ in several ways which reflects their two main purposes: The memory cache is for short term storage of graphic objects whereas the file cache is for intermediate term storage of data objects. Often it is desirable to have both a memory and a file version of a cached document, so the two types do not exclude each other. The following paragraphs explains how the two caches can be maintained in the Library.

    Memory Cache

    The memory cache is largely managed by the application as it simply consists of keeping the body part of a document in memory. As the user keeps requesting new documents it will then be served immediately out of memory. This is a nice way to keep high performance while browsing back and forward through the history list. The memory cache is a BEFORE filter that checks whether the data object was kept in memory or flushed.

    Persistent Cache

    The file cache is intended for intermediate term storage of documents or data objects. The libwww cache is a fully HTTP/1.1 compliant client side cache which honors all HTTP/1.1 cache directives and allows for disconnected operation. The cache also knows how to handle byte range requests so that if you abort a download and start it at a later point in time then it will try to use the part that it already have and only ask for the latter part. In case the origin server (or any interdiate cache) knows how to handle byte range requests we then only get the part that we didn't get the first time.

    DocumentationSetting up the Cache


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Cache.html,v 1.15 2025/12/09 03:23:38 jigsaw Exp $
    libwww/Library/User/Using/Core.html0100644000076400001440000000350306301652346016744 0ustar danielusers User Guide - The Library Core

    W3C libwww Using

    The Library Core

    As mentioned earlier in this guide, the Core of the W3C Sample Code Library is the set of modules that must be included in every application. However, the core does not contain any functionality for neither requesting a HTML document using HTTP, not to parse it or present it to the user. All this functionality is dynamically registered in the core using an open set of application modules which we will describe later.

    The Core is basically a set of registration mechanisms that glue together the application modules, and in the following chapter we will look how to configure the core to contain exactly the functionality we want for our application. If you are interested in a more detailed description of the architecture of the core to see how the glue is designed then please read the chapter on the model behind the Core of the Library in the Architecture document. In this section we will concentrate on the APIs defined by the WWWCore.h include file and how to use the Core in a real application.


    Henrik Frystyk Nielsen, libwww@w3.org,

    @(#) $Id: Core.html,v 1.10 2025/02/16 18:41:42 frystyk Exp $

    libwww/Library/User/Using/Dialogs.html0100644000076400001440000000270706252703076017445 0ustar danielusers User Messages and Dialogs

    W3C libwww Using

    User Messages and Dialogs

    Libwww is completely natural language independent. All messages and dialogs are handled through enumerations defined by the User Message Manager. The task of converting this set of enumerations to dialog boxes, progress notifications etc. is completely for the application to provide. The advantage of having this model is of course that libwww remains platform independent and if the application is not interested in having a user interface then libwwe does not require it.

    DocumentationAdding and Deleting User Interface


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Dialogs.html,v 1.8 2025/12/09 03:23:42 jigsaw Exp $
    libwww/Library/User/Using/Error.html0100644000076400001440000000761106252703100017137 0ustar danielusers The Error Class

    W3C libwww Using

    The Error Class

    The Error class provides an easy API for registering errors occurring while the Library serves a request. All errors are registered in an "error stack" in the Request object which allows for nested errors. The Error class is both natural language independent and application independent in that it uses enumerations in order to refer to specific errors. It is for the application to provide an error presentation module which interprets the errors associated with a request. An example of such an implementation can be found in the HTDialog module.

    Libwww deals with two categories of errors: application errors and system errors. The former are all the errors that can occur when libwww is used in a "real" environment where network connections can disappear, disks can get full, and memory can get exhausted. The letter type of errors are at a lower level including invalid arguments passed to procedures, missing function calls, or any other application misbehavior. In this section we will examine libwww Error Manager which handles user errors. In a later section we will have a look at how to control the application errors at an application debug level using trace messages.

    As a part of the core libwww, the error object is intended to pass information about errors and messages occuring in libwww back to the application. Each error is kept as an object so multiple errors can be nested together using the well-known HTList object. Nested error management can be used to build complicated error messages which an arbitrary level of details, for example:

    	This URL could not be retrieved: http://www.foo.com
    	    Reason: The host name could not be resolved
    	        Reason: DNS service is not available
    

    The principle behind the error manager is exactly like any other registration module in libwww in that it creates an object and binds it to a list that the caller provides. Often, errors are related to a specific request object and each request object will therefore keep its own list of errors. However, errors can also be maintained as separate lists which are not directly related to a request, for example, the application can keep its own list of errors independent of any Library errors.

    System errors include all errors that occur while interacting with the operating system. Often these errors occurs as a result of insufficient availability or authentication to a system resource. In many operating systems, the system provides a set of error messages which is associated with an error code made available to the application via the errno variable or equivalent. All other errors are registered with an error message belonging to libwww Error manager. Note, that there are no difference in how system errors and other errors are treated, they are the same data objects and can be registered together with no exception.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Error.html,v 1.15 2025/12/09 03:23:44 jigsaw Exp $
    libwww/Library/User/Using/Errors.html0100644000076400001440000000231206252703102017315 0ustar danielusers Architecture - Errors

    W3C libwww Architecture

    The Error Class

    The Error class provides an easy API for registering errors occurring while the Library serves a request. All errors are registered in an "error stack" in the Request object which allows for nested errors. The Error class is both natural language independent and application independent in that it uses enumerations in order to refer to specific errors. It is for the application to provide an error presentation module which interprets the errors associated with a request. An example of such an implementation can be found in the HTDialog module.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Errors.html,v 1.7 2025/05/21 01:23:28 frystyk Exp $
    libwww/Library/User/Using/Event.html0100644000076400001440000000537006705442442017143 0ustar danielusers The Event Class

    W3C libwww Using

    The Event Manager

    The Event Manager defines the API to any event loop to be used by libwww for handling events. An event is not strictly defined as it is highly platform dependent and considered out of scope for libwww.

    The libwww core does not define any event loop - this is considered part of the application. However, in the libwww application module, you will find two default event loops: one for Unix and one or Windows. They are normally initialized using the libwww profiles which help you setting up libwww for your particular needs.

    Libwww is not currently thread safe - it supports what I call pseudo threads which are timed on I/O operations - that is, libwww works very much like X.

    If your application is not using anything but traditional blocking sockets then you do not need an event manager at all. In that case, libwww will block on any socket or system call until the process can proceed. It is important to note that certain operations like HTTP PUT and POST, for example, require non-blocking sockets.

    The libwww event interface is very simple, it consists of two operations:

    1. registering a socket descriptor together with the location in the program, and the current state of the operation (for example read). When the event manager at a later point in time gets a notification that the socket has become ready, it can then call libwww with the state saved from the registration and libwww can continue.
    2. unregistering a socket descriptor when it is not anymore in a state where it can block.

    DocumentationRegistrering an Event Manager


    Henrik Frystyk Nielsen,
    @(#) $Id: Event.html,v 1.12 2025/04/15 19:59:30 frystyk Exp $
    libwww/Library/User/Using/Filters.html0100644000076400001440000001137006252703106017461 0ustar danielusers Before and After Filters

    W3C libwww Using

    Before and After Filters

    Until now we have not mentioned a lot about what the Library actually can do. The fact is that the core part of libwww actually doesn't do much. All the functionality must be registered by the application - in other words - the application programmer builds a libwww profile for an application by registering a specific set of protocol modules, callbacks and filters. Filters are called before a request is to be issued to the Network, and after when the request has terminated.

    All filters are registered at run-time, and filters can be cascaded so that one filter can call other filters and so on. Filters can also start new requests or terminate existing requests, so the set of possibilities is very big. Normally, filters do only handle metainformation about a resource. For example, the authentication filters looks to see if we have been asked to provide some credentials in order to access a URL. If so then it adds a protocol defined header to the request, and if not then the request just proceeds. Handling the actual data object is done by streams which can  modify the contents of a data object.

    The Library can handle local and global filters - local filters are associated with a single request and global filters are associated with all requests. That is, if you can decorate a request with a specialized filter or you can use a generalized filter for handling all requests. A global filter is useful if the filter is to be performed very often and local filters can either add to or override the global set of filters.

    Often, a before and an after filter needs to share a context which is unique to this set of filters. There are various ways this can be handled by the Library. Either a context can associated at registration time or it can be built while the filters are run. The URL tree is a useful data object for keeping information associated with realms or sets of URLs.

    Use the Standard Filters

    The libwww distribution package comes with a large set of standard filters. These are filters that can be used in most applications and will do 80% of the job. The standard filters cover the following functions

    • Proxy and Gateway redirection
    • Memory and Persistent cache
    • Rule Files
    • Logging
    • Error Message Generation
    • Redirection
    • Authentication

    When the Standard Filters Aren't Enough

    In some situations, you can not use the standard filters, for example if you want to get very specific information out of the request or want to interact more actively. For example if you want to keep track of all the redirections performed by the redirection filter then the only way is to roll your own filter. However, the filter mechanism provides the application writer with a powerful method for extending the functionality of the application at runtime and can be used for many different extensions.

    Filters can also be nested - that is for example the case of authentication filters and PEP filters. For example, the authentication filter before and after filter are generalized authentication filters that do not know about specific schemes like basic authentication. However, the authentication filters contain a mechanism for registering specific authentication filters like basic and digest, and it will look at the information in the URL tree to see what authentication scheme to call for a particular request.

    DocumentationAdding and Deleting Local Filters

    DocumentationAdding and Deleting Global Filters


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Filters.html,v 1.4 2025/12/09 03:23:50 jigsaw Exp $
    libwww/Library/User/Using/Flags.html0100644000076400001440000000776606252703110017116 0ustar danielusers Using - Global Flags

    W3C libwww Using

    Trace Messages and Preprocessor Defines

    The Library has a huge amount of trace messages that are very useful when debugging an application. In this section we will have a look at how to use the trace messages and also what preprocessor defines that can be used to modify the behavior of the Library.

    Trace Messages

    The Library has a large set of trace messages that can be enabled in various ways. They are often an important help to the application programmer in order to debug an application and this is the reason why they are trated in this User's Guide.

    DocumentationAdding and Deleting Trace Messages

    Preprocessor Defines

    Most of the preprocessor defines in the Library are platform dependent that are determined as a result of the configure script. However, there are some few defines that on a platform independent basis can change the default behavior of the Library.

    HT_REENTRANT - defined using the configure script
    This boolean define should be enabled if the reentrant versions ("*_r") of the system calls should be used. The name of these system calls are currently "*_r", for example strtok_r. The default value is OFF.
    HT_DIRECT_WAIS - defined using the configure script
    LInking to the freeWAIS library. The default value is OFF.
    HT_DEFAULT_WAIS_GATEWAY
    A constant string value which WAIS gateway to contact if HT_DIRECT_WAIS is not defined and no gateway has been defined using environment variables
    HT_FTP_NO_PORT
    The FTP module can handle both PASV and PORT when requesting a document from a FTP server. If the application is a proxy server running on top of a firewall machine then PORT is normally not allowed as a firewall does not accept incoming connections on arbitrary ports. This define will disable the use of PORT. The default value is to use PORT if PASV fails.
    WWWLIB_SIG
    The Library has a very small set of signal handlers whose action most often are simply to ignore the signals. However, due to a bug in the TCP kernel on Solaris and other SVR4 platforms returning a SIG_PIPE signal, some kind of handling is required on these platforms, and the signal handling is enabled by default on these platforms.
    HT_TMP_ROOT
    The default destination for temporary files if no other destination has been given by the application. Temporary files include files created for external presenters etc. The default value is /tmp which obviously is not suited for large amount of data.
    HT_CACHE_ROOT
    If the cache is enabled and no cache root directory has been specified then use this as the location. The default value is again /tmp.


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Flags.html,v 1.15 2025/12/09 03:23:52 jigsaw Exp $
    libwww/Library/User/Using/HTML.html0100644000076400001440000000607106752300670016623 0ustar danielusers HTML Parser

    W3C libwww Using

    Presentation Modules

    The HTML parser has three different levels of APIs in order to make the implementation as flexible as possible. Depending on which API is used by the application, the output can be a stream, a structured stream or a set of callback functions as indicated in the figure below:

    HTMLParser

    The default HTML parser in libwww is very simple. You can look at the Amaya browser/editor for a complete structured parser.

    SGML Stream Interface
    This interface provides the most basic API consisting of the output from a stream without any form for structure imposed on the data. The internal SGML parser parses the data sequence, identifies SGML markup tags, and passes the information on the the HTML parser. However, if the application has its own SGML parser and HTML parser, the internal parsers can be disabled by removing the internal HTML converter called HTMLPresent() used to present a graphic object on the screen from both the global and the local list of converters and presenters.
    HTML Structured Stream Interface
    If the application has its own HTML parser that understands the structured output from the internal SGML parser then the second API can be used. The current HTML parser in libwww is very basic and does not understand many of the new features in HTML 2 and 3.
    HText Call Back Interface
    The last API can be in case the application prefers to use the internal HTML parser and only wants to provide a platform dependent definition of the callback functions defined in the HText module which are all defined in HText module.

    Due to the limited functionality of the internal HTML parsing module, many applications have chosen to implement their own HTML parser.

    DocumentationRegistrering the HTML Parser


    Henrik Frystyk Nielsen,
    @(#) $Id: HTML.html,v 1.13 2025/08/05 12:21:12 kahan Exp $
    libwww/Library/User/Using/History.html0100644000076400001440000000415706252703114017516 0ustar danielusers History List Manager

    W3C libwww Using

    Keeping Track of History

    Libwww supports client applications in keeping track of which locations the user has visited while browsing the Web. The history manager is implemented in the HTHist module. This module is completely autonomous as it is not used by any other modules in libwww so if it is not referred to in the application code then it will not be linked into the linked application. This means that if the application does not need recording of history then no action is required at all.

    The purpose of the history manager is to try not to impose any particular history mechanism policy but instead to allow various different history mechanisms. The basic features of the history module are:

    • The module can handle multiple history lists
    • The underlying data model is linear lists
    • The module keeps a position pointer into this list
    • The application can refer to an element in the list by an index

    Some of the navigation steps supported by the module are "back", "forward", and jump to a position in the list.

    The details of the module is listed in the declaration part of the HTHist module.

    DocumentationConstructors, Destructors, and Methods


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: History.html,v 1.10 2025/12/09 03:23:56 jigsaw Exp $
    libwww/Library/User/Using/Host.html0100644000076400001440000000270706252703116016773 0ustar danielusers The Host Information Class

    W3C libwww Using

    The Host Information Class

    The Host class manages what we know about a remote host. This can for example be what type of host it is, and what version it is using. Notice that a host object can be used to describe both a server or a client - all information in the Host object can be shared regardless of whether it is to be used in a server application or a client application.

    The Host class contains information about the remote host, for example the type (HTTP/1.0, HTTP/1.1, FTP etc.) along with information on how the connections can be used (if it supports persistent connections, interleaved access etc.)

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Host.html,v 1.3 2025/12/09 03:23:58 jigsaw Exp $
    libwww/Library/User/Using/HyperDoc.html0100644000076400001440000000412006252703120017555 0ustar danielusers User's Guide - HyperDoc Object W3C libwww Using

    Managing the HyperDoc Object

    The HyperDoc object is intended to contain information about data objects, especially hypertext objects that are to be presented to a user. As an example of a definition, you can look at the Line Mode Browser where it is defined in the GridText Module. Here it is called "_HText" object and it contains all information needed to present and manage a data object in a text based environment.

    The memory management of the HyperDoc object is also left to the application along with the definition. The Library does not use any information from the object at all - the only interaction is that the access manager checks if a HyperDoc object exists for a given anchor or not as a part of servicing a request. The application can use this to maintain a set of HyperDoc objects in memory as a fast cache. Again, the Line Mode Browser can be used as an example as it keeps the 5 latest accessed hypertext objects in memory (regardless of their size) in order to allow fast back track for the user. The relation to the HTAnchor object requires that there is a link from the HyperDoc to the corresponding anchor in order for the application to do proper garbage collection of the HyperDoc objects.

    Even though the Library does not interfere with the contents of the HyperDoc object it does provide an API for managing the object. This API is known as the "HText" API and it is described further in the User's Guide


    Henrik Frystyk, libwww@w3.org, @(#) $Id: HyperDoc.html,v 1.12 2025/12/09 03:24:00 jigsaw Exp $
    libwww/Library/User/Using/InOutPipe.gif0100644000076400001440000000747505761725755017563 0ustar danielusersGIF89aZëñÿÿÿÿÿ!ù,Zëþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹Çä²ùŒN«×ì¶û ËçôºýŽÏë÷ü¾ÿ(8HXhxˆ˜¨¸ÈØèøh 9)iQYq‰@™)³yÀùê0y!Šb ™j†ÁÚJ ëJB){I« ‘ûº BëÚ«J 5üûk€«¼»ÜŒMqÌ; |]¼-•ÉY Þü=î«KM®¬~®ë{+~Î,M?~{mÏŸïoë>f³Þq;˜¤¼tíä§O 9‡ávÕ‹ÈÐâ4þV!^ìà§€#×õcXÒ㵊*!bÔ†0&_¶ÜQI…)E}üå&Ï5“¹¬‰“§Ò†.Sæì¹¦Ì©;hejSgÀlWÊø³©Ø9=e}z)Q¬K¡juj–Tªtm<“·+Ú¬Áô> zSíÞ¼ý-ë7)ÛÅnqò5œ¸®dɆ†},ÖªWÀ˜ßmÛmÑÈÓB zôØÉ¬;mœ§1oÁ­52=÷&½‚¿ž\LûèÄ’CCÅmïáðÙÊ¿Vk ½ÖktÿLæÖÔ Z’Éu“ÎmÙ!öÓdû­6½®2âêLŽF=>êòÏ׿ßå0þçøþû?Ñ>×düùG`ˆ`‚ .È`ƒ>a„NHa…^ˆa†nÈa‡~bˆ"ŽHb‰&žˆbŠ*®Èb‹CpçbŒr7 Œ6£c7îHU5ñ$$?NPcFâ1d)EÉ$9z°d“RŠ‘¤QN‰eW*™e—hl©˜^Ži„˜˜¹Ánj®Éf›n¾ §›.ÄIgvÞ¹¦xîYç~U˜ L Œ„²P¥k‡r³¨354z¤iššÒE'i ói9'¥ve ƒ¥„€z©˜ª˜xº)ªòê±–Âi ³öp+­Jä¯PÎà+eÖÚIÁòqþì™Àë(³/$ÛìTÐNôËÚÊê³QX[·x‹ 5f K ¹$ªgµ– Ë {ÔÆ®®ÚYÞ¹¿®Ší¹X‚ŒºDÎó®&4Àü2ï2åÜî©–˜ûJ¸šÞ ±½gÀkÂnl„×'£P¬“¿ {¬0AWQDx$/Œ¨ÅÓcž8éy<îNƒ]œïÈîšL³71«Ì2Á!Ë±Ã‹Ü Y©5VÏGç\4{¼ñ&ðe‡ʼôÆSX×÷ö1B_rr+—8++ª¸42üõÚ@…Lr£à(”ÁD˼7Ã}ë­Î[ý7Ûsc /ÝíÆ6Ù^Ç3Ô.ÓþÝ8äW[.wå€O¶»uûmx\~‹¾9ç¥ê˜ªÆNRκÞ/~¹ê­uÒ¸WŽzá™_^z©“ãlûçÀó¾vò~:ï´û{˜‰ƒþ5éÓnx½p·¼µçÈ;n|ɲãË}Öãg6úÄ+|ÔÌo^|ø««ß¾ùBÃ}{ûÏÏ~~Ú»— PNwÞã Óºâ4ò €äZgˆ&ŒN‚Áó#gëÔnjDØ–· sTMsü»öæ§?ð‚$áöht2Ø Ín&X¡Ù÷²Úœ`@ÏZø?Øp{n£_wÒæ³ð=ix8ŠÜe ÈC\PO6¬¢þ¯ˆÅ,²ÐuÎТ¿hEvŒdü¢Kà-QéA„J{‡5g³ß}¢Œt4£ÝÔX‹:ê1ŒbeöH¢J;R“\g’,Ê2é॔K‘iÚWT(/±5R…UbO¨ƒIv²~îÃ\Uj8JR±‘”˜ÌäýB¹‚!ž±Œ }¶?b²ôd­ãvô,3º$"/WhÌîÉf=ôM1É(XÆò†ÉtàÈAðù²€B¤æ, y±Ôdóµkå1i´ºQÍkj˜&oÀÅm¾,œr<öZW± ¦¯žJÜç·ò©Lùõ®òdâ;[…Ðuùs7©ãŸóþøs·0 4u™è! Ðæ•“lÖû¦A_Y,»HÏ¡úÛIµg¿÷ák‡à´(í̓¹’~%¢*t-‘ôžì+ÜK ZM4b²¦+±'!™»§ùÓ¥ÌâpÚ6aý .g§EYšNÓµ‚-r³*I±P´Î’ëÄ&+ (™»Å¡Œ Ñ¥.Ñ…2-âB$×vjÓ7æÔêºDÈÌ™õ°Fk· ËÖmeT±I5Aã-<* uVù„§R¨^j“‘X¬1¶ÙÌj6ˆ¥k7<ûŸ¦ÖOÀ(­i{ÙΪvPÚ’d­dÙºÊv¶ 9¤æŠ«Üb–²Z‚k‘þõ¯Ûw·¢…mNË´ ©—Ç•j€Xå’¶º~¨(wGz…Ê—2ßEi‚žé*á:6[ðÔî_Éä >Éw¾{š}ï‹ß7é)¿ù…¯ÿ à xÀ.°Œà+xÁ n°ƒ áKx®°…/Œá kxÃî°‡? â‹xÄ$.±‰OŒâ«xÅ,n±‹_ ãËxÆ4®±oŒãëxÇ<î± ä yÈD.²‘Œä$+yÉLn²“Ÿ å(KyÊT®²•¯Œå,k¹yÂĵ2Ý@í„P>*R˜ÅZ^)›ùËpý­@rŒ8gj6úÂØ\²±e1¿YG mèüìþeó ºÎ£nš‹\wðÐ:‚MvÝh¾ŽÇ<^Ù‡ñ×”`ô¹ÉxPRŠ<ºlqAožÛºÛ¬'=^Åk;òD–èÌn~ŒªÓçhO5ˆAh,ëÒœº’k‰ Ö<íêU#›Ã™'j²¹^›‚3¿®6iгl˜{ªì6˜ûü¦0”Õ³OxÂmôx¦`Ö.`ΔqmÛÎ#k¶­æìD³»Õ•n#³û-íKÇÓíŽ6cÔíÞ(WÆÞf=‹¸Éóìë¨zÞæu±³ýpÂ(;ào‘¸ÃçÍ%>çzÓ&Ëå­ãJŽ—çãÎ øÊÓ­tsÓnV5Í›³þ’#Ð9‡Þ1gÈjØLZ"Í^x^½sžš‘Õ–ú s„•È×—¼9dàòS-šA Ïúž=£ž{ÝËÍnP×ÇŽö´«}ílo»Ûß÷¸Ë}ît¯»ÝïŽ÷¼ë}ï|ï»ß]|æ¿K †‚pM]ø=ñ‰ãµ*þâw¿’¯|ßlùÌË÷Yšï<žp%¦³û¢º_¯z…:^CNÁµWhµz.ú”2W¬§G}x?5-ÑÇ^¢ðd¯_WßXà+^ ;7A[ñΞö©çüðu Ý„.úÂWýiÿ)ÛïJúÉ¿.m½oÜàÏçVÆÿhs?k}çž»âç¾;Ã|*þ(¿ûàß~ýÓ¯Ôäòø}ý}Ó‹RÓz…Ò¦W øã^Ä\ Ch'{@UJ±ål7c]F#)g ˆVë^ç€ïG}½7YauSx]«‚ùÇ|;VÿT€Ú‡['uVx"‚1U21Ô3‹X8ƒø€Évr{3J‡KwvlL'ÓLc–DYå£:Õ+Ȧ‚TlÄrA˜‚g´…|m× ó79ÇQ]“@Pø…#8…è‚5(UO¥Lƒƒ;ÐcD/„¯µQxˆ‡ß#(fØVqˆ¿36yh~X?u,‚X)7MSØQñó†l¸\8؇ÔCäÄþQv˜ˆ{<ÄTòSˆzh‚‹ØS—…s¨‚HS&ESˆh‰0Ȇ¨‰-Eµ˜X´è…¢HT$ä;¤ˆ1ȈªØ†:5S®?±˜‰5‹ XJX•‹¦ô=)äŠÇ¸KÎ8бŒ×ˆˆƒ‚?‰Ð(VT^ˆjÀtqkx=ߎäM?´ALsMœÈ‡ÀBTxTëXqH'Žç¨ñ´RvÊ%J´äTg¥*Ú0gv=ס6åRˆw,½DfVOÂG:T¢´YØ@„'i’Fˆ-xL!¹^Q‘{¨´>¤ºØW€VFÀGY€“€‡HГ>Y ”tþ”UºŠÜä¤É©>‰Y›5ùBü9@'Ê£:¥\ª e ¥hz¦J¥Zš Kóo%(¦þæ¡áÙ¦a*‡-õ„Q”žIú˜ 8§B†kú“®s\ YI€õ„3ŠiŠùñ:tt‚þi=Ê¡dW©ÉvD]*¢i›wÕ„îP¢Ä©*©1ÈEZ}­ w«ª*«ë©pjŽô×§«U«½å~½ª© «¬z{À)¢Ê~qЬô9«÷ç«»š¬Æ}Ê ­rz¬¼¥«Ãú¬Õú}ÔªgÆ8­´Š~ÜÚ¬¹úª¿Ê¤®ú"Þ*Îz­ÒÊex €èª~[­äj¬h“‘ÇeÙå{“º¯úº­í¥®ñ•*¬°àz¯øj,~y&Ù…•…Fz ‹« +°+¯kJž÷y ç±! 'ö%²%Ûe˜g²)[zkM'#\é²A2 ³\÷m+[³%2n9˳=ë³? ´A+´CK´Ek´G‹´I«´KË´Më´O µQ+µP;libwww/Library/User/Using/Link.html0100644000076400001440000000240406523463464016757 0ustar danielusers The Link Class

    W3C libwww Using

    The Link Class

    A Link represents the link between anchor objects. By keeping the link as a object and not as part of the anchor we are capable of handling link semantics in a much more organized way. For example, we can then search for link types among all the link objects that we have created. Each anchor can be the source or destination of zero, one, or more links from and to other anchors.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Link.html,v 1.4 2025/05/05 01:11:16 frystyk Exp $
    libwww/Library/User/Using/Logging.html0100644000076400001440000000315106562052345017443 0ustar danielusers Request Log Filters

    W3C libwww Using

    Request Log Filters

    It is possible to log the result of a libwww request regardless of what type of application is using it. You get a set of different log filters that can handle the Common Log File format, referer logs, arbitrary logs, and lately you can also use the SQL log filter which allows you to log information in a MySQL database.

    Normally, logging is turned off but it can be enabled at any time - just register these log filters as any other AFTER filter. You can see many examples of how to use the log filters in the libwww webbot.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen,
    @(#) $Id: Logging.html,v 1.11 2025/08/05 12:49:41 frystyk Exp $
    libwww/Library/User/Using/MIME.html0100644000076400001440000001421606752300670016606 0ustar danielusers Header Fields and how to Extend Them

    W3C libwww Using

    Header Fields and how to Extend Them

    Libwww provides a few powerful mechanisms to generate and parse header fields for HTTP requests and the like.This section describes how to handle header fields and how to extend the default set of headers. Known headers are the ones that libwww already knows, unknown headers are - guess what - extensions!

    Lazy Header Parsing

    Regardless of whether a incoming (response) header field are known or not, they are registered in a Response Object but are not parsed until/if they are needed - this is an important performance feature as RFC 822 header fields are hard to parse. If we want to cache the object then the headers are moved to an HTAnchor Object but the headers are still not parsed before we need to.

    Generating Known Headers

    Libwww manages a known set of headers for which the default behavior it is to use a representative set on each request. However, all known headers can be explicitly enabled or disabled on a per request basis by the application. Here we will mainly describe the set of native headers but leave the description of how to manipulate them for the section on managing Request objects. The native set of headers fall into the following three categories:

    General Headers
    There are a few header fields which have general applicability for both request and response messages, but which do not apply to the communication parties or the entity being transferred. This mask enables and disables these headers. If the bit is not turned on they are not sent. All headers are optional and the default value is not to use any of these headers at all.
    Request Headers
    The request header fields allow the client to pass additional information about the request (and about the client itself) to the server. All headers are optional but the default behavior is to use all request headers except From and Pragma. The reason is that the former in general requires permission by the user and the latter has special meanings for proxy servers.
    Entity Headers
    The entity headers contain information about the object sent in the HTTP transaction. This flag defines which headers are to be sent in a request together with an entity body. All headers are optional but the default value is to use as many as possible.

    The set of known headers are equivalent to the set of header defined by the HTTP/1.1 protocol specification. Libwww also provides functionality for registering additional headers which we will have a look at in the next section.

    Generating Extension Headers

    Each time a request is to be generated, libwww additional headers are to send along with the request. This can happen in three ways as described in the request class

    Parsing Headers

    The MIME parser stream parses MIME metainformation, for example generated by MIME-like protocols, such as HTTP, and NNTP. For HTTP it handles all headers as defined in HTTP/1.1 of the specification. When a header is parsed, the information is first stored in an HTResponse object.

    Parsing Known Headers

    The set of headers directly handled by the internal MIME parser is the reader is referred to the actual implementation in order to see the exact list.

    Parsing Extension Headers

    In many cases, if you have registered an extra set of headers to be generated, you are also in a situation where you would like to handle the result that is returned by the remote server. As we will describe in this section, the Library provides a very similar interface to the one presented above for generating extra headers.

    Each time a request is received, and a unknown header is encountered by the internal MIME parser, libwww looks to see if a list of callback functions has been registered to parse additional metainformation. In case a parser is found for this particular header, the call back is called with the header and all parameters that might follow it. As MIME headers can contain line wrappings, the MIME parser canonicalizes the header line before the callback function is called which makes the job easier for the callback function.

    DocumentationRegistrering Header Parsers

    HTTP Extension Framework

    The HTTP extension framework is not yet implement - stay tuned!

    DocumentationRegistrering Extensions


    Henrik Frystyk Nielsen,
    @(#) $Id: MIME.html,v 1.16 2025/08/05 12:21:12 kahan Exp $
    libwww/Library/User/Using/Makefile.am0100644000076400001440000000022106133513260017206 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) libwww/Library/User/Using/Memory.html0100644000076400001440000000322706252703130017320 0ustar danielusers Dynamic Memory management

    W3C libwww Using

    Dynamic Memory Management

    The Library makes use of a dynamic memory manager which handles allocation and deallocation of dynamic memory. The methods used for allocation and deallocation are wrapper functions around the native malloc, calloc, realloc, and free methods. Hence, the functionality of teh module is very similar to the native C interface but it allows for structured error recovery and application termination in case of failure. It covers especially the following three situations:

    • Handling of allocation and deallocation of dynamic memory
    • Recovering from temporary lack of available memory
    • Panic handling in case a new allocation fails

    DocumentationAdding and Deleting  Dynamic Memory Handlers


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Memory.html,v 1.6 2025/12/09 03:24:08 jigsaw Exp $
    libwww/Library/User/Using/Methods.html0100644000076400001440000000474306252703132017461 0ustar danielusers The Protocol Class

    W3C libwww Using

    The Protocol Class

    Libwww comes with a wide set of protocol modules that gives access to most popular Internet protocols including HTTP, FTP, Gopher, telnet, rlogin, NNTP and WAIS. However, as mentioned in the beginning, when the Library is first initialized it knows nothing about how to access the Internet. In fact it doesn't even know how to access the local file system. It is for the application to tell the Library what it can handle and where to go find the functionality. This is very much the same mechanism as we saw described in the previous chapter, so a lot of what is going on will hopefully become clear as we go along.

    All protocol modules are dynamically bound to an access scheme. Take for example the following URL:

    	http://www.w3.org/
    

    It has the access scheme http and if we have a protocol module capable of handling HTTP then we can make the binding between http and this module. As mentioned in the introduction to this chapter, the Library already comes with a large set of protocol module, including HTTP so all we have to do in this case is to register the HTTP module to the Library as being capable of handling http URLs.

    One special case is the support for access to WAIS databases. WAIS has its own code Library called freeWAIS which is required in order to directly access wais URLs. We shall not describe in describe in detail here how this can be enabled as it is described in the the WWW-WAIS gateway.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Methods.html,v 1.14 2025/12/09 03:24:10 jigsaw Exp $
    libwww/Library/User/Using/Net.html0100644000076400001440000002316606252703134016606 0ustar danielusers User Guide - Request Callback functions W3C libwww Using

    Request Callback functions

    As we have seen in the previous chapters, the core part of the Library knows nothing about how to access, for example, a HTML document from a remote server. All this depends on what the application has registered. In many situations there are a number of things to do before a request is actually sent over the wire. For example we might already have the document in a cache or we might have some translation of the URL so that we don't go directly to the remote server. The latter case includes redirection of a request to go through a proxy server or a gateway. Likewise, when a request is terminated, we might want to keep a log of the request and the result, update history lists etc.

    The Library does provide a large amount of such pre- and post processing modules. However, the exact amount used by an application depends on the purpose of the application. Simple script-like applications typically do not need any history mechanism etc. Therefore these modules are not a part of the core but instead they can be registered as all other preferences. The Net Manager provides functionality for registering a set of callback functions that can be called before and after a request has been executed. Of course, the result of a pre-processing might be that the request does not have to be executed at all in which case the request can be terminated before the protocol module is called to execute the request.

    Generic Handling of Callbacks

    The registration of callback functions is handled by the HTNet Manager and it is (of course) based on lists as we have seen so many times before. A callback function can be added to a list by using the following function:
    extern BOOL HTNetCall_add (HTList * list, HTNetCallback * cbf, int status);
    
    The callback function has to be of type HTNetCallback which is defined as
    typedef int HTNetCallback (HTRequest * request, int result);
    
    This means that a callback function is called with the current request object and the result of the request. Now, if the callback is registered as a pre callback then we obviously do not yet have a result and the functions is called with the code HT_OK. However, if it is a post callback function then the result code may take any of the following values:
    HT_ERROR
    An error occured
    HT_INTERRUPTED
    The request was interrupted
    HT_LOADED
    The document was loaded
    HT_NO_DATA
    OK, but no data
    HT_RETRY
    Retry request after at a later time
    HT_PERM_REDIRECT
    The request has been permanently redirected and we send back the new URL
    HT_TEMP_REDIRECT
    The request has been temporarily redirected and we send back the new URL
    HT_NO_ACCESS
    The request could not be fulfilled because it didn't contain sufficient credentials
    When a callback function is registered, it may be registered with a status code for which it is to be called. This means that there may be different callback functions to handle error situations, redirections etc. The status code may also take any of the values above, or HT_ALL if it is to be called always.

    A callback function may return any code it likes, but IF the return code is different than HT_OK, then the callback loop is stopped. If we are in the before loop and a function returns anything else than HT_OK then we immediately jump to the after loop passing the last return code from the before loop.

    Likewise, a callback function can be removed from a list using the following function:

    extern BOOL HTNetCall_delete (HTList * list, HTNetCallback *cbf);
    
    or if you simply want to remove all functions from a list then you can use
    extern BOOL HTNetCall_deleteAll (HTList * list);
    

    Pre-Request Callbacks

    When a request has been issued there are a number of things that an application might want to do with the request before it actually goes on the wire, for example to talk to a remote HTTP server. Examples are checking if the object already is kept in a cache managed by the application, if the request should be redirected to a proxy or a gateway, or there is some other kind of translation of the URL taking place. The Library provides a variety of modules that handles many common place translations such as redirection of URLs and caching. The full list of modules are:

    Rule File Management

    An application can be setup by using a rule file, also known as a configuration file. This is for example the case with the W3C httpd and the W3C Line Mode Browser. The Rules module provides basic support for configuration file management and the application can use this is desired. The module is not referred to by the Library. Reading a rule file is implemented as a stream converter so that a rule file can come from anywhere, even across the network!

    Proxies and Gateways

    Applications do not have to provide native support for all protocols, they can in many situations rely on the support of proxies and gateways to help doing the job. Proxy servers are often used to carry client requests through a firewall where they can provide services like corporate caching and other network optimizations. Both Proxy servers and gateways can serve as "protocol translators" which can convert a request in the main Web protocol, HTTP, to an equivalent request in another protocol, for example NNTP, FTP, or Gopher. In a later section we will see how to set up the Proxy servers and gateways using the Proxy module.

    As a HTTP request looks different when it is directed to a proxy server than to a origin server, the HTTP module needs to know whether it is talking to a proxy for this particular request or not. You can specify in a request object whether a proxy is being used or not by using the following methods:

    extern void HTRequest_setProxing (HTRequest * request, BOOL proxying);
    extern BOOL HTRequest_proxying (HTRequest * request);
    

    Cache Manager

    Caching is a required part of any efficient Internet access applications as it saves bandwidth and improves access performance significantly in almost all types of accesses. The Library supports two different types of cache: The memory cache and the file cache. The two types differ in several ways which reflects their two main purposes: The memory cache is for short term storage of graphic objects whereas the file cache is for intermediate term storage of data objects. Often it is desirable to have both a memory and a file version of a cached document, so the two types do not exclude each other. The HTCache module provides a basic cache that can be used by an application.

    Register a list of BEFORE Callbacks

    Until now, we have only described how to build a list of callback functions. We will now describe how to setup a list as either a pre processing set of callback function (the BEFORE loop, or a post processing set (AFTER loop). A set of callback functions can be registered to be called before the request is started by using the following function:
    extern BOOL HTNet_setBefore	(HTList * list);
    
    In many cases you know when you register a callback function that this is a function that you always want to be called when either a request starts up or terminates. In the former case you can simply register the callback directly using the following function:
    extern BOOL HTNetCall_addbefore	(HTNetCallback *cbf, int status);
    

    Post-Request Callbacks

    When a request is terminated, the application often has to do some action as a result of the request (and of the result of the request). The Application part of the Library provides two following modules to handle logging and history management. You can register a POST request handler in the Net Manager as described in the User's Guide. The set of modules provided by the Library is:

    Logging

    Often it is required to log the requests issued to the Library. This can either be the case if the application is a server or it can also be useful in a client application. The HTLog Module provides a simple logging mechanism which can be enabled if needed.

    History Management

    Another type of logging is keeping track of which documents a user has visited when browsing along on the Web. The HTHistory module provides a basic set of functionality to keep track of multiple linear history lists.

    Register a list of AFTER Callbacks

    The registration of a set of callback functions to be called when a request has terminated is handled in very much the same way:
    extern BOOL HTNet_setAfter	(HTList * list);
    extern BOOL HTNetCall_addBefore (HTNetCallback *cbf, int status);
    


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Net.html,v 1.9 2025/12/09 03:24:12 jigsaw Exp $
    libwww/Library/User/Using/Override.html0100644000076400001440000000514106301652347017634 0ustar danielusers Using the W3C Sample Code Library W3C libwww Using

    Application Specific Core Modules

    We have now almost finised the description of the W3C Sample Code Core - we only need the last module which we will describe in this section. The module is called HTAlert and it contains the functionality for prompting the user for feedback or for reporting messages from the Library. As mentioned many times in this guide, the Library has been designed to be as portable as possible. This means that the actual implementation of this module is very simple and does only use ANSI C I/O functions. However, the can be overridden by more complex applications, for example using a GUI window manager.

    The Alert module is a part of the core as the rest of the core files depend on it. Hence the definition of the module must be provided either by the internal or an external definition. A C Library module can be overriding by redefining all external references (normally declared in the include file) by new definitions in an application module. By doing this the linker takes the new definition of the module instead of the Library version and links it into the final executable file. The declaration (the include file) stays the same, but the definition has changed. The application module does not need to be called the same as the Library module, only the external references. External references are both global variables and public functions visible to other modules. As an example, the following module:

    	/* Library.c */
    	char GlobalFlag;
    	int GlobalFunction(void)
    	{
    		/* Library src */
    	}
    
    with the declaration file:

    	/* Library.h */
    	extern char GlobalFlag;
    	extern int GlobalFunction(void);
    
    can get a new definition module

    	/* Application.c */
    	char GlobalFlag;
    	int GlobalFunction(void)
    	{
    		/* Application src */
    	}
    
    which will then be linked into the executable program. By using this method, the application can easily provide its own user interface (if any) and still be able to use the Library.


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Override.html,v 1.13 2025/02/16 18:41:43 frystyk Exp $
    libwww/Library/User/Using/Overview.html0100644000076400001440000001000606752300670017656 0ustar danielusers Using the W3C Sample Code Library

    W3ClibwwwUsing

    Using the W3C Sample Code Library

    This part of the documentation talks about the majority of the libwww classses and how to use them.

    Getting Started

    Get an introduction to how to get started writing the first application using libwww. You may also want to have a look at the quick overview if this is all you are interested in.

    Libwww Core Classes

    The libwww core is the set of modules that are part of the libwww runtime. Essentially the runtime is nothing but a registry for handling protocol access, document parsers. All these features are registerered dynamically using an open set of application modules.

    Application Modules and Filters

    In the libwww distribution file you will find many modules that actually does much more than libwww core itself. The application can register the precise set of modules that provides the desired functionality. This section discusses the application modules and what functionality they provide.

    Utility Modules

    The Library contains a set of basic utility modules which are used throughour all the Library code. The APIs defined by the WWWUtil interface provides basic memory management and container modules. You can see a list of the utility modules in the Library Internals


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Overview.html,v 1.27 2025/08/05 12:21:12 kahan Exp $
    libwww/Library/User/Using/Prefs.html0100644000076400001440000000673306252703142017137 0ustar danielusers Local and Global Request Preferences

    W3C libwww Using

    Local and Global Request Preferences

    A Request can be decorated with a set of preferences described in this section. Some of the preferences are bound to the end user, like for example the preferred natural language, and some of the preferences are reflecting the capabilities of the application, for example if it is capable of showing a postscript document to the user. The current set is

    Format converters
    The set of content-types that the application understands. This can for example be text/html.
    Natural languages
    The user's preferred set of natural langauges, for example fr for French
    Content encodings
    The set of content encodings that the application understands, for example gzip and compress
    Character sets
    The character set preferred by the user, for example us-ascii

    When libwww is first started, it knows nothing about these preferences. By specifying preferences, the application can tailor libwww to fit the features supported by the application and by the end user. In the following section we will describe how the application can set up the various preferences. All preferences described in this chapter use lists to group the sets together. As we will see later in this chapter, the reason for this is that lists are an easy way of assigning specific preferences to various requests.

    DocumentationAdding and Deleting Format Converters

    DocumentationAdding and Deleting Natural Language

    DocumentationAdding and Deleting Content Encoders and Decoders

    DocumentationAdding and Deleting Character sets

    DocumentationAdding and Deleting Global Preferences

    DocumentationAdding and Deleting Lobal Preferences


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Prefs.html,v 1.18 2025/12/09 03:24:18 jigsaw Exp $
    libwww/Library/User/Using/Profiles.html0100644000076400001440000000435006252703144017636 0ustar danielusers Application Profiles

    W3C libwww Using

    Application Profiles

    Libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application.

    The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing RFC 822 headers etc. but it must all be registered by the application before the core knows about it. You can either register the parts directly through the many initialization functions in the Initialization Interface or you can use these "precompiled" profiles which are set up to contain the featuers often used by the a specific type of application, for example a client, a server, a robot etc.

    This module helps the application programmer setting up all this functionality, but it is important to note that none of it is required in order to use the Library. All the profiles declared below superseed the Library core initialization function HTLibInit() which is defined in the HTLib module.

    DocumentationUsing Profiles


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Profiles.html,v 1.2 2025/12/09 03:24:20 jigsaw Exp $
    libwww/Library/User/Using/Protocol.html0100644000076400001440000000114706252703146017657 0ustar danielusers User Guide - Using Protocols W3C libwww Using

    The Protocol Manager

    MORE


    Henrik Frystyk, libwww@w3.org, @(#) $Id: Protocol.html,v 1.7 2025/12/09 03:24:22 jigsaw Exp $
    libwww/Library/User/Using/Proxy.html0100644000076400001440000000751606562205412017202 0ustar danielusers Libwww Proxies and Gateways Setup

    W3C libwww Using

    Proxy Servers and Gateways

    Applications do not have to provide native support for all protocols, they can in many situations rely on the support of proxies and gateways to help doing the job. Proxy servers are often used to carry client requests through a firewall where they can provide services like corporate caching and other network optimizations. Both Proxy servers and gateways can serve as "protocol translators" which can convert a request in the main Web protocol, HTTP, to an equivalent request in another protocol, for example NNTP, FTP, or Gopher. In case a proxy server or a gateway is available to the application, it can therefore by use of HTTP forward all requests to for example a proxy server which then handle the communications with the remote server, for example using FTP about the document and return it to the application (proxy client) using HTTP.

    Libwww supports both proxies and gateways through the HTProxy module and all requests can be redirected to a proxy or a gateway, even requests on the local file system. Of course, the Library can also be used in proxy or gateway applications which in terms can use other proxies or gateways so that a single request can be passed through a series of intermediate agents.

    There is one main mechanism for registering both proxies and gateways but there are two different APIs to follow. It is free to the application to chose which one suits it the best, the functionality provided by the Library is the same in both cases. The first API is based on a set of registration functions as we have seen it so often through out this guide. Regardless of the registration mechanism used, proxy servers are always rated higher than gateways so if both a proxy server and a gateway is registered for the same access method, the proxy server will be used.

    DocumentationConstructors, Destructors and Methods

    Proxy Setup Using Environment Variables

    For backwards compatibility with most other Web clients, you can set up proxies and gateways using environment variables. This is generally discouraged as environment variables don't work on all platforms and they are only read at appplication startup. Using the HTProxy API allow you to change proxies and gateways dynamically at any time.

    On Unix, you can use a sh script like this to set up proxies and then start your application:

        #!/bin/sh
        http_proxy="http://your.proxy.server:8080/";    export http_proxy
        ftp_proxy="http://your.proxy.server:8080/";     export ftp_proxy
        gopher_proxy="http://your.proxy.server:8080/";  export gopher_proxy
        wais_proxy="http://your.proxy.server:8080/";    export wais_proxy
        no_proxy="cern.ch,ncsa.uiuc.edu,some.host:8080" export no_proxy
        exec webbot $@
    

    One way to do this under Win32 is to add the following lines to your system environment:

        set http_proxy=http://groucho.marx.edu:1028
        set no_proxy=harpo.marx.edu zeppo.marx.edu chico.marx.edu
    


    Henrik Frystyk Nielsen,
    @(#) $Id: Proxy.html,v 1.17 2025/08/06 01:46:50 frystyk Exp $
    libwww/Library/User/Using/Request.html0100644000076400001440000000643306252703152017506 0ustar danielusers The Request Class

    W3C libwww Using

    The Request Class

    Libwww is based on a request/response paradigm and the Request class defines "an operation to be performed on a URL". The request object is the main entry point for an application to issue a request to the Library - all operations on a URL must use a Request object. The request object is application independent in that both servers and clients use the same Request class. Examples of requests passed to the Library are a client application issuing a GET request on a HTTP URL, or a server issuing a load on a local file URL. The only difference is that the client gets the input from a user whereas the server gets the input via the network.

    A request object is created with a default set of parameters which are applicable for many URL requests but the class defines a huge set of methods that an be used to customize a request for a particular purpose. Example of things that you can define is natural language, media types, what RFC 822 headers to use, whether the request should be refreshed from cache etc. Scroll down and see the set of parameters you can tune.

    A request object is registered in the library by issuing an operation on a URL - for example PUT, POST, or DELETE. You can find many higher level "request issuing functions" in the Access module - the methods defined by the Request class itself are very low level but can of course be used directly if needed.

    Whereas the lifetime of the URL (in form of an anchor) often is very long (for example as long as the application is running), the lifetime of a request is limited to the time it takes to service the request. The core does not automatically delete any request object created by the application - it is for the application to do. In many cases a request object can be deleted when any of the termination callback functions are called but the application may keep request objects around longer than that

    The Library can accept an unlimited number of simultaneous requests passed by the application. One of the main functions of the Library core is to handle any number of ongoing requests in an intelligent manner by limiting the number of active request to the fit the available resources as defined by the application. This is described in more detail in the HTNet module.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen, libwww@w3.org, @(#) $Id: Request.html,v 1.15 2025/12/09 03:24:26 jigsaw Exp $
    libwww/Library/User/Using/Response.html0100644000076400001440000000340406252703154017651 0ustar danielusers The Response Class

    W3C libwww Using

    The Response Class

    The response object is created as a placeholder for the response received by the remote server. All filters can use the information stored in the response and act appropriately. This is often used by the AFTER filters which can handle authentication, redirection, etc. See the filter section for more information on this.

    The Response object is created automatically when we start to receive metainformation (for example MIME headers) and bound to the Request object. The Response object is deleted automatically when the corresponding request object is deleted but it can of course be deleted before if this is desired.

    Note that is using non-blocking sockets then libwww essentially behaves asynchronously as you may issue multiple requests and get back the responses out of order as they appear on the net interface.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Response.html,v 1.2 2025/12/09 03:24:28 jigsaw Exp $
    libwww/Library/User/Using/RuleSyntax.html0100644000076400001440000002155206653344543020205 0ustar danielusers User Guide - Rule File Syntax

    W3C libwww Using

    Rule File Syntax

    This section described the syntax of a rule file as supported by the Rule File Filter in libwww. Please read the section on Rule Files for a full description of the rule file API.

    File Suffix Bindings

    The W3C Sample Code Library can use suffixes to discover the content-type, content-encoding and content-language of a file. The Library contains a long list of commonly used file suffix types but the application doesn't have to use this. In any case, the following configuration directives can be used to add new suffix bindings and override existing defaults:

    • AddType - Filename suffix mappings to MIME Content-Types
    • AddEncoding - Filename suffix mappings to MIME Content-Encodings
    • AddLanguage - Multi language support, suffix mappings to different Content-Languages

    Binding Suffixes to MIME Content-Types

    As well as any mapping lines in the rule file, the rule file may be used to define the data types of files with particular suffixes. The Library has an extensive set of predefined suffixes, but applications do not need to use this. The syntax is:

    	AddType .suffix representation encoding [quality]
    

    The parameters are as follows:

    suffix
    The last part of the filename. There are two special cases. *.* matches to all files which have not been matched by any explicit suffixes but do contain a file suffix delimiter. A file suffix delimiter is often a dot <.> but it can be defined as an arbitrary character, please see the Suffix Binding Module for details. * by itself matches to any file which does not match any other suffix.

    representation
    A MIME Content-Type style description of the representation in fact in use in the file. See the HTTP spec. This need not be a real MIME type - it will only be used if it matches a type given by a client.

    encoding
    A MIME content transfer encoding type. Much more limited in variety than representations, basically whether the file is ASCII (7bit or 8bit) or binary. A few other encodings are allowed, and maybe extension to compression.

    quality
    Optional. A floating point number between 0.0 and 1.0 which determines the relative merits of files xxx.* which differ in their suffix only, when a link to xxx.multi is being resolved. User to 1.0.

    Examples

    	AddType	.html	text/html		8bit	1.0
    	AddType	.text	text/plain		7bit	0.9
    	AddType	.ps	application/postscript	8bit	1.0
    	AddType	*.*	application/binary	binary	0.1
    	AddType	*	text/plain		7bit
    

    Binding Suffixes to MIME Content-Encodings

    Suffixes are also used to determine the Content-Encoding of a file (.Z suffix for x-compressed, for example). Syntax is:

    	AddEncoding .suffix  encoding
    

    Example

    	AddEncoding .Z  x-compress
    

    Multi language Support

    Multi language support is also built on using suffixes to determine the language of a document. Suffix is bound to a language by AddLanguage rule (.en suffix for English, for example). Syntax is:

    	AddLanguage .suffix  encoding
    

    Examples

    	AddLanguage	.en	en
    	AddLanguage	.dk	dk
    

    External Viewers and Presenters

    In order to expand the set of content types that can be handled by an application, you can specify a set of external viewers which can handle specific content types. This is for example often the case for postscript viewers etc. This is quite similar to a mail cap file, but the Library doesn't have a real Mail cap file parser.

    	Presentation representation command [quality]
    

    Example

    	Presentation application/postscript	ghostview	0.5
    

    Proxy Servers and Gateways

    You can also specify proxies and gateway using the Library rule file. You can lao read more about how libwww handles proxies and gateways in the User's Guide.

    Proxies

    Proxies can be set up as follows:

    	Proxy		scheme	proxy
    

    And the parameters are:

    scheme
    The first part of a URL, for example http, ftp, or gopher. Remember that access schemes are case sensitive!
    proxy
    A full URL specifying where the application can go in order to access the resource. When saying a full URL, it means that you must use the normal URL syntax as specified by RFC 1831. Note in the example below that the access scheme differs from the scheme we want to proxy!

    Examples

    	Proxy	http	http://proxy.foo.com:8000/
    	Proxy	ftp	http://proxy.foo.com:8000/
    	Proxy	gopher	http://proxy.foo.com:8000/
    

    You can also specify a set of domains where we shouldn't go via a proxy server even though the rules indicated by the proxy directive above indicates that we should. Often you want to be able to handle a few exceptions from the proxy rule - especially if the remote host is either very close or on a high bandwidth connection.

    	NoProxy		hostname	scheme	port
    

    Registers a host name or a domain as a place where no proxy should be contacted - for example a very fast link. If port is not indicated then it applies to all ports.

    Gateways

    Gateways can be set much like proxies:

    	Gateway		scheme	gateway
    

    Examples

    	Gateway	wais	http://www.w3.org:8001/
    

    URL Mapping Rules

    Rules define the mapping between virtual URLs and physical file names. Currently the following rules are understood:

    • Map - Map URLs to actual files
    • Pass - Accept a request
    • Fail - Fail a request

    Mapping, Passing and Failing

    There are three main rules: Map, Pass and Fail. The server uses the top rule first, then each successive rule unless told otherwise by a Pass or a Fail rule.

    Map template result
    If the address matches the template, use the result string from now on for future rules.
    Pass template
    If the address matches the template, use it as it is, processing no further rules.
    Pass template result
    If the string matches the template, use the result string as it is, processing no further rules.
    Fail template
    If the address matches the template, prohibit access, processing no further rules.

    When matching,

    • Rules are scanned from the top of the file to the bottom.
    • If a request matches a Map template exactly, the result string is used instead of the original string and applied to successive rules.
    • If the request matches a Map template with wild card, then the text of the request which matches the wild card is inserted in place of the wild card in the result string to form the translated request. If the result string has no wild card, it is used as it is.
    • When a Map substitution takes place, the rule scan continues with the next rule using the new string in place of the request. This is not the case if a Pass or Fail is matched: they terminate the rule scan.


    Henrik Frystyk Nielsen,
    @(#) $Id: RuleSyntax.html,v 1.9 2025/01/26 13:55:47 frystyk Exp $
    libwww/Library/User/Using/Rules.html0100644000076400001440000000337006252703160017144 0ustar danielusers Rule File Filter

    W3C libwww Using

    Rule File Filter

    Libwww provides a BEFORE filter for handling configuration files (a.k.a. rule files). Rule files can be used to initialize as much as the application desires including setting up new protocol modules etc. Also the rules file do not have to be a file - it can be a database or any other way of storage information. The syntax of the rule files is described in the rule file syntax section of this manual.

    Parsing a rule file is done using a converter stream. This means that a rule file can come from anywhere, even across the network. We have defined a special content type for rule files called WWW_RULES in HTFormat. In some situations, a set of rules comes from a subset of a file or some other origin, for example INI files for X resources. In that case, you can also parse a single line from a rules file.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Rules.html,v 1.12 2025/12/09 03:24:32 jigsaw Exp $
    libwww/Library/User/Using/Startup.html0100644000076400001440000001060606720347013017515 0ustar danielusers Getting Started

    W3C libwww Using

    Getting Started

    This guide assumes that you have already compiled libwww and are ready to use it building an application. Libwww is divided into a set of packages containing various part of functionality. They all have a name starting with WWW - two of them are required to use in all libwww applications, the rest is optional:

    WWWUtil
    The WWW Utility module contains a lot of the functionality that makes it possible to make applications, that is container modules for data objects, basic string functionality etc. This module is the basis for all of the following modules and is used extensively.
    WWWCore
    The WWW Core module is a set of registration modules that glues an application together. It contains no real functionality in itself; it is for example not capable of loading an HTML document. It only provides a large set of hooks which can be used to add functionality to libwww and to give an application "real life". We will here a lot more to the structure of the core, and much of this guide is actually describing how to add functionality to the core.

    The application must explicitly initialize libwww before it can start using it so that the internal file descriptors, and variables can be set to their respective values. This only has to be done once while the application is running and is typically done when the application is started. The application also should close down libwww when it has stopped using it - typically when the application is closing down. Libwww will then return resources like file descriptors and dynamic memory to the operating system.

    Building your first Application

    Note: If you are on Unix and you have installed libwww then you can use the libwww-config script to make linking against libwww easier. In Windows MSVC you have to include the DLLs in your application project.

    The sample app above doesn't do anything whatsoever. There are now two ways you can go for intializing the features you need in libwww:

    Which method is right for you depends on your application and how much you want to get your feet wet. If you are in doubt then I would recommend using profiles.

    Adding Functionality

    Sometimes, profiles are not enough - you may need a combination of features that is not supported by a default profile. In this case, you may be able to take one of the profiles and then edit it to suit your needs. You can also have a look at the sample applications to get a better idea about which profiles can be used for what purposes.

    Fetching a Document from the Web

    Some operations that are often used is to get or save a document on the Web. There are already several sample applications that do this kind of thing - I recommend that you have a look at the libwww applications and see whether you can not start from there.


    Henrik Frystyk Nielsen,
    @(#) $Id: Startup.html,v 1.23 2025/05/18 20:31:07 frystyk Exp $
    libwww/Library/User/Using/Streams.html0100644000076400001440000000410106522436604017467 0ustar danielusers The Stream Class

    W3C libwww Using

    The Stream Class

    The Stream class defines objects which accepts a sequence of characters. Streams may also have an output in which case multiple stream objects can be cascaded to build a stream pipe where the output of a stream is directed into the input of the next stream object "down the line". Of course, one of the main features of streams is that they can perform a data conversion on the data before piping it to the output. As multiple streams may be cascaded, the complete data conversion is then the sum of each individual data conversion performed by the stream objects being part of the stream pipe.

    It is not required that a stream has a target, it might as well be a black hole that just accepts data without ever giving it out again. The generic stream class is subclassed multiple places in the Library and a good example is the structured stream definition which creates a SGML object.

    All stream class methods return an integer status code telling whether the operation succeeded or not.. This is the way for a stream to pass control information upstream to the caller which may also be a stream.

    DocumentationAdding and Deleting Format Converters


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Streams.html,v 1.15 2025/05/01 21:24:20 frystyk Exp $
    libwww/Library/User/Using/Timers.html0100644000076400001440000000452706632271176017333 0ustar danielusers The Timer Class

    W3C libwww Using

    Libwww Basic Timers

    The Timer class handles timer for libwww and the application. This works exactly as in X where you create a timer object with a callback function and a timeout. The callback will be called every time the timer expires.

    There are several timeouts that can be set in libwww:

    1. The time we keep an idle persistent connection open. Here there are in fact two mechanisms depending on whether you use blocking or non-blocking sockets. The default is 60 secs. The timers can be accessed using the functions defined in the HTHost object
    2. The idle time we want to wait when receiving a response from a server, that is, if it doesn't send anything in a number of secs. The default here is no timeout. It can be accessed in th HTHost obejct as well.
    3. The timeout before we flush pending requests in a pipeline, the default here is 30 ms. It is also accessed in the HTHost object
    4. The timeout before we start sending the body of a PUT or POST request. Normally we send the Expect: 100-continue header field but if the server doesn't send back a 100 Continue code then we upload the body anyway. The default is 2 secs and can be accessed in the HTTP module.

    DocumentationRegistrering and deleting Timers


    Henrik Frystyk Nielsen,
    @(#) $Id: Timers.html,v 1.2 2025/12/05 17:50:54 frystyk Exp $
    libwww/Library/User/Using/Transport.html0100644000076400001440000000377606252703170020061 0ustar danielusers The Transport Class

    W3C libwww Using

    The Transport Class

    The Transport Class defines a transport as used by the Channel class to communicate with the network, the local file system etc. New transport objects may be registered at any time. This allows the application to easily hook in its own transport layers. The purpose of the HTTransport object is to contain transport dependent methods for opening and closing a connection to the transport and also to get an input stream and an output stream for reading and writing to the transport respectively.

    Libwww does not define any default transport objects - they are all considered part of the application. Libwww comes with a default set of transports which can be initiated using the function HTTransportInit() in HTInit module

    All transport interfaces are registered dynamically in libwww. This means that libwww is independent of the transport being used (for example TCP) and you can therefore use libwww in any context you like. You have to specify a set of parameters in order for libwww to be able to use it.

    DocumentationConstructors, Destructors and Methods


    Henrik Frystyk Nielsen, libwww@w3.org,
    @(#) $Id: Transport.html,v 1.3 2025/12/09 03:24:40 jigsaw Exp $
    libwww/Library/User/Using/UserProfile.html0100644000076400001440000000221406252703172020310 0ustar danielusers Architecture - The User Profile Class

    W3C libwww Architecture

    The User Profile Class

    The User profile class manages what we know about a user on this host. This can for example be the FQDN of the host, the user's email address, the time zone, the news server etc. Note that this information does not correspond to the actual information for the host but instead represents "the information that the user wants to show the world". The user may use an arbitrary email address to be used in a HTTP request, for example. The application may assign a context to each use which gives the application to extend the use of this class.


    Henrik Frystyk, libwww@w3.org,

    @(#) $Id: UserProfile.html,v 1.2 2025/12/09 03:24:42 jigsaw Exp $

    libwww/Library/User/Using/Utils.html0100644000076400001440000000173106252703174017156 0ustar danielusers User Guide - The Library Utilities

    W3C libwww Using

    The Library Utilities

    The Library contains a set of basic utility modules which are used throughour all the Library code. The APIs defined by the WWWUtil.h include file provides basic memory management and container modules. You can see a list of the utility modules in the Library Internals


    Henrik Frystyk Nielsen,
    libwww@w3.org, @(#) $Id: Utils.html,v 1.6 2025/05/21 01:24:53 frystyk Exp $
    libwww/Library/User/Using/choppy.html0100644000076400001440000000563406301652353017363 0ustar danielusers Using the W3C Sample Code Library

    W3C libwww Using

    Using the W3C Sample Code Library

    WIP THIS HAS NOT BEEN REGENERATED!!!

    This guide describes the "user's view" of the W3C Sample Code Library. It concentrates on describing the API and how the application programmer can use the Library. It also describes who is responsible for memory management, how to initialize modules etc. Reading this guide should be sufficient in order to use the Library without being aware of exactly what is going on underneath the interface.

    NOTE This document is also available as one big HTML file intended for printout. Please note that not all links in this version work!

    Table of Contents

    1. Getting Started
    2. The Core
    3. Application Modules
    4. Utility Modules


    Henrik Frystyk, libwww@w3.org, @(#) $Id: choppy.html,v 1.24 2025/05/21 01:24:56 frystyk Exp $
    libwww/Library/User/Using/Makefile.in0100644000076400001440000001346607405520524017242 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Using/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User/Using distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Using/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Makefile0100644000076400001440000002464707405521137015554 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign noinst_PROGRAM = export DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = Patch Architecture Using Guide Style Platform BUILT_SOURCES = Extrnals.html SUFFIXES = .html DEPENDENCIES = ../src/libwww.la mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .html $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean Extrnals.html: (cd $(srcdir) && \ perl $(top_srcdir)/config/makeindx.pl ../src/ ../src/WWW*.html \ > $(srcdir)/Extrnals.html) export: Extrnals.html -rm $(srcdir)/Extrnals.html; (cd $(srcdir) && \ perl $(top_srcdir)/config/makeindx.pl ../src/ ../src/WWW*.html \ > $(srcdir)/Extrnals.html) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Makefile.in0100644000076400001440000002426407405520524016153 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign noinst_PROGRAM = export DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = Patch Architecture Using Guide Style Platform BUILT_SOURCES = Extrnals.html SUFFIXES = .html DEPENDENCIES = ../src/libwww.la mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .html $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean Extrnals.html: (cd $(srcdir) && \ perl $(top_srcdir)/config/makeindx.pl ../src/ ../src/WWW*.html \ > $(srcdir)/Extrnals.html) export: Extrnals.html -rm $(srcdir)/Extrnals.html; (cd $(srcdir) && \ perl $(top_srcdir)/config/makeindx.pl ../src/ ../src/WWW*.html \ > $(srcdir)/Extrnals.html) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/User/Extrnals.html0100644000076400001440000022747607405521137016607 0ustar danielusers Libwww Exported Functions

    Libwww Exported Functions

    Here is a list of all exported functions in the libwww API sorted by interface module. For more comprehensive descriptions, see the user documentation

    Sorted by Interface Collection

    WWWApp

    WWWCache

    WWWCore

    WWWDir

    WWWFTP

    WWWFile

    WWWGophe

    WWWHTML

    WWWHTTP

    WWWInit

    WWWLib

    WWWMIME

    WWWMux

    WWWNews

    WWWSQL

    WWWStream

    WWWTelnt

    WWWTrans

    WWWUtil

    WWWWAIS

    WWWXML

    WWWZip

    This list was generated automatily and may be regenerated at any time. Please see makeindx.pl script for instructions.


    Last Updated Tue Dec 11 19:18:39 EST 2001
    libwww/Library/contrib/0040755000076400001440000000000007405517350014626 5ustar danieluserslibwww/Library/contrib/CVS/0040755000076400001440000000000007405517350015261 5ustar danieluserslibwww/Library/contrib/CVS/Root0100644000076400001440000000005607405517350016125 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/contrib/CVS/Repository0100644000076400001440000000002707405517350017357 0ustar danieluserslibwww/Library/contrib libwww/Library/contrib/CVS/Entries0100644000076400001440000000000207405517350016602 0ustar danielusersD libwww/Library/cvs2sql/0040755000076400001440000000000007405521207014557 5ustar danieluserslibwww/Library/cvs2sql/CVS/0040755000076400001440000000000007405517351015217 5ustar danieluserslibwww/Library/cvs2sql/CVS/Root0100644000076400001440000000005607405517350016062 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/cvs2sql/CVS/Repository0100644000076400001440000000002707405517350017314 0ustar danieluserslibwww/Library/cvs2sql libwww/Library/cvs2sql/CVS/Entries0100644000076400001440000000026107405517351016547 0ustar danielusers/.cvsignore/1.1/Thu Sep 17 21:08:43 1998// /Makefile.am/1.4/Tue Apr 13 00:57:10 1999// /Overview.html/1.2/Tue Aug 11 13:33:23 1998// /cvs2sql.c/1.8/Mon Apr 12 19:00:32 1999// D libwww/Library/cvs2sql/CVS/Entries.Log0100644000076400001440000000002007405517351017260 0ustar danielusersA D/www-sql//// libwww/Library/cvs2sql/www-sql/0040755000076400001440000000000007405517351016205 5ustar danieluserslibwww/Library/cvs2sql/www-sql/CVS/0040755000076400001440000000000007405517351016640 5ustar danieluserslibwww/Library/cvs2sql/www-sql/CVS/Root0100644000076400001440000000005607405517351017504 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/cvs2sql/www-sql/CVS/Repository0100644000076400001440000000003707405517351020737 0ustar danieluserslibwww/Library/cvs2sql/www-sql libwww/Library/cvs2sql/www-sql/CVS/Entries0100644000076400001440000000013307405517351020166 0ustar danielusers/Overview.html/1.1/Thu Aug 6 18:41:00 1998// /latest.sql/1.8/Fri Jan 22 14:06:47 1999// D libwww/Library/cvs2sql/www-sql/Overview.html0100644000076400001440000000246506562374274020715 0ustar danielusers The Libwww CVS Source Tree Log Database

    W3C libwww

    The Libwww CVS Source Tree Log Database

    This is an example of a web-enabled interface to a MySQL database based on www-sql.

    The CVS to SQL log converter is a small libwww based program that comes as a standard part of the libwww source code base.

    Track Changes
    Here you can find which resources have changed in the CVS repository since when and what happpened.
    More to come

    Have fun!


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.1 2025/08/06 18:41:00 frystyk Exp $
    libwww/Library/cvs2sql/www-sql/latest.sql0100644000076400001440000000746506652102767020237 0ustar danielusers Latest libwww Changes Committed to CVS W3C libwww CVS Changes

    Latest libwww Changes Committed to CVS

    Here you can find all the libwww code changes after a certain date/time. If you haven't already then get the libwww code base directly from CVS. You can also browse the online libwww CVS repository directly - this may be easier if you are looking for changes to a specific file.

    If you already have checked out the code then you can get the latest changes by doing a CVS update and recompile the code.

    Discussions about libwww should happen on the <www-lib@w3.org> mailing list.

    In the last hours
    In the last day
    In the last week
    In the last 2 weeks
    In the last 4 weeks
    In the last 8 weeks

    from_unixtime(unix_timestamp(now())-$offset) and locations.id=logs.location and users.id=logs.username and comments.id=logs.comment order by logs.date DESC limit $cnt,10" q1 > \n" >
    Location User Last Checkin Time Operation Comment
    @q1.0 @q1.1 @q1.2 @q1.3@q1.4
    No match found.
    Prev" > Prev Next" > Next


    Henrik Frystyk Nielsen
    @(#) $Id: latest.sql,v 1.8 2025/01/22 14:06:47 frystyk Exp $
    libwww/Library/cvs2sql/.cvsignore0100644000076400001440000000003306600275133016550 0ustar danielusers.deps Makefile.in Makefile libwww/Library/cvs2sql/Makefile.am0100644000076400001440000000120706704513146016614 0ustar danielusers## Process this file with Automake to create Makefile.in. noinst_PROGRAMS = @CVS2SQL@ EXTRA_PROGRAMS = cvs2sql LDADD = \ ../src/libwwwinit.la \ ../src/libwwwapp.la \ @LIBWWWXML@ ../src/libwwwhtml.la \ ../src/libwwwtelnet.la \ ../src/libwwwnews.la \ ../src/libwwwhttp.la \ ../src/libwwwmime.la \ ../src/libwwwgopher.la \ ../src/libwwwftp.la \ ../src/libwwwfile.la \ ../src/libwwwdir.la \ ../src/libwwwcache.la \ ../src/libwwwstream.la \ ../src/libwwwmux.la \ ../src/libwwwtrans.la \ ../src/libwwwcore.la \ ../src/libwwwutils.la \ -lm @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ INCLUDES = \ -I$(srcdir)/../../Library/src libwww/Library/cvs2sql/Overview.html0100644000076400001440000000670206564044043017260 0ustar danielusers cvs2sql - a libwww based CVS to SQL commit log converter

    CVS to SQL Commit Log Converter

    In order to keep track of changes to the libwww CVS source tree, we use this handy tool which can be used in connection with CVS so that commitlog information is stored in a MySQL database. The advantage of this is that the SQL database can be searched using a variety of queries that makes it much easier to keep track of changes.

    The tool is completely generic so that it can be used with any CVS repository - as long as you have a MySQL server around somewhere!

    @(#) $Id: Overview.html,v 1.2 2025/08/11 13:33:23 frystyk Exp $


    The Basics

    Author(s)
    Henrik Frystyk Nielsen
    Status
    An example application for libwww and a tool for keeping it up-to-date
    Plans
    New releases follow the releases of libwww with no exception.
    Platforms
    It requires libwww to be compiled with support for MySQL access. Of course, it needs a MySQL server and a CVS Repository in order to be of any use.
    Getting the Source Code
    cvs2sql comes as an integral part of the libwww distribution package.
    Forums
    Discussions on libwww and its sample applications take place on <www-lib@w3.org> (archives). See the documentation for how to subscribe.

    How to Setup cvs2sql

    • Check the CVS manuals for how to use a program in connection with the logedit setup files

    Command Line Options

    Making the SQL Database Available via the Web

    We have a web-enabled interface to a MySQL database based on www-sql. The www-sql files (*.sql) are also part of the libwww source tree, so you get them when you check it out.


    Henrik Frystyk Nielsen,
    @(#) $Id: Overview.html,v 1.2 2025/08/11 13:33:23 frystyk Exp $
    libwww/Library/cvs2sql/cvs2sql.c0100644000076400001440000002762706704441320016331 0ustar danielusers/* ** W3C CVS To SQL Log Converter ** ** (c) COPRIGHT MIT 1999. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: cvs2sql.c,v 1.8 2025/04/12 19:00:32 frystyk Exp $ ** ** This program takes cvs log info via stdin and writes it to an SQL DB ** ** Author: ** Henrik Frystyk Nielsen, http://www.w3.org/People/Frystyk ** */ #include "WWWLib.h" /* Global Library Include file */ #include "WWWSQL.h" #include "HTextImp.h" #define APP_NAME "cvs2sql" #define APP_VERSION "1.0" #define DEFAULT_SQL_SERVER "localhost" #define DEFAULT_SQL_DB "cvs" #define DEFAULT_SQL_USER "none" #define DEFAULT_SQL_PW "none" #define DEFAULT_SQL_LOCATION_TABLE "locations" #define DEFAULT_SQL_USER_TABLE "users" #define DEFAULT_SQL_COMMENTS_TABLE "comments" #define DEFAULT_SQL_LOG_TABLE "logs" #define DEFAULT_SQL_KEY_TYPE "int unsigned not null" #define MAX_KEY_LENGTH 255 #define DEFAULT_CVS_USER "unknown" #define DELIMITERS " \n" #define BUFSIZE 8196 typedef enum _SQLFlags { SQL_CLEAR_LOCATION_TABLE = 0x1, SQL_DROP_LOCATION_TABLE = 0x2, SQL_CLEAR_USER_TABLE = 0x4, SQL_DROP_USER_TABLE = 0x8, SQL_CLEAR_COMMENTS_TABLE = 0x10, SQL_DROP_COMMENTS_TABLE = 0x20, SQL_CLEAR_LOG_TABLE = 0x40, SQL_DROP_LOG_TABLE = 0x80 } SQLFlags; /* ------------------------------------------------------------------------- */ PRIVATE void VersionInfo (void) { fprintf(stdout, "W3C Sample Software\n\n"); fprintf(stdout, "\t%s, W3C CVS Log to SQL converter version %s\n", APP_NAME, APP_VERSION); fprintf(stdout, "\tlibwww, W3C Sample Library version %s\n\n", HTLib_version()); fprintf(stdout, "Please send feedback to \n"); } PRIVATE void Cleanup (int status, HTSQL * sql, HTChunk * chunk) { HTChunk_delete(chunk); HTSQL_delete(sql); HTLibTerminate(); #ifdef VMS exit(status ? status : 1); #else exit(status ? status : 0); #endif } PRIVATE BOOL clear_table (HTSQL * me, const char * table) { if (me && table) { char buf[1024]; char * query = HTSQL_printf(buf, 1024, "delete from %s", table); return HTSQL_query(me, query); } return NO; } PRIVATE BOOL drop_table (HTSQL * me, const char * table) { if (me && table) { char buf[1024]; char * query = HTSQL_printf(buf, 1024, "drop table %s", table); return HTSQL_query(me, query); } return NO; } /* ** Create the three CVS tables if not already there ** location: filename, id ** user: username, id ** log: user_id, location_id, date, operation, message */ PRIVATE BOOL createTables (HTSQL * sql, SQLFlags flags) { if (sql) { char buf[1024]; char * query = NULL; /* Create location table */ /* If we have to delete it first */ if (flags & SQL_DROP_LOCATION_TABLE) drop_table(sql, DEFAULT_SQL_LOCATION_TABLE); query = HTSQL_printf(buf, 1024, "create table %s (id %s auto_increment, location varchar(%u) binary not null, primary key(id), unique(location), index loc_idx(location(32)))", DEFAULT_SQL_LOCATION_TABLE, DEFAULT_SQL_KEY_TYPE, MAX_KEY_LENGTH); HTSQL_query(sql, query); /* If we have to clear it out */ if (flags & SQL_CLEAR_LOCATION_TABLE) clear_table(sql, DEFAULT_SQL_LOCATION_TABLE); /* Create user table */ /* If we have to delete it first */ if (flags & SQL_DROP_USER_TABLE) drop_table(sql, DEFAULT_SQL_USER_TABLE); query = HTSQL_printf(buf, 1024, "create table %s (id %s auto_increment, username varchar(%u) binary not null, primary key(id), unique(username), index username_idx(username(32)))", DEFAULT_SQL_USER_TABLE, DEFAULT_SQL_KEY_TYPE, MAX_KEY_LENGTH); HTSQL_query(sql, query); /* If we have to clear it out */ if (flags & SQL_CLEAR_USER_TABLE) clear_table(sql, DEFAULT_SQL_USER_TABLE); /* Create comments table */ /* If we have to delete it first */ if (flags & SQL_DROP_COMMENTS_TABLE) drop_table(sql, DEFAULT_SQL_COMMENTS_TABLE); query = HTSQL_printf(buf, 1024, "create table %s (id %s auto_increment, comment text, primary key(id))", DEFAULT_SQL_COMMENTS_TABLE, DEFAULT_SQL_KEY_TYPE); HTSQL_query(sql, query); /* If we have to clear it out */ if (flags & SQL_CLEAR_COMMENTS_TABLE) clear_table(sql, DEFAULT_SQL_COMMENTS_TABLE); /* Create logs table */ /* If we have to delete it first */ if (flags & SQL_DROP_LOG_TABLE) drop_table(sql, DEFAULT_SQL_LOG_TABLE); query = HTSQL_printf(buf, 1024, "create table %s (location %s, username %s, date datetime, operation char(32), comment %s)", DEFAULT_SQL_LOG_TABLE, DEFAULT_SQL_KEY_TYPE, DEFAULT_SQL_KEY_TYPE, DEFAULT_SQL_KEY_TYPE); HTSQL_query(sql, query); /* If we have to clear it out */ if (flags & SQL_CLEAR_LOG_TABLE) clear_table(sql, DEFAULT_SQL_LOG_TABLE); /* All done */ return YES; } return NO; } PRIVATE int find_location(HTSQL * sql, const char * location) { int index = -1; if (sql && location) { char buf[4096]; char * query = NULL; MYSQL_RES * result = NULL; query = HTSQL_printf(buf, 4096, "select * from %s where location=%S", DEFAULT_SQL_LOCATION_TABLE, location); if (HTSQL_query(sql, query) && (result = HTSQL_storeResult(sql)) != NULL) { MYSQL_ROW row; if ((row = mysql_fetch_row(result)) && row[0]) index = atoi(row[0]); HTSQL_freeResult(result); } } return index; } PRIVATE int add_location (HTSQL * sql, const char * location) { if (sql && location) { int index = -1; /* If we can't find the LOCATION then add it */ if ((index = find_location(sql, location)) < 0) { char buf[4096]; char * query = HTSQL_printf(buf, 4096, "insert into %s (location) values (%S)", DEFAULT_SQL_LOCATION_TABLE, location); if (HTSQL_query(sql, query) != YES) { return -1; } index = HTSQL_getLastInsertId(sql); } return index; } return -1; } PRIVATE int find_user(HTSQL * sql, const char * user) { int index = -1; if (sql && user) { char buf[1024]; char * query = NULL; MYSQL_RES * result = NULL; query = HTSQL_printf(buf, 1024, "select * from %s where username=%S", DEFAULT_SQL_USER_TABLE, user); if (HTSQL_query(sql, query) && (result = HTSQL_storeResult(sql)) != NULL) { MYSQL_ROW row; if ((row = mysql_fetch_row(result)) && row[0]) index = atoi(row[0]); HTSQL_freeResult(result); } } return index; } PRIVATE int add_user (HTSQL * sql, const char * user) { if (sql && user) { int index = -1; /* If we can't find the USER then add it */ if ((index = find_user(sql, user)) < 0) { char buf[1024]; char * query = HTSQL_printf(buf, 1024, "insert into %s (username) values (%S)", DEFAULT_SQL_USER_TABLE, user); if (HTSQL_query(sql, query) != YES) { return -1; } index = HTSQL_getLastInsertId(sql); } return index; } return -1; } PRIVATE int add_comment (HTSQL * sql, const char * comment) { if (sql && comment) { char buf[8196]; char * query = HTSQL_printf(buf, 8196, "insert into %s (comment) values (%S)", DEFAULT_SQL_COMMENTS_TABLE, comment); if (HTSQL_query(sql, query) != YES) return -1; return HTSQL_getLastInsertId(sql); } return -1; } int main (int argc, char ** argv) { HTSQL * sql = NULL; char * sqlserver = DEFAULT_SQL_SERVER; char * sqldb = DEFAULT_SQL_DB; char * sqluser = DEFAULT_SQL_USER; char * sqlpw = DEFAULT_SQL_PW; char * cvsuser = DEFAULT_CVS_USER; time_t cvsdate = -1; FILE * fin = stdin; char * input_buffer[BUFSIZE]; HTChunk * loginfo = HTChunk_new(BUFSIZE); int arg = 0; BOOL create_db = YES; /* Initiate libwww */ HTLibInit(APP_NAME, APP_VERSION); /* Scan command line for parameters */ for (arg=1; argHTChunk_data(loginfo) && *p && *p!='\n'; p--); p++; operation = HTNextField(&p); /* Find the next line */ if ((q = strchr(files, '\n')) != NULL) { *q++ = '\0'; ptr = q; } /* Create the query */ if (operation && files && comment) { char * file; int location_id = -1; #ifdef HT_REENTRANT if ((file = strtok_r(files, DELIMITERS, &lasts)) != NULL) { #else if ((file = strtok(files, DELIMITERS)) != NULL) { #endif /* HT_REENTRANT */ do { char * path = NULL; StrAllocMCopy(&path, root, "/", file, NULL); /* Add/find location and get id */ if ((location_id = add_location(sql, path)) < 0) { Cleanup(-1, sql, loginfo); break; } #if 0 fprintf(stderr, "location: `%s\', user: `%s\', operation: `%s\', comment: `%s\'\n", path, cvsuser, operation, comment); #endif /* Add log entry */ { char buf[16384]; char * query = HTSQL_printf(buf, 16384, "insert into %s values (%u,%u,%T,%S,%u)", DEFAULT_SQL_LOG_TABLE, location_id, user_id, cvsdate, operation, comment_id); if (HTSQL_query(sql, query) != YES) { Cleanup(-1, sql, loginfo); break; } } HT_FREE(path); #ifdef HT_REENTRANT } while ((file = (char *) strtok_r(NULL, DELIMITERS, &lasts)) != NULL); #else } while ((file = strtok(NULL, DELIMITERS)) != NULL); #endif /* HT_REENTRANT */ } } } } return 0; } libwww/Library/cvs2sql/Makefile0100644000076400001440000002515707405520573016233 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ noinst_PROGRAMS = EXTRA_PROGRAMS = cvs2sql LDADD = ../src/libwwwinit.la ../src/libwwwapp.la ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la ../src/libwwwftp.la ../src/libwwwfile.la ../src/libwwwdir.la ../src/libwwwcache.la ../src/libwwwstream.la ../src/libwwwmux.la ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la -lm ${top_builddir}/modules/md5/libmd5.la INCLUDES = -I$(srcdir)/../../Library/src mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = noinst_PROGRAMS = PROGRAMS = $(noinst_PROGRAMS) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../.. CPPFLAGS = LDFLAGS = LIBS = -ldl cvs2sql_SOURCES = cvs2sql.c cvs2sql_OBJECTS = cvs2sql.o cvs2sql_LDADD = $(LDADD) cvs2sql_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwfile.la ../src/libwwwdir.la \ ../src/libwwwcache.la ../src/libwwwstream.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la cvs2sql_LDFLAGS = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/cvs2sql.P SOURCES = cvs2sql.c OBJECTS = cvs2sql.o all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/cvs2sql/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstPROGRAMS: clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) distclean-noinstPROGRAMS: maintainer-clean-noinstPROGRAMS: .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: cvs2sql$(EXEEXT): $(cvs2sql_OBJECTS) $(cvs2sql_DEPENDENCIES) @rm -f cvs2sql$(EXEEXT) $(LINK) $(cvs2sql_LDFLAGS) $(cvs2sql_OBJECTS) $(cvs2sql_LDADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/cvs2sql distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/cvs2sql/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(PROGRAMS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstPROGRAMS distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/cvs2sql/Makefile.in0100644000076400001440000002442407405520525016631 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ noinst_PROGRAMS = @CVS2SQL@ EXTRA_PROGRAMS = cvs2sql LDADD = ../src/libwwwinit.la ../src/libwwwapp.la @LIBWWWXML@ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la ../src/libwwwftp.la ../src/libwwwfile.la ../src/libwwwdir.la ../src/libwwwcache.la ../src/libwwwstream.la ../src/libwwwmux.la ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la -lm @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ INCLUDES = -I$(srcdir)/../../Library/src mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = noinst_PROGRAMS = @CVS2SQL@ PROGRAMS = $(noinst_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ cvs2sql_SOURCES = cvs2sql.c cvs2sql_OBJECTS = cvs2sql.o cvs2sql_LDADD = $(LDADD) cvs2sql_DEPENDENCIES = ../src/libwwwinit.la ../src/libwwwapp.la \ ../src/libwwwhtml.la ../src/libwwwtelnet.la ../src/libwwwnews.la \ ../src/libwwwhttp.la ../src/libwwwmime.la ../src/libwwwgopher.la \ ../src/libwwwftp.la ../src/libwwwfile.la ../src/libwwwdir.la \ ../src/libwwwcache.la ../src/libwwwstream.la ../src/libwwwmux.la \ ../src/libwwwtrans.la ../src/libwwwcore.la ../src/libwwwutils.la cvs2sql_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/cvs2sql.P SOURCES = cvs2sql.c OBJECTS = cvs2sql.o all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/cvs2sql/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstPROGRAMS: clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) distclean-noinstPROGRAMS: maintainer-clean-noinstPROGRAMS: .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: cvs2sql$(EXEEXT): $(cvs2sql_OBJECTS) $(cvs2sql_DEPENDENCIES) @rm -f cvs2sql$(EXEEXT) $(LINK) $(cvs2sql_LDFLAGS) $(cvs2sql_OBJECTS) $(cvs2sql_LDADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/cvs2sql distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/cvs2sql/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(PROGRAMS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstPROGRAMS distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/cvs2sql/.deps/0040755000076400001440000000000007405521207015570 5ustar danieluserslibwww/Library/src/0040755000076400001440000000000007422617430013754 5ustar danieluserslibwww/Library/src/CVS/0040755000076400001440000000000007405517374014416 5ustar danieluserslibwww/Library/src/CVS/Root0100644000076400001440000000005607405517351015255 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/src/CVS/Repository0100644000076400001440000000002307405517351016503 0ustar danieluserslibwww/Library/src libwww/Library/src/CVS/Entries0100644000076400001440000002731007405517374015752 0ustar danielusers/.cvsignore/2.7/Thu Aug 10 16:22:53 2000// /HTAABrow.c/2.60/Wed Mar 14 16:25:50 2001// /HTAABrow.html/2.31/Wed Jan 27 08:52:02 1999// /HTAAUtil.c/2.35/Mon Feb 22 22:10:10 1999// /HTAAUtil.html/2.38/Wed Jan 27 08:52:02 1999// /HTANSI.c/2.8/Mon Feb 22 22:10:10 1999// /HTANSI.html/2.7/Thu May 14 02:10:10 1998// /HTAccess.c/1.159/Fri Sep 1 12:58:40 2000// /HTAccess.html/2.89/Thu Dec 17 01:51:01 1998// /HTAlert.c/2.53/Mon Feb 22 22:10:10 1999// /HTAlert.html/2.56/Wed Jun 30 20:15:03 1999// /HTAncMan.html/2.14/Thu Mar 5 21:56:09 1998// /HTAnchor.c/1.89/Tue Mar 6 16:25:09 2001// /HTAnchor.html/2.61/Fri Aug 4 09:14:58 2000// /HTArray.c/2.7/Mon May 4 19:36:13 1998// /HTArray.html/2.8/Mon Aug 7 10:38:05 2000// /HTAssoc.c/2.21/Thu Oct 21 09:28:27 1999// /HTAssoc.html/2.18/Sun Apr 18 20:17:44 1999// /HTAtom.c/2.31/Mon Feb 22 22:10:10 1999// /HTAtom.html/2.27/Tue Jul 4 15:23:24 2000// /HTBInit.c/2.15/Sun Apr 18 20:18:11 1999// /HTBInit.html/2.7/Thu May 14 02:10:16 1998// /HTBTree.c/2.25/Tue Jan 19 11:41:11 1999// /HTBTree.html/2.19/Thu May 14 02:10:16 1998// /HTBind.c/2.34/Wed Aug 9 10:43:08 2000// /HTBind.html/2.18/Wed Jun 30 21:05:13 1999// /HTBound.c/2.14/Mon Feb 22 22:10:10 1999// /HTBound.html/2.5/Thu May 14 02:10:17 1998// /HTBufWrt.c/2.27/Mon May 3 15:58:33 1999// /HTBufWrt.html/2.6/Sun Apr 4 00:12:00 1999// /HTCache.c/2.76/Thu Aug 30 13:49:24 2001// /HTCache.html/2.25/Thu Aug 30 13:41:03 2001// /HTChannl.c/2.26/Fri Jun 23 14:27:34 2000// /HTChannl.html/2.12/Wed Jul 7 15:43:28 1999// /HTChunk.c/2.27/Fri Sep 1 13:47:14 2000// /HTChunk.html/2.39/Fri Sep 1 13:47:14 2000// /HTConLen.c/2.20/Mon Jun 19 13:43:33 2000// /HTConLen.html/2.8/Thu May 14 02:10:21 1998// /HTCookie.c/2.5/Sat Jul 31 01:30:16 1999// /HTCookie.html/2.3/Sat Jul 31 01:30:16 1999// /HTDNS.c/2.31/Thu Jan 6 10:48:50 2000// /HTDNS.html/2.19/Fri Feb 5 17:49:50 1999// /HTDemux.c/2.3/Mon Feb 22 22:10:11 1999// /HTDemux.html/2.3/Thu May 14 02:10:21 1998// /HTDescpt.c/2.19/Mon Feb 22 22:10:11 1999// /HTDescpt.html/2.13/Thu May 14 02:10:22 1998// /HTDialog.c/2.35/Mon Mar 1 13:39:31 1999// /HTDialog.html/2.9/Thu Apr 1 19:35:39 1999// /HTDigest.c/2.2/Fri Feb 5 17:31:45 1999// /HTDigest.html/2.3/Mon Feb 22 15:54:19 1999// /HTDir.c/2.23/Tue Jun 27 10:06:59 2000// /HTDir.html/2.5/Thu May 14 02:10:23 1998// /HTEPtoCl.c/2.8/Mon May 4 19:36:26 1998// /HTEPtoCl.html/2.14/Sun Feb 14 04:00:10 1999// /HTError.c/2.46/Mon Feb 22 22:10:11 1999// /HTError.html/2.50/Thu Apr 1 19:35:39 1999// /HTEscape.c/2.21/Mon Feb 22 22:10:11 1999// /HTEscape.html/2.17/Sun May 24 23:03:13 1998// /HTEvent.c/2.9/Mon Feb 22 22:10:11 1999// /HTEvent.html/2.17/Mon Aug 10 02:42:12 1998// /HTEvtLst.c/2.45/Wed Aug 2 10:38:07 2000// /HTEvtLst.html/2.7/Sat Nov 21 02:44:42 1998// /HTFSave.c/2.4/Sat May 22 18:23:32 1999// /HTFSave.html/2.1/Sun Feb 7 18:26:23 1999// /HTFTP.c/1.109/Wed Aug 9 10:43:08 2000// /HTFTP.html/2.40/Tue May 19 16:49:26 1998// /HTFTPDir.c/2.18/Mon Feb 22 22:10:11 1999// /HTFTPDir.html/2.5/Thu May 14 02:10:27 1998// /HTFWrite.c/2.46/Mon Feb 22 22:10:11 1999// /HTFWrite.html/2.23/Sun Feb 7 18:26:23 1999// /HTFile.c/1.158/Thu Aug 10 16:05:39 2000// /HTFile.html/2.40/Thu May 14 02:10:28 1998// /HTFilter.c/2.38/Wed Mar 31 00:53:31 1999// /HTFilter.html/2.13/Wed Feb 3 16:35:11 1999// /HTFormat.c/1.100/Mon Feb 22 22:10:11 1999// /HTFormat.html/2.85/Mon Dec 18 17:00:56 2000// /HTGopher.c/2.68/Wed Jul 7 15:43:28 1999// /HTGopher.html/2.27/Thu May 14 02:10:30 1998// /HTGuess.c/2.36/Mon Feb 22 22:10:11 1999// /HTGuess.html/2.18/Thu May 14 02:10:31 1998// /HTHInit.c/2.3/Mon May 4 19:36:40 1998// /HTHInit.html/2.4/Thu May 14 02:10:31 1998// /HTHash.c/1.2/Fri Aug 11 07:49:07 2000// /HTHash.html/1.2/Fri Aug 11 07:49:07 2000// /HTHeader.c/2.13/Sun Feb 7 18:20:31 1999// /HTHeader.html/2.13/Sun Feb 7 18:20:31 1999// /HTHist.c/2.9/Mon May 4 19:36:42 1998// /HTHist.html/2.14/Thu May 14 02:10:32 1998// /HTHome.c/2.38/Fri Jul 28 08:16:56 2000// /HTHome.html/2.19/Tue Jul 4 15:19:45 2000// /HTHost.c/2.72/Fri Jul 28 13:56:08 2000// /HTHost.html/2.29/Wed Jul 7 15:43:28 1999// /HTHstMan.html/2.19/Fri Jul 28 13:52:23 2000// /HTIOStream.html/2.6/Sun Apr 4 00:12:00 1999// /HTIcons.c/2.30/Tue Jan 4 20:25:32 2000// /HTIcons.html/2.25/Tue Jan 4 20:25:32 2000// /HTInet.c/2.28/Thu Jan 6 10:48:50 2000// /HTInet.html/2.11/Tue Sep 22 23:56:01 1998// /HTInit.c/2.100/Mon Dec 18 17:00:56 2000// /HTInit.html/2.55/Tue Jul 4 15:14:45 2000// /HTLib.c/2.17/Tue Jun 22 22:40:48 1999// /HTLib.html/2.7/Wed Jul 12 10:44:41 2000// /HTLink.c/2.4/Tue Mar 2 21:09:42 1999// /HTLink.html/2.6/Mon Mar 29 15:51:44 1999// /HTList.c/2.33/Thu Jun 15 13:48:44 2000// /HTList.html/2.34/Thu Jun 15 13:48:44 2000// /HTLocal.c/2.13/Sun Mar 14 02:22:21 1999// /HTLocal.html/2.6/Tue Feb 29 14:32:15 2000// /HTLog.c/2.24/Mon Feb 22 22:10:11 1999// /HTLog.html/2.17/Thu May 14 02:10:40 1998// /HTMIME.c/2.101/Mon Dec 18 17:00:56 2000// /HTMIME.html/2.32/Mon Dec 18 17:00:56 2000// /HTMIMERq.c/2.42/Mon Feb 22 22:10:11 1999// /HTMIMERq.html/2.6/Thu May 14 02:10:41 1998// /HTMIMImp.c/2.26/Mon Feb 22 22:10:11 1999// /HTMIMImp.html/2.11/Wed Dec 16 10:59:08 1998// /HTMIMPrs.c/2.11/Fri Jul 28 10:27:15 2000// /HTMIMPrs.html/2.8/Thu May 14 02:10:42 1998// /HTML.c/1.81/Wed Aug 9 10:43:08 2000// /HTML.html/2.36/Wed Jan 6 15:38:47 1999// /HTMLGen.c/2.45/Mon Feb 22 22:10:11 1999// /HTMLGen.html/2.23/Thu May 14 02:10:43 1998// /HTMLPDTD.c/2.32/Thu Jul 22 23:57:44 1999// /HTMLPDTD.html/2.32/Thu Jan 6 10:48:50 2000// /HTMemLog.c/2.21/Mon Feb 22 22:10:11 1999// /HTMemLog.html/2.6/Thu May 14 02:10:44 1998// /HTMemory.c/2.10/Mon Feb 22 22:10:11 1999// /HTMemory.html/2.12/Thu May 14 02:10:45 1998// /HTMerge.c/2.3/Mon Feb 22 22:10:11 1999// /HTMerge.html/2.3/Thu May 14 02:10:45 1998// /HTMethod.c/2.6/Mon May 4 19:37:00 1998// /HTMethod.html/2.16/Thu May 14 02:10:45 1998// /HTMulpar.html/2.6/Thu May 14 02:10:46 1998// /HTMulti.c/2.36/Thu Jan 6 10:48:50 2000// /HTMulti.html/2.17/Thu May 14 02:10:46 1998// /HTMuxCh.c/2.4/Mon Feb 22 22:10:11 1999// /HTMuxCh.html/2.5/Fri Aug 4 10:37:51 2000// /HTMuxHeader.html/2.3/Thu May 14 02:10:48 1998// /HTMuxTx.c/2.3/Mon Feb 22 22:10:11 1999// /HTMuxTx.html/2.3/Thu May 14 02:10:48 1998// /HTNDir.c/2.12/Mon Feb 22 22:10:11 1999// /HTNDir.html/2.8/Thu May 14 02:10:50 1998// /HTNet.c/2.106/Tue Jul 4 15:26:25 2000// /HTNet.html/2.57/Tue Jul 4 15:18:51 2000// /HTNetMan.html/2.25/Thu Sep 24 19:48:52 1998// /HTNetTxt.c/2.10/Mon May 4 19:37:07 1998// /HTNetTxt.html/2.11/Sun Feb 14 04:00:10 1999// /HTNews.c/2.68/Wed Aug 9 10:43:08 2000// /HTNews.html/2.29/Thu May 14 02:10:52 1998// /HTNewsLs.c/2.18/Mon Feb 22 22:10:11 1999// /HTNewsLs.html/2.7/Thu May 14 02:10:53 1998// /HTNewsRq.c/2.14/Mon Feb 22 22:10:11 1999// /HTNewsRq.html/2.5/Thu May 14 02:10:53 1998// /HTNoFree.c/2.1/Mon Feb 1 18:41:11 1999// /HTNoFree.html/2.1/Mon Feb 1 18:41:11 1999// /HTPEP.c/2.7/Mon Feb 22 22:10:11 1999// /HTPEP.html/2.5/Thu May 14 02:10:54 1998// /HTParse.c/2.80/Mon Feb 22 22:10:11 1999// /HTParse.html/2.39/Fri Aug 4 08:10:53 2000// /HTPlain.c/2.27/Fri Aug 11 07:56:51 2000// /HTPlain.html/2.20/Thu May 14 02:10:55 1998// /HTProfil.c/2.30/Tue Aug 14 16:15:50 2001// /HTProfil.html/2.8/Wed Jul 12 10:44:41 2000// /HTProt.c/2.21/Sun Apr 4 00:09:14 1999// /HTProt.html/2.25/Wed Dec 1 13:07:07 1999// /HTProxy.c/2.21/Tue Feb 29 14:25:59 2000// /HTProxy.html/2.14/Tue Feb 29 14:25:59 2000// /HTRDF.c/2.12/Wed Aug 30 13:01:57 2000// /HTRDF.html/2.7/Wed Aug 30 13:01:57 2000// /HTReader.c/2.31/Tue Jul 11 09:15:28 2000// /HTReader.html/2.6/Thu May 14 02:10:57 1998// /HTReq.html/2.68/Wed Jul 12 10:44:41 2000// /HTReqMan.c/2.81/Wed Aug 2 10:38:07 2000// /HTReqMan.html/2.45/Tue Feb 29 14:23:17 2000// /HTResMan.html/2.7/Mon Oct 30 10:04:23 2000// /HTResponse.c/2.12/Mon Oct 30 10:04:23 2000// /HTResponse.html/2.14/Tue Dec 19 11:21:29 2000// /HTRules.c/2.61/Mon Feb 22 22:10:12 1999// /HTRules.html/2.37/Mon Aug 10 17:05:18 1998// /HTSChunk.c/2.7/Mon Feb 22 22:10:12 1999// /HTSChunk.html/2.4/Thu May 14 02:11:03 1998// /HTSQL.c/2.2/Mon Feb 22 22:10:12 1999// /HTSQL.html/2.1/Tue May 19 16:49:38 1998// /HTSQLLog.c/2.3/Mon Feb 22 22:10:12 1999// /HTSQLLog.html/2.4/Tue May 19 16:49:40 1998// /HTSocket.c/2.35/Wed Jul 7 15:43:28 1999// /HTSocket.html/2.26/Thu May 14 02:11:05 1998// /HTStream.c/2.4/Fri Sep 18 12:57:30 1998// /HTStream.html/2.24/Thu May 14 02:11:05 1998// /HTString.c/2.46/Fri Sep 10 00:44:31 1999// /HTString.html/2.38/Sat Jul 31 01:27:55 1999// /HTStruct.html/2.13/Wed Jan 6 15:38:47 1999// /HTStyle.c/2.26/Mon Feb 22 22:10:12 1999// /HTStyle.html/2.29/Wed Jan 6 15:38:48 1999// /HTTCP.c/2.119/Wed Aug 2 10:48:12 2000// /HTTCP.html/2.44/Wed Jul 7 15:43:28 1999// /HTTChunk.c/2.16/Mon Feb 22 22:10:12 1999// /HTTChunk.html/2.4/Thu May 14 02:11:09 1998// /HTTP.c/1.190/Mon Oct 30 10:04:23 2000// /HTTP.html/2.40/Tue Feb 29 16:34:15 2000// /HTTPGen.c/2.17/Fri Mar 19 14:24:37 1999// /HTTPGen.html/2.7/Thu May 14 02:11:10 1998// /HTTPReq.c/2.62/Thu Aug 30 13:41:03 2001// /HTTPReq.html/2.13/Thu May 14 02:11:11 1998// /HTTPRes.c/2.14/Mon Feb 22 22:10:12 1999// /HTTPRes.html/2.8/Thu May 14 02:11:12 1998// /HTTPServ.c/2.26/Mon Feb 22 22:10:12 1999// /HTTPServ.html/2.7/Thu May 14 02:11:12 1998// /HTTPUtil.html/2.7/Sun Feb 16 18:43:07 1997// /HTTeXGen.c/2.28/Fri Apr 2 16:10:36 1999// /HTTeXGen.html/2.19/Thu May 14 02:11:13 1998// /HTTee.c/2.20/Mon Feb 22 22:10:12 1999// /HTTee.html/2.16/Thu May 14 02:11:13 1998// /HTTelnet.c/2.41/Mon Feb 22 22:10:12 1999// /HTTelnet.html/2.24/Thu May 14 02:11:14 1998// /HTTimer.c/2.28/Tue Mar 6 09:34:04 2001// /HTTimer.html/2.11/Wed Jun 30 21:05:13 1999// /HTTrace.c/2.8/Mon Feb 22 22:10:12 1999// /HTTrans.c/2.8/Sun Apr 4 00:09:14 1999// /HTTrans.html/2.8/Tue Jul 4 15:11:35 2000// /HTUTree.c/2.6/Mon Feb 22 22:10:12 1999// /HTUTree.html/2.3/Thu May 14 02:11:15 1998// /HTUU.c/2.14/Fri Jun 16 08:07:23 2000// /HTUU.html/2.14/Thu May 14 02:11:15 1998// /HTUser.c/2.6/Sun Apr 25 00:02:47 1999// /HTUser.html/2.4/Thu May 14 02:11:16 1998// /HTUtils.html/2.92/Thu Jan 6 10:48:50 2000// /HTWAIS.c/2.58/Mon Feb 22 22:10:12 1999// /HTWAIS.html/2.27/Thu May 14 02:11:17 1998// /HTWSRC.c/2.37/Mon Feb 22 22:10:12 1999// /HTWSRC.html/2.18/Thu May 14 02:11:17 1998// /HTWWWStr.c/2.36/Thu Jan 6 10:48:50 2000// /HTWWWStr.html/2.17/Wed Mar 24 16:26:57 1999// /HTWriter.c/2.56/Fri Jun 23 14:22:43 2000// /HTWriter.html/2.23/Thu May 14 02:11:18 1998// /HTXML.c/2.9/Tue Dec 19 08:53:43 2000// /HTXML.html/2.6/Thu Aug 30 11:36:41 2001// /HTXParse.c/2.21/Mon Feb 22 22:10:12 1999// /HTXParse.html/2.14/Sun Feb 14 04:00:10 1999// /HTZip.c/2.8/Mon Feb 22 22:10:12 1999// /HTZip.html/2.5/Thu May 14 02:11:20 1998// /HText.c/2.4/Sun Feb 7 18:09:27 1999// /HText.html/2.32/Wed Jan 6 15:38:48 1999// /HTextImp.html/2.3/Wed Jan 6 15:38:48 1999// /Makefile.am/2.55/Tue Jun 20 11:01:34 2000// /SGML.c/1.53/Tue May 18 21:38:57 1999// /SGML.html/2.30/Fri Apr 2 16:10:36 1999// /WWWApp.html/2.21/Sun May 24 19:39:40 1998// /WWWCache.html/2.8/Mon May 4 19:37:47 1998// /WWWCore.html/2.21/Sun Feb 7 18:31:24 1999// /WWWDir.html/2.10/Mon May 4 19:37:48 1998// /WWWFTP.html/2.7/Mon May 4 19:37:49 1998// /WWWFile.html/2.11/Tue Jul 4 15:08:14 2000// /WWWGophe.html/2.6/Mon May 4 19:37:50 1998// /WWWHTML.html/2.11/Mon Feb 22 23:29:45 1999// /WWWHTTP.html/2.14/Wed Mar 24 16:28:16 1999// /WWWInit.html/2.11/Tue Mar 30 22:31:58 1999// /WWWLib.html/2.29/Mon May 4 19:37:52 1998// /WWWMIME.html/2.11/Thu May 14 02:11:22 1998// /WWWMux.html/2.4/Wed Jul 22 19:25:52 1998// /WWWNews.html/2.7/Mon May 4 19:37:55 1998// /WWWSQL.html/2.1/Sun May 24 19:39:40 1998// /WWWStream.html/2.10/Sun Feb 14 04:00:10 1999// /WWWTelnt.html/2.6/Mon May 4 19:37:56 1998// /WWWTrans.html/2.5/Mon May 4 19:37:57 1998// /WWWUtil.html/2.12/Mon May 4 19:37:57 1998// /WWWWAIS.html/2.8/Mon May 4 19:37:58 1998// /WWWXML.html/2.3/Sun Apr 18 20:24:41 1999// /WWWZip.html/2.5/Sun May 24 19:39:40 1998// /wwwsys.html/2.125/Tue Jul 11 09:18:38 2000// D libwww/Library/src/CVS/Entries.Log0100644000076400001440000000005007405517376016464 0ustar danielusersA D/SSL//// A D/vms//// A D/windows//// libwww/Library/src/SSL/0040755000076400001440000000000007405520673014420 5ustar danieluserslibwww/Library/src/SSL/CVS/0040755000076400001440000000000007405517374015057 5ustar danieluserslibwww/Library/src/SSL/CVS/Root0100644000076400001440000000005607405517374015723 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/src/SSL/CVS/Repository0100644000076400001440000000002707405517374017155 0ustar danieluserslibwww/Library/src/SSL libwww/Library/src/SSL/CVS/Entries0100644000076400001440000000104107405517374016404 0ustar danielusers/.cvsignore/1.1/Sun Apr 4 00:06:01 1999// /HTSSL.c/1.6/Thu Aug 3 16:17:20 2000// /HTSSL.html/1.3/Thu Aug 3 10:53:08 2000// /HTSSLMan.html/1.1/Fri Jun 9 16:28:57 2000// /HTSSLReader.c/1.2/Mon Jul 31 10:39:23 2000// /HTSSLReader.html/1.1/Fri Jun 9 16:28:57 2000// /HTSSLWriter.c/1.2/Mon Jul 31 10:39:23 2000// /HTSSLWriter.html/1.1/Fri Jun 9 16:28:57 2000// /HTSSLhttps.c/1.1/Fri Jun 9 16:28:57 2000// /HTSSLhttps.html/1.1/Fri Jun 9 16:28:57 2000// /Makefile.am/1.2/Tue Jun 20 11:01:34 2000// /WWWSSL.html/1.1/Fri Jun 9 16:28:57 2000// D libwww/Library/src/SSL/CVS/Entries.Log0100644000076400001440000000002007405517374017120 0ustar danielusersA D/windows//// libwww/Library/src/SSL/windows/0040755000076400001440000000000007405520572016110 5ustar danieluserslibwww/Library/src/SSL/windows/CVS/0040755000076400001440000000000007405517374016551 5ustar danieluserslibwww/Library/src/SSL/windows/CVS/Root0100644000076400001440000000005607405517374017415 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/src/SSL/windows/CVS/Repository0100644000076400001440000000003707405517374020650 0ustar danieluserslibwww/Library/src/SSL/windows libwww/Library/src/SSL/windows/CVS/Entries0100644000076400001440000000026107405517374020101 0ustar danielusers/Makefile.am/1.1/Fri Jun 9 16:33:53 2000// /wwwdll.def/1.1/Fri Jun 9 16:33:53 2000// /wwwssl.def/1.3/Thu Aug 3 10:53:08 2000// /wwwssl.files/1.1/Fri Jun 9 16:33:53 2000// D libwww/Library/src/SSL/windows/Makefile0100644000076400001440000001542107405520572017550 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ SUFFIXES = .files .def SRC := $(wildcard *.c) MAK := $(wildcard *.mak) FLS := $(wildcard *.files) BUILT_SOURCES = wwwssl.def EXTRA_DIST = $(BUILT_SOURCES) wwwdll.def $(SRC) $(FLS) $(MAK) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../../wwwconf.h CONFIG_CLEAN_FILES = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .def .files $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/src/SSL/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src/SSL/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/src/SSL/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean def-clean: test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) def: $(BUILT_SOURCES) .files.def: perl $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/src/SSL/windows/Makefile.am0100644000076400001440000000074607120216161020136 0ustar danielusers## Process this file with Automake to create Makefile.in. SUFFIXES = .files .def SRC := $(wildcard *.c) MAK := $(wildcard *.mak) FLS := $(wildcard *.files) BUILT_SOURCES = \ wwwssl.def EXTRA_DIST = \ $(BUILT_SOURCES) \ wwwdll.def \ $(SRC) \ $(FLS) \ $(MAK) def-clean: test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) def: $(BUILT_SOURCES) .files.def: perl $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def libwww/Library/src/SSL/windows/wwwdll.def0100644000076400001440000000027107120216161020073 0ustar danielusers;LIBRARY htdll DESCRIPTION 'Core functions from the wwwlib.' EXPORTS ;HTDLL.c ;PpTTYPrint = PTTYPrint @ 801 NONAME CONSTANT PTTYPrint @ 801 CONSTANT WWW_TraceFlag @ 802 CONSTANT libwww/Library/src/SSL/windows/wwwssl.def0100644000076400001440000000106707405520456020140 0ustar danielusersEXPORTS ;HTSSL.c @ 100 HTSSL_protMethod_set @ 101 HTSSL_protMethod @ 102 HTSSL_verifyDepth_set @ 103 HTSSL_verifyDepth @ 104 HTSSL_init @ 105 HTSSL_terminate @ 106 HTSSL_isInitialized @ 107 HTSSL_new @ 108 HTSSL_free @ 109 HTSSL_open @ 110 HTSSL_close @ 111 HTSSL_isOpen @ 112 HTSSL_read @ 113 HTSSL_write @ 114 HTSSL_getError @ 115 ;HTSSLhttps.c @ 200 HTSSLhttps_init @ 201 HTSSLhttps_terminate @ 202 HTSSLhttps_isInitialized @ 203 ;HTSSLReader.c @ 300 HTSSLReader_consumed @ 301 HTSSLReader_new @ 302 ;HTSSLWriter.c @ 400 HTSSLWriter_new @ 401 libwww/Library/src/SSL/windows/wwwssl.files0100644000076400001440000000006107120216161020462 0ustar danielusersHTSSL.c HTSSLhttps.c HTSSLReader.c HTSSLWriter.c libwww/Library/src/SSL/windows/Makefile.in0100644000076400001440000001502007405520525020146 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ SUFFIXES = .files .def SRC := $(wildcard *.c) MAK := $(wildcard *.mak) FLS := $(wildcard *.files) BUILT_SOURCES = wwwssl.def EXTRA_DIST = $(BUILT_SOURCES) wwwdll.def $(SRC) $(FLS) $(MAK) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../../wwwconf.h CONFIG_CLEAN_FILES = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .def .files $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/src/SSL/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src/SSL/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/src/SSL/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean def-clean: test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) def: $(BUILT_SOURCES) .files.def: perl $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/src/SSL/.cvsignore0100644000076400001440000000007506701526351016414 0ustar danielusersHT*.h WWW*.h SGML.h wwwsys.h *.lo .deps Makefile.in Makefile libwww/Library/src/SSL/HTSSL.c0100644000076400001440000002533307142315420015452 0ustar danielusers/* ** SSL TRANSPORT WRAPPER ** ** @(#) $Id: HTSSL.c,v 1.6 2025/08/03 16:17:20 kahan Exp $ ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** This module requires a SSL library in order to compile/link ** ** AUTHOR: ** Olga Antropova ** ** HISTORY: ** June 15 2000 Jose Kahan (kahan@w3.org) ** Extended the API to be able to change the protocol method ** August 3 2000 Jose Kahan (kahan@w3.org) ** Extended the API to be able to change the verify depth. */ /* System files */ #include "wwwsys.h" /* SSL includes */ #include #include /* Library include files */ #include "WWWUtil.h" #include "WWWCore.h" #include "WWWHTTP.h" #include "HTSSLReader.h" #include "HTSSLWriter.h" #include "HTSSL.h" #include "HTSSLMan.h" /* Our global SSL context */ PRIVATE SSL_CTX * app_ctx = NULL; /* List of all HTSSL structures currently used by readers and writers */ PRIVATE HTList * ssl_list = NULL; /* For certificate verification */ PRIVATE int verify_depth = 0; PRIVATE int verify_error = X509_V_OK; /* For choosing an SSL protocol method */ PRIVATE HTSSL_PROTOCOL ssl_prot_method = HTTLS_V1; /* ----------------------------------------------------------------- */ #ifdef HTDEBUG /* ** Roughly copied from the openssl sample app in the openssl package */ PRIVATE void apps_ssl_info_callback (SSL * s, int where, int ret) { char *str; int w = where & ~SSL_ST_MASK; if (w & SSL_ST_CONNECT) str="SSL_connect"; else if (w & SSL_ST_ACCEPT) str="SSL_accept"; else str="undefined"; if (where & SSL_CB_LOOP) { HTTRACE(PROT_TRACE, "%s: %s\n" _ str _ SSL_state_string_long(s)); } else if (where & SSL_CB_ALERT) { str = (where & SSL_CB_READ) ? "read" : "write"; HTTRACE(PROT_TRACE, "SSL3 alert %s:%s:%s\n" _ str _ SSL_alert_type_string_long(ret) _ SSL_alert_desc_string_long(ret)); } else if (where & SSL_CB_EXIT) { if (ret == 0) { HTTRACE(PROT_TRACE, "%s: failed in %s\n" _ str _ SSL_state_string_long(s)); } else if (ret < 0) { HTTRACE(PROT_TRACE, "%s: error in %s\n" _ str _ SSL_state_string_long(s)); } } } #endif /* ** Roughly copied from the openssl sample app in the openssl package */ PRIVATE int verify_callback (int ok, X509_STORE_CTX * ctx) { char buf[256]; X509 * err_cert = X509_STORE_CTX_get_current_cert(ctx); int err = X509_STORE_CTX_get_error(ctx); int depth = X509_STORE_CTX_get_error_depth(ctx); X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256); HTTRACE(PROT_TRACE, "depth = %d %s\n" _ depth _ buf); if (!ok) { HTTRACE(PROT_TRACE, "verify error: num=%d:%s\n" _ err _ X509_verify_cert_error_string(err)); if (verify_depth >= depth) { ok=1; verify_error=X509_V_OK; } else { ok=0; verify_error=X509_V_ERR_CERT_CHAIN_TOO_LONG; } } switch (ctx->error) { case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert), buf, 256); HTTRACE(PROT_TRACE, "issuer= %s\n" _ buf); break; case X509_V_ERR_CERT_NOT_YET_VALID: case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: HTTRACE(PROT_TRACE, "notBefore="); // ASN1_TIME_print(bio_err,X509_get_notBefore(ctx->current_cert)); HTTRACE(PROT_TRACE, "\n"); break; case X509_V_ERR_CERT_HAS_EXPIRED: case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: HTTRACE(PROT_TRACE, "notAfter="); // ASN1_TIME_print(bio_err,X509_get_notAfter(ctx->current_cert)); HTTRACE(PROT_TRACE, "\n"); break; } HTTRACE(PROT_TRACE, "verify return: %d\n" _ ok); return ok; } /* ** Set or retrieve the SSL protocol we want to use */ PUBLIC void HTSSL_protMethod_set (HTSSL_PROTOCOL prot_method) { ssl_prot_method = prot_method; } PUBLIC HTSSL_PROTOCOL HTSSL_protMethod (void) { return ssl_prot_method; } /* ** Set or retrieve the certificate verify depth */ PUBLIC void HTSSL_verifyDepth_set (int depth) { verify_depth = depth; } PUBLIC int HTSSL_verifyDepth (void) { return verify_depth; } /* ** Create an SSL application context if not already done */ PUBLIC BOOL HTSSL_init (void) { char rnd_filename[HT_MAX_PATH]; /* ** Initialise OpenSSL 0.9.5 random number generator. ** The random generator of OpenSSL had to be initialised on platforms ** that do not support /dev/random, like Compaq True64 Unix. ** This is done in the default way, and means that the user of the ** libwww-ssl library needs to have a .rnd file in his/her home-directory. */ RAND_file_name(rnd_filename, sizeof(rnd_filename)); RAND_load_file(rnd_filename, -1); if (!app_ctx) { SSL_METHOD * meth = NULL; SSLeay_add_ssl_algorithms(); /* Seems to provide English error messages */ SSL_load_error_strings(); /* select the protocol method */ switch (ssl_prot_method) { case HTSSL_V2: meth = SSLv2_client_method(); break; case HTSSL_V3: meth = SSLv3_client_method(); break; case HTSSL_V23: meth = SSLv23_client_method(); break; default: case HTTLS_V1: meth = TLSv1_client_method(); break; } /* set up the application context */ if ((app_ctx = SSL_CTX_new(meth)) == NULL) { HTTRACE(PROT_TRACE, "HTSSLContext Could not create context\n"); return NO; } HTTRACE(PROT_TRACE, "HTSSLContext Created context %p" _ app_ctx); /* See the SSL states in our own callback */ #ifdef HTDEBUG SSL_CTX_set_info_callback(app_ctx, apps_ssl_info_callback); #endif /* Set the certificate verification callback */ SSL_CTX_set_verify(app_ctx, SSL_VERIFY_PEER, verify_callback); /* Not sure what this does */ SSL_CTX_set_session_cache_mode(app_ctx, SSL_SESS_CACHE_CLIENT); } return YES; } /* ** Delete the application context if already initialized */ PUBLIC BOOL HTSSL_terminate (void) { if (app_ctx) { SSL_CTX_free(app_ctx); app_ctx = NULL; return YES; } return NO; } PUBLIC BOOL HTSSL_isInitialized (void) { return app_ctx ? YES : NO; } /* ** Initialization of HTSSL structure. Try to do SSL_connect. If fails ** still OK - will connect later. */ PRIVATE BOOL HTSSL_connectSetup (HTSSL * htssl, int sd) { HTTRACE(PROT_TRACE, "HTSSL....... Setting up %p on socket %d\n" _ htssl _ sd); htssl->sd = sd; htssl->connected = NO; htssl->ref_count = 0; htssl->ssl = SSL_new(app_ctx); if (!htssl->ssl) return NO; /* Tell that we are in connect mode */ SSL_set_connect_state(htssl->ssl); /* Set socket descriptor with the socket we already have open */ SSL_set_fd(htssl->ssl, sd); return YES; } /* ** This function should be called whenever HTSSL_new creates a new structure ** or returns a pointer to an existing structure to the caller. ** This function is not PUBLIC because I want to centralize reference counting ** in one module in order to minimize possibility of errors. */ PRIVATE void HTSSL_addRef(HTSSL * htssl) { if (htssl) { (htssl->ref_count)++; HTTRACE (PROT_TRACE, "HTSSL....... New reference count = %d\n" _ htssl->ref_count); } } /* ** Using a socket descriptor as a key try to find the HTSSL object in ssl_table. ** If not there then create a new object and add it to ssl_table. */ PUBLIC HTSSL * HTSSL_new (int sd) { HTSSL * htssl = NULL; HTList * ssls = NULL; /* If application context doesn't exist */ if (!app_ctx) return NULL; /* Check ssl_table */ if (!ssl_list) ssl_list = HTList_new(); ssls = ssl_list; while ((htssl = HTList_nextObject(ssls))) { if (htssl->sd == sd) { HTTRACE(PROT_TRACE, "HTSSL New... Found SSL %p with sd = %d\n" _ (void *) htssl _ sd); /* add reference count before giving pointer to caller */ HTSSL_addRef(htssl); return htssl; } } /* ssl not found : create new */ if ((htssl = (HTSSL *) HT_CALLOC(1, sizeof (HTSSL))) == NULL) HT_OUTOFMEM("HTSSL_new"); HTTRACE(PROT_TRACE, "HTSSL New... Created new SSL Object %p\n" _ htssl); /* If initialization fails... */ if (HTSSL_connectSetup(htssl, sd) != YES) { HTSSL_free(htssl); return NULL; } HTSSL_addRef(htssl); HTList_addObject (ssl_list, htssl); return htssl; } /* ** Destroy HTSSL object if no references to it remain in application */ PUBLIC void HTSSL_free (HTSSL * htssl) { (htssl->ref_count)--; HTTRACE(PROT_TRACE, "HTSSL Free.. ref_count = %d\n" _ htssl->ref_count); if (htssl->ref_count == 0) { HTTRACE(PROT_TRACE, "HTSSL.Free.. FINAL RELEASE\n"); if (htssl->ssl) { SSL_free(htssl->ssl); htssl->ssl = NULL; } HTList_removeObject(ssl_list, htssl); /* releases itself */ HT_FREE(htssl); } } PUBLIC BOOL HTSSL_open (HTSSL * htssl, int sd) { int err = 0; if (!htssl) return NO; if (htssl->connected) { HTTRACE(PROT_TRACE, "HTSSL Open.. SSL Object %p already connected\n" _ htssl); return YES; } if (!htssl->ssl) { HTTRACE(PROT_TRACE, "HTSSL....... SSL object %p has non-NULL ssl\n" _ htssl); return NO; } HTTRACE(PROT_TRACE, "HTSSL Open.. Connecting %p\n" _ htssl); if ((htssl->ssl = SSL_new(app_ctx)) == NULL) { HTTRACE(PROT_TRACE, "HTSSL Open.. SSL_new failed\n"); return NO; } /* Set socket descriptor with our socket that we already have */ SSL_set_fd (htssl->ssl, sd); htssl->sd = sd; /* Do SSL using certificate and key exchange */ if ((err = SSL_connect (htssl->ssl)) != -1) { htssl->connected = YES; return YES; } else { HTTRACE(PROT_TRACE, "HTSSL Open.. SSL_connect failed with code %d" _ err); return NO; } } PUBLIC BOOL HTSSL_close (HTSSL * htssl) { if (htssl) { HTTRACE(PROT_TRACE, "HTSSL....... Closing SSL Object %p\n" _ htssl); SSL_free(htssl->ssl); htssl->connected = NO; htssl->ssl = NULL; return YES; } return NO; } PUBLIC BOOL HTSSL_isOpen (HTSSL * htssl) { return htssl ? htssl->connected : NO; } PUBLIC int HTSSL_read (HTSSL * htssl, int sd, char * buff, int len) { return htssl && htssl->ssl ? SSL_read(htssl->ssl, buff, len) : -1; } PUBLIC int HTSSL_write (HTSSL * htssl, int sd, char * buff, int len) { return htssl && htssl->ssl ? SSL_write(htssl->ssl, buff, len) : -1; } PUBLIC int HTSSL_getError (HTSSL * htssl, int status) { return htssl && htssl->ssl ? SSL_get_error(htssl->ssl, status) : -1; } libwww/Library/src/SSL/HTSSL.html0100644000076400001440000000425007142247424016177 0ustar danielusers W3C Sample Code Library libwww SSL Transport Wrapper

    SSL Transport Wrapper

    This module declares a SSL (using the OpenSSL library) transport wrapper so that libwww can use SSL as a transport the same way it can use TCP and local host as transports. This module keeps a context of the application (SSL_CTX), Cipher negotiation, certificate directory path setting could be added here.

    The module is contributed by Olga Antropova

    #ifndef _HTSSL_H
    #define _HTSSL_H
    

    The HTSSL Class

    The HTSSL Class is the libwww interface to the SSL layer.

    typedef struct _HTSSL HTSSL;
    extern BOOL HTSSL_init (void);
    extern BOOL HTSSL_isInitialized (void);
    extern BOOL HTSSL_terminate (void);
    

    The following functions allow to set (or retrieve) the TSL/SSL protocol method we want to use when talking with the server. By default, we use the highest available protocol (TLSv1 in this version).

     
    typedef enum _HTSSL_PROTOCOL {
    	      HTSSL_V2 = 0, 
    	      HTSSL_V3,
    	      HTSSL_V23, /* Brian Hawley: the SSLv23 method tries 
    		            SSLv3/TLSv1 but can fall back to SSLV2 */
    	      HTTLS_V1
    } HTSSL_PROTOCOL;
    extern void HTSSL_protMethod_set (HTSSL_PROTOCOL prot_method);
    extern HTSSL_PROTOCOL HTSSL_protMethod (void);
    

    The following functions allow to set (or retrieve) the certificate verification depth. By default, the verification depth has a value of 0.

     
    extern void HTSSL_verifyDepth_set (int depth);
    extern int HTSSL_verifyDepth (void);
    
    extern HTSSL * HTSSL_new (int sd);
    extern void HTSSL_free (HTSSL * htssl);
    extern BOOL HTSSL_open (HTSSL * htssl, int sd);
    extern BOOL HTSSL_close (HTSSL * htssl);
    extern BOOL HTSSL_isOpen (HTSSL * htssl);
    extern int HTSSL_read (HTSSL * htssl, int sd, char * buff, int len);
    extern int HTSSL_write (HTSSL * htssl, int sd, char * buff, int len);
    extern int HTSSL_getError (HTSSL * htssl, int status);
    
    #endif /* _HTSSL_H */
    


    @(#) $Id: HTSSL.html,v 1.3 2025/08/03 10:53:08 kahan Exp $
    libwww/Library/src/SSL/HTSSLMan.html0100644000076400001440000000172207120215511016620 0ustar danielusers The HTSSL Class Definition

    The HTSSL Class Definition

    Defines, manages and frees single SSL connection.
    #ifndef HTSSLMAN_H
    #define HTSSLMAN_H
    #ifdef __cplusplus
    extern "C" {
    #endif
    #include "HTSSL.h"    
    struct _HTSSL {
        SSL * ssl;
        int   sd;        /* socket descriptor */
        BOOL  connected;
        int   ref_count;
    };
    extern HTSSL * HTSSL_new(int sd);
    extern void HTSSL_free(HTSSL *);
    extern BOOL HTSSL_connected(HTSSL * ssl);
    extern void HTSSL_set_disconnected(HTSSL * htssl);
    extern BOOL HTSSL_connect(HTSSL * ssl, int sd);
    extern int HTSSL_read(HTSSL * htssl, int sd, char * buff, int len);
    extern int HTSSL_write(HTSSL * htssl, int sd, char * buff, int len);
    #ifdef __cplusplus
    }
    #endif
    #endif /*HTSSLMAN_H*/
    


    @(#) $Id: HTSSLMan.html,v 1.1 2025/06/09 16:28:57 kahan Exp $
    libwww/Library/src/SSL/HTSSLReader.c0100644000076400001440000002324407141253533016601 0ustar danielusers/* ** READ STREAM FROM THE NETWORK VIA SSL ** ** @(#) $Id: HTSSLReader.c,v 1.2 2025/07/31 10:39:23 kahan Exp $ ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** This module requires a SSL library in order to compile/link ** ** AUTHOR: ** Olga Antropova ** */ /* System Include files */ #include "wwwsys.h" /* SSL include files */ #include /* Library include files */ #include "WWWUtil.h" #include "WWWCore.h" #include "HTNet.h" #include "HTNetMan.h" #include "HTSSL.h" #include "HTSSLReader.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; /* ... */ }; struct _HTInputStream { const HTInputStreamClass * isa; HTChannel * ch; HTHost * host; char * write; /* Last byte written */ char * read; /* Last byte read */ int b_read; char data [INPUT_BUFFER_SIZE]; /* buffer */ HTSSL * htssl; }; /* ------------------------------------------------------------------------- */ PRIVATE int HTSSLReader_flush (HTInputStream * me) { HTNet * net = HTHost_getReadNet(me->host); return net && net->readStream ? (*net->readStream->isa->flush)(net->readStream) : HT_OK; } PRIVATE int HTSSLReader_free (HTInputStream * me) { HTNet * net = HTHost_getReadNet(me->host); HTTRACE(PROT_TRACE, "HTSSLReader. Free %p\n" _ me); if (me->htssl) { HTSSL_free(me->htssl); me->htssl = NULL; } if (net && net->readStream) { int status = (*net->readStream->isa->_free)(net->readStream); if (status == HT_OK) net->readStream = NULL; return status; } return HT_OK; } PRIVATE int HTSSLReader_abort (HTInputStream * me, HTList * e) { HTNet * net = HTHost_getReadNet(me->host); HTTRACE(PROT_TRACE, "HTSSLReader. Abort %p\n" _ me); if (net && net->readStream) { int status = (*net->readStream->isa->abort)(net->readStream, NULL); if (status != HT_IGNORE) net->readStream = NULL; } return HT_ERROR; } #ifdef FIND_SIGNATURES /* Push data from a socket down a stream ** ------------------------------------- ** ** This routine is responsible for creating and PRESENTING any ** graphic (or other) objects described by the file. As this function ** max reads a chunk of data on size INPUT_BUFFER_SIZE, it can be used ** with both blocking or non-blocking sockets. It will always return to ** the event loop, however if we are using blocking I/O then we get a full ** buffer read, otherwise we get what's available. ** ** Returns HT_LOADED if finished reading ** HT_OK if OK, but more to read ** HT_ERROR if error, ** HT_WOULD_BLOCK if read or write would block ** HT_PAUSE if stream is paused */ PRIVATE char * strnstr(char * haystack, int *pLen, char * needle) { int found = 0; int need = strlen(needle); int i, start; for (start = i = 0; i < *pLen; i++) if (haystack[i] == needle[found]) { if (++found == need) { i -= need - 1; /* beginning of string */ *pLen -= i; return haystack+i; } } else { found = 0; } *pLen = 0; return NULL; } #endif /* FIND_SIGNATURES */ PRIVATE int HTSSLReader_read (HTInputStream * me) { HTHost * host = me->host; SOCKET soc = HTChannel_socket(me->ch); HTNet * net = HTHost_getReadNet(host); HTRequest * request = HTNet_request(net); int status; if (!net->readStream) { HTTRACE(STREAM_TRACE, "HTSSLReader. No read stream for net object %p\n" _ net); return HT_ERROR; } /* Setting SSL */ if (!me->htssl) { if ((me->htssl = HTSSL_new(soc)) == NULL) { HTRequest_addSystemError(net->request, ERR_FATAL, socerrno, NO, "SSLREAD"); return HT_ERROR; } } /* Read from socket if we got rid of all the data previously read */ do { /* Don't read if we have to push unwritten data from last call */ if (me->write >= me->read) { me->b_read = 0; me->data[0] ='\0'; me->b_read = HTSSL_read(me->htssl, soc, me->data, INPUT_BUFFER_SIZE); status = HTSSL_getError(me->htssl, me->b_read); HTTRACE(STREAM_TRACE, "HTSSLReader. SSL returned %d\n" _ status); /* Check what we got done */ switch (status) { case SSL_ERROR_NONE: HTTRACEDATA(me->data, me->b_read, "Reading from socket %d" _ soc); me->write = me->data; me->read = me->data + me->b_read; HTTRACE(STREAM_TRACE, "HTSSLReader. %d bytes read from socket %d\n" _ me->b_read _ soc); /* Make progress notification */ if (request) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_READ); if (HTNet_rawBytesCount(net)) HTNet_addBytesRead(net, me->b_read); if (cbf) { int tr = HTNet_bytesRead(net); (*cbf)(request, HT_PROG_READ, HT_MSG_NULL, NULL, &tr, NULL); } } break; case SSL_ERROR_WANT_READ: HTTRACE(STREAM_TRACE, "HTSSLReader. WOULD BLOCK fd %d\n" _ soc); HTHost_register(host, net, HTEvent_READ); /* ** There seems to be a bug as even though it says "read finished" ** it doesn't say that it wants to write. We therefore have to make ** an explicit flush to make sure that we don't block forever. */ HTHost_forceFlush(host); return HT_WOULD_BLOCK; case SSL_ERROR_WANT_WRITE: return HTHost_forceFlush(host); case SSL_ERROR_WANT_X509_LOOKUP: /* @@@ what to do here? @@@ */ return HT_OK; case SSL_ERROR_ZERO_RETURN: case SSL_ERROR_SSL: case SSL_ERROR_SYSCALL: HTTRACE(PROT_TRACE, "HTSSLReader. FIN received on socket %d\n" _ soc); HTHost_unregister(host, net, HTEvent_READ); HTHost_register(host, net, HTEvent_CLOSE); HTSSL_close(me->htssl); HTSSL_free(me->htssl); me->htssl = NULL; return HT_CLOSED; } } #ifdef FIND_SIGNATURES { char * ptr = me->data; int len = me->b_read; while ((ptr = strnstr(ptr, &len, "HTTP/1.1 200 OK")) != NULL) { HTTRACE(STREAM_TRACE, "HTSSLReader. Signature found at 0x%x of 0x%x.\n" _ ptr - me->data _ me->b_read); ptr++; len--; } } #endif /* FIND_SIGNATURES */ #ifdef NOT_ASCII { char *p = me->data; while (p < me->read) { *p = FROMASCII(*p); p++; } } #endif /* NOT_ASCII */ /* Now push the data down the stream */ if ((status = (*net->readStream->isa->put_block) (net->readStream, me->write, me->b_read)) != HT_OK) { if (status == HT_WOULD_BLOCK) { HTTRACE(STREAM_TRACE, "HTSSLReader. Target WOULD BLOCK\n"); HTHost_unregister(host, net, HTEvent_READ); return HT_WOULD_BLOCK; } else if (status == HT_PAUSE) { HTTRACE(STREAM_TRACE, "HTSSLReader. Target PAUSED\n"); HTHost_unregister(host, net, HTEvent_READ); return HT_PAUSE; /* CONTINUE code or stream code means data was consumed */ } else if (status == HT_CONTINUE || status > 0) { if (status == HT_CONTINUE) { HTTRACE(STREAM_TRACE, "HTSSLReader. CONTINUE\n"); } else HTTRACE(STREAM_TRACE, "HTSSLReader. Target returns %d\n" _ status); /* me->write = me->read; */ return status; } else { /* We have a real error */ HTTRACE(STREAM_TRACE, "HTSSLReader. Target ERROR %d\n" _ status); return status; } } me->write = me->read; { int remaining = HTHost_remainingRead(host); if (remaining > 0) { HTTRACE(STREAM_TRACE, "HTSSLReader. DIDN'T CONSUME %d BYTES: `%s\'\n" _ remaining _ me->read); HTHost_setConsumed(host, remaining); } } } while (net->preemptive); HTHost_register(host, net, HTEvent_READ); return HT_WOULD_BLOCK; } /* ** The difference between the close and the free method is that we don't ** close the connection in the free method - we only call the free method ** of the target stream. That way, we can keep the input stream as long ** as the channel itself. */ PRIVATE int HTSSLReader_close (HTInputStream * me) { int status = HT_OK; HTNet * net = HTHost_getReadNet(me->host); if (net && net->readStream) { if ((status = (*net->readStream->isa->_free)(net->readStream))==HT_WOULD_BLOCK) return HT_WOULD_BLOCK; net->readStream = NULL; } HTTRACE(STREAM_TRACE, "HTSSLReader. FREEING....\n"); HT_FREE(me); return status; } PUBLIC int HTSSLReader_consumed (HTInputStream * me, size_t bytes) { me->write += bytes; me->b_read -= bytes; HTHost_setRemainingRead(me->host, me->b_read); return HT_OK; } PRIVATE const HTInputStreamClass HTSSLReader = { "SocketReader", HTSSLReader_flush, HTSSLReader_free, HTSSLReader_abort, HTSSLReader_read, HTSSLReader_close, HTSSLReader_consumed }; /* ** Create a new input read stream. Before we actually create it we check ** to see whether we already have an input stream for this channel and if ** so we just return that. This means that we can reuse input streams ** in persistent connections, for example. */ PUBLIC HTInputStream * HTSSLReader_new (HTHost * host, HTChannel * ch, void * param, int mode) { if (host && ch) { HTInputStream * me = HTChannel_input(ch); if (me == NULL) { if ((me=(HTInputStream *) HT_CALLOC(1, sizeof(HTInputStream))) == NULL) HT_OUTOFMEM("HTSSLReader_new"); me->isa = &HTSSLReader; me->ch = ch; me->host = host; me->htssl = NULL; } return me; } return NULL; } libwww/Library/src/SSL/HTSSLReader.html0100644000076400001440000000336307120215511017312 0ustar danielusers W3C Sample Code Library SSL Reader Stream

    SSL Reader Stream

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The SSL Reader Stream is an input stream which knows how to read from a SSL socket layer, for example provided by the OpenSSL Library. It is a libwww transport and may be registered using the Transport Manager. The application can initialize this stream together with the HTSSLWriter stream, for example. This module requires a SSL library in order to link/compile.

    This module is implemented by HTSSLReader.c, and it is a part of the W3C Sample Code Library.

    The module is contributed by Olga Antropova

    #ifndef HTSSLREADER_H
    #define HTSSLREADER_H
    #include "HTIOStream.h"
    

    Input Buffering

    In order to optimize reading a channel, we bind a buffer to each channel object. The size of this buffer is a compromise between speed and memory. Here it is chosen as the default TCP High Water Mark (sb_hiwat) for receiving data. By default, we have chosen a value that equals the normal TCP High Water Mark (sb_hiwat) for receiving data.

    #define INPUT_BUFFER_SIZE    32*1024
    

    SSL Read Stream

    extern HTInput_new HTSSLReader_new;
    
    #endif /* HTSSLREADER_H */
    


    @(#) $Id: HTSSLReader.html,v 1.1 2025/06/09 16:28:57 kahan Exp $
    libwww/Library/src/SSL/HTSSLWriter.c0100644000076400001440000001735207141253533016656 0ustar danielusers/* ** WRITER STREAM FROM APP TO NETWORK VIA SSL ** ** @(#) $Id: HTSSLWriter.c,v 1.2 2025/07/31 10:39:23 kahan Exp $ ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** This module requires a SSL library in order to compile/link ** ** AUTHOR: ** Olga Antropova ** */ /* System include files */ #include "wwwsys.h" /* SSL include files */ #include /* Library include files */ #include "WWWUtil.h" #include "WWWCore.h" #include "WWWTrans.h" #include "HTNet.h" #include "HTNetMan.h" #include "HTHstMan.h" #include "HTSSL.h" #include "HTSSLWriter.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; /* ... */ }; struct _HTOutputStream { const HTOutputStreamClass * isa; HTChannel * ch; HTHost * host; int offset; #ifdef NOT_ASCII char * ascbuf; /* Buffer for TOASCII conversion */ #endif HTSSL * htssl; }; /* ------------------------------------------------------------------------- */ PRIVATE int HTSSLWriter_flush (HTOutputStream * me) { return HT_OK; /* As we don't have any output buffer */ } PRIVATE int HTSSLWriter_free (HTOutputStream * me) { HTTRACE(STREAM_TRACE, "HTSSLWriter. Freeing %p\n" _ me); if (me->htssl){ HTSSL_free(me->htssl); me->htssl = NULL; } return HT_OK; } PRIVATE int HTSSLWriter_abort (HTOutputStream * me, HTList * e) { HTTRACE(STREAM_TRACE, "HTSSLWriter. Abort %p\n" _ me); return HT_ERROR; } /* Write to SSL ** ** According to Solaris 2.3 man on write: ** ** o If O_NONBLOCK and O_NDELAY are clear, write() blocks ** until the data can be accepted. ** ** o If O_NONBLOCK or O_NDELAY is set, write() does not ** block the process. If some data can be written ** without blocking the process, write() writes what it ** can and returns the number of bytes written. Other- ** wise, if O_NONBLOCK is set, it returns - 1 and sets ** errno to EAGAIN or if O_NDELAY is set, it returns 0. ** ** According to SunOS 4.1.1 man on write: ** ** + If the descriptor is marked for non-blocking I/O ** using fcntl() to set the FNONBLOCK or O_NONBLOCK ** flag (defined in ), write() requests ** for {PIPE_BUF} (see pathconf(2V)) or fewer bytes ** either succeed completely and return nbyte, or ** return -1 and set errno to EAGAIN. A write() request ** for greater than {PIPE_BUF} bytes either transfers ** what it can and returns the number of bytes written, ** or transfers no data and returns -1 and sets errno ** to EAGAIN. If a write() request is greater than ** {PIPE_BUF} bytes and all data previously written to ** the pipe has been read, write() transfers at least ** {PIPE_BUF} bytes. */ PRIVATE int HTSSLWriter_write (HTOutputStream * me, const char * buf, int len) { HTHost * host = me->host; SOCKET soc = HTChannel_socket(HTHost_channel(host)); HTNet * net = HTHost_getWriteNet(host); int b_write; char * wrtp; int status; const char *limit = buf+len; /* If we don't have a Net object then return right away */ if (!net) { HTTRACE(STREAM_TRACE, "HTSSLWriter. No Net Object %d (offset %d)\n" _ soc _ me->offset); return HT_ERROR; } #ifdef NOT_ASCII if (len && !me->ascbuf) { /* Generate new buffer */ const char *orig = buf; char *dest; int cnt; if ((me->ascbuf = (char *) HT_MALLOC(len)) == NULL) HT_OUTOFMEM("HTSSLWriter_write"); dest = me->ascbuf; for (cnt=0; cntascbuf; limit = me->ascbuf+len; } #else if (!me->offset) wrtp = (char *) buf; else { wrtp = (char *) buf + me->offset; len -= me->offset; me->offset = 0; } #endif /* Setting SSL */ if (!me->htssl) { if ((me->htssl = HTSSL_new(soc)) == NULL) { HTRequest_addSystemError(net->request, ERR_FATAL, socerrno, NO, "SSLWRITE"); return HT_ERROR; } } /* Write data to the network */ while (wrtp < limit) { b_write = HTSSL_write(me->htssl, soc, wrtp, len); status = HTSSL_getError(me->htssl, b_write); HTTRACE(STREAM_TRACE, "HTSSLWriter. SSL returned %d\n" _ status); /* Check what we got done */ switch (status) { case SSL_ERROR_NONE: /* We do this unconditionally, should we check to see if we ever blocked? */ HTTRACEDATA(wrtp, b_write, "Writing to socket %d" _ soc); HTNet_addBytesWritten(net, b_write); wrtp += b_write; len -= b_write; HTTRACE(STREAM_TRACE, "HTSSLWriter. %d bytes written to %d\n" _ b_write _ soc); /* Make progress notification */ { HTAlertCallback *cbf = HTAlert_find(HT_PROG_WRITE); if (cbf) { int tw = HTNet_bytesWritten(net); (*cbf)(net->request, HT_PROG_WRITE, HT_MSG_NULL, NULL, &tw, NULL); } } break; case SSL_ERROR_WANT_WRITE: HTHost_register(host, net, HTEvent_WRITE); me->offset = wrtp - buf; HTTRACE(STREAM_TRACE, "HTSSLWriter. WOULD BLOCK %d (offset %d)\n" _ soc _ me->offset); return HT_WOULD_BLOCK; case SSL_ERROR_WANT_READ: return HTHost_read(host, net); case SSL_ERROR_WANT_X509_LOOKUP: /* @@@ what to do here? @@@ */ return HT_OK; case SSL_ERROR_ZERO_RETURN: case SSL_ERROR_SSL: case SSL_ERROR_SYSCALL: host->broken_pipe = YES; HTRequest_addSystemError(net->request, ERR_FATAL, socerrno, NO, "SSLWRITE"); /* ** Notify HTSSL (shared) object that sock connection is broken ** so that next read/write will reconnect */ HTSSL_close(me->htssl); return HT_ERROR; } } #ifdef NOT_ASCII HT_FREE(me->ascbuf); #endif return HT_OK; } /* Character handling ** ------------------ */ PRIVATE int HTSSLWriter_put_character (HTOutputStream * me, char c) { return HTSSLWriter_write(me, &c, 1); } /* String handling ** --------------- ** ** Strings must be smaller than this buffer size. */ PRIVATE int HTSSLWriter_put_string (HTOutputStream * me, const char * s) { return HTSSLWriter_write(me, s, (int) strlen(s)); } /* ** The difference between the close and the free method is that we don't ** close the connection in the free method - we only call the free method ** of the target stream. That way, we can keep the output stream as long ** as the channel itself. */ PRIVATE int HTSSLWriter_close (HTOutputStream * me) { HTTRACE(STREAM_TRACE, "HTSSLWriter. FREEING....\n"); if (me->htssl) { HTSSL_free(me->htssl); me->htssl = NULL; } HT_FREE(me); return HT_OK; } PRIVATE const HTOutputStreamClass HTSSLWriter = { "SocketWriter", HTSSLWriter_flush, HTSSLWriter_free, HTSSLWriter_abort, HTSSLWriter_put_character, HTSSLWriter_put_string, HTSSLWriter_write, HTSSLWriter_close }; PUBLIC HTOutputStream * HTSSLWriter_new (HTHost * host, HTChannel * ch, void * param, int mode) { if (host && ch) { HTOutputStream * me = HTChannel_output(ch); if (!me) { if ((me=(HTOutputStream *) HT_CALLOC(1, sizeof(HTOutputStream)))==NULL) HT_OUTOFMEM("HTSSLWriter_new"); me->isa = &HTSSLWriter; me->ch = ch; me->host = host; me->htssl = NULL; } HTTRACE(STREAM_TRACE, "HTSSLWriter. Created %p\n" _ me); return HTBufferConverter_new(host, ch, param, mode, me); } return NULL; } libwww/Library/src/SSL/HTSSLWriter.html0100644000076400001440000000275007120215511017363 0ustar danielusers W3C Sample Code Library libwww SSL Writer Stream

    SSL Writer Stream

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The SSL Stream is an output stream which knows how to write to a SSL socket layer, for example provided by the OpenSSL Library. It is a libwww transport and may be registered using the Transport Manager. The application can initialize this stream together with the HTSSLReader stream, for example.

    This module is implemented by HTSSLWriter.c, and it is a part of the W3C Sample Code Library.

    The module is contributed by Olga Antropova

    #ifndef HTSSLWRITE_H
    #define HTSSLWRITE_H
    #include "HTIOStream.h"
    extern HTOutput_new HTSSLWriter_new;
    extern BOOL HTSSLWriter_set (HTOutputStream *      me,
                                 HTNet *               net,
                                 HTChannel *           ch,
                                 void *                param,
                                 int                   mode);
    #endif /* HTSSLWRITE_H */
    


    @(#) $Id: HTSSLWriter.html,v 1.1 2025/06/09 16:28:57 kahan Exp $
    libwww/Library/src/SSL/HTSSLhttps.c0100644000076400001440000000556607120215511016537 0ustar danielusers/* ** INITIALIZATIONG OF SSL TRANSPORT AS HTTPS ACCESS SCHEME ** ** @(#) $Id: HTSSLhttps.c,v 1.1 2025/06/09 16:28:57 kahan Exp $ ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** This module requires a SSL library in order to compile/link ** ** AUTHOR: ** Olga Antropova */ /* System files */ #include "wwwsys.h" /* Library include files */ #include "WWWUtil.h" #include "WWWCore.h" #include "WWWHTTP.h" #include "WWWApp.h" #include "WWWSSL.h" #include "HTSSLhttps.h" PRIVATE BOOL https_init = NO; PUBLIC BOOL HTSSLhttps_init (BOOL preemptive) { if (!https_init) { /* Set up the SSL context */ HTSSL_init(); /* Register as libwww transport */ HTTransport_add("secure_tcp", HT_TP_SINGLE, HTSSLReader_new, HTSSLWriter_new); /* Register the HTTP protocol module for the "https" scheme */ HTProtocol_add("https", "secure_tcp", SSL_PORT, preemptive, HTLoadHTTP, NULL); /* Register libwww BEFORE filters that we want to use with SSL */ HTNet_addBefore(HTCredentialsFilter, "https://*", NULL, HT_FILTER_LATE); HTNet_addBefore(HTPEP_beforeFilter, "https://*", NULL, HT_FILTER_LATE); /* Register libwww AFTER filters that we want to use with SSL */ HTNet_addAfter(HTAuthFilter, "https://*", NULL, HT_NO_ACCESS, HT_FILTER_MIDDLE); HTNet_addAfter(HTAuthFilter, "https://*", NULL, HT_REAUTH, HT_FILTER_MIDDLE); HTNet_addAfter(HTPEP_afterFilter, "https://*", NULL, HT_ALL, HT_FILTER_MIDDLE); HTNet_addAfter(HTRedirectFilter, "https://*", NULL, HT_PERM_REDIRECT, HT_FILTER_MIDDLE); HTNet_addAfter(HTRedirectFilter, "https://*", NULL, HT_FOUND, HT_FILTER_MIDDLE); HTNet_addAfter(HTRedirectFilter, "https://*", NULL, HT_SEE_OTHER, HT_FILTER_MIDDLE); HTNet_addAfter(HTRedirectFilter, "https://*", NULL, HT_TEMP_REDIRECT, HT_FILTER_MIDDLE); HTNet_addAfter(HTUseProxyFilter, "https://*", NULL, HT_USE_PROXY, HT_FILTER_MIDDLE); https_init = YES; return YES; } return NO; } PUBLIC BOOL HTSSLhttps_terminate (void) { if (https_init) { /* Delete the application context */ HTSSL_terminate(); /* Unregister as libwww transport */ HTTransport_delete("secure_tcp"); /* Unregister the HTTP protocol module for the "https" scheme */ HTProtocol_delete ("https"); /* Unegister before and after filters based on template */ /* @@@ */ https_init = NO; return YES; } return NO; } PUBLIC BOOL HTSSLhttps_isInitialized (void) { return https_init; } libwww/Library/src/SSL/HTSSLhttps.html0100644000076400001440000000322107120215511017243 0ustar danielusers W3C Sample Code Library libwww Initializationg of SSL Transport As https Access Scheme

    Initializationg of SSL Transport As https Access Scheme

    This module sets up the SSL transport for handling the https URI access scheme. In fact the SSL module itself is completely independent and could as well be negotiated instead of getting a new URI scheme.

    The module is contributed by Olga Antropova

    #ifndef _HTSSLHTTPS_H
    #define _HTSSLHTTPS_H
    

    The initialization function initialies the SSL transports by doing the following:

    • Setting up a SSL application context
    • Registering the transport in the libwww HTTransport Manager
    • Registering the HTTP protocol module as a protocol handler in the libwww HTProtocol Manager for the https: access scheme
    • Registering a set of filters for handling HTTP caching, redirection, and authentication

    The termination function removes the application context, unregisteres the SSL transport in the libwww HTTransport Manager, and unregisteres the other things set up when initializing the SSL transport

    #ifndef SSL_PORT
    #define SSL_PORT        443
    #endif
    extern BOOL HTSSLhttps_init (BOOL preemptive);
    extern BOOL HTSSLhttps_isInitialized (void);
    extern BOOL HTSSLhttps_terminate (void);
    
    #endif /* _HTSSLHTTPS_H */
    


    @(#) $Id: HTSSLhttps.html,v 1.1 2025/06/09 16:28:57 kahan Exp $
    libwww/Library/src/SSL/Makefile.am0100644000076400001440000000266407123647416016463 0ustar danielusers## Process this file with Automake to create Makefile.in. LDFLAGS = -version-info "1:0:1" lib_LTLIBRARIES = @WWWSSL@ EXTRA_LTLIBRARIES = \ libwwwssl.la SUBDIRS = windows # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .txt .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files but can't find the libwww" @echo "Line Mode Browser (www). Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources libwwwssl_la_SOURCES = \ WWWSSL.h \ HTSSL.h \ HTSSLMan.h \ HTSSL.c \ HTSSLReader.h \ HTSSLReader.c \ HTSSLWriter.h \ HTSSLWriter.c \ HTSSLhttps.h \ HTSSLhttps.c libwwwssl_la_LDFLAGS = -rpath $(libdir) LDADD = \ libwwwssl.la INCLUDES = \ -I/usr/local/include \ -I${top_srcdir}/modules/md5 \ -I${top_srcdir}/modules/expat/xmlparse \ -I$(top_srcdir)/Library/src \ @SSLINC@ BUILT_SOURCES = \ WWWSSL.h \ HTSSL.h \ HTSSLMan.h \ HTSSLReader.h \ HTSSLWriter.h \ HTSSLhttps.h pkginclude_HEADERS = $(BUILT_SOURCES) DOCS := $(wildcard *.html) EXTRA_DIST = \ $(BUILT_SOURCES) \ $(DOCS) libwww/Library/src/SSL/WWWSSL.html0100644000076400001440000000400207120215511016327 0ustar danielusers W3C Sample Code Library libwww SSL Transport Wrapper

    W3C Sample Code Library libwww SSL Transport Wrapper

    /*
    **	(c) COPYRIGHT MIT 1999.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module declares a SSL (using the OpenSSL library, for example) transport wrapper so that libwww can use SSL as a transport the same way it can use TCP and local host as transports.

    The SSL module is contributed by Olga Antropova

    #ifndef WWWSSL_H
    #define WWWSSL_H
    
    #ifdef __cplusplus
    extern "C" { 
    #endif
    

    System dependencies

    The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI.

    #include "wwwsys.h"
    

    The Main SSL Module

    This module is the one that actually talks to the SSL library and handles the internal SSL mechanisms for verifying certificates etc.

    #include "HTSSL.h"
    

    Initializing the SSL Module for "https:"

    This module registers the various parts in libwww required for handling the https: URI scheme.

    #include "HTSSLhttps.h"
    

    SSL Read Transport Stream

    The SSL read transport stream is responsible for reading from an SSL socket and pass the data to libwww

    #include "HTSSLReader.h"
    

    SSL Write Transport Stream

    The SSL write transport stream is responsible for writing data to an SSL socket

    #include "HTSSLWriter.h"
    
    #ifdef __cplusplus
    } /* end extern C definitions */
    #endif
    #endif
    


    @(#) $Id: WWWSSL.html,v 1.1 2025/06/09 16:28:57 kahan Exp $
    libwww/Library/src/SSL/Makefile0100644000076400001440000003656507405520572016072 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ LDFLAGS = -version-info "1:0:1" lib_LTLIBRARIES = EXTRA_LTLIBRARIES = libwwwssl.la SUBDIRS = windows # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .txt libwwwssl_la_SOURCES = WWWSSL.h HTSSL.h HTSSLMan.h HTSSL.c HTSSLReader.h HTSSLReader.c HTSSLWriter.h HTSSLWriter.c HTSSLhttps.h HTSSLhttps.c libwwwssl_la_LDFLAGS = -rpath $(libdir) LDADD = libwwwssl.la INCLUDES = -I/usr/local/include -I${top_srcdir}/modules/md5 -I${top_srcdir}/modules/expat/xmlparse -I$(top_srcdir)/Library/src BUILT_SOURCES = WWWSSL.h HTSSL.h HTSSLMan.h HTSSLReader.h HTSSLWriter.h HTSSLhttps.h pkginclude_HEADERS = $(BUILT_SOURCES) DOCS := $(wildcard *.html) EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../../.. CPPFLAGS = LIBS = -ldl libwwwssl_la_LIBADD = libwwwssl_la_OBJECTS = HTSSL.lo HTSSLReader.lo HTSSLWriter.lo \ HTSSLhttps.lo CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(pkginclude_HEADERS) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/HTSSL.P .deps/HTSSLReader.P .deps/HTSSLWriter.P \ .deps/HTSSLhttps.P SOURCES = $(libwwwssl_la_SOURCES) OBJECTS = $(libwwwssl_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s .txt $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/src/SSL/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libwwwssl.la: $(libwwwssl_la_OBJECTS) $(libwwwssl_la_DEPENDENCIES) $(LINK) $(libwwwssl_la_LDFLAGS) $(libwwwssl_la_OBJECTS) $(libwwwssl_la_LIBADD) $(LIBS) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgincludedir) @list='$(pkginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p"; \ $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) list='$(pkginclude_HEADERS)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkgincludedir)/$$p; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src/SSL distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/src/SSL/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-libLTLIBRARIES install-exec: install-exec-recursive install-data-am: install-pkgincludeHEADERS install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS uninstall: uninstall-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(pkgincludedir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool uninstall-pkgincludeHEADERS \ install-pkgincludeHEADERS install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files but can't find the libwww" @echo "Line Mode Browser (www). Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/src/SSL/WWWSSL.h0100644000076400001440000000314707405520456015640 0ustar danielusers/* W3C Sample Code Library libwww SSL Transport Wrapper ! W3C Sample Code Library libwww SSL Transport Wrapper ! */ /* ** (c) COPYRIGHT MIT 1999. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module declares a SSL (using the OpenSSL library, for example) transport wrapper so that libwww can use SSL as a transport the same way it can use TCP and local host as transports. The SSL module is contributed by Olga Antropova */ #ifndef WWWSSL_H #define WWWSSL_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* . The Main SSL Module . This module is the one that actually talks to the SSL library and handles the internal SSL mechanisms for verifying certificates etc. */ #include "HTSSL.h" /* . Initializing the SSL Module for "https:" . This module registers the various parts in libwww required for handling the https: URI scheme. */ #include "HTSSLhttps.h" /* . SSL Read Transport Stream . The SSL read transport stream is responsible for reading from an SSL socket and pass the data to libwww */ #include "HTSSLReader.h" /* . SSL Write Transport Stream . The SSL write transport stream is responsible for writing data to an SSL socket */ #include "HTSSLWriter.h" /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWSSL.html,v 1.1 2025/06/09 16:28:57 kahan Exp $ */ libwww/Library/src/SSL/HTSSL.h0100644000076400001440000000372007405520456015464 0ustar danielusers/* W3C Sample Code Library libwww SSL Transport Wrapper ! SSL Transport Wrapper ! This module declares a SSL (using the OpenSSL library) transport wrapper so that libwww can use SSL as a transport the same way it can use TCP and local host as transports. This module keeps a context of the application (SSL_CTX), Cipher negotiation, certificate directory path setting could be added here. The module is contributed by Olga Antropova */ #ifndef _HTSSL_H #define _HTSSL_H /* . The HTSSL Class . The HTSSL Class is the libwww interface to the SSL layer. */ typedef struct _HTSSL HTSSL; extern BOOL HTSSL_init (void); extern BOOL HTSSL_isInitialized (void); extern BOOL HTSSL_terminate (void); /* The following functions allow to set (or retrieve) the TSL/SSL protocol method we want to use when talking with the server. By default, we use the highest available protocol (TLSv1 in this version). */ typedef enum _HTSSL_PROTOCOL { HTSSL_V2 = 0, HTSSL_V3, HTSSL_V23, /* Brian Hawley: the SSLv23 method tries SSLv3/TLSv1 but can fall back to SSLV2 */ HTTLS_V1 } HTSSL_PROTOCOL; extern void HTSSL_protMethod_set (HTSSL_PROTOCOL prot_method); extern HTSSL_PROTOCOL HTSSL_protMethod (void); /* The following functions allow to set (or retrieve) the certificate verification depth. By default, the verification depth has a value of 0. */ extern void HTSSL_verifyDepth_set (int depth); extern int HTSSL_verifyDepth (void); /* */ extern HTSSL * HTSSL_new (int sd); extern void HTSSL_free (HTSSL * htssl); extern BOOL HTSSL_open (HTSSL * htssl, int sd); extern BOOL HTSSL_close (HTSSL * htssl); extern BOOL HTSSL_isOpen (HTSSL * htssl); extern int HTSSL_read (HTSSL * htssl, int sd, char * buff, int len); extern int HTSSL_write (HTSSL * htssl, int sd, char * buff, int len); extern int HTSSL_getError (HTSSL * htssl, int status); /* */ #endif /* _HTSSL_H */ /* @(#) $Id: HTSSL.html,v 1.3 2025/08/03 10:53:08 kahan Exp $ */ libwww/Library/src/SSL/HTSSLMan.h0100644000076400001440000000152107405520456016115 0ustar danielusers /* The HTSSL Class Definition !The HTSSL Class Definition! Defines, manages and frees single SSL connection. */ #ifndef HTSSLMAN_H #define HTSSLMAN_H #ifdef __cplusplus extern "C" { #endif #include "HTSSL.h" struct _HTSSL { SSL * ssl; int sd; /* socket descriptor */ BOOL connected; int ref_count; }; extern HTSSL * HTSSL_new(int sd); extern void HTSSL_free(HTSSL *); extern BOOL HTSSL_connected(HTSSL * ssl); extern void HTSSL_set_disconnected(HTSSL * htssl); extern BOOL HTSSL_connect(HTSSL * ssl, int sd); extern int HTSSL_read(HTSSL * htssl, int sd, char * buff, int len); extern int HTSSL_write(HTSSL * htssl, int sd, char * buff, int len); #ifdef __cplusplus } #endif #endif /*HTSSLMAN_H*/ /* @(#) $Id: HTSSLMan.html,v 1.1 2025/06/09 16:28:57 kahan Exp $ */ libwww/Library/src/SSL/HTSSLReader.h0100644000076400001440000000254107405520456016607 0ustar danielusers/* W3C Sample Code Library SSL Reader Stream ! SSL Reader Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The SSL Reader Stream is an input stream which knows how to read from a SSL socket layer, for example provided by the OpenSSL Library. It is a libwww transport and may be registered using the Transport Manager. The application can initialize this stream together with the HTSSLWriter stream, for example. This module requires a SSL library in order to link/compile. This module is implemented by HTSSLReader.c, and it is a part of the W3C Sample Code Library. The module is contributed by Olga Antropova */ #ifndef HTSSLREADER_H #define HTSSLREADER_H #include "HTIOStream.h" /* . Input Buffering . In order to optimize reading a channel, we bind a buffer to each channel object. The size of this buffer is a compromise between speed and memory. Here it is chosen as the default TCP High Water Mark (sb_hiwat) for receiving data. By default, we have chosen a value that equals the normal TCP High Water Mark (sb_hiwat) for receiving data. */ #define INPUT_BUFFER_SIZE 32*1024 /* . SSL Read Stream . */ extern HTInput_new HTSSLReader_new; /* */ #endif /* HTSSLREADER_H */ /* @(#) $Id: HTSSLReader.html,v 1.1 2025/06/09 16:28:57 kahan Exp $ */ libwww/Library/src/SSL/HTSSLWriter.h0100644000076400001440000000216607405520456016664 0ustar danielusers/* W3C Sample Code Library libwww SSL Writer Stream ! SSL Writer Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The SSL Stream is an output stream which knows how to write to a SSL socket layer, for example provided by the OpenSSL Library. It is a libwww transport and may be registered using the Transport Manager. The application can initialize this stream together with the HTSSLReader stream, for example. This module is implemented by HTSSLWriter.c, and it is a part of the W3C Sample Code Library. The module is contributed by Olga Antropova */ #ifndef HTSSLWRITE_H #define HTSSLWRITE_H #include "HTIOStream.h" extern HTOutput_new HTSSLWriter_new; extern BOOL HTSSLWriter_set (HTOutputStream * me, HTNet * net, HTChannel * ch, void * param, int mode); #endif /* HTSSLWRITE_H */ /* @(#) $Id: HTSSLWriter.html,v 1.1 2025/06/09 16:28:57 kahan Exp $ */ libwww/Library/src/SSL/HTSSLhttps.h0100644000076400001440000000263407405520456016552 0ustar danielusers/* W3C Sample Code Library libwww Initializationg of SSL Transport As https Access Scheme ! Initializationg of SSL Transport As https Access Scheme ! This module sets up the SSL transport for handling the https URI access scheme. In fact the SSL module itself is completely independent and could as well be negotiated instead of getting a new URI scheme. The module is contributed by Olga Antropova */ #ifndef _HTSSLHTTPS_H #define _HTSSLHTTPS_H /* The initialization function initialies the SSL transports by doing the following: o Setting up a SSL application context o Registering the transport in the libwww HTTransport Manager o Registering the HTTP protocol module as a protocol handler in the libwww HTProtocol Manager for the https: access scheme o Registering a set of filters for handling HTTP caching, redirection, and authentication The termination function removes the application context, unregisteres the SSL transport in the libwww HTTransport Manager, and unregisteres the other things set up when initializing the SSL transport */ #ifndef SSL_PORT #define SSL_PORT 443 #endif extern BOOL HTSSLhttps_init (BOOL preemptive); extern BOOL HTSSLhttps_isInitialized (void); extern BOOL HTSSLhttps_terminate (void); /* */ #endif /* _HTSSLHTTPS_H */ /* @(#) $Id: HTSSLhttps.html,v 1.1 2025/06/09 16:28:57 kahan Exp $ */ libwww/Library/src/SSL/Makefile.in0100644000076400001440000003622307405520525016464 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ LDFLAGS = -version-info "1:0:1" lib_LTLIBRARIES = @WWWSSL@ EXTRA_LTLIBRARIES = libwwwssl.la SUBDIRS = windows # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .txt libwwwssl_la_SOURCES = WWWSSL.h HTSSL.h HTSSLMan.h HTSSL.c HTSSLReader.h HTSSLReader.c HTSSLWriter.h HTSSLWriter.c HTSSLhttps.h HTSSLhttps.c libwwwssl_la_LDFLAGS = -rpath $(libdir) LDADD = libwwwssl.la INCLUDES = -I/usr/local/include -I${top_srcdir}/modules/md5 -I${top_srcdir}/modules/expat/xmlparse -I$(top_srcdir)/Library/src @SSLINC@ BUILT_SOURCES = WWWSSL.h HTSSL.h HTSSLMan.h HTSSLReader.h HTSSLWriter.h HTSSLhttps.h pkginclude_HEADERS = $(BUILT_SOURCES) DOCS := $(wildcard *.html) EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../../.. CPPFLAGS = @CPPFLAGS@ LIBS = @LIBS@ libwwwssl_la_LIBADD = libwwwssl_la_OBJECTS = HTSSL.lo HTSSLReader.lo HTSSLWriter.lo \ HTSSLhttps.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(pkginclude_HEADERS) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/HTSSL.P .deps/HTSSLReader.P .deps/HTSSLWriter.P \ .deps/HTSSLhttps.P SOURCES = $(libwwwssl_la_SOURCES) OBJECTS = $(libwwwssl_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s .txt $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/src/SSL/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libwwwssl.la: $(libwwwssl_la_OBJECTS) $(libwwwssl_la_DEPENDENCIES) $(LINK) $(libwwwssl_la_LDFLAGS) $(libwwwssl_la_OBJECTS) $(libwwwssl_la_LIBADD) $(LIBS) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgincludedir) @list='$(pkginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p"; \ $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) list='$(pkginclude_HEADERS)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkgincludedir)/$$p; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src/SSL distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/src/SSL/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-libLTLIBRARIES install-exec: install-exec-recursive install-data-am: install-pkgincludeHEADERS install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS uninstall: uninstall-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(pkgincludedir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool uninstall-pkgincludeHEADERS \ install-pkgincludeHEADERS install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files but can't find the libwww" @echo "Line Mode Browser (www). Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/src/SSL/.deps/0040755000076400001440000000000007405520673015431 5ustar danieluserslibwww/Library/src/vms/0040755000076400001440000000000007405520571014561 5ustar danieluserslibwww/Library/src/vms/CVS/0040755000076400001440000000000007405517376015225 5ustar danieluserslibwww/Library/src/vms/CVS/Root0100644000076400001440000000005607405517374016067 0ustar danielusers:pserver:anonymous@dev.w3.org:/sources/public libwww/Library/src/vms/CVS/Repository0100644000076400001440000000002707405517374017321 0ustar danieluserslibwww/Library/src/vms libwww/Library/src/vms/CVS/Entries0100644000076400001440000000207207405517376016557 0ustar danielusers/.cvsignore/1.2/Thu Apr 18 01:41:58 1996// /COPYING.LIB/1.1/Tue Nov 16 14:20:18 1993// /HTVMSUtils.c/1.4/Tue Mar 21 17:48:26 1995// /HTVMSUtils.h/1.3/Tue Jul 12 14:49:50 1994// /Makefile.am/1.5/Mon Feb 22 23:06:13 1999// /build_multinet.com/1.4/Tue Jul 12 14:49:55 1994// /build_multinet.com_alpha/1.3/Tue Jul 12 14:50:04 1994// /build_ucx.com/1.2/Tue Jul 12 14:50:09 1994// /build_ucx.com_alpha/1.2/Tue Jul 12 14:50:13 1994// /crypt.c/1.1/Tue Nov 16 14:20:28 1993// /crypt_util.c/1.1/Tue Nov 16 14:20:30 1993// /descrip.mms/1.4/Tue Jul 12 14:50:19 1994// /dirent.c/1.2/Tue Jul 12 14:50:24 1994// /dirent.h/1.1/Thu Mar 10 15:55:42 1994// /getline.c/1.2/Tue Jul 12 14:50:29 1994// /getpass.c/1.2/Tue Jul 12 14:50:34 1994// /grpread.c/1.1/Tue Nov 16 14:20:50 1993// /multinet.opt/1.2/Tue Mar 1 10:34:31 1994// /multinet.opt_alpha/1.1/Tue Mar 1 10:34:34 1994// /patchlevel.h/1.1/Tue Nov 16 14:20:54 1993// /sys_dirent.h/1.1/Thu Mar 10 15:55:44 1994// /ucx.opt/1.1/Thu Mar 10 15:55:47 1994// /ucx.opt_alpha/1.1/Thu Mar 10 15:55:50 1994// /ufc-crypt.h/1.1/Tue Nov 16 14:21:02 1993// D libwww/Library/src/vms/Makefile0100644000076400001440000001444607405520571016227 0ustar danielusers# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = descrip.mms COPYING.LIB build_multinet.com build_multinet.com_alpha multinet.opt build_ucx.com build_ucx.com_alpha ucx.opt ucx.opt_alpha patchlevel.h ufc-crypt.h crypt.c crypt_util.c getline.c getpass.c HTVMSUtils.h HTVMSUtils.c dirent.h dirent.c sys_dirent.h mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = COPYING.LIB Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/src/vms/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src/vms distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/src/vms/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/src/vms/.cvsignore0100644000076400001440000000002506135316746016561 0ustar danielusersMakefile.in Makefile libwww/Library/src/vms/COPYING.LIB0100644000076400001440000006126105472160642016225 0ustar danielusers GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 2025 Ty Coon, President of Vice That's all there is to it! libwww/Library/src/vms/HTVMSUtils.c0100644000076400001440000005231205733610552016650 0ustar danielusers/* MODULE HTVMSUtil.c ** VMS Utility Routines ** ** AUTHORS: ** MD Mark Donszelmann duns@vxdeop.cern.ch ** FM Foteos Macrides macrides@sci.wfeb.edu ** ** HISTORY: ** 14 Nov 93 MD Written ** 31 Mar 94 FM Added HTVMS_disableAllPrv ** 06 Jul 94 FM Added HTVMS_getUIC and HTVMS_isOwner ** ** BUGS: ** ** */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "HTUtils.h" #include "HTVMSUtils.h" #include "HTAccess.h" #define INFINITY 512 /* file name length @@ FIXME */ typedef struct { unsigned BufferLength : 16; unsigned ItemCode : 16; unsigned BufferAddress : 32; unsigned ReturnLengthAddress : 32; } ItemStruct; /* PUBLIC HTVMS_authSysPrv() ** CHECKS IF THIS PROCESS IS AUTHORIZED TO ENABLE SYSPRV ** ON ENTRY: ** No arguments. ** ** ON EXIT: ** returns YES if SYSPRV is authorized */ PUBLIC BOOL HTVMS_authSysPrv NOARGS { unsigned long Result; ItemStruct ItemList[2]; unsigned long Length; unsigned long Buffer[2]; /* fill Item */ ItemList[0].BufferLength = sizeof(Buffer); ItemList[0].BufferAddress = Buffer; ItemList[0].ReturnLengthAddress = &Length; ItemList[0].ItemCode = JPI$_AUTHPRIV; /* terminate list */ ItemList[1].ItemCode = 0; ItemList[1].BufferLength = 0; /* call system */ Result = SYS$GETJPIW(0, 0, 0, ItemList, 0, 0, 0); if (Result != SS$_NORMAL) return(NO); if (Buffer[0] & PRV$M_SYSPRV) return(YES); return(NO); } /* PUBLIC HTVMS_enableSysPrv() ** ENABLES SYSPRV ** ON ENTRY: ** No arguments. ** ** ON EXIT: ** */ PUBLIC void HTVMS_enableSysPrv NOARGS { unsigned long Result; unsigned long Prv[2], PreviousPrv[2]; Prv[0] = PRV$M_SYSPRV; Prv[1] = 0; Result = SYS$SETPRV(1,&Prv,0,&PreviousPrv); if (Result == SS$_NORMAL) { if (!(PreviousPrv[0] & PRV$M_SYSPRV)) { CTRACE(TDEST, "VMS......... Enabled SYSPRV\n"); } } } /* PUBLIC HTVMS_disableSysPrv() ** DISABLES SYSPRV ** ON ENTRY: ** No arguments. ** ** ON EXIT: ** */ PUBLIC void HTVMS_disableSysPrv NOARGS { unsigned long Result; unsigned long Prv[2], PreviousPrv[2]; Prv[0] = PRV$M_SYSPRV; Prv[1] = 0; Result = SYS$SETPRV(0,&Prv,0,&PreviousPrv); if (Result == SS$_NORMAL) { if (PreviousPrv[0] & PRV$M_SYSPRV) { CTRACE(TDEST, "VMS......... Disabled SYSPRV\n"); } } } /* PUBLIC HTVMS_disableAllPrv() ** ** Disable all privileges except TMPMBX and NETMBX ** ** ON ENTRY: ** No arguments. ** ** ON EXIT: ** */ PUBLIC void HTVMS_disableAllPrv NOARGS { #ifndef MULTINET #define bzero(s,n) memset(s,'\0',n) #endif union prvdef prvadr; bzero((char *) &prvadr, sizeof(prvadr)); prvadr.prv$v_cmkrnl = 1; prvadr.prv$v_cmexec = 1; prvadr.prv$v_sysnam = 1; prvadr.prv$v_grpnam = 1; prvadr.prv$v_allspool = 1; prvadr.prv$v_detach = 1; prvadr.prv$v_diagnose = 1; prvadr.prv$v_log_io = 1; prvadr.prv$v_group = 1; prvadr.prv$v_noacnt = 1; prvadr.prv$v_prmceb = 1; prvadr.prv$v_prmmbx = 1; prvadr.prv$v_pswapm = 1; prvadr.prv$v_setpri = 1; prvadr.prv$v_setprv = 1; prvadr.prv$v_world = 1; prvadr.prv$v_mount = 1; prvadr.prv$v_oper = 1; prvadr.prv$v_exquota = 1; prvadr.prv$v_volpro = 1; prvadr.prv$v_phy_io = 1; prvadr.prv$v_bugchk = 1; prvadr.prv$v_prmgbl = 1; prvadr.prv$v_sysgbl = 1; prvadr.prv$v_pfnmap = 1; prvadr.prv$v_shmem = 1; prvadr.prv$v_sysprv = 1; prvadr.prv$v_bypass = 1; prvadr.prv$v_syslck = 1; prvadr.prv$v_share = 1; prvadr.prv$v_upgrade = 1; prvadr.prv$v_downgrade = 1; prvadr.prv$v_grpprv = 1; prvadr.prv$v_readall = 1; prvadr.prv$v_security = 1; } /* PUBLIC HTVMS_checkAccess() ** CHECKS ACCESS TO FILE FOR CERTAIN USER ** ON ENTRY: ** FileName The file to be accessed ** UserName Name of the user to check access for. ** User nobody, represented by "" is given NO for an answer ** Method Method to be checked for ** 'method' 'access reuired' ** METHOD_GET read ** METHOD_HEAD read ** ** ON EXIT: ** returns YES if access is allowed ** ** Not only filename is checked but also filename.dir... ** */ PUBLIC BOOL HTVMS_checkAccess ARGS3( CONST char *, FileName, CONST char *, UserName, HTMethod, Method) { unsigned long Result; ItemStruct ItemList[2]; unsigned long Flags; unsigned long FlagsLength; unsigned long Access; unsigned long AccessLength; unsigned long ObjType; char *VmsName; char Fname[256]; struct dsc$descriptor_s FileNameDesc; struct dsc$descriptor_s UserNameDesc; char *colon; /* user nobody should access as from account under which server is running */ if (0 == strcmp(UserName,"")) { CTRACE(TDEST, "VMSAccess... No access allowed user nobody. Error in rulefile specifying 'nobody' as uid for protect rule\n"); return(NO); } /* make local copy */ strcpy(Fname,FileName); /* strip off last slash anyway */ if (Fname[strlen(Fname)-1] == '/') Fname[strlen(Fname)-1] = '\0'; /* check Filename and convert */ colon = strchr(Fname,':'); if (colon) VmsName = HTVMS_name("",colon+1); else VmsName = HTVMS_name("",Fname); /* check for GET */ if ((Method == METHOD_GET) || (Method == METHOD_HEAD)) { Access = ARM$M_READ; Flags = CHP$M_READ; /* fill Access */ ItemList[0].BufferLength = sizeof(Access); ItemList[0].BufferAddress = &Access; ItemList[0].ReturnLengthAddress = &AccessLength; ItemList[0].ItemCode = CHP$_ACCESS; /* fill Flags */ ItemList[1].BufferLength = sizeof(Flags); ItemList[1].BufferAddress = &Flags; ItemList[1].ReturnLengthAddress = &FlagsLength; ItemList[1].ItemCode = CHP$_FLAGS; /* terminate list */ ItemList[2].ItemCode = 0; ItemList[2].BufferLength = 0; /* fill input */ ObjType = ACL$C_FILE; UserNameDesc.dsc$w_length = strlen(UserName); UserNameDesc.dsc$b_dtype = DSC$K_DTYPE_T; UserNameDesc.dsc$b_class = DSC$K_CLASS_S; UserNameDesc.dsc$a_pointer = UserName; FileNameDesc.dsc$w_length = strlen(VmsName); FileNameDesc.dsc$b_dtype = DSC$K_DTYPE_T; FileNameDesc.dsc$b_class = DSC$K_CLASS_S; FileNameDesc.dsc$a_pointer = VmsName; /* call system for filename */ Result = SYS$CHECK_ACCESS(&ObjType,&FileNameDesc,&UserNameDesc,ItemList); if (Result == SS$_NORMAL) return(YES); /* try with extension .dir... */ strcat(VmsName,".dir"); FileNameDesc.dsc$w_length = strlen(VmsName); Result = SYS$CHECK_ACCESS(&ObjType,&FileNameDesc,&UserNameDesc,ItemList); if (Result == SS$_NORMAL) return(YES); /* failed for filename and .dir */ CTRACE(TDEST, "VMSAccess... No access allowed for user '%s', file '%s' under method '%s'\n",UserName,Fname,HTMethod_name(Method)); return(NO); } CTRACE(TDEST, "VMSAccess... No access allowed for method '%s'\n",HTMethod_name(Method)); return(NO); } /* PUBLIC HTVMS_wwwName() ** CONVERTS VMS Name into WWW Name ** ON ENTRY: ** vmsname VMS file specification (NO NODE) ** ** ON EXIT: ** returns www file specification ** ** EXAMPLES: ** vmsname wwwname ** DISK$USER disk$user ** DISK$USER: /disk$user/ ** DISK$USER:[DUNS] /disk$user/duns ** DISK$USER:[DUNS.ECHO] /disk$user/duns/echo ** [DUNS] duns ** [DUNS.ECHO] duns/echo ** [DUNS.ECHO.-.TRANS] duns/echo/../trans ** [DUNS.ECHO.--.TRANS] duns/echo/../../trans ** [.DUNS] duns ** [.DUNS.ECHO] duns/echo ** [.DUNS.ECHO]TEST.COM duns/echo/test.com ** [.DUNS.ECHO]TEST-BLAH.COM duns/echo/test-blah.com ** [.DUNS-ECHO]TEST.COM duns-echo/test.com ** [.X-----]TEST.COM x-----/test.com ** TEST.COM test.com ** DISK$USER:[DUNS].RHOSTS /disk$user/duns/.rhosts ** ** */ PUBLIC char * HTVMS_wwwName ARGS1( char *, vmsname) { static char wwwname[256]; char *src, *dst; int dir, up; dst = wwwname; src = vmsname; dir = 0; up = 0; if (strchr(src,':')) *(dst++) = '/'; for ( ; *src != '\0' ; src++) { switch(*src) { case ':': *(dst++) = '/'; break; case '-': /* dashes might exist in filename and directory names... */ if (up) { /* directory and up */ if (*(src-1) == '-') *(dst++) = '/'; *(dst++) = '.'; *(dst++) = '.'; } else { /* filename or directory name with a dash */ *(dst++) = '-'; } break; case '.': if (dir) { if (*(src-1) != '[') *(dst++) = '/'; up = 1; } else { if (*(src-1) == ']') *(dst++) = '/'; *(dst++) = '.'; } break; case '[': dir = 1; up = 1; break; case ']': dir = 0; up = 0; break; default: up = 0; if (*(src-1) == ']') *(dst++) = '/'; *(dst++) = *src; break; } } *(dst++) = '\0'; return(wwwname); } /* PUBLIC HTVMS_name() ** CONVERTS WWW name into a VMS name ** ON ENTRY: ** nn Node Name (optional) ** fn WWW file name ** ** ON EXIT: ** returns vms file specification ** ** Bug: Returns pointer to static -- non-reentrant */ PUBLIC char * HTVMS_name ARGS2( CONST char *, nn, CONST char *, fn) { /* We try converting the filename into Files-11 syntax. That is, we assume ** first that the file is, like us, on a VMS node. We try remote ** (or local) DECnet access. Files-11, VMS, VAX and DECnet ** are trademarks of Digital Equipment Corporation. ** The node is assumed to be local if the hostname WITHOUT DOMAIN ** matches the local one. @@@ */ static char vmsname[INFINITY]; /* returned */ char * filename = (char*)malloc(strlen(fn)+1); char * nodename = (char*)malloc(strlen(nn)+2+1); /* Copies to hack */ char *second; /* 2nd slash */ char *last; /* last slash */ char * hostname = HTGetHostName(); if (!filename || !nodename) outofmem(__FILE__, "HTVMSname"); strcpy(filename, fn); strcpy(nodename, ""); /* On same node? Yes if node names match */ { char *p, *q; for (p=hostname, q=nn; *p && *p!='.' && *q && *q!='.'; p++, q++){ if (TOUPPER(*p)!=TOUPPER(*q)) { strcpy(nodename, nn); q = strchr(nodename, '.'); /* Mismatch */ if (q) *q=0; /* Chop domain */ strcat(nodename, "::"); /* Try decnet anyway */ break; } } } second = strchr(filename+1, '/'); /* 2nd slash */ last = strrchr(filename, '/'); /* last slash */ if (!second) { /* Only one slash */ sprintf(vmsname, "%s%s", nodename, filename + 1); } else if(second==last) { /* Exactly two slashes */ *second = 0; /* Split filename from disk */ sprintf(vmsname, "%s%s:%s", nodename, filename+1, second+1); *second = '/'; /* restore */ } else { /* More than two slashes */ char * p; *second = 0; /* Split disk from directories */ *last = 0; /* Split dir from filename */ sprintf(vmsname, "%s%s:[%s]%s", nodename, filename+1, second+1, last+1); *second = *last = '/'; /* restore filename */ for (p=strchr(vmsname, '['); *p!=']'; p++) if (*p=='/') *p='.'; /* Convert dir sep. to dots */ } free(nodename); free(filename); return vmsname; } /* PUBLIC HTVMS_putenv() ** Create logical name ** ON ENTRY: ** string name value pair separated by equal sign. ** "name=value" ** ** ** ON EXIT: ** 0 ok ** 1 failed ** */ PUBLIC int HTVMS_putenv ARGS1( CONST char *, string) { $DESCRIPTOR(job_table,"LNM$JOB"); char * name = (char*)malloc(strlen(string)+1); char * value = (char*)malloc(strlen(string)+1); /* Copies to hack */ char * equal; long result = 1; /* separate pair */ strcpy(name,string); equal = strchr(name,'='); if (equal) { ItemStruct ItemList[2]; struct dsc$descriptor_s log_name; /* get value */ *equal = '\0'; strcpy(value,equal+1); /* fill logical name */ log_name.dsc$w_length = strlen(name); log_name.dsc$b_dtype = DSC$K_DTYPE_T; log_name.dsc$b_class = DSC$K_CLASS_S; log_name.dsc$a_pointer = name; /* fill Item */ ItemList[0].BufferLength = strlen(value); ItemList[0].BufferAddress = value; ItemList[0].ReturnLengthAddress = 0; ItemList[0].ItemCode = LNM$_STRING; /* terminate list */ ItemList[1].ItemCode = 0; ItemList[1].BufferLength = 0; /* put into job logical name table */ result = SYS$CRELNM(0, &job_table, &log_name, 0, ItemList); if ((result == SS$_NORMAL) || (result == SS$_SUPERSEDE)) result = 0; else result = 1; } free(name); free(value); return(result); } /* PUBLIC HTVMS_start_timer() ** Starts a timer ** ON ENTRY: ** n A number to recognise the timer. 0 may be used to ** say that recognision is not needed ** fun ptr to a function to be called asynchronously ** sec number of seconds to wait before firing. ** ** ** ON EXIT: ** */ PUBLIC void HTVMS_start_timer ARGS3( CONST int, n, CONST char *, fun, CONST int, sec) { long Result; long DeltaTime[2]; long Operation = LIB$K_DELTA_SECONDS; Result = LIB$CVT_TO_INTERNAL_TIME(&Operation, &sec, DeltaTime); Result = SYS$SETIMR(0, DeltaTime, fun, n, 0); } /* PUBLIC HTVMS_cancel_timer() ** Cancel a specific or all timers ** ON ENTRY: ** n timer number (0 to cancel all timers) ** ** ** ON EXIT: ** */ PUBLIC void HTVMS_cancel_timer ARGS1( CONST int, n) { long Result; Result = SYS$CANTIM(n, 0); } /* PUBLIC HTVMS_getpwnam() ** getpwnam routine ** ON ENTRY: ** username Username specification ** ** ** ON EXIT: ** NULL error ** */ PUBLIC struct passwd *HTVMS_getpwnam ARGS1( CONST char *, username) { long Result; struct dsc$descriptor_s UserNameDesc; ItemStruct ItemList[3]; unsigned long DeviceLength; char Device[33]; unsigned long DirLength; char Dir[64]; char VMSName[100]; static struct passwd pw; static char pw_dir[100]; /* make sure pointers are correct */ pw.pw_dir = pw_dir; /* construct UserName */ UserNameDesc.dsc$w_length = strlen(username); UserNameDesc.dsc$b_dtype = DSC$K_DTYPE_T; UserNameDesc.dsc$b_class = DSC$K_CLASS_S; UserNameDesc.dsc$a_pointer = username; /* Default Device */ ItemList[0].BufferLength = 33; ItemList[0].BufferAddress = Device; ItemList[0].ReturnLengthAddress = &DeviceLength; ItemList[0].ItemCode = UAI$_DEFDEV; /* Default Directory */ ItemList[1].BufferLength = 64; ItemList[1].BufferAddress = Dir; ItemList[1].ReturnLengthAddress = &DirLength; ItemList[1].ItemCode = UAI$_DEFDIR; /* terminate list */ ItemList[2].ItemCode = 0; ItemList[2].BufferLength = 0; /* get info */ Result = SYS$GETUAI(0,0,&UserNameDesc,ItemList,0,0,0); if (Result != SS$_NORMAL) return(NULL); /* create vms name */ strncpy(VMSName,&(Device[1]),Device[0]); VMSName[Device[0]] = '\0'; strncat(VMSName,&(Dir[1]),Dir[0]); VMSName[Device[0]+Dir[0]] = '\0'; /* convert it into www name */ strcpy(pw_dir,HTVMS_wwwName(VMSName)); return(&pw); } PUBLIC int HTStat ARGS2( char *, filename, stat_t *, info) { /* the following stuff does not work in VMS with a normal stat... --> /disk$user/duns/www if www is a directory is statted like: /disk$user/duns/www.dir after a normal stat has failed --> /disk$user/duns if duns is a toplevel directory is statted like: /disk$user/000000/duns.dir --> /disk$user since disk$user is a device is statted like: /disk$user/000000/000000.dir --> / searches all devices, no solution yet... --> /vxcern!/disk$cr/wwwteam/login.com is not statted but granted with fake information... */ int Result; int Len; char *Ptr, *Ptr2; char Name[256]; /* try normal stat... */ Result = stat(filename,info); if (Result == 0) return(Result); /* make local copy */ strcpy(Name,filename); /* if filename contains a node specification (! or ::), we will try to access the file via DECNET, but we do not stat it..., just return success with some fake information... */ if (HTVMS_checkDecnet(Name)) { /* set up fake info, only the one we use... */ info->st_dev = NULL; info->st_ino[0] = 0; info->st_ino[1] = 0; info->st_ino[2] = 0; info->st_mode = S_IFREG | S_IREAD; /* assume it is a regular Readable file */ info->st_nlink = NULL; info->st_uid = 0; info->st_gid = 0; info->st_rdev = 0; info->st_size = 0; info->st_atime = time(NULL); info->st_mtime = time(NULL); info->st_ctime = time(NULL); return(0); } /* failed,so do device search in case root is requested */ if (!strcmp(Name,"/")) { /* root requested */ return(-1); } /* failed so this might be a directory, add '.dir' */ Len = strlen(Name); if (Name[Len-1] == '/') Name[Len-1] = '\0'; /* fail in case of device */ Ptr = strchr(Name+1,'/'); if ((Ptr == NULL) && (Name[0] == '/')) { /* device only... */ strcat(Name,"/000000/000000"); } if (Ptr != NULL) { /* correct filename in case of toplevel dir */ Ptr2 = strchr(Ptr+1,'/'); if ((Ptr2 == NULL) && (Name[0] == '/')) { char End[256]; strcpy(End,Ptr); *(Ptr+1) = '\0'; strcat(Name,"000000"); strcat(Name,End); } } /* try in case a file on toplevel directory or .DIR was alreadyt specified */ Result = stat(Name,info); if (Result == 0) return(Result); /* add .DIR and try again */ strcat(Name,".dir"); Result = stat(Name,info); return(Result); } PUBLIC int HTVMS_checkDecnet ARGS1( char *, filename) { /* for VMS we take of the first slash in case a nodename is specified to make sure we access over decnet */ /* nodenames can only be specified if the first part in the filename contains either '!', just before the second slash, or '::' */ int slash = 1; if (filename[0] == '/') for (slash = 1; (filename[slash] != '\0') && (filename[slash] != '/'); slash++) ; /* second slash found */ if (filename[slash] == '/') { /* unix syntax */ if ( ((slash >= 1) && (filename[slash-1] == '!')) || ((slash >= 3) && (!strcmp(&filename[slash-3],"%21"))) ) { char *p; for (p = filename; *(p+1) != '\0'; p++) *p = *(p+1); *p = *(p+1); return(1); } } else { /* vms syntax */ if (strstr(filename,"::") || strstr(filename,"%3A%3A") ) { char *p; for (p = filename; *(p+1) != '\0'; p++) *p = *(p+1); *p = *(p+1); return(1); } } return(0); } /* PUBLIC HTVMS_getUIC() ** getUIC routine ** ON ENTRY: ** username Username specification ** ** ** ON EXIT: ** 0 error ** UIC VMS User Identification Code for username ** */ PUBLIC unsigned int HTVMS_getUIC ARGS1( CONST char *, username) { long Result; struct dsc$descriptor_s UserNameDesc; ItemStruct ItemList[2]; unsigned long UIC; unsigned long UICLength; /* construct UserName */ UserNameDesc.dsc$w_length = strlen(username); UserNameDesc.dsc$b_dtype = DSC$K_DTYPE_T; UserNameDesc.dsc$b_class = DSC$K_CLASS_S; UserNameDesc.dsc$a_pointer = username; /* UIC */ ItemList[0].BufferLength = sizeof(UIC); ItemList[0].BufferAddress = &UIC; ItemList[0].ReturnLengthAddress = &UICLength; ItemList[0].ItemCode = UAI$_UIC; /* terminate list */ ItemList[1].ItemCode = 0; ItemList[1].BufferLength = 0; /* get info */ Result = SYS$GETUAI(0,0,&UserNameDesc,ItemList,0,0,0); if (Result != SS$_NORMAL) return(0); else return((unsigned int) UIC); } /* PUBLIC HTVMS_isOwner() ** CHECKS OWNERSHIP OF FILE FOR CERTAIN USER ** ON ENTRY: ** FileName The file or directory to be checked ** UserName Name of the user to check ownership for. ** User nobody, represented by "" is given NO for an answer ** ** ON EXIT: ** returns YES if FileName is owned by UserName ** */ PUBLIC BOOL HTVMS_isOwner ARGS2( CONST char *, FileName, CONST char *, UserName) { struct stat buf; int Result; /* user nobody should access as from account under which server is running */ if (0 == strcmp(UserName,"")) { CTRACE(TDEST, "VMSisOwner.. No access allowed user nobody.\n"); return(NO); } /* load buf */ Result = HTStat(FileName, &buf); if (Result) { CTRACE(TDEST, "VMSisOwner.. HTStat() failed for '%s'\n", FileName); return NO; /* no file or directory, so UserName can't own it */ } /* compare with UIC for UserName */ if (buf.st_uid != HTVMS_getUIC(UserName)) { CTRACE(TDEST, "VMSisOwner.. '%s' does not own '%s'\n", UserName, FileName); return NO; } return YES; } libwww/Library/src/vms/HTVMSUtils.h0100644000076400001440000001140205610526616016651 0ustar danielusers/* VMS specific routines */ #ifndef HTVMSUTIL_H #define HTVMSUTIL_H /* define some masks as given in Unix stat.h file... */ #define S_IFLNK 0120000 #define S_IFSOCK 0140000 #define S_IFIFO 0010000 #define S_IRWXU 0000700 /* rwx, owner */ #define S_IRUSR 0000400 /* read permission, owner */ #define S_IWUSR 0000200 /* write permission, owner */ #define S_IXUSR 0000100 /* execute/search permission, owner */ #define S_IRWXG 0000070 /* rwx, group */ #define S_IRGRP 0000040 /* read permission, group */ #define S_IWGRP 0000020 /* write permission, grougroup */ #define S_IXGRP 0000010 /* execute/search permission, group */ #define S_IRWXO 0000007 /* rwx, other */ #define S_IROTH 0000004 /* read permission, other */ #define S_IWOTH 0000002 /* write permission, other */ #define S_IXOTH 0000001 /* execute/search permission, other */ /* PUBLIC HTVMS_authSysPrv() ** CHECKS IF THIS PROCESS IS AUTHORIZED TO ENABLE SYSPRV ** ON ENTRY: ** No arguments. ** ** ON EXIT: ** returns YES if SYSPRV is authorized */ PUBLIC BOOL HTVMS_authSysPrv NOPARAMS; /* PUBLIC HTVMS_enableSysPrv() ** ENABLES SYSPRV ** ON ENTRY: ** No arguments. ** ** ON EXIT: ** */ PUBLIC void HTVMS_enableSysPrv NOPARAMS; /* PUBLIC HTVMS_disableSysPrv() ** DISABLES SYSPRV ** ON ENTRY: ** No arguments. ** ** ON EXIT: ** */ PUBLIC void HTVMS_disableSysPrv NOPARAMS; /* PUBLIC HTVMS_checkAccess() ** CHECKS ACCESS TO FILE FOR CERTAIN USER ** ON ENTRY: ** FileName The file to be accessed ** UserName Name of the user to check access for ** ** ON EXIT: ** returns YES if access is allowed ** */ PUBLIC BOOL HTVMS_checkAccess PARAMS(( CONST char * FileName, CONST char * UserName, HTMethod Method)); /* PUBLIC HTVMS_wwwName() ** CONVERTS VMS Name into WWW Name ** ON ENTRY: ** vmsname VMS file specification (NO NODE) ** ** ON EXIT: ** returns www file specification ** ** EXAMPLES: ** vmsname wwwname ** DISK$USER disk$user ** DISK$USER: /disk$user/ ** DISK$USER:[DUNS] /disk$user/duns ** DISK$USER:[DUNS.ECHO] /disk$user/duns/echo ** [DUNS] duns ** [DUNS.ECHO] duns/echo ** [DUNS.ECHO.-.TRANS] duns/echo/../trans ** [DUNS.ECHO.--.TRANS] duns/echo/../../trans ** [.DUNS] duns ** [.DUNS.ECHO] duns/echo ** [.DUNS.ECHO]TEST.COM duns/echo/test.com ** TEST.COM test.com ** ** */ PUBLIC char * HTVMS_wwwName PARAMS(( char * vmsname)); /* PUBLIC HTVMS_name() ** CONVERTS WWW name into a VMS name ** ON ENTRY: ** nn Node Name (optional) ** fn WWW file name ** ** ON EXIT: ** returns vms file specification ** ** Bug: Returns pointer to static -- non-reentrant */ PUBLIC char * HTVMS_name PARAMS(( CONST char * nn, CONST char * fn)); /* PUBLIC HTVMS_putenv() ** Create logical name ** ON ENTRY: ** string name value pair separated by equal sign. ** "name=value" ** ** ** ON EXIT: ** */ PUBLIC int HTVMS_putenv PARAMS(( CONST char * string)); /* PUBLIC HTVMS_start_timer() ** Starts a timer ** ON ENTRY: ** n A number to recognise the timer. 0 may be used to ** say that recognision is not needed ** fun ptr to a function to be called asynchronously ** sec number of seconds to wait before firing. ** ** ** ON EXIT: ** */ PUBLIC void HTVMS_start_timer PARAMS(( CONST int n, CONST (*fun)(), CONST int sec)); /* PUBLIC HTVMS_cancel_timer() ** Cancel a specific or all timers ** ON ENTRY: ** n timer number (0 to cancel all timers) ** ** ** ON EXIT: ** */ PUBLIC void HTVMS_cancel_timer PARAMS(( CONST int n)); #define getpwnam HTVMS_getpwnam struct passwd { char *pw_dir; /* Home Directory */ }; /* PUBLIC HTVMS_getpwnam() ** getpwnam routine ** ON ENTRY: ** username Username specification ** ** ** ON EXIT: ** NULL error ** */ PUBLIC struct passwd *HTVMS_getpwnam PARAMS(( CONST char *, username)); PUBLIC int HTStat PARAMS(( CONST char *, filename, stat_t *, info)); PUBLIC int HTVMS_checkDecnet PARAMS(( CONST char *, filename)); /* PUBLIC HTVMS_getUIC() ** getUIC routine ** ON ENTRY: ** username Username specification ** ** ** ON EXIT: ** 0 error ** UIC VMS User Identification Code for username ** */ PUBLIC unsigned int HTVMS_getUIC PARAMS(( CONST char *, username)); /* PUBLIC HTVMS_isOwner() ** CHECKS OWNERSHIP OF FILE FOR CERTAIN USER ** ON ENTRY: ** FileName The file or directory to be checked ** UserName Name of the user to check ownership for. ** User nobody, represented by "" is given NO for an answer ** ** ON EXIT: ** returns YES if FileName is owned by UserName ** */ PUBLIC BOOL HTVMS_isOwner PARAMS(( CONST char *, FileName, CONST char *, UserName)); #endif /* not HTVMSUTIL_H */ /* End of file HTVMSUtil.h. */ libwww/Library/src/vms/Makefile.am0100644000076400001440000000064606664361345016630 0ustar danielusers## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign EXTRA_DIST = \ descrip.mms \ COPYING.LIB \ build_multinet.com \ build_multinet.com_alpha \ multinet.opt \ build_ucx.com \ build_ucx.com_alpha \ ucx.opt \ ucx.opt_alpha \ patchlevel.h \ ufc-crypt.h \ crypt.c \ crypt_util.c \ getline.c \ getpass.c \ HTVMSUtils.h \ HTVMSUtils.c \ dirent.h \ dirent.c \ sys_dirent.h libwww/Library/src/vms/build_multinet.com0100644000076400001440000003607505610526623020311 0ustar danielusers$ WRITE SYS$OUTPUT "Creating WWWLIB for "MULTINET" on "VAX"." $ WRITE SYS$OUTPUT "=================================================" $ IF "''F$SEARCH("[--.VAX.MULTINET]*.*")'" .EQS. "" THEN CREATE/DIR [--.VAX.MULTINET] $ copy []MULTINET.opt [--.VAX.MULTINET]wwwlib.opt $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTPARSE.obj [-]HTParse.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTPARSE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTACCESS.obj [-]HTAccess.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTACCESS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTTP.obj [-]HTTP.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTTP.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTFILE.obj [-]HTFile.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTFILE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTMULTI.obj [-]HTMulti.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTMULTI.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTBTREE.obj [-]HTBTree.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTBTREE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTFTP.obj [-]HTFTP.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTFTP.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTTCP.obj [-]HTTCP.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTTCP.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]SGML.obj [-]SGML.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]SGML.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTML.obj [-]HTML.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTML.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTMLPDTD.obj [-]HTMLPDTD.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTMLPDTD.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTCHUNK.obj [-]HTChunk.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTCHUNK.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTPLAIN.obj [-]HTPlain.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTPLAIN.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTWRITER.obj [-]HTWriter.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTWRITER.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTFWRITER.obj [-]HTFWriter.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTFWRITER.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTMLGEN.obj [-]HTMLGen.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTMLGEN.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTTEE.obj [-]HTTee.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTTEE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTATOM.obj [-]HTAtom.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTATOM.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTANCHOR.obj [-]HTAnchor.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTANCHOR.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTSTYLE.obj [-]HTStyle.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTSTYLE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTLIST.obj [-]HTList.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTLIST.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTSTRING.obj [-]HTString.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTSTRING.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTALERT.obj [-]HTAlert.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTALERT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTRULES.obj [-]HTRules.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTRULES.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTFORMAT.obj [-]HTFormat.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTFORMAT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTINIT.obj [-]HTInit.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTINIT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTMIME.obj [-]HTMIME.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTMIME.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTHISTORY.obj [-]HTHistory.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTHISTORY.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTNEWS.obj [-]HTNews.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTNEWS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTGOPHER.obj [-]HTGopher.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTGOPHER.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTTELNET.obj [-]HTTelnet.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTTELNET.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTWSRC.obj [-]HTWSRC.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTWSRC.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTAAUTIL.obj [-]HTAAUtil.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTAAUTIL.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTAABROW.obj [-]HTAABrow.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTAABROW.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTASSOC.obj [-]HTAssoc.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTASSOC.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTUU.obj [-]HTUU.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTUU.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTTEXGEN.obj [-]HTTeXGen.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTTEXGEN.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTDIRBRW.obj [-]HTDirBrw.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTDIRBRW.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTDESCRIPT.obj [-]HTDescript.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTDESCRIPT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTGUESS.obj [-]HTGuess.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTGUESS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTICONS.obj [-]HTIcons.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTICONS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTERROR.obj [-]HTError.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTERROR.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTERRORMSG.obj [-]HTErrorMsg.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTERRORMSG.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]HTVMSUTILS.obj []HTVMSUtils.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]HTVMSUTILS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]GETPASS.obj []GETPASS.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]GETPASS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]GETLINE.obj []GETLINE.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]GETLINE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]CRYPT.obj []CRYPT.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]CRYPT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]CRYPT_UTIL.obj []CRYPT_UTIL.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]CRYPT_UTIL.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms1""",MULTINET)/INC=([],[-])/obj=[--.VAX.MULTINET]DIRENT.obj []dirent.c $ If "''F$Search("[--.VAX.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.MULTINET]WWWLIB.OLB [--.VAX.MULTINET]DIRENT.OBJ $ continue libwww/Library/src/vms/build_multinet.com_alpha0100644000076400001440000004145705610526634021460 0ustar danielusers$ WRITE SYS$OUTPUT "Creating WWWLIB for "MULTINET" on "ALPHA"." $ WRITE SYS$OUTPUT "=================================================" $ IF "''F$SEARCH("[--.ALPHA.MULTINET]*.*")'" .EQS. "" THEN CREATE/DIR [--.ALPHA.MULTINET] $ copy []MULTINET.opt_ALPHA [--.ALPHA.MULTINET]wwwlib.opt $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTPARSE.obj [-]HTParse.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTPARSE.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTACCESS.obj [-]HTAccess.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTACCESS.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTTP.obj [-]HTTP.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTTP.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTFILE.obj [-]HTFile.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTFILE.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTMULTI.obj [-]HTMulti.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTMULTI.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTBTREE.obj [-]HTBTree.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTBTREE.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTFTP.obj [-]HTFTP.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTFTP.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTTCP.obj [-]HTTCP.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTTCP.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]SGML.obj [-]SGML.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]SGML.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTML.obj [-]HTML.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTML.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTMLPDTD.obj [-]HTMLPDTD.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTMLPDTD.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTCHUNK.obj [-]HTChunk.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTCHUNK.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTPLAIN.obj [-]HTPlain.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTPLAIN.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTWRITER.obj [-]HTWriter.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTWRITER.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTFWRITER.obj [-]HTFWriter.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTFWRITER.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTMLGEN.obj [-]HTMLGen.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTMLGEN.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTTEE.obj [-]HTTee.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTTEE.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTATOM.obj [-]HTAtom.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTATOM.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTANCHOR.obj [-]HTAnchor.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTANCHOR.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTSTYLE.obj [-]HTStyle.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTSTYLE.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTLIST.obj [-]HTList.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTLIST.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTSTRING.obj [-]HTString.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTSTRING.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTALERT.obj [-]HTAlert.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTALERT.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTRULES.obj [-]HTRules.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTRULES.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTFORMAT.obj [-]HTFormat.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTFORMAT.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTINIT.obj [-]HTInit.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTINIT.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTMIME.obj [-]HTMIME.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTMIME.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTHISTORY.obj [-]HTHistory.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTHISTORY.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTNEWS.obj [-]HTNews.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTNEWS.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTGOPHER.obj [-]HTGopher.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTGOPHER.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTTELNET.obj [-]HTTelnet.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTTELNET.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTWSRC.obj [-]HTWSRC.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTWSRC.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTAAUTIL.obj [-]HTAAUtil.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTAAUTIL.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTAABROW.obj [-]HTAABrow.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTAABROW.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTASSOC.obj [-]HTAssoc.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTASSOC.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTUU.obj [-]HTUU.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTUU.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTTEXGEN.obj [-]HTTeXGen.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTTEXGEN.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTDIRBRW.obj [-]HTDirBrw.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTDIRBRW.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTDESCRIPT.obj [-]HTDescript.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTDESCRIPT.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTGUESS.obj [-]HTGuess.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTGUESS.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTICONS.obj [-]HTIcons.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTICONS.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTERROR.obj [-]HTError.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTERROR.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTERRORMSG.obj [-]HTErrorMsg.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTERRORMSG.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]HTVMSUTILS.obj []HTVMSUtils.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]HTVMSUTILS.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]GETPASS.obj []GETPASS.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]GETPASS.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]GETLINE.obj []GETLINE.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]GETLINE.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]CRYPT.obj []CRYPT.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]CRYPT.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]CRYPT_UTIL.obj []CRYPT_UTIL.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]CRYPT_UTIL.OBJ $ cc /Standard=VAXC/Prefix=ANSI/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",MULTINET)/INC=([],[-])/obj=[--.ALPHA.MULTINET]DIRENT.obj []dirent.c $ If "''F$Search("[--.ALPHA.MULTINET]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.MULTINET]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.MULTINET]WWWLIB.OLB [--.ALPHA.MULTINET]DIRENT.OBJ $ continue libwww/Library/src/vms/build_ucx.com0100644000076400001440000003314605610526641017243 0ustar danielusers$ WRITE SYS$OUTPUT "Creating WWWLIB for "UCX" on "VAX"." $ WRITE SYS$OUTPUT "=================================================" $ IF "''F$SEARCH("[--.VAX.UCX]*.*")'" .EQS. "" THEN CREATE/DIR [--.VAX.UCX] $ copy []UCX.opt [--.VAX.UCX]wwwlib.opt $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTPARSE.obj [-]HTParse.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTPARSE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTACCESS.obj [-]HTAccess.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTACCESS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTTP.obj [-]HTTP.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTTP.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTFILE.obj [-]HTFile.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTFILE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTMULTI.obj [-]HTMulti.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTMULTI.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTBTREE.obj [-]HTBTree.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTBTREE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTFTP.obj [-]HTFTP.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTFTP.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTTCP.obj [-]HTTCP.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTTCP.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]SGML.obj [-]SGML.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]SGML.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTML.obj [-]HTML.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTML.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTMLPDTD.obj [-]HTMLPDTD.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTMLPDTD.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTCHUNK.obj [-]HTChunk.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTCHUNK.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTPLAIN.obj [-]HTPlain.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTPLAIN.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTWRITER.obj [-]HTWriter.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTWRITER.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTFWRITER.obj [-]HTFWriter.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTFWRITER.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTMLGEN.obj [-]HTMLGen.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTMLGEN.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTTEE.obj [-]HTTee.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTTEE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTATOM.obj [-]HTAtom.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTATOM.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTANCHOR.obj [-]HTAnchor.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTANCHOR.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTSTYLE.obj [-]HTStyle.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTSTYLE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTLIST.obj [-]HTList.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTLIST.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTSTRING.obj [-]HTString.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTSTRING.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTALERT.obj [-]HTAlert.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTALERT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTRULES.obj [-]HTRules.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTRULES.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTFORMAT.obj [-]HTFormat.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTFORMAT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTINIT.obj [-]HTInit.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTINIT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTMIME.obj [-]HTMIME.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTMIME.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTHISTORY.obj [-]HTHistory.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTHISTORY.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTNEWS.obj [-]HTNews.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTNEWS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTGOPHER.obj [-]HTGopher.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTGOPHER.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTTELNET.obj [-]HTTelnet.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTTELNET.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTWSRC.obj [-]HTWSRC.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTWSRC.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTAAUTIL.obj [-]HTAAUtil.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTAAUTIL.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTAABROW.obj [-]HTAABrow.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTAABROW.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTASSOC.obj [-]HTAssoc.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTASSOC.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTUU.obj [-]HTUU.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTUU.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTTEXGEN.obj [-]HTTeXGen.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTTEXGEN.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTDIRBRW.obj [-]HTDirBrw.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTDIRBRW.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTDESCRIPT.obj [-]HTDescript.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTDESCRIPT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTGUESS.obj [-]HTGuess.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTGUESS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTICONS.obj [-]HTIcons.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTICONS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTERROR.obj [-]HTError.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTERROR.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTERRORMSG.obj [-]HTErrorMsg.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTERRORMSG.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]HTVMSUTILS.obj []HTVMSUtils.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]HTVMSUTILS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]GETPASS.obj []GETPASS.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]GETPASS.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]GETLINE.obj []GETLINE.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]GETLINE.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]CRYPT.obj []CRYPT.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]CRYPT.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]CRYPT_UTIL.obj []CRYPT_UTIL.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]CRYPT_UTIL.OBJ $ cc /DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.VAX.UCX]DIRENT.obj []dirent.c $ If "''F$Search("[--.VAX.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.VAX.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.VAX.UCX]WWWLIB.OLB [--.VAX.UCX]DIRENT.OBJ $ continue libwww/Library/src/vms/build_ucx.com_alpha0100644000076400001440000003644705610526645020423 0ustar danielusers$ WRITE SYS$OUTPUT "Creating WWWLIB for "UCX" on "ALPHA"." $ WRITE SYS$OUTPUT "=================================================" $ IF "''F$SEARCH("[--.ALPHA.UCX]*.*")'" .EQS. "" THEN CREATE/DIR [--.ALPHA.UCX] $ copy []UCX.opt_ALPHA [--.ALPHA.UCX]wwwlib.opt $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTPARSE.obj [-]HTParse.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTPARSE.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTACCESS.obj [-]HTAccess.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTACCESS.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTTP.obj [-]HTTP.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTTP.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTFILE.obj [-]HTFile.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTFILE.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTMULTI.obj [-]HTMulti.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTMULTI.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTBTREE.obj [-]HTBTree.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTBTREE.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTFTP.obj [-]HTFTP.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTFTP.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTTCP.obj [-]HTTCP.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTTCP.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]SGML.obj [-]SGML.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]SGML.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTML.obj [-]HTML.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTML.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTMLPDTD.obj [-]HTMLPDTD.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTMLPDTD.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTCHUNK.obj [-]HTChunk.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTCHUNK.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTPLAIN.obj [-]HTPlain.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTPLAIN.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTWRITER.obj [-]HTWriter.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTWRITER.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTFWRITER.obj [-]HTFWriter.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTFWRITER.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTMLGEN.obj [-]HTMLGen.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTMLGEN.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTTEE.obj [-]HTTee.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTTEE.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTATOM.obj [-]HTAtom.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTATOM.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTANCHOR.obj [-]HTAnchor.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTANCHOR.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTSTYLE.obj [-]HTStyle.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTSTYLE.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTLIST.obj [-]HTList.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTLIST.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTSTRING.obj [-]HTString.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTSTRING.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTALERT.obj [-]HTAlert.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTALERT.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTRULES.obj [-]HTRules.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTRULES.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTFORMAT.obj [-]HTFormat.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTFORMAT.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTINIT.obj [-]HTInit.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTINIT.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTMIME.obj [-]HTMIME.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTMIME.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTHISTORY.obj [-]HTHistory.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTHISTORY.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTNEWS.obj [-]HTNews.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTNEWS.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTGOPHER.obj [-]HTGopher.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTGOPHER.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTTELNET.obj [-]HTTelnet.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTTELNET.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTWSRC.obj [-]HTWSRC.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTWSRC.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTAAUTIL.obj [-]HTAAUtil.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTAAUTIL.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTAABROW.obj [-]HTAABrow.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTAABROW.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTASSOC.obj [-]HTAssoc.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTASSOC.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTUU.obj [-]HTUU.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTUU.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTTEXGEN.obj [-]HTTeXGen.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTTEXGEN.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTDIRBRW.obj [-]HTDirBrw.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTDIRBRW.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTDESCRIPT.obj [-]HTDescript.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTDESCRIPT.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTGUESS.obj [-]HTGuess.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTGUESS.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTICONS.obj [-]HTIcons.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTICONS.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTERROR.obj [-]HTError.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTERROR.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTERRORMSG.obj [-]HTErrorMsg.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTERRORMSG.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]HTVMSUTILS.obj []HTVMSUtils.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]HTVMSUTILS.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]GETPASS.obj []GETPASS.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]GETPASS.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]GETLINE.obj []GETLINE.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]GETLINE.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]CRYPT.obj []CRYPT.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]CRYPT.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]CRYPT_UTIL.obj []CRYPT_UTIL.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]CRYPT_UTIL.OBJ $ cc /Standard=VAXC/Prefix=ALL/DEFINE=(VMS,DEBUG,ACCESS_AUTH,VC="""2.16pre2vms2""",UCX)/INC=([],[-])/obj=[--.ALPHA.UCX]DIRENT.obj []dirent.c $ If "''F$Search("[--.ALPHA.UCX]WWWLIB.OLB")'" .EQS. "" Then LIBRARY/Create [--.ALPHA.UCX]WWWLIB.OLB $ LIBRARY/REPLACE [--.ALPHA.UCX]WWWLIB.OLB [--.ALPHA.UCX]DIRENT.OBJ $ continue libwww/Library/src/vms/crypt.c0100644000076400001440000000650705472160654016077 0ustar danielusers/* * UFC-crypt: ultra fast crypt(3) implementation * * Copyright (C) 1991, 1992, Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * @(#)crypt.c 2.19 5/28/92 * * Semiportable C version * */ #include "ufc-crypt.h" #ifdef _UFC_32_ /* * 32 bit version */ extern long32 _ufc_keytab[16][2]; extern long32 _ufc_sb0[], _ufc_sb1[], _ufc_sb2[], _ufc_sb3[]; #define SBA(sb, v) (*(long32*)((char*)(sb)+(v))) static ufc_long ary[4]; ufc_long *_ufc_doit(l1, l2, r1, r2, itr) ufc_long l1, l2, r1, r2, itr; { int i; long32 s, *k; register long32 *sb0 = _ufc_sb0; register long32 *sb1 = _ufc_sb1; register long32 *sb2 = _ufc_sb2; register long32 *sb3 = _ufc_sb3; while(itr--) { k = &_ufc_keytab[0][0]; for(i=8; i--; ) { s = *k++ ^ r1; l1 ^= SBA(sb1, s & 0xffff); l2 ^= SBA(sb1, (s & 0xffff)+4); l1 ^= SBA(sb0, s >>= 16); l2 ^= SBA(sb0, (s) +4); s = *k++ ^ r2; l1 ^= SBA(sb3, s & 0xffff); l2 ^= SBA(sb3, (s & 0xffff)+4); l1 ^= SBA(sb2, s >>= 16); l2 ^= SBA(sb2, (s) +4); s = *k++ ^ l1; r1 ^= SBA(sb1, s & 0xffff); r2 ^= SBA(sb1, (s & 0xffff)+4); r1 ^= SBA(sb0, s >>= 16); r2 ^= SBA(sb0, (s) +4); s = *k++ ^ l2; r1 ^= SBA(sb3, s & 0xffff); r2 ^= SBA(sb3, (s & 0xffff)+4); r1 ^= SBA(sb2, s >>= 16); r2 ^= SBA(sb2, (s) +4); } s=l1; l1=r1; r1=s; s=l2; l2=r2; r2=s; } ary[0] = l1; ary[1] = l2; ary[2] = r1; ary[3] = r2; return ary; } #endif #ifdef _UFC_64_ /* * 64 bit version */ extern long64 _ufc_keytab[16]; extern long64 _ufc_sb0[], _ufc_sb1[], _ufc_sb2[], _ufc_sb3[]; #define SBA(sb, v) (*(long64*)((char*)(sb)+(v))) static ufc_long ary[4]; ufc_long *_ufc_doit(l1, l2, r1, r2, itr) ufc_long l1, l2, r1, r2, itr; { int i; long64 l, r, s, *k; register long64 *sb0 = _ufc_sb0; register long64 *sb1 = _ufc_sb1; register long64 *sb2 = _ufc_sb2; register long64 *sb3 = _ufc_sb3; l = (((long64)l1) << 32) | ((long64)l2); r = (((long64)r1) << 32) | ((long64)r2); while(itr--) { k = &_ufc_keytab[0]; for(i=8; i--; ) { s = *k++ ^ r; l ^= SBA(sb3, (s >> 0) & 0xffff); l ^= SBA(sb2, (s >> 16) & 0xffff); l ^= SBA(sb1, (s >> 32) & 0xffff); l ^= SBA(sb0, (s >> 48) & 0xffff); s = *k++ ^ l; r ^= SBA(sb3, (s >> 0) & 0xffff); r ^= SBA(sb2, (s >> 16) & 0xffff); r ^= SBA(sb1, (s >> 32) & 0xffff); r ^= SBA(sb0, (s >> 48) & 0xffff); } s=l; l=r; r=s; } ary[0] = l >> 32; ary[1] = l & 0xffffffff; ary[2] = r >> 32; ary[3] = r & 0xffffffff; return ary; } #endif libwww/Library/src/vms/crypt_util.c0100644000076400001440000006244305472160656017137 0ustar danielusers/* * UFC-crypt: ultra fast crypt(3) implementation * * Copyright (C) 1991, 1992, Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * @(#)crypt_util.c 2.40 09/21/92 * * Support routines * */ #ifdef DEBUG #include #endif #ifndef STATIC #define STATIC static #endif #ifndef DOS #include "patchlevel.h" #include "ufc-crypt.h" #else /* * Thanks to greg%wind@plains.NoDak.edu (Greg W. Wettstein) * for DOS patches */ #include "pl.h" #include "ufc.h" #endif static char patchlevel_str[] = PATCHLEVEL; /* * Permutation done once on the 56 bit * key derived from the original 8 byte ASCII key. */ static int pc1[56] = { 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 }; /* * How much to rotate each 28 bit half of the pc1 permutated * 56 bit key before using pc2 to give the i' key */ static int rots[16] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 }; /* * Permutation giving the key * of the i' DES round */ static int pc2[48] = { 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 }; /* * The E expansion table which selects * bits from the 32 bit intermediate result. */ static int esel[48] = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 }; static int e_inverse[64]; /* * Permutation done on the * result of sbox lookups */ static int perm32[32] = { 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25 }; /* * The sboxes */ static int sbox[8][4][16]= { { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 }, { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 }, { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 }, { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 } }, { { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 }, { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 }, { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 }, { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 } }, { { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 }, { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 }, { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 }, { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 } }, { { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 }, { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 }, { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 }, { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 } }, { { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 }, { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 }, { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 }, { 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 } }, { { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 }, { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 }, { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 }, { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 } }, { { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 }, { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 }, { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 }, { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 } }, { { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 }, { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 }, { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 }, { 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 } } }; /* * This is the initial * permutation matrix */ static int initial_perm[64] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 }; /* * This is the final * permutation matrix */ static int final_perm[64] = { 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 }; /* * The 16 DES keys in BITMASK format */ #ifdef _UFC_32_ long32 _ufc_keytab[16][2]; #endif #ifdef _UFC_64_ long64 _ufc_keytab[16]; #endif #define ascii_to_bin(c) ((c)>='a'?(c-59):(c)>='A'?((c)-53):(c)-'.') #define bin_to_ascii(c) ((c)>=38?((c)-38+'a'):(c)>=12?((c)-12+'A'):(c)+'.') /* Macro to set a bit (0..23) */ #define BITMASK(i) ( (1L<<(11L-(i)%12L+3L)) << ((i)<12L?16L:0L) ) /* * sb arrays: * * Workhorses of the inner loop of the DES implementation. * They do sbox lookup, shifting of this value, 32 bit * permutation and E permutation for the next round. * * Kept in 'BITMASK' format. */ #ifdef _UFC_32_ long32 _ufc_sb0[8192], _ufc_sb1[8192], _ufc_sb2[8192], _ufc_sb3[8192]; static long32 *sb[4] = {_ufc_sb0, _ufc_sb1, _ufc_sb2, _ufc_sb3}; #endif #ifdef _UFC_64_ long64 _ufc_sb0[4096], _ufc_sb1[4096], _ufc_sb2[4096], _ufc_sb3[4096]; static long64 *sb[4] = {_ufc_sb0, _ufc_sb1, _ufc_sb2, _ufc_sb3}; #endif /* * eperm32tab: do 32 bit permutation and E selection * * The first index is the byte number in the 32 bit value to be permuted * - second - is the value of this byte * - third - selects the two 32 bit values * * The table is used and generated internally in init_des to speed it up */ static ufc_long eperm32tab[4][256][2]; /* * do_pc1: permform pc1 permutation in the key schedule generation. * * The first index is the byte number in the 8 byte ASCII key * - second - - the two 28 bits halfs of the result * - third - selects the 7 bits actually used of each byte * * The result is kept with 28 bit per 32 bit with the 4 most significant * bits zero. */ static ufc_long do_pc1[8][2][128]; /* * do_pc2: permform pc2 permutation in the key schedule generation. * * The first index is the septet number in the two 28 bit intermediate values * - second - - - septet values * * Knowledge of the structure of the pc2 permutation is used. * * The result is kept with 28 bit per 32 bit with the 4 most significant * bits zero. */ static ufc_long do_pc2[8][128]; /* * efp: undo an extra e selection and do final * permutation giving the DES result. * * Invoked 6 bit a time on two 48 bit values * giving two 32 bit longs. */ static ufc_long efp[16][64][2]; /* * revfinal: undo final permutation and do E expension. * * Invoked 6 bit a time on DES output * giving 4 32 bit longs. */ static ufc_long revfinal[11][64][4]; static unsigned char bytemask[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; static ufc_long longmask[32] = { 0x80000000, 0x40000000, 0x20000000, 0x10000000, 0x08000000, 0x04000000, 0x02000000, 0x01000000, 0x00800000, 0x00400000, 0x00200000, 0x00100000, 0x00080000, 0x00040000, 0x00020000, 0x00010000, 0x00008000, 0x00004000, 0x00002000, 0x00001000, 0x00000800, 0x00000400, 0x00000200, 0x00000100, 0x00000080, 0x00000040, 0x00000020, 0x00000010, 0x00000008, 0x00000004, 0x00000002, 0x00000001 }; #ifdef DEBUG pr_bits(a, n) ufc_long *a; int n; { ufc_long i, j, t, tmp; n /= 8; for(i = 0; i < n; i++) { tmp=0; for(j = 0; j < 8; j++) { t=8*i+j; tmp|=(a[t/24] & BITMASK(t % 24))?bytemask[j]:0; } (void)printf("%02x ",tmp); } printf(" "); } static set_bits(v, b) ufc_long v; ufc_long *b; { ufc_long i; *b = 0; for(i = 0; i < 24; i++) { if(v & longmask[8 + i]) *b |= BITMASK(i); } } #endif /* * Silly rewrite of 'bzero'. I do so * because some machines don't have * bzero and some don't have memset. */ STATIC void clearmem(start, cnt) char *start; int cnt; { while(cnt--) *start++ = '\0'; } static int initialized = 0; /* lookup a 6 bit value in sbox */ #define s_lookup(i,s) sbox[(i)][(((s)>>4) & 0x2)|((s) & 0x1)][((s)>>1) & 0xf]; /* * Initialize unit - may be invoked directly * by fcrypt users. */ void init_des() { int comes_from_bit; int bit, sg; ufc_long j; ufc_long mask1, mask2; /* * Create the do_pc1 table used * to affect pc1 permutation * when generating keys */ for(bit = 0; bit < 56; bit++) { comes_from_bit = pc1[bit] - 1; mask1 = bytemask[comes_from_bit % 8 + 1]; mask2 = longmask[bit % 28 + 4]; for(j = 0; j < 128; j++) { if(j & mask1) do_pc1[comes_from_bit / 8][bit / 28][j] |= mask2; } } /* * Create the do_pc2 table used * to affect pc2 permutation when * generating keys */ for(bit = 0; bit < 48; bit++) { comes_from_bit = pc2[bit] - 1; mask1 = bytemask[comes_from_bit % 7 + 1]; mask2 = BITMASK(bit % 24); for(j = 0; j < 128; j++) { if(j & mask1) do_pc2[comes_from_bit / 7][j] |= mask2; } } /* * Now generate the table used to do combined * 32 bit permutation and e expansion * * We use it because we have to permute 16384 32 bit * longs into 48 bit in order to initialize sb. * * Looping 48 rounds per permutation becomes * just too slow... * */ clearmem((char*)eperm32tab, sizeof(eperm32tab)); for(bit = 0; bit < 48; bit++) { ufc_long mask1,comes_from; comes_from = perm32[esel[bit]-1]-1; mask1 = bytemask[comes_from % 8]; for(j = 256; j--;) { if(j & mask1) eperm32tab[comes_from / 8][j][bit / 24] |= BITMASK(bit % 24); } } /* * Create the sb tables: * * For each 12 bit segment of an 48 bit intermediate * result, the sb table precomputes the two 4 bit * values of the sbox lookups done with the two 6 * bit halves, shifts them to their proper place, * sends them through perm32 and finally E expands * them so that they are ready for the next * DES round. * */ for(sg = 0; sg < 4; sg++) { int j1, j2; int s1, s2; for(j1 = 0; j1 < 64; j1++) { s1 = s_lookup(2 * sg, j1); for(j2 = 0; j2 < 64; j2++) { ufc_long to_permute, inx; s2 = s_lookup(2 * sg + 1, j2); to_permute = (((ufc_long)s1 << 4) | (ufc_long)s2) << (24 - 8 * (ufc_long)sg); #ifdef _UFC_32_ inx = ((j1 << 6) | j2) << 1; sb[sg][inx ] = eperm32tab[0][(to_permute >> 24) & 0xff][0]; sb[sg][inx+1] = eperm32tab[0][(to_permute >> 24) & 0xff][1]; sb[sg][inx ] |= eperm32tab[1][(to_permute >> 16) & 0xff][0]; sb[sg][inx+1] |= eperm32tab[1][(to_permute >> 16) & 0xff][1]; sb[sg][inx ] |= eperm32tab[2][(to_permute >> 8) & 0xff][0]; sb[sg][inx+1] |= eperm32tab[2][(to_permute >> 8) & 0xff][1]; sb[sg][inx ] |= eperm32tab[3][(to_permute) & 0xff][0]; sb[sg][inx+1] |= eperm32tab[3][(to_permute) & 0xff][1]; #endif #ifdef _UFC_64_ inx = ((j1 << 6) | j2); sb[sg][inx] = ((long64)eperm32tab[0][(to_permute >> 24) & 0xff][0] << 32) | (long64)eperm32tab[0][(to_permute >> 24) & 0xff][1]; sb[sg][inx] |= ((long64)eperm32tab[1][(to_permute >> 16) & 0xff][0] << 32) | (long64)eperm32tab[1][(to_permute >> 16) & 0xff][1]; sb[sg][inx] |= ((long64)eperm32tab[2][(to_permute >> 8) & 0xff][0] << 32) | (long64)eperm32tab[2][(to_permute >> 8) & 0xff][1]; sb[sg][inx] |= ((long64)eperm32tab[3][(to_permute) & 0xff][0] << 32) | (long64)eperm32tab[3][(to_permute) & 0xff][1]; #endif } } } /* * Create an inverse matrix for esel telling * where to plug out bits if undoing it */ for(bit=48; bit--;) { e_inverse[esel[bit] - 1 ] = bit; e_inverse[esel[bit] - 1 + 32] = bit + 48; } /* * create efp: the matrix used to * undo the E expansion and effect final permutation */ clearmem((char*)efp, sizeof efp); for(bit = 0; bit < 64; bit++) { int o_bit, o_long; ufc_long word_value, mask1, mask2; int comes_from_f_bit, comes_from_e_bit; int comes_from_word, bit_within_word; /* See where bit i belongs in the two 32 bit long's */ o_long = bit / 32; /* 0..1 */ o_bit = bit % 32; /* 0..31 */ /* * And find a bit in the e permutated value setting this bit. * * Note: the e selection may have selected the same bit several * times. By the initialization of e_inverse, we only look * for one specific instance. */ comes_from_f_bit = final_perm[bit] - 1; /* 0..63 */ comes_from_e_bit = e_inverse[comes_from_f_bit]; /* 0..95 */ comes_from_word = comes_from_e_bit / 6; /* 0..15 */ bit_within_word = comes_from_e_bit % 6; /* 0..5 */ mask1 = longmask[bit_within_word + 26]; mask2 = longmask[o_bit]; for(word_value = 64; word_value--;) { if(word_value & mask1) efp[comes_from_word][word_value][o_long] |= mask2; } } /* * Create revfinal: an array to undo final * the effects of efp */ clearmem((char*)revfinal, sizeof(revfinal)); for(bit = 0; bit < 96; bit++) { int ibit = initial_perm[esel[bit % 48] - 1 + ((bit >= 48) ? 32 : 0)] - 1; mask1 = bytemask[ibit % 6 + 2]; mask2 = BITMASK(bit % 24); for(j = 64; j--;) { if(j & mask1) { revfinal[ibit / 6][j][bit / 24] |= mask2; } } } initialized++; } /* * Process the elements of the sb table permuting the * bits swapped in the expansion by the current salt. */ #ifdef _UFC_32_ STATIC void shuffle_sb(k, saltbits) long32 *k; ufc_long saltbits; { ufc_long j; long32 x; for(j=4096; j--;) { x = (k[0] ^ k[1]) & (long32)saltbits; *k++ ^= x; *k++ ^= x; } } #endif #ifdef _UFC_64_ STATIC void shuffle_sb(k, saltbits) long64 *k; ufc_long saltbits; { ufc_long j; long64 x; for(j=4096; j--;) { x = ((*k >> 32) ^ *k) & (long64)saltbits; *k++ ^= (x << 32) | x; } } #endif /* * Setup the unit for a new salt * Hopefully we'll not see a new salt in each crypt call. */ static unsigned char current_salt[3] = "&&"; /* invalid value */ static ufc_long current_saltbits = 0; static int direction = 0; STATIC void setup_salt(s) char *s; { ufc_long i, j, saltbits; if(!initialized) init_des(); if(s[0] == current_salt[0] && s[1] == current_salt[1]) return; current_salt[0] = s[0]; current_salt[1] = s[1]; /* * This is the only crypt change to DES: * entries are swapped in the expansion table * according to the bits set in the salt. */ saltbits = 0; for(i = 0; i < 2; i++) { long c=ascii_to_bin(s[i]); #ifdef notdef /* * Some applications do rely on illegal * salts. It seems that UFC-crypt behaves * identically to standard crypt * implementations on illegal salts -- glad */ if(c < 0 || c > 63) c = 0; #endif for(j = 0; j < 6; j++) { if((c >> j) & 0x1) saltbits |= BITMASK(6 * i + j); } } /* * Permute the sb table values * to reflect the changed e * selection table */ shuffle_sb(_ufc_sb0, current_saltbits ^ saltbits); shuffle_sb(_ufc_sb1, current_saltbits ^ saltbits); shuffle_sb(_ufc_sb2, current_saltbits ^ saltbits); shuffle_sb(_ufc_sb3, current_saltbits ^ saltbits); current_saltbits = saltbits; } STATIC void ufc_mk_keytab(key) char *key; { ufc_long v1, v2, *k1; int i; #ifdef _UFC_32_ long32 v, *k2 = &_ufc_keytab[0][0]; #endif #ifdef _UFC_64_ long64 v, *k2 = &_ufc_keytab[0]; #endif v1 = v2 = 0; k1 = &do_pc1[0][0][0]; for(i = 8; i--;) { v1 |= k1[*key & 0x7f]; k1 += 128; v2 |= k1[*key++ & 0x7f]; k1 += 128; } for(i = 0; i < 16; i++) { k1 = &do_pc2[0][0]; v1 = (v1 << rots[i]) | (v1 >> (28 - rots[i])); v = k1[(v1 >> 21) & 0x7f]; k1 += 128; v |= k1[(v1 >> 14) & 0x7f]; k1 += 128; v |= k1[(v1 >> 7) & 0x7f]; k1 += 128; v |= k1[(v1 ) & 0x7f]; k1 += 128; #ifdef _UFC_32_ *k2++ = v; v = 0; #endif #ifdef _UFC_64_ v <<= 32; #endif v2 = (v2 << rots[i]) | (v2 >> (28 - rots[i])); v |= k1[(v2 >> 21) & 0x7f]; k1 += 128; v |= k1[(v2 >> 14) & 0x7f]; k1 += 128; v |= k1[(v2 >> 7) & 0x7f]; k1 += 128; v |= k1[(v2 ) & 0x7f]; *k2++ = v; } direction = 0; } /* * Undo an extra E selection and do final permutations */ ufc_long *_ufc_dofinalperm(l1, l2, r1, r2) ufc_long l1,l2,r1,r2; { ufc_long v1, v2, x; static ufc_long ary[2]; x = (l1 ^ l2) & current_saltbits; l1 ^= x; l2 ^= x; x = (r1 ^ r2) & current_saltbits; r1 ^= x; r2 ^= x; v1=v2=0; l1 >>= 3; l2 >>= 3; r1 >>= 3; r2 >>= 3; v1 |= efp[15][ r2 & 0x3f][0]; v2 |= efp[15][ r2 & 0x3f][1]; v1 |= efp[14][(r2 >>= 6) & 0x3f][0]; v2 |= efp[14][ r2 & 0x3f][1]; v1 |= efp[13][(r2 >>= 10) & 0x3f][0]; v2 |= efp[13][ r2 & 0x3f][1]; v1 |= efp[12][(r2 >>= 6) & 0x3f][0]; v2 |= efp[12][ r2 & 0x3f][1]; v1 |= efp[11][ r1 & 0x3f][0]; v2 |= efp[11][ r1 & 0x3f][1]; v1 |= efp[10][(r1 >>= 6) & 0x3f][0]; v2 |= efp[10][ r1 & 0x3f][1]; v1 |= efp[ 9][(r1 >>= 10) & 0x3f][0]; v2 |= efp[ 9][ r1 & 0x3f][1]; v1 |= efp[ 8][(r1 >>= 6) & 0x3f][0]; v2 |= efp[ 8][ r1 & 0x3f][1]; v1 |= efp[ 7][ l2 & 0x3f][0]; v2 |= efp[ 7][ l2 & 0x3f][1]; v1 |= efp[ 6][(l2 >>= 6) & 0x3f][0]; v2 |= efp[ 6][ l2 & 0x3f][1]; v1 |= efp[ 5][(l2 >>= 10) & 0x3f][0]; v2 |= efp[ 5][ l2 & 0x3f][1]; v1 |= efp[ 4][(l2 >>= 6) & 0x3f][0]; v2 |= efp[ 4][ l2 & 0x3f][1]; v1 |= efp[ 3][ l1 & 0x3f][0]; v2 |= efp[ 3][ l1 & 0x3f][1]; v1 |= efp[ 2][(l1 >>= 6) & 0x3f][0]; v2 |= efp[ 2][ l1 & 0x3f][1]; v1 |= efp[ 1][(l1 >>= 10) & 0x3f][0]; v2 |= efp[ 1][ l1 & 0x3f][1]; v1 |= efp[ 0][(l1 >>= 6) & 0x3f][0]; v2 |= efp[ 0][ l1 & 0x3f][1]; ary[0] = v1; ary[1] = v2; return ary; } /* * crypt only: convert from 64 bit to 11 bit ASCII * prefixing with the salt */ STATIC char *output_conversion(v1, v2, salt) ufc_long v1, v2; char *salt; { static char outbuf[14]; int i, s, shf; outbuf[0] = salt[0]; outbuf[1] = salt[1] ? salt[1] : salt[0]; for(i = 0; i < 5; i++) { shf = (26 - 6 * i); /* to cope with MSC compiler bug */ outbuf[i + 2] = bin_to_ascii((v1 >> shf) & 0x3f); } s = (v2 & 0xf) << 2; v2 = (v2 >> 2) | ((v1 & 0x3) << 30); for(i = 5; i < 10; i++) { shf = (56 - 6 * i); outbuf[i + 2] = bin_to_ascii((v2 >> shf) & 0x3f); } outbuf[12] = bin_to_ascii(s); outbuf[13] = 0; return outbuf; } ufc_long *_ufc_doit(); /* * UNIX crypt function */ char *crypt(key, salt) char *key, *salt; { ufc_long *s; char ktab[9]; /* * Hack DES tables according to salt */ setup_salt(salt); /* * Setup key schedule */ clearmem(ktab, sizeof ktab); (void)strncpy(ktab, key, 8); ufc_mk_keytab(ktab); /* * Go for the 25 DES encryptions */ s = _ufc_doit((ufc_long)0, (ufc_long)0, (ufc_long)0, (ufc_long)0, (ufc_long)25); /* * Do final permutations */ s = _ufc_dofinalperm(s[0], s[1], s[2], s[3]); /* * And convert back to 6 bit ASCII */ return output_conversion(s[0], s[1], salt); } /* * To make fcrypt users happy. * They don't need to call init_des. */ char *fcrypt(key, salt) char *key; char *salt; { return crypt(key, salt); } /* * UNIX encrypt function. Takes a bitvector * represented by one byte per bit and * encrypt/decrypt according to edflag */ void encrypt(block, edflag) char *block; int edflag; { ufc_long l1, l2, r1, r2, *s; int i; /* * Undo any salt changes to E expansion */ setup_salt(".."); /* * Reverse key table if * changing operation (encrypt/decrypt) */ if((edflag == 0) != (direction == 0)) { for(i = 0; i < 8; i++) { #ifdef _UFC_32_ long32 x; x = _ufc_keytab[15-i][0]; _ufc_keytab[15-i][0] = _ufc_keytab[i][0]; _ufc_keytab[i][0] = x; x = _ufc_keytab[15-i][1]; _ufc_keytab[15-i][1] = _ufc_keytab[i][1]; _ufc_keytab[i][1] = x; #endif #ifdef _UFC_64_ long64 x; x = _ufc_keytab[15-i]; _ufc_keytab[15-i] = _ufc_keytab[i]; _ufc_keytab[i] = x; #endif } direction = edflag; } /* * Do initial permutation + E expansion */ i = 0; for(l1 = 0; i < 24; i++) { if(block[initial_perm[esel[i]-1]-1]) l1 |= BITMASK(i); } for(l2 = 0; i < 48; i++) { if(block[initial_perm[esel[i]-1]-1]) l2 |= BITMASK(i-24); } i = 0; for(r1 = 0; i < 24; i++) { if(block[initial_perm[esel[i]-1+32]-1]) r1 |= BITMASK(i); } for(r2 = 0; i < 48; i++) { if(block[initial_perm[esel[i]-1+32]-1]) r2 |= BITMASK(i-24); } /* * Do DES inner loops + final conversion */ s = _ufc_doit(l1, l2, r1, r2, (ufc_long)1); /* * Do final permutations */ s = _ufc_dofinalperm(s[0], s[1], s[2], s[3]); /* * And convert to bit array */ l1 = s[0]; r1 = s[1]; for(i = 0; i < 32; i++) { *block++ = (l1 & longmask[i]) != 0; } for(i = 0; i < 32; i++) { *block++ = (r1 & longmask[i]) != 0; } } /* * UNIX setkey function. Take a 64 bit DES * key and setup the machinery. */ void setkey(key) char *key; { int i,j; unsigned char c; unsigned char ktab[8]; setup_salt(".."); /* be sure we're initialized */ for(i = 0; i < 8; i++) { for(j = 0, c = 0; j < 8; j++) c = c << 1 | *key++; ktab[i] = c >> 1; } ufc_mk_keytab(ktab); } /* * Ultrix crypt16 function, thanks to pcl@convex.oxford.ac.uk (Paul Leyland) */ char *crypt16(key, salt) char *key, *salt; { ufc_long *s, *t; char ktab[9], ttab[9]; static char q[14], res[25]; /* * Hack DES tables according to salt */ setup_salt(salt); /* * Setup key schedule */ clearmem(ktab, sizeof ktab); (void)strncpy(ktab, key, 8); ufc_mk_keytab(ktab); /* * Go for first 20 DES encryptions */ s = _ufc_doit((ufc_long)0, (ufc_long)0, (ufc_long)0, (ufc_long)0, (ufc_long)20); /* * And convert back to 6 bit ASCII */ strcpy (res, output_conversion(s[0], s[1], salt)); clearmem(ttab, sizeof ttab); if (strlen (key) > 8) (void)strncpy(ttab, key+8, 8); ufc_mk_keytab(ttab); /* * Go for second 5 DES encryptions */ t = _ufc_doit((ufc_long)0, (ufc_long)0, (ufc_long)0, (ufc_long)0, (ufc_long)5); /* * And convert back to 6 bit ASCII */ strcpy (q, output_conversion(t[0], t[1], salt)); strcpy (res+13, q+2); clearmem(ktab, sizeof ktab); (void)strncpy(ktab, key, 8); ufc_mk_keytab(ktab); return res; } /* * Experimental -- not supported -- may choke your dog */ void ufc_setup_password(cookie, s) long *cookie; char *s; { char c; int i; ufc_long x; ufc_long dl1, dl2, dr1, dr2; setup_salt(s); dl1 = dl2 = dr1 = dr2 = 0; for(i = 0, s += 2; c = *s++; i++) { int x = ascii_to_bin(c); dl1 |= revfinal[i][x][0]; dl2 |= revfinal[i][x][1]; dr1 |= revfinal[i][x][2]; dr2 |= revfinal[i][x][3]; } x = (dl1 ^ dl2) & current_saltbits; x = (dr1 ^ dr2) & current_saltbits; cookie[0] = dl1 ^ x; cookie[1] = dl2 ^ x; cookie[2] = dr1 ^ x; cookie[3] = dr2 ^ x; } void ufc_do_pw(cookie, guess) long *cookie; char *guess; { char ktab[9]; ufc_long *s; clearmem(ktab, sizeof ktab); (void)strncpy(ktab, guess, 8); ufc_mk_keytab(ktab); s = _ufc_doit((ufc_long)0, (ufc_long)0, (ufc_long)0, (ufc_long)0, (ufc_long)25); cookie[0] = s[0]; cookie[1] = s[1]; cookie[2] = s[2]; cookie[3] = s[3]; } libwww/Library/src/vms/descrip.mms0100644000076400001440000011571305610526653016740 0ustar danielusers! ! Make WorldWideWeb LIBRARY under VMS ! ======================================================= ! ! History: ! 14 Aug 91 (TBL) Reconstituted ! 25 Jun 92 (JFG) Added TCP socket emulation over DECnet ! 07 Sep 93 (MD) Remade for version 2.09a ! 02 Nov 93 (MD) Added new modules for AA 2.12 including VMS specific ! 14 Nov 93 (MD) Added HTVMSUtils.c and .h ! 22 Feb 94 (MD) Changed for version 2.15 ! - took out modules ! - (WG) added DECC, LIST flags ! - added ALPHA flag ! - generates obj directory structure... ! ! Bugs: ! The dependencies are anything but complete - they were ! just enough to allow the files to be compiled. ! ! Instructions: ! Use the correct command line for your TCP/IP implementation, ! inside the VMS directory: ! target dir ! $ MMS/MACRO=(MULTINET=1) for Multinet,Vax [.VAX.MULTINET] ! $ MMS/MACRO=(WIN_TCP=1) for Wollongong TCP/IP [.VAX.WIN_TCP] ! $ MMS/MACRO=(UCX=1) for DEC/UCX [.VAX.UCX] ! $ MMS/MACRO=(DECNET=1) for socket emul over DECnet [.VAX.DECNET] ! ! To compile with debug mode: ! ! $ MMS/MACRO=(DEBUG=1) Debug Flag on ! $ MMS/MACRO=(LIST=1) Produce Listing Files ! ! To compile for DECC use: ! ! $ MMS/MACRO=(DECC=1) for DECC only. Generates .OLB ! ! But to compile for ALPHA use: ! target dir ! $ MMS/MACRO=(ALPHA=1) on ALPHA (implies DECC) [.ALPHA.MULTINET] ! ! If you are on HEP net and want to build using the really latest sources on ! DXCERN:: then define an extra macro U=DXCERN::, e.g. ! ! $ MMS/MACRO=(MULTINET=1, U=DXCERN::) for Multinet ! ! This will copy the sources from DXCERN as necessary. You can also try ! ! $ MMS/MACRO=(U=DXCERN::) descrip.mms ! ! to update this file. ! ! SRC = [-] VMS = [] .INCLUDE $(SRC)Version.make ! debug flags .IFDEF DEBUG DEBUGFLAGS = /DEBUG/NOOPT .ENDIF .IFDEF ALPHA ALPHA_EXT=_ALPHA MACH=ALPHA DECC=1 .ELSE ALPHA_EXT= MACH=VAX .ENDIF .IFDEF DECC .IFDEF UCX CQUALDECC=/Standard=VAXC/Prefix=ALL .ELSE CQUALDECC=/Standard=VAXC/Prefix=ANSI .ENDIF .ELSE CQUALDECC= .ENDIF .IFDEF LIST CLIST=/LIST/SHOW=ALL .ELSE CLIST= .ENDIF ! defines valid for all compilations EXTRADEFINES = VMS,DEBUG,ACCESS_AUTH,VC="""$(VC)""" .IFDEF UCX TCP=UCX .ENDIF .IFDEF MULTINET TCP=MULTINET .ENDIF .IFDEF WIN_TCP TCP=WIN_TCP .ENDIF .IFDEF DECNET TCP=DECNET .ENDIF .IFDEF TCP .ELSE TCP=MULTINET .ENDIF ! now lib points at [--.machine.tcp layer] LIB=[--.$(MACH).$(TCP)] CFLAGS = $(DEBUGFLAGS)$(CQUALDECC)$(CLIST)/DEFINE=($(EXTRADEFINES),$(TCP))/INC=($(VMS),$(SRC)) SETUP_FILES = $(LIB)wwwlib.opt VMS_FILES = $(VMS)COPYING.LIB $(VMS)descrip.mms - $(VMS)multinet.opt $(VMS)multinet.opt_alpha - $(VMS)ucx.opt $(VMS)ucx.opt_alpha HEADERS = $(SRC)HTParse.h, $(SRC)HTAccess.h, $(SRC)HTTP.h, $(SRC)HTFile.h, - $(SRC)HTMulti.h, - $(SRC)HTBTree.h, $(SRC)HTFTP.h, $(SRC)HTTCP.h, - $(SRC)SGML.h, $(SRC)HTML.h, $(SRC)HTMLPDTD.h, $(SRC)HTChunk.h, - $(SRC)HTPlain.h, $(SRC)HTWriter.h, - $(SRC)HTFwriter.h, $(SRC)HTMLGen.h, - $(SRC)HTStream.h, $(SRC)HTTee.h, - $(SRC)HTAtom.h, $(SRC)HTAnchor.h, $(SRC)HTStyle.h, - $(SRC)HTList.h, - $(SRC)HTString.h, $(SRC)HTAlert.h, $(SRC)HTRules.h, - $(SRC)HTFormat.h, $(SRC)HTInit.h, - $(SRC)HTMIME.h, $(SRC)HTHistory.h, $(SRC)HTNews.h, - $(SRC)HTGopher.h, - $(SRC)HTUtils.h, $(SRC)tcp.h, $(SRC)HText.h, - $(SRC)HTTelnet.h, - $(SRC)HTWAIS.h, $(SRC)HTWSRC.h, - $(SRC)HTAAUtil.h, $(SRC)HTAABrow.h, $(SRC)HTAssoc.h, - $(SRC)HTUU.h, $(SRC)HTTeXGen.h, $(SRC)HTDirBrw.h, - $(SRC)HTDescript.h, $(SRC)HTGuess.h, $(SRC)HTIcons.h - $(SRC)HTError.h, - $(VMS)HTVMSUtils.h, - $(VMS)ufc-crypt.h, $(VMS)patchlevel.h - $(VMS)dirent.h, $(VMS)sys_dirent.h .IFDEF DECNET ! Strip FTP, Gopher, News, (WAIS) MODULES = HTParse=$(LIB)HTParse.obj, HTAccess=$(LIB)HTAccess.obj, HTTP=$(LIB)HTTP.obj, - HTFile=$(LIB)HTFile.obj, HTMulti=$(LIB)HTMulti.obj, HTBTree=$(LIB)HTBTree.obj, HTTCP=$(LIB)HTTCP.obj, - SGML=$(LIB)SGML.obj, HTML=$(LIB)HTML.obj, HTMLPDTD=$(LIB)HTMLPDTD.obj, HTChunk=$(LIB)HTChunk.obj, - HTPlain=$(LIB)HTPlain.obj, HTWriter=$(LIB)HTWriter.obj, HTFwriter=$(LIB)HTFwriter.obj, - HTMLGen=$(LIB)HTMLGen.obj, HTTee=$(LIB)HTTee.obj, - HTAtom=$(LIB)HTAtom.obj, HTAnchor=$(LIB)HTAnchor.obj, HTStyle=$(LIB)HTStyle.obj, - HTList=$(LIB)HTList.obj, HTString=$(LIB)HTString.obj, HTAlert=$(LIB)HTAlert.obj, - HTRules=$(LIB)HTRules.obj, HTFormat=$(LIB)HTFormat.obj, HTInit=$(LIB)HTInit.obj, HTMIME=$(LIB)HTMIME.obj, - HTHistory=$(LIB)HTHistory.obj, - HTTelnet=$(LIB)HTTelnet.obj, HTWSRC=$(LIB)HTWSRC.obj, - HTAAUtil=$(LIB)HTAAUtil.obj, HTAABrow=$(LIB)HTAABrow.obj, HTAssoc=$(LIB)HTAssoc.obj, - HTUU=$(LIB)HTUU.obj, HTTeXGen=$(LIB)HTTeXGen.obj, - HTDirBrw=$(LIB)HTDirBrw.obj, HTDescript=$(LIB)HTDescript.obj, HTGuess=$(LIB)HTGuess.obj, - HTIcons=$(LIB)HTIcons.obj, HTError=$(LIB)HTError.obj, HTErrorMsg=$(LIB)HTErrorMsg.obj, - HTVMSUtils=$(LIB)HTVMSUtils.obj, - getpass=$(LIB)getpass.obj, getline=$(LIB)getline.obj, - crypt=$(LIB)crypt.obj, crypt_util=$(LIB)crypt_util.obj - dirent=$(LIB)dirent.obj .ELSE MODULES = HTParse=$(LIB)HTParse.obj, HTAccess=$(LIB)HTAccess.obj, HTTP=$(LIB)HTTP.obj, - HTFile=$(LIB)HTFile.obj, HTMulti=$(LIB)HTMulti.obj, HTBTree=$(LIB)HTBTree.obj, HTFTP=$(LIB)HTFTP.obj, HTTCP=$(LIB)HTTCP.obj, - SGML=$(LIB)SGML.obj, HTML=$(LIB)HTML.obj, HTMLPDTD=$(LIB)HTMLPDTD.obj, HTChunk=$(LIB)HTChunk.obj, - HTPlain=$(LIB)HTPlain.obj, HTWriter=$(LIB)HTWriter.obj, HTFwriter=$(LIB)HTFwriter.obj, - HTMLGen=$(LIB)HTMLGen.obj, HTTee=$(LIB)HTTee.obj, - HTAtom=$(LIB)HTAtom.obj, HTAnchor=$(LIB)HTAnchor.obj, HTStyle=$(LIB)HTStyle.obj, - HTList=$(LIB)HTList.obj, HTString=$(LIB)HTString.obj, HTAlert=$(LIB)HTAlert.obj, - HTRules=$(LIB)HTRules.obj, HTFormat=$(LIB)HTFormat.obj, HTInit=$(LIB)HTInit.obj, HTMIME=$(LIB)HTMIME.obj, - HTHistory=$(LIB)HTHistory.obj, HTNews=$(LIB)HTNews.obj, HTGopher=$(LIB)HTGopher.obj, - HTTelnet=$(LIB)HTTelnet.obj, HTWSRC=$(LIB)HTWSRC.obj, - HTAAUtil=$(LIB)HTAAUtil.obj, HTAABrow=$(LIB)HTAABrow.obj, HTAssoc=$(LIB)HTAssoc.obj, - HTUU=$(LIB)HTUU.obj, HTTeXGen=$(LIB)HTTeXGen.obj, - HTDirBrw=$(LIB)HTDirBrw.obj, HTDescript=$(LIB)HTDescript.obj, HTGuess=$(LIB)HTGuess.obj, - HTIcons=$(LIB)HTIcons.obj, HTError=$(LIB)HTError.obj, HTErrorMsg=$(LIB)HTErrorMsg.obj, - HTVMSUtils=$(LIB)HTVMSUtils.obj, - getpass=$(LIB)getpass.obj, getline=$(LIB)getline.obj, - crypt=$(LIB)crypt.obj, crypt_util=$(LIB)crypt_util.obj - dirent=$(LIB)dirent.obj .ENDIF !___________________________________________________________________ !.obj.olb ! IF "''F$SEARCH("$(MMS$TARGET)")'" .EQS. "" - ! THEN $(LIBR)/CREATE $(MMS$TARGET) ! $(LIBR) $(LIBRFLAGS) $(MMS$TARGET) $(LIB)$(MMS$SOURCE) ! !___________________________________________________________________ .FIRST @ WRITE SYS$OUTPUT "Creating WWWLIB for "$(TCP)" on "$(MACH)"." @ WRITE SYS$OUTPUT "=================================================" @ IF "''F$SEARCH("$(LIB)*.*")'" .EQS. "" - THEN CREATE/DIR $(LIB) !___________________________________________________________________ ! WWW Library lib : $(SRC)Version.make $(VMS_FILES) $(HEADERS) $(LIB)wwwlib.opt $(LIB)wwwlib.olb($(MODULES)) $(VMS)build_$(TCP).com$(ALPHA_EXT) @ continue lib_only : $(SRC)Version.make $(LIB)wwwlib.opt $(LIB)wwwlib.olb($(MODULES)) @ continue $(VMS)build_$(TCP).com$(ALPHA_EXT) : $(VMS)descrip.mms mms/noaction/from_sources/out=$(VMS)build_$(TCP).com$(ALPHA_EXT)/macro=($(TCP)=1,$(MACH)=1) lib_only $(LIB)wwwlib.opt : $(VMS)$(TCP).opt$(ALPHA_EXT) copy $(VMS)$(TCP).opt$(ALPHA_EXT) $(LIB)wwwlib.opt !___________________________________________________________________ ! BASIC modules ! C O M M O N M O D U L E S !_____________________________ HTList $(LIB)HTList.obj : $(SRC)HTList.c $(SRC)HTList.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTList.c .IFDEF U $(SRC)HTList.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTList.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTList.c" - $(SRC)HTList.c $(SRC)HTList.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTList.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTList.h" - $(SRC)HTList.h .ENDIF !_____________________________ HTAnchor $(LIB)HTAnchor.obj : $(SRC)HTAnchor.c $(SRC)HTAnchor.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTAnchor.c .IFDEF U $(SRC)HTAnchor.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAnchor.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAnchor.c" - $(SRC)HTAnchor.c $(SRC)HTAnchor.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAnchor.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAnchor.h" - $(SRC)HTAnchor.h .ENDIF !_____________________________ HTFormat $(LIB)HTFormat.obj : $(SRC)HTFormat.c $(SRC)HTFormat.h $(SRC)HTUtils.h $(SRC)HTML.h $(SRC)SGML.h $(SRC)HTPlain.h $(SRC)HTMLGen.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTFormat.c .IFDEF U $(SRC)HTFormat.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFormat.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFormat.c" - $(SRC)HTFormat.c $(SRC)HTFormat.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFormat.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFormat.h" - $(SRC)HTFormat.h .ENDIF !_____________________________ HTGuess $(LIB)HTGuess.obj : $(SRC)HTGuess.c $(SRC)HTGuess.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTGuess.c .IFDEF U $(SRC)HTGuess.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTGuess.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTGuess.c" - $(SRC)HTGuess.c $(SRC)HTGuess.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTGuess.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTGuess.h" - $(SRC)HTGuess.h .ENDIF !_____________________________ HTIcons $(LIB)HTIcons.obj : $(SRC)HTIcons.c $(SRC)HTIcons.h $(SRC)HTInit.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTIcons.c .IFDEF U $(SRC)HTIcons.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTIcons.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTIcons.c" - $(SRC)HTIcons.c $(SRC)HTIcons.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTIcons.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTIcons.h" - $(SRC)HTIcons.h .ENDIF !_____________________________ HTInit $(LIB)HTInit.obj : $(SRC)HTInit.c $(SRC)HTInit.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTInit.c .IFDEF U $(SRC)HTInit.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTInit.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTInit.c" - $(SRC)HTInit.c $(SRC)HTInit.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTInit.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTInit.h" - $(SRC)HTInit.h .ENDIF !_____________________________ HTMIME $(LIB)HTMIME.obj : $(SRC)HTMIME.c $(SRC)HTMIME.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTMIME.c .IFDEF U $(SRC)HTMIME.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMIME.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMIME.c" - $(SRC)HTMIME.c $(SRC)HTMIME.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMIME.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMIME.h" - $(SRC)HTMIME.h .ENDIF !_____________________________ HTHistory $(LIB)HTHistory.obj : $(SRC)HTHistory.c $(SRC)HTHistory.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTHistory.c .IFDEF U $(SRC)HTHistory.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTHistory.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTHistory.c" - $(SRC)HTHistory.c $(SRC)HTHistory.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTHistory.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTHistory.h" - $(SRC)HTHistory.h .ENDIF !_____________________________ HTNews .IFDEF DECNET .ELSE $(LIB)HTNews.obj : $(SRC)HTNews.c $(SRC)HTNews.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTNews.c .IFDEF U $(SRC)HTNews.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTNews.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTNews.c" - $(SRC)HTNews.c $(SRC)HTNews.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTNews.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTNews.h" - $(SRC)HTNews.h .ENDIF .ENDIF !_____________________________ HTGopher .IFDEF DECNET .ELSE $(LIB)HTGopher.obj : $(SRC)HTGopher.c $(SRC)HTGopher.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTGopher.c .IFDEF U $(SRC)HTGopher.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTGopher.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTGopher.c" - $(SRC)HTGopher.c $(SRC)HTGopher.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTGopher.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTGopher.h" - $(SRC)HTGopher.h .ENDIF .ENDIF !_____________________________ HTTelnet $(LIB)HTTelnet.obj : $(SRC)HTTelnet.c $(SRC)HTTelnet.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTTelnet.c .IFDEF U $(SRC)HTTelnet.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTelnet.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTelnet.c" - $(SRC)HTTelnet.c $(SRC)HTTelnet.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTelnet.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTelnet.h" - $(SRC)HTTelnet.h .ENDIF !_____________________________ HTStyle $(LIB)HTStyle.obj : $(SRC)HTStyle.c $(SRC)HTStyle.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTStyle.c .IFDEF U $(SRC)HTStyle.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTStyle.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTStyle.c" - $(SRC)HTStyle.c $(SRC)HTStyle.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTStyle.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTStyle.h" - $(SRC)HTStyle.h .ENDIF !_____________________________ HTAtom $(LIB)HTAtom.obj : $(SRC)HTAtom.c $(SRC)HTAtom.h $(SRC)HTUtils.h $(SRC)HTString.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTAtom.c .IFDEF U $(SRC)HTAtom.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAtom.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAtom.c" - $(SRC)HTAtom.c $(SRC)HTAtom.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAtom.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAtom.h" - $(SRC)HTAtom.h .ENDIF !_____________________________ HTChunk $(LIB)HTChunk.obj : $(SRC)HTChunk.c $(SRC)HTChunk.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTChunk.c .IFDEF U $(SRC)HTChunk.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTChunk.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTChunk.c" - $(SRC)HTChunk.c $(SRC)HTChunk.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTChunk.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTChunk.h" - $(SRC)HTChunk.h .ENDIF !_____________________________ HTString $(LIB)HTString.obj : $(SRC)HTString.c $(SRC)HTString.h $(SRC)tcp.h $(SRC)Version.make $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTString.c .IFDEF U $(SRC)HTString.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTString.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTString.c" - $(SRC)HTString.c $(SRC)HTString.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTString.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTString.h" - $(SRC)HTString.h .ENDIF !_____________________________ HTAlert $(LIB)HTAlert.obj : $(SRC)HTAlert.c $(SRC)HTAlert.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTAlert.c .IFDEF U $(SRC)HTAlert.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAlert.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAlert.c" - $(SRC)HTAlert.c $(SRC)HTAlert.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAlert.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAlert.h" - $(SRC)HTAlert.h .ENDIF !_____________________________ HTRules $(LIB)HTRules.obj : $(SRC)HTRules.c $(SRC)HTRules.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTRules.c .IFDEF U $(SRC)HTRules.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTRules.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTRules.c" - $(SRC)HTRules.c $(SRC)HTRules.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTRules.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTRules.h" - $(SRC)HTRules.h .ENDIF !_____________________________ SGML $(LIB)SGML.obj : $(SRC)SGML.c $(SRC)SGML.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)SGML.c .IFDEF U $(SRC)SGML.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/SGML.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/SGML.c" - $(SRC)SGML.c $(SRC)SGML.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/SGML.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/SGML.h" - $(SRC)SGML.h .ENDIF !_____________________________ HTML $(LIB)HTML.obj : $(SRC)HTML.c $(SRC)HTML.h $(SRC)HTUtils.h $(SRC)HTMLPDTD.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTML.c .IFDEF U $(SRC)HTML.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTML.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTML.c" - $(SRC)HTML.c $(SRC)HTML.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTML.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTML.h" - $(SRC)HTML.h .ENDIF !_____________________________ HTMLGen $(LIB)HTMLGen.obj : $(SRC)HTMLGen.c $(SRC)HTMLGen.h $(SRC)HTUtils.h $(SRC)HTMLPDTD.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTMLGen.c .IFDEF U $(SRC)HTMLGen.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMLGen.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMLGen.c" - $(SRC)HTMLGen.c $(SRC)HTMLGen.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMLGen.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMLGen.h" - $(SRC)HTMLGen.h .ENDIF !_____________________________ HTTeXGen $(LIB)HTTeXGen.obj : $(SRC)HTTeXGen.c $(SRC)HTTeXGen.h $(SRC)HTUtils.h $(SRC)HTMLPDTD.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTTeXGen.c .IFDEF U $(SRC)HTTeXGen.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTeXGen.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTeXGen.c" - $(SRC)HTTeXGen.c $(SRC)HTTeXGen.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTeXGen.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTeXGen.h" - $(SRC)HTTeXGen.h .ENDIF !_____________________________ HTMLPDTD $(LIB)HTMLPDTD.obj : $(SRC)HTMLPDTD.c $(SRC)HTMLPDTD.h $(SRC)SGML.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTMLPDTD.c .IFDEF U $(SRC)HTMLPDTD.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMLPDTD.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMLPDTD.c" - $(SRC)HTMLPDTD.c $(SRC)HTMLPDTD.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMLPDTD.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMLPDTD.h" - $(SRC)HTMLPDTD.h .ENDIF !_____________________________ HTPlain $(LIB)HTPlain.obj : $(SRC)HTPlain.c $(SRC)HTPlain.h $(SRC)HTStream.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTPlain.c .IFDEF U $(SRC)HTPlain.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTPlain.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTPlain.c" - $(SRC)HTPlain.c $(SRC)HTPlain.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTPlain.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTPlain.h" - $(SRC)HTPlain.h .ENDIF !_____________________________ HTTee $(LIB)HTTee.obj : $(SRC)HTTee.c $(SRC)HTTee.h $(SRC)HTStream.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTTee.c .IFDEF U $(SRC)HTTee.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTee.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTee.c" - $(SRC)HTTee.c $(SRC)HTTee.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTee.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTee.h" - $(SRC)HTTee.h .ENDIF !_____________________________ HTWAIS .IFDEF DECNET .ELSE $(LIB)HTWAIS.obj : $(SRC)HTWAIS.c $(SRC)HTWAIS.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTWAIS.c .IFDEF U $(SRC)HTWAIS.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWAIS.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWAIS.c" - $(SRC)HTWAIS.c $(SRC)HTWAIS.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWAIS.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWAIS.h" - $(SRC)HTWAIS.h .ENDIF .ENDIF !_____________________________ HTWSRC .IFDEF DECNET .ELSE $(LIB)HTWSRC.obj : $(SRC)HTWSRC.c $(SRC)HTWSRC.h $(SRC)HTUtils.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTWSRC.c .IFDEF U $(SRC)HTWSRC.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWSRC.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWSRC.c" - $(SRC)HTWSRC.c $(SRC)HTWSRC.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWSRC.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWSRC.h" - $(SRC)HTWSRC.h .ENDIF .ENDIF !_____________________________ HTWriter $(LIB)HTWriter.obj : $(SRC)HTWriter.c $(SRC)HTWriter.h $(SRC)HTStream.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTWriter.c .IFDEF U $(SRC)HTWriter.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWriter.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWriter.c" - $(SRC)HTWriter.c $(SRC)HTWriter.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWriter.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTWriter.h" - $(SRC)HTWriter.h .ENDIF !_____________________________ HTFWriter $(LIB)HTFWriter.obj : $(SRC)HTFWriter.c $(SRC)HTFWriter.h $(SRC)HTStream.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTFWriter.c .IFDEF U $(SRC)HTFWriter.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFWriter.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFWriter.c" - $(SRC)HTFWriter.c $(SRC)HTFWriter.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFWriter.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFWriter.h" - $(SRC)HTFWriter.h .ENDIF ! Access Authorisation Code !_____________________________ HTAAUtil $(LIB)HTAAUtil.obj : $(SRC)HTAAUtil.c $(SRC)HTAAUtil.h $(SRC)HTUtils.h $(SRC)HTString.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTAAUtil.c .IFDEF U $(SRC)HTAAUtil.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAAUtil.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAAUtil.c" - $(SRC)HTAAUtil.c $(SRC)HTAAUtil.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAAUtil.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAAUtil.h" - $(SRC)HTAAUtil.h .ENDIF !_____________________________ HTAABrow $(LIB)HTAABrow.obj : $(SRC)HTAABrow.c $(SRC)HTAABrow.h $(SRC)HTAAUtil.h $(SRC)HTUU.h $(SRC)HTUtils.h $(SRC)HTString.h $(SRC)HTParse.h $(SRC)HTList.h $(SRC)HTAlert.h $(SRC)HTAssoc.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTAABrow.c .IFDEF U $(SRC)HTAABrow.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAABrow.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAABrow.c" - $(SRC)HTAABrow.c $(SRC)HTAABrow.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAABrow.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAABrow.h" - $(SRC)HTAABrow.h .ENDIF !_____________________________ HTAssoc $(LIB)HTAssoc.obj : $(SRC)HTAssoc.c $(SRC)HTAssoc.h $(SRC)HTUtils.h $(SRC)HTString.h $(SRC)HTList.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTAssoc.c .IFDEF U $(SRC)HTAssoc.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAssoc.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAssoc.c" - $(SRC)HTAssoc.c $(SRC)HTAssoc.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAssoc.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAssoc.h" - $(SRC)HTAssoc.h .ENDIF !_____________________________ HTUU $(LIB)HTUU.obj : $(SRC)HTUU.c $(SRC)HTUU.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTUU.c .IFDEF U $(SRC)HTUU.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTUU.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTUU.c" - $(SRC)HTUU.c $(SRC)HTUU.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTUU.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTUU.h" - $(SRC)HTUU.h .ENDIF ! Communication and Files !________________________________ HTTP $(LIB)HTTP.obj : $(SRC)HTTP.c $(SRC)HTTP.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTTP.c .IFDEF U $(SRC)HTTP.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTP.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTP.c" - $(SRC)HTTP.c $(SRC)HTTP.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTP.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTP.h" - $(SRC)HTTP.h .ENDIF ! _________________________________ HTTCP $(LIB)HTTCP.obj : $(SRC)HTTCP.c $(SRC)HTTCP.h $(SRC)HTUtils.h $(SRC)tcp.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTTCP.c .IFDEF U $(SRC)HTTCP.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTCP.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTCP.c" - $(SRC)HTTCP.c $(SRC)HTTCP.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTCP.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTTCP.h" - $(SRC)HTTCP.h .ENDIF !_________________________________ HTFile $(LIB)HTFile.obj : $(SRC)HTFile.c $(SRC)HTFile.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTFile.c .IFDEF U $(SRC)HTFile.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFile.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFile.c" - $(SRC)HTFile.c $(SRC)HTFile.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFile.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFile.h" - $(SRC)HTFile.h .ENDIF !_________________________________ HTDirBrw $(LIB)HTDirBrw.obj : $(SRC)HTDirBrw.c $(SRC)HTDirBrw.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTDirBrw.c .IFDEF U $(SRC)HTDirBrw.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTDirBrw.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTDirBrw.c" - $(SRC)HTDirBrw.c $(SRC)HTDirBrw.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTDirBrw.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTDirBrw.h" - $(SRC)HTDirBrw.h .ENDIF !_________________________________ HTDescript $(LIB)HTDescript.obj : $(SRC)HTDescript.c $(SRC)HTDescript.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTDescript.c .IFDEF U $(SRC)HTDescript.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTDescript.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTDescript.c" - $(SRC)HTDescript.c $(SRC)HTDescript.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTDescript.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTDescript.h" - $(SRC)HTDescript.h .ENDIF !_________________________________ HTMulti $(LIB)HTMulti.obj : $(SRC)HTMulti.c $(SRC)HTMulti.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTMulti.c .IFDEF U $(SRC)HTMulti.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMulti.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMulti.c" - $(SRC)HTMulti.c $(SRC)HTMulti.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMulti.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTMulti.h" - $(SRC)HTMulti.h .ENDIF !_____________________________ HTBTree $(LIB)HTBTree.obj : $(SRC)HTBTree.c $(SRC)HTBTree.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTBTree.c .IFDEF U $(SRC)HTBTree.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTBTree.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTBTree.c" - $(SRC)HTBTree.c $(SRC)HTBTree.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTBTree.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTBTree.h" - $(SRC)HTBTree.h .ENDIF !__________________________________ HTFTP .IFDEF DECNET .ELSE $(LIB)HTFTP.obj : $(SRC)HTFTP.c $(SRC)HTFTP.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTFTP.c .IFDEF U $(SRC)HTFTP.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFTP.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFTP.c" - $(SRC)HTFTP.c $(SRC)HTFTP.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFTP.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTFTP.h" - $(SRC)HTFTP.h .ENDIF .ENDIF !_____________________________ HTAccess $(LIB)HTAccess.obj : $(SRC)HTAccess.c $(SRC)HTAccess.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTAccess.c .IFDEF U $(SRC)HTAccess.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAccess.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAccess.c" - $(SRC)HTAccess.c $(SRC)HTAccess.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAccess.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTAccess.h" - $(SRC)HTAccess.h .ENDIF !________________________________ HTParse $(LIB)HTParse.obj : $(SRC)HTParse.c $(SRC)HTParse.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTParse.c .IFDEF U $(SRC)HTParse.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTParse.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTParse.c" - $(SRC)HTParse.c $(SRC)HTParse.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTParse.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTParse.h" - $(SRC)HTParse.h .ENDIF !________________________________ HTError $(LIB)HTError.obj : $(SRC)HTError.c $(SRC)HTError.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTError.c .IFDEF U $(SRC)HTError.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTError.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTError.c" - $(SRC)HTError.c $(SRC)HTError.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTError.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTError.h" - $(SRC)HTError.h .ENDIF !________________________________ HTErrorMsg $(LIB)HTErrorMsg.obj : $(SRC)HTErrorMsg.c $(SRC)HTError.h $(SRC)HTUtils.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTErrorMsg.c .IFDEF U $(SRC)HTErrorMsg.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTErrorMsg.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTErrorMsg.c" - $(SRC)HTErrorMsg.c .ENDIF !_________________________________ include files only: .IFDEF U $(SRC)HTUtils.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTUtils.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTUtils.h" - $(SRC)HTUtils.h $(SRC)HTStream.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTStream.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HTStream.h" - $(SRC)HTStream.h $(SRC)tcp.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/tcp.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/tcp.h" - $(SRC)tcp.h $(SRC)HText.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HText.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/HText.h" - $(SRC)HText.h $(SRC)README : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/README" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/README" - $(SRC)README .ENDIF ! ______________________________ The version file .IFDEF U $(SRC)Version.make : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/Version.make" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/Version.make" - $(SRC)Version.make @- write sys$output "Please rebuild with new Version file" @- exit 2 ! Error .ENDIF ! _____________________________VMS SPECIFIC FILES: ! latest version of this one: .IFDEF U $(VMS)descrip.mms : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/descrip.mms" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/descrip.mms" - $(VMS)descrip.mms @- write sys$output "Please rebuild with new MMS file" @- exit 2 ! Error $(VMS)COPYING.LIB : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/COPYING.LIB" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/COPYING.LIB" - $(VMS)COPYING.LIB $(VMS)multinet.opt : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/multinet.opt" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/multinet.opt" - $(VMS)multinet.opt $(VMS)multinet.opt_alpha : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/multinet.opt_alpha" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/multinet.opt_alpha" - $(VMS)multinet.opt_alpha $(VMS)ucx.opt : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/ucx.opt" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/ucx.opt" - $(VMS)ucx.opt $(VMS)ucx.opt_alpha : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/ucx.opt_alpha" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/ucx.opt_alpha" - $(VMS)ucx.opt_alpha .ENDIF !_____________________________ VMS/HTVMSUTILS $(LIB)HTVMSUtils.obj : $(VMS)HTVMSUtils.c $(VMS)HTVMSUtils.h $(SRC)HTUtils.h $(SRC)HTAccess.h cc $(CFLAGS)/obj=$*.obj $(VMS)HTVMSUtils.c .IFDEF U $(VMS)HTVMSUtils.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/HTVMSUtils.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/HTVMSUtils.c" - $(VMS)HTVMSUtils.c $(VMS)HTVMSUtils.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/HTVMSUtils.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/HTVMSUtils.h" - $(VMS)HTVMSUtils.h .ENDIF !_____________________________ VMS/GETPASS $(LIB)GETPASS.obj : $(VMS)GETPASS.c cc $(CFLAGS)/obj=$*.obj $(VMS)GETPASS.c .IFDEF U $(VMS)GETPASS.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/getpass.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/getpass.c" - $(VMS)GETPASS.c .ENDIF !_____________________________ VMS/GETLINE $(LIB)GETLINE.obj : $(VMS)GETLINE.c cc $(CFLAGS)/obj=$*.obj $(VMS)GETLINE.c .IFDEF U $(VMS)GETLINE.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/getline.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/getline.c" - $(VMS)GETLINE.c .ENDIF !_____________________________ VMS/CRYPT $(LIB)CRYPT.obj : $(VMS)CRYPT.c $(VMS)UFC-CRYPT.h cc $(CFLAGS)/obj=$*.obj $(VMS)CRYPT.c .IFDEF U $(VMS)CRYPT.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/crypt.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/crypt.c" - $(VMS)CRYPT.c .ENDIF !_____________________________ VMS/CRYPT_UTIL $(LIB)CRYPT_UTIL.obj : $(VMS)CRYPT_UTIL.c $(VMS)UFC-CRYPT.h $(VMS)PATCHLEVEL.h cc $(CFLAGS)/obj=$*.obj $(VMS)CRYPT_UTIL.c .IFDEF U $(VMS)CRYPT_UTIL.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/crypt_util.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/crypt_util.c" - $(VMS)CRYPT_UTIL.c .ENDIF !_____________________________ VMS/DIRENT $(LIB)dirent.obj : $(VMS)dirent.c $(VMS)dirent.h $(VMS)sys_dirent.h cc $(CFLAGS)/obj=$*.obj $(VMS)dirent.c .IFDEF U $(VMS)dirent.c : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/dirent.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/dirent.c" - $(VMS)dirent.c $(VMS)dirent.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/dirent.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/dirent.h" - $(VMS)dirent.h $(VMS)sys_dirent.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/sys_dirent.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/sys_dirent.h" - $(VMS)sys_dirent.h .ENDIF !_________________________________ VMS include files only: .IFDEF U $(VMS)UFC-CRYPT.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/ufc-crypt.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/ufc-crypt.h" - $(VMS)UFC-CRYPT.h $(VMS)PATCHLEVEL.h : $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/patchlevel.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/Library/Implementation/vms/patchlevel.h" - $(VMS)PATCHLEVEL.h .ENDIF libwww/Library/src/vms/dirent.c0100644000076400001440000001077505610526660016222 0ustar danielusers/* file changed to make it VMS compatible. NOT ALL UNIX FEATURES WORK */ #include #include #include "dirent.h" /* routines are not reentrant... */ #define NO_VERSIONS DIR *opendir(char *dirname) { static DIR dir; char *closebracket; long status; struct dsc$descriptor_s entryname_desc; struct dsc$descriptor_s dirname_desc; char DirEntry[256]; char VMSentry[256]; char UnixEntry[256]; int index; char *dot; /* check if directory exists */ /* dirname can look like /disk$user/duns/www/test/multi */ /* or like /disk$user/duns/www/test/multi/ */ /* DirEntry should look like disk$user:[duns.www.test]multi in both cases */ /* dir.dirname should look like disk$user:[duns.www.test.multi] */ strcpy(UnixEntry,dirname); if (UnixEntry[strlen(UnixEntry)-1] != '/') strcat(UnixEntry,"/"); strcpy(DirEntry, HTVMS_name("",UnixEntry)); strcpy(dir.dirname, DirEntry); index = strlen(DirEntry) - 1; if (DirEntry[index] == ']') DirEntry[index] = '\0'; if ((dot = strrchr(DirEntry,'.')) == NULL) { /* convert disk$user:[duns] into disk$user:[000000]duns.dir */ char *openbr = strrchr(DirEntry,'['); if (!openbr) { /* convert disk$user: into disk$user:[000000]000000.dir */ strcpy(dir.dirname, DirEntry); strcat(dir.dirname, "[000000]"); strcat(DirEntry,"[000000]000000.dir"); } else { char End[256]; strcpy(End,openbr+1); *(openbr+1) = '\0'; strcat(DirEntry,"000000]"); strcat(DirEntry,End); strcat(DirEntry,".dir"); } } else { *dot = ']'; strcat(DirEntry,".dir"); } dir.context = 0; dirname_desc.dsc$w_length = strlen(DirEntry); dirname_desc.dsc$b_dtype = DSC$K_DTYPE_T; dirname_desc.dsc$b_class = DSC$K_CLASS_S; dirname_desc.dsc$a_pointer = &(DirEntry); /* look for the directory */ entryname_desc.dsc$w_length = 255; entryname_desc.dsc$b_dtype = DSC$K_DTYPE_T; entryname_desc.dsc$b_class = DSC$K_CLASS_S; entryname_desc.dsc$a_pointer = VMSentry; status = LIB$FIND_FILE(&(dirname_desc), &entryname_desc, &(dir.context), 0,0,0); if (!(status & 0x01)) { /* directory not found */ return(NULL); } #if 0 /* now correct dirname, which looks like disk$user:[duns.www.test]multi */ /* and should look like disk$user:[duns.www.test.multi] */ closebracket = strchr(dir.dirname,']'); *closebracket = '.'; closebracket = strstr(dir.dirname,".dir"); *closebracket = '\0'; strcat(dir.dirname,"]"); #endif #ifdef NO_VERSIONS strcat(dir.dirname,"*.*"); #else strcat(dir.dirname,"*.*;*"); #endif dir.context = 0; dir.dirname_desc.dsc$w_length = strlen(dir.dirname); dir.dirname_desc.dsc$b_dtype = DSC$K_DTYPE_T; dir.dirname_desc.dsc$b_class = DSC$K_CLASS_S; dir.dirname_desc.dsc$a_pointer = &(dir.dirname); return(&dir); } struct dirent *readdir(DIR *dirp) { static struct dirent entry; long status; struct dsc$descriptor_s entryname_desc; char *space, *slash; char VMSentry[256]; char *UnixEntry; entryname_desc.dsc$w_length = 255; entryname_desc.dsc$b_dtype = DSC$K_DTYPE_T; entryname_desc.dsc$b_class = DSC$K_CLASS_S; entryname_desc.dsc$a_pointer = VMSentry; status = LIB$FIND_FILE(&(dirp->dirname_desc), &entryname_desc, &(dirp->context), 0,0,0); if (status == RMS$_NMF) { /* no more files */ return(NULL); } else { /* ok */ if (!(status & 0x01)) return(0); #ifdef NO_VERSIONS space = strchr(VMSentry,';'); #else space = strchr(VMSentry,' '); #endif if (space) *space = '\0'; /* convert to unix style... */ UnixEntry = HTVMS_wwwName(VMSentry); slash = strrchr(UnixEntry,'/') + 1; strcpy(entry.d_name,slash); entry.d_namlen = strlen(entry.d_name); entry.d_fileno = 1; return(&entry); } } int closedir(DIR *dirp) { long status; status = LIB$FIND_FILE_END(&(dirp->context)); if (!(status & 0x01)) exit(status); dirp->context = 0; return(0); } /* rest of routines not implemented */ #if 0 #ifndef _POSIX_SOURCE extern void seekdir(/* DIR *dirp, int loc */); extern long telldir(/* DIR *dirp */); #endif /* POSIX_SOURCE */ extern void rewinddir(/* DIR *dirp */); #ifndef lint #define rewinddir(dirp) seekdir((dirp), (long)0) #endif /* not implemented */ #endif /* not defined for VMS */ libwww/Library/src/vms/dirent.h0100644000076400001440000000265405537641376016236 0ustar danielusers/* file changed to make it VMS compatible. NOT ALL UNIX FEATURES WORK */ /* NOTE: the routines are NOT re-entrant... */ /* * Filesystem-independent directory information. */ #ifndef __dirent_h #define __dirent_h #include #ifndef _POSIX_SOURCE #define d_ino d_fileno /* compatability */ #ifndef NULL #define NULL 0 #endif #endif /* !_POSIX_SOURCE */ /* * Definitions for library routines operating on directories. */ #include typedef struct __dirdesc { #if 0 int dd_fd; /* file descriptor */ long dd_loc; /* buf offset of entry from last readddir() */ long dd_size; /* amount of valid data in buffer */ long dd_bsize; /* amount of entries read at a time */ long dd_off; /* Current offset in dir (for telldir) */ char *dd_buf; /* directory data buffer */ #endif long context; /* context descriptor for LIB$FIND_FILE calls */ char dirname[255+1]; /* keeps the directory name, including *.* */ struct dsc$descriptor_s dirname_desc; /* descriptor of dirname */ } DIR; extern DIR *opendir(char *dirname); extern struct dirent *readdir(DIR *dirp); extern int closedir(DIR *dirp); #if 0 #ifndef _POSIX_SOURCE extern void seekdir(/* DIR *dirp, int loc */); extern long telldir(/* DIR *dirp */); #endif /* POSIX_SOURCE */ extern void rewinddir(/* DIR *dirp */); #ifndef lint #define rewinddir(dirp) seekdir((dirp), (long)0) #endif #endif /* not defined for VMS */ #include "sys_dirent.h" #endif /* !__dirent_h */ libwww/Library/src/vms/getline.c0100644000076400001440000000374205610526665016365 0ustar danielusers/* Copyright (C) 1991 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* CHANGED FOR VMS */ /* * ** ** HISTORY: ** 8 Jul 94 FM Include "HTUtils.h" for memory allocation and free() ** substitutions with VAXC on VMS. ** */ #include #include #include #include #include "HTUtils.h" /* Read up to (and including) a newline from STREAM into *LINEPTR (and null-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'd as necessary. Returns the number of characters read (not including the null terminator), or -1 on error or EOF. */ int getline(char **lineptr, size_t *n, FILE *stream) { static char line[256]; char *ptr; unsigned int len; if (lineptr == NULL || n == NULL) { errno = EINVAL; return -1; } if (ferror (stream)) return -1; if (feof(stream)) return -1; fgets(line,256,stream); ptr = strchr(line,'\n'); if (ptr) *ptr = '\0'; len = strlen(line); if ((len+1) < 256) { ptr = realloc(*lineptr, 256); if (ptr == NULL) return(-1); *lineptr = ptr; *n = 256; } strcpy(*lineptr,line); return(len); } libwww/Library/src/vms/getpass.c0100644000076400001440000000321105610526672016371 0ustar danielusers/* Copyright (C) 1991 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* CHANGED FOR VMS */ /* * ** ** HISTORY: ** 8 Jul 94 FM Include "HTUtils.h" for memory allocation and free() ** substitutions with VAXC on VMS. ** */ #include #include #include #include #include "HTUtils.h" char *getpass (const char *prompt) { static char *buf; int result; $DESCRIPTOR(devnam,"SYS$INPUT"); int chan; int promptlen; struct { short result; short count; int info; } iosb; promptlen = strlen(prompt); buf = malloc(256); if (buf == NULL) return(NULL); result = SYS$ASSIGN(&devnam, &chan, PSL$C_USER, 0, 0); result = SYS$QIOW(0, chan, IO$_READPROMPT | IO$M_PURGE |IO$M_NOECHO, &iosb, 0, 0, buf, 255, 0, 0, prompt, promptlen); buf[iosb.count] = '\0'; result = SYS$DASSGN(chan); return buf; } libwww/Library/src/vms/grpread.c0100644000076400001440000000612305472160702016346 0ustar danielusers/* Copyright (C) 1991 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* CHANGED FOR VMS */ /* * */ #include #include #include #include #include #include #include "../vms/grp.h" /* This is the function that all the others are based on. The format of the group file is known only here. */ /* Structure containing info kept by each grpread caller. */ typedef struct { char *buf; size_t buflen; size_t max_members; char **members; struct group g; } grpread_info; /* Return a chunk of memory containing a pre-initialized `grpread_info'. */ void *grpalloc(void) { grpread_info *info = (void *) malloc (sizeof(grpread_info)); if (info == NULL) return NULL; info->buf = NULL; info->buflen = 0; info->max_members = 5; info->members = (char **) malloc (5 * sizeof(char *)); if (info->members == NULL) { free ((void *) info); return NULL; } return info; } /* Read a group entry from STREAM, filling in G. */ struct group *grpread(FILE *stream, void *g) { register grpread_info *const info = (grpread_info *) g; char *start, *end; register size_t i; /* Idiocy checks. */ if (stream == NULL) { errno = EINVAL; return NULL; } do if (getline (&info->buf, &info->buflen, stream) == -1) return NULL; while (info->buf[0] == '#'); start = info->buf; end = strchr (start, ':'); if (end == NULL) return NULL; *end = '\0'; info->g.gr_name = start; start = end + 1; end = strchr (start, ':'); if (end == NULL) return NULL; *end = '\0'; info->g.gr_passwd = start; info->g.gr_gid = (int) strtol (end + 1, &end, 10); if (*end != ':') return NULL; i = 0; do { start = end + 1; end = strchr (start, ','); if (end == NULL) { end = strchr (start, '\n'); if (end == start) break; if (end == NULL) return NULL; *end = '\0'; end = NULL; } else *end = '\0'; if (i == info->max_members - 2) { info->max_members += 5; info->members = (char **) realloc ((void *) info->members, info->max_members * sizeof (char *)); if (info->members == NULL) return NULL; } info->members[i++] = start; } while (end != NULL); info->members[i] = NULL; info->g.gr_mem = info->members; return &info->g; } libwww/Library/src/vms/multinet.opt0100644000076400001440000000007705534615067017155 0ustar danielusersMULTINET:MULTINET_SOCKET_LIBRARY/share sys$share:vaxcrtl/share libwww/Library/src/vms/multinet.opt_alpha0100644000076400001440000000004705534615072020313 0ustar danielusersMULTINET:MULTINET_SOCKET_LIBRARY/share libwww/Library/src/vms/patchlevel.h0100644000076400001440000000167705472160706017073 0ustar danielusers/* * UFC-crypt: ultra fast crypt(3) implementation * * Copyright (C) 1991, 1992, Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * @(#)patchlevel.h 1.11 7/15/92 * */ #define PATCHLEVEL "UFC-crypt, patchlevel 1e, @(#)patchlevel.h 1.11 7/15/92" libwww/Library/src/vms/sys_dirent.h0100644000076400001440000000355005537641400017114 0ustar danielusers/* this file was adapted for VMS. NOT ALL UNIX FEATURES WORK */ /* *------> THE DESCRIPTION BELOW IS FOR UNIX... <----- * Filesystem-independent directory information. * Directory entry structures are of variable length. * Each directory entry is a struct dirent containing its file number, the * offset of the next entry (a cookie interpretable only the filesystem * type that generated it), the length of the entry, and the length of the * name contained in the entry. These are followed by the name. The * entire entry is padded with null bytes to a 4 byte boundary. All names * are guaranteed null terminated. The maximum length of a name in a * directory is MAXNAMLEN, plus a null byte. *------> THE DESCRIPTION BELOW IS FOR VMS... <----- * for VMS only d_name, d_namlen and d_ino are defined. * d_fileno is a nonzero number to make you think the file is there. The number * has no other meaning. */ #ifndef __sys_dirent_h #define __sys_dirent_h struct dirent { #if 0 off_t d_off; /* offset of next disk dir entry */ #endif unsigned long d_fileno; /* file number of entry */ #if 0 unsigned short d_reclen; /* length of this record */ #endif unsigned short d_namlen; /* length of string in d_name */ char d_name[255+1]; /* name (up to MAXNAMLEN + 1) */ }; #ifndef _POSIX_SOURCE /* * It's unlikely to change, but make sure that sizeof d_name above is * at least MAXNAMLEN + 1 (more may be added for padding). */ #define MAXNAMLEN 255 /* * The macro DIRSIZ(dp) gives the minimum amount of space required to represent * a directory entry. For any directory entry dp->d_reclen >= DIRSIZ(dp). * Specific filesystem types may use this macro to construct the value * for d_reclen. */ #undef DIRSIZ #define DIRSIZ(dp) \ (((sizeof(struct dirent) - (MAXNAMLEN+1) + ((dp)->d_namlen+1)) +3) & ~3) #endif /* !_POSIX_SOURCE */ #endif /* !__sys_dirent_h */ libwww/Library/src/vms/ucx.opt0100644000076400001440000000006005537641403016077 0ustar danieluserssys$library:ucx$ipc/lib sys$share:vaxcrtl/share libwww/Library/src/vms/ucx.opt_alpha0100644000076400001440000000003405537641406017250 0ustar danieluserssys$share:ucx$ipc_shr/share libwww/Library/src/vms/ufc-crypt.h0100644000076400001440000000467305472160716016660 0ustar danielusers/* * UFC-crypt: ultra fast crypt(3) implementation * * Copyright (C) 1991, 1992, Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * @(#)ufc-crypt.h 1.16 09/21/92 * * Definitions of datatypes * */ /* * Requirements for datatypes: * * A datatype 'ufc_long' of at least 32 bit * *and* * A type 'long32' of exactly 32 bits (_UFC_32_) * *or* * A type 'long64' of exactly 64 bits (_UFC_64_) * * 'int' is assumed to be at least 8 bit */ /* * #ifdef's for various architectures */ #ifdef cray /* thanks to (Tom Hutton) for testing */ typedef unsigned long ufc_long; typedef unsigned long long64; #define _UFC_64_ #endif #ifdef convex /* thanks to pcl@convex.oxford.ac.uk (Paul Leyland) for testing */ typedef unsigned long ufc_long; typedef long long long64; #define _UFC_64_ #endif #ifdef ksr /* * Note - the KSR machine does not define a unique symbol * which we can check. So you MUST add '-Dksr' to your Makefile. * Thanks to lijewski@theory.tc.cornell.edu (Mike Lijewski) for * the patch. */ typedef unsigned long ufc_long; typedef unsigned long long64; #define _UFC_64_ #endif /* * For debugging 64 bit code etc with 'gcc' */ #ifdef GCC3232 typedef unsigned long ufc_long; typedef unsigned long long32; #define _UFC_32_ #endif #ifdef GCC3264 typedef unsigned long ufc_long; typedef long long long64; #define _UFC_64_ #endif #ifdef GCC6432 typedef long long ufc_long; typedef unsigned long long32; #define _UFC_32_ #endif #ifdef GCC6464 typedef long long ufc_long; typedef long long long64; #define _UFC_64_ #endif /* * Catch all for 99.95% of all UNIX machines */ #ifndef _UFC_64_ #ifndef _UFC_32_ #define _UFC_32_ typedef unsigned long ufc_long; typedef unsigned long long32; #endif #endif libwww/Library/src/vms/Makefile.in0100644000076400001440000001404607405520525016627 0ustar danielusers# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = descrip.mms COPYING.LIB build_multinet.com build_multinet.com_alpha multinet.opt build_ucx.com build_ucx.com_alpha ucx.opt ucx.opt_alpha patchlevel.h ufc-crypt.h crypt.c crypt_util.c getline.c getpass.c HTVMSUtils.h HTVMSUtils.c dirent.h dirent.c sys_dirent.h mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = COPYING.LIB Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Library/src/vms/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src/vms distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Library/src/vms/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libwww/Library/src/.cvsignore0100644000076400001440000000011007144553335015745 0ustar danielusersHT*.h WWW*.h SGML.h wwwsys.h *.lo *.la .libs .deps Makefile.in Makefile libwww/Library/src/HTAABrow.c0100644000076400001440000010400607253715616015474 0ustar danielusers/* HTAABrow.c ** BROWSER SIDE ACCESS AUTHORIZATION MODULE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTAABrow.c,v 2.60 2025/03/14 16:25:50 kahan Exp $ ** ** Contains code for parsing challenges and creating credentials for ** basic authentication schemes. See also the HTAAUtil module ** for how to handle other authentication schemes. You don't have to use ** this code at all. ** ** AUTHORS: ** AL Ari Luotonen luotonen@dxcern.cern.ch ** HFN Henrik Frystyk ** JKO Jose Kahan ** ** HISTORY: ** Oct 17 AL Made corrections suggested by marca: ** Added if (!realm->username) return NULL; ** Changed some ""s to NULLs. ** Now doing HT_CALLOC() to init uuencode source; ** otherwise HTUU_encode() reads uninitialized memory ** every now and then (not a real bug but not pretty). ** Corrected the formula for uuencode destination size. ** Feb 96 HFN Rewritten to make it scheme independent and based on ** callback functions and an info structure ** Nov 98 JKO Added support for message digest authentication ** Jun 2000 JKO Changed the buffer size for HTUU_encode in order ** to avoid a potential SIGSEV when calling that ** function (as advised by Heiner Kallweit). ** Mar 2001 JKO When doing pipelining digest requests, the stale ** nonce reply appears only for one of such requests, ** all the following ones in the pipe will receive a ** 401. I added some code to take into account these cases ** by trying to infer if a nonce is stale. ** */ /* Portions of this code (as indicated) are derived from the Internet Draft ** draft-ietf-http-authentication-03 and are covered by the following ** copyright: ** Copyright (C) The Internet Society (1998). All Rights Reserved. ** This document and translations of it may be copied and furnished to ** others, and derivative works that comment on or otherwise explain it or ** assist in its implmentation may be prepared, copied, published and ** distributed, in whole or in part, without restriction of any kind, ** provided that the above copyright notice and this paragraph are included ** on all such copies and derivative works. However, this document itself ** may not be modified in any way, such as by removing the copyright notice ** or references to the Internet Society or other Internet organizations, ** except as needed for the purpose of developing Internet standards in ** which case the procedures for copyrights defined in the Internet ** Standards process must be followed, or as required to translate it into ** languages other than English. ** The limited permissions granted above are perpetual and will not be ** revoked by the Internet Society or its successors or assigns. ** This document and the information contained herein is provided on an "AS ** IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK ** FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT ** LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT ** INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR ** FITNESS FOR A PARTICULAR PURPOSE. **/ /* Library include files */ #include "WWWLib.h" #include "HTAAUtil.h" #include "HTParse.h" #include "HTAABrow.h" /* Implemented here */ #include "HTDigest.h" #define BASIC_AUTH "basic" #define DIGEST_AUTH "digest" #define DIGEST_AI "authentication-info" #define PROXY_DIGEST_AI "proxy-authentication-info" typedef struct _HTBasic { /* Basic challenge and credentials */ char * uid; char * pw; BOOL retry; /* Should we ask the user again? */ BOOL proxy; /* Proxy authentication */ } HTBasic; typedef struct _HTDigest { /* Digest challenge and credentials */ /* digest info can be shared by one or more UT entries */ int references; /* client authentication data */ char * uid; char * pw; char * realm; char * cnonce; long nc; /* server authentication data */ char * nonce; char * opaque; /* session authentication data */ int algorithm; char * qop; BOOL stale; BOOL retry; /* Should we ask the user again? */ BOOL proxy; /* Proxy authentication */ } HTDigest; #define HASHLEN 16 typedef char HASH[HASHLEN+1]; #define HASHHEXLEN 32 typedef char HASHHEX[HASHHEXLEN+1]; /* ------------------------------------------------------------------------- */ /* ** Create a protection template for the files ** in the same directory as the given file ** Returns a template matching docname, and other files in that directory. ** ** E.g. /foo/bar/x.html => /foo/bar/ * ** ^ ** Space only to prevent it from ** being a comment marker here, ** there really isn't any space. */ PRIVATE char * make_template (const char * docname) { char * tmplate = NULL; if (docname) { char * host = HTParse(docname, "", PARSE_ACCESS|PARSE_HOST|PARSE_PUNCTUATION); char * path = HTParse(docname, "", PARSE_PATH|PARSE_PUNCTUATION); char * slash = strrchr(path, '/'); if (slash) { #if 0 if (*(slash+1)) { strcpy(slash, "*"); StrAllocCat(host, path); } else StrAllocCat(host, "/*"); #else if (*(slash+1)) { strcpy(slash + 1, "*"); StrAllocCat(host, path); } else { StrAllocCat(host, path); StrAllocCat(host, "*"); } #endif } HT_FREE(path); tmplate = host; } else StrAllocCopy(tmplate, "*"); HTTRACE(AUTH_TRACE, "Template.... Made template `%s' for file `%s'\n" _ tmplate _ docname ? docname : ""); return tmplate; } /* ------------------------------------------------------------------------- */ /* Basic Authentication */ /* ------------------------------------------------------------------------- */ /* ** Prompt the user for username and password. ** Returns YES if user name was typed in, else NO */ PRIVATE int prompt_user (HTRequest * request, const char * realm, HTBasic * basic) { HTAlertCallback * cbf = HTAlert_find(HT_A_USER_PW); /* If no method for prompting the user then we might as well give up */ if (!cbf) return HT_ERROR; /* Otherwise go ahead and ask the user */ if (request) { HTAlertPar * reply = HTAlert_newReply(); int msg = basic->proxy ? HT_MSG_PROXY_UID : HT_MSG_UID; BOOL res = (*cbf)(request, HT_A_USER_PW, msg, basic->uid, (char *) realm, reply); if (res) { HT_FREE(basic->uid); HT_FREE(basic->pw); basic->uid = HTAlert_replyMessage(reply); basic->pw = HTAlert_replySecret(reply); } HTAlert_deleteReply(reply); return res ? HT_OK : HT_ERROR; } return HT_OK; } PRIVATE HTBasic * HTBasic_new() { HTBasic * me = NULL; if ((me = (HTBasic *) HT_CALLOC(1, sizeof(HTBasic))) == NULL) HT_OUTOFMEM("HTBasic_new"); me->retry = YES; /* Ask the first time through */ return me; } /* HTBasic_delete ** -------------- ** Deletes a "basic" information object */ PUBLIC int HTBasic_delete (void * context) { HTBasic * basic = (HTBasic *) context; if (basic) { HT_FREE(basic->uid); HT_FREE(basic->pw); HT_FREE(basic); return YES; } return NO; } /* ** Make basic authentication scheme credentials and register this ** information in the request object as credentials. They will then ** be included in the request header. An example is ** ** "Basic AkRDIhEF8sdEgs72F73bfaS==" ** ** The function can both create normal and proxy credentials ** Returns HT_OK or HT_ERROR */ PRIVATE BOOL basic_credentials (HTRequest * request, HTBasic * basic) { if (request && basic) { char * cleartext = NULL; char * cipher = NULL; int cl_len = strlen(basic->uid ? basic->uid : "") + strlen(basic->pw ? basic->pw : "") + 5; int ci_len = 5 + 4 * (cl_len/3); if ((cleartext = (char *) HT_CALLOC(1, cl_len)) == NULL) HT_OUTOFMEM("basic_credentials"); *cleartext = '\0'; if (basic->uid) strcpy(cleartext, basic->uid); strcat(cleartext, ":"); if (basic->pw) strcat(cleartext, basic->pw); if ((cipher = (char *) HT_CALLOC(1, ci_len + 3)) == NULL) HT_OUTOFMEM("basic_credentials"); HTUU_encode((unsigned char *) cleartext, strlen(cleartext), cipher); /* Create the credentials and assign them to the request object */ { int cr_len = strlen("basic") + ci_len + 3; char * cookie = (char *) HT_MALLOC(cr_len+1); if (!cookie) HT_OUTOFMEM("basic_credentials"); strcpy(cookie, "Basic "); strcat(cookie, cipher); HTTRACE(AUTH_TRACE, "Basic Cookie `%s\'\n" _ cookie); /* Check whether it is proxy or normal credentials */ if (basic->proxy) HTRequest_addCredentials(request, "Proxy-Authorization", cookie); else HTRequest_addCredentials(request, "Authorization", cookie); HT_FREE(cookie); } HT_FREE(cleartext); HT_FREE(cipher); return HT_OK; } return HT_ERROR; } /* HTBasic_generate ** ---------------- ** This function generates "basic" credentials for the challenge found in ** the authentication information base for this request. The result is ** stored as an association list in the request object. ** This is a callback function for the AA handler. */ PUBLIC int HTBasic_generate (HTRequest * request, void * context, int mode) { HTBasic * basic = (HTBasic *) context; BOOL proxy = mode==HT_NO_PROXY_ACCESS ? YES : NO; if (request) { const char * realm = HTRequest_realm(request); /* ** If we were asked to explicitly ask the user again */ if (mode == HT_REAUTH || mode == HT_PROXY_REAUTH) basic->retry = YES; /* ** If we don't have a basic context then add a new one to the tree. ** We use different trees for normal and proxy authentication */ if (!basic) { basic = HTBasic_new(); if (proxy) { char * url = HTRequest_proxy(request); basic->proxy = YES; HTAA_updateNode(proxy, BASIC_AUTH, realm, url, basic); } else { char * url = HTAnchor_address((HTAnchor*)HTRequest_anchor(request)); HTAA_updateNode(proxy, BASIC_AUTH, realm, url, basic); HT_FREE(url); } } /* ** If we have a set of credentials (or the user provides a new set) ** then store it in the request object as the credentials */ if ((basic->retry && prompt_user(request, realm, basic) == HT_OK) || (!basic->retry && basic->uid)) { basic->retry = NO; return basic_credentials(request, basic); } else { char * url = HTAnchor_address((HTAnchor*)HTRequest_anchor(request)); HTAA_deleteNode(proxy, BASIC_AUTH, realm, url); HT_FREE(url); return HT_ERROR; } } return HT_OK; } /* HTBasic_parse ** ------------- ** This function parses the contents of a "basic" challenge ** and stores the challenge in our authentication information datebase. ** We also store the realm in the request object which will help finding ** the right set of credentials to generate. ** The function is a callback function for the AA handler. */ PUBLIC int HTBasic_parse (HTRequest * request, HTResponse * response, void * context, int status) { HTAssocList * challenge = HTResponse_challenge(response); HTBasic * basic = NULL; BOOL proxy = status==HT_NO_PROXY_ACCESS ? YES : NO; if (request && challenge) { char * p = HTAssocList_findObject(challenge, BASIC_AUTH); char * realm = HTNextField(&p); char * rm = HTNextField(&p); /* ** If valid challenge then make a template for the resource and ** store this information in our authentication URL Tree */ if (realm && !strcasecomp(realm, "realm") && rm) { HTTRACE(AUTH_TRACE, "Basic Parse. Realm `%s\' found\n" _ rm); HTRequest_setRealm(request, rm); /* ** If we are in proxy mode then add the proxy - not the final URL */ if (proxy) { char * url = HTRequest_proxy(request); HTTRACE(AUTH_TRACE, "Basic Parse. Proxy authentication\n"); basic = (HTBasic *) HTAA_updateNode(proxy, BASIC_AUTH, rm, url, NULL); /* if the previous authentication failed, then try again */ if (HTRequest_AAretrys (request) > 1 && status == HT_NO_ACCESS && basic) basic->retry = YES; } else { char * url = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); char * tmplate = make_template(url); basic = (HTBasic *) HTAA_updateNode(proxy, BASIC_AUTH, rm, tmplate, NULL); /* if the previous authentication failed, then try again */ if (HTRequest_AAretrys (request) > 1 && status == HT_NO_ACCESS && basic) basic->retry = YES; HT_FREE(url); HT_FREE(tmplate); } } /* ** For some reason the authentication failed so we have to ask the user ** if we should try again. It may be because the user typed the wrong ** user name and password */ if (basic && basic->retry) { HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM); /* ** Do we have a method registered for prompting the user whether ** we should retry */ if (prompt) { int code = proxy ? HT_MSG_RETRY_PROXY_AUTH : HT_MSG_RETRY_AUTHENTICATION; if ((*prompt)(request, HT_A_CONFIRM, code, NULL, NULL, NULL) != YES) return HT_ERROR; } } return HT_OK; } HTTRACE(AUTH_TRACE, "Auth........ No challenges found\n"); return HT_ERROR; } /* ------------------------------------------------------------------------- */ /* Digest Authentication */ /* ------------------------------------------------------------------------- */ /* ** Prompt the user for username and password. ** Returns YES if user name was typed in, else NO */ PRIVATE int prompt_digest_user (HTRequest * request, const char * realm, HTDigest * digest) { HTAlertCallback * cbf = HTAlert_find(HT_A_USER_PW); /* If no method for prompting the user then we might as well give up */ if (!cbf) return HT_ERROR; /* Otherwise go ahead and ask the user */ if (request) { HTAlertPar * reply = HTAlert_newReply(); int msg = digest->proxy ? HT_MSG_PROXY_UID : HT_MSG_UID; BOOL res = (*cbf)(request, HT_A_USER_PW, msg, digest->uid, (char *) realm, reply); if (res) { HT_FREE(digest->uid); HT_FREE(digest->pw); digest->uid = HTAlert_replyMessage(reply); digest->pw = HTAlert_replySecret(reply); } HTAlert_deleteReply(reply); return res ? HT_OK : HT_ERROR; } return HT_OK; } PRIVATE HTDigest * HTDigest_new() { HTDigest * me = NULL; if ((me = (HTDigest *) HT_CALLOC(1, sizeof(HTDigest))) == NULL) HT_OUTOFMEM("HTDigest_new"); me->algorithm = HTDaMD5; /* use md5 as a default value */ me->retry = YES; /* Ask the first time through */ return me; } /* HTDigest_delete ** -------------- ** Deletes a "digest" information object ** A single object may be registered multiple places in the URL tree. ** We keep a simple reference count on the object so that we know ** when to delete the object. */ PUBLIC int HTDigest_delete (void * context) { HTDigest * digest = (HTDigest *) context; if (digest) { if (digest->references <= 0) { HT_FREE(digest->uid); HT_FREE(digest->pw); HT_FREE(digest->realm); HT_FREE(digest->cnonce); HT_FREE(digest->nonce); HT_FREE(digest->opaque); HT_FREE(digest->qop); HT_FREE(digest); return YES; } else digest->references--; } return NO; } /* HTDigest_reset ** -------------- ** When digest authentication fails, we simulate a new digest by ** erasing the old one, but keeping the uid and the password. This is ** so that we can take into account the stale nonce protocol, without ** prompting the user for a new password. */ PRIVATE int HTDigest_reset (HTDigest *digest) { if (digest) { digest->nc = 0l; digest->stale = 0; digest->retry = YES; HT_FREE(digest->cnonce); HT_FREE(digest->nonce); HT_FREE(digest->opaque); HT_FREE(digest->qop); return YES; } else return NO; } /* HTDigest_updateInfo ** -------------- ** This function updates the digest with whatever new ** authentification information the server sent back. */ PUBLIC int HTDigest_updateInfo (HTRequest *request, HTResponse *response, void * context, int status) { HTAssocList * challenge = HTResponse_challenge(response); const char * realm = HTRequest_realm (request); if (request && challenge && realm) { BOOL proxy = 0; char * value = NULL; char * token = NULL; char * auth_info = NULL; HTDigest *digest; char *url; /* ** try to find the magic string in the challenge */ HTTRACE(AUTH_TRACE, "Digest Update.. Processing authentication-info\n"); if ((auth_info = HTAssocList_findObject(challenge, DIGEST_AI))) proxy = 0; else if ((auth_info = HTAssocList_findObject(challenge, PROXY_DIGEST_AI))) proxy = 1; else { HTTRACE(AUTH_TRACE, "Digest Update.. Didn't find any authentication-info\n"); return HT_OK; } /* ** find the digest credentials */ if (proxy) { url = HTRequest_proxy(request); digest = (HTDigest *) HTAA_updateNode (proxy, DIGEST_AUTH, realm, url, NULL); } else { url = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); digest = (HTDigest *) HTAA_updateNode (proxy, DIGEST_AUTH, realm, url, NULL); HT_FREE(url); } if (!digest) { HTTRACE(AUTH_TRACE, "Digest Update.. Error: received authentication-info without having a local digest\n"); return HT_ERROR; } /* ** Search through the set of parameters in the Authentication-info ** header. */ while ((token = HTNextField(&auth_info))) { if (!strcasecomp(token, "nextnonce")) { if ((value = HTNextField(&auth_info))) { HT_FREE (digest->nonce); StrAllocCopy(digest->nonce, value); } else if (!strcasecomp(token, "qop")) { value = HTNextField(&auth_info); /* split, process the qop, report errors */ } else if (!strcasecomp(token, "rspauth")) { value = HTNextField(&auth_info); /* process rspauth */ } else if (!strcasecomp(token, "cnonce")) { value = HTNextField (&auth_info); if (value && strcmp (digest->cnonce, value)) { /* print an alert?, bad cnonce? */ } } else if (!strcasecomp(token, "nc")) { value = HTNextField(&auth_info); /* compare and printo some error? */ } } } } return HT_OK; } /* ** Simple function to add a parameter/value pair to a string ** */ PRIVATE BOOL add_param (char ** dest, char *param, char * value, BOOL quoted) { char *tmp = *dest; if (!param || *param == '\0' || !value || *value == '\0') return NO; /* if there was a previous parameter, we add the next one in the following line */ if (tmp) StrAllocCat(tmp, ","); /* copy the new parameter and value */ StrAllocCat(tmp, param); StrAllocCat(tmp, "="); if (quoted) { StrAllocCat(tmp, "\""); StrAllocCat(tmp, value); StrAllocCat(tmp, "\""); } else StrAllocCat(tmp, value); *dest = tmp; return YES; } /* ** Code derived from draft-ietf-http-authentication-03 starts here */ PRIVATE void CvtHex (HASH Bin, HASHHEX Hex) { unsigned short i; unsigned char j; for (i = 0; i < HASHLEN; i++) { j = (Bin[i] >> 4) & 0xf; if (j <= 9) Hex[i*2] = (j + '0'); else Hex[i*2] = (j + 'a' - 10); j = Bin[i] & 0xf; if (j <= 9) Hex[i*2+1] = (j + '0'); else Hex[i*2+1] = (j + 'a' - 10); } Hex[HASHHEXLEN] = '\0'; } /* calculate H(A1) as per spec */ PRIVATE void DigestCalcHA1 (int algorithm, char * pszAlg, char * pszUserName, char * pszRealm, char * pszPassword, char * pszNonce, char * pszCNonce, HASHHEX SessionKey) { HTDigestContext MdCtx; HASH HA1; HTDigest_init (&MdCtx, algorithm); HTDigest_update (&MdCtx, pszUserName, strlen(pszUserName)); HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, pszRealm, strlen(pszRealm)); HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, pszPassword, strlen(pszPassword)); HTDigest_final (HA1, &MdCtx); if (strcasecomp (pszAlg, "md5-sess") == 0) { HTDigest_init (&MdCtx, algorithm); HTDigest_update (&MdCtx, HA1, strlen (HA1)); HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, pszNonce, strlen(pszNonce)); HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, pszCNonce, strlen(pszCNonce)); HTDigest_final (HA1, &MdCtx); } CvtHex (HA1, SessionKey); } /* calculate request-digest/response-digest as per HTTP Digest spec */ PRIVATE void DigestCalcResponse ( int algorithm, /* message digest algorithm */ HASHHEX HA1, /* H(A1) */ char * pszNonce, /* nonce from server */ char * pszNonceCount, /* 8 hex digits */ char * pszCNonce, /* client nonce */ char * pszQop, /* qop-value: "", "auth", "auth-int" */ char * pszMethod, /* method from the request */ char * pszDigestUri, /* requested URL */ char * HEntity, /* H(entity body) if qop="auth-int" */ char * Response /* request-digest or response-digest */ ) { HTDigestContext MdCtx; HASH HA2; HASH RespHash; HASHHEX HA2Hex; /* calculate H(A2) */ HTDigest_init (&MdCtx, algorithm); HTDigest_update (&MdCtx, pszMethod, strlen(pszMethod)); HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, pszDigestUri, strlen(pszDigestUri)); if (pszQop && strcasecomp (pszQop, "auth-int") == 0) { HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, HEntity, HASHHEXLEN); } HTDigest_final (HA2, &MdCtx); CvtHex (HA2, HA2Hex); /* calculate response */ HTDigest_init (&MdCtx, algorithm); HTDigest_update (&MdCtx, HA1, HASHHEXLEN); HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, pszNonce, strlen(pszNonce)); HTDigest_update (&MdCtx, ":", 1); if (pszQop && *pszQop) { HTDigest_update (&MdCtx, pszNonceCount, strlen(pszNonceCount)); HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, pszCNonce, strlen(pszCNonce)); HTDigest_update (&MdCtx, ":", 1); HTDigest_update (&MdCtx, pszQop, strlen(pszQop)); HTDigest_update (&MdCtx, ":", 1); } HTDigest_update (&MdCtx, HA2Hex, HASHHEXLEN); HTDigest_final (RespHash, &MdCtx); CvtHex (RespHash, Response); } /* ** Code derived from draft-ietf-http-authentication-03 ends here */ /* ** Make digest authentication scheme credentials and register this ** information in the request object as credentials. They will then ** be included in the request header. An example is ** ** "Digest nonce:cnonce:blahblahblhah:digest-response" ** ** The function can both create normal and proxy credentials ** Returns HT_OK or HT_ERROR */ PRIVATE BOOL digest_credentials (HTRequest * request, HTDigest * digest) { if (request && digest && digest->realm) { char * realm = (char *) digest->realm; char * uri; char * method = (char *) HTMethod_name (HTRequest_method (request)); char * cleartext = NULL; char nc[9]; HASHHEX HA1; HASHHEX HA2; HASHHEX response; /* @@ maybe optimize all my reallocs by preallocating the memory */ if (digest->proxy) uri = HTRequest_proxy(request); else { char * tmp; /* we get the absolute URL */ tmp = HTAnchor_address( (HTAnchor*)HTRequest_anchor(request)); /* and then remove what makes it absolute, to be backwards compatible */ uri = HTParse (tmp, "", PARSE_PATH | PARSE_PUNCTUATION); HT_FREE(tmp); } /* increment the nonce counter */ digest->nc++; sprintf (nc, "%08lx", digest->nc); add_param (&cleartext, "username", digest->uid, YES); add_param (&cleartext, "realm", realm, YES); add_param (&cleartext, "nonce", digest->nonce, YES); add_param (&cleartext, "uri", uri, YES); /* @@@ no support for auth-int yet */ if (digest->qop) { add_param (&cleartext, "qop", "auth", NO); add_param (&cleartext, "nc", nc, NO); add_param (&cleartext, "cnonce", digest->cnonce, YES); } /* compute the response digest */ /* @@@ md5 hard coded, change it to something from the answer, md5-sess, etc */ DigestCalcHA1 (digest->algorithm, "md5", digest->uid, realm, digest->pw, digest->nonce, digest->cnonce, HA1); DigestCalcResponse (digest->algorithm, HA1, digest->nonce, nc, digest->cnonce, digest->qop, method, uri, HA2, response); add_param (&cleartext, "response", response, NO); add_param (&cleartext, "opaque", digest->opaque, NO); /* Create the credentials and assign them to the request object */ { int cr_len = strlen ("Digest") + strlen (cleartext) + 3; char * cookie = (char *) HT_MALLOC(cr_len+1); if (!cookie) HT_OUTOFMEM("digest_credentials"); strcpy(cookie, "Digest "); strcat (cookie, cleartext); HTTRACE(AUTH_TRACE, "Digest Cookie `%s\'\n" _ cookie); /* Check whether it is proxy or normal credentials */ if (digest->proxy) HTRequest_addCredentials(request, "Proxy-Authorization", cookie); else HTRequest_addCredentials(request, "Authorization", cookie); HT_FREE(cookie); } if (!digest->proxy) HT_FREE(uri); HT_FREE(cleartext); return HT_OK; } return HT_ERROR; } /* HTDigest_generate ** ---------------- ** This function generates "digest" credentials for the challenge found in ** the authentication information base for this request. The result is ** stored as an association list in the request object. ** This is a callback function for the AA handler. */ PUBLIC int HTDigest_generate (HTRequest * request, void * context, int mode) { HTDigest * digest = (HTDigest *) context; BOOL proxy = mode==HT_NO_PROXY_ACCESS ? YES : NO; if (request) { const char * realm = HTRequest_realm(request); /* ** If we were asked to explicitly ask the user again */ if (mode == HT_REAUTH || mode == HT_PROXY_REAUTH) digest->retry = YES; /* ** If we don't have a digest context then add a new one to the tree. ** We use different trees for normal and proxy authentication */ if (!digest) { digest = HTDigest_new(); if (proxy) { char * url = HTRequest_proxy(request); digest->proxy = YES; HTAA_updateNode(proxy, DIGEST_AUTH, realm, url, digest); } else { char * url = HTAnchor_address((HTAnchor*)HTRequest_anchor(request)); HTAA_updateNode(proxy, DIGEST_AUTH, realm, url, digest); HT_FREE(url); } } /* ** If we have a set of credentials (or the user provides a new set) ** then store it in the request object as the credentials */ if ((digest->retry && prompt_digest_user(request, realm, digest) == HT_OK) || (!digest->retry && digest->uid)) { /* @@@ here we should generate a new cnonce value */ HTSACopy (&(digest->cnonce), "012345678"); digest->retry = NO; return digest_credentials(request, digest); } else { char * url = HTAnchor_address((HTAnchor*)HTRequest_anchor(request)); if (proxy) HTAA_deleteNode(proxy, DIGEST_AUTH, realm, url); else HTAA_deleteNode(proxy, DIGEST_AUTH, realm, url); HT_FREE(url); return HT_ERROR; } } return HT_OK; } /* ** Evaluates the existing authentication info (nonce, uid, pwd) and ** returns TRUE if we evaluate that the nonce is stale, FALSE ** otherwise. */ PRIVATE BOOL nonce_is_stale (HTRequest *request, HTDigest * digest, char * old_nonce) { if (!digest->uid || !digest->pw) return FALSE; if (!digest->nonce || !old_nonce) return FALSE; if (strcmp (digest->nonce, old_nonce)) return TRUE; /* because of a pipelining implementation bug, we don't send any good credentials on requests following the first one in the pipeline */ if (!HTRequest_credentials (request) && HTRequest_AAretrys (request) == 1) return TRUE; return FALSE; } /* HTDigest_parse ** ------------- ** This function parses the contents of a "digest" challenge ** and stores the challenge in our authentication information datebase. ** We also store the realm in the request object which will help finding ** the right set of credentials to generate. ** The function is a callback function for the AA handler. */ PUBLIC int HTDigest_parse (HTRequest * request, HTResponse * response, void * context, int status) { HTAssocList * challenge = HTResponse_challenge(response); HTDigest * digest = NULL; BOOL proxy = status==HT_NO_PROXY_ACCESS ? YES : NO; if (request && challenge) { char * p = HTAssocList_findObject(challenge, DIGEST_AUTH); char * realm = HTNextField(&p); char * rm = HTNextField(&p); char * value = NULL; char * token = NULL; char * uris = NULL; /* the value of the previous nonce in case the server has changed its challenge */ char * old_nonce = NULL; /* ** If valid challenge then make a template for the resource and ** store this information in our authentication URL Tree */ if (realm && !strcasecomp(realm, "realm") && rm) { HTTRACE(AUTH_TRACE, "Digest Parse. Realm `%s\' found\n" _ rm); HTRequest_setRealm(request, rm); /* ** If we are in proxy mode then add the proxy - not the final URL */ if (proxy) { char * url = HTRequest_proxy(request); HTTRACE(AUTH_TRACE, "Digest Parse. Proxy authentication\n"); digest = (HTDigest *) HTAA_updateNode(proxy, DIGEST_AUTH, rm, url, NULL); /* if the previous authentication failed, then try again */ if (HTRequest_AAretrys (request) > 1 && status == HT_NO_ACCESS && digest) digest->retry = YES; } else { char * url = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); char * tmplate = make_template(url); digest = (HTDigest *) HTAA_updateNode(proxy, DIGEST_AUTH, rm, tmplate, NULL); /* if the previous authentication failed, then try again */ if (HTRequest_AAretrys (request) > 1 && status == HT_NO_ACCESS && digest) digest->retry = YES; HT_FREE(tmplate); HT_FREE(url); } } else { HTTRACE(AUTH_TRACE, "Digest Parse. Missing or incomplete realm\n"); return HT_ERROR; } /* if we get here it's because there's no digest */ /* we parse the digest parameters from the challenge */ if (digest) { /* it's an old digest, so we clean all in it except for the uid and the password, hoping that the server send back that data */ old_nonce = digest->nonce; digest->nonce = NULL; HTDigest_reset (digest); } else { /* it's a brand new digest */ digest = HTDigest_new(); StrAllocCopy (digest->realm, rm); } /* ** Search through the set of parameters in the digest header. ** If valid challenge then make a template for the resource and ** store this information in our authentication URL Tree */ while ((token = HTNextField(&p))) { if (!strcasecomp(token, "domain")) { if ((value = HTNextField(&p))) uris = value; } else if (!strcasecomp(token, "nonce")) { if ((value = HTNextField(&p))) StrAllocCopy(digest->nonce, value); } else if (!strcasecomp(token, "opaque")) { if ((value = HTNextField(&p))) StrAllocCopy(digest->opaque, value); } else if (!strcasecomp(token, "qop")) { /* split the qop */ if ((value = HTNextField(&p))) StrAllocCopy(digest->qop, value); } else if (!strcasecomp(token, "stale")) { if ((value = HTNextField(&p)) && !strcasecomp(value, "true")) { /* only true if we already had a digest with uid and pw info */ if (digest->uid && digest->pw) { digest->stale = YES; } } } else if (!strcasecomp(token, "algorithm")) { if ((value = HTNextField(&p)) && strcasecomp(value, "md5")) { /* ** We only support MD5 for the moment */ HTTRACE(AUTH_TRACE, "Digest Parse Unknown algorithm `%s\'\n" _ value); HTDigest_delete(digest); if (old_nonce) HT_FREE (old_nonce); return HT_ERROR; } else digest->algorithm = HTDaMD5; } } /* Pipelining support. If a nonce becomes stale When sending ** several requests thru the pipeline, we may miss the stale ** reply in the server's answer. To avoid this, we keep a copy ** of the nonce in each request. If the nonce wasn't explicitly ** marked stale and if it's the same that we sent, then we ** consider that the uid/pwd pairs were false. Otherwise, we ** assume the stole went stale before */ if (!digest->stale && nonce_is_stale (request, digest, old_nonce)) digest->stale = YES; if (old_nonce) HT_FREE (old_nonce); if (digest->stale) { digest->stale = NO; digest->retry = NO; return HT_OK; } else if (digest->uid || digest->pw) { /* ** For some reason there was no stale nonce header and the ** authentication failed so we have to ask the user if we should ** try again. It may be because the user typed the wrong user name ** and password */ HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM); /* ** Do we have a method registered for prompting the user whether ** we should retry */ if (prompt) { int code = proxy ? HT_MSG_RETRY_PROXY_AUTH : HT_MSG_RETRY_AUTHENTICATION; if ((*prompt)(request, HT_A_CONFIRM, code, NULL, NULL, NULL) != YES) return HT_ERROR; return HT_OK; } return HT_ERROR; } /* ** It's the first time we go this way, so we check the domain field to ** create the digest node entries for each URI. */ if (!uris) { if (proxy) { /* we ignore the domain */ char * location = HTRequest_proxy(request); HTTRACE(AUTH_TRACE, "Digest Parse Proxy authentication\n"); HTAA_updateNode(proxy, DIGEST_AUTH, rm, location, digest); } else { char * url = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); char * tmplate = make_template(url); HTAA_updateNode(proxy, DIGEST_AUTH, rm, tmplate, digest); HT_FREE(url); HT_FREE(tmplate); } } else { char * base_url = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); char * domain_url; char * full_url; while ((domain_url = HTNextField (&uris))) { /* complete the URL if it's an absolute one */ full_url = HTParse (domain_url, base_url, PARSE_ALL); digest->references++; if (proxy) { HTTRACE(AUTH_TRACE, "Digest Parse Proxy authentication\n"); HTAA_updateNode(proxy, DIGEST_AUTH, rm, full_url, digest); } else { char * tmplate = make_template(full_url); HTAA_updateNode (proxy, DIGEST_AUTH, rm, tmplate, digest); HT_FREE (tmplate); } HT_FREE (full_url); } HT_FREE (base_url); } return HT_OK; } HTTRACE(AUTH_TRACE, "Auth........ No challenges found\n"); return HT_ERROR; } libwww/Library/src/HTAABrow.html0100644000076400001440000000320306653551662016215 0ustar danielusers W3C Sample Code Library libwww Client Side Authentication Challenges and Credentials

    Client Side Authentication Challenges and Credentials

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    Contains code for parsing challenges and creating credentials for basic and digest authentication schemes. See also the HTAAUtil module for how to handle other authentication schemes. You don't have to use this code at all if you better like to use your own functions for parsing challenges and generating credentials. All functions are implemented as callback functions to the Authentication Manager

    This module is implemented by HTAABrow.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTAABROW_H
    #define HTAABROW_H
    #include "HTUTree.h"
    #include "HTNet.h"
    

    Basic Authentication

    This is the set of callback functions for handling basic authentication.

    extern HTNetBefore	HTBasic_generate;
    extern HTNetAfter 	HTBasic_parse;
    extern HTUTree_gc	HTBasic_delete;
    

    Digest Authentication

    This is the set of callback functions for handling digest authentication.

    extern HTNetBefore	HTDigest_generate;
    extern HTNetAfter 	HTDigest_parse;
    extern HTNetAfter       HTDigest_updateInfo;
    extern HTUTree_gc	HTDigest_delete;
    
    #endif	/* NOT HTAABROW_H */
    


    @(#) $Id: HTAABrow.html,v 2.31 2025/01/27 08:52:02 kahan Exp $
    libwww/Library/src/HTAAUtil.c0100644000076400001440000003651306664352702015505 0ustar danielusers/* ** COMMON PARTS OF ACCESS AUTHORIZATION MODULE ** FOR BOTH SERVER AND BROWSER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTAAUtil.c,v 2.35 2025/02/22 22:10:10 frystyk Exp $ ** ** The authentication information is stored in a list of authentication ** data bases, each uniquely identified by a hostname and a port number. ** Each data base contains a set of templates which can be used to predict ** what information to use in a hierarchical tree. All authentication ** dependent information is stored as opaque data in a anode. Normally ** a server application would only keep one auth base but if it wants ** different protection setup as a function of different interfaces then ** it can have one auth base representing each interface. For example a ** server with interfaces "www.foo.com" and "internal.foo.com" can have ** different protection setups for each interface. ** ** AUTHORS: ** AL Ari Luotonen luotonen@dxcern.cern.ch ** MD Mark Donszelmann duns@vxdeop.cern.ch ** HFN Henrik Frystyk ** JK Jose Kahan jose@w3.org ** ** HISTORY: ** 8 Nov 93 MD (VMS only) Added case insensitive comparison ** in HTAA_templateCaseMatch ** 26 Jan 98 JK Augmented the HTAA module interface with a function ** for processing the auth-info headers (update) */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTAAUtil.h" /* Implemented here */ #define AA_TREE "w3c-AA" /* Name of the AA tree */ #define AA_PROXY_TREE "w3c-proxy-AA" /* Name of the proxy AA tree */ #define DEFAULT_PORT 80 /* Concentrate on HTTP */ struct _HTAAModule { char * scheme; HTNetBefore * before; HTNetAfter * after; HTNetAfter * update; HTUTree_gc * gc; }; typedef struct _HTAAElement { char * scheme; void * context; } HTAAElement; PRIVATE HTList * HTSchemes; /* List of registered authentication schemes */ /* ------------------------------------------------------------------------- */ /* AUTHENTICATION MODULE MANAGEMENT */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL delete_module (HTAAModule * module) { if (module) { HT_FREE(module->scheme); HT_FREE(module); return YES; } return NO; } PRIVATE HTAAModule * find_module (const char * scheme) { if (!HTSchemes) HTSchemes = HTList_new(); if (scheme) { HTList * cur = HTSchemes; HTAAModule * pres = NULL; while ((pres = (HTAAModule *) HTList_nextObject(cur))) if (!strcasecomp(pres->scheme, scheme)) return pres; } else HTTRACE(AUTH_TRACE, "Auth Engine. Bad argument\n"); return NULL; } PUBLIC HTAAModule * HTAA_newModule (const char * scheme, HTNetBefore * before, HTNetAfter * after, HTNetAfter * update, HTUTree_gc * gc) { if (scheme) { HTAAModule * pres = find_module(scheme); /* If found then update entry - else create a new one */ if (!pres) { if (!(pres = (HTAAModule *) HT_CALLOC(1, sizeof(HTAAModule)))) HT_OUTOFMEM("HTAA_newModule"); StrAllocCopy(pres->scheme, scheme); pres->before = before; pres->after = after; pres->update = update; pres->gc = gc; /* Add the new AA Module to the list */ HTList_addObject(HTSchemes, (void *) pres); HTTRACE(AUTH_TRACE, "Auth Engine. Created module %p\n" _ pres); } else { HTTRACE(AUTH_TRACE, "Auth Engine. Found module %p\n" _ pres); } return pres; } else { HTTRACE(AUTH_TRACE, "Auth Engine. Bad argument\n"); return NULL; } } PUBLIC HTAAModule * HTAA_findModule (const char * scheme) { if (scheme) { HTAAModule * pres = find_module(scheme); HTTRACE(AUTH_TRACE, "Auth Engine. did %sfind %s\n" _ pres ? "" : "NOT " _ scheme); return pres; } else { HTTRACE(AUTH_TRACE, "Auth Engine. Bad augument\n"); } return NULL; } PUBLIC BOOL HTAA_deleteModule (const char * scheme) { if (scheme) { HTAAModule * pres = find_module(scheme); if (pres) { HTList_removeObject(HTSchemes, pres); HTTRACE(AUTH_TRACE, "Auth Engine. deleted %p\n" _ pres); delete_module(pres); return YES; } } return NO; } PUBLIC BOOL HTAA_deleteAllModules (void) { if (HTSchemes) { HTList * cur = HTSchemes; HTAAModule * pres; while ((pres = (HTAAModule *) HTList_nextObject(cur))) delete_module(pres); HTList_delete(HTSchemes); HTSchemes = NULL; return YES; } return NO; } /* ------------------------------------------------------------------------- */ /* HANDLE THE AA URL TREE */ /* ------------------------------------------------------------------------- */ /* ** A AA element is a particular AA procotol associated with a ** particular point in the URL tree. The scheme is the name of the ** AA protocol known to be able to handle this context. This protocol ** must have been registered as a AA module. */ PRIVATE HTAAElement * HTAA_newElement (const char * scheme, void * context) { if (scheme) { HTAAElement * me; if ((me = (HTAAElement *) HT_CALLOC(1, sizeof(HTAAElement))) == NULL) HT_OUTOFMEM("HTAAElement_new"); StrAllocCopy(me->scheme, scheme); me->context = context; HTTRACE(AUTH_TRACE, "Auth Engine. Created element %p\n" _ me); return me; } return NULL; } /* ** If the new context differs from the existing one then use the ** new one, otherwise only override the old context if new ** one differs from NULL */ PRIVATE BOOL HTAA_updateElement (HTAAElement * element, const char * scheme, void * context) { if (element && scheme) { /* ** If the old context differs from the new one then ** call the gc provided by the caller */ if (context && context != element->context) { HTAAModule * module = HTAA_findModule(element->scheme); if (module && module->gc && element->context) (*module->gc)(element->context); /* ** Insert the new scheme */ StrAllocCopy(element->scheme, scheme); element->context = context; } return YES; } return NO; } PRIVATE int HTAA_deleteElement (void * context) { HTAAElement * me = (HTAAElement *) context; if (me) { HTAAModule * module = HTAA_findModule(me->scheme); /* If module then call the gc of the Authentication Module */ if (module && module->gc && me->context) (*module->gc)(me->context); HTTRACE(AUTH_TRACE, "Auth Engine. Deleted element %p\n" _ me); HT_FREE(me->scheme); HT_FREE(me); return YES; } return NO; } /* ** Find AA Element ** --------------- ** Seaches the set of authentication information bases for a match ** In order to find an anode we do the following: ** ** 1) Find the right auth base ** 2) See if there is a realm match ** 3) See if there is a template match for URL ** ** Return the node found else NULL which means that we don't have any ** authentication information to hook on to this request or response */ PRIVATE HTAAElement * HTAA_findElement (BOOL proxy_access, const char * realm, const char * url) { HTUTree * tree; if (!url) { HTTRACE(AUTH_TRACE, "Auth Engine. Bad argument\n"); return NULL; } HTTRACE(AUTH_TRACE, "Auth Engine. Looking up `%s'\n" _ url); /* Find an existing URL Tree for this URL (if any) */ { char * host = HTParse(url, "", PARSE_HOST); char * colon = strchr(host, ':'); int port = DEFAULT_PORT; if (colon ) { *(colon++) = '\0'; /* Chop off port number */ port = atoi(colon); } tree = HTUTree_find(proxy_access ? AA_PROXY_TREE : AA_TREE, host,port); HT_FREE(host); if (!tree) { HTTRACE(AUTH_TRACE, "Auth Engine. No information\n"); return NULL; } } /* Find a matching AA element (if any) */ { char * path = HTParse(url, "", PARSE_PATH | PARSE_PUNCTUATION); HTAAElement *element = (HTAAElement*)HTUTree_findNode(tree,realm,path); HT_FREE(path); return element; } return NULL; } /* Add a AA context to the URL tree ** -------------------------------- ** Each node in the AA URL tree is a list of the modules we must call ** for this particular node. */ PUBLIC void * HTAA_updateNode (BOOL proxy_access, char const * scheme, const char * realm, const char * url, void * context) { HTUTree * tree = NULL; HTAAModule * module = NULL; if (!scheme || !url) { HTTRACE(AUTH_TRACE, "Auth Engine. Bad argument\n"); return NULL; } HTTRACE(AUTH_TRACE, "Auth Engine. Adding info for `%s'\n" _ url); /* Find the AA module with this name */ if ((module = HTAA_findModule(scheme)) == NULL) { HTTRACE(AUTH_TRACE, "Auth Engine. Module `%s\' not registered\n" _ scheme ? scheme : ""); return NULL; } /* Find an existing URL Tree or create a new one */ { char * host = HTParse(url, "", PARSE_HOST); char * colon = strchr(host, ':'); int port = DEFAULT_PORT; if (colon ) { *(colon++) = '\0'; /* Chop off port number */ port = atoi(colon); } tree = HTUTree_new(proxy_access ? AA_PROXY_TREE : AA_TREE, host, port, HTAA_deleteElement); HT_FREE(host); if (!tree) { HTTRACE(AUTH_TRACE, "Auth Engine. Can't create tree\n"); return NULL; } } /* Find a matching AA element or create a new one */ { char * path = HTParse(url, "", PARSE_PATH | PARSE_PUNCTUATION); HTAAElement * element = NULL; BOOL status; if ((element = (HTAAElement *) HTUTree_findNode(tree, realm, path)) && element->scheme && !strcasecomp (element->scheme, scheme)) status = HTAA_updateElement(element, scheme, context); else { /* create the new element */ element = HTAA_newElement(scheme, context); status = HTUTree_addNode(tree, realm, path, element); } HT_FREE(path); return status==YES ? element->context : NULL; } } /* Delete a AA context from the URL tree ** ------------------------------------- ** Each node in the AA URL tree is a list of the modules we must call ** for this particular node. */ PUBLIC BOOL HTAA_deleteNode (BOOL proxy_access, char const * scheme, const char * realm, const char * url) { HTUTree * tree = NULL; HTAAModule * module = NULL; if (!scheme || !url) { HTTRACE(AUTH_TRACE, "Auth Engine. Bad argument\n"); return NO; } HTTRACE(AUTH_TRACE, "Auth Engine. Deleting info for `%s'\n" _ url); /* Find the AA module with this name */ if ((module = HTAA_findModule(scheme)) == NULL) { HTTRACE(AUTH_TRACE, "Auth Engine. Module `%s\' not registered\n" _ scheme ? scheme : ""); return NO; } /* Find an existing URL Tree or create a new one */ { char * host = HTParse(url, "", PARSE_HOST); char * colon = strchr(host, ':'); int port = DEFAULT_PORT; if (colon ) { *(colon++) = '\0'; /* Chop off port number */ port = atoi(colon); } tree = HTUTree_new(proxy_access ? AA_PROXY_TREE : AA_TREE, host, port, HTAA_deleteElement); HT_FREE(host); if (!tree) { HTTRACE(AUTH_TRACE, "Auth Engine. Can't create tree\n"); return NO; } } /* Delete any existing node */ { char * path = HTParse(url, "", PARSE_PATH | PARSE_PUNCTUATION); BOOL status = HTUTree_deleteNode(tree, realm, path); HT_FREE(path); return status; } } /* ------------------------------------------------------------------------- */ /* AUTHENTICATION ENGINE */ /* ------------------------------------------------------------------------- */ /* HTAA_beforeFilter ** ------------------ ** Make a lookup in the URL tree to find any context for this node, ** If no context is found then we assume that we don't know anything about ** this URL and hence we don't call any BEFORE filters at all. ** Return HT_OK or whatever callback returns */ PUBLIC int HTAA_beforeFilter (HTRequest * request, void * param, int mode) { char * url = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); const char * realm = HTRequest_realm(request); HTAAElement * element = HTAA_findElement(NO, realm, url); HT_FREE(url); /* If we have an element then call the before filter with this scheme */ if (element) { HTAAModule * module = HTAA_findModule(element->scheme); if (module) { HTTRACE(AUTH_TRACE, "Auth Engine. Found BEFORE filter %p\n" _ module->before); return (*module->before)(request, element->context, mode); } } return HT_OK; } /* HTAA_afterFilter ** ----------------- ** Call the AFTER filter that knows how to handle this scheme. ** Return YES or whatever callback returns */ PUBLIC int HTAA_afterFilter (HTRequest * request, HTResponse * response, void * param, int status) { const char * scheme = HTResponse_scheme(response); HTAAModule * module = NULL; HTTRACE(AUTH_TRACE, "Auth Engine. After filter status %d\n" _ status); /* ** If we don't have a scheme then the server has made an error. We ** try to make up for it by creating our own "noop" realm and use basic. */ if (!scheme) { HTResponse_addChallenge(response, "basic", "realm LIBWWW-UNKNOWN"); scheme = "basic"; } if ((module = HTAA_findModule(scheme)) != NULL) { HTTRACE(AUTH_TRACE, "Auth Engine. Found AFTER filter %p\n" _ module->after); HTRequest_deleteCredentialsAll(request); HTRequest_addAARetry (request); return (*module->after)(request, response, NULL, status); } return HT_ERROR; } /* HTAA_UpdateFilter ** ----------------- ** Call the Update filter that knows how to handle this scheme. ** Return YES or whatever callback returns */ PUBLIC int HTAA_updateFilter (HTRequest * request, HTResponse * response, void * param, int status) { const char * scheme = HTResponse_scheme(response); HTAAModule * module = NULL; HTTRACE(AUTH_TRACE, "Auth Engine. Update filter status %d\n" _ status); /* ** If we don't have a scheme then the server has made an error. We ** try to make up for it by creating our own "noop" realm and use basic. */ if (!scheme) { HTResponse_addChallenge(response, "basic", "realm LIBWWW-UNKNOWN"); scheme = "basic"; } if ((module = HTAA_findModule(scheme)) != NULL) { /* we don't call this module systematically, as it could hamper the execution of Basic authentication requests for nothing */ if (module->update) { HTTRACE(AUTH_TRACE, "Auth Engine. Found Update filter %p\n" _ module->update); HTRequest_deleteCredentialsAll(request); return (*module->update)(request, response, NULL, status); } return HT_OK; } return HT_ERROR; } /* HTAA_proxybeforeFilter ** ---------------------- ** Make a lookup in the proxy URL tree to find any context for this node, ** If no context is found then we assume that we don't know anything about ** this URL and hence we don't call any BEFORE filters at all. ** Return HT_OK or whatever callback returns */ PUBLIC int HTAA_proxyBeforeFilter (HTRequest * request, void * param, int mode) { char * url = HTRequest_proxy(request); /* ** We may not have a proxy - for example if it has been disabled for this ** request or it isn't a proxied access method. */ if (url) { const char * realm = HTRequest_realm(request); HTAAElement * element = HTAA_findElement(YES, realm, url); /* If we have an element then call the before filter with the scheme */ if (element) { HTAAModule * module = HTAA_findModule(element->scheme); if (module) { HTTRACE(AUTH_TRACE, "Auth Engine. Found Proxy BEFORE filter %p with context %p\n" _ module->before _ element->context); return (*module->before)(request, element->context, HT_NO_PROXY_ACCESS); } } } return HT_OK; } libwww/Library/src/HTAAUtil.html0100644000076400001440000001762706653551662016240 0ustar danielusers W3C Sample Code Library libwww Access Authentication

    Access Authentication Manager

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The Authentication Manager is a registry for Authentication Schemes that follow the generic syntax defined by the HTTP WWW-authenticate and Authorization headers. Currently, the only scheme defined is Basic Authentication, but Digest Authentication will soon follow. All Authentication Schemes are registered at run-time in form of an Authentication Module. An Authentication Module consists of the following:

    scheme
    The name which is used to identify the scheme. This is equivalent to the <scheme> part of the WWW-authenticate HTTP header, for example "basic"
    BEFORE Filter
    When a new request is issued, the Authentication Manager looks in the URL tree to see if we have any access authentication information for this particular request. The search is based on the realm (if known) in which the request belongs and the URL itself. If a record is found then the Authentication Manager calls the Authentication Module in order to generate the credentials.
    AFTER Filter
    After a request has terminated and the result was lack of credentials, the request should normally be repeated with a new set of credentials. The AFTER filter is responsible for extracting the challenge from the HTTP response and store it in the URL tree, so that we next time we request the same URL we know that it is protected and we can ask the user for the appropriate credentials (user name and password, for example).
    garbage collection
    The authentication information is stored in a URL Tree but as it doesn't know the format of the scheme specific parts, you must register a garbage collector (gc). The gc is called when node is deleted in the tree.

    Note: The Authentication Manager itself consists of BEFORE and an AFTER filter - just like the Authentication Modules. This means that any Authentication Module also can be registered directly as a BEFORE and AFTER filter by the Net Manager. The reason for having the two layer model is that the Authentication Manager maintains a single URL tree for storing access information for all Authentication Schemes.

    An Authentication Module has three resources, it can use when creating challenges or credentials:

    • Handle the credentials which is a part of the Request obejct. The credentials are often generated by asking the user for a user name ansd a password.
    • Handle the challenges which is a part of the Request object. The MIME parser will normally find the credentials as we parse the HTTP response.
    • Add information to the URL Tree

    This module is implemented by HTAAUtil.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTAAUTIL_H
    #define HTAAUTIL_H
    #include "HTReq.h"
    #include "HTNet.h"
    #include "HTUTree.h"
    

    Authentication Scheme Registration

    An Authentication Scheme is registered by registering an Authentication Module to in the Authentication Manager.

    Add an Authentication Module

    You can add an authentication scheme by using the following method. Each of the callback function must have the type as defined below.

    typedef struct _HTAAModule HTAAModule;
    extern HTAAModule * HTAA_newModule (const char *		scheme,
    				    HTNetBefore *		before,
    				    HTNetAfter *		after,
    				    HTNetAfter *                update,
    				    HTUTree_gc *		gc);
    

    Find an Authentication Module

    extern HTAAModule * HTAA_findModule (const char * scheme);
    

    Delete an Authentication Module

    extern BOOL HTAA_deleteModule (const char * scheme);
    

    Delete ALL Authentication modules

    extern BOOL HTAA_deleteAllModules (void);
    

    Handling the URL Tree

    The authentication information is stored as URL Trees.  The root of a URL Tree is identified by a hostname and a port number. Each URL Tree contains a set of templates and realms which can be used to predict what information to use in a hierarchical tree.

    The URL trees are automatically collected after some time so the application does not have to worry about freeing the trees. When a node in a tree is freed, the gc registered as part of the Authentication Module is called.

    Server applications can have different authentication setups for each hostname and port number, they control. For example, a server with interfaces "www.foo.com" and "internal.foo.com" can have different protection setups for each interface.

    Add new or Update a Note in the UTree

    Add an access authentication information node to the database or update an existing one. If the entry is already found then it is replaced with the new one. The template must follow normal URI syntax but can include a wildcard Return YES if added (or replaced), else NO

    extern void * HTAA_updateNode (BOOL proxy,
                                   char const * scheme,
    			       const char * realm, const char * url,
    			       void * context);
    

    Delete a Node from the UTree

    This is called if an already entered node has to be deleted, for example if it is not used (the user cancelled entering a username and password), or for some reason has expired.

    extern BOOL HTAA_deleteNode (BOOL proxy_access, char const * scheme,
                                 const char * realm, const char * url);
    

    The Authentication Manager Filters

    As mentioned, the Access Authentication Manager is itself a set of filters that can be registered by the Net manager.

    Before Filter

    Make a lookup in the URL tree to find any context for this node, If no context is found then we assume that we don't know anything about this URL and hence we don't call any BEFORE filters at all.

    HTNetBefore HTAA_beforeFilter;
    

    After Filter

    Call the AFTER filter that knows how to handle this scheme.

    HTNetAfter HTAA_afterFilter;
    

    Update Filter

    Call the UPDATE filter that knows how to handle this scheme.

    HTNetAfter HTAA_updateFilter;
    

    Proxy Authentication Filter

    Just as for normal authentication we have a filter for proxy authentication. The proxy authentication uses exactly the same code as normal authentication but it stores the information in a separate proxy authentication URL tree. That way, we don't get any clashes between a server acting as a proxy and a normal server at the same time on the same port. The difference is that we only have a ingoing filter (a before filter) as the out going filter is identical to the normal authentication filter. The filter requires to be called after a proxy filter as we otherwise don't know whether we are using a proxy or not.

    HTNetBefore HTAA_proxyBeforeFilter;
    
    #endif	/* NOT HTAAUTIL_H */
    


    @(#) $Id: HTAAUtil.html,v 2.38 2025/01/27 08:52:02 kahan Exp $
    libwww/Library/src/HTANSI.c0100644000076400001440000001576006664352702015121 0ustar danielusers/* HTANSI.c ** ANSI C FILE DESCRIPTOR TRANSPORT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTANSI.c,v 2.8 2025/02/22 22:10:10 frystyk Exp $ ** ** History: ** HFN: writtem */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTNetMan.h" #include "HTANSI.h" /* Implemented here */ #include "HTHstMan.h" /* @@@ FIX ME @@@ */ struct _HTStream { const HTStreamClass * isa; /* ... */ }; struct _HTInputStream { const HTInputStreamClass * isa; HTChannel * ch; HTHost * host; char * write; /* Last byte written */ char * read; /* Last byte read */ int b_read; char data [FILE_BUFFER_SIZE]; }; struct _HTOutputStream { const HTOutputStreamClass * isa; HTChannel * ch; HTHost * host; FILE * fp; }; /* ------------------------------------------------------------------------- */ /* READ STREAM */ /* ------------------------------------------------------------------------- */ PRIVATE int HTANSIReader_flush (HTInputStream * me) { HTNet * net = HTHost_getReadNet(me->host); return net && net->readStream ? (*net->readStream->isa->flush)(net->readStream) : HT_OK; } PRIVATE int HTANSIReader_free (HTInputStream * me) { HTNet * net = HTHost_getReadNet(me->host); if (net && net->readStream) { int status = (*net->readStream->isa->_free)(net->readStream); if (status == HT_OK) net->readStream = NULL; return status; } return HT_OK; } PRIVATE int HTANSIReader_abort (HTInputStream * me, HTList * e) { HTNet * net = HTHost_getReadNet(me->host); if (net && net->readStream) { int status = (*net->readStream->isa->abort)(net->readStream, NULL); if (status != HT_IGNORE) net->readStream = NULL; } return HT_ERROR; } PRIVATE int HTANSIReader_read (HTInputStream * me) { FILE * fp = HTChannel_file(me->ch); HTNet * net = HTHost_getReadNet(me->host); int status; /* Read the file desriptor */ while (fp) { if ((me->b_read = fread(me->data, 1, FILE_BUFFER_SIZE, fp)) == 0){ if (ferror(fp)) { HTTRACE(PROT_TRACE, "ANSI read... READ ERROR\n"); } else { HTAlertCallback *cbf = HTAlert_find(HT_PROG_DONE); HTTRACE(PROT_TRACE, "ANSI read... Finished loading file %p\n" _ fp); if (cbf) (*cbf)(net->request, HT_PROG_DONE, HT_MSG_NULL,NULL,NULL,NULL); return HT_CLOSED; } } /* Remember how much we have read from the input socket */ HTTRACEDATA(me->data, me->b_read, "HTANSIReader_read me->data:"); me->write = me->data; me->read = me->data + me->b_read; { HTAlertCallback * cbf = HTAlert_find(HT_PROG_READ); HTNet_addBytesRead(net, me->b_read); if (cbf) { int tr = HTNet_bytesRead(net); (*cbf)(net->request, HT_PROG_READ, HT_MSG_NULL, NULL, &tr, NULL); } } /* Now push the data down the stream */ if ((status = (*net->readStream->isa->put_block) (net->readStream, me->data, me->b_read)) != HT_OK) { if (status == HT_WOULD_BLOCK) { HTTRACE(PROT_TRACE, "ANSI read... Target WOULD BLOCK\n"); return HT_WOULD_BLOCK; } else if (status == HT_PAUSE) { HTTRACE(PROT_TRACE, "ANSI read... Target PAUSED\n"); return HT_PAUSE; } else if (status > 0) { /* Stream specific return code */ HTTRACE(PROT_TRACE, "ANSI read... Target returns %d\n" _ status); me->write = me->data + me->b_read; return status; } else { /* We have a real error */ HTTRACE(PROT_TRACE, "ANSI read... Target ERROR\n"); return status; } } me->write = me->data + me->b_read; } HTTRACE(PROT_TRACE, "ANSI read... File descriptor is NULL...\n"); return HT_ERROR; } /* ** The difference between the close and the free method is that we don't ** close the connection in the free method - we only call the free method ** of the target stream. That way, we can keep the output stream as long ** as the channel itself. */ PRIVATE int HTANSIReader_close (HTInputStream * me) { HTTRACE(PROT_TRACE, "ANSI read... FREEING...\n"); HT_FREE(me); return HT_OK; } PRIVATE int HTANSIReader_consumed (HTInputStream * me, size_t bytes) { HTTRACE(PROT_TRACE, "ANSI read... consumed %d bytes\n" _ bytes); return HT_OK; } PRIVATE const HTInputStreamClass HTANSIReader = { "ANSIReader", HTANSIReader_flush, HTANSIReader_free, HTANSIReader_abort, HTANSIReader_read, HTANSIReader_close, HTANSIReader_consumed }; PUBLIC HTInputStream * HTANSIReader_new (HTHost * host, HTChannel * ch, void * param, int mode) { if (host && ch) { HTInputStream * me = HTChannel_input(ch); if (me == NULL) { if ((me=(HTInputStream *) HT_CALLOC(1, sizeof(HTInputStream))) == NULL) HT_OUTOFMEM("HTANSIReader_new"); me->isa = &HTANSIReader; me->ch = ch; } me->host = host; return me; } return NULL; } /* ------------------------------------------------------------------------- */ /* WRITE STREAM */ /* ------------------------------------------------------------------------- */ PRIVATE int HTANSIWriter_flush (HTOutputStream * me) { return (fflush(me->fp) == EOF) ? HT_ERROR : HT_OK; } PRIVATE int HTANSIWriter_free (HTOutputStream * me) { return HT_OK; } PRIVATE int HTANSIWriter_abort (HTOutputStream * me, HTList * e) { HTTRACE(PROT_TRACE, "ANSI write.. ABORTING...\n"); return HT_ERROR; } PRIVATE int HTANSIWriter_character (HTOutputStream * me, char c) { return (fputc(c, me->fp) == EOF) ? HT_ERROR : HT_OK; } PRIVATE int HTANSIWriter_string (HTOutputStream * me, const char* s) { if (*s) /* For vms :-( 10/04-94 */ return (fputs(s, me->fp) == EOF) ? HT_ERROR : HT_OK; return HT_OK; } PRIVATE int HTANSIWriter_block (HTOutputStream * me, const char* s, int l) { int status ; status = (fwrite(s, 1, l, me->fp) != l) ? HT_ERROR : HT_OK ; if (l > 1 && status == HT_OK) (void) HTANSIWriter_flush(me); return status; } /* ** The difference between the close and the free method is that we don't ** close the connection in the free method - we only call the free method ** of the target stream. That way, we can keep the output stream as long ** as the channel itself. */ PRIVATE int HTANSIWriter_close (HTOutputStream * me) { HTTRACE(PROT_TRACE, "ANSI write.. FREEING...\n"); HT_FREE(me); return HT_OK; } PRIVATE const HTOutputStreamClass HTANSIWriter = { "ANSIWriter", HTANSIWriter_flush, HTANSIWriter_free, HTANSIWriter_abort, HTANSIWriter_character, HTANSIWriter_string, HTANSIWriter_block, HTANSIWriter_close, }; PUBLIC HTOutputStream * HTANSIWriter_new (HTHost * host, HTChannel * ch, void * param, int mode) { if (host && ch) { HTOutputStream * me = HTChannel_output(ch); if (me == NULL) { if ((me=(HTOutputStream *) HT_CALLOC(1, sizeof(HTOutputStream)))==NULL) HT_OUTOFMEM("HTANSIWriter_new"); me->isa = &HTANSIWriter; me->ch = ch; me->host = host; me->fp = HTChannel_file(ch); } return me; } return NULL; } libwww/Library/src/HTANSI.html0100644000076400001440000000304006526451202015617 0ustar danielusers W3C Sample Code Library ANSI Read and Write Streams

    ANSI Read and Write Streams

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The ANSI Reader Stream and the ANSI Writer Stream are output streams which knows how to read and write to an ANSI C type FILE descriptor. Both streams are part of the Transport interface and may be registered as part of a Transport Object. In the default initialization interface, you can find the HTTransportInit() function which sets up the streams for handling local file access on some platforms.

    This module is implemented by HTANSI.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTANSI_H
    #define HTANSI_H
    #include "HTIOStream.h"
    

    Input Buffering

    In order to optimize reading a channel, we bind a buffer to each channel object. The size of this buffer is a compromise between speed and memory.

    #define FILE_BUFFER_SIZE	65536
    

    Read Stream

    extern HTInput_new HTANSIReader_new;
    

    Write Stream

    extern HTOutput_new HTANSIWriter_new;
    
    #endif
    

    End of declaration module libwww/Library/src/HTAccess.c0100644000076400001440000016354207153724000015556 0ustar danielusers/* ** ACCESS MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTAccess.c,v 1.159 2025/09/01 12:58:40 kahan Exp $ ** ** Authors ** TBL Tim Berners-Lee timbl@w3.org ** JFG Jean-Francois Groff jfg@dxcern.cern.ch ** DD Denis DeLaRoca (310) 825-4580 ** HFN Henrik Frystyk, frystyk@w3.org ** JK Jose Kahan, kahan@w3.org ** History ** 8 Jun 92 Telnet hopping prohibited as telnet is not secure TBL ** 26 Jun 92 When over DECnet, suppressed FTP, Gopher and News. JFG ** 6 Oct 92 Moved HTClientHost and HTlogfile into here. TBL ** 17 Dec 92 Tn3270 added, bug fix. DD ** 4 Feb 93 Access registration, Search escapes bad chars TBL ** PARAMETERS TO HTSEARCH AND HTLOADRELATIVE CHANGED ** 28 May 93 WAIS gateway explicit if no WAIS library linked in. ** Dec 93 Bug change around, more reentrant, etc ** 09 May 94 logfile renamed to HTlogfile to avoid clash with WAIS ** 8 Jul 94 Insulate HT_FREE(); ** Sep 95 Rewritten, HFN ** 21 Jun 00 Added a Cache-Control: no-cache when doing PUT, as some ** proxies do cache PUT requests, JK */ /* Library include files */ #include "WWWUtil.h" #include "WWWCore.h" #include "WWWStream.h" #include "HTProxy.h" #include "HTRules.h" #include "HTReqMan.h" #include "HTAccess.h" /* Implemented here */ #define PUTBLOCK(b, l) (*target->isa->put_block)(target, b, l) struct _HTStream { HTStreamClass * isa; }; typedef enum _HTPutState { HT_LOAD_SOURCE = 0, HT_SAVE_DEST, HT_ABORT_SAVE } HTPutState; typedef struct _HTPutContext { HTParentAnchor * source; HTAnchor * destination; HTChunk * document; HTFormat format; HTStream * target; /* Any existing output stream */ void * placeholder; /* Any existing doc in anchor */ HTPutState state; } HTPutContext; /* --------------------------------------------------------------------------*/ /* THE GET METHOD */ /* --------------------------------------------------------------------------*/ /* Request a document ** ----------------- ** Private version that requests a document from the request manager ** Returns YES if request accepted, else NO */ PRIVATE BOOL launch_request (HTRequest * request, BOOL recursive) { #ifdef HTDEBUG if (PROT_TRACE) { HTParentAnchor *anchor = HTRequest_anchor(request); char * full_address = HTAnchor_address((HTAnchor *) anchor); HTTRACE(PROT_TRACE, "HTAccess.... Accessing document %s\n" _ full_address); HT_FREE(full_address); } #endif /* HTDEBUG */ return HTLoad(request, recursive); } /* Request a document from absolute name ** ------------------------------------- ** Request a document referencd by an absolute URL. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTLoadAbsolute (const char * url, HTRequest * request) { if (url && request) { HTAnchor * anchor = HTAnchor_findAddress(url); HTRequest_setAnchor(request, anchor); return launch_request(request, NO); } return NO; } /* Request a document from relative name ** ------------------------------------- ** Request a document referenced by a relative URL. The relative URL is ** made absolute by resolving it relative to the address of the 'base' ** anchor. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTLoadRelative (const char * relative, HTParentAnchor * base, HTRequest * request) { BOOL status = NO; if (relative && base && request) { char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) base); full_url = HTParse(relative, base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTLoadAbsolute(full_url, request); HT_FREE(full_url); HT_FREE(base_url); } return status; } /* Request a document from absolute name to stream ** ----------------------------------------------- ** Request a document referencd by an absolute URL and sending the data ** down a stream. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTLoadToStream (const char * url, HTStream * output, HTRequest * request) { if (url && output && request) { HTRequest_setOutputStream(request, output); return HTLoadAbsolute(url, request); } return NO; } /* Load a document and save it ASIS in a local file ** ------------------------------------------------ ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTLoadToFile (const char * url, HTRequest * request, const char * filename) { if (url && filename && request) { FILE * fp = NULL; /* Check if file exists. If so then ask user if we can replace it */ if (access(filename, F_OK) != -1) { HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM); if (prompt) { if ((*prompt)(request, HT_A_CONFIRM, HT_MSG_FILE_REPLACE, NULL, NULL, NULL) != YES) return NO; } } /* If replace then open the file */ if ((fp = fopen(filename, "wb")) == NULL) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_NO_FILE, (char *) filename, strlen(filename), "HTLoadToFile"); return NO; } /* Set the output stream and start the request */ HTRequest_setOutputFormat(request, WWW_SOURCE); HTRequest_setOutputStream(request, HTFWriter_new(request, fp, NO)); if (HTLoadAbsolute(url, request) == NO) { fclose(fp); return NO; } else return YES; } return NO; } /* ** Load a URL to a mem buffer ** -------------------------- ** Load a request and store the result in a memory buffer. ** Returns chunk if OK - else NULL */ PUBLIC HTChunk * HTLoadToChunk (const char * url, HTRequest * request) { if (url && request) { HTChunk * chunk = NULL; HTStream * target = HTStreamToChunk(request, &chunk, 0); HTAnchor * anchor = HTAnchor_findAddress(url); HTRequest_setAnchor(request, anchor); HTRequest_setOutputStream(request, target); if (launch_request(request, NO) == YES) return chunk; else { HTChunk_delete(chunk); return NULL; } } return NULL; } /* Request an anchor ** ----------------- ** Request the document referenced by the anchor ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTLoadAnchor (HTAnchor * anchor, HTRequest * request) { if (anchor && request) { HTRequest_setAnchor(request, anchor); return launch_request(request, NO); } return NO; } /* Request an anchor ** ----------------- ** Same as HTLoadAnchor but any information in the Error Stack in the ** request object is kept, so that any error messages in one ** This function is almost identical to HTLoadAnchor, but it doesn't ** clear the error stack so that the information in there is kept. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTLoadAnchorRecursive (HTAnchor * anchor, HTRequest * request) { if (anchor && request) { HTRequest_setAnchor(request, anchor); return launch_request(request, YES); } return NO; } /* ** Load a URL to a mem buffer ** -------------------------- ** Load a request and store the result in a memory buffer. ** Returns chunk if OK - else NULL */ PUBLIC HTChunk * HTLoadAnchorToChunk (HTAnchor * anchor, HTRequest * request) { HTChunk * chunk = NULL; if (anchor && request) { HTStream * target = HTStreamToChunk(request, &chunk, 0); HTRequest_setAnchor(request, anchor); HTRequest_setOutputStream(request, target); if (launch_request(request, NO) == YES) return chunk; else { HTChunk_delete(chunk); return NULL; } } return NULL; } /* ** Load a Rule File ** ---------------- ** Load a rule find with the URL specified and add the set of rules to ** the existing set. */ PUBLIC BOOL HTLoadRules (const char * url) { BOOL status = NO; if (url) { HTList * list = HTList_new(); HTRequest * request = HTRequest_new(); HTRequest_setPreemptive(request, YES); /* ** We do only accept a new rules files when we are in interactive ** mode and can ask the user for it. If HT_AUTOMATIC_RULES is ** defined then we accept new rules files without explicit ack ** from the user */ #ifdef HT_AUTOMATIC_RULES HTAlert_setInteractive(NO); #endif /* ** Add the rules parsing stream for this particular request only. ** That is, we only accept a rules file when we have explicitly ** asked for it using this function. */ HTConversion_add(list, "application/x-www-rules", "*/*", HTRules, 1.0, 0.0, 0.0); HTRequest_setConversion(request, list, YES); status = HTLoadAbsolute(url, request); HTConversion_deleteAll(list); HTRequest_delete(request); } return status; } /* ** Load a Rule File without asking the user ** ---------------------------------------- ** Load a rule find with the URL specified and add the set of rules to ** the existing set. We don't ask the user as she would have to call this ** method explicitly anyway. */ PUBLIC BOOL HTLoadRulesAutomatically (const char * url) { BOOL status = NO; if (url) { HTList * list = HTList_new(); HTRequest * request = HTRequest_new(); /* ** Stop all other loads and concentrate on this one */ HTRequest_setPreemptive(request, YES); /* ** Add the rules parsing stream for this particular request only. */ HTConversion_add(list, "application/x-www-rules", "*/*", HTRules_parseAutomatically, 1.0, 0.0, 0.0); HTRequest_setConversion(request, list, YES); status = HTLoadAbsolute(url, request); HTConversion_deleteAll(list); HTRequest_delete(request); } return status; } /* --------------------------------------------------------------------------*/ /* GET WITH KEYWORDS (SEARCH) */ /* --------------------------------------------------------------------------*/ /* ** This function creates a URL with a searh part as defined by RFC 1866 ** Both the baseurl and the keywords must be escaped. ** ** 1. The form field names and values are escaped: space ** characters are replaced by `+', and then reserved characters ** are escaped as per [URL]; that is, non-alphanumeric ** characters are replaced by `%HH', a percent sign and two ** hexadecimal digits representing the ASCII code of the ** character. Line breaks, as in multi-line text field values, ** are represented as CR LF pairs, i.e. `%0D%0A'. ** ** 2. The fields are listed in the order they appear in the ** document with the name separated from the value by `=' and ** the pairs separated from each other by `&'. Fields with null ** values may be omitted. In particular, unselected radio ** buttons and checkboxes should not appear in the encoded ** data, but hidden fields with VALUE attributes present ** should. ** ** NOTE - The URI from a query form submission can be ** used in a normal anchor style hyperlink. ** Unfortunately, the use of the `&' character to ** separate form fields interacts with its use in SGML ** attribute values as an entity reference delimiter. ** For example, the URI `http://host/?x=1&y=2' must be ** written `'. ** ** HTTP server implementors, and in particular, CGI ** implementors are encouraged to support the use of ** `;' in place of `&' to save users the trouble of ** escaping `&' characters this way. */ PRIVATE char * query_url_encode (const char * baseurl, HTChunk * keywords) { char * fullurl = NULL; if (baseurl && keywords && HTChunk_size(keywords)) { int len = strlen(baseurl); fullurl = (char *) HT_MALLOC(len + HTChunk_size(keywords) + 2); sprintf(fullurl, "%s?%s", baseurl, HTChunk_data(keywords)); { char * ptr = fullurl+len; while (*ptr) { if (*ptr == ' ') *ptr = '+'; ptr++; } } } return fullurl; } PRIVATE char * form_url_encode (const char * baseurl, HTAssocList * formdata) { if (formdata) { BOOL first = YES; int cnt = HTList_count((HTList *) formdata); HTChunk * fullurl = HTChunk_new(128); HTAssoc * pres; if (baseurl) { HTChunk_puts(fullurl, baseurl); HTChunk_putc(fullurl, '?'); } while (cnt > 0) { pres = (HTAssoc *) HTList_objectAt((HTList *) formdata, --cnt); if (first) first = NO; else HTChunk_putc(fullurl, '&'); /* Could use ';' instead */ HTChunk_puts(fullurl, HTAssoc_name(pres)); HTChunk_putc(fullurl, '='); HTChunk_puts(fullurl, HTAssoc_value(pres)); } return HTChunk_toCString(fullurl); } return NULL; } /* Search a document from absolute name ** ------------------------------------ ** Request a document referencd by an absolute URL appended with the ** keywords given. The URL can NOT contain any fragment identifier! ** The list of keywords must be a space-separated list and spaces will ** be converted to '+' before the request is issued. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTSearchAbsolute (HTChunk * keywords, const char * base, HTRequest * request) { if (keywords && base && request) { char * full = query_url_encode(base, keywords); if (full) { HTAnchor * anchor = HTAnchor_findAddress(full); HTRequest_setAnchor(request, anchor); HT_FREE(full); return launch_request(request, NO); } } return NO; } /* Search a document from relative name ** ------------------------------------- ** Request a document referenced by a relative URL. The relative URL is ** made absolute by resolving it relative to the address of the 'base' ** anchor. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTSearchRelative (HTChunk * keywords, const char * relative, HTParentAnchor * base, HTRequest * request) { BOOL status = NO; if (keywords && relative && base && request) { char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) base); full_url = HTParse(relative, base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTSearchAbsolute(keywords, full_url, request); HT_FREE(full_url); HT_FREE(base_url); } return status; } /* ** Search a string ** --------------- ** This is the same as HTSearchAbsolute but instead of using a chunk ** you can pass a string. */ PUBLIC BOOL HTSearchString (const char * keywords, HTAnchor * anchor, HTRequest * request) { BOOL status = NO; if (keywords && anchor && request) { char * base_url = HTAnchor_address((HTAnchor *) anchor); HTChunk * chunk = HTChunk_new(strlen(keywords)+2); HTChunk_puts(chunk, keywords); status = HTSearchAbsolute(chunk, base_url, request); HT_FREE(base_url); HTChunk_delete(chunk); } return status; } /* Search an Anchor ** ---------------- ** Performs a keyword search on word given by the user. Adds the keyword ** to the end of the current address and attempts to open the new address. ** The list of keywords must be a space-separated list and spaces will ** be converted to '+' before the request is issued. ** Search can also be performed by HTLoadAbsolute() etc. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTSearchAnchor (HTChunk * keywords, HTAnchor * anchor, HTRequest * request) { BOOL status = NO; if (keywords && anchor && request) { char * base_url = HTAnchor_address(anchor); status = HTSearchAbsolute(keywords, base_url, request); HT_FREE(base_url); } return status; } /* --------------------------------------------------------------------------*/ /* HANDLING FORMS USING GET AND POST */ /* --------------------------------------------------------------------------*/ /* Send a Form request using GET from absolute name ** ------------------------------------------------ ** Request a document referencd by an absolute URL appended with the ** formdata given. The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTGetFormAbsolute (HTAssocList * formdata, const char * base, HTRequest * request) { if (formdata && base && request) { char * full = form_url_encode(base, formdata); if (full) { HTAnchor * anchor = HTAnchor_findAddress(full); HTRequest_setAnchor(request, anchor); HT_FREE(full); return launch_request(request, NO); } } return NO; } /* Send a Form request using GET from relative name ** ------------------------------------------------ ** Request a document referencd by a relative URL appended with the ** formdata given. The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTGetFormRelative (HTAssocList * formdata, const char * relative, HTParentAnchor * base, HTRequest * request) { BOOL status = NO; if (formdata && relative && base && request) { char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) base); full_url=HTParse(relative, base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTGetFormAbsolute(formdata, full_url, request); HT_FREE(full_url); HT_FREE(base_url); } return status; } /* Send a Form request using GET from an anchor ** -------------------------------------------- ** Request a document referencd by an anchor object appended with the ** formdata given. The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTGetFormAnchor (HTAssocList * formdata, HTAnchor * anchor, HTRequest * request) { BOOL status = NO; if (formdata && anchor && request) { char * base_url = HTAnchor_address((HTAnchor *) anchor); status = HTGetFormAbsolute(formdata, base_url, request); HT_FREE(base_url); } return status; } PRIVATE int HTEntity_callback (HTRequest * request, HTStream * target) { HTParentAnchor * entity = HTRequest_entityAnchor(request); HTTRACE(APP_TRACE, "Posting Data from callback function\n"); if (!request || !entity || !target) return HT_ERROR; { BOOL chunking = NO; int status; char * document = (char *) HTAnchor_document(entity); int len = HTAnchor_length(entity); if (!document) { HTTRACE(PROT_TRACE, "Posting Data No document\n"); return HT_ERROR; } /* ** If the length is unknown (-1) then see if the document is a text ** type and in that case take the strlen. If not then we don't know ** how much data we can write and must stop */ if (len < 0) { HTFormat actual = HTAnchor_format(entity); HTFormat tmplate = HTAtom_for("text/*"); if (HTMIMEMatch(tmplate, actual)) { len = strlen(document); /* Naive! */ chunking = YES; } else { HTTRACE(PROT_TRACE, "Posting Data Must know the length of document %p\n" _ document); return HT_ERROR; } } /* Send the data down the pipe */ status = (*target->isa->put_block)(target, document, len); if (status == HT_WOULD_BLOCK) { HTTRACE(PROT_TRACE, "Posting Data Target WOULD BLOCK\n"); return HT_WOULD_BLOCK; } else if (status == HT_PAUSE) { HTTRACE(PROT_TRACE, "Posting Data Target PAUSED\n"); return HT_PAUSE; } else if (chunking && status == HT_OK) { HTTRACE(PROT_TRACE, "Posting Data Target is SAVED using chunked\n"); return (*target->isa->put_block)(target, "", 0); } else if (status == HT_LOADED || status == HT_OK) { HTTRACE(PROT_TRACE, "Posting Data Target is SAVED\n"); (*target->isa->flush)(target); return HT_LOADED; } else if (status > 0) { /* Stream specific return code */ HTTRACE(PROT_TRACE, "Posting Data. Target returns %d\n" _ status); return status; } else { /* we have a real error */ HTTRACE(PROT_TRACE, "Posting Data Target ERROR %d\n" _ status); return status; } } } /* Send a Form request using POST from absolute name ** ------------------------------------------------- ** Request a document referencd by an absolute URL appended with the ** formdata given. The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC HTParentAnchor * HTPostFormAbsolute (HTAssocList * formdata, const char * base, HTRequest * request) { if (formdata && base && request) { HTAnchor * anchor = HTAnchor_findAddress(base); return HTPostFormAnchor(formdata, anchor, request); } return NULL; } /* Send a Form request using POST from relative name ** ------------------------------------------------- ** Request a document referencd by a relative URL appended with the ** formdata given. The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC HTParentAnchor * HTPostFormRelative (HTAssocList * formdata, const char * relative, HTParentAnchor * base, HTRequest * request) { HTParentAnchor * postanchor = NULL; if (formdata && relative && base && request) { char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) base); full_url=HTParse(relative, base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); postanchor = HTPostFormAbsolute(formdata, full_url, request); HT_FREE(full_url); HT_FREE(base_url); } return postanchor; } /* Send a Form request using POST from an anchor ** --------------------------------------------- ** Request a document referencd by an anchor object appended with the ** formdata given. The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC HTParentAnchor * HTPostFormAnchor (HTAssocList * formdata, HTAnchor * anchor, HTRequest * request) { HTParentAnchor * postanchor = NULL; if (formdata && anchor && request) { HTUserProfile * up = HTRequest_userProfile(request); char * tmpfile = HTGetTmpFileName(HTUserProfile_tmp(up)); char * tmpurl = HTParse(tmpfile, "file:", PARSE_ALL); char * form_encoded = form_url_encode(NULL, formdata); if (form_encoded) { /* ** Now create a new anchor for the post data and set up ** the rest of the metainformation we know about this anchor. The ** tmp anchor may actually already exist from previous postings. */ postanchor = (HTParentAnchor *) HTAnchor_findAddress(tmpurl); HTAnchor_clearHeader(postanchor); HTAnchor_setDocument(postanchor, form_encoded); HTAnchor_setLength(postanchor, strlen(form_encoded)); HTAnchor_setFormat(postanchor, WWW_FORM); /* ** Bind the temporary anchor to the anchor that will contain the ** response */ HTLink_removeAll((HTAnchor *) postanchor); HTLink_add((HTAnchor *) postanchor, (HTAnchor *) anchor, NULL, METHOD_POST); /* Set up the request object */ HTRequest_addGnHd(request, HT_G_DATE); /* Send date header */ HTRequest_setAnchor(request, anchor); HTRequest_setEntityAnchor(request, postanchor); HTRequest_setMethod(request, METHOD_POST); /* Add the post form callback function to provide the form data */ HTRequest_setPostCallback(request, HTEntity_callback); /* Now start the load normally */ launch_request(request, NO); } HT_FREE(tmpfile); HT_FREE(tmpurl); } return postanchor; } /* ** POST a URL and save the response in a mem buffer ** ------------------------------------------------ ** Returns chunk if OK - else NULL */ PUBLIC HTChunk * HTPostFormAnchorToChunk (HTAssocList * formdata, HTAnchor * anchor, HTRequest * request) { if (formdata && anchor && request) { HTChunk * chunk = NULL; HTStream * target = HTStreamToChunk(request, &chunk, 0); HTRequest_setOutputStream(request, target); if (HTPostFormAnchor(formdata, anchor, request) != NULL) return chunk; else { HTChunk_delete(chunk); return NULL; } } return NULL; } /* --------------------------------------------------------------------------*/ /* PUT A DOCUMENT */ /* --------------------------------------------------------------------------*/ /* ** If we use our persistent cache then we can protect ** against the lost update problem by saving the etag ** or last modified date in the cache and use it on all ** our PUT operations. */ PRIVATE BOOL set_preconditions (HTRequest * request) { if (request) { HTPreconditions precons = HTRequest_preconditions(request); HTRqHd if_headers = HTRequest_rqHd (request); HTRqHd all_if_headers = (HT_C_IF_MATCH | HT_C_IF_MATCH_ANY | HT_C_IF_NONE_MATCH | HT_C_IF_NONE_MATCH_ANY | HT_C_IMS | HT_C_IF_UNMOD_SINCE); switch (precons) { case HT_NO_MATCH: if_headers &= ~(all_if_headers); break; case HT_MATCH_THIS: if_headers &= ~(all_if_headers); if_headers |= (HT_C_IF_MATCH | HT_C_IF_UNMOD_SINCE); break; case HT_MATCH_ANY: if_headers &= ~(all_if_headers); if_headers |= (HT_C_IF_MATCH_ANY); break; case HT_DONT_MATCH_THIS: if_headers &= ~(all_if_headers); if_headers |= (HT_C_IF_NONE_MATCH | HT_C_IMS); break; case HT_DONT_MATCH_ANY: if_headers &= ~(all_if_headers); if_headers |= (HT_C_IF_NONE_MATCH_ANY); break; default: HTTRACE(APP_TRACE, "Precondition %d not understood\n" _ precons); } /* Set the if-* bit flag */ HTRequest_setRqHd(request, if_headers); return YES; } return NO; } PRIVATE BOOL setup_anchors (HTRequest * request, HTParentAnchor * source, HTParentAnchor * dest, HTMethod method) { if (!(method & (METHOD_PUT | METHOD_POST))) { HTTRACE(APP_TRACE, "Posting..... Bad method\n"); return NO; } /* ** Check whether we know if it is possible to PUT to this destination. ** We both check the local set of allowed methods in the anchor and any ** site information that we may have about the location of the origin ** server. */ { char * addr = HTAnchor_address((HTAnchor *) source); char * hostname = HTParse(addr, "", PARSE_HOST); #if 0 HTHost * host = HTHost_find(hostname); HTMethod public_methods = HTHost_publicMethods(host); HTMethod private_methods = HTAnchor_allow(dest); #endif HT_FREE(hostname); HT_FREE(addr); #if 0 /* ** Again, this may be too cautios for normal operations */ if (!(method & (private_methods | public_methods))) { HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM); if (prompt) { if ((*prompt)(request, HT_A_CONFIRM, HT_MSG_METHOD, NULL, NULL, NULL) != YES) return NO; } } #endif } /* ** Bind the source anchor to the dest anchor that will contain the ** response. If link already exists then ask is we should do it again. ** If so then remove the old link and replace it with a new one. */ { HTLink *link = HTLink_find((HTAnchor *) source, (HTAnchor *) dest); if (link && HTLink_method(link) == METHOD_PUT) { HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM); if (prompt) { if ((*prompt)(request, HT_A_CONFIRM, HT_MSG_REDO, NULL, NULL, NULL) != YES) return NO; } HTLink_remove((HTAnchor *) source, (HTAnchor *) dest); } HTLink_add((HTAnchor*) source, (HTAnchor*) dest, NULL, METHOD_PUT); } return YES; } /* Send an Anchor using PUT from absolute name ** ------------------------------------------- ** Upload a document referenced by an absolute URL appended. ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPutAbsolute (HTParentAnchor * source, const char * destination, HTRequest * request) { if (source && destination && request) { HTAnchor * dest = HTAnchor_findAddress(destination); return HTPutAnchor(source, dest, request); } return NO; } /* Send an Anchor using PUT from relative name ** ------------------------------------------- ** Upload a document referenced by a relative URL appended. ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPutRelative (HTParentAnchor * source, const char * relative, HTParentAnchor * destination_base, HTRequest * request) { if (source && relative && destination_base && request) { BOOL status; char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) destination_base); full_url=HTParse(relative, base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTPutAbsolute(source, full_url, request); HT_FREE(full_url); HT_FREE(base_url); return status; } return NO; } /* Send an Anchor using PUT from an anchor ** --------------------------------------- ** Upload a document referenced by an anchor object appended ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPutAnchor (HTParentAnchor * source, HTAnchor * destination, HTRequest * request) { HTParentAnchor * dest = HTAnchor_parent(destination); if (source && dest && request) { if (setup_anchors(request, source, dest, METHOD_PUT) == YES) { /* Set up the request object */ HTRequest_addGnHd(request, HT_G_DATE); HTRequest_setEntityAnchor(request, source); HTRequest_setMethod(request, METHOD_PUT); HTRequest_setAnchor(request, destination); /* Setup preconditions */ set_preconditions(request); /* Add the entity callback function to provide the form data */ HTRequest_setPostCallback(request, HTEntity_callback); /* Now start the load normally */ return launch_request(request, NO); } } return NO; } /* Send an Anchor using POST from absolute name ** ------------------------------------------- ** Upload a document referenced by an absolute URL appended. ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPostAbsolute (HTParentAnchor * source, const char * destination, HTRequest * request) { if (source && destination && request) { HTAnchor * dest = HTAnchor_findAddress(destination); return HTPostAnchor(source, dest, request); } return NO; } /* Send an Anchor using POST from relative name ** ------------------------------------------- ** Upload a document referenced by a relative URL appended. ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPostRelative (HTParentAnchor * source, const char * relative, HTParentAnchor * destination_base, HTRequest * request) { if (source && relative && destination_base && request) { BOOL status; char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) destination_base); full_url=HTParse(relative, base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTPostAbsolute(source, full_url, request); HT_FREE(full_url); HT_FREE(base_url); return status; } return NO; } /* Send an Anchor using POST from an anchor ** --------------------------------------- ** Upload a document referenced by an anchor object appended ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPostAnchor (HTParentAnchor * source, HTAnchor * destination, HTRequest * request) { HTParentAnchor * dest = HTAnchor_parent(destination); if (source && dest && request) { if (setup_anchors(request, source, dest, METHOD_POST) == YES) { /* Set up the request object */ HTRequest_addGnHd(request, HT_G_DATE); HTRequest_setEntityAnchor(request, source); HTRequest_setMethod(request, METHOD_POST); HTRequest_setAnchor(request, destination); /* Add the entity callback function to provide the form data */ HTRequest_setPostCallback(request, HTEntity_callback); /* Now start the load normally */ return launch_request(request, NO); } } return NO; } /* Send an Anchor using PUT from absolute name ** ------------------------------------------- ** Upload a document referenced by an absolute URL appended. ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPutStructuredAbsolute (HTParentAnchor * source, const char * destination, HTRequest * request, HTPostCallback * input) { if (source && destination && request && input) { HTAnchor * dest = HTAnchor_findAddress(destination); return HTPutStructuredAnchor(source, dest, request, input); } return NO; } /* Send an Anchor using PUT from relative name ** ------------------------------------------- ** Upload a document referenced by a relative URL appended. ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPutStructuredRelative (HTParentAnchor * source, const char * relative, HTParentAnchor * destination_base, HTRequest * request, HTPostCallback * input) { if (source && relative && destination_base && request && input) { BOOL status; char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) destination_base); full_url=HTParse(relative, base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTPutStructuredAbsolute(source, full_url, request, input); HT_FREE(full_url); HT_FREE(base_url); return status; } return NO; } /* Send an Anchor using PUT from an anchor ** --------------------------------------- ** Upload a document referenced by an anchor object appended ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPutStructuredAnchor (HTParentAnchor * source, HTAnchor * destination, HTRequest * request, HTPostCallback * input) { HTParentAnchor * dest = HTAnchor_parent(destination); if (source && dest && request) { if (setup_anchors(request, source, dest, METHOD_PUT) == YES) { /* Set up the request object */ HTRequest_addGnHd(request, HT_G_DATE); HTRequest_setEntityAnchor(request, source); HTRequest_setMethod(request, METHOD_PUT); HTRequest_setAnchor(request, destination); /* Setup preconditions */ set_preconditions(request); /* Add the entity callback function to provide the form data */ HTRequest_setPostCallback(request, input); /* Now start the load normally */ return launch_request(request, NO); } } return NO; } /* ** After filter for handling PUT of document. */ PRIVATE int HTSaveFilter (HTRequest * request, HTResponse * response, void * param, int status) { HTPutContext * me = (HTPutContext *) param; HTTRACE(APP_TRACE, "Save Filter. Using context %p with state %c\n" _ me _ me->state+0x30); /* ** Just ignore authentication in the hope that some other filter will ** handle this. */ if (status == HT_NO_ACCESS || status == HT_NO_PROXY_ACCESS || status == HT_REAUTH || status == HT_PROXY_REAUTH) { HTTRACE(APP_TRACE, "Save Filter. Waiting for authentication\n"); return HT_OK; } /* ** If either the source or the destination has moved then ask the user ** what to do. If there is no user then stop */ if (status == HT_TEMP_REDIRECT || status == HT_PERM_REDIRECT || status == HT_FOUND || status == HT_SEE_OTHER) { HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM); HTAnchor * redirection = HTResponse_redirection(response); if (prompt && redirection) { if (me->state == HT_LOAD_SOURCE) { if ((*prompt)(request, HT_A_CONFIRM, HT_MSG_SOURCE_MOVED, NULL, NULL, NULL) == YES) { me->source = HTAnchor_parent(redirection); } else { /* ** Make sure that the operation stops */ me->state = HT_ABORT_SAVE; } } else { #if 0 /* ** If you are very precautios then you can ask here whether ** we should continue or not in case of a redirection */ if ((*prompt)(request, HT_A_CONFIRM, HT_MSG_DESTINATION_MOVED, NULL, NULL, NULL) == YES) { me->destination = redirection; } else { /* ** Make sure that the operation stops */ me->state = HT_ABORT_SAVE; } #else HTTRACE(APP_TRACE, "Save Filter. Destination hae moved!\n"); me->destination = redirection; #endif } } return HT_OK; } /* ** If we succeeded getting the source then start the PUT itself. Otherwise ** cleanup the mess */ if (me->state == HT_LOAD_SOURCE && (status == HT_LOADED || status == HT_NOT_MODIFIED) && !HTError_hasSeverity(HTRequest_error(request), ERR_INFO)) { /* Swap the document in the anchor with the new one */ me->placeholder = HTAnchor_document(me->source); HTAnchor_setDocument(me->source, HTChunk_data(me->document)); /* Set up the request object */ HTRequest_addGnHd(request, HT_G_DATE); HTRequest_setEntityAnchor(request, me->source); HTRequest_setMethod(request, METHOD_PUT); HTRequest_setAnchor(request, me->destination); HTRequest_setOutputFormat(request, me->format); HTRequest_setOutputStream(request, me->target); /* Set up preconditions */ set_preconditions(request); /* Delete existing credentials as they are generated anew */ HTRequest_deleteCredentialsAll(request); /* Make sure we flush the output immediately */ HTRequest_forceFlush(request); /* Turn progress notifications back on */ HTRequest_setInternal(request, NO); /* Add the entity callback function to provide the form data */ HTRequest_setPostCallback(request, HTEntity_callback); /* Now start the load normally */ if (launch_request(request, NO) == YES) me->state = HT_SAVE_DEST; else { HTAnchor_setDocument(me->source, me->placeholder); HTChunk_delete(me->document); HT_FREE(me); } #if 0 me->state = launch_request(request, NO) ? HT_SAVE_DEST : HT_LOAD_SOURCE; #endif /* ** By returning HT_ERROR we make sure that this is the last handler to ** be called. We do this as we don't want any other filter to delete ** the request object now when we have just started a new one ** ourselves */ return HT_ERROR; } else { #if 0 /* @@ JK 28/03/2000: invalidated this code as we're doing this exact treatment later on. In addition, it was a source of dangling pointer error */ /* @@ JK: Added it again, because it's now working! */ #endif HTAnchor_setDocument(me->source, me->placeholder); HTChunk_delete(me->document); HT_FREE(me); } return HT_OK; } /* Send an Anchor using PUT from absolute name ** ------------------------------------------- ** Upload a document referenced by an absolute URL appended. ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPutDocumentAbsolute (HTParentAnchor * source, const char * destination, HTRequest * request) { if (source && destination && request) { HTAnchor * dest = HTAnchor_findAddress(destination); return HTPutDocumentAnchor(source, dest, request); } return NO; } /* Send an Anchor using PUT from relative name ** ------------------------------------------- ** Upload a document referenced by a relative URL appended. ** The URL can NOT contain any fragment identifier! ** The list of form data must be given as an association list where ** the name is the field name and the value is the value of the field. */ PUBLIC BOOL HTPutDocumentRelative (HTParentAnchor * source, const char * relative, HTParentAnchor * destination_base, HTRequest * request) { if (source && relative && destination_base && request) { BOOL status; char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) destination_base); full_url=HTParse(relative, base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTPutDocumentAbsolute(source, full_url, request); HT_FREE(full_url); HT_FREE(base_url); return status; } return NO; } /* Send an Anchor using PUT from an anchor ** --------------------------------------- ** Upload a document referenced by an anchor object appended ** The URL can NOT contain any fragment identifier! ** The source document is first loaded into memory and then the PUT ** to the remote server is done using the memory version */ PUBLIC BOOL HTPutDocumentAnchor (HTParentAnchor * source, HTAnchor * destination, HTRequest * request) { HTParentAnchor * dest = HTAnchor_parent(destination); if (source && dest && request) { if (setup_anchors(request, source, dest, METHOD_PUT) == YES) { HTPutContext * context = NULL; /* ** First we register an AFTER filter that can check the result ** of the source load if success then it can start the PUT ** operation to the destination. */ if (!(context=(HTPutContext *) HT_CALLOC(1, sizeof(HTPutContext)))) HT_OUTOFMEM("HTPutDocumentAnchor"); context->source = source; context->destination = destination; /* ** We register the after filter with a NULL template as we ** don't know the source of the data. */ HTRequest_addAfter(request, HTSaveFilter, NULL, context, HT_ALL, HT_FILTER_FIRST, NO); /* Turn off progress notifications */ HTRequest_setInternal(request, YES); /* ** We make sure that we are not using a memory cached element. ** It's OK to use a file cached element! */ HTRequest_setReloadMode(request, HT_CACHE_FLUSH_MEM); /* ** Some proxy servers don't clean up their cache ** when receiving a PUT, specially if this PUT is ** redirected. We remove this problem by adding ** an explicit Cache-Control: no-cache header to ** all PUT requests. */ HTRequest_addCacheControl(request, "no-cache", ""); /* ** Now we load the source document into a chunk. We specify that ** we want the document ASIS from the source location. */ context->format = HTRequest_outputFormat(request); context->target = HTRequest_outputStream(request); HTRequest_setOutputFormat(request, WWW_SOURCE); context->document = HTLoadAnchorToChunk((HTAnchor*)source,request); if (context->document == NULL) { HTTRACE(APP_TRACE, "Put Document No source\n"); HT_FREE(context); return NO; } return YES; } } return NO; } /* ------------------------------------------------------------------------- */ /* Copy an anchor ** -------------- ** Fetch the URL (possibly local file URL) and send it using either PUT ** or POST to the remote destination using HTTP. The caller can decide the ** exact method used and which HTTP header fields to transmit by setting ** the user fields in the request structure. ** If posting to NNTP then we can't dispatch at this level but must pass ** the source anchor to the news module that then takes all the refs ** to NNTP and puts into the "newsgroups" header */ PUBLIC BOOL HTCopyAnchor (HTAnchor * src_anchor, HTRequest * main_dest) { HTRequest * src_req; HTList * cur; if (!src_anchor || !main_dest) { HTTRACE(APP_TRACE, "Copy........ BAD ARGUMENT\n"); return NO; } /* Set the source anchor */ main_dest->source_anchor = HTAnchor_parent(src_anchor); /* Build the POST web if not already there */ if (!main_dest->source) { src_req = HTRequest_dupInternal(main_dest); /* Get a duplicate */ HTAnchor_clearHeader((HTParentAnchor *) src_anchor); src_req->method = METHOD_GET; src_req->reload = HT_CACHE_FLUSH_MEM; src_req->output_stream = NULL; src_req->output_format = WWW_SOURCE; /* We want source (for now) */ /* Set up the main link in the source anchor */ { HTLink * main_link = HTAnchor_mainLink((HTAnchor *) src_anchor); HTAnchor *main_anchor = HTLink_destination(main_link); HTMethod method = HTLink_method(main_link); if (!main_link || method==METHOD_INVALID) { HTTRACE(APP_TRACE, "Copy Anchor. No destination found or unspecified method\n"); HTRequest_delete(src_req); return NO; } main_dest->GenMask |= HT_G_DATE; /* Send date header */ main_dest->reload = HT_CACHE_VALIDATE; main_dest->method = method; main_dest->input_format = WWW_SOURCE; HTRequest_addDestination(src_req, main_dest); if (HTLoadAnchor(main_anchor, main_dest) == NO) return NO; } /* For all other links in the source anchor */ if ((cur = HTAnchor_subLinks(src_anchor))) { HTLink * pres; while ((pres = (HTLink *) HTList_nextObject(cur))) { HTAnchor *dest = HTLink_destination(pres); HTMethod method = HTLink_method(pres); HTRequest *dest_req; if (!dest || method==METHOD_INVALID) { HTTRACE(APP_TRACE, "Copy Anchor. Bad anchor setup %p\n" _ dest); return NO; } dest_req = HTRequest_dupInternal(main_dest); dest_req->GenMask |= HT_G_DATE; /* Send date header */ dest_req->reload = HT_CACHE_VALIDATE; dest_req->method = method; dest_req->output_stream = NULL; dest_req->output_format = WWW_SOURCE; HTRequest_addDestination(src_req, dest_req); if (HTLoadAnchor(dest, dest_req) == NO) return NO; } } } else { /* Use the existing Post Web and restart it */ src_req = main_dest->source; if (src_req->mainDestination) if (launch_request(main_dest, NO) == NO) return NO; if (src_req->destinations) { HTRequest * pres; cur = HTAnchor_subLinks(src_anchor); while ((pres = (HTRequest *) HTList_nextObject(cur)) != NULL) { if (launch_request(pres, NO) == NO) return NO; } } } /* Now open the source */ return HTLoadAnchor(src_anchor, src_req); } /* Upload an Anchor ** ---------------- ** This function can be used to send data along with a request to a remote ** server. It can for example be used to POST form data to a remote HTTP ** server - or it can be used to post a newsletter to a NNTP server. In ** either case, you pass a callback function which the request calls when ** the remote destination is ready to accept data. In this callback ** you get the current request object and a stream into where you can ** write data. It is very important that you return the value returned ** by this stream to the Library so that it knows what to do next. The ** reason is that the outgoing stream might block or an error may ** occur and in that case the Library must know about it. The source ** anchor represents the data object in memory and it points to ** the destination anchor by using the POSTWeb method. The source anchor ** contains metainformation about the data object in memory and the ** destination anchor represents the reponse from the remote server. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTUploadAnchor (HTAnchor * source_anchor, HTRequest * request, HTPostCallback * callback) { HTLink * link = HTAnchor_mainLink((HTAnchor *) source_anchor); HTAnchor * dest_anchor = HTLink_destination(link); HTMethod method = HTLink_method(link); if (!link || method==METHOD_INVALID || !callback) { HTTRACE(APP_TRACE, "Upload...... No destination found or unspecified method\n"); return NO; } request->GenMask |= HT_G_DATE; /* Send date header */ request->reload = HT_CACHE_VALIDATE; request->method = method; request->source_anchor = HTAnchor_parent(source_anchor); request->PostCallback = callback; return HTLoadAnchor(dest_anchor, request); } /* POST Callback Handler ** --------------------- ** If you do not want to handle the stream interface on your own, you ** can use this function which writes the source anchor hyperdoc to the ** target stream for the anchor upload and also handles the return value ** from the stream. If you don't want to write the source anchor hyperdoc ** then you can register your own callback function that can get the data ** you want. */ PUBLIC int HTUpload_callback (HTRequest * request, HTStream * target) { HTTRACE(APP_TRACE, "Uploading... from callback function\n"); if (!request || !request->source_anchor || !target) return HT_ERROR; { int status; HTParentAnchor * source = request->source_anchor; char * document = (char *) HTAnchor_document(request->source_anchor); int len = HTAnchor_length(source); if (len < 0) { len = strlen(document); HTAnchor_setLength(source, len); } status = (*target->isa->put_block)(target, document, len); if (status == HT_OK) return (*target->isa->flush)(target); if (status == HT_WOULD_BLOCK) { HTTRACE(PROT_TRACE, "POST Anchor. Target WOULD BLOCK\n"); return HT_WOULD_BLOCK; } else if (status == HT_PAUSE) { HTTRACE(PROT_TRACE, "POST Anchor. Target PAUSED\n"); return HT_PAUSE; } else if (status > 0) { /* Stream specific return code */ HTTRACE(PROT_TRACE, "POST Anchor. Target returns %d\n" _ status); return status; } else { /* we have a real error */ HTTRACE(PROT_TRACE, "POST Anchor. Target ERROR\n"); return status; } } } /* ------------------------------------------------------------------------- */ /* HEAD METHOD */ /* ------------------------------------------------------------------------- */ /* Request metainformation about a document from absolute name ** ----------------------------------------------------------- ** Request a document referencd by an absolute URL. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTHeadAbsolute (const char * url, HTRequest * request) { if (url && request) { HTAnchor * anchor = HTAnchor_findAddress(url); return HTHeadAnchor(anchor, request); } return NO; } /* Request metainformation about a document from relative name ** ----------------------------------------------------------- ** Request a document referenced by a relative URL. The relative URL is ** made absolute by resolving it relative to the address of the 'base' ** anchor. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTHeadRelative (const char * relative, HTParentAnchor * base, HTRequest * request) { BOOL status = NO; if (relative && base && request) { char * rel = NULL; char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) base); StrAllocCopy(rel, relative); full_url = HTParse(HTStrip(rel), base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTHeadAbsolute(full_url, request); HT_FREE(rel); HT_FREE(full_url); HT_FREE(base_url); } return status; } /* Request metainformation about an anchor ** -------------------------------------- ** Request the document referenced by the anchor ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTHeadAnchor (HTAnchor * anchor, HTRequest * request) { if (anchor && request) { HTRequest_setAnchor(request, anchor); HTRequest_setMethod(request, METHOD_HEAD); return launch_request(request, NO); } return NO; } /* ------------------------------------------------------------------------- */ /* DELETE METHOD */ /* ------------------------------------------------------------------------- */ /* Delete a document on a remote server ** ------------------------------------ ** Request a document referencd by an absolute URL. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTDeleteAbsolute (const char * url, HTRequest * request) { if (url && request) { HTAnchor * anchor = HTAnchor_findAddress(url); return HTDeleteAnchor(anchor, request); } return NO; } /* Request metainformation about a document from relative name ** ----------------------------------------------------------- ** Request a document referenced by a relative URL. The relative URL is ** made absolute by resolving it relative to the address of the 'base' ** anchor. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTDeleteRelative (const char * relative, HTParentAnchor * base, HTRequest * request) { BOOL status = NO; if (relative && base && request) { char * rel = NULL; char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) base); StrAllocCopy(rel, relative); full_url = HTParse(HTStrip(rel), base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTDeleteAbsolute(full_url, request); HT_FREE(rel); HT_FREE(full_url); HT_FREE(base_url); } return status; } /* Request metainformation about an anchor ** -------------------------------------- ** Request the document referenced by the anchor ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTDeleteAnchor (HTAnchor * anchor, HTRequest * request) { if (anchor && request) { HTRequest_setAnchor(request, anchor); HTRequest_setMethod(request, METHOD_DELETE); return launch_request(request, NO); } return NO; } /* ------------------------------------------------------------------------- */ /* OPTIONS METHOD */ /* ------------------------------------------------------------------------- */ /* Options availeble for document from absolute name ** ------------------------------------------------- ** Request a document referencd by an absolute URL. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTOptionsAbsolute (const char * url, HTRequest * request) { if (url && request) { HTAnchor * anchor = HTAnchor_findAddress(url); return HTOptionsAnchor(anchor, request); } return NO; } /* Options available for document from relative name ** ------------------------------------------------- ** Request a document referenced by a relative URL. The relative URL is ** made absolute by resolving it relative to the address of the 'base' ** anchor. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTOptionsRelative (const char * relative, HTParentAnchor * base, HTRequest * request) { BOOL status = NO; if (relative && base && request) { char * rel = NULL; char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) base); StrAllocCopy(rel, relative); full_url = HTParse(HTStrip(rel), base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTOptionsAbsolute(full_url, request); HT_FREE(rel); HT_FREE(full_url); HT_FREE(base_url); } return status; } /* Options available for document using Anchor ** ------------------------------------------- ** Request the document referenced by the anchor ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTOptionsAnchor (HTAnchor * anchor, HTRequest * request) { if (anchor && request) { HTRequest_setAnchor(request, anchor); HTRequest_setMethod(request, METHOD_OPTIONS); return launch_request(request, NO); } return NO; } /* ------------------------------------------------------------------------- */ /* TRACE METHOD */ /* ------------------------------------------------------------------------- */ /* Traces available for document from absolute name ** ------------------------------------------------ ** Request a document referencd by an absolute URL. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTTraceAbsolute (const char * url, HTRequest * request) { if (url && request) { HTAnchor * anchor = HTAnchor_findAddress(url); return HTTraceAnchor(anchor, request); } return NO; } /* Traces available for document from relative name ** ------------------------------------------------ ** Request a document referenced by a relative URL. The relative URL is ** made absolute by resolving it relative to the address of the 'base' ** anchor. ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTTraceRelative (const char * relative, HTParentAnchor * base, HTRequest * request) { BOOL status = NO; if (relative && base && request) { char * rel = NULL; char * full_url = NULL; char * base_url = HTAnchor_address((HTAnchor *) base); StrAllocCopy(rel, relative); full_url = HTParse(HTStrip(rel), base_url, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); status = HTTraceAbsolute(full_url, request); HT_FREE(rel); HT_FREE(full_url); HT_FREE(base_url); } return status; } /* Trace available for document using Anchor ** ------------------------------------------- ** Request the document referenced by the anchor ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTTraceAnchor (HTAnchor * anchor, HTRequest * request) { if (anchor && request) { HTRequest_setAnchor(request, anchor); HTRequest_setMethod(request, METHOD_TRACE); return launch_request(request, NO); } return NO; } /* ------------------------------------------------------------------------- */ /* SERVER METHODS */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL launch_server (HTRequest * request, BOOL recursive) { #ifdef HTDEBUG if (PROT_TRACE) { HTParentAnchor *anchor = HTRequest_anchor(request); char * full_address = HTAnchor_address((HTAnchor *) anchor); HTTRACE(PROT_TRACE, "HTAccess.... Serving %s\n" _ full_address); HT_FREE(full_address); } #endif /* HTDEBUG */ return HTServe(request, recursive); } /* Serving a request ** ----------------- ** Returns YES if request accepted, else NO */ PUBLIC BOOL HTServeAbsolute (const char * url, HTRequest * request) { if (url && request) { HTAnchor * anchor = HTAnchor_findAddress(url); HTRequest_setAnchor(request, anchor); return launch_server(request, NO); } return NO; } libwww/Library/src/HTAccess.html0100644000076400001440000007545406636061605016316 0ustar danielusers W3C Sample Code Library libwww Accessing URIs

    Accessing URIs

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module is the application interface module to the Request class. It contains a lot of methods for loading URIs and also for uploading URIs using PUT or POST, for example. You can use the Request class directly but this module makes it easier to use by providing a lot of small request functions using the Request class in different ways. It contains help functions for accessing documents and for uploading documents to a remote server.

    This module contains functions for handling all HTTP/1.1 methods:

    GET Requests
    PUT Requests
    POST Requests
    HEAD, DELETE, OPTIONS, and TRACE requests

    Furthermore, it contains a few access methods for handling incoming requests - in orther words acting as a server. Although libwww is primarily for clients, it is in fact symmetric in that it can handle both client requests and server requests.

    This module is implemented by HTAccess.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTACCESS_H
    #define HTACCESS_H
    #include "HTReq.h"
    #include "HTAnchor.h"
    

    Load a Document (Method = GET)

    URIs can be accesses using a character string, for example "http://www.w3.org" or it can be accessed by using the libwww representation of a URI called an Anchor object. Note that we call all objects accessible through URIs for documents - this is a notion we have inherited from the hypertext world.

    Load a Document from Absolute URI

    Request a document referencd by an absolute URI. The output from the request is passed to the Stream Pipe Manager that figures out where to pump the data. This can for example be to the display or to a local file depending on the set of converters registered by the application.

    extern BOOL HTLoadAbsolute (const char * url, HTRequest * request);
    

    Load a Document from Relative URI

    Request a document referenced by a relative URI. The relative URI is made absolute by resolving it relative to the address of the 'base' anchor.

    extern BOOL HTLoadRelative (const char * 	relative,
    			    HTParentAnchor *	base,
    			    HTRequest *		request);
    

    Load a Document into Memory

    Request a document referred to by the URI and load it into a HTChunk object. A chunk object is a dynamic string so in the end you will have a single memory buffer containing the document. The chunk must be freed by the caller.

    extern HTChunk * HTLoadToChunk (const char * url, HTRequest * request);
    

    Load a Document and Save as a Local File

    This function loads a URI and saves the contents in the specifed file. The file should not  be open, as the load function both opens and closes the file. If the file already exists then it asks the user whether the file should be overwritten or not. the contents is saved ASIS - that is - we do not touch the contents of the file!

    extern BOOL HTLoadToFile (const char * url, HTRequest * request,
    			  const char * filename);
    

    Load a Document and put the Contents into a Stream

    Request a document referenced by an absolute URI and sending the data down a stream. This stream can be anny stream you like, for eample one from the Stream Interface.

    extern BOOL HTLoadToStream (const char * url, HTStream * output,
    			    HTRequest * request);
    

    Load a Document using an Anchor

    Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the appropriate method in the Anchor class.

    extern BOOL HTLoadAnchor (HTAnchor * anchor, HTRequest * request);
    

    Load a Document into Memory using an Anchor

    This is the same as HTLoadToChunk but instead of passing a URI string you pass an HTAnchor object. Internally, all URIs are represented as anchors which contains all the information we have about the resource. The chunk must be freed by the caller.

    extern HTChunk * HTLoadAnchorToChunk (HTAnchor * anchor, HTRequest * request);
    

    Recursively Request a Document using Anchors

    Same as HTLoadAnchor() but the information in the error stack in the request object is kept, so that any error messages in one. This function is almost identical to HTLoadAnchor, but it doesn't clear the error stack so that the information in there is kept.

    extern BOOL HTLoadAnchorRecursive (HTAnchor * anchor, HTRequest * request);
    

    Load Special Documents

    We also have a set of functions for loading special files like rules files which also are referenced by a URI but which do have to be treated specially.

    Load a Rule File

    Rule files can be loaded just like any other URI but you can also just use these functions which do all the work for you: they load a rule find with the URI specified and add the set of rules to the existing set.

    They come in two flavours - one that asks the user whether it is OK to add the rules and one that does it automatically without asking. As the app would have to call this method explicitly, it may have other ways of protecting the user.

    Both functions use preemptive requests so that everything else stops in the meantime.

    extern BOOL HTLoadRules (const char * url);
    extern BOOL HTLoadRulesAutomatically (const char * url);
    

    Search a Document (Method = GET)

    The search methods all use GET as the method in the HTTP request. The functions take the keywords and encode them according to RFC 1866 (Hypertext Markup language). That is, the query part is separated from the rest of the URI by a "?".

    The keywords are passed to the function as a Chunk Object and each keyword must be separated by a space ' '. This will then be converted into a '+' before added to the URI.

    Search a Document from Absolute URI

    extern BOOL HTSearchAbsolute (HTChunk *		keywords,
    			      const char *	base,
    			      HTRequest *	request);
    

    Search a Document from Relative URI

    Search a document referenced by a relative URI. The relative URI is made absolute by resolving it relative to the address of the 'base' anchor.

    extern BOOL HTSearchRelative (HTChunk *		keywords,
    			      const char * 	relative,
    			      HTParentAnchor *	base,
    			      HTRequest *	request);
    

    Search a Document using an Anchor

    extern BOOL HTSearchAnchor (HTChunk *		keywords,
    			    HTAnchor *		anchor,
    			    HTRequest * 	request);
    

    Search a Document using an Anchor Using a String

    This works exactly as the HTSearchAnchor() function but takes a C string instead of a chunk object.

    extern BOOL HTSearchString (const char *	keywords,
    			    HTAnchor *		anchor,
    			    HTRequest * 	request);
    

    Submit Forms Using GET Method

    Formdata can be sent to an HTTP server in two ways - it can either use a GET method or it can use a POST method. The difference is whether the request "has side effects" or not. For example, if you are ordering a pizza then the (hopefully positive) sideeffect is that you actually get one delivered. However, if you are issuing search data - for example to Alta Vista, then there is no sideeffect. In the former example you would use the GET form and in the latter you would use the POST form.

    Submit Form from Absolute URI using GET

    Submit formdata using GET to the address indicated as the "base" which must be an absolute URI. The list of form data must be given as an association list where the name is the field name and the value is the value of the field.

    extern BOOL HTGetFormAbsolute (HTAssocList *	formdata,
    			       const char *	base,
    			       HTRequest *	request);
    

    Submit Form from Relative URI using GET

    Submit formdata using GET to the address indicated relative to the address of the base anchor. The list of form data must be given as an association list where the name is the field name and the value is the value of the field.

    extern BOOL HTGetFormRelative (HTAssocList * 	formdata,
    			       const char * 	relative,
    			       HTParentAnchor *	base,
    			       HTRequest *	request);
    

    Send a Form using an Anchor and the GET Method

    Submit formdata using GET to the address indicated of the anchor. The list of form data must be given as an association list where the name is the field name and the value is the value of the field.

    extern BOOL HTGetFormAnchor (HTAssocList *	formdata,
    			     HTAnchor *		anchor,
    			     HTRequest * 	request);
    

    Submit Forms Using POST Method

    The data in a POST form is sent as the body part of the HTTP message whereas a GET form wraps it all up into the URI. In order to be able to use the POST data object at a later point in time, we create a new anchor on the fly. This anchor has a URI file location which points into the temporary area given by the User Profile Object. That is - you can actually save the anchor using a PUT request and then be able to retrive the form data at a later point in time. Even though this may seem "ambitious" for posting form data, it is really just a special example of sending any kind of data to a remote server. All POST form functions return the new anchor or NULL if they fail.

    Submit Form from Absolute URI using POST

    Submit formdata using POST to the address indicated as the "base" which must be an absolute URI. The list of form data must be given as an association list where the name is the field name and the value is the value of the field.

    extern HTParentAnchor * HTPostFormAbsolute (HTAssocList *	formdata,
    					    const char *	base,
    					    HTRequest *	request);
    

    Submit Form from a Relative URI using GET

    Submit formdata using POST to the address indicated relative to the address of the base anchor. The list of form data must be given as an association list where the name is the field name and the value is the value of the field.

    extern HTParentAnchor * HTPostFormRelative (HTAssocList * 	formdata,
    					    const char * 	relative,
    					    HTParentAnchor *	base,
    					    HTRequest *		request);
    

    Submit Form using an Anchor and the POST Method

    Submit formdata using POST to the address indicated of the anchor. The list of form data must be given as an association list where the name is the field name and the value is the value of the field.

    extern HTParentAnchor * HTPostFormAnchor (HTAssocList *	formdata,
    					  HTAnchor *	anchor,
    					  HTRequest * 	request);
    

    Submit Form and Save the Result in a Memory Buffer

    Submit formdata to the address referred to by the HTAnchor object and load the result of the POST into a HTChunk object. A chunk object is a dynamic memory buffer so in the end you will have a single memory buffer containing the document. The chunk must be freed by the caller.

    extern HTChunk * HTPostFormAnchorToChunk (HTAssocList * formdata,
                                              HTAnchor *    anchor,
                                              HTRequest *   request);
    

    Get Metainformation about a Document (Method = HEAD)

    If you are not interested in the document itself but only in the metainformation that describes the document then you should use the HEAD method in your request.

    Get Metainformation about a Document from Absolute URI

    Request metainfomration about a document referencd by an absolute URI.

    extern BOOL HTHeadAbsolute (const char * url, HTRequest * request);
    

    Get Metainformation about a Document from Relative URI

    Request metainformation about a document referenced by a relative URI.

    extern BOOL HTHeadRelative (const char * 	relative,
    			    HTParentAnchor *	base,
    			    HTRequest *		request);
    

    Get Metainformation about a Document using an Anchor

    Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the approproiate method in the Anchor class.

    extern BOOL HTHeadAnchor (HTAnchor * anchor, HTRequest * request);
    

    Delete a Document (Method = DELETE)

    If you want to delete a document (or make the document inaccessible for future references) then you can use the DELETE method in your request.

    Delete a Document from Absolute URI

    Request metainfomration about a document referencd by an absolute URI.

    extern BOOL HTDeleteAbsolute (const char * url, HTRequest * request);
    

    Delete a Document from Relative URI

    Request metainformation about a document referenced by a relative URI.

    extern BOOL HTDeleteRelative (const char * 	relative,
    			    HTParentAnchor *	base,
    			    HTRequest *		request);
    

    Delete a Document using an Anchor

    Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the approproiate method in the Anchor class.

    extern BOOL HTDeleteAnchor (HTAnchor * anchor, HTRequest * request);
    

    Save a Document ASIS From Memory (Method = PUT)

    If you already have a document in memory and it is associated with an Anchor object then you can PUT this document to a remote server using the following methods. Other information that you can set in the anchor is metadata like the media type, the document length, the language, or any other information that you want to associate with the document to be uploaded.

    This set of functions takes the document ASIS - that it the exact content of the document associated with this anchor will be sent to the remote server. If your anchor represents a structured content and the document itself is a parse tree, for example, then you can use the structured PUT functions.

    If your application is an editor, then you may want to create a new anchor on the fly for temporary backups on local disk before you save it to a remote server. An easy way to get a new anchor with a local file URI is to use the HTTmpAnchor function which is part of the WWWApp interface.

    Save a Document ASIS from Memory Using Absolute URI (PUT)

    The source is an anchor with the contents already in memory and the destination is an absolute URI.

    extern BOOL HTPutAbsolute (HTParentAnchor *	source,
    			   const char *		destination,
    			   HTRequest *		request);
    

    Save a Document ASIS from Memory Using Relative URI (PUT)

    The source is an anchor with the contents already in memory and the destination is a relative URI relative to the destination anchor

    extern BOOL HTPutRelative (HTParentAnchor *	source,
    			   const char * 	relative,
    			   HTParentAnchor *	destination_base,
    			   HTRequest *		request);
    

    Save a Document ASIS from Memory Using an Anchor (PUT)

    Both the source and the anchor are anchor objects. The source anchor already has the contents in memory

    extern BOOL HTPutAnchor (HTParentAnchor *	source,
    			 HTAnchor *		dest,
    			 HTRequest *	 	request);
    

    Save a Structured Document (Using PUT)

    If you want to save a document from memory but it contains structured information (for example, it is in the form of a parse tree) then you can use this interface. The only difference from above is that the caller must provide the function that provides data while sending it accross the network - we can't just take it as a block. You can for example have a look at the HTEntity_callback function which is used in the ASIS interface if you want to write your own data feeding method.

    Save a Structured Document from Memory to Absolute URI (PUT)

    Upload a document referenced by an absolute URI.

    extern BOOL HTPutStructuredAbsolute (HTParentAnchor *	source,
    				     const char *	destination,
    				     HTRequest *	request,
    				     HTPostCallback *	input);
    

    Save a Structured Document from Memory to Relative URI (PUT)

    The source is an anchor with the contents already in memory and the destination is a relative URI relative to the destination anchor

    extern BOOL HTPutStructuredRelative (HTParentAnchor *	source,
    				     const char * 	relative,
    				     HTParentAnchor *	destination_base,
    				     HTRequest *	request,
    				     HTPostCallback *	input);
    

    Save a Structured Document Using an Anchor and the PUT Method

    The source is an anchor with the contents already in memory and the destination is a relative URI. The HTPostCallback function type is declared in the HTRequest object.

    extern BOOL HTPutStructuredAnchor (HTParentAnchor *	source,
    				   HTAnchor *		destination,
    				   HTRequest *	 	request,
    				   HTPostCallback *	input);
    

    Save a Remote Document (Using PUT)

    If the content of the document associated with the anchor is NOT in memory then you can use this interface. These methods make two requests: first they go out and get the source which can be on an FTP server, on local disk, on another HTTP server etc. and then they PUT this document ASIS to the destination HTTP server.

    Save a Document from Absolute URI using PUT

    Get the source and PUT it to the destination which is an absolute URI

    extern BOOL HTPutDocumentAbsolute (HTParentAnchor *	source,
    				   const char *	        destination,
    				   HTRequest *	        request);
    

    Save a Document from Relative URI using PUT

    Get the source and PUT it to the destination which is a relative URI

    extern BOOL HTPutDocumentRelative (HTParentAnchor *	source,
    				   const char * 	relative,
    				   HTParentAnchor *	destination_base,
    				   HTRequest *          request);
    

    Save a Document Using an Anchor and the PUT Method

    Get the source and PUT it to the destination which is an anchor object.

    extern BOOL HTPutDocumentAnchor (HTParentAnchor *	source,
    				 HTAnchor *		destination,
    				 HTRequest *	 	request);
    

    Post a Document from Memory ASIS (Method = POST)

    If you already have a document in memory and it is associated with an Anchor object then you can POST this document to a remote server using the following methods. Other information that you can set in the anchor is metadata like the media type, the document length, the language, or any other information that you want to associate with the document to be uploaded.

    This set of functions takes the document ASIS - that it the exact content of the document associated with this anchor will be sent to the remote server.

    If your application is an editor, then you may want to create a new anchor on the fly for temporary backups on local disk before you save it to a remote server. An easy way to get a new anchor with a local file URI is to use the HTTmpAnchor function which is part of the WWWApp interface.

    Post a Document from Memory ASIS using Absolute URI (POST)

    Upload a document using POST referenced by an absolute URI.

    extern BOOL HTPostAbsolute (HTParentAnchor *	source,
    			   const char *		destination,
    			   HTRequest *		request);
    

    Post a Document from Memory ASIS using Relative URI (POST)

    Upload a document using POST referenced by a relative URI.

    extern BOOL HTPostRelative (HTParentAnchor *	source,
    			   const char * 	relative,
    			   HTParentAnchor *	destination_base,
    			   HTRequest *		request);
    

    Post a Document from Memory ASIS using an Anchor (POST)

    POST an anchor - here both the source and the anchor are anchor objects. The source anchor already has the contents in memory.

    extern BOOL HTPostAnchor (HTParentAnchor *	source,
    			 HTAnchor *		dest,
    			 HTRequest *	 	request);
    

    Get Available Options for a Document (Method = OPTIONS)

    If you want to get information about a document then you can use the the OPTIONS method in your request. The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.

    A speciality about the OPTIONS method is that the client can issue a request with no pathinfo at all but only with a "*". That is, the request line can look like this "OPTIONS * HTTP/1.1". This means that we request information about the server as a whole and not only about a single URI. You can get this effect by using a URI containing the hostname alone with NO extra slash at the end, for example http://www.w3.org, http://www.cern.ch.

    Options Available for Document from Absolute URI

    Request options about a document referencd by an absolute URI.

    extern BOOL HTOptionsAbsolute (const char * url, HTRequest * request);
    

    Options Available for Document from Relative URI

    Request options about a document referenced by a relative URI.

    extern BOOL HTOptionsRelative (const char * 	relative,
    			    HTParentAnchor *	base,
    			    HTRequest *		request);
    

    Options Available for Document using an Anchor

    Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the appropriate method in the Anchor class.

    extern BOOL HTOptionsAnchor (HTAnchor * anchor, HTRequest * request);
    

    Get Trace Loop back Information for a Document (Method = TRACE)

    The TRACE method is used to invoke a remote, application-layer loop-back of the request message. The final recipient of the request SHOULD reflect the message received back to the client as the entity-body of a 200 (OK) response. The final recipient is either the origin server or the first proxy or gateway to receive a Max-Forwards value of zero (0) in the request (see section 14.31). A TRACE request MUST NOT include an entity.

    TRACE allows the client to see what is being received at the other end of the request chain and use that data for testing or diagnostic information. The value of the Via header field (section 14.44) is of particular interest, since it acts as a trace of the request chain. Use of the Max-Forwards header field allows the client to limit the length of the request chain, which is useful for testing a chain of proxies forwarding messages in an infinite loop.

    If successful, the response SHOULD contain the entire request message in the entity-body, with a Content-Type of "message/http". Responses to this method MUST NOT be cached.

    Traces Available for Document from Absolute URI

    Request traces about a document referencd by an absolute URI.

    extern BOOL HTTraceAbsolute (const char * url, HTRequest * request);
    

    Traces Available for Document from Relative URI

    Request traces about a document referenced by a relative URI.

    extern BOOL HTTraceRelative (const char * 	relative,
    			     HTParentAnchor *	base,
    			     HTRequest *	request);
    

    Traces Available for Document using an Anchor

    Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the appropriate method in the Anchor class.

    extern BOOL HTTraceAnchor (HTAnchor * anchor, HTRequest * request);
    

    Serve a Request

    Although libwww is primarily for clients, it is in fact symmetric in that it can handle both client requests and server requests. The way this is handled is that each protocol is registered with both a client handler and a server handler - depending on which type of request you use, one of them is called. Note that in order to be able to serve any document, there actually have to be a server handler. However, libwww only comes with a raw socket loader which isn't much of a server. There is an attempt of an HTTP server but it is not complete

    The protocol handler used to serve the request is determined by the URI - just as for client side requests. That is, libwww can in fact simultaneously be the server for multiple protocols if you really want to. Examples of URIs that you can use are noop://localhost:8888 which means that libwww starts listening on port 8888 (see the listen example for details). Other examples are http://localhost:7777 which means that it listens for HTTP on port 7777. Again, there is no HTTP server in libwww - this is just an example.

    extern BOOL HTServeAbsolute (const char * address, HTRequest * request);
    

    Save a URI To Multiple Destinations - Not supported!!!

    Note: This is no longer supported

    These are the generic versions of the PUT and POST functions. They can be used to send documents to multiple destinations simultanously using the PostWeb model.

    Copy an anchor - not supported

    Fetch the URI from either local file store or from a remote HTTP server and send it using either PUT or POST to the remote destination using HTTP. The caller can decide the exact method used and which HTTP header fields to transmit by setting the user fields in the request structure. If posting to NNTP then we can't dispatch at this level but must pass the source anchor to the news module that then takes all the refs to NNTP and puts into the "newsgroups" header Returns YES if request accepted, else NO

    extern BOOL HTCopyAnchor (HTAnchor * src_anchor, HTRequest * main_req);
    

    Upload an Anchor - not supported

    This function can be used to send data along with a request to a remote server. It can for example be used to POST form data to a remote HTTP server - or it can be used to post a newsletter to a NNTP server. In either case, you pass a callback function which the request calls when the remote destination is ready to accept data. In this callback you get the current request object and a stream into where you can write data. It is very important that you return the value returned by this stream to the Library so that it knows what to do next. The reason is that the outgoing stream might block or an error may occur and in that case the Library must know about it. If you do not want to handle the stream interface yourself then you can use the HTUpload_callback which is declared below. The source anchor represents the data object in memory and it points to the destination anchor by using the POSTWeb method. The source anchor contains metainformation about the data object in memory and the destination anchor represents the reponse from the remote server. Returns YES if request accepted, else NO

    extern BOOL HTUploadAnchor (HTAnchor *		source_anchor,
    			    HTRequest * 	request,
    			    HTPostCallback *	callback);
    

    POST Callback Handler - not supported

    Is you do not want to handle the stream interface on your own, you can use this "middleman" function which does the actual writing to the target stream for the anchor upload and also handles the return value from the stream. Now, your application is called via the callback function that you may associate with a request object. You indicate when you have sent all the data you want by returning HT_LOADED from the callback.

    extern int HTUpload_callback (HTRequest * request, HTStream * target);
    
    #endif /* HTACCESS_H */
    


    @(#) $Id: HTAccess.html,v 2.89 2025/12/17 01:51:01 frystyk Exp $
    libwww/Library/src/HTAlert.c0100644000076400001440000001430406664352702015427 0ustar danielusers/* HTAlert.c ** DIALOG MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTAlert.c,v 2.53 2025/02/22 22:10:10 frystyk Exp $ ** ** REPLACE THIS MODULE with a GUI version in a GUI environment! ** ** History: ** Jun 92 Created May 1992 By C.T. Barker ** Feb 93 Simplified, portablised TBL ** Sep 93 Corrected 3 bugs in HTConfirm() :-( AL ** Nov 95 Rewritten using callbacks HFN */ /* Library include files */ #include "WWWLib.h" #include "HTError.h" /* Implemented here */ #include "HTAlert.h" /* Implemented here */ typedef struct _HTAlert { HTAlertCallback * cbf; HTAlertOpcode opcode; } HTAlert; struct _HTAlertPar { char * message; char * secret; void * output; }; PRIVATE BOOL HTInteractive=YES; /* Any prompts from the Library? */ PRIVATE HTList * HTMessages = NULL; /* Global list of alert functions */ /* ------------------------------------------------------------------------- */ /* ** All messaging can be turned on or off as you like */ PUBLIC void HTAlert_setInteractive (BOOL interactive) { HTInteractive = interactive; } PUBLIC BOOL HTAlert_interactive (void) { return HTInteractive; } /* HTAlertCall_add ** --------------- ** Register a call back function that is to be called when generating ** messages, dialog, prompts, progress reports etc. ** ** The opcode signifies which call back function to call depending of the ** type of the message. Opcode can be one of the enumerations defined ** by HTAlertOpcode. */ PUBLIC BOOL HTAlertCall_add (HTList * list, HTAlertCallback * cbf, HTAlertOpcode opcode) { HTTRACE(CORE_TRACE, "Alert Call.. Add Alert Handler %p\n" _ (void *) cbf); if (list && cbf) { HTAlert *me; if ((me = (HTAlert *) HT_CALLOC(1, sizeof(HTAlert))) == NULL) HT_OUTOFMEM("HTAlertCall_add"); me->cbf = cbf; me->opcode = opcode; return HTList_addObject(list, (void *) me); } return NO; } /* HTAlertCall_delete ** ------------------ ** Unregister a call back function from a list */ PUBLIC BOOL HTAlertCall_delete (HTList * list, HTAlertCallback *cbf) { HTTRACE(CORE_TRACE, "Alert Call.. Delete Alert Handler %p\n" _ (void *) cbf); if (list && cbf) { HTList *cur = list; HTAlert *pres; while ((pres = (HTAlert *) HTList_nextObject(cur))) { if (pres->cbf == cbf) { HTList_removeObject(list, (void *) pres); HT_FREE(pres); return YES; } } } return NO; } /* HTAlertCall_deleteOpcode ** ------------------------ ** Unregister all handlers registered for a given opcode. */ PUBLIC BOOL HTAlertCall_deleteOpcode (HTList * list, HTAlertOpcode opcode) { HTTRACE(CORE_TRACE, "Alert Call.. Delete all handlers with opcode %d\n" _ opcode); if (list) { HTList * cur = list; HTAlert * pres; while ((pres = (HTAlert *) HTList_nextObject(cur))) { if (pres->opcode == opcode) { HTList_removeObject(list, (void *) pres); HT_FREE(pres); cur = list; } } return YES; } return NO; } /* HTAlertCall_deleteAll ** --------------------- ** Unregisters all call back functions */ PUBLIC BOOL HTAlertCall_deleteAll (HTList * list) { HTTRACE(CORE_TRACE, "Alert Call.. Delete All callback functions\n"); if (list) { HTList *cur = list; HTAlert *pres; while ((pres = (HTAlert *) HTList_nextObject(cur))) { HT_FREE(pres); } HTList_delete(list); return YES; } return NO; } /* HTAlertCall_find ** ---------------- ** Finds a callback function corresponding to the opcode. If none has ** been registered then NULL is returned. */ PUBLIC HTAlertCallback * HTAlertCall_find (HTList * list, HTAlertOpcode opcode) { if (list && HTInteractive) { HTAlert * pres; while ((pres = (HTAlert *) HTList_nextObject(list)) != NULL) { if (pres->opcode & opcode) return pres->cbf; } HTTRACE(CORE_TRACE, "Alert Call.. No entry found for opcode %d\n" _ opcode); } return NULL; } /* ** Global List of Alert functions. list can be NULL */ PUBLIC void HTAlert_setGlobal (HTList * list) { HTMessages = list; } PUBLIC HTList * HTAlert_global (void) { return HTMessages; } PUBLIC BOOL HTAlert_add (HTAlertCallback * cbf, HTAlertOpcode opcode) { if (!HTMessages) HTMessages = HTList_new(); return HTAlertCall_add(HTMessages, cbf, opcode); } PUBLIC BOOL HTAlert_delete (HTAlertCallback * cbf) { if (!HTMessages) HTMessages = HTList_new(); return HTAlertCall_delete(HTMessages, cbf); } PUBLIC BOOL HTAlert_deleteOpcode (HTAlertOpcode opcode) { if (!HTMessages) HTMessages = HTList_new(); return HTAlertCall_deleteOpcode(HTMessages, opcode); } PUBLIC BOOL HTAlert_deleteAll (void) { BOOL status = NO; if (HTMessages) { status = HTAlertCall_deleteAll(HTMessages); HTMessages = NULL; } return status; } /* HTAlert_find ** ------------ ** Finds a global callback function corresponding to the opcode */ PUBLIC HTAlertCallback * HTAlert_find (HTAlertOpcode opcode) { return HTAlertCall_find(HTMessages, opcode); } PUBLIC HTAlertPar * HTAlert_newReply (void) { HTAlertPar * me; if ((me = (HTAlertPar *) HT_CALLOC(1, sizeof(HTAlertPar))) == NULL) HT_OUTOFMEM("HTAlert_newReply"); return me; } /* HTAlert_deleteReply ** ------------------- ** Delete reply structure but don't touch the replies themselves. */ PUBLIC void HTAlert_deleteReply (HTAlertPar * old) { HT_FREE(old); } PUBLIC char * HTAlert_replyMessage (HTAlertPar * me) { return me ? me->message : NULL; } PUBLIC BOOL HTAlert_setReplyMessage (HTAlertPar * me, const char * message) { if (me && message) { StrAllocCopy(me->message, message); return YES; } return NO; } PUBLIC BOOL HTAlert_assignReplyMessage (HTAlertPar * me, char * message) { if (me) me->message = message; return YES; } PUBLIC char * HTAlert_replySecret (HTAlertPar * me) { return me ? me->secret : NULL; } PUBLIC BOOL HTAlert_setReplySecret (HTAlertPar * me, const char * secret) { if (me && secret) { StrAllocCopy(me->secret, secret); return YES; } return NO; } PUBLIC void * HTAlert_replyOutput (HTAlertPar * me) { return me ? me->output : NULL; } PUBLIC BOOL HTAlert_setReplyOutput (HTAlertPar * me, void * output) { if (me) { me->output = output; return YES; } return NO; } libwww/Library/src/HTAlert.html0100644000076400001440000002251206736475307016160 0ustar danielusers W3C Sample Code Library libwww Library Alert Class

    The Alert Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The Alert class defines a set of methods to be used by libwww for passing prompts and message to the application. In order to maintain libwww application independent and natural language independent, it does not know how to communicate with a user. Note here that a user is a somewhat abstract notion for  something that can receive a message or prompt from libwww. A user can for example be a person, but is may also be handled automatically by a robot or a client receiving a response from a HTTP server.

    Libwww has a set of opcodes that classifies the nature of the message, for example that it is a question that must be confirmed in order to continue a request or simply a progress notification. The application can register a callback for any number of the defined opcodes - in case libwww has a message for an opcode that does not have a method associated, the message is ignored. You can also globally disable any message send from libwww.

    Note: The library core does not define any message or dialog methods - they are all considered part of the application. However, it comes with a default set of methods which can be initiated using the function HTAlertInit() in HTInit module

    This module is implemented by HTAlert.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTALERT_H
    #define HTALERT_H
    #include "HTReq.h"
    

    Message Opcodes and Messages

    The callback functions are defined as a generic callback where the caller can pass a set of input parameters and the callee can return a set of outptu parameters. Also note that all the *_PROG_* opcodes are a subset of HT_A_PROGRESS. This means that you easily can register a callback for all progress reports.

    The callback handler for progress notifications SHOULD NOT be used to interrupt the ongoing message as it is not guaranteed to be in a state to do so. Instead you should use the event handlers or the timers for this.

    typedef enum _HTAlertOpcode {
        HT_PROG_DNS		= 0x1,		/* Doing DNS resolution */
        HT_PROG_CONNECT	= 0x2,		/* Connecting Active */
        HT_PROG_ACCEPT	= 0x4,		/* Connecting Passive */
        HT_PROG_READ	= 0x8,		/* Read data */
        HT_PROG_WRITE	= 0x10,		/* Write data */
        HT_PROG_DONE	= 0x20,		/* Request finished */
        HT_PROG_INTERRUPT   = 0x40,         /* Request interrupted */
        HT_PROG_OTHER       = 0x80,         /* Other progress notes */
        HT_PROG_TIMEOUT     = 0x100,        /* Request timed out */
        HT_PROG_LOGIN	= 0x200,	/* Automatic login notifications */
        HT_A_PROGRESS	= 0xFFFF,	/* Get all progress reports - no reply */
        /* First word are reserved for progresss notifications */
        HT_A_MESSAGE	= 0x1<<16, /* Send a message - no reply */
        HT_A_CONFIRM	= 0x2<<16, /* Want YES or NO back */
        HT_A_PROMPT		= 0x4<<16, /* Want full dialog */
        HT_A_SECRET		= 0x8<<16, /* Secret dialog (e.g. password) */
        HT_A_USER_PW	= 0x10<<16 /* Atomic userid and password */
    } HTAlertOpcode;
    typedef struct _HTAlertPar HTAlertPar;
    typedef BOOL HTAlertCallback   (HTRequest * request, HTAlertOpcode op,
    				int msgnum, const char * dfault, void * input,
    				HTAlertPar * reply);
    

    If you don't expect any return values then reply can be NULL. The return value of the callback function can be used to indicate confirmation on a prompt (Yes or No).

    User Prompts and Questions

    This is an enumerated list of messages that can be converted into a string table etc. See the HTDialog module for default initialization of these strings.

    typedef enum _HTAlertMsg {
        HT_MSG_NULL = -1,
        HT_MSG_UID = 0,
        HT_MSG_PROXY_UID,
        HT_MSG_FTP_UID,
        HT_MSG_PW,
        HT_MSG_FILENAME,
        HT_MSG_ACCOUNT,
        HT_MSG_METHOD,
        HT_MSG_MOVED,
        HT_MSG_RULES,
        HT_MSG_FILE_REPLACE,
        HT_MSG_RETRY_AUTHENTICATION,
        HT_MSG_RETRY_PROXY_AUTH,
        HT_MSG_REDO,
        HT_MSG_BIG_PUT,
        HT_MSG_SOURCE_MOVED,
        HT_MSG_DESTINATION_MOVED,
        HT_MSG_REDIRECTION,
        HT_MSG_PROXY,
        HT_MSG_CACHE_LOCK,
        HT_MSG_ACCEPT_COOKIE,
        HT_MSG_ELEMENTS		            /* This MUST be the last element */
    } HTAlertMsg;
    

    Enable or Disable Messages

    If you really don't want the library to prompt for anything at all then enable this constant. The default value is Interactive.

    extern void HTAlert_setInteractive	(BOOL interative);
    extern BOOL HTAlert_interactive		(void);
    

    Creation and Deletion Methods

    Message methods are registered in lists. By default a list is not enabled before you assign it as being active. This allows the application to maintain multiple lists of message handlers which can be swapped in and out as neeeded.

    Add a Callback Function

    Register a call back function that is to be called when generating messages, dialog, prompts, progress reports etc. The opcode signifies which call back function to call depending of the type of the message. Opcode can be any combination of the bitflags defined by HTAlertOpcode. If you register one callback for HT_A_PROGRESS then this will get called on all progress notifications.

    extern BOOL HTAlertCall_add (HTList * list, HTAlertCallback * cbf,
    			     HTAlertOpcode opcode);
    

    Delete a Callback function

    Unregister a call back function from a list

    extern BOOL HTAlertCall_delete (HTList * list, HTAlertCallback * cbf);
    

    Delete all Callbacks With this Opcode

    Unregister all handlers registered for a given opcode.

    extern BOOL HTAlertCall_deleteOpcode (HTList * list, HTAlertOpcode opcode);
    

    Delete a list of Callback Functions

    Unregisters all call back functions

    extern BOOL HTAlertCall_deleteAll (HTList * list);
    

    Find a Callback Function

    Finds a callback function corresponding to the opcode. If none has been registered then NULL is returned.

    extern HTAlertCallback * HTAlertCall_find(HTList * list, HTAlertOpcode opcode);
    

    The Reply Object

    The reply object is used for communicating input from the user back to the Library. This is only required to use when for example the user is prompted for a file name etc. You can find several examples on how to use this in the default message and dialog module provided together with the Library.

    extern HTAlertPar * HTAlert_newReply	(void);
    extern void HTAlert_deleteReply		(HTAlertPar * old);
    

    Handle the Reply Message

    These methods provide the API for handling the reply message. There are two ways of assigning a message to the reply message - either by copying the buffer or by reusing the same buffer. In the latter case, the caller must make sure not to free the reply message before it has been used.

    extern BOOL HTAlert_setReplyMessage	(HTAlertPar * me, const char *message);
    extern BOOL HTAlert_assignReplyMessage	(HTAlertPar * me, char * message);
    

    You can get the data back again by using this method:

    extern char * HTAlert_replyMessage	(HTAlertPar * me);
    
    extern char * HTAlert_replySecret	(HTAlertPar * me);
    extern BOOL HTAlert_setReplySecret	(HTAlertPar * me, const char * secret);
    extern void * HTAlert_replyOutput	(HTAlertPar * me);
    extern BOOL HTAlert_setReplyOutput	(HTAlertPar * me, void * output);
    

    Active set of Callback Functions

    A list can be assigned as being active in which case it is visible for libwww by assigning the list as the global alert list. Libwww does not know about inactive lists of alert handlers.

    extern void HTAlert_setGlobal	(HTList * list);
    extern HTList * HTAlert_global	(void);
    

    Global Alert List Methods

    You can assign a callback directly to the global list in which case it becomes immediately available to libwww. In this case you do not need to worry about creating the list - it will be created as well as deleted automatically.

    Add an Alert Handler

    extern BOOL HTAlert_add	(HTAlertCallback * cbf, HTAlertOpcode opcode);
    

    Delete an Alert Handler

    You can either delete a handler by referring to its address or to the opcode that it has been registered for.

    extern BOOL HTAlert_delete (HTAlertCallback * cbf);
    extern BOOL HTAlert_deleteOpcode (HTAlertOpcode opcode);
    

    Delete all Alert Handlers

    extern BOOL HTAlert_deleteAll (void);
    

    Find an Alert Handler

    extern HTAlertCallback * HTAlert_find (HTAlertOpcode opcode);
    
    #endif
    


    @(#) $Id: HTAlert.html,v 2.56 2025/06/30 20:15:03 frystyk Exp $
    libwww/Library/src/HTAncMan.html0100644000076400001440000000777006477617571016262 0ustar danielusers W3C Sample Code Library libwww Anchor Object

    The Anchor Class Definition

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    This module is the private part of the anchor object. It has the functions declarations that are private to the Library and that shouldn't be used by applications. See also the public part of the declarition in the HTAnchorModule.

    #ifndef HTANCMAN_H
    #define HTANCMAN_H
    #include "HTAnchor.h"
    #include "HTList.h"
    #include "HTAtom.h"
    #include "HTMethod.h"
    
    We have a set of Anchor objects which of course should be sub classes - but - hey - this is C - what do you expect!

    Generic Anchor type

    This is the super class of anchors. We often use this as an argument to the functions that both accept parent anchors and child anchors. We separate the first link from the others to avoid too many small mallocs involved by a list creation. Most anchors only point to one place.
    struct _HTAnchor {
      HTLink	mainLink;	/* Main (or default) destination of this */
      HTList *	links;  	/* List of extra links from this, if any */
      HTParentAnchor * parent;	/* Parent of this anchor (self for adults) */
    };
    

    Anchor for a Parent Object

    These anchors points to the whole contents of a graphic object (document). The parent anchor of a parent anchor is itself. The parent anchor now contains all meta information about the object. This is largely the entity headers in the HTTP specification.
    struct _HTParentAnchor {
      /* Common part from the generic anchor structure */
      HTLink	mainLink;	/* Main (or default) destination of this */
      HTList *	links;  	/* List of extra links from this, if any */
      HTParentAnchor * parent;	/* Parent of this anchor (self) */
      /* ParentAnchor-specific information */
      HTList **	children;	/* Hash of subanchors of this, if any */
      HTList *	sources;	/* List of anchors pointing to this, if any */
      void *	document;	/* The document within this is an anchor */
      char *	physical;	/* Physical address */
      char * 	address;	/* Absolute address of this node */
      BOOL		isIndex;	/* Acceptance of a keyword search */
      HTAssocList * headers;        /* Unparsed headers */
      BOOL		header_parsed;	/* Are we done parsing? */
      /* We keep a list of variants of this anchor, if any */
      HTList *	variants;
      /* Entity header fields */
      char *	title;
      HTMethod	allow;	        /* Allowed methods (bit-flag) */
      HTFormat	content_type;	/* Content type */
      HTAssocList *	type_parameters;/* Content type parameters (charset etc.) */
      HTAssocList * meta_tags;      /* Set of metatags found in the HTML text */
      char *	content_base;
      HTList *	content_encoding;
      HTList *	content_language;
      long int	content_length;
      char *	content_location;
      char *	content_md5;
      HTEncoding	cte;	        /* Content-Transfer-Encoding */
      time_t	date;		/* When was the request issued */  
      time_t	expires;	/* When does the copy expire */
      time_t	last_modified;	/* When was this last modified */
      time_t	age;	        /* Cache estimate of age */
      char * 	etag;		/* entity tag */
      char *	derived_from;	/* Opaque string */
      char *	version;	/* Opaque string */
    };
    

    Anchor for a Child Object

    A child anchor is a anchor object that points to a subpart of a graphic object (document)
    struct _HTChildAnchor {
      /* Common part from the generic anchor structure */
      HTLink	mainLink;	/* Main (or default) destination of this */
      HTList *	links;  	/* List of extra links from this, if any */
      HTParentAnchor * parent;	/* Parent of this anchor */
      /* ChildAnchor-specific information */
      char * 	tag;		/* Address of this anchor relative to parent */
    };
    
    #endif /* HTANCMAN_H */
    

    @(#) $Id: HTAncMan.html,v 2.14 2025/03/05 21:56:09 frystyk Exp $
    libwww/Library/src/HTAnchor.c0100644000076400001440000011231007251207545015563 0ustar danielusers/* HTAnchor.c ** HYPERTEXT "ANCHOR" OBJECT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTAnchor.c,v 1.89 2025/03/06 16:25:09 kahan Exp $ ** ** An anchor represents a region of a hypertext document which is ** linked to another anchor in the same or a different document. ** ** History ** Nov 1990 Written in Objective-C for the NeXT browser (TBL) ** 24-Oct-1991 (JFG), written in C, browser-independant ** 21-Nov-1991 (JFG), first complete version ** 3-May-1995 (HF), Added a lot of methods and other stuff made an object ** July 1996 Patch for adding hash of children Michael Farrar */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTFormat.h" #include "HTParse.h" #include "HTMethod.h" #include "HTWWWStr.h" #include "HTAncMan.h" /* Implemented here */ #define PARENT_HASH_SIZE HT_XL_HASH_SIZE #define CHILD_HASH_SIZE HT_L_HASH_SIZE PRIVATE HTList **adult_table=0; /* Point to table of lists of all parents */ /* ------------------------------------------------------------------------- */ /* Creation Methods */ /* ------------------------------------------------------------------------- */ /* ** Do not use "new" by itself outside this module. In order to enforce ** consistency, we insist that you furnish more information about the ** anchor you are creating : use newWithParent or newWithAddress. */ PRIVATE HTParentAnchor * HTParentAnchor_new (void) { HTParentAnchor *newAnchor; if ((newAnchor = (HTParentAnchor *) HT_CALLOC(1, sizeof (HTParentAnchor))) == NULL) HT_OUTOFMEM("HTParentAnchor_new"); newAnchor->parent = newAnchor; newAnchor->content_type = WWW_UNKNOWN; newAnchor->mainLink.method = METHOD_INVALID; newAnchor->content_length = -1; /* howcome 6 dec 95 */ newAnchor->date = (time_t) -1; newAnchor->expires = (time_t) -1; newAnchor->last_modified = (time_t) -1; newAnchor->age = (time_t) -1; return newAnchor; } PRIVATE HTChildAnchor * HTChildAnchor_new (void) { HTChildAnchor *child; if ((child = (HTChildAnchor *) HT_CALLOC(1, sizeof(HTChildAnchor))) == NULL) HT_OUTOFMEM("HTChildAnchor_new"); return child; } /* Create new or find old child anchor ** ----------------------------------- ** ** Me one is for a new anchor being edited into an existing ** document. The parent anchor must already exist. All ** children without tags (no NAME attribut) points to the same NULL ** child. ** Children are now hashed for performance reasons. Thanks to ** Michael Farrar */ PUBLIC HTChildAnchor * HTAnchor_findChild (HTParentAnchor * parent, const char * tag) { HTChildAnchor * child = NULL; HTList * kids = NULL; if (!parent) { HTTRACE(ANCH_TRACE, "Child Anchor Bad argument\n"); return NULL; } /* Find a hash for this tag (if any) */ { int hash = 0; /* ** If tag is empty then use hash value 0 */ if (tag) { const char * ptr = tag; for(; *ptr; ptr++) hash = (int) ((hash*3 + (*(unsigned char*)ptr)) % CHILD_HASH_SIZE); } if (!parent->children) { if (!(parent->children = (HTList **) HT_CALLOC(CHILD_HASH_SIZE, sizeof(HTList *)))) HT_OUTOFMEM("HTAnchor_findChild"); } if (!parent->children[hash]) parent->children[hash] = HTList_new(); kids = parent->children[hash]; } /* First search list of children to see if tag is already there */ if (tag && *tag) { HTList * cur = kids; while ((child = (HTChildAnchor *) HTList_nextObject(cur))) { if (child->tag && !strcmp(child->tag, tag)) { HTTRACE(ANCH_TRACE, "Child Anchor %p of parent %p with name `%s' already exists.\n" _ (void *) child _ (void *) parent _ tag); return child; } } } /* If not found then create a new child anchor */ child = HTChildAnchor_new(); HTList_addObject(kids, (void *) child); child->parent = parent; if (tag) StrAllocCopy(child->tag, tag); HTTRACE(ANCH_TRACE, "Child Anchor New Anchor %p named `%s' is child of %p\n" _ (void *) child _ tag ? tag : (const char *) "" _ (void *)parent); return child; } /* Create new or find old named anchor ** ----------------------------------- ** ** Me one is for a reference which is found in a document, and might ** not be already loaded. ** Note: You are not guaranteed a new anchor -- you might get an old one, ** like with fonts. */ PUBLIC HTAnchor * HTAnchor_findAddress (const char * address) { char *tag = HTParse (address, "", PARSE_VIEW); /* Any tags? */ /* If the address represents a sub-anchor, we recursively load its parent, then we create a child anchor within that document. */ if (*tag) { char *addr = HTParse(address, "", PARSE_ACCESS | PARSE_HOST | PARSE_PATH | PARSE_PUNCTUATION); HTParentAnchor * parent = (HTParentAnchor*) HTAnchor_findAddress(addr); HTChildAnchor * child = HTAnchor_findChild(parent, tag); HT_FREE(addr); HT_FREE(tag); return (HTAnchor *) child; } else { /* Else check whether we have this node */ int hash; const char *p; HTList * adults; HTList *grownups; HTParentAnchor * foundAnchor; char *newaddr = NULL; StrAllocCopy(newaddr, address); /* Get our own copy */ HT_FREE(tag); newaddr = HTSimplify(&newaddr); /* Select list from hash table */ for(p=newaddr, hash=0; *p; p++) hash = (int) ((hash * 3 + (*(unsigned char*)p)) % PARENT_HASH_SIZE); if (!adult_table) { if ((adult_table = (HTList* *) HT_CALLOC(PARENT_HASH_SIZE, sizeof(HTList*))) == NULL) HT_OUTOFMEM("HTAnchor_findAddress"); } if (!adult_table[hash]) adult_table[hash] = HTList_new(); adults = adult_table[hash]; /* Search list for anchor */ grownups = adults; while ((foundAnchor = (HTParentAnchor *) HTList_nextObject(grownups))){ if (!strcmp(foundAnchor->address, newaddr)) { HTTRACE(ANCH_TRACE, "Find Parent. %p with address `%s' already exists.\n" _ (void*) foundAnchor _ newaddr); HT_FREE(newaddr); /* We already have it */ return (HTAnchor *) foundAnchor; } } /* Node not found : create new anchor. */ foundAnchor = HTParentAnchor_new(); foundAnchor->address = newaddr; /* Remember our copy */ HTList_addObject (adults, foundAnchor); HTTRACE(ANCH_TRACE, "Find Parent. %p with hash %d and address `%s' created\n" _ (void*)foundAnchor _ hash _ newaddr); return (HTAnchor *) foundAnchor; } } /* Create or find a child anchor with a possible link ** -------------------------------------------------- ** ** Create new anchor with a given parent and possibly ** a name, and possibly a link to a _relatively_ named anchor. ** All parameters EXCEPT parent can be NULL */ PUBLIC HTChildAnchor * HTAnchor_findChildAndLink (HTParentAnchor * parent, const char * tag, const char * href, HTLinkType ltype) { HTChildAnchor * child = HTAnchor_findChild(parent, tag); if (child && href && *href) { char * relative_to = HTAnchor_expandedAddress((HTAnchor *) parent); char * parsed_address = HTParse(href, relative_to, PARSE_ALL); HTAnchor * dest = HTAnchor_findAddress(parsed_address); HTLink_add((HTAnchor *) child, dest, ltype, METHOD_INVALID); HT_FREE(parsed_address); HT_FREE(relative_to); } return child; } /* ------------------------------------------------------------------------- */ /* Link Methods */ /* ------------------------------------------------------------------------- */ /* ** Upgrade the link to the main destination and and downgrade the ** current main link to the list */ PUBLIC HTLink * HTAnchor_mainLink (HTAnchor * me) { return me ? &(me->mainLink) : NULL; } PUBLIC BOOL HTAnchor_setMainLink (HTAnchor * me, HTLink * movingLink) { if (!(me && me->links && movingLink && HTList_removeObject(me->links, movingLink))) return NO; else { /* First push current main link onto top of links list */ HTLink * newLink = HTLink_new(); memcpy ((void *) newLink, & me->mainLink, sizeof (HTLink)); HTList_addObject (me->links, newLink); /* Now make movingLink the new main link, and delete it */ memcpy ((void *) &me->mainLink, movingLink, sizeof (HTLink)); HTLink_delete(movingLink); return YES; } } /* ** Handling sub links */ PUBLIC HTList * HTAnchor_subLinks (HTAnchor * anchor) { return anchor ? anchor->links : NULL; } PUBLIC BOOL HTAnchor_setSubLinks (HTAnchor * anchor, HTList * list) { if (anchor) { anchor->links = list; return YES; } return NO; } /* ** Returns the main destination of this anchor */ PUBLIC HTAnchor * HTAnchor_followMainLink (HTAnchor * me) { return me ? HTLink_destination(&me->mainLink) : NULL; } /* ** Returns a link with a given link type or NULL if nothing found */ PUBLIC HTLink * HTAnchor_findLinkType (HTAnchor * me, HTLinkType type) { if (me) { HTLink * link = HTAnchor_mainLink(me); HTList * sublinks = HTAnchor_subLinks(me); if (link && HTLink_type(link) == type) return link; else if (sublinks) { while ((link = (HTLink *) HTList_nextObject (sublinks))) if (HTLink_type(link) == type) return link; } } return NULL; } /* ------------------------------------------------------------------------- */ /* Deletion Methods */ /* ------------------------------------------------------------------------- */ /* Delete an anchor and possibly related things (auto garbage collection) ** -------------------------------------------- ** ** The anchor is only deleted if the corresponding document is not loaded. ** All outgoing links from parent and children are deleted, and this ** anchor is removed from the sources list of all its targets. ** We also try to delete the targets whose documents are not loaded. ** If this anchor's source list is empty, we delete it and its children. */ /* Deletes all the memory allocated in a parent anchor and returns any ** hyperdoc object hanging of this anchor */ PRIVATE void * delete_parent (HTParentAnchor * me) { void * doc = me->document; /* Remove link and address information */ if (me->links) { HTList *cur = me->links; HTLink *pres; while ((pres = (HTLink *) HTList_nextObject(cur))) HTLink_delete(pres); HTList_delete(me->links); } /* Remove children */ if (me->children) { int cnt = 0; for (; cntchildren[cnt]) HTList_delete(me->children[cnt]); } HT_FREE(me->children); } HTList_delete (me->sources); HTList_delete (me->variants); HT_FREE(me->physical); HT_FREE(me->address); /* Then remove entity header information (metainformation) */ HTAnchor_clearHeader(me); HT_FREE(me); return doc; } /* Delete a parent anchor and all its children. If a hyperdoc object ** is found hanging off the parent anchor then this is returned */ PRIVATE void * delete_family (HTAnchor * me) { HTParentAnchor * parent = NULL; if (!me) { HTTRACE(ANCH_TRACE, "AnchorDelete No anchor found\n"); return NULL; } parent = me->parent; HTTRACE(ANCH_TRACE, "AnchorDelete Remove parent %p and children\n" _ parent); /* Delete children */ if (parent->children) { int cnt = 0; for (; cntchildren[cnt]; if (kids) { HTChildAnchor * child; while ((child=(HTChildAnchor*)HTList_removeLastObject(kids))) { HT_FREE(child->tag); if (child->links) { HTList * cur = child->links; HTLink * pres; while ((pres = (HTLink *) HTList_nextObject(cur))) HTLink_delete(pres); HTList_delete(child->links); } HT_FREE(child); } HTList_delete(kids); parent->children[cnt] = NULL; } } } return delete_parent(parent); } /* DELETE ALL ANCHORS ** ------------------ ** Deletes all anchors and return a list of all the HyperDocs found. ** It is for the application to delete any HyperDocs. ** If NULL then no hyperdocs are returned ** Return YES if OK, else NO */ PUBLIC BOOL HTAnchor_deleteAll (HTList * documents) { int cnt; HTList *cur; if (!adult_table) return NO; for (cnt=0; cntphysical); /* Register if we have a document on this anchor */ if (documents && pres->document) HTList_addObject(documents, pres->document); } } } return YES; } PRIVATE void delete_links (HTAnchor * me) { if (! me) return; /* Recursively try to delete target anchors */ if (me->mainLink.dest) { HTParentAnchor *parent = me->mainLink.dest->parent; HTList_removeObject (parent->sources, me); if (! parent->document) /* Test here to avoid calling overhead */ HTAnchor_delete (parent); } if (me->links) { /* Extra destinations */ HTLink *target; while ((target = (HTLink *) HTList_removeLastObject (me->links))) { HTParentAnchor *parent = target->dest->parent; HTList_removeObject (parent->sources, me); if (! parent->document) /* Test here to avoid calling overhead */ HTAnchor_delete (parent); } } } PUBLIC BOOL HTAnchor_delete (HTParentAnchor * me) { /* Don't delete if document is loaded */ if (!me || me->document) { HTTRACE(ANCH_TRACE, "Anchor...... Not deleted\n"); return NO; } /* Recursively try to delete target anchors */ delete_links ((HTAnchor *) me); if (!HTList_isEmpty(me->sources)) { /* There are still incoming links */ /* ** Delete all outgoing links from children, if any */ if (me->children) { int cnt = 0; for (; cntchildren[cnt]; if (kids) { HTChildAnchor * child; while ((child = (HTChildAnchor *) HTList_nextObject(kids))) delete_links((HTAnchor *) child); return NO; /* Parent not deleted */ } } } /* ** No more incoming links : kill everything ** First, recursively delete children */ if (me->children) { int cnt = 0; for (; cntchildren[cnt]; if (kids) { HTChildAnchor * child; while ((child=(HTChildAnchor *) HTList_removeLastObject(kids))) delete_links((HTAnchor *) child); HT_FREE(child->tag); HT_FREE(child); } } } } /* 2001/03/06: Bug fix by Serge Adda HTAnchor_delete wasn't removing the reference to the deleted anchor. This caused a bug whenever requesting another anchor for the same URL. */ if (adult_table) { int hash; const char *p; HTList * adults; HTList * grownups; HTList * last; HTParentAnchor * foundAnchor; /* Select list from hash table */ for(p=me->address, hash=0; *p; p++) hash = (int) ((hash * 3 + (*(unsigned char*)p)) % PARENT_HASH_SIZE); adults = adult_table[hash]; /* Search list for anchor */ grownups = adults; last = grownups; while ((foundAnchor = (HTParentAnchor *) HTList_nextObject(grownups))){ if (!strcmp(foundAnchor->address, me->address)) { HTList_quickRemoveElement (grownups, last); break; } last = grownups; } } /* Now kill myself */ delete_parent(me); return YES; /* Parent deleted */ #if 0 if (! HTList_isEmpty (me->sources)) { /* There are still incoming links */ /* Delete all outgoing links from children, if any */ HTList *kids = me->children; while ((child = (HTChildAnchor *) HTList_nextObject (kids))) delete_links ((HTAnchor *) child); return NO; /* Parent not deleted */ } /* No more incoming links : kill everything */ /* First, recursively delete children */ while ((child = (HTChildAnchor *) HTList_removeLastObject (me->children))) { delete_links ((HTAnchor *) child); HT_FREE(child->tag); HT_FREE(child); } #endif } /* FLATTEN ALL ANCHORS ** ------------------- ** Flattens the anchor web structure into an array. ** This is useful for calculating statistics, sorting ** the parent anchors etc. ** ** The caller can indicate the size of the array (total ** number of anchors if known - otherwise 0). ** ** Return an array that must be freed by the caller or ** NULL if no anchors. */ PUBLIC HTArray * HTAnchor_getArray (int growby) { int cnt; HTArray * array = NULL; HTList * cur = NULL; if (!adult_table) return NULL; /* Allocate an array for the anchors */ if (growby <= 0) growby = PARENT_HASH_SIZE; array = HTArray_new(growby); /* Traverse anchor structure */ for (cnt=0; cntparent : NULL; } PUBLIC void HTAnchor_setDocument (HTParentAnchor * me, void * doc) { if (me) me->document = doc; } PUBLIC void * HTAnchor_document (HTParentAnchor * me) { return me ? me->document : NULL; } PUBLIC char * HTAnchor_address (HTAnchor * me) { char *addr = NULL; if (me) { if (((HTParentAnchor *) me == me->parent) || !((HTChildAnchor *) me)->tag) { /* it's an adult or no tag */ StrAllocCopy (addr, me->parent->address); } else { /* it's a named child */ if ((addr = (char *) HT_MALLOC(2 + strlen (me->parent->address) + \ strlen (((HTChildAnchor *) me)->tag))) == NULL) HT_OUTOFMEM("HTAnchor_address"); sprintf (addr, "%s#%s", me->parent->address, ((HTChildAnchor *) me)->tag); } } return addr; } /* ** We resolve the child address with respect to either a base URL, ** a content-location, or to the request-URI */ PUBLIC char * HTAnchor_expandedAddress (HTAnchor * me) { char *addr = NULL; if (me) { HTParentAnchor * parent = me->parent; char * base = HTAnchor_base(parent); if (((HTParentAnchor *) me == me->parent) || !((HTChildAnchor *) me)->tag) { /* it's an adult or no tag */ StrAllocCopy(addr, base); } else { /* it's a named child */ if ((addr = (char *) HT_MALLOC(2 + strlen(base) + strlen(((HTChildAnchor *) me)->tag))) == NULL) HT_OUTOFMEM("HTAnchor_address"); sprintf (addr, "%s#%s", base, ((HTChildAnchor *) me)->tag); } } return addr; } /* Physical Address ** ---------------- */ PUBLIC char * HTAnchor_physical (HTParentAnchor * me) { return me ? me->physical ? me->physical : me->address : NULL; } PUBLIC void HTAnchor_setPhysical (HTParentAnchor * me, char * physical) { if (!me || !physical) { HTTRACE(ANCH_TRACE, "HTAnchor.... setPhysical, called with null argument\n"); return; } StrAllocCopy(me->physical, physical); } PUBLIC void HTAnchor_clearPhysical(HTParentAnchor * me) { if (me) HT_FREE(me->physical); } /* ** Children information */ PUBLIC BOOL HTAnchor_hasChildren (HTParentAnchor * me) { return (me && me->children); } /* ** Fix up a simple routine to see if this anchor is a (ChildAnchor *) ** Seem to be doing it all over the place, so simplify! */ PUBLIC BOOL HTAnchor_isChild (HTAnchor * me) { return (me && (HTParentAnchor *) me != me->parent); } PUBLIC char * HTAnchor_view (HTAnchor * me) { char * view = NULL; if (me && (HTParentAnchor *) me != me->parent && ((HTChildAnchor *) me)->tag) StrAllocCopy(view, ((HTChildAnchor *) me)->tag); return view; } /* ------------------------------------------------------------------------- */ /* Entity Header Information */ /* ------------------------------------------------------------------------- */ /* ** Take the relevant infomration from the response object and cache it ** in the anchor object. We inherit the information that is already ** parsed in the response along with the unparsed headers. */ PUBLIC BOOL HTAnchor_update (HTParentAnchor * me, HTResponse * response) { if (me && response) { HTCachable cachable = HTResponse_isCachable(response); if (cachable == HT_CACHE_ETAG) { char * etag = HTResponse_etag(response); HTTRACE(ANCH_TRACE, "HTAnchor.... Updating etag for %p\n" _ me); if (etag) { HTAnchor_setEtag(me, etag); return YES; } } else if (cachable == HT_CACHE_NOT_MODIFIED) { HTTRACE(ANCH_TRACE, "HTAnchor.... Information is up to date for %p\n" _ me); return YES; } else if (cachable == HT_CACHE_ALL) { char * etag = HTResponse_etag(response); HTTRACE(ANCH_TRACE, "HTAnchor.... Updating metainformation for %p\n" _ me); /* ** The content length and type is already parsed at this point ** in time. We also check for format parameters like charset etc. ** and copy the contents in the anchor object */ me->content_length = HTResponse_length(response); me->content_type = HTResponse_format(response); me->type_parameters = HTResponse_formatParam(response); me->content_encoding = HTResponse_encoding(response); /* Don't forget the etag as well */ if (etag) HTAnchor_setEtag(me, etag); /* ** Inherit all the unparsed headers - we may need them later! */ if (me->headers) HTAssocList_delete(me->headers); me->headers = HTResponse_handOverHeader(response); /* ** Notifify the response object not to delete the lists that we ** have inherited in the anchor object */ HTResponse_isCached(response, YES); /* ** Set the datestamp of when the anchor was updated if we didn't ** get any in the response */ if (!HTAssocList_findObject(me->headers, "date")) HTAnchor_setDate(me, time(NULL)); return YES; } } return NO; } /* ** Variants. If this anchor has any variants then keep them in a list ** so that we can find them later. The list is simply a list of ** parent anchors. */ PUBLIC HTList * HTAnchor_variants (HTParentAnchor * me) { return me ? me->variants : NULL; } PUBLIC BOOL HTAnchor_addVariant (HTParentAnchor * me, HTParentAnchor * variant) { if (me && variant) { if (!me->variants) me->variants = HTList_new(); return HTList_addObject(me->variants, variant); } return NO; } PUBLIC BOOL HTAnchor_deleteVariant (HTParentAnchor * me, HTParentAnchor * variant) { return (me && variant) ? HTList_removeObject(me->variants, variant) : NO; } /* ** Is this resource an index? */ PUBLIC void HTAnchor_clearIndex (HTParentAnchor * me) { if (me) me->isIndex = NO; } PUBLIC void HTAnchor_setIndex (HTParentAnchor * me) { if (me) me->isIndex = YES; } PUBLIC BOOL HTAnchor_isIndex (HTParentAnchor * me) { return me ? me->isIndex : NO; } /* Content Base ** ------------ */ PUBLIC char * HTAnchor_base (HTParentAnchor * me) { if (me) { if (me->content_base) return me->content_base; if (me->headers) { char * base = HTAssocList_findObject(me->headers, "content-base"); /* ** If no base is found then take the content-location if this ** is present and is absolute, else use the Request-URI. */ if (base) StrAllocCopy(me->content_base, HTStrip(base)); } /* ** Try the content location if any */ { char * location = HTAnchor_location(me); StrAllocCopy(me->content_base, (location && HTURL_isAbsolute(location)) ? location : me->address); } return me->content_base; } return NULL; } PUBLIC BOOL HTAnchor_setBase (HTParentAnchor * me, char * base) { if (me && base) { StrAllocCopy(me->content_base, base); return YES; } return NO; } /* Content Location ** ---------------- */ PUBLIC char * HTAnchor_location (HTParentAnchor * me) { if (me) { if (me->content_location) return *me->content_location ? me->content_location : NULL; if (me->headers) { char * location = HTAssocList_findObject(me->headers, "content-location"); StrAllocCopy(me->content_location, location ? HTStrip(location) : ""); return me->content_location; } } return NULL; } /* ** Expand the location relative to the base URL if any, otherwise the ** anchor address it self */ PUBLIC BOOL HTAnchor_setLocation (HTParentAnchor * me, char * location) { if (me && location) { char * base = HTAnchor_base(me); if (!base) base = me->address; me->content_location = HTParse(location, base, PARSE_ALL); return YES; } return NO; } /* Meta tags ** --------- */ PUBLIC HTAssocList * HTAnchor_meta (HTParentAnchor * me) { return me ? me->meta_tags : NULL; } PUBLIC BOOL HTAnchor_addMeta (HTParentAnchor * me, const char * name, const char * value) { if (me) { if (!me->meta_tags) me->meta_tags = HTAssocList_new(); return HTAssocList_replaceObject(me->meta_tags, name, value); } return NO; } /* ** robots meta tag */ PUBLIC char * HTAnchor_robots (HTParentAnchor * me) { if (me && me->meta_tags) { char * robots = HTAssocList_findObject(me->meta_tags, "robots"); return robots; } return NULL; } /* Content-Type ** ------------ */ PUBLIC HTFormat HTAnchor_format (HTParentAnchor * me) { return me ? me->content_type : NULL; } PUBLIC void HTAnchor_setFormat (HTParentAnchor * me, HTFormat form) { if (me) me->content_type = form; } PUBLIC HTAssocList * HTAnchor_formatParam (HTParentAnchor * me) { return me ? me->type_parameters : NULL; } PUBLIC BOOL HTAnchor_addFormatParam (HTParentAnchor * me, const char * name, const char * value) { if (me) { if (!me->type_parameters) me->type_parameters = HTAssocList_new(); return HTAssocList_replaceObject(me->type_parameters, name, value); } return NO; } /* ** Charset parameter to Content-Type */ PUBLIC HTCharset HTAnchor_charset (HTParentAnchor * me) { if (me && me->type_parameters) { char * charset = HTAssocList_findObject(me->type_parameters,"charset"); return HTAtom_for(charset); } return NULL; } PUBLIC BOOL HTAnchor_setCharset (HTParentAnchor * me, HTCharset charset) { return HTAnchor_addFormatParam(me, "charset", HTAtom_name(charset)); } /* ** Level parameter to Content-Type */ PUBLIC HTLevel HTAnchor_level (HTParentAnchor * me) { if (me && me->type_parameters) { char * level = HTAssocList_findObject(me->type_parameters, "level"); return HTAtom_for(level); } return NULL; } PUBLIC BOOL HTAnchor_setLevel (HTParentAnchor * me, HTLevel level) { return HTAnchor_addFormatParam(me, "level", HTAtom_name(level)); } /* ** Content Encoding */ PUBLIC HTList * HTAnchor_encoding (HTParentAnchor * me) { return me ? me->content_encoding : NULL; } PUBLIC BOOL HTAnchor_addEncoding (HTParentAnchor * me, HTEncoding encoding) { if (me && encoding) { if (!me->content_encoding) me->content_encoding = HTList_new(); return HTList_addObject(me->content_encoding, encoding); } return NO; } PUBLIC BOOL HTAnchor_deleteEncoding (HTParentAnchor * me, HTEncoding encoding) { return (me && me->content_encoding && encoding) ? HTList_removeObject(me->content_encoding, encoding) : NO; } PUBLIC BOOL HTAnchor_deleteEncodingAll (HTParentAnchor * me) { if (me && me->content_encoding) { HTList_delete(me->content_encoding); me->content_encoding = NULL; return YES; } return NO; } /* ** Content Language */ PUBLIC HTList * HTAnchor_language (HTParentAnchor * me) { if (me) { if (me->content_language == NULL && me->headers) { char * value = HTAssocList_findObject(me->headers, "content-language"); char * field; if (!me->content_language) me->content_language = HTList_new(); while ((field = HTNextField(&value)) != NULL) { char * lc = field; while ((*lc = TOLOWER(*lc))) lc++; HTList_addObject(me->content_language, HTAtom_for(field)); } } return me->content_language; } return NULL; } PUBLIC BOOL HTAnchor_addLanguage (HTParentAnchor * me, HTLanguage language) { if (me && language) { if (!me->content_language) me->content_language = HTList_new(); return HTList_addObject(me->content_language, language); } return NO; } PUBLIC BOOL HTAnchor_deleteLanguageAll (HTParentAnchor * me) { if (me && me->content_language) { HTList_delete(me->content_language); me->content_language = NULL; return YES; } return NO; } /* ** Content Length */ PUBLIC long int HTAnchor_length (HTParentAnchor * me) { return me ? me->content_length : -1; } PUBLIC void HTAnchor_setLength (HTParentAnchor * me, long int length) { if (me) me->content_length = length; } PUBLIC void HTAnchor_addLength (HTParentAnchor * me, long int deltalength) { if (me) { if (me->content_length < 0) me->content_length = deltalength; else me->content_length += deltalength; } } /* ** Content Transfer Encoding */ PUBLIC HTEncoding HTAnchor_contentTransferEncoding (HTParentAnchor * me) { return me ? me->cte : NULL; } PUBLIC void HTAnchor_setContentTransferEncoding (HTParentAnchor * me, HTEncoding cte) { if (me) me->cte = cte; } /* ** Allowed methods (Allow) */ PUBLIC HTMethod HTAnchor_allow (HTParentAnchor * me) { if (me) { if (me->allow == 0 && me->headers) { char * value = HTAssocList_findObject(me->headers, "allow"); char * field; /* ** We treat methods allowed on this object as case insensitive ** in case we receive the information over the net - that is - ** in the Allow header. */ while ((field = HTNextField(&value)) != NULL) { HTMethod new_method; if ((new_method = HTMethod_enum(field)) != METHOD_INVALID) me->allow |= new_method; } } return me->allow; } return METHOD_INVALID; } PUBLIC void HTAnchor_setAllow (HTParentAnchor * me, HTMethod methodset) { if (me) me->allow = methodset; } PUBLIC void HTAnchor_appendAllow (HTParentAnchor * me, HTMethod methodset) { if (me) me->allow |= methodset; } /* ** Title */ PUBLIC const char * HTAnchor_title (HTParentAnchor * me) { if (me) { if (me->title) return *me->title ? me->title : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "title"); char * title; if ((title = HTNextField(&value))) StrAllocCopy(me->title, title); return me->title; } } return NULL; } PUBLIC void HTAnchor_setTitle (HTParentAnchor * me, const char * title) { if (me && title) { char * ptr; StrAllocCopy(me->title, title); ptr = me->title; while (*ptr) { if (isspace((int) *ptr)) *ptr = ' '; ptr++; } } } PUBLIC void HTAnchor_appendTitle (HTParentAnchor * me, const char * title) { if (me && title) StrAllocCat(me->title, title); } /* ** Version */ PUBLIC char * HTAnchor_version (HTParentAnchor * me) { if (me) { if (me->version) return *me->version ? me->version : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "version"); char * version; if ((version = HTNextField(&value))) StrAllocCopy(me->version, version); return me->version; } } return NULL; } PUBLIC void HTAnchor_setVersion (HTParentAnchor * me, const char * version) { if (me && version) StrAllocCopy(me->version, version); } /* ** Derived from */ PUBLIC char * HTAnchor_derived (HTParentAnchor * me) { if (me) { if (me->derived_from) return *me->derived_from ? me->derived_from : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "derived-from"); char * derived_from; if ((derived_from = HTNextField(&value))) StrAllocCopy(me->derived_from, derived_from); return me->derived_from; } } return NULL; } PUBLIC void HTAnchor_setDerived (HTParentAnchor * me, const char *derived_from) { if (me && derived_from) StrAllocCopy(me->derived_from, derived_from); } /* ** Content MD5 */ PUBLIC char * HTAnchor_md5 (HTParentAnchor * me) { if (me) { if (me->content_md5) return *me->content_md5 ? me->content_md5 : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "content-md5"); char * md5; if ((md5 = HTNextField(&value))) StrAllocCopy(me->content_md5,md5); return me->content_md5; } } return NULL; } PUBLIC BOOL HTAnchor_setMd5 (HTParentAnchor * me, const char * hash) { if (me && hash) { StrAllocCopy(me->content_md5, hash); return YES; } return NO; } /* ** Date */ PUBLIC time_t HTAnchor_date (HTParentAnchor * me) { if (me) { if (me->date == (time_t) -1 && me->headers) { char * value = HTAssocList_findObject(me->headers, "date"); if (value) me->date = HTParseTime(value, NULL, YES); } return me->date; } return (time_t) -1; } PUBLIC void HTAnchor_setDate (HTParentAnchor * me, const time_t date) { if (me) me->date = date; } /* ** Expires */ PUBLIC time_t HTAnchor_expires (HTParentAnchor * me) { if (me) { if (me->expires == (time_t) -1 && me->headers) { char * value = HTAssocList_findObject(me->headers, "expires"); if (value) me->expires = HTParseTime(value, NULL, YES); } return me->expires; } return (time_t) -1; } PUBLIC void HTAnchor_setExpires (HTParentAnchor * me, const time_t expires) { if (me) me->expires = expires; } /* ** Last Modified */ PUBLIC time_t HTAnchor_lastModified (HTParentAnchor * me) { if (me) { if (me->last_modified == (time_t) -1 && me->headers) { char * value = HTAssocList_findObject(me->headers,"last-modified"); if (value) me->last_modified = HTParseTime(value, NULL, YES); } return me->last_modified; } return (time_t) -1; } PUBLIC void HTAnchor_setLastModified (HTParentAnchor * me, const time_t lm) { if (me) me->last_modified = lm; } /* ** Age */ PUBLIC time_t HTAnchor_age (HTParentAnchor * me) { if (me) { if (me->age == (time_t) -1 && me->headers) { char * value = HTAssocList_findObject(me->headers, "age"); if (value) me->age = atol(value); } return me->age; } return (time_t) -1; } PUBLIC void HTAnchor_setAge (HTParentAnchor * me, const time_t age) { if (me) me->age = age; } /* ** Entity Tag */ PUBLIC char * HTAnchor_etag (HTParentAnchor * me) { if (me) { if (me->etag) return *me->etag ? me->etag : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "etag"); char * etag; if ((etag = HTNextField(&value))) StrAllocCopy(me->etag, etag); return me->etag; } } return me ? me->etag : NULL; } PUBLIC void HTAnchor_setEtag (HTParentAnchor * me, const char * etag) { /* JK: add a new etag if it doesn't exist or if the value has changed */ if (me && etag && ((me->etag == NULL) || strcmp (me->etag, etag))) StrAllocCopy(me->etag, etag); } PUBLIC BOOL HTAnchor_isEtagWeak (HTParentAnchor * me) { return (me && me->etag && !strncasecomp(me->etag, "W/", 2)); } /* ** Original headers (if any) */ PUBLIC HTAssocList * HTAnchor_header (HTParentAnchor * me) { return me ? me->headers : NULL; } PUBLIC BOOL HTAnchor_setHeader (HTParentAnchor * me, HTAssocList * headers) { if (me) { me->headers = headers; return YES; } return NO; } /* ** Validate anchor values and finish up parsing */ PUBLIC void HTAnchor_setHeaderParsed (HTParentAnchor * me) { if (me) { HTTRACE(ANCH_TRACE, "HTAnchor.... Anchor is parsed\n"); me->header_parsed = YES; } } PUBLIC BOOL HTAnchor_headerParsed (HTParentAnchor * me) { return (me ? me->header_parsed : NO); } /* Clear Header Information ** ------------------------ */ PUBLIC void HTAnchor_clearHeader (HTParentAnchor * me) { HTTRACE(ANCH_TRACE, "HTAnchor.... Clear all header information\n"); me->allow = METHOD_INVALID; if (me->content_encoding) { HTList_delete(me->content_encoding); me->content_encoding = NULL; } if (me->content_language) { HTList_delete(me->content_language); me->content_language = NULL; } HT_FREE(me->content_base); HT_FREE(me->content_location); me->content_length = -1; /* Invalid */ /* Delete the title */ HT_FREE(me->title); /* Clear the content type */ me->content_type = WWW_UNKNOWN; if (me->type_parameters) { HTAssocList_delete(me->type_parameters); me->type_parameters = NULL; } /* Meta tags */ if (me->meta_tags) { HTAssocList_delete(me->meta_tags); me->meta_tags = NULL; } /* Dates etc. */ me->date = (time_t) -1; me->expires = (time_t) -1; me->last_modified = (time_t) -1; me->age = (time_t) -1; HT_FREE(me->derived_from); HT_FREE(me->version); HT_FREE(me->etag); /* Delete any original headers */ if (me->headers) HTAssocList_delete(me->headers); me->headers = NULL; } libwww/Library/src/HTAnchor.html0100644000076400001440000004372707142504622016317 0ustar danielusers W3C Sample Code Library libwww Anchor Class

    The Anchor Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    An anchor represents a region of a hypertext document which is linked to another anchor in the same or a different document. Another name for anchors would be URLs as an anchor represents all we know about a URL - including where it points to and who points to it. Because the anchor objects represent the part of the Web, the application has been in touch, it is often useful to maintain the anchors throughout the lifetime of the application. It would actually be most useful if we had persistent anchors so that an application could build up a higher knowledge about the Web topology.

    When to Escape and Unescape Addresses

    The URI escape policy in libwww is that all URIs created as anchors must already have been escaped. The reason for this is that if URIs are not escaped then the URI parser is not guaranteed to work as expected. Imagine, for example, that you have a ":" in a host name, then you could get something like this: http://my:host:8000/ instead of http://my%3Ahost:8000/.

    Libwww provides support for escaping and unescaping URIs using this set of APIs.

    This module is implemented by HTAnchor.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTANCHOR_H
    #define HTANCHOR_H
    

    Types defined and used by the Anchor Object

    This is a set of videly used type definitions used through out the Library:

    #include "WWWUtil.h"
    typedef HTAtom * HTFormat;
    typedef HTAtom * HTLevel;		       /* Used to specify HTML level */
    typedef HTAtom * HTEncoding;				    /* C-E and C-T-E */
    typedef HTAtom * HTCharset;
    typedef HTAtom * HTLanguage;
    typedef struct _HTAnchor	HTAnchor;
    typedef struct _HTParentAnchor	HTParentAnchor;
    typedef struct _HTChildAnchor	HTChildAnchor;
    #include "HTLink.h"
    #include "HTMethod.h"
    #include "HTResponse.h"
    

    The Anchor Class

    We have three variants of the Anchor object - I guess some would call them superclass and subclasses ;-)

    Anchor Base Class

    This is the super class of anchors. We often use this as an argument to the functions that both accept parent anchors and child anchors. We separate the first link from the others to avoid too many small mallocs involved by a list creation. Most anchors only point to one place.

    Anchor for a Parent Object

    These anchors points to the whole contents of any resource accesible by a URI. The parent anchor now contains all known metainformation about that object and in some cases the parent anchor also contains the document itself. Often we get the metainformation about a document via the entity headers in the HTTP specification.

    Anchor for a Child Object

    A child anchor is a anchor object that points to a subpart of a hypertext document. In HTML this is represented by the NAME tag of the Anchor element.

    After we have defined the data structures we must define the methods that can be used on them. All anchors are kept in an internal hash table so that they are easier to find again.

    Find/Create a Parent Anchor

    This one is for a reference (link) which is found in a document, and might not be already loaded. The parent anchor returned can either be created on the spot or is already in the hash table.

    extern HTAnchor * HTAnchor_findAddress		(const char * address);
    

    Find/Create a Child Anchor

    This one is for a new child anchor being edited into an existing document. The parent anchor must already exist but the child returned can either be created on the spot or is already in the hash table. The tag is the part that's after the '#' sign in a URI.

    extern HTChildAnchor * HTAnchor_findChild	(HTParentAnchor *parent,
    						 const char *	tag);
    

    Find/Create a Child Anchor and Link to Another Parent

    Find a child anchor anchor with a given parent and possibly a tag, and (if passed) link this child to the URI given in the href. As we really want typed links to the caller should also indicate what the type of the link is (see HTTP spec for more information). The link is relative to the address of the parent anchor.

    extern HTChildAnchor * HTAnchor_findChildAndLink (
    		HTParentAnchor * parent,		/* May not be 0 */
    		const char * tag,			/* May be "" or 0 */
    		const char * href,			/* May be "" or 0 */
    		HTLinkType ltype);			/* May be 0 */
    

    Delete an Anchor

    All outgoing links from parent and children are deleted, and this anchor is removed from the sources list of all its targets. We also delete the targets. If this anchor's source list is empty, we delete it and its children.

    extern BOOL HTAnchor_delete	(HTParentAnchor *me);
    

    Clear all Anchors

    Deletes all the metadata associated with anchors but doesn't delete the anchor link structure itself. This is much safer than deleting the complete anchor structure as this represents the complete Web the application has been in touch with. It also returns a list of all the objects (hyperdoc) hanging of the parent anchors found while doing it. These are not deleted by libwww.

    extern BOOL HTAnchor_clearAll (HTList * documents);
    

    Delete all Anchors

    Deletes all anchors and return a list of all the objects (hyperdoc) hanging of the parent anchors found while doing it. The application may keep its own list of HyperDocs, but this function returns it anyway. It is always for the application to delete any HyperDocs. If NULL then no hyperdocs are returned. Return YES if OK, else NO.

    Note: This function is different from cleaning up the history list!

    extern BOOL HTAnchor_deleteAll	(HTList * objects);
    

    Flatten all anchors into Array

    Flattens the anchor web structure into an array. This is useful for calculating statistics, sorting the parent anchors etc.

    The caller can indicate the size of the array (total number of anchors if known - otherwise 0).

    Return an array that must be freed by the caller or NULL if no anchors.

    extern HTArray * HTAnchor_getArray (int growby);
    

    Links and Anchors

    Anchor objects are bound together by Link objects that carry information about what type of link and whetther we have followed the link etc. Any anchor object can have zero, one, or many links but the normal case is one. Therefore we treat this is a special way.

    Handling the Main Link

    Any outgoing link can at any time be the main destination.

    extern BOOL HTAnchor_setMainLink	(HTAnchor * anchor, HTLink * link);
    extern HTLink * HTAnchor_mainLink	(HTAnchor * anchor);
    extern HTAnchor * HTAnchor_followMainLink (HTAnchor * anchor);
    

    Handling the Sub Links

    extern BOOL HTAnchor_setSubLinks	(HTAnchor * anchor, HTList * list);
    extern HTList * HTAnchor_subLinks	(HTAnchor * anchor);
    

    Search for a Link Type

    Links can have relations (indicated by the "rel" or "rev" HTML link attributes). This function can search an anchor looking for a specific type, for example "stylesheet".
    extern HTLink * HTAnchor_findLinkType (HTAnchor * me, HTLinkType type);
    

    Relations Between Children and Parents

    As always, children and parents have a compliated relationship and the libwww Anchor class is no exception.

    Who is Parent?

    For parent anchors this returns the anchor itself

    extern HTParentAnchor * HTAnchor_parent	(HTAnchor *me);
    

    Does it have any Anchors within it?

    Does this parent anchor have any children

    extern BOOL HTAnchor_hasChildren	(HTParentAnchor *me);
    

    Is this anchor a Child?

    extern BOOL HTAnchor_isChild (HTAnchor * me);
    

    Get the Tag/Fragment/View of this anchor

    If this is a child anchor then it has a tag (often also called a "fragment"), which is essentially a specific view of a document. This is why I like to call it a view instead of a fragment. The string returned (if non-NULL) must be freed by the caller.
    extern char * HTAnchor_view (HTAnchor * me);
    

    Anchor Addresses

    There are two addresses of an anchor. The URI that was passed when the anchor was crated and the physical address that's used when the URI is going to be requested. The two addresses may be different if the request is going through a proxy or a gateway or it may have been mapped through a rule file.

    Logical Address

    Returns the full URI of the anchor, child or parent as a malloc'd string to be freed by the caller as when the anchor was created.

    extern char * HTAnchor_address		(HTAnchor * me);
    

    Expanded Logical Address

    When expanding URLs within a hypertext document, the base address is taken as the following value if present (in that order):

    • Content-Base header
    • Content-Location header
    • Logical address
    extern char * HTAnchor_expandedAddress  (HTAnchor * me);
    

    Physical address

    Contains the physical address after we haved looked for proxies etc.

    extern char * HTAnchor_physical		(HTParentAnchor * me);
    extern void HTAnchor_setPhysical	(HTParentAnchor * me, char * protocol);
    extern void HTAnchor_clearPhysical	(HTParentAnchor * me);
    

    Entity Body Information

    A parent anchor can have a data object bound to it. This data object does can for example be a parsed version of a HTML that knows how to present itself to the user, or it can be an unparsed data object. It's completely free for the application to use this possibility, but a typical usage would to manage the data object as part of a memory cache.

    extern void HTAnchor_setDocument	(HTParentAnchor *me, void * doc);
    extern void * HTAnchor_document		(HTParentAnchor *me);
    

    Entity Header Information

    The anchor object also contains all the metainformation that we know about the object.

    Clear All header Information

    extern void HTAnchor_clearHeader	(HTParentAnchor *me);
    

    Inherit Metainformation from the Response object

    Once we have decided to cache the object we transfer already parsed metainformation from the HTResponse object to the anchor object and also the unparsed headers as we may wanna use that information later.

    extern BOOL HTAnchor_update (HTParentAnchor * me, HTResponse * response);
    

    Is the Anchor searchable?

    extern void HTAnchor_clearIndex		(HTParentAnchor * me);
    extern void HTAnchor_setIndex		(HTParentAnchor * me);
    extern BOOL HTAnchor_isIndex		(HTParentAnchor * me);
    

    Anchor Title

    We keep the title in the anchor as we then can refer to it later in the history list etc. We can also obtain the title element if it is passed as a HTTP header in the response. Any title element found in an HTML document will overwrite a title given in a HTTP header.

    extern const char * HTAnchor_title	(HTParentAnchor *me);
    extern void HTAnchor_setTitle		(HTParentAnchor *me,
    					 const char *	title);
    extern void HTAnchor_appendTitle	(HTParentAnchor *me,
    					 const char *	title);
    

    Meta Tags within the Document

    extern HTAssocList * HTAnchor_meta (HTParentAnchor * me);
    extern BOOL HTAnchor_addMeta (HTParentAnchor * me,
    			      const char * name, const char * value);
    

    The Robots Meta tag

    A special case function that looks for any robots meta tag. This tag contains information about which links a robot can traverse and which it shouldn't.
    extern char * HTAnchor_robots (HTParentAnchor * me);
    

    Content Base

    The Content-Base header may be used for resolving relative URLs within the entity. If it there is no Content-Base header then we use the Content-Location if present and absolute.

    extern char * HTAnchor_base	(HTParentAnchor * me);
    extern BOOL HTAnchor_setBase 	(HTParentAnchor * me, char * base);
    

    Content Location

    Content location can either be an absolute or a relative URL. The URL may be either absolute or relative. If it is relative then we parse it relative to the Content-Base header of the request URI if any, otherwise we use the Request URI.

    extern char * HTAnchor_location		(HTParentAnchor * me);
    extern BOOL HTAnchor_setLocation	(HTParentAnchor * me, char * location);
    

    Media Types (Content-Type)

    extern HTFormat HTAnchor_format		(HTParentAnchor *me);
    extern void HTAnchor_setFormat		(HTParentAnchor *me,
    					 HTFormat	form);
    

    Content Type Parameters

    The Anchor obejct stores all content parameters in an Association list so here you will always be able to find them. We also have a few methods for the special cases: charset and level as they are often needed.

    extern HTAssocList * HTAnchor_formatParam (HTParentAnchor * me);
    extern BOOL HTAnchor_addFormatParam 	(HTParentAnchor * me,
    					const char * name, const char * value);
    

    Charset parameter to Content-Type

    extern HTCharset HTAnchor_charset	(HTParentAnchor *me);
    extern BOOL HTAnchor_setCharset		(HTParentAnchor *me,
    					 HTCharset	charset);
    

    Level parameter to Content-Type

    extern HTLevel HTAnchor_level		(HTParentAnchor * me);
    extern BOOL HTAnchor_setLevel		(HTParentAnchor * me,
    					 HTLevel	level);
    

    Content Language

    extern HTList * HTAnchor_language	(HTParentAnchor * me);
    extern BOOL HTAnchor_addLanguage	(HTParentAnchor *me, HTLanguage lang);
    extern BOOL HTAnchor_deleteLanguageAll  (HTParentAnchor * me);
    

    Content Encoding

    extern HTList * HTAnchor_encoding	(HTParentAnchor * me);
    extern BOOL HTAnchor_addEncoding	(HTParentAnchor * me, HTEncoding enc);
    extern BOOL HTAnchor_deleteEncoding     (HTParentAnchor * me, HTEncoding enc);
    extern BOOL HTAnchor_deleteEncodingAll  (HTParentAnchor * me);
    #define HTAnchor_removeEncoding(a, e)   HTAnchor_deleteEncoding((a), (e))
    

    Content Transfer Encoding

    extern HTEncoding HTAnchor_contentTransferEncoding	(HTParentAnchor *me);
    extern void HTAnchor_setContentTransferEncoding	        (HTParentAnchor *me,
    				 	                 HTEncoding	cte);
    

    Content Length

    extern long int HTAnchor_length	(HTParentAnchor * me);
    extern void HTAnchor_setLength	(HTParentAnchor * me, long int length);
    extern void HTAnchor_addLength	(HTParentAnchor * me, long int deltalength);
    

    Content MD5

    extern char * HTAnchor_md5	(HTParentAnchor * me);
    extern BOOL HTAnchor_setMd5	(HTParentAnchor * me, const char * hash);
    

    Allowed methods (Allow)

    extern HTMethod HTAnchor_allow   (HTParentAnchor * me);
    extern void HTAnchor_setAllow    (HTParentAnchor * me, HTMethod methodset);
    extern void HTAnchor_appendAllow (HTParentAnchor * me, HTMethod methodset);
    

    Version

    extern char * HTAnchor_version	(HTParentAnchor * me);
    extern void HTAnchor_setVersion	(HTParentAnchor * me, const char * version);
    

    Date

    Returns the date that was registered in the RFC822 header "Date"

    extern time_t HTAnchor_date		(HTParentAnchor * me);
    extern void HTAnchor_setDate		(HTParentAnchor	* me, const time_t date);
    

    Last Modified Date

    Returns the date that was registered in the RFC822 header "Last-Modified"

    extern time_t HTAnchor_lastModified	(HTParentAnchor * me);
    extern void HTAnchor_setLastModified	(HTParentAnchor	* me, const time_t lm);
    

    Entity Tag

    Entity tags are used for comparing two or more entities from the same requested resource. It is a cache validator much in the same way Date can be. The difference is that we can't always trust the date and time stamp and hence we must have something stronger.

    extern char * HTAnchor_etag 	(HTParentAnchor * me);
    extern void HTAnchor_setEtag	(HTParentAnchor * me, const char * etag);
    extern BOOL HTAnchor_isEtagWeak	(HTParentAnchor * me);
    

    Age Header

    The Age response-header field conveys the sender's estimate of the amount of time since the response (or its revalidation) was generated at the origin server. A cached response is "fresh" if its age does not exceed its freshness lifetime.

    extern time_t HTAnchor_age    (HTParentAnchor * me);
    extern void HTAnchor_setAge   (HTParentAnchor * me, const time_t age);
    

    Expires Date

    extern time_t HTAnchor_expires		(HTParentAnchor * me);
    extern void HTAnchor_setExpires		(HTParentAnchor	* me, const time_t exp);
    

    Derived from

    extern char * HTAnchor_derived	(HTParentAnchor *me);
    extern void HTAnchor_setDerived	(HTParentAnchor *me, const char *derived_from);
    

    Status of Header Parsing

    This is primarily for internal use. It is so that we can check whether the header has been parsed or not.

    extern BOOL HTAnchor_headerParsed	(HTParentAnchor *me);
    extern void HTAnchor_setHeaderParsed	(HTParentAnchor *me);
    

    Original Response Headers

    The MIME parser may add the original response headers as (name,value) pairs.

    extern BOOL HTAnchor_setHeader       (HTParentAnchor * me, HTAssocList * list);
    extern HTAssocList * HTAnchor_header (HTParentAnchor * me);
    
    #endif /* HTANCHOR_H */
    


    @(#) $Id: HTAnchor.html,v 2.61 2025/08/04 09:14:58 kahan Exp $
    libwww/Library/src/HTArray.c0100644000076400001440000000374006523414255015434 0ustar danielusers/* HTArray.c ** ARRAY HANDLING: FLEXIBLE ARRAYS OF POINTERS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTArray.c,v 2.7 2025/05/04 19:36:13 frystyk Exp $ ** ** history: Sep 95 HFN Written after looking at Hancock Tower */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTArray.h" /* Implemented here */ /* Create a array with a certain allocation unit ** -------------- */ PUBLIC HTArray * HTArray_new (int grow) { HTArray * array; if ((array = (HTArray *) HT_CALLOC(1, sizeof(HTArray))) == NULL) HT_OUTOFMEM("HTArray_new"); array->growby = grow; return array; } /* Clear a array of all data ** -------------------------- */ PUBLIC BOOL HTArray_clear (HTArray * array) { if (array) { HT_FREE(array->data); array->size = 0; array->allocated = 0; return YES; } return NO; } /* Free an array ** ------------- */ PUBLIC BOOL HTArray_delete (HTArray * array) { if (array) { HT_FREE(array->data); HT_FREE(array); return YES; } return NO; } /* Add an object ** ------------- */ PUBLIC BOOL HTArray_addObject (HTArray * array, void * object) { if (array) { if (array->size >= array->allocated-1) { if (array->data) { if ((array->data = (void * *) HT_REALLOC(array->data, (array->allocated+array->growby) * sizeof(void *))) == NULL) HT_OUTOFMEM("HTArray_add"); memset((array->data+array->allocated), '\0', array->growby * sizeof(void *)); } else { if ((array->data = (void * *) HT_CALLOC(array->growby, sizeof(void *))) == NULL) HT_OUTOFMEM("HTArray_add"); } array->allocated += array->growby; } *(array->data+array->size++) = object; return YES; } return NO; } /* Sort an array ** ------------- */ PUBLIC BOOL HTArray_sort (HTArray * array, HTComparer * comp) { if (array && comp) { qsort(array->data, array->size, sizeof (void *), comp); return YES; } return NO; } libwww/Library/src/HTArray.html0100644000076400001440000000560507143510615016154 0ustar danielusers W3C Sample Code Library libwww Dynamic Array Pointer Class

    Dynamic Array Pointer Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    This module implements a flexible array of pointers. It is a general utility module. An array is a structure which may be extended. These routines create and append data to arrays, automatically reallocating them as necessary. It is garanteed that the last entry in an array is NULL This module is implemented by HTArray.c, and it is a part of the W3C Sample Code Library.
    #ifndef HTARRAY_H
    #define HTARRAY_H
    

    Private Data Structure

    This structure should not be referenced outside this module. If I find out I'll make it private ;-)
    typedef struct {
        int		size;		/* In numbers of elements	*/
        int		growby;		/* Allocation unit in elements	*/
        int		allocated;	/* Current size of *data	*/
        void **	data;		/* Pointer to malloced area or 0 */
    } HTArray;
    

    Create a new Array

    Create a new array and specify the number of bytes to allocate at a time when the array is later extended. Arbitrary but normally a trade-off time vs. memory
    extern HTArray * HTArray_new (int grow);
    

    Delete an Array

    Delete an array created by HTArray_new
    extern BOOL HTArray_delete (HTArray * array);
    

    Clear an Array

    Clears an array but keeps it around
    extern BOOL HTArray_clear (HTArray * array);
    

    Append an element to the Array

    Add the element to the array.
    extern BOOL HTArray_addObject (HTArray * array, void * object);
    

    Traverse an Array

    Fast macros to traverse a macro ending in a NULL element.
    #define HTArray_firstObject(me, dp) \
    	((me) && ((dp)=(me)->data) ? *(dp)++ : NULL)
    #define HTArray_nextObject(me, dp) \
    	((me) && (dp) ? *(dp)++ : NULL)
    

    Sort an Array

    An array can be sorted in any way you like, for example with qsort(). This module provides an easy interface to the qsort() function using where you can define you own comparison routine as a function of the type:
    typedef int HTComparer (const void * a, const void * b);
    
    The sort function returns YES if sorting OK, else NO.
    extern BOOL HTArray_sort (HTArray * array, HTComparer * comp);
    

    Returns Data Vector

    Returns a pointer to the actual data
    #define HTArray_data(me)	((me) ? (me)->data : NULL)
    

    Return Current Size

    Returns the current size of the chunk
    #define HTArray_size(me)	((me) ? (me)->size : -1)
    
    #endif
    

    @(#) $Id: HTArray.html,v 2.8 2025/08/07 10:38:05 kahan Exp $
    libwww/Library/src/HTAssoc.c0100644000076400001440000000742407003556273015432 0ustar danielusers/* HTAssoc.c ** ASSOCIATION LIST FOR STORING NAME-VALUE PAIRS. ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTAssoc.c,v 2.21 2025/10/21 09:28:27 kahan Exp $ ** ** NAMES NOT CASE SENSITIVE, AND ONLY COMMON LENGTH ** IS CHECKED (allows abbreviations; well, length is ** taken from lookup-up name, so if table contains ** a shorter abbrev it is not found). ** AUTHORS: ** AL Ari Luotonen luotonen@dxcern.cern.ch ** HFN Henrik Frystyk frystyk@w3.org ** ** HISTORY: ** ** ** BUGS: ** ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTAssoc.h" /* Implemented here */ PUBLIC HTAssocList * HTAssocList_new (void) { return HTList_new(); } PUBLIC BOOL HTAssocList_delete (HTAssocList * list) { if (list) { HTAssocList *cur = list; HTAssoc *assoc; while (NULL != (assoc = (HTAssoc*)HTList_nextObject(cur))) { HT_FREE(assoc->name); HT_FREE(assoc->value); HT_FREE(assoc); } return HTList_delete(list); } return NO; } PUBLIC BOOL HTAssocList_addObject (HTAssocList * list, const char * name, const char * value) { if (list && name) { HTAssoc * assoc; if ((assoc = (HTAssoc *) HT_CALLOC(1, sizeof(HTAssoc))) == NULL) HT_OUTOFMEM("HTAssoc_add"); StrAllocCopy(assoc->name, name); if (value) StrAllocCopy(assoc->value, value); return HTList_addObject(list, (void *) assoc); } else { HTTRACE(UTIL_TRACE, "HTAssoc_add: ERROR: assoc list NULL!!\n"); } return NO; } PUBLIC BOOL HTAssocList_replaceObject (HTAssocList * list, const char * name, const char * value) { if (list && name) { HTAssocList * cur = list; HTAssoc * assoc; int len = strlen(name); while ((assoc = (HTAssoc *) HTList_nextObject(cur))) { if (!strncasecomp(assoc->name, name, len)) { StrAllocCopy(assoc->name, name); if (value) StrAllocCopy(assoc->value, value); return YES; } } return HTAssocList_addObject(list, name, value); } return NO; } PUBLIC char * HTAssocList_findObject (HTAssocList * list, const char * name) { if (list && name) { HTAssocList * cur = list; HTAssoc * assoc; int len = strlen(name); while ((assoc = (HTAssoc *) HTList_nextObject(cur))) { if (!strncasecomp(assoc->name, name, len)) return assoc->value; } } return NULL; } PUBLIC char * HTAssocList_findObjectExact (HTAssocList * list, const char * name) { if (list && name) { HTAssocList * cur = list; HTAssoc * assoc; while ((assoc = (HTAssoc *) HTList_nextObject(cur))) { if (!strcasecomp(assoc->name, name)) return assoc->value; } } return NULL; } PUBLIC char * HTAssocList_findObjectCaseSensitive (HTAssocList * list, const char * name) { if (list && name) { HTAssocList * cur = list; HTAssoc * assoc; int len = strlen(name); while ((assoc = (HTAssoc *) HTList_nextObject(cur))) { if (!strncmp(assoc->name, name, len)) return assoc->value; } } return NULL; } PUBLIC char * HTAssocList_findObjectCaseSensitiveExact (HTAssocList * list, const char * name) { if (list && name) { HTAssocList * cur = list; HTAssoc * assoc; while ((assoc = (HTAssoc *) HTAssocList_nextObject(cur))) { if (!strcmp(HTAssoc_name(assoc), name)) return HTAssoc_value(assoc); } } return NULL; } /* ** Searches the whole list and removes all elements with this name */ PUBLIC BOOL HTAssocList_removeObject (HTAssocList * list, const char * name) { BOOL found = NO; if (list && name) { HTAssocList * cur = list; HTAssoc * assoc; int len = strlen(name); while ((assoc = (HTAssoc *) HTList_nextObject(cur))) { if (!strncasecomp(assoc->name, name, len)) { HTList_removeObject(list, assoc); HT_FREE(assoc); found = YES; cur = list; } } } return found; } libwww/Library/src/HTAssoc.html0100644000076400001440000000755006706436750016162 0ustar danielusers W3C Sample Code Library libwww Association Pairs

    Association List For Storing Name-Value Pairs

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This Assoctiation List class is closely related to the HTList Class as it simply is a list of a specific list element containing a characters based name/value pair. Lookups from association list can be case sensitive and or prefix based.

    This module is implemented by HTAssoc.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTASSOC_H
    #define HTASSOC_H
    #include "HTList.h"
    typedef HTList HTAssocList;
    typedef struct {
        char * name;
        char * value;
    } HTAssoc;
    

    Creation and Deletetion Methods

    These methods create and deletes and association list

    extern HTAssocList * HTAssocList_new (void);
    extern BOOL 	     HTAssocList_delete (HTAssocList * alist);
    

    Add an Element to a List

    We have two methods for adding new elements - you can either add unconditionally or replace any existing element with the same name but a new value. In replacing an element, the search is case insensitive prefix match! A new list element is added to the beginning of the list so that it is the first element just after the head element.

    extern BOOL HTAssocList_addObject (
    	HTAssocList *	alist,
    	const char *	name,
    	const char *	value);
    extern BOOL HTAssocList_replaceObject (
    	HTAssocList *	list,
    	const char * 	name,
    	const char *	value);
    

    Remove an Element from a List

    Remove the element with the given name from the list. Search is case insensitive prefix match!

    extern BOOL HTAssocList_removeObject (
    	HTAssocList * 	list,
    	const char * 	name);
    

    Search for Element in a list

    We have a small set of methods for searching a specific element within a list.

    Case Insensitive, Prefix Match

    In many situations, the values of associations are case insensitive - use this method to search the list using case insensitive comparison. Also, you can search for matching prefixes and not the whole string, for example "foo" matches "football"

    extern char * HTAssocList_findObject (
    	HTAssocList *	alist,
    	const char *	name);
    

    Case Insensitive, Exact Match

    In case you want case insensitive, exact match

    extern char * HTAssocList_findObjectExact (
    	HTAssocList *	alist,
    	const char *	name);
    

    Case Sensitive, Prefix Match

    In case you want case sensitive, prefix match

    extern char * HTAssocList_findObjectCaseSensitive (
    	HTAssocList *	list,
    	const char *	name);
    

    Case Sensitive, Exact Match

    And finally if you want case sensitive, exact match

    extern char * HTAssocList_findObjectCaseSensitiveExact (
    	HTAssocList *	list,
    	const char * 	name);
    

    Get Name and Values

    Use this to get the name and value of a assoc object

    #define HTAssoc_name(me)	((me) ? (me)->name : NULL)
    #define HTAssoc_value(me)	((me) ? (me)->value : NULL)
    

    Traverse list

    Fast macro to traverse the list. Call it first with copy of list header: it returns the first object and increments the passed list pointer. Call it with the same variable until it returns NULL.

    #define	HTAssocList_nextObject(me) \
    	((me) && ((me) = (me)->next) ? (me)->object : NULL)
    
    #endif /* not HTASSOC_H */
    


    @(#) $Id: HTAssoc.html,v 2.18 2025/04/18 20:17:44 frystyk Exp $
    libwww/Library/src/HTAtom.c0100644000076400001440000001105206664352702015255 0ustar danielusers/* HTAtom.c ** ATOMS: STRINSGS TO NUMBERS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTAtom.c,v 2.31 2025/02/22 22:10:10 frystyk Exp $ ** ** Atoms are names which are given representative pointer values ** so that they can be stored more efficiently, and comparisons ** for equality done more efficiently. ** ** Atoms are kept in a hash table consisting of an array of linked lists. ** ** Authors: ** TBL Tim Berners-Lee, WorldWideWeb project, CERN ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTList.h" #include "HTAtom.h" PRIVATE HTAtom * hash_table[HT_XL_HASH_SIZE]; PRIVATE BOOL initialised = NO; /* ** Finds an atom representation for a string. The atom doesn't have to be ** a new one but can be an already existing atom. */ PUBLIC HTAtom * HTAtom_for (const char * string) { int hash; const unsigned char * p; HTAtom * a; if (!string) return NULL; /* prevent core dumps */ /* First time around, clear hash table */ if (!initialised) { memset((void *) hash_table, '\0', sizeof(HTAtom *) * HT_XL_HASH_SIZE); initialised = YES; } /* Generate hash function */ for (p=string, hash=0; *p; p++) { hash = (hash * 3 + TOLOWER(*p)) % HT_XL_HASH_SIZE; } /* Search for the string in the list */ for (a=hash_table[hash]; a; a=a->next) { if (0==strcmp(a->name, string)) { /* HTTRACE(UTIL_TRACE, "HTAtom: Old atom %p for `%s'\n" _ a _ string); */ return a; /* Found: return it */ } } /* Generate a new entry */ if ((a = (HTAtom *) HT_MALLOC(sizeof(*a))) == NULL) HT_OUTOFMEM("HTAtom_for"); if ((a->name = (char *) HT_MALLOC(strlen(string)+1)) == NULL) HT_OUTOFMEM("HTAtom_for"); strcpy(a->name, string); a->next = hash_table[hash]; /* Put onto the head of list */ hash_table[hash] = a; /* HTTRACE(UTIL_TRACE, "HTAtom: New atom %p for `%s'\n" _ a _ string); */ return a; } /* ** CASE INSENSITIVE VERSION OF HTAtom_for() ** Finds an atom representation for a string. The atom doesn't have to be ** a new one but can be an already existing atom. */ PUBLIC HTAtom * HTAtom_caseFor (const char * string) { int hash; const unsigned char * p; HTAtom * a; if (!string) return NULL; /* prevent core dumps */ /* First time around, clear hash table */ if (!initialised) { memset((void *) hash_table, '\0', sizeof(HTAtom *) * HT_XL_HASH_SIZE); initialised = YES; } /* Generate hash function */ for(p=string, hash=0; *p; p++) { hash = (hash * 3 + TOLOWER(*p)) % HT_XL_HASH_SIZE; } /* Search for the string in the list */ for (a=hash_table[hash]; a; a=a->next) { if (!strcasecomp(a->name, string)) { return a; /* Found: return it */ } } /* Generate a new entry */ if ((a = (HTAtom *) HT_MALLOC(sizeof(*a))) == NULL) HT_OUTOFMEM("HTAtom_for"); if ((a->name = (char *) HT_MALLOC(strlen(string)+1)) == NULL) HT_OUTOFMEM("HTAtom_for"); strcpy(a->name, string); a->next = hash_table[hash]; /* Put onto the head of list */ hash_table[hash] = a; return a; } /* ** This function cleans up the memory used by atoms. ** Written by Eric Sink, eric@spyglass.com */ PUBLIC void HTAtom_deleteAll (void) { int i; HTAtom *cur; HTAtom *next; for (i=0; inext; HT_FREE(cur->name); HT_FREE(cur); cur = next; } } } initialised = NO; } PRIVATE BOOL mime_match (const char * name, const char * templ) { if (name && templ) { static char *n1 = NULL; static char *t1 = NULL; char *n2; char *t2; StrAllocCopy(n1, name); /* These also HT_FREE the ones */ StrAllocCopy(t1, templ); /* from previous call. */ if (!(n2 = strchr(n1, '/')) || !(t2 = strchr(t1, '/'))) return NO; *(n2++) = (char)0; *(t2++) = (char)0; if ((0==strcmp(t1, "*") || 0==strcmp(t1, n1)) && (0==strcmp(t2, "*") || 0==strcmp(t2, n2))) return YES; } return NO; } PUBLIC HTList *HTAtom_templateMatches (const char * templ) { HTList *matches = HTList_new(); if (initialised && templ) { int i; HTAtom *cur; for (i=0; inext) { if (mime_match(cur->name, templ)) HTList_addObject(matches, (void*)cur); } } } return matches; } libwww/Library/src/HTAtom.html0100644000076400001440000000444407130400554015772 0ustar danielusers W3C Sample Code Library libwww Atom Class

    The Atom Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The Atom Class defines strings which are given representative pointer values so that they can be stored more efficiently, and comparisons for equality done more efficiently. The list of atoms is stored in a hash table, so when asking for a new atom you might in fact get back an existing one.

    Note: There are a whole bunch of MIME-types defined as atoms, so please use them!

    This module is implemented by HTAtom.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTATOM_H
    #define HTATOM_H
    #include "HTList.h"
    typedef struct _HTAtom HTAtom;
    struct _HTAtom {
    	HTAtom *	next;
    	char *		name;
    }; /* struct _HTAtom */
    

    Get an Atom

    This function returns a representative value (an atom) such that it will always (within one run of the program) return the same value for the same given string. The former is case sensitive, the latter is case insensitive.

    extern HTAtom * HTAtom_for	(const char * string);
    extern HTAtom * HTAtom_caseFor	(const char * string);
    

    Get Content of an Atom

    #define HTAtom_name(a) ((a) ? (a)->name : NULL)
    

    This macro returns the string pointed to by the atom.

    Search For Atoms

    Returns a list of atoms which matches the template given. It is especially made for MIME-types so that for example a template like text<slash><star> returns a list of all MIME-types of type text.

    extern HTList * HTAtom_templateMatches (const char * templ);
    

    Cleanup Memory

    In order to cleanup memory, call this function. This is done automaticly from the HTLibTerminate function.

    extern void HTAtom_deleteAll (void);
    #endif
    


    @(#) $Id: HTAtom.html,v 2.27 2025/07/04 15:23:24 kahan Exp $
    libwww/Library/src/HTBInit.c0100644000076400001440000002313706706437003015364 0ustar danielusers/* HTBInit.c ** STANDARD BINDINGS BETWEEN FILE SUFFIXES AND MEDIA TYPES ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTBInit.c,v 2.15 2025/04/18 20:18:11 frystyk Exp $ ** ** Define a basic set of suffixes and presentations */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTFormat.h" #include "HTBind.h" #include "HTBInit.h" /* Implemented here */ /* ------------------------------------------------------------------------- */ /* BINDINGS BETWEEN FILE EXTENSIONS AND MEDIA TYPES ** ------------------------------------------------ ** Not done automaticly - may be done by application! ** The LAST suffix for a type is that used for temporary files of that ** type. The quality is an apriori bias as to whether the file should be ** used. Not that different suffixes can be used to represent files ** which are of the same format but are originals or regenerated, ** with different values. ** ** C-T Content type ** C-T-E Content Transfer encoding ** C-E Content encoding */ PUBLIC void HTFileInit (void) { /* Suffix C-T C-E C-T-E Lang Quality */ HTBind_add("ai", "application/postscript", NULL, "8bit", NULL, 0.5); /* Adobe Illustrator */ HTBind_add("aif", "audio/x-aiff", NULL, "binary", NULL, 1.0); HTBind_add("aifc", "audio/x-aiff", NULL, "binary", NULL, 1.0); HTBind_add("aiff", "audio/x-aiff", NULL, "binary", NULL, 1.0); HTBind_add("au", "audio/basic", NULL, "binary", NULL, 1.0); HTBind_add("asf", "video/x-ms-asf", NULL, "binary", NULL, 1.0); /* MS Active Streaming */ HTBind_add("avi", "video/x-msvideo", NULL, "binary", NULL, 1.0); /* MS Video for Windows */ HTBind_add("bat", "application/octet-stream", NULL, "binary", NULL, 1.0); /* Uninterpreted binary */ HTBind_add("bcpio", "application/x-bcpio", NULL, "binary", NULL, 1.0); /* Old binary CPIO */ HTBind_add("bin", "application/octet-stream", NULL, "binary", NULL, 1.0); /* Uninterpreted binary */ HTBind_add("bmp", "image/bmp", NULL, "binary", NULL, 1.0); /* MS Windows bitmap */ HTBind_add("c", "text/plain", NULL, "7bit", NULL, 0.5); /* C source */ HTBind_add("cc", "text/plain", NULL, "7bit", NULL, 0.5); /* C++ source */ HTBind_add("cpp", "text/plain", NULL, "7bit", NULL, 0.5); /* C++ source */ HTBind_add("cdf", "application/x-netcdf", NULL, "binary", NULL, 1.0); HTBind_add("cgm", "image/cgm", NULL, "binary", NULL, 1.0); HTBind_add("conf", "application/x-www-rules", NULL, "8bit", NULL, 1.0); /* CONFIGURATION FILE */ HTBind_add("cpio", "application/x-cpio", NULL, "binary", NULL, 1.0); /* POSIX CPIO */ HTBind_add("csh", "application/x-csh", NULL, "7bit", NULL, 0.5); /* C-shell script */ HTBind_add("css", "text/css", NULL, "8bit", NULL, 1.0); /* CSS Stylesheet */ HTBind_add("dll", "application/octet-stream", NULL, "binary", NULL, 1.0); /* Uninterpreted binary */ HTBind_add("doc", "application/msword", NULL, "binary", NULL, 0.5); /* MS Word format */ HTBind_add("dot", "application/msword", NULL, "binary", NULL, 0.5); /* MS Word format */ HTBind_add("dvi", "application/x-dvi", NULL, "binary", NULL, 1.0); /* TeX DVI */ HTBind_add("eps", "application/postscript", NULL, "8bit", NULL, 0.8); HTBind_add("etx", "text/x-setext", NULL, "7bit", NULL, 0.9); /* Struct Enchanced Txt */ HTBind_add("exe", "application/octet-stream", NULL, "binary", NULL, 1.0); /* Uninterpreted binary */ HTBind_add("f90", "text/plain", NULL, "7bit", NULL, 0.5); /* Fortran 90 source */ HTBind_add("gif", "image/gif", NULL, "binary", NULL, 1.0); /* GIF */ HTBind_add("h", "text/plain", NULL, "7bit", NULL, 0.5); /* C headers */ HTBind_add("hdf", "application/x-hdf", NULL, "binary", NULL, 1.0); /* NCSA HDF data file */ HTBind_add("hh", "text/plain", NULL, "7bit", NULL, 0.5); /* C++ headers */ HTBind_add("htm", "text/html", NULL, "8bit", NULL, 1.0); /* HTML */ HTBind_add("html", "text/html", NULL, "8bit", NULL, 1.0); /* HTML */ HTBind_add("ief", "image/ief", NULL, "binary", NULL, 1.0); /* Image Exchange fmt */ HTBind_add("jpe", "image/jpeg", NULL, "binary", NULL, 1.0); HTBind_add("jpeg", "image/jpeg", NULL, "binary", NULL, 1.0); HTBind_add("jpg", "image/jpeg", NULL, "binary", NULL, 1.0); /* JPEG */ HTBind_add("latex", "text/latex", NULL, "8bit", NULL, 1.0); /* LaTeX source */ HTBind_add("m", "text/plain", NULL, "7bit", NULL, 0.5); /* Objective-C source */ HTBind_add("man", "application/x-troff-man", NULL, "7bit", NULL, 0.5); /* Troff with man macros*/ HTBind_add("me", "application/x-troff-me", NULL, "7bit", NULL, 0.5); /* Troff with me macros */ HTBind_add("mht", "message/rfc822", NULL, "8bit", NULL, 1.0); /* MHTML format */ HTBind_add("mhtml", "message/rfc822", NULL, "8bit", NULL, 1.0); /* MHTML format */ HTBind_add("mime", "message/rfc822", NULL, "8bit", NULL, 1.0); HTBind_add("mov", "video/quicktime", NULL, "binary", NULL, 1.0); HTBind_add("movie", "video/x-sgi-movie", NULL, "binary", NULL, 1.0); /* SGI "moviepalyer" */ HTBind_add("mpe", "video/mpeg", NULL, "binary", NULL, 1.0); HTBind_add("mpeg", "video/mpeg", NULL, "binary", NULL, 1.0); HTBind_add("mpg", "video/mpeg", NULL, "binary", NULL, 1.0); HTBind_add("ms", "application/x-troff-ms", NULL, "7bit", NULL, 0.5); /* Troff with ms macros */ HTBind_add("nc", "application/x-netcdf", NULL, "binary", NULL, 1.0); /* Unidata netCDF data */ HTBind_add("oda", "application/oda", NULL, "binary", NULL, 1.0); HTBind_add("pbm", "image/x-portable-bitmap", NULL, "binary", NULL, 1.0); /* PBM Bitmap format */ HTBind_add("pcu", "application/x-pics-user", NULL, "8bit", NULL, 1.0); /* PICS User */ HTBind_add("pdf", "application/pdf", NULL, "binary", NULL, 1.0); HTBind_add("pgm", "image/x-portable-graymap", NULL, "binary", NULL, 1.0); /* PBM Graymap format */ HTBind_add("pgp", "application/pgp-encrypted", NULL, "binary", NULL, 1.0); /* PGP encrypted */ HTBind_add("png", "image/png", NULL, "binary", NULL, 1.0); /* PNG */ HTBind_add("pnm", "image/x-portable-anymap", NULL, "binary", NULL, 1.0); /* PBM Anymap format */ HTBind_add("ppt", "application/vnd.ms-powerpoint",NULL, "binary", NULL, 0.5); /* MS Powerpoint */ HTBind_add("ps", "application/postscript", NULL, "8bit", NULL, 0.8); HTBind_add("qt", "video/quicktime", NULL, "binary", NULL, 1.0); /* QuickTime */ HTBind_add("ras", "image/cmu-raster", NULL, "binary", NULL, 1.0); HTBind_add("rdf", "text/rdf", NULL, "binary", NULL, 1.0); /* rdf */ HTBind_add("rgb", "image/x-rgb", NULL, "binary", NULL, 1.0); HTBind_add("roff", "application/x-troff", NULL, "7bit", NULL, 0.5); HTBind_add("rtf", "text/rtf", NULL, "7bit", NULL, 1.0); /* RTF */ HTBind_add("rtx", "text/richtext", NULL, "7bit", NULL, 1.0); /* MIME Richtext format */ HTBind_add("sh", "application/x-sh", NULL, "7bit", NULL, 0.5); /* Shell-script */ HTBind_add("sig", "application/pgp-signature", NULL, "binary", NULL, 1.0); /* PGP signature */ HTBind_add("shar", "application/x-shar", NULL, "8bit", NULL, 1.0); /* Shell archive */ HTBind_add("snd", "audio/basic", NULL, "binary", NULL, 1.0); /* Audio */ HTBind_add("src", "application/x-wais-source", NULL, "7bit", NULL, 1.0); /* WAIS source */ HTBind_add("sv4cpio","application/x-sv4cpio", NULL, "binary", NULL, 1.0); /* SVR4 CPIO */ HTBind_add("sv4crc","application/x-sv4crc", NULL, "binary", NULL, 1.0); /* SVR4 CPIO with CRC */ HTBind_add("t", "application/x-troff", NULL, "7bit", NULL, 0.5); /* Troff */ HTBind_add("tar", "application/tar", NULL, "binary", NULL, 1.0); /* 4.3BSD tar */ HTBind_add("tar", "application/x-tar", NULL, "binary", NULL, 1.0); /* 4.3BSD tar */ HTBind_add("tcl", "application/x-tcl", NULL, "7bit", NULL, 0.5); /* TCL-script */ HTBind_add("tex", "text/tex", NULL, "8bit", NULL, 1.0); /* TeX source */ HTBind_add("texi", "application/x-texinfo", NULL, "7bit", NULL, 1.0); /* Texinfo */ HTBind_add("tif", "image/tiff", NULL, "binary", NULL, 1.0); /* TIFF */ HTBind_add("tiff", "image/tiff", NULL, "binary", NULL, 1.0); HTBind_add("tr", "application/x-troff", NULL, "7bit", NULL, 0.5); HTBind_add("tsv", "text/tab-separated-values", NULL, "7bit", NULL, 1.0); /* Tab-separated values */ HTBind_add("txt", "text/plain", NULL, "7bit", NULL, 0.5); /* Plain text */ HTBind_add("ustar", "application/x-ustar", NULL, "binary", NULL, 1.0); /* POSIX tar */ HTBind_add("wav", "audio/x-wav", NULL, "binary", NULL, 1.0); /* Windows+ WAVE format */ HTBind_add("xbm", "image/x-xbitmap", NULL, "binary", NULL, 1.0); /* X bitmap */ HTBind_add("xls", "application/vnd.ms-excel", NULL, "binary", NULL, 0.5); /* MS Excel */ HTBind_add("xml", "application/xml", NULL, "binary", NULL, 1.0); /* xml */ HTBind_add("xpm", "image/x-xpixmap", NULL, "binary", NULL, 1.0); /* X pixmap format */ HTBind_add("xwd", "image/x-xwindowdump", NULL, "binary", NULL, 1.0); /* X window dump (xwd) */ HTBind_add("zip", "application/zip", NULL, "binary", NULL, 1.0); /* PKZIP */ HTBind_add("Z", NULL, "compress", "binary", NULL, 1.0); /* Compressed data */ HTBind_add("gz", NULL, "gzip", "binary", NULL, 1.0); /* Gnu Compressed data */ HTBind_add("*.*", "www/unknown", NULL, "binary", NULL, 0.1); /* Unknown suffix */ HTBind_add("*", "www/unknown", NULL, "7bit", NULL, 0.5); /* No suffix */ } libwww/Library/src/HTBInit.html0100644000076400001440000000347106526451210016101 0ustar danielusers W3C Sample Code Library libwww Media Type Initialization

    Default Media Type Initialization Module

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    As mentioned in the Library Architecture, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing RFC 822 headers etc. This module helps the application programmer setting up all this functionality, but it is important to note that none of it is required in order to use the Library.

    This module is implemented by HTBInit.c, and it is a part of the W3C Sample Code Library. You can also have a look at the other Initialization modules.

    #ifndef HTBINIT_H
    #define HTBINIT_H
    

    Default File Suffix Binding

    Register the default set of bindings between file suffixes and media types. This is used for example to guess the media type of a FTP URL of a local file URL.

    #include "WWWCore.h"
    extern void HTFileInit (void);
    
    #endif
    


    @(#) $Id: HTBInit.html,v 2.7 2025/05/14 02:10:16 frystyk Exp $
    libwww/Library/src/HTBTree.c0100644000076400001440000006442406651067527015375 0ustar danielusers/* HTBTree.c ** BINARY TREE FOR SORTING THINGS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTBTree.c,v 2.25 2025/01/19 11:41:11 frystyk Exp $ ** ** Authors: ** Arthur Secret ** ** 4 March 94: Bug fixed in the balancing procedure ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTBTree.h" #define MAXIMUM(a,b) ((a)>(b)?(a):(b)) struct _HTBTree_element { void *object; /* User object */ struct _HTBTree_element *up; struct _HTBTree_element *left; int left_depth; struct _HTBTree_element *right; int right_depth; }; struct _HTBTree { HTComparer * compare; struct _HTBTree_element * top; }; PUBLIC void * HTBTree_object (HTBTElement * element) { return element ? element->object : NULL; } PUBLIC HTBTree * HTBTree_new (HTComparer * comp) /********************************************************* ** This function returns an HTBTree with memory allocated ** for it when given a mean to compare things */ { HTBTree * tree; if ((tree = (HTBTree *) HT_CALLOC(1, sizeof(HTBTree))) == NULL) HT_OUTOFMEM("HTBTree_new"); tree->compare = comp; tree->top = NULL; return tree; } PRIVATE void HTBTElement_free (HTBTElement* element) /********************************************************** ** This void will HT_FREE the memory allocated for one element */ { if (element) { if (element->left != NULL) HTBTElement_free(element->left); if (element->right != NULL) HTBTElement_free(element->right); HT_FREE(element); } } PUBLIC void HTBTree_free (HTBTree* tree) /************************************************************** ** This void will HT_FREE the memory allocated for the whole tree */ { HTBTElement_free(tree->top); HT_FREE(tree); } PRIVATE void HTBTElementAndObject_free (HTBTElement* element) /********************************************************** ** This void will HT_FREE the memory allocated for one element */ { if (element) { /* Just in case nothing was in the tree anyway */ if (element->left != NULL) HTBTElementAndObject_free(element->left); if (element->right != NULL) HTBTElementAndObject_free(element->right); HT_FREE(element->object); HT_FREE(element); } } PUBLIC void HTBTreeAndObject_free (HTBTree* tree) /************************************************************** ** This void will HT_FREE the memory allocated for the whole tree */ { HTBTElementAndObject_free(tree->top); HT_FREE(tree); } /* ** This void is the core of HTBTree.c . It will ** 1/ add a new element to the tree at the right place ** so that the tree remains sorted ** 2/ balance the tree to be as fast as possible when reading it */ PUBLIC void HTBTree_add (HTBTree * tree, void * object) { HTBTElement * father_of_element; HTBTElement * added_element; HTBTElement * forefather_of_element; HTBTElement * father_of_forefather; BOOL father_found,top_found; int depth,depth2,corrections; /* father_of_element is a pointer to the structure that is the father of the ** new object "object". ** added_element is a pointer to the structure that contains or will contain ** the new object "object". ** father_of_forefather and forefather_of_element are pointers that are used ** to modify the depths of upper elements, when needed. ** ** father_found indicates by a value NO when the future father of "object" ** is found. ** top_found indicates by a value NO when, in case of a difference of depths ** < 2, the top of the tree is encountered and forbids any further try to ** balance the tree. ** corrections is an integer used to avoid infinite loops in cases ** such as: ** ** 3 3 ** 4 4 ** 5 5 ** ** 3 is used here to show that it need not be the top of the tree. */ /* ** 1/ Adding of the element to the binary tree */ if (tree->top == NULL) { if ((tree->top = (HTBTElement *) HT_MALLOC(sizeof(HTBTElement))) == NULL) HT_OUTOFMEM("HTBTree_add"); tree->top->up = NULL; tree->top->object = object; tree->top->left = NULL; tree->top->left_depth = 0; tree->top->right = NULL; tree->top->right_depth = 0; } else { father_found = YES; father_of_element = tree->top; added_element = NULL; father_of_forefather = NULL; forefather_of_element = NULL; while (father_found) { if (tree->compare(object,father_of_element->object)<0) { if (father_of_element->left != NULL) father_of_element = father_of_element->left; else { father_found = NO; if ((father_of_element->left = (HTBTElement *) HT_MALLOC(sizeof(HTBTElement))) == NULL) HT_OUTOFMEM("HTBTree_add"); added_element = father_of_element->left; added_element->up = father_of_element; added_element->object = object; added_element->left = NULL; added_element->left_depth = 0; added_element->right = NULL; added_element->right_depth = 0; } } if (tree->compare(object,father_of_element->object)>=0) { if (father_of_element->right != NULL) father_of_element = father_of_element->right; else { father_found = NO; if ((father_of_element->right = (HTBTElement *) HT_MALLOC(sizeof(HTBTElement))) == NULL) HT_OUTOFMEM("father_of_element->right "); added_element = father_of_element->right; added_element->up = father_of_element; added_element->object = object; added_element->left = NULL; added_element->left_depth = 0; added_element->right = NULL; added_element->right_depth = 0; } } } /* ** Changing of all depths that need to be changed */ father_of_forefather = father_of_element; forefather_of_element = added_element; do { if (father_of_forefather->left == forefather_of_element) { depth = father_of_forefather->left_depth; father_of_forefather->left_depth = 1 + MAXIMUM(forefather_of_element->right_depth, forefather_of_element->left_depth); depth2 = father_of_forefather->left_depth; } else { depth = father_of_forefather->right_depth; father_of_forefather->right_depth = 1 + MAXIMUM(forefather_of_element->right_depth, forefather_of_element->left_depth); depth2 = father_of_forefather->right_depth; } forefather_of_element = father_of_forefather; father_of_forefather = father_of_forefather->up; } while ((depth != depth2) && (father_of_forefather != NULL)); /* ** 2/ Balancing the binary tree, if necessary ** Bugs in this part have been fixed in March 94 - AS */ top_found = YES; corrections = 0; while ((top_found) && (corrections < 7)) { if ((abs(father_of_element->left_depth - father_of_element->right_depth)) < 2) { if (father_of_element->up != NULL) father_of_element = father_of_element->up; else top_found = NO; } else { /* We start the process of balancing */ corrections = corrections + 1; /* ** corrections is an integer used to avoid infinite ** loops in cases such as: ** ** 3 3 ** 4 4 ** 5 5 ** ** 3 is used to show that it need not be the top of the tree ** But let's avoid these two exceptions anyhow ** with the two following conditions (March 94 - AS) */ if ((father_of_element->left == NULL) && (father_of_element->right->right == NULL) && (father_of_element->right->left->left == NULL) && (father_of_element->right->left->right == NULL)) corrections = 7; if ((father_of_element->right == NULL) && (father_of_element->left->left == NULL) && (father_of_element->left->right->right == NULL) && (father_of_element->left->right->left == NULL)) corrections = 7; if (father_of_element->left_depth > father_of_element->right_depth) { added_element = father_of_element->left; father_of_element->left_depth = added_element->right_depth; added_element->right_depth = 1 + MAXIMUM(father_of_element->right_depth, father_of_element->left_depth); if (father_of_element->up != NULL) { /* Bug fixed in March 94 */ BOOL first_time; father_of_forefather = father_of_element->up; forefather_of_element = added_element; first_time = YES; do { if (father_of_forefather->left == forefather_of_element->up) { depth = father_of_forefather->left_depth; if (first_time) { father_of_forefather->left_depth = 1 + MAXIMUM(forefather_of_element->left_depth, forefather_of_element->right_depth); first_time = NO; } else father_of_forefather->left_depth = 1 + MAXIMUM(forefather_of_element->up->left_depth, forefather_of_element->up->right_depth); depth2 = father_of_forefather->left_depth; } else { depth = father_of_forefather->right_depth; if (first_time) { father_of_forefather->right_depth = 1 + MAXIMUM(forefather_of_element->left_depth, forefather_of_element->right_depth); first_time = NO; } else father_of_forefather->right_depth = 1 + MAXIMUM(forefather_of_element->up->left_depth, forefather_of_element->up->right_depth); depth2 = father_of_forefather->right_depth; } forefather_of_element = forefather_of_element->up; father_of_forefather = father_of_forefather->up; } while ((depth != depth2) && (father_of_forefather != NULL)); father_of_forefather = father_of_element->up; if (father_of_forefather->left == father_of_element) { /* ** 3 3 ** 4 5 ** When tree 5 6 becomes 7 4 ** 7 8 8 6 ** ** 3 is used to show that it may not be the top of the ** tree. */ father_of_forefather->left = added_element; father_of_element->left = added_element->right; added_element->right = father_of_element; } if (father_of_forefather->right == father_of_element) { /* ** 3 3 ** 4 5 ** When tree 5 6 becomes 7 4 ** 7 8 8 6 ** ** 3 is used to show that it may not be the top of the ** tree */ father_of_forefather->right = added_element; father_of_element->left = added_element->right; added_element->right = father_of_element; } added_element->up = father_of_forefather; } else { /* ** ** 1 2 ** When tree 2 3 becomes 4 1 ** 4 5 5 3 ** ** 1 is used to show that it is the top of the tree */ added_element->up = NULL; father_of_element->left = added_element->right; added_element->right = father_of_element; } father_of_element->up = added_element; if (father_of_element->left != NULL) father_of_element->left->up = father_of_element; } else { added_element = father_of_element->right; father_of_element->right_depth = added_element->left_depth; added_element->left_depth = 1 + MAXIMUM(father_of_element->right_depth, father_of_element->left_depth); if (father_of_element->up != NULL) /* Bug fixed in March 94 */ { BOOL first_time; father_of_forefather = father_of_element->up; forefather_of_element = added_element; first_time = YES; do { if (father_of_forefather->left == forefather_of_element->up) { depth = father_of_forefather->left_depth; if (first_time) { father_of_forefather->left_depth = 1 + MAXIMUM(forefather_of_element->left_depth, forefather_of_element->right_depth); first_time = NO; } else father_of_forefather->left_depth = 1 + MAXIMUM(forefather_of_element->up->left_depth, forefather_of_element->up->right_depth); depth2 = father_of_forefather->left_depth; } else { depth = father_of_forefather->right_depth; if (first_time) { father_of_forefather->right_depth = 1 + MAXIMUM(forefather_of_element->left_depth, forefather_of_element->right_depth); first_time = NO; } else father_of_forefather->right_depth = 1 + MAXIMUM(forefather_of_element->up->left_depth, forefather_of_element->up->right_depth); depth2 = father_of_forefather->right_depth; } father_of_forefather = father_of_forefather->up; forefather_of_element = forefather_of_element->up; } while ((depth != depth2) && (father_of_forefather != NULL)); father_of_forefather = father_of_element->up; if (father_of_forefather->left == father_of_element) { /* ** 3 3 ** 4 6 ** When tree 5 6 becomes 4 8 ** 7 8 5 7 ** ** 3 is used to show that it may not be the top of the ** tree. */ father_of_forefather->left = added_element; father_of_element->right = added_element->left; added_element->left = father_of_element; } if (father_of_forefather->right == father_of_element) { /* ** 3 3 ** 4 6 ** When tree 5 6 becomes 4 8 ** 7 8 5 7 ** ** 3 is used to show that it may not be the top of the ** tree */ father_of_forefather->right = added_element; father_of_element->right = added_element->left; added_element->left = father_of_element; } added_element->up = father_of_forefather; } else { /* ** ** 1 3 ** When tree 2 3 becomes 1 5 ** 4 5 2 4 ** ** 1 is used to show that it is the top of the tree. */ added_element->up = NULL; father_of_element->right = added_element->left; added_element->left = father_of_element; } father_of_element->up = added_element; if (father_of_element->right != NULL) father_of_element->right->up = father_of_element; } } } while (father_of_element->up != NULL) { father_of_element = father_of_element->up; } tree->top = father_of_element; } } /* ** this function returns a pointer to the leftmost element if ele is NULL, ** and to the next object to the right otherways. ** If no elements left, returns a pointer to NULL. */ PUBLIC HTBTElement * HTBTree_next(HTBTree * tree, HTBTElement * element) { HTBTElement * father_of_element; HTBTElement * father_of_forefather; if (!element) { father_of_element = tree->top; if (father_of_element != NULL) while (father_of_element->left != NULL) father_of_element = father_of_element->left; } else { father_of_element = element; if (father_of_element->right != NULL) { father_of_element = father_of_element->right; while (father_of_element->left != NULL) father_of_element = father_of_element->left; } else { father_of_forefather = father_of_element->up; while (father_of_forefather && (father_of_forefather->right == father_of_element)) { father_of_element = father_of_forefather; father_of_forefather = father_of_element->up; } father_of_element = father_of_forefather; } } #if 0 /* The option -DBTREE_TRACE will give much more information ** about the way the process is running, for debugging matters */ if (father_of_element != NULL) { HTTrace("\nObject = %s\t",(char *)father_of_element->object); if (father_of_element->up != NULL) HTTrace("Objet du pere = %s\n", (char *)father_of_element->up->object); else HTTrace("Pas de Pere\n"); if (father_of_element->left != NULL) HTTrace("Objet du fils gauche = %s\t", (char *)father_of_element->left->object); else HTTrace("Pas de fils gauche\t"); if (father_of_element->right != NULL) HTTrace("Objet du fils droit = %s\n", (char *)father_of_element->right->object); else HTTrace("Pas de fils droit\n"); HTTrace("Profondeur gauche = %i\t",father_of_element->left_depth); HTTrace("Profondeur droite = %i\n",father_of_element->right_depth); HTTrace(" **************\n"); } #endif return father_of_element; } #if 0 main () /****************************************************** ** This is just a test to show how to handle HTBTree.c */ { HTBTree * tree; HTBTElement * next_element; tree = HTBTree_new((HTComparer)strcasecomp); HTBTree_add(tree,"hypertext"); HTBTree_add(tree,"Addressing"); HTBTree_add(tree,"X11"); HTBTree_add(tree,"Tools"); HTBTree_add(tree,"Proposal.wn"); HTBTree_add(tree,"Protocols"); HTBTree_add(tree,"NeXT"); HTBTree_add(tree,"Daemon"); HTBTree_add(tree,"Test"); HTBTree_add(tree,"Administration"); HTBTree_add(tree,"LineMode"); HTBTree_add(tree,"DesignIssues"); HTBTree_add(tree,"MarkUp"); HTBTree_add(tree,"Macintosh"); HTBTree_add(tree,"Proposal.rtf.wn"); HTBTree_add(tree,"FIND"); HTBTree_add(tree,"Paper"); HTBTree_add(tree,"Tcl"); HTBTree_add(tree,"Talks"); HTBTree_add(tree,"Architecture"); HTBTree_add(tree,"VMSHelp"); HTBTree_add(tree,"Provider"); HTBTree_add(tree,"Archive"); HTBTree_add(tree,"SLAC"); HTBTree_add(tree,"Project"); HTBTree_add(tree,"News"); HTBTree_add(tree,"Viola"); HTBTree_add(tree,"Users"); HTBTree_add(tree,"FAQ"); HTBTree_add(tree,"WorkingNotes"); HTBTree_add(tree,"Windows"); HTBTree_add(tree,"FineWWW"); HTBTree_add(tree,"Frame"); HTBTree_add(tree,"XMosaic"); HTBTree_add(tree,"People"); HTBTree_add(tree,"All"); HTBTree_add(tree,"Curses"); HTBTree_add(tree,"Erwise"); HTBTree_add(tree,"Carl"); HTBTree_add(tree,"MidasWWW"); HTBTree_add(tree,"XPM"); HTBTree_add(tree,"MailRobot"); HTBTree_add(tree,"Illustrations"); HTBTree_add(tree,"VMClient"); HTBTree_add(tree,"XPA"); HTBTree_add(tree,"Clients.html"); HTBTree_add(tree,"Library"); HTBTree_add(tree,"CERNLIB_Distribution"); HTBTree_add(tree,"libHTML"); HTBTree_add(tree,"WindowsPC"); HTBTree_add(tree,"tkWWW"); HTBTree_add(tree,"tk2.3"); HTBTree_add(tree,"CVS-RCS"); HTBTree_add(tree,"DecnetSockets"); HTBTree_add(tree,"SGMLStream"); HTBTree_add(tree,"NextStep"); HTBTree_add(tree,"CVSRepository_old"); HTBTree_add(tree,"ArthurSecret"); HTBTree_add(tree,"CVSROOT"); HTBTree_add(tree,"HytelnetGate"); HTBTree_add(tree,"cern.www.new.src"); HTBTree_add(tree,"Conditions"); HTBTree_add(tree,"HTMLGate"); HTBTree_add(tree,"Makefile"); HTBTree_add(tree,"Newsgroups.html"); HTBTree_add(tree,"People.html"); HTBTree_add(tree,"Bugs.html"); HTBTree_add(tree,"Summary.html"); HTBTree_add(tree,"zDesignIssues.wn"); HTBTree_add(tree,"HT.draw"); HTBTree_add(tree,"HTandCERN.wn"); HTBTree_add(tree,"Ideas.wn"); HTBTree_add(tree,"MarkUp.wn"); HTBTree_add(tree,"Proposal.html"); HTBTree_add(tree,"SearchPanel.draw"); HTBTree_add(tree,"Comments.wn"); HTBTree_add(tree,"Xanadu.html"); HTBTree_add(tree,"Storinglinks.html"); HTBTree_add(tree,"TheW3Book.html"); HTBTree_add(tree,"Talk_Feb-91.html"); HTBTree_add(tree,"JFosterEntry.txt"); HTBTree_add(tree,"Summary.txt"); HTBTree_add(tree,"Bibliography.html"); HTBTree_add(tree,"HTandCern.txt"); HTBTree_add(tree,"Talk.draw"); HTBTree_add(tree,"zDesignNotes.html"); HTBTree_add(tree,"Link.html"); HTBTree_add(tree,"Status.html"); HTBTree_add(tree,"http.txt"); HTBTree_add(tree,"People.html~"); HTBTree_add(tree,"TAGS"); HTBTree_add(tree,"summary.txt"); HTBTree_add(tree,"Technical.html"); HTBTree_add(tree,"Terms.html"); HTBTree_add(tree,"JANETAccess.html"); HTBTree_add(tree,"People.txt"); HTBTree_add(tree,"README.txt"); HTBTree_add(tree,"CodingStandards.html"); HTBTree_add(tree,"Copyright.txt"); HTBTree_add(tree,"Status_old.html"); HTBTree_add(tree,"patches~"); HTBTree_add(tree,"RelatedProducts.html"); HTBTree_add(tree,"Implementation"); HTBTree_add(tree,"History.html"); HTBTree_add(tree,"Makefile.bak"); HTBTree_add(tree,"Makefile.old"); HTBTree_add(tree,"Policy.html"); HTBTree_add(tree,"WhatIs.html"); HTBTree_add(tree,"TheProject.html"); HTBTree_add(tree,"Notation.html"); HTBTree_add(tree,"Helping.html"); HTBTree_add(tree,"Cyber-WWW.sit.Hqx"); HTBTree_add(tree,"Glossary.html"); HTBTree_add(tree,"maketags.html"); HTBTree_add(tree,"IntroCS.html"); HTBTree_add(tree,"Contrib"); HTBTree_add(tree,"Help.html"); HTBTree_add(tree,"CodeManagExec"); HTBTree_add(tree,"HT-0.1draz"); HTBTree_add(tree,"Cello"); HTBTree_add(tree,"TOPUB"); HTBTree_add(tree,"BUILD"); HTBTree_add(tree,"BUILDALL"); HTBTree_add(tree,"Lynx"); HTBTree_add(tree,"ArthurLibrary"); HTBTree_add(tree,"RashtyClient"); HTBTree_add(tree,"#History.html#"); HTBTree_add(tree,"PerlServers"); HTBTree_add(tree,"modules"); HTBTree_add(tree,"NCSA_httpd"); HTBTree_add(tree,"MAIL2HTML"); HTBTree_add(tree,"core"); HTBTree_add(tree,"EmacsWWW"); HTTrace("\nTreeTopObject=%s\n\n",tree->top->object); next_element = HTBTree_next(tree,NULL); while (next_element != NULL) { HTTrace("The next element is %s\n",next_element->object); next_element = HTBTree_next(tree,next_element); } HTBTree_free (tree); } #endif libwww/Library/src/HTBTree.html0100644000076400001440000000341006526451210016066 0ustar danielusers W3C Sample Code Library libwww Balanced Binary Tree

    Balanced Binary Tree

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    Tree creation, traversal and freeing. User-supplied comparison routine.

    This module is implemented by HTBTree.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTBTTEE_H
    #define HTBTREE_H
    #include "HTArray.h"
    
    typedef struct _HTBTree HTBTree;
    typedef struct _HTBTree_element HTBTElement;
    

    Create a Binary Tree

    This function creates a new binary tree and uses the comparison function when building the tree.
    extern HTBTree * HTBTree_new (HTComparer * comp);
    

    Free storage of the tree but not of the objects

    extern void HTBTree_free (HTBTree * tree);
    

    Free storage of the tree and of the objects

    extern void HTBTreeAndObject_free (HTBTree * tree);
    

    Add an object to a binary tree

    extern void HTBTree_add (HTBTree* tree, void * object);
    

    Return an Object

    extern void * HTBTree_object (HTBTElement * element);
    

    Find next element in depth-first order

    On entry,

    If element is NULL then start with leftmost element. if not NULL then give next object to the right. The function returns a pointer to element or NULL if none left.
    extern HTBTElement * HTBTree_next (HTBTree * tree, HTBTElement * element);
    
    #endif
    

    @(#) $Id: HTBTree.html,v 2.19 2025/05/14 02:10:16 frystyk Exp $
    libwww/Library/src/HTBind.c0100644000076400001440000003576707144232674015253 0ustar danielusers/* Htbind.c ** FILE SUFFIX BIND MANAGER ** ** (c) COPYRIGHT MIT 1995 ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTBind.c,v 2.34 2025/08/09 10:43:08 kahan Exp $ ** ** This module sets up the binding between a file Bind and a media ** type, language, encoding etc. In a client application the Binds ** are used in protocols that does not support media types etc., like ** FTP, and in server applications they are used to make the bindings ** between the server and the local file store that the server can ** serve to the rest of the world (well almost). The HTFormat module ** holds this information against the accept headers received in a ** request and uses if for format negotiation. All the binding management ** can all be replace by a database interface. ** ** History: ** Feb 91 Written Tim Berners-Lee CERN/CN ** Apr 91 vms-vms access included using DECnet syntax ** 26 Jun 92 (JFG) When running over DECnet, suppressed FTP. ** Fixed access bug for relative names on VMS. ** Sep 93 (MD) Access to VMS files allows sharing. ** 15 Nov 93 (MD) Moved HTVMSname to HTVMSUTILS.C ** 22 Feb 94 (MD) Excluded two routines if we are not READING directories ** 18 May 94 (HF) Directory stuff removed and stream handling updated, ** error messages introduced etc. ** 10 Maj 95 HF Spawned off from HTFile in order to make it easier to ** override by a new module. It's now based on anchors ** and hash tables ** Bugs: */ /* Library Includes */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTAnchor.h" #include "HTResponse.h" #include "HTParse.h" #include "HTBind.h" /* Implemented here */ typedef struct _HTBind { char * suffix; HTFormat type; /* Content-Type */ HTEncoding encoding; /* Content-Encoding */ HTEncoding transfer; /* Content-Transfer-Encoding */ HTLanguage language; /* Content-Language */ double quality; } HTBind; /* Suffix registration */ PRIVATE BOOL HTCaseSen = YES; /* Are suffixes case sensitive */ PRIVATE char *HTDelimiters = NULL; /* Set of suffixes */ PRIVATE HTList **HTBindings = NULL; /* Point to table of lists of bindings */ PRIVATE HTBind no_suffix = { "*", NULL, NULL, NULL, NULL, 0.5 }; PRIVATE HTBind unknown_suffix = { "*.*", NULL, NULL, NULL, NULL, 0.5 }; /* ------------------------------------------------------------------------- */ /* ** Set up the list of suffix bindings. Done by HTLibInit */ PUBLIC BOOL HTBind_init (void) { if (!HTBindings) { if (!(HTBindings = (HTList **) HT_CALLOC(HT_L_HASH_SIZE, sizeof(HTList *)))) HT_OUTOFMEM("HTBind_init"); } StrAllocCopy(HTDelimiters, DEFAULT_SUFFIXES); no_suffix.type = WWW_UNKNOWN; no_suffix.encoding = WWW_CODING_BINARY; unknown_suffix.type = WWW_UNKNOWN; unknown_suffix.encoding = WWW_CODING_BINARY; return YES; } /* ** Cleans up the memory allocated by file bindings ** Done by HTLibTerminate(). ** Written by Eric Sink, eric@spyglass.com, and Henrik */ PUBLIC BOOL HTBind_deleteAll (void) { int cnt; HTList *cur; if (!HTBindings) return NO; for (cnt=0; cntsuffix); HT_FREE(pres); } } HTList_delete(HTBindings[cnt]); HTBindings[cnt] = NULL; } HT_FREE(HTBindings); HT_FREE(HTDelimiters); return YES; } /* Make suffix bindings case sensitive ** ----------------------------------- */ PUBLIC void HTBind_caseSensitive (BOOL sensitive) { HTCaseSen = sensitive; } /* Get set of suffixes ** ------------------- */ PUBLIC const char *HTBind_delimiters (void) { return HTDelimiters; } /* Change set of suffixes ** ---------------------- */ PUBLIC void HTBind_setDelimiters (const char * new_suffixes) { if (new_suffixes && *new_suffixes) StrAllocCopy(HTDelimiters, new_suffixes); } /* Define the representation associated with a file suffix ** ------------------------------------------------------- ** ** Calling this with suffix set to "*" will set the default ** representation. ** Calling this with suffix set to "*.*" will set the default ** representation for unknown suffix files which contain a "." ** ** If filename suffix is already defined its previous ** definition is overridden (or modified) */ PUBLIC BOOL HTBind_addType (const char * suffix, const char * representation, double value) { return HTBind_add(suffix, representation, NULL, NULL, NULL, value); } PUBLIC BOOL HTBind_addEncoding (const char * suffix, const char * encoding, double value) { return HTBind_add(suffix, NULL, encoding, NULL, NULL, value); } PUBLIC BOOL HTBind_addTransfer (const char * suffix, const char * transfer, double value) { return HTBind_add(suffix, NULL, NULL, transfer, NULL, value); } PUBLIC BOOL HTBind_addLanguage (const char * suffix, const char * language, double value) { return HTBind_add(suffix, NULL, NULL, NULL, language, value); } PUBLIC BOOL HTBind_add (const char * suffix, const char * representation, const char * encoding, const char * transfer, const char * language, double value) { HTBind * suff; if (!suffix) return NO; if (!strcmp(suffix, "*")) suff = &no_suffix; else if (!strcmp(suffix, "*.*")) suff = &unknown_suffix; else { HTList * suflist; int hash; const unsigned char * p; /* Select list from hash table */ for (p=suffix, hash=0; *p; p++) { hash = (hash * 3 + TOLOWER(*p)) % HT_L_HASH_SIZE; } if (!HTBindings) HTBind_init(); if (!HTBindings[hash]) HTBindings[hash] = HTList_new(); suflist = HTBindings[hash]; /* Look for existing binding */ { HTList *cur = suflist; while ((suff = (HTBind *) HTList_nextObject(cur)) != NULL) { if (!strcmp(suff->suffix, suffix)) break; } } /* If not found -- create a new node */ if (!suff) { if ((suff = (HTBind *) HT_CALLOC(1, sizeof(HTBind))) == NULL) HT_OUTOFMEM("HTBind_add"); HTList_addObject(suflist, (void *) suff); StrAllocCopy(suff->suffix, suffix); } } /* Set the appropriate values */ { HTChunk * chunk = HTChunk_new(32); char *ptr; if (representation) { HTChunk_puts(chunk, representation); ptr = HTChunk_data(chunk); for (; *ptr; ptr++) *ptr = TOLOWER(*ptr); suff->type = HTAtom_for(HTChunk_data(chunk)); HTChunk_truncate(chunk,0); } if (encoding) { HTChunk_puts(chunk, encoding); ptr = HTChunk_data(chunk); for (; *ptr; ptr++) *ptr = TOLOWER(*ptr); suff->encoding = HTAtom_for(HTChunk_data(chunk)); HTChunk_truncate(chunk,0); } if (transfer) { HTChunk_puts(chunk, transfer); ptr = HTChunk_data(chunk); for (; *ptr; ptr++) *ptr = TOLOWER(*ptr); suff->transfer = HTAtom_for(HTChunk_data(chunk)); HTChunk_truncate(chunk,0); } if (language) { HTChunk_puts(chunk, language); ptr = HTChunk_data(chunk); for (; *ptr; ptr++) *ptr = TOLOWER(*ptr); suff->language = HTAtom_for(HTChunk_data(chunk)); HTChunk_truncate(chunk,0); } HTChunk_delete(chunk); suff->quality = value; } return YES; } /* Determine a suitable suffix ** --------------------------- ** Use the set of bindings to find a suitable suffix (or index) ** for a certain combination of language, media type and encoding ** given in the anchor. ** ** Returns a pointer to a suitable suffix string that must be freed ** by the caller. If more than one suffix is found they are all ** concatenated using the first delimiter in HTDelimiters. ** If no suffix is found, NULL is returned. */ PUBLIC char * HTBind_getSuffix (HTParentAnchor * anchor) { int cnt; HTList * cur; HTChunk * suffix = HTChunk_new(48); char delimiter = *HTDelimiters; char * ct=NULL, * ce=NULL, * cl=NULL; HTFormat format = HTAnchor_format(anchor); HTList * encoding = HTAnchor_encoding(anchor); HTList * language = HTAnchor_language(anchor); if (!HTBindings) HTBind_init(); if (anchor) { for (cnt=0; cnttype && pres->type == format)){ ct = pres->suffix; } else if (!ce && pres->encoding && encoding) { HTList * cur_enc = encoding; HTEncoding pres_enc; while ((pres_enc = (HTEncoding) HTList_nextObject(cur_enc))) { if (pres_enc == pres->encoding) { ce = pres->suffix; break; } } } else if (!cl && pres->language && language) { HTList * cur_lang = language; HTLanguage pres_lang; while ((pres_lang = (HTLanguage) HTList_nextObject(cur_lang))) { if (pres_lang == pres->language) { cl = pres->suffix; break; } } } } } } /* Put the found suffixes together */ if (ct) { HTChunk_putc(suffix, delimiter); HTChunk_puts(suffix, ct); } if (ce) { HTChunk_putc(suffix, delimiter); HTChunk_puts(suffix, ce); } if (cl) { HTChunk_putc(suffix, delimiter); HTChunk_puts(suffix, cl); } } return HTChunk_toCString(suffix); } /* ** Use the set of bindings to find the combination of language, ** media type and encoding of a given object. This information can either be ** stored in the anchor obejct or in the response object depending on which ** function is called. ** ** We comprise here as bindings only can have one language and one encoding. ** If more than one suffix is found they are all searched. The last suffix ** has highest priority, the first one lowest. See also HTBind_getFormat() */ PUBLIC BOOL HTBind_getAnchorBindings (HTParentAnchor * anchor) { BOOL status = NO; double quality=1.0; /* @@@ Should we add this into the anchor? */ if (anchor) { char *addr = HTAnchor_address((HTAnchor *) anchor); char *path = HTParse(addr, "", PARSE_PATH+PARSE_PUNCTUATION); char *file; char *end; if ((end = strchr(path, ';')) || (end = strchr(path, '?')) || (end = strchr(path, '#'))) *end = '\0'; if ((file = strrchr(path, '/'))) { HTFormat format = NULL; HTEncoding encoding = NULL; HTEncoding transfer = NULL; HTLanguage language = NULL; HTTRACE(BIND_TRACE, "Anchor...... Get bindings for `%s\'\n" _ path); status = HTBind_getFormat(file, &format, &encoding, &transfer, &language, &quality); if (status) { HTAnchor_setFormat(anchor, format); HTAnchor_setContentTransferEncoding(anchor, transfer); HTAnchor_deleteEncodingAll(anchor); HTAnchor_addEncoding(anchor, encoding); HTAnchor_deleteLanguageAll(anchor); HTAnchor_addLanguage(anchor, language); } } HT_FREE(addr); HT_FREE(path); } return status; } PUBLIC BOOL HTBind_getResponseBindings (HTResponse * response, const char * url) { BOOL status = NO; double quality = 1.0; if (response) { char * path = HTParse(url, "", PARSE_PATH + PARSE_PUNCTUATION); char * file; char * end; if ((end = strchr(path, ';')) || (end = strchr(path, '?')) || (end = strchr(path, '#'))) *end = '\0'; if ((file = strrchr(path, '/'))) { HTFormat format = NULL; HTEncoding encoding = NULL; HTEncoding transfer = NULL; HTLanguage language = NULL; HTTRACE(BIND_TRACE, "Response.... Get Bindings for `%s\'\n" _ path); status = HTBind_getFormat(file, &format, &encoding, &transfer, &language, &quality); if (status) { HTResponse_setFormat(response, format); HTResponse_setContentTransferEncoding(response, transfer); HTResponse_addEncoding(response, encoding); #if 0 HTResponse_addLanguage(response, language); #endif } } HT_FREE(path); } return status; } /* Determine the content of an file name ** ------------------------------------- ** Use the set of bindings to find the combination of language, ** media type, encoding, and transfer encoding of a given anchor. ** If more than one suffix is found they are all searched. The last suffix ** has highest priority, the first one lowest. See also HTBind_getBindings() ** Either of format, encoding, or language can be NULL ** Returns the format, encoding, and language found */ PUBLIC BOOL HTBind_getFormat (const char * filename, HTFormat * format, HTEncoding * enc, HTEncoding * cte, HTLanguage * lang, double * quality) { int sufcnt=0; char *file=NULL; #ifdef HT_REENTRANT char *lasts; /* For strtok_r */ #endif if (!HTBindings) HTBind_init(); if (*quality < HT_EPSILON) *quality = 1.0; /* Set to a neutral value */ StrAllocCopy(file, filename); HTUnEscape(file); /* Unescape the file name */ #ifdef HT_REENTRANT if (strtok_r(file, HTDelimiters, &lasts)) { /* Do we have any suffixes? */ #else if (strtok(file, HTDelimiters)) { /* Do we have any suffixes? */ #endif /* HT_REENTRANT */ char *suffix; #ifdef HT_REENTRANT while ((suffix=(char*)strtok_r(NULL, HTDelimiters, &lasts)) != NULL) { #else while ((suffix=strtok(NULL, HTDelimiters)) != NULL) { #endif /* HT_REENTRANT */ HTBind *suff=NULL; int hash; unsigned char * p; HTTRACE(BIND_TRACE, "Get Binding. Look for '%s\' " _ suffix); sufcnt++; /* Select list from hash table */ for (p=suffix, hash=0; *p; p++) { hash = (hash * 3 + TOLOWER(*p)) % HT_L_HASH_SIZE; } /* Now search list for entries (case or non case sensitive) */ if (HTBindings[hash]) { HTList *cur = HTBindings[hash]; while ((suff = (HTBind *) HTList_nextObject(cur))) { if ((HTCaseSen && !strcmp(suff->suffix, suffix)) || !strcasecomp(suff->suffix, suffix)) { HTTRACE(BIND_TRACE, "Found!\n"); if (suff->type && format) *format = suff->type; if (suff->encoding && enc) *enc = suff->encoding; if (suff->transfer && cte) *cte = suff->transfer; if (suff->language && lang) *lang = suff->language; if (suff->quality > HT_EPSILON) *quality *= suff->quality; break; } } } if (!suff) { /* We don't have this suffix - use default */ HTTRACE(BIND_TRACE, "Not found - use default for \'*.*\'\n"); if (format) *format = unknown_suffix.type; if (enc) *enc = unknown_suffix.encoding; if (cte) *cte = unknown_suffix.transfer; if (lang) *lang = unknown_suffix.language; *quality = unknown_suffix.quality; } } /* while we still have suffixes */ } if (!sufcnt) { /* No suffix so use default value */ HTTRACE(BIND_TRACE, "Get Binding. No suffix found - using default '%s\'\n" _ filename); if (format) *format = no_suffix.type; if (enc) *enc = no_suffix.encoding; if (cte) *cte = no_suffix.transfer; if (lang) *lang = no_suffix.language; *quality = no_suffix.quality; } HTTRACE(BIND_TRACE, "Get Binding. Result for '%s\' is: type='%s\', encoding='%s\', cte='%s\', language='%s\' with quality %.2f\n" _ filename _ (format && *format) ? HTAtom_name(*format) : "unknown" _ (enc && *enc) ? HTAtom_name(*enc) : "unknown" _ (cte && *cte) ? HTAtom_name(*cte) : "unknown" _ (lang && *lang) ? HTAtom_name(*lang) : "unknown" _ *quality); HT_FREE(file); return YES; } libwww/Library/src/HTBind.html0100644000076400001440000001554506736503211015757 0ustar danielusers W3C Sample Code Library libwww File Suffix Binding

    File Suffix Binding Manager

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The preferences that we described in section Request Preferences did not mention what libwww should do if it doesn't know the data format of a document. In many protocols this information is provided by the remote server. Typical examples are MIME like protocols where the metainformation such as the Content-Type and the Content-Language is provided together with the document. However, applications often have access to the local file system using file URLs which in general do not keep any or at least very little information of the file type. It is therefore required to have some kind of binding between the file system and the preferences registered in the Library which provides this mateinformation about the object.

    Often files in a file system is classified by some sort of a suffix, for example, GIF files are often ending in .gif, text files in .txt etc. This binding is not static and it is therefore required to have a dynamic binding just like the preferences themselves. An example of the latter is HTML files which on most Unix systems end in .html whereas they on many MS-DOS based systems end in .htm.

    This module provides a generic binding mechanism between a file and its representation internally in libwww. It is not limited to simple file suffix classification but can also be used in more advanced environments using data bases etc. However, at this point we are interested in how we can register bindings between file suffixes and for example content types, content languages etc. The Bind manager is born with a certain knowledge about the set of delimiters but more can be added to provide the functionality desired.

    All the binding management could of course be replaced by a database interface.

    This module is implemented by HTBind.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTBIND_H
    #define HTBIND_H
    #include "HTFormat.h"
    #include "HTAnchor.h"
    

    Initialization of the Module

    These functions must be called on startup and termination of the application. This is done automatically by HTLibInit() and HTLibTerminate().

    extern BOOL HTBind_init		(void);
    extern BOOL HTBind_deleteAll	(void);
    

    Case Sensitivity

    Should the search for suffixes be case sensitive or not? The default value is case sensitive.

    extern void HTBind_caseSensitive	(BOOL sensitive);
    

    Suffix Delimiters

    Change the set of suffix delimiters. The default is a platform dependent set defined in the tcp module.

    extern const char *HTBind_delimiters	(void);
    extern void HTBind_setDelimiters	(const char * new_suffixes);
    

    Set up Bindings Associated with a File Suffix

    There are four types of bindings:

    • Content Type (media type)
    • Language
    • Content Encoding
    • Content Transfer Encoding

    And the associated set of methods is defined as:

    extern BOOL HTBind_add		(const char *	suffix,
    				 const char *	representation,
    				 const char *	encoding,
    				 const char *	transfer,
    				 const char *	language,
    				 double		value);
    extern BOOL HTBind_addType	(const char *	suffix,
    				 const char *	format,
    				 double		value);
    extern BOOL HTBind_addEncoding	(const char *	suffix,
    				 const char *	encoding,
    				 double		value);
    extern BOOL HTBind_addTransfer	(const char *	suffix,
    				 const char *	transfer,
    				 double		value);
    extern BOOL HTBind_addLanguage	(const char *	suffix,
    				 const char *	language,
    				 double		value);
    

    The first method is a "super" method for binding information to a file suffic. Any of the string values can be NULL. If filename suffix is already defined its previous definition is overridden or modified. For example, a HTBind_setType and HTBind_setEncoding can be called with the same suffix.

    Calling this with suffix set to "*" will set the default representation. Calling this with suffix set to "*.*" will set the default representation for unknown suffix files which contain a "."

    NOTE: The suffixes can contain characters that must be escaped in a URL. However, they should not be encoded when parsed as the suffix parameter.

    Determine a suitable suffix

    Use the set of bindings to find a suitable suffix (or index) for a certain combination of language, media type and encoding given in the anchor. Returns a pointer to a suitable suffix string that must be freed by the caller. If more than one suffix is found they are all concatenated. If no suffix is found, NULL is returned.

    extern char * HTBind_getSuffix	(HTParentAnchor * anchor);
    

    Determine the content of an Anchor

    Use the set of bindings to find the combination of language, media type and encoding of a given anchor. If more than one suffix is found they are all searched. The last suffix has highest priority, the first one lowest. Returns the HTAnchor object with the representations found. See also HTBind_getFormat

    extern BOOL HTBind_getAnchorBindings	(HTParentAnchor * anchor);
    

    Determine the content of a Response

    Use the set of bindings to find the combination of language, media type and encoding of a given anchor. If more than one suffix is found they are all searched. The last suffix has highest priority, the first one lowest. Returns the HTResponse object with the representations found. See also HTBind_getFormat

    extern BOOL HTBind_getResponseBindings	(HTResponse * response,
                                             const char * url);
    

    Determine the content of File

    Use the set of bindings to find the combination of language, media type and encoding of a given anchor. If more than one suffix is found they are all searched. The last suffix has highest priority, the first one lowest. Returns the format, encoding, and language found. See also HTBind_getBindings.

    extern BOOL HTBind_getFormat (const char *	filename,
    			      HTFormat *	format,
    			      HTEncoding *	enc,
    			      HTEncoding *	cte,
    			      HTLanguage *	lang,
    			      double *		quality);
    

    End of declaration module

    #endif /* HTBIND_H */
    


    @(#) $Id: HTBind.html,v 2.18 2025/06/30 21:05:13 frystyk Exp $
    libwww/Library/src/HTBound.c0100644000076400001440000001272306664352702015432 0ustar danielusers/* HTBound.c ** MIME MULTIPART PARSER STREAM ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTBound.c,v 2.14 2025/02/22 22:10:10 frystyk Exp $ ** ** This stream parses a MIME multipart stream and builds a set of new ** streams via the stream stack each time we encounter a boundary start. ** We get the boundary from the normal MIME parser via the Request object ** ** Authors ** HF Henrik Frystyk ** ** History: ** Nov 95 Written from scratch ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTMerge.h" #include "HTReqMan.h" #include "HTBound.h" /* Implemented here */ #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) #define PUTDEBUG(b, l) (*me->debug->isa->put_block)(me->debug, b, l) #define FREE_TARGET (*me->target->isa->_free)(me->target) struct _HTStream { const HTStreamClass * isa; HTStream * target; HTStream * orig_target; HTFormat format; HTStream * debug; /* For preamble and epilog */ HTRequest * request; BOOL body; /* Body or preamble|epilog */ HTEOLState state; int dash; /* Number of dashes */ char * boundary; char * bpos; }; /* ------------------------------------------------------------------------- */ PRIVATE int HTBoundary_put_block (HTStream * me, const char * b, int l) { const char *start = b; const char *end = b; while (l-- > 0) { if (me->state == EOL_FCR) { me->state = (*b == LF) ? EOL_FLF : EOL_BEGIN; } else if (me->state == EOL_FLF) { if (me->dash == 2) { while (l>0 && *me->bpos && *me->bpos==*b) l--, me->bpos++, b++; if (!*me->bpos) { HTTRACE(STREAM_TRACE, "Boundary.... `%s\' found\n" _ me->boundary); me->bpos = me->boundary; me->body = YES; me->state = EOL_DOT; } else if (l>0) { me->dash = 0; me->bpos = me->boundary; me->state = EOL_BEGIN; } } if (*b == '-') { me->dash++; } else if (*b != CR && *b != LF) { me->dash = 0; me->state = EOL_BEGIN; } } else if (me->state == EOL_SLF) { /* Look for closing '--' */ if (me->dash == 4) { if (end > start) { int status = PUTBLOCK(start, end-start); if (status != HT_OK) return status; } HTTRACE(STREAM_TRACE, "Boundary.... Ending\n"); start = b; me->dash = 0; me->state = EOL_BEGIN; } if (*b == '-') { me->dash++; } else if (*b != CR && *b != LF) { me->dash = 0; me->state = EOL_BEGIN; } me->body = NO; } else if (me->state == EOL_DOT) { int status; if (me->body) { if (me->target) FREE_TARGET; me->target = HTStreamStack(WWW_MIME,me->format, HTMerge(me->orig_target, 2), me->request, YES); if (end > start) { if ((status = PUTBLOCK(start, end-start)) != HT_OK) return status; } } else { if (me->debug) if ((status = PUTDEBUG(start, end-start)) != HT_OK) return status; } start = b; if (*b == '-') me->dash++; me->state = EOL_SLF; } else if (*b == CR) { me->state = EOL_FCR; end = b; } else if (*b == LF) { if (me->state != EOL_FCR) end = b; me->state = EOL_FLF; } b++; } return (startbody) ? PUTBLOCK(start, b-start) : HT_OK; } PRIVATE int HTBoundary_put_string (HTStream * me, const char * s) { return HTBoundary_put_block(me, s, (int) strlen(s)); } PRIVATE int HTBoundary_put_character (HTStream * me, char c) { return HTBoundary_put_block(me, &c, 1); } PRIVATE int HTBoundary_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int HTBoundary_free (HTStream * me) { int status = HT_OK; if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTTRACE(PROT_TRACE, "Boundary.... FREEING....\n"); HT_FREE(me->boundary); HT_FREE(me); return status; } PRIVATE int HTBoundary_abort (HTStream * me, HTList * e) { int status = HT_ERROR; if (me->target) status = (*me->target->isa->abort)(me->target, e); HTTRACE(PROT_TRACE, "Boundary.... ABORTING...\n"); HT_FREE(me->boundary); HT_FREE(me); return status; } PRIVATE const HTStreamClass HTBoundaryClass = { "HTBoundary", HTBoundary_flush, HTBoundary_free, HTBoundary_abort, HTBoundary_put_character, HTBoundary_put_string, HTBoundary_put_block }; PUBLIC HTStream * HTBoundary (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTResponse * response = HTRequest_response(request); HTParentAnchor * anchor = HTRequest_anchor(request); HTAssocList * type_param = response ? HTResponse_formatParam(response) : HTAnchor_formatParam(anchor); char * boundary = HTAssocList_findObject(type_param, "boundary"); if (boundary) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTBoundary"); me->isa = &HTBoundaryClass; me->request = request; me->format = output_format; me->orig_target = output_stream; me->debug = HTRequest_debugStream(request); me->state = EOL_FLF; StrAllocCopy(me->boundary, boundary); /* Local copy */ me->bpos = me->boundary; HTTRACE(STREAM_TRACE, "Boundary.... Stream created with boundary '%s\'\n" _ me->boundary); return me; } else { HTTRACE(STREAM_TRACE, "Boundary.... UNKNOWN boundary!\n"); return HTErrorStream(); } } libwww/Library/src/HTBound.html0100644000076400001440000000173006526451211016140 0ustar danielusers W3C Sample Code Library libwww MIME multipart parser stream

    MIME Multipart Parser Stream

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    This stream parses a MIME multipart stream and builds a set of new streams via the stream stack each time we encounter a boundary start. We get the boundary from the normal MIME parser via the Request object. As we keep a local copy this also work for nested multiparts.

    This module is implemented by HTBound.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTBOUND_H
    #define HTBOUND_H
    #include "HTFormat.h"
    extern HTConverter HTBoundary;
    #endif
    

    @(#) $Id: HTBound.html,v 2.5 2025/05/14 02:10:17 frystyk Exp $
    libwww/Library/src/HTBufWrt.c0100644000076400001440000002212106713343651015563 0ustar danielusers/* ** BUFFERED TRANSPORT WRITER STREAM ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTBufWrt.c,v 2.27 2025/05/03 15:58:33 frystyk Exp $ ** ** A buffered output stream. This stream lets you write characters to a ** stream without causing a write every time. The data is first written ** into a buffer. Data is written to the actual stream only when the ** buffer is full, or when the stream is flushed. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTNetMan.h" #include "HTWriter.h" #include "HTTimer.h" #include "HTBufWrt.h" /* Implemented here */ struct _HTOutputStream { const HTOutputStreamClass * isa; HTOutputStream * target; /* Target for outgoing data */ HTHost * host; int allocated; /* Allocated Buffer size */ int growby; int expo; char * read; /* Position in 'data' */ char * data; /* buffer */ ms_t lastFlushTime; /* polar coordinates of the moon */ HTTimer * timer; }; #define PUTBLOCK(b,l) (*me->target->isa->put_block)(me->target,(b),(l)) /* ------------------------------------------------------------------------- */ /* ** This function is only called from either FlushEvent or HTBufferWriter_lazyFlush ** which means that only the host object or timeout can cause a flush */ PRIVATE int HTBufferWriter_flush (HTOutputStream * me) { int status = HT_OK; if (me && me->read > me->data) { me->lastFlushTime = HTGetTimeInMillis(); if ((status = PUTBLOCK(me->data, me->read - me->data))==HT_WOULD_BLOCK) return HT_WOULD_BLOCK; me->read = me->data; } return status; } PRIVATE int FlushEvent (HTTimer * timer, void * param, HTEventType type) { HTOutputStream * me = (HTOutputStream *) param; if (me->timer && timer != me->timer) HTDEBUGBREAK("Buffer Writer timer %p not in sync\n" _ timer); HTTRACE(PROT_TRACE, "Buffer...... Timeout flushing %p with timer %p\n" _ me _ timer); /* ** We ignore the return code here which we shouldn't!!! */ HTBufferWriter_flush(me); /* ** Delete the timer */ HTTimer_delete(me->timer); me->timer = NULL; return HT_OK; } PRIVATE int HTBufferWriter_lazyFlush (HTOutputStream * me) { HTNet * net; int delay; if (me->read <= me->data) { return HT_OK; /* nothing to flush */ } /* ** If we are allowed to delay the flush then set a timer with the ** delay descibed by our delay variable. If we can't delay then flush ** right away. */ delay = HTHost_findWriteDelay(me->host, me->lastFlushTime, me->read - me->data); /* ** Flush immediately */ if (!delay) { int status; HTTRACE(STREAM_TRACE, "Buffer...... Flushing %p\n" _ me); if ((status = HTBufferWriter_flush(me)) && me->timer) { HTTimer_delete(me->timer); me->timer = NULL; } return status; } /* ** Set a timer and tell the host we've done the write if ** we have not already started a timer earlier. If a timer ** does already exist then make sure that it hasn't expired. ** This can be the case if we have a really slow client that ** can't parse the data fast enough. */ if (!me->timer) { net = HTHost_getWriteNet(me->host); me->timer = HTTimer_new(NULL, FlushEvent, me, delay, YES, NO); HTHost_unregister(me->host, net, HTEvent_WRITE); HTTRACE(STREAM_TRACE, "Buffer...... Waiting %dms on %p\n" _ delay _ me); } else { if (HTTimer_hasTimerExpired(me->timer)) { HTTRACE(STREAM_TRACE, "Buffer...... Dispatching old timer %p\n" _ me->timer); HTTimer_dispatch(me->timer); me->timer = NULL; } else { HTTRACE(STREAM_TRACE, "Buffer...... Waiting on unexpired timer %p\n" _ me->timer); } } return HT_OK; } PRIVATE int HTBufferWriter_free (HTOutputStream * me) { return HTBufferWriter_lazyFlush(me); } PRIVATE BOOL HTBufferWriter_addBuffer(HTOutputStream * me, int addthis) { if (me) { me->allocated += (addthis - addthis%me->growby + (me->growby*me->expo)); me->expo *= 2; HTTRACE(STREAM_TRACE, "Buffer...... Increasing buffer to %d bytes\n" _ me->allocated); if (me->data) { int size = me->read-me->data; if ((me->data = (char *) HT_REALLOC(me->data, me->allocated)) == NULL) HT_OUTOFMEM("HTBufferWriter_addBuffer"); me->read = me->data + size; } else { if ((me->data = (char *) HT_CALLOC(1, me->allocated)) == NULL) HT_OUTOFMEM("HTBufferWriter_addBuffer"); me->read = me->data; } return YES; } return NO; } PRIVATE int HTBufferWriter_abort (HTOutputStream * me, HTList * e) { HTTRACE(STREAM_TRACE, "Buffer...... ABORTING...\n"); if (me->timer) { HTTimer_delete(me->timer); me->timer = NULL; } if (me->target) (*me->target->isa->abort)(me->target, e); return HT_ERROR; } PRIVATE int HTBufferWriter_write (HTOutputStream * me, const char * buf, int len) { int status; while (1) { int available = me->data + me->allocated - me->read; /* If we have enough buffer space */ if (len <= available) { int size = 0; memcpy(me->read, buf, len); me->read += len; /* If we have accumulated enough data then flush */ if ((size = me->read - me->data) > me->growby) { me->lastFlushTime = HTGetTimeInMillis(); status = PUTBLOCK(me->data, size); if (status == HT_OK) { me->read = me->data; } else { return (status == HT_WOULD_BLOCK) ? HT_OK : HT_ERROR; } } return HT_OK; } else { /* Fill the existing buffer (if not already) and flush */ if (available) { memcpy(me->read, buf, available); buf += available; len -= available; me->read += available; } me->lastFlushTime = HTGetTimeInMillis(); status = PUTBLOCK(me->data, me->allocated); if (status == HT_OK) { me->read = me->data; } else if (status == HT_WOULD_BLOCK) { HTBufferWriter_addBuffer(me, len); memcpy(me->read, buf, len); me->read += len; return HT_OK; } } } } /* Character handling ** ------------------ */ PRIVATE int HTBufferWriter_put_character (HTOutputStream * me, char c) { return HTBufferWriter_write(me, &c, 1); } /* String handling ** --------------- ** ** Strings must be smaller than this buffer size. */ PRIVATE int HTBufferWriter_put_string (HTOutputStream * me, const char * s) { return HTBufferWriter_write(me, s, (int) strlen(s)); } /* ** The difference between the close and the free method is that we don't ** close the connection in the free method - we only call the free method ** of the target stream. That way, we can keep the output stream as long ** as the channel itself. */ PRIVATE int HTBufferWriter_close (HTOutputStream * me) { if (me) { if (me->timer) { HTTimer_delete(me->timer); me->timer = NULL; } if (me->target) (*me->target->isa->close)(me->target); HT_FREE(me->data); HT_FREE(me); } return HT_OK; } PRIVATE const HTOutputStreamClass HTBufferWriter = { "BufferedSocketWriter", HTBufferWriter_lazyFlush, HTBufferWriter_free, HTBufferWriter_abort, HTBufferWriter_put_character, HTBufferWriter_put_string, HTBufferWriter_write, HTBufferWriter_close }; PRIVATE HTOutputStream * buffer_new (HTHost * host, HTChannel * ch, void * param, int bufsize) { if (host && ch) { HTOutputStream * me = HTChannel_output(ch); if (!me) { HTOutputStream * me; int tcpbufsize = 0; #if defined(HAVE_GETSOCKOPT) && defined(SO_SNDBUF) /* ** Get the TCP socket buffer size */ { SOCKET sockfd = HTChannel_socket(ch); int size = sizeof(int); int status = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (void *) &tcpbufsize, &size); if (status == -1) { HTTRACE(STREAM_TRACE, "Socket...... Could not get TCP send buffer size for socket %d\n" _ sockfd); } else { HTTRACE(STREAM_TRACE, "Socket...... TCP send buffer size is %d for socket %d\n" _ tcpbufsize _ sockfd); } } #endif if (bufsize <= 0) bufsize = tcpbufsize ? tcpbufsize : OUTPUT_BUFFER_SIZE; if ((me = (HTOutputStream *) HT_CALLOC(1, sizeof(HTOutputStream)))==NULL || (me->data = (char *) HT_MALLOC(bufsize)) == NULL) HT_OUTOFMEM("HTBufferWriter_new"); me->isa = &HTBufferWriter; me->read = me->data; me->allocated = bufsize; me->growby = bufsize; me->expo = 1; me->host = host; return me; } } return NULL; } PUBLIC HTOutputStream * HTBufferWriter_new (HTHost * host, HTChannel * ch, void * param, int bufsize) { HTOutputStream * me = buffer_new(host, ch, param, bufsize); if (me) { me->target = HTWriter_new(host, ch, param, 0); return me; } return NULL; } PUBLIC HTOutputStream * HTBufferConverter_new (HTHost * host, HTChannel * ch, void * param, int bufsize, HTOutputStream * target) { if (target) { HTOutputStream * me = buffer_new(host, ch, param, bufsize); if (me) { me->target = target; return me; } } return NULL; } libwww/Library/src/HTBufWrt.html0100644000076400001440000000440706701527120016304 0ustar danielusers W3C Sample Code Library libwww Buffered Socket Writer Stream

    Buffered Socket Writer Stream

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The Buffered Socket Writer Stream is an output stream  which knows how to write to a BSD type socket. It is part of the Transport interface and may be registered as part of a Transport Object. The application can initialize this stream together with the HTReader stream, for example. In the default initialization module, you can find the HTTransportInit() function which sets up this stream as a default transport for handling unbuffered socket write operations.

    The difference from the unbuffered write stream is that this stream lets you write characters without causing a write system call every time. The data is first written into a buffer. Data is written to the transport only when the buffer is full, or when the stream is flushed.

    This module is implemented by HTBufWrt.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTBUFWRT_H
    #define HTBUFWRT_H
    #include "HTIOStream.h"
    

    Default Output Buffering

    In order to optimize reading a channel, we bind a buffer to each channel object. The size of this buffer is a compromise between speed and memory. By default, we have chosen a value frequently used in TCP connections. In the stream creation method you can pass any other buffer size. In the case of 0, we take the default size.

    #define OUTPUT_BUFFER_SIZE 1024
    

    Buffered Write Stream

    extern HTOutput_new HTBufferWriter_new;
    

    Buffered Write Converter Stream

    extern HTOutputConverter_new HTBufferConverter_new;
    
    #endif
    


    @(#) $Id: HTBufWrt.html,v 2.6 2025/04/04 00:12:00 frystyk Exp $
    libwww/Library/src/HTCache.c0100644000076400001440000021217107343442144015360 0ustar danielusers/* HTCache.c ** CACHE WRITER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTCache.c,v 2.76 2025/08/30 13:49:24 kahan Exp $ ** ** This modules manages the cache ** ** History: ** HFN: spawned from HTFwrite ** HWL: converted the caching scheme to be hierachical by taking ** AL code from Deamon ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWTrans.h" #include "WWWApp.h" #include "HTCache.h" /* Implemented here */ /* This is the default cache directory: */ #define HT_CACHE_LOC "/tmp/" #define HT_CACHE_ROOT "w3c-cache/" #define HT_CACHE_INDEX ".index" #define HT_CACHE_LOCK ".lock" #define HT_CACHE_META ".meta" #define HT_CACHE_EMPTY_ETAG "@w3c@" /* Default heuristics cache expirations - thanks to Jeff Mogul for good comments! */ #define NO_LM_EXPIRATION 24*3600 /* 24 hours */ #define MAX_LM_EXPIRATION 48*3600 /* Max expiration from LM */ /* ** If using LM to find the expiration then take 10% and no more than ** MAX_LM_EXPIRATION. */ #ifndef LM_EXPIRATION #define LM_EXPIRATION(t) (HTMIN((MAX_LM_EXPIRATION), (t) / 10)) #endif #define WARN_HEURISTICS 24*3600 /* When to issue a warning */ #define DUMP_FREQUENCY 10 /* Dump index every x loads */ #define MEGA 0x100000L #define HT_CACHE_TOTAL_SIZE 20 /* Default cache size is 20M */ #define HT_CACHE_FOLDER_PCT 10 /* 10% of cache size for metainfo etc. */ #define HT_CACHE_GC_PCT 10 /* 10% of cache size free after GC */ #define HT_MIN_CACHE_TOTAL_SIZE 5 /* 5M Min cache size */ #define HT_MAX_CACHE_ENTRY_SIZE 3 /* 3M Max sixe of single cached entry */ /* Final states have negative value */ typedef enum _CacheState { CL_ERROR = -3, CL_NO_DATA = -2, CL_GOT_DATA = -1, CL_BEGIN = 0, CL_NEED_BODY, CL_NEED_OPEN_FILE, CL_NEED_CONTENT } CacheState; /* This is the context structure for the this module */ typedef struct _cache_info { CacheState state; /* Current state of the connection */ char * local; /* Local representation of file name */ struct stat stat_info; /* Contains actual file chosen */ HTNet * net; HTTimer * timer; } cache_info; struct _HTCache { /* Location */ int hash; char * url; char * cachename; /* GC parameters */ char * etag; BOOL range; /* Is this the full part or a subpart? */ BOOL must_revalidate; int hits; /* Hit counts */ long size; /* Size of cached entity body */ time_t lm; /* Last modified */ time_t expires; time_t freshness_lifetime; time_t response_time; time_t corrected_initial_age; HTRequest * lock; }; struct _HTStream { const HTStreamClass * isa; FILE * fp; long bytes_written; /* Number of bytes written */ HTCache * cache; HTRequest * request; HTResponse * response; HTChunk * buffer; /* For index reading */ HTEOLState EOLstate; BOOL append; /* Creating or appending? */ }; struct _HTInputStream { const HTInputStreamClass * isa; }; /* Cache parameters */ PRIVATE BOOL HTCacheEnable = NO; /* Disabled by default */ PRIVATE BOOL HTCacheInitialized = NO; PRIVATE BOOL HTCacheProtected = YES; PRIVATE char * HTCacheRoot = NULL; /* Local Destination for cache */ PRIVATE HTExpiresMode HTExpMode = HT_EXPIRES_IGNORE; PRIVATE HTDisconnectedMode DisconnectedMode = HT_DISCONNECT_NONE; /* Heuristic expiration parameters */ PRIVATE int DefaultExpiration = NO_LM_EXPIRATION; /* List of cache entries */ PRIVATE HTList ** CacheTable = NULL; /* Cache size variables */ PRIVATE long HTCacheTotalSize = HT_CACHE_TOTAL_SIZE*MEGA; PRIVATE long HTCacheFolderSize = (HT_CACHE_TOTAL_SIZE*MEGA)/HT_CACHE_FOLDER_PCT; PRIVATE long HTCacheGCBuffer = (HT_CACHE_TOTAL_SIZE*MEGA)/HT_CACHE_GC_PCT; PRIVATE long HTCacheContentSize = 0L; PRIVATE long HTCacheMaxEntrySize = HT_MAX_CACHE_ENTRY_SIZE*MEGA; PRIVATE int new_entries = 0; /* Number of new entries */ PRIVATE HTNetBefore HTCacheFilter; PRIVATE HTNetAfter HTCacheUpdateFilter; PRIVATE HTNetAfter HTCacheCheckFilter; /* ------------------------------------------------------------------------- */ /* CACHE GARBAGE COLLECTOR */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL stopGC (void) { return (HTCacheContentSize + HTCacheFolderSize < HTCacheTotalSize - HTCacheGCBuffer); } PRIVATE BOOL startGC (void) { return (HTCacheContentSize + HTCacheFolderSize > HTCacheTotalSize); } PRIVATE BOOL HTCacheGarbage (void) { long old_size = HTCacheContentSize; HTTRACE(CACHE_TRACE, "Cache....... Garbage collecting\n"); if (CacheTable) { time_t cur_time = time(NULL); HTList * cur; int cnt; int hits; /* ** Tell the user that we're gc'ing. */ { HTAlertCallback * cbf = HTAlert_find(HT_PROG_OTHER); if (cbf) (*cbf)(NULL, HT_PROG_OTHER, HT_MSG_NULL,NULL, NULL, NULL); } /* ** Walk through and delete all the expired entries. If this is not ** sufficient then take the fresh ones which have the lowest cache ** hit count. This algorithm could be made a lot fancier by including ** the size and also the pain it took to get the document in the first ** case. It could also include max_stale. */ HTTRACE(CACHE_TRACE, "Cache....... Collecting Stale entries\n"); for (cnt=0; cntresponse_time; time_t current_age = pres->corrected_initial_age + resident_time; /* 2025-08-08 Jens Meggers: HTCache_remove doesn't remove a cache entry if it's locked. To avoid an endless loop, we check the return value of HTCache_remove before skipping the entry. */ if ((pres->freshness_lifetime < current_age) && HTCache_remove(pres)) { cur = old_cur; } else { old_cur = cur; } if (stopGC()) break; } } } /* ** We must at least free the min buffer size so that we don't ** dead lock ourselves. We start from the bottom up by taking ** all the documents with 0 hits, 1 hits, 2 hits, etc. */ HTTRACE(CACHE_TRACE, "Cache....... Collecting least used entries\n"); hits = 0; while (startGC()) { BOOL removed = NO; HTTRACE(CACHE_TRACE, "Cache....... Collecting entries with %d hits\n" _ hits); for (cnt=0; cntsize > HTCacheMaxEntrySize || pres->hits <= hits) && HTCache_remove(pres)) { cur = old_cur; removed = YES; } else { old_cur = cur; } if (stopGC()) break; } } } if (!removed) break; hits++; } HTTRACE(CACHE_TRACE, "Cache....... Size reduced from %ld to %ld\n" _ old_size _ HTCacheContentSize); /* ** Dump the new content to the index file */ HTCacheIndex_write(HTCacheRoot); new_entries = 0; return YES; } return NO; } /* ------------------------------------------------------------------------- */ /* CACHE INDEX */ /* ------------------------------------------------------------------------- */ PRIVATE char * cache_index_name (const char * cache_root) { if (cache_root) { char * location = NULL; if ((location = (char *) HT_MALLOC(strlen(cache_root) + strlen(HT_CACHE_INDEX) + 1)) == NULL) HT_OUTOFMEM("cache_index_name"); strcpy(location, cache_root); strcat(location, HT_CACHE_INDEX); return location; } return NULL; } /* ** Remove the cache index file */ PUBLIC BOOL HTCacheIndex_delete (const char * cache_root) { if (cache_root) { char * index = cache_index_name(cache_root); REMOVE(index); HT_FREE(index); return YES; } return NO; } /* ** Walk through the list of cached objects and save them to disk. ** We override any existing version but that is normally OK as we have ** already read its contents. */ PUBLIC BOOL HTCacheIndex_write (const char * cache_root) { if (cache_root && CacheTable) { char * index = cache_index_name(cache_root); FILE * fp = NULL; HTTRACE(CACHE_TRACE, "Cache Index. Writing index `%s\'\n" _ index); /* ** Open the file for writing. Note - we don't take a backup! ** This should probably be fixed! */ if (!index) return NO; if ((fp = fopen(index, "wb")) == NULL) { HTTRACE(CACHE_TRACE, "Cache Index. Can't open `%s\' for writing\n" _ index); HT_FREE(index); return NO; } /* ** Walk through the list and write it out. The format is really ** simple as we keep it all in ASCII. */ { HTList * cur; int cnt; for (cnt=0; cnturl, pres->cachename, pres->etag ? pres->etag : HT_CACHE_EMPTY_ETAG, (long) (pres->lm), (long) (pres->expires), pres->size, pres->range+0x30, pres->hash, pres->hits, (long) (pres->freshness_lifetime), (long) (pres->response_time), (long) (pres->corrected_initial_age), pres->must_revalidate+0x30) < 0) { HTTRACE(CACHE_TRACE, "Cache Index. Error writing cache index\n"); return NO; } } } } } /* Done writing */ fclose(fp); HT_FREE(index); } return NO; } /* ** Load one line of index file ** Returns YES if line OK, else NO */ PRIVATE BOOL HTCacheIndex_parseLine (char * line) { HTCache * cache = NULL; if (line) { char validate; char range; if ((cache = (HTCache *) HT_CALLOC(1, sizeof(HTCache))) == NULL) HT_OUTOFMEM("HTCacheIndex_parseLine"); /* ** Read the line and create the cache object */ { char * url = HTNextField(&line); char * cachename = HTNextField(&line); char * etag = HTNextField(&line); StrAllocCopy(cache->url, url); StrAllocCopy(cache->cachename, cachename); if (strcmp(etag, HT_CACHE_EMPTY_ETAG)) StrAllocCopy(cache->etag, etag); } #ifdef HAVE_LONG_TIME_T /* ** On some 64 bit machines (alpha) time_t is of type int and not long. ** This means that we have to adjust sscanf accordingly so that we ** know what we are looking for. Otherwise er may get unalignment ** problems. */ if (sscanf(line, "%ld %ld %ld %c %d %d %ld %ld %ld %c", #else if (sscanf(line, "%d %d %ld %c %d %d %d %d %d %c", #endif &cache->lm, &cache->expires, &cache->size, &range, &cache->hash, &cache->hits, &cache->freshness_lifetime, &cache->response_time, &cache->corrected_initial_age, &validate) < 0) { HTTRACE(CACHE_TRACE, "Cache Index. Error reading cache index\n"); return NO; } cache->range = range-0x30; cache->must_revalidate = validate-0x30; /* ** Create the new anchor and fill in the expire information we have read ** in the index. */ if (cache) { HTAnchor * anchor = HTAnchor_findAddress(cache->url); HTParentAnchor * parent = HTAnchor_parent(anchor); HTAnchor_setExpires(parent, cache->expires); HTAnchor_setLastModified(parent, cache->lm); if (cache->etag) HTAnchor_setEtag(parent, cache->etag); } /* ** Create the cache table if not already existent and add the new ** entry. Also check that the hash is still within bounds */ if (!CacheTable) { if ((CacheTable = (HTList **) HT_CALLOC(HT_XL_HASH_SIZE, sizeof(HTList *))) == NULL) HT_OUTOFMEM("HTCache_parseLine"); } if (cache->hash >= 0 && cache->hash < HT_XL_HASH_SIZE) { int hash = cache->hash; if (!CacheTable[hash]) CacheTable[hash] = HTList_new(); HTList_addObject(CacheTable[hash], (void *) cache); } /* Update the total cache size */ HTCacheContentSize += cache->size; return YES; } return NO; } /* ** Folding is either of CF LWS, LF LWS, CRLF LWS */ PRIVATE int HTCacheIndex_put_block (HTStream * me, const char * b, int l) { while (l > 0) { if (me->EOLstate == EOL_FCR) { if (*b == LF) /* CRLF */ me->EOLstate = EOL_FLF; else if (isspace((int) *b)) /* Folding: CR SP */ me->EOLstate = EOL_DOT; else { /* New line */ HTCacheIndex_parseLine(HTChunk_data(me->buffer)); me->EOLstate = EOL_BEGIN; HTChunk_clear(me->buffer); continue; } } else if (me->EOLstate == EOL_FLF) { if (isspace((int) *b)) /* Folding: LF SP or CR LF SP */ me->EOLstate = EOL_DOT; else { /* New line */ HTCacheIndex_parseLine(HTChunk_data(me->buffer)); me->EOLstate = EOL_BEGIN; HTChunk_clear(me->buffer); continue; } } else if (me->EOLstate == EOL_DOT) { if (isspace((int) *b)) { me->EOLstate = EOL_BEGIN; HTChunk_putc(me->buffer, ' '); } else { HTCacheIndex_parseLine(HTChunk_data(me->buffer)); me->EOLstate = EOL_BEGIN; HTChunk_clear(me->buffer); continue; } } else if (*b == CR) { me->EOLstate = EOL_FCR; } else if (*b == LF) { me->EOLstate = EOL_FLF; /* Line found */ } else HTChunk_putc(me->buffer, *b); l--; b++; } return HT_OK; } PRIVATE int HTCacheIndex_put_character (HTStream * me, char c) { return HTCacheIndex_put_block(me, &c, 1); } PRIVATE int HTCacheIndex_put_string (HTStream * me, const char * s) { return HTCacheIndex_put_block(me, s, (int) strlen(s)); } PRIVATE int HTCacheIndex_flush (HTStream * me) { if (me) { char * flush = HTChunk_data(me->buffer); if (flush) HTCacheIndex_parseLine(flush); HTChunk_clear(me->buffer); } return HT_OK; } PRIVATE int HTCacheIndex_free (HTStream * me) { if (me) { int status = HTCacheIndex_flush(me); HTTRACE(APP_TRACE, "Cache Index. FREEING....\n"); HTChunk_delete(me->buffer); HT_FREE(me); return status; } return HT_ERROR; } PRIVATE int HTCacheIndex_abort (HTStream * me, HTList * e) { if (me) { int status = HT_ERROR; HTTRACE(APP_TRACE, "Cache Index. ABORTING...\n"); HTChunk_delete(me->buffer); HT_FREE(me); return status; } return HT_ERROR; } /* Structured Object Class ** ----------------------- */ PRIVATE const HTStreamClass HTCacheIndexClass = { "CacheIndexParser", HTCacheIndex_flush, HTCacheIndex_free, HTCacheIndex_abort, HTCacheIndex_put_character, HTCacheIndex_put_string, HTCacheIndex_put_block }; PRIVATE HTStream * HTCacheIndexReader (HTRequest * request) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTCacheIndexs"); me->isa = &HTCacheIndexClass; me->request = request; me->buffer = HTChunk_new(512); me->EOLstate = EOL_BEGIN; return me; } /* ** Read the saved set of cached entries from disk. we only allow the index ** ro be read when there is no entries in memory. That way we can ensure ** consistancy. */ PUBLIC BOOL HTCacheIndex_read (const char * cache_root) { BOOL status = NO; if (cache_root && CacheTable == NULL) { BOOL wasInteractive; char * file = cache_index_name(cache_root); char * index = HTLocalToWWW(file, "cache:"); HTAnchor * anchor = HTAnchor_findAddress(index); HTRequest * request = HTRequest_new(); HTRequest_setPreemptive(request, YES); HTRequest_setOutputFormat(request, WWW_SOURCE); /* Make sure we don't use any filters */ HTRequest_addBefore(request, NULL, NULL, NULL, 0, YES); HTRequest_addAfter(request, NULL, NULL, NULL, HT_ALL, 0, YES); /* Set the output */ HTRequest_setOutputStream(request, HTCacheIndexReader(request)); HTRequest_setAnchor(request, anchor); HTAnchor_setFormat((HTParentAnchor *) anchor, HTAtom_for("www/cache-index")); wasInteractive = HTAlert_interactive(); HTAlert_setInteractive(NO); status = HTLoad(request, NO); HTAlert_setInteractive(wasInteractive); HTRequest_delete(request); HT_FREE(file); HT_FREE(index); } return status; } /* ------------------------------------------------------------------------- */ /* CACHE PARAMETERS */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL create_cache_root (const char * cache_root) { struct stat stat_info; char * loc = NULL; char * cur = NULL; BOOL create = NO; if (!cache_root) return NO; StrAllocCopy(loc, cache_root); /* Get our own copy */ #ifdef WWW_MSWINDOWS cur = *(loc+1) == ':' ? loc+3 : loc+1; #else cur = loc+1; #endif while ((cur = strchr(cur, DIR_SEPARATOR_CHAR))) { *cur = '\0'; if (create || HT_STAT(loc, &stat_info) == -1) { create = YES; /* To avoid doing stat()s in vain */ HTTRACE(CACHE_TRACE, "Cache....... Creating dir `%s\'\n" _ loc); if (MKDIR(loc, 0777) < 0) { HTTRACE(CACHE_TRACE, "Cache....... can't create\n"); HT_FREE(loc); return NO; } } else { HTTRACE(CACHE_TRACE, "Cache....... dir `%s\' already exists\n" _ loc); } *cur++ = DIR_SEPARATOR_CHAR; } HT_FREE(loc); return YES; } /* ** If `cache_root' is NULL then the current value (might be a define) ** Should we check if the cache_root is actually OK? I think not! */ PRIVATE BOOL HTCacheMode_setRoot (const char * cache_root) { if (cache_root) { if ((HTCacheRoot = HTWWWToLocal(cache_root, "file:", NULL)) == NULL) return NO; if (*(HTCacheRoot+strlen(HTCacheRoot)-1) != DIR_SEPARATOR_CHAR) StrAllocCat(HTCacheRoot, DIR_SEPARATOR_STR); } else { /* ** If no cache root has been indicated then look for a suitable ** location. */ char * addr = NULL; char * cr = (char *) getenv("WWW_CACHE"); if (!cr) cr = (char *) getenv("TMP"); if (!cr) cr = (char *) getenv("TEMP"); if (!cr) cr = HT_CACHE_LOC; addr = HTLocalToWWW(cr, NULL); if (*(addr+strlen(addr)-1) != DIR_SEPARATOR_CHAR) StrAllocCat(addr, DIR_SEPARATOR_STR); StrAllocCat(addr, HT_CACHE_ROOT); if (*(addr+strlen(addr)-1) != DIR_SEPARATOR_CHAR) StrAllocCat(addr, DIR_SEPARATOR_STR); if ((HTCacheRoot = HTWWWToLocal(addr, "file:", NULL)) == NULL) { HT_FREE(addr); return NO; } HT_FREE(addr); } if (create_cache_root(HTCacheRoot) == NO) return NO; HTTRACE(CACHE_TRACE, "Cache Root.. Local root set to `%s\'\n" _ HTCacheRoot); return YES; } /* ** Return the value of the cache root. The cache root can only be ** set through the HTCacheInit() function */ PUBLIC char * HTCacheMode_getRoot (void) { return HTLocalToWWW(HTCacheRoot, NULL); } /* ** As this is a single user cache, we have to lock it when in use. */ PRIVATE FILE *locked_open_file = {NULL}; PRIVATE BOOL HTCache_getSingleUserLock (const char * root) { if (root && !locked_open_file) { FILE * fp; char * location = NULL; if ((location = (char *) HT_MALLOC(strlen(root) + strlen(HT_CACHE_LOCK) + 1)) == NULL) HT_OUTOFMEM("HTCache_getLock"); strcpy(location, root); strcat(location, HT_CACHE_LOCK); if ((fp = fopen(location, "r")) != NULL) { HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM); HTTRACE(CACHE_TRACE, "Cache....... In `%s\' is already in use\n" _ root); fclose(fp); if (cbf) { BOOL result = (*cbf)(NULL, HT_A_CONFIRM, HT_MSG_CACHE_LOCK,NULL,location,NULL); if (result == YES) { REMOVE(location); } else { HT_FREE(location); return NO; } } else { HT_FREE(location); return NO; } } if ((fp = fopen(location, "w")) == NULL) { HTTRACE(CACHE_TRACE, "Cache....... Can't open `%s\' for writing\n" _ location); HT_FREE(location); return NO; } locked_open_file = fp; HT_FREE(location); return YES; } return NO; } /* ** Release the single user lock */ PRIVATE BOOL HTCache_deleteSingleUserLock (const char * root) { if (root) { char * location = NULL; if ((location = (char *) HT_MALLOC(strlen(root) + strlen(HT_CACHE_LOCK) + 1)) == NULL) HT_OUTOFMEM("HTCache_deleteLock"); strcpy(location, root); strcat(location, HT_CACHE_LOCK); /* under UNIX you can remove an open file, not so under NT */ if (locked_open_file) { fclose(locked_open_file); locked_open_file = NULL; } REMOVE(location); HT_FREE(location); return YES; } return NO; } /* ** If `cache_root' is NULL then reuse old value or use HT_CACHE_ROOT. ** An empty string will make '/' as cache root ** We can only enable the cache if the HTSecure flag is not set. This ** is for example the case if using an application as a telnet shell. */ PUBLIC BOOL HTCacheInit (const char * cache_root, int size) { if (!HTLib_secure() && !HTCacheRoot) { /* ** Find an appropriate root for the cache */ if (HTCacheMode_setRoot(cache_root) != YES) return NO; /* ** Set the max size of the cache */ HTCacheMode_setMaxSize(size); /* ** Set a lock on the cache so that multiple users ** don't step on each other. */ if (HTCache_getSingleUserLock(HTCacheRoot) == NO) return NO; /* ** Look for the cache index and read the contents */ HTCacheIndex_read(HTCacheRoot); /* ** Register the cache before and after filters */ HTNet_addBefore(HTCacheFilter, "http://*", NULL, HT_FILTER_MIDDLE); HTNet_addAfter(HTCacheUpdateFilter, "http://*", NULL, HT_NOT_MODIFIED, HT_FILTER_MIDDLE); /* ** Register the cache AFTER filter for checking whether ** we should invalidate the cached entry */ HTNet_addAfter(HTCacheCheckFilter, "http://*", NULL, HT_ALL, HT_FILTER_MIDDLE); /* ** Do caching from now on */ HTCacheEnable = YES; HTCacheInitialized = YES; return YES; } return NO; } /* ** Turns off the cache and updates entries on disk. */ PUBLIC BOOL HTCacheTerminate (void) { if (HTCacheInitialized) { /* ** Write the index to file */ HTCacheIndex_write(HTCacheRoot); /* ** Unregister the cache before and after filters */ HTNet_deleteBefore(HTCacheFilter); HTNet_deleteAfter(HTCacheUpdateFilter); HTNet_deleteAfter(HTCacheCheckFilter); /* ** Remove the global cache lock. */ HTCache_deleteSingleUserLock(HTCacheRoot); /* ** Cleanup memory by deleting all HTCache objects */ HTCache_deleteAll(); /* ** Don't do anymore caching from now on */ HT_FREE(HTCacheRoot); HTCacheEnable = NO; return YES; } return NO; } /* ** The cache can be temporarily suspended by using the enable/disable ** flag. This does not prevent the cache from being enabled/disable at ** a later point in time. */ PUBLIC void HTCacheMode_setEnabled (BOOL mode) { HTCacheEnable = mode; } PUBLIC BOOL HTCacheMode_enabled (void) { return HTCacheEnable; } PUBLIC void HTCacheMode_setProtected (BOOL mode) { HTCacheProtected = mode; } PUBLIC BOOL HTCacheMode_protected (void) { return HTCacheProtected; } /* ** We can set the cache to operate in disconnected mode in which we only ** return (valid) responses from the cache. Disconnected mode does not ** automatically deliver stale documents as this must be declared ** explicitly. */ PUBLIC void HTCacheMode_setDisconnected (HTDisconnectedMode mode) { DisconnectedMode = mode; } PUBLIC HTDisconnectedMode HTCacheMode_disconnected (void) { return DisconnectedMode; } PUBLIC BOOL HTCacheMode_isDisconnected (HTReload mode) { return (DisconnectedMode != HT_DISCONNECT_NONE); } /* ** Set the mode for how we handle Expires header from the local history ** list. The following modes are available: ** ** HT_EXPIRES_IGNORE : No update in the history list ** HT_EXPIRES_NOTIFY : The user is notified but no reload ** HT_EXPIRES_AUTO : Automatic reload */ PUBLIC void HTCacheMode_setExpires (HTExpiresMode mode) { HTExpMode = mode; } PUBLIC HTExpiresMode HTCacheMode_expires (void) { return HTExpMode; } /* ** Cache size management. We set the default cache size to 20M. ** We set the minimum size to 5M in order not to get into weird ** problems while writing the cache. The size is indicated in Mega ** bytes */ PUBLIC BOOL HTCacheMode_setMaxSize (int size) { long new_size = size < HT_MIN_CACHE_TOTAL_SIZE ? HT_MIN_CACHE_TOTAL_SIZE*MEGA : size*MEGA; long old_size = HTCacheTotalSize; HTCacheTotalSize = new_size; HTCacheFolderSize = HTCacheTotalSize/HT_CACHE_FOLDER_PCT; HTCacheGCBuffer = HTCacheTotalSize/HT_CACHE_GC_PCT; if (new_size < old_size) HTCacheGarbage(); HTTRACE(CACHE_TRACE, "Cache....... Total cache size: %ld with %ld bytes for metainformation and folders and at least %ld bytes free after every gc\n" _ HTCacheTotalSize _ HTCacheFolderSize _ HTCacheGCBuffer); return YES; } PUBLIC int HTCacheMode_maxSize (void) { return HTCacheTotalSize / MEGA; } /* ** How big can a single cached entry be in Mbytes. The default is 3M ** */ PUBLIC BOOL HTCacheMode_setMaxCacheEntrySize (int size) { long new_size = size*MEGA; if (new_size > 0 && new_size < HTCacheTotalSize-HTCacheFolderSize) { long old_size = HTCacheMaxEntrySize; HTCacheMaxEntrySize = new_size; if (new_size < old_size) HTCacheGarbage(); HTTRACE(CACHE_TRACE, "Cache...... Max entry cache size is %ld\n" _ HTCacheMaxEntrySize); return YES; } HTTRACE(CACHE_TRACE, "Cache...... Max entry cache size is unchanged\n"); return NO; } PUBLIC int HTCacheMode_maxCacheEntrySize (void) { return HTCacheMaxEntrySize / MEGA; } /* ** Set the default expiration time. In seconds. */ PUBLIC void HTCacheMode_setDefaultExpiration (const int exp_time) { DefaultExpiration = exp_time; } PUBLIC int HTCacheMode_DefaultExpiration (void) { return DefaultExpiration; } /* ------------------------------------------------------------------------- */ /* CACHE OBJECT */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL free_object (HTCache * me) { HT_FREE(me->url); HT_FREE(me->cachename); HT_FREE(me->etag); HT_FREE(me); return YES; } PRIVATE BOOL delete_object (HTList * list, HTCache * me) { HTTRACE(CACHE_TRACE, "Cache....... delete %p from list %p\n" _ me _ list); HTList_removeObject(list, (void *) me); HTCacheContentSize -= me->size; free_object(me); return YES; } /* ** Create directory path for cache file ** ** On exit: ** return YES ** if directories created -- after that caller ** can rely on fopen(cfn,"w") succeeding. ** */ PRIVATE BOOL HTCache_createLocation (HTCache * me) { if (me && HTCacheRoot) { BOOL status = YES; char * path = NULL; struct stat stat_info; if ((path = (char *) HT_MALLOC(strlen(HTCacheRoot) + 10)) == NULL) HT_OUTOFMEM("HTCache_createLocation"); /* ** Find the path and check whether the directory already exists or not */ sprintf(path, "%s%d", HTCacheRoot, me->hash); if (HT_STAT(path, &stat_info) == -1) { HTTRACE(CACHE_TRACE, "Cache....... Create dir `%s\'\n" _ path); if (MKDIR(path, 0777) < 0) { HTTRACE(CACHE_TRACE, "Cache....... Can't create...\n"); status = NO; } } else { HTTRACE(CACHE_TRACE, "Cache....... Directory `%s\' already exists\n" _ path); } /* ** Find a non-existent filename within the path that we just created */ me->cachename = HTGetTmpFileName(path); HT_FREE(path); return status; } return NO; } /* ** Find a cache filename for this cache object. */ #if 0 PRIVATE BOOL HTCache_findName (HTCache * me) { if (me) { /* ** Create path for this cache entry. We base the cache location on the ** hash calculated as a function of the URL. That way, we ensure a ** resonably uniform distribution. */ me->cachename = HTGetTmpFileName(NULL); return HTCache_createLocation(me); } return NO; } #endif /* ** Calculate the corrected_initial_age of the object. We use the time ** when this function is called as the response_time as this is when ** we have received the complete response. This may cause a delay if ** the reponse header is very big but should not cause any incorrect ** behavior. */ PRIVATE BOOL calculate_time (HTCache * me, HTRequest * request, HTResponse * response) { if (me && request) { HTParentAnchor * anchor = HTRequest_anchor(request); time_t date = HTAnchor_date(anchor); me->response_time = time(NULL); me->expires = HTAnchor_expires(anchor); { time_t apparent_age = HTMAX(0, me->response_time - date); time_t corrected_received_age = HTMAX(apparent_age, HTAnchor_age(anchor)); time_t response_delay = me->response_time - HTRequest_date(request); me->corrected_initial_age = corrected_received_age + response_delay; } /* ** Estimate an expires time using the max-age and expires time. If we ** don't have an explicit expires time then set it to 10% of the LM ** date (although max 24 h). If no LM date is available then use 24 hours. */ { time_t freshness_lifetime = HTResponse_maxAge(response); if (freshness_lifetime < 0) { if (me->expires < 0) { time_t lm = HTAnchor_lastModified(anchor); if (lm < 0) { freshness_lifetime = DefaultExpiration; } else { freshness_lifetime = LM_EXPIRATION(date - lm); if (freshness_lifetime > WARN_HEURISTICS) HTRequest_addError(request, ERR_WARN, NO, HTERR_HEURISTIC_EXPIRATION, NULL, 0, "calculate_time"); } } else freshness_lifetime = me->expires - date; } me->freshness_lifetime = HTMAX(0, freshness_lifetime); } HTTRACE(CACHE_TRACE, "Cache....... Received Age %d, corrected %d, freshness lifetime %d\n" _ HTAnchor_age(anchor) _ me->corrected_initial_age _ me->freshness_lifetime); return YES; } return NO; } /* ** Create a new cache entry and add it to the list */ PRIVATE HTCache * HTCache_new (HTRequest * request, HTResponse * response, HTParentAnchor * anchor) { HTList * list = NULL; /* Current list in cache */ HTCache * pres = NULL; int hash = 0; char * url = NULL; if (!request || !response || !anchor) { HTTRACE(CORE_TRACE, "Cache....... Bad argument\n"); return NULL; } /* Find a hash for this anchor */ if ((url = HTAnchor_address((HTAnchor *) anchor))) { char * ptr; for (ptr=url; *ptr; ptr++) hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HT_XL_HASH_SIZE); if (!CacheTable) { if ((CacheTable = (HTList **) HT_CALLOC(HT_XL_HASH_SIZE, sizeof(HTList *))) == NULL) HT_OUTOFMEM("HTCache_new"); } if (!CacheTable[hash]) CacheTable[hash] = HTList_new(); list = CacheTable[hash]; } else return NULL; /* Search the cache */ { HTList * cur = list; while ((pres = (HTCache *) HTList_nextObject(cur))) { if (!strcmp(pres->url, url)) break; } } /* If not found then create new cache object, else use existing one */ if (!pres) { if ((pres = (HTCache *) HT_CALLOC(1, sizeof(HTCache))) == NULL) HT_OUTOFMEM("HTCache_new"); pres->hash = hash; pres->url = url; pres->range = NO; HTCache_createLocation(pres); HTList_addObject(list, (void *) pres); new_entries++; } else HT_FREE(url); if (HTCache_hasLock(pres)) { if (HTCache_breakLock(pres, request) == NO) { HTTRACE(CACHE_TRACE, "Cache....... Entry %p already in use\n"); return pres; } } HTCache_getLock(pres, request); /* Calculate the various times */ calculate_time(pres, request, response); /* Get the last-modified and etag values if any */ { char * etag = HTAnchor_etag(anchor); if (etag) StrAllocCopy(pres->etag, etag); pres->lm = HTAnchor_lastModified(anchor); } /* Must we revalidate this every time? */ pres->must_revalidate = HTResponse_mustRevalidate(response); return pres; } /* ** Add an entry for a resource that has just been created so that we can ** remember the etag and other things. This allows us to guarantee that ** we don't loose data due to the lost update problem */ PUBLIC HTCache * HTCache_touch (HTRequest * request, HTResponse * response, HTParentAnchor * anchor) { HTCache * cache = NULL; /* Get a new cache entry */ if ((cache = HTCache_new(request, response, anchor)) == NULL) { HTTRACE(CACHE_TRACE, "Cache....... Can't get a cache object\n"); return NULL; } /* We don't have any of the data in cache - only meta information */ if (cache) { cache->size = 0; cache->range = YES; } return cache; } /* ** Cache Validation BEFORE Filter ** ------------------------------ ** Check the cache mode to see if we can use an already loaded version ** of this document. If so and our copy is valid then we don't have ** to go out and get it unless we are forced to ** We only check the cache in caseof a GET request. Otherwise, we go ** directly to the source. */ PRIVATE int HTCacheFilter (HTRequest * request, void * param, int mode) { HTParentAnchor * anchor = HTRequest_anchor(request); char * default_name = HTRequest_defaultPutName (request); HTCache * cache = NULL; HTReload reload = HTRequest_reloadMode(request); HTMethod method = HTRequest_method(request); HTDisconnectedMode disconnect = HTCacheMode_disconnected(); BOOL validate = NO; /* ** If the cache is disabled all together then it won't help looking, huh? */ if (!HTCacheMode_enabled()) return HT_OK; HTTRACE(CACHE_TRACE, "Cachefilter. Checking persistent cache\n"); /* ** Now check the cache... */ if (method != METHOD_GET) { HTTRACE(CACHE_TRACE, "Cachefilter. We only check GET methods\n"); } else if (reload == HT_CACHE_FLUSH) { /* ** If the mode if "Force Reload" then don't even bother to check the ** cache - we flush everything we know abut this document anyway. ** Add the appropriate request headers. We use both the "pragma" ** and the "cache-control" headers in order to be ** backwards compatible with HTTP/1.0 */ validate = YES; HTRequest_addGnHd(request, HT_G_PRAGMA_NO_CACHE); HTRequest_addCacheControl(request, "no-cache", ""); /* ** We also flush the information in the anchor as we don't want to ** inherit any "old" values */ HTAnchor_clearHeader(anchor); } else { /* ** Check the persistent cache manager. If we have a cache hit then ** continue to see if the reload mode requires us to do a validation ** check. This filter assumes that we can get the cached version ** through one of our protocol modules (for example the file module) */ cache = HTCache_find(anchor, default_name); if (cache) { HTReload cache_mode = HTCache_isFresh(cache, request); if (cache_mode == HT_CACHE_ERROR) cache = NULL; reload = HTMAX(reload, cache_mode); HTRequest_setReloadMode(request, reload); /* ** Now check the mode and add the right headers for the validation ** If we are to validate a cache entry then we get a lock ** on it so that not other requests can steal it. */ if (reload == HT_CACHE_RANGE_VALIDATE) { /* ** If we were asked to range validate the cached object then ** use the etag or the last modified for cache validation */ validate = YES; HTCache_getLock(cache, request); HTRequest_addRqHd(request, HT_C_IF_RANGE); } else if (reload == HT_CACHE_END_VALIDATE) { /* ** If we were asked to end-to-end validate the cached object ** then use a max-age=0 cache control directive */ validate = YES; HTCache_getLock(cache, request); HTRequest_addCacheControl(request, "max-age", "0"); } else if (reload == HT_CACHE_VALIDATE) { /* ** If we were asked to validate the cached object then ** use the etag or the last modified for cache validation ** We use both If-None-Match or If-Modified-Since. */ validate = YES; HTCache_getLock(cache, request); HTRequest_addRqHd(request, HT_C_IF_NONE_MATCH | HT_C_IMS); } else if (cache) { /* ** The entity does not require any validation at all. We ** can just go ahead and get it from the cache. In case we ** have a fresh subpart of the entity, then we issue a ** conditional GET request with the range set by the cache ** manager. Issuing the conditional range request is ** equivalent to a validation as we have to go out on the ** net. This may have an effect if running in disconnected ** mode. We disable all BEFORE filters as they don't make ** sense while loading the cache entry. */ { char * name = HTCache_name(cache); HTAnchor_setPhysical(anchor, name); HTCache_addHit(cache); HT_FREE(name); } } } } /* ** If we are in disconnected mode and we are to validate an entry ** then check whether what mode of disconnected mode we're in. If ** we are to use our own cache then return a "504 Gateway Timeout" */ if ((!cache || validate) && disconnect != HT_DISCONNECT_NONE) { if (disconnect == HT_DISCONNECT_EXTERNAL) HTRequest_addCacheControl(request, "only-if-cached", ""); else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_GATE_TIMEOUT, "Disconnected Cache Mode", 0, "HTCacheFilter"); return HT_ERROR; } } return HT_OK; } /* ** Cache Update AFTER filter ** ------------------------- ** On our way out we catch the metainformation and stores it in ** our persistent store. If we have a cache validation (a 304 ** response then we use the new metainformation and merges it with ** the existing information already captured in the cache. */ PRIVATE int HTCacheUpdateFilter (HTRequest * request, HTResponse * response, void * param, int status) { HTParentAnchor * anchor = HTRequest_anchor(request); char * default_name = HTRequest_defaultPutName(request); HTCache * cache = HTCache_find(anchor, default_name); if (cache) { /* ** It may in fact be that the information in the 304 response ** told us that we can't cache the entity anymore. If this is the ** case then flush it now. Otherwise prepare for a cache read */ HTTRACE(CACHE_TRACE, "Cache....... Merging metainformation\n"); if (HTResponse_isCachable(response) == HT_NO_CACHE) { HTCache_remove(cache); } else { char * name = HTCache_name(cache); HTAnchor_setPhysical(anchor, name); HTCache_addHit(cache); HT_FREE(name); HTCache_updateMeta(cache, request, response); } /* ** Start request directly from the cache. As with the redirection filter ** we reuse the same request object which means that we must ** keep this around until the cache load request has terminated ** In the case of a */ HTLoad(request, YES); return HT_ERROR; } else { /* If entry doesn't already exist then create a new entry */ HTCache_touch(request, response, anchor); } return HT_OK; } /* ** Cache Check AFTER filter ** ------------------------ ** Add an entry for a resource that has just been created so that we can ** remember the etag and other things. This allows us to guarantee that ** we don't loose data due to the lost update problem. We also check ** whether we should delete the cached entry if the request/response ** invalidated it (if success and method was not "safe") */ PRIVATE int HTCacheCheckFilter (HTRequest * request, HTResponse * response, void * param, int status) { if (status/100==2 && !HTMethod_isSafe(HTRequest_method(request))) { if (status==201) { HTParentAnchor * anchor = HTAnchor_parent(HTResponse_redirection(response)); if (!anchor) anchor = HTRequest_anchor(request); HTCache_touch(request, response, anchor); } else { HTParentAnchor * anchor = HTRequest_anchor(request); char * default_name = HTRequest_defaultPutName(request); HTCache * cache = HTCache_find(anchor, default_name); if (cache) { /* ** If we receive a 204 and the method is unsafe then we have ** to delete the cache body but not the header information */ /* ** @@ JK: see how to add all the methods here (201, etc.) when ** it's a PUT */ if (status == 204) { HTCache_updateMeta(cache, request, response); cache->size = 0; cache->range = YES; /* @@ JK: update the cache meta data on disk */ HTCache_writeMeta (cache, request, response); /* @@ JK: and we remove the file name as it's obsolete now */ REMOVE(cache->cachename); } else HTCache_remove(cache); } /* @@ this operation will clear the cache->size and cache_range */ HTCache_touch(request, response, anchor); } } return HT_OK; } /* ** Set the size of a cached object. We don't consider the metainformation as ** part of the size which is the the reason for why the min cache size should ** not be less than 5M. When we set the cache size we also check whether we ** should run the gc or not. */ PRIVATE BOOL HTCache_setSize (HTCache * cache, long written, BOOL append) { if (cache) { /* ** First look to see if we already have registered this cache entry ** with a certain size. This size may be a subpart of the total entity ** (in case the download was interrupted) */ if (cache->size > 0 && !append) HTCacheContentSize -= cache->size; cache->size = written; HTCacheContentSize += written; /* ** Now add the new size to the total cache size. If the new size is ** bigger than the legal cache size then start the gc. */ HTTRACE(CACHE_TRACE, "Cache....... Total size %ld\n" _ HTCacheContentSize); if (startGC()) HTCacheGarbage(); return YES; } return NO; } /* ** Verifies if a cache object exists for this URL and if so returns a URL ** for the cached object. It does not verify whether the object is valid or ** not, for example it might have expired. ** ** Returns: file name If OK (must be freed by caller) ** NULL If no cache object found */ PUBLIC HTCache * HTCache_find (HTParentAnchor * anchor, char * default_name) { HTList * list = NULL; HTCache * pres = NULL; /* Find a hash entry for this URL */ if (HTCacheMode_enabled() && anchor && CacheTable) { char * url = NULL; int hash = 0; char * ptr; if (default_name) StrAllocCopy (url, default_name); else url = HTAnchor_address((HTAnchor *) anchor); ptr = url; for (; *ptr; ptr++) hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HT_XL_HASH_SIZE); if (!CacheTable[hash]) { HT_FREE(url); return NULL; } list = CacheTable[hash]; /* Search the cache */ { HTList * cur = list; while ((pres = (HTCache *) HTList_nextObject(cur))) { if (!strcmp(pres->url, url)) { HTTRACE(CACHE_TRACE, "Cache....... Found %p hits %d\n" _ pres _ pres->hits); break; } } } HT_FREE(url); } return pres; } /* HTCache_delete ** -------------- ** Deletes a cache entry */ PRIVATE BOOL HTCache_delete (HTCache * cache) { if (cache && CacheTable) { HTList * cur = CacheTable[cache->hash]; return cur && delete_object(cur, cache); } return NO; } /* HTCache_deleteAll ** ----------------- ** Destroys all cache entried in memory but does not write anything to ** disk */ PUBLIC BOOL HTCache_deleteAll (void) { if (CacheTable) { HTList * cur; int cnt; /* Delete the rest */ for (cnt=0; cntcachename && *cache->cachename) { if ((local = (char *) HT_MALLOC(strlen(cache->cachename) + strlen(HT_CACHE_META) + 5)) == NULL) HT_OUTOFMEM("HTCache_metaLocation"); sprintf(local, "%s%s", cache->cachename, HT_CACHE_META); } return local; } /* ** Walk through the set of headers and write those out that we are allowed ** to store in the cache. We look into the connection header to see what the ** hop-by-hop headers are and also into the cache-control directive to see what ** headers should not be cached. */ PRIVATE BOOL meta_write (FILE * fp, HTRequest * request, HTResponse * response) { if (fp && request && response) { HTAssocList * headers = HTAnchor_header(HTRequest_anchor(request)); HTAssocList * connection = HTResponse_connection(response); char * nocache = HTResponse_noCache(response); /* ** If we don't have any headers then just return now. */ if (!headers) return NO; /* ** Check whether either the connection header or the cache control ** header includes header names that we should not cache */ if (connection || nocache) { /* ** Walk though the cache control no-cache directive */ if (nocache) { char * line = NULL; char * ptr = NULL; char * field = NULL; StrAllocCopy(line, nocache); /* Get our own copy */ ptr = line; while ((field = HTNextField(&ptr)) != NULL) HTAssocList_removeObject(headers, field); HT_FREE(line); } /* ** Walk though the connection header */ if (connection) { HTAssoc * pres; while ((pres=(HTAssoc *) HTAssocList_nextObject(connection))) { char * field = HTAssoc_name(pres); HTAssocList_removeObject(headers, field); } } } /* ** Write out the remaining list of headers that we not already store ** in the index file. */ { HTAssocList * cur = headers; HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { char * name = HTAssoc_name(pres); /* Don't write the headers that are already hop-by-hop */ if (strcasecomp(name, "connection") && strcasecomp(name, "keep-alive") && strcasecomp(name, "proxy-authenticate") && strcasecomp(name, "proxy-authorization") && strcasecomp(name, "transfer-encoding") && strcasecomp(name, "upgrade")) { if (fprintf(fp, "%s: %s\n", name, HTAssoc_value(pres)) < 0) { HTTRACE(CACHE_TRACE, "Cache....... Error writing metainfo\n"); return NO; } } } } /* ** Terminate the header with a newline */ if (fprintf(fp, "\n") < 0) { HTTRACE(CACHE_TRACE, "Cache....... Error writing metainfo\n"); return NO; } return YES; } return NO; } /* ** Save the metainformation for the data object. If no headers ** are available then the meta file is empty */ PUBLIC BOOL HTCache_writeMeta (HTCache * cache, HTRequest * request, HTResponse * response) { if (cache && request && response) { BOOL status; FILE * fp; char * name = HTCache_metaLocation(cache); if (!name) { HTTRACE(CACHE_TRACE, "Cache....... Invalid cache entry\n"); HTCache_remove(cache); return NO; } if ((fp = fopen(name, "wb")) == NULL) { HTTRACE(CACHE_TRACE, "Cache....... Can't open `%s\' for writing\n" _ name); HTCache_remove(cache); HT_FREE(name); return NO; } status = meta_write(fp, request, response); fclose(fp); HT_FREE(name); return status; } return NO; } PRIVATE BOOL meta_read (FILE * fp, HTRequest * request, HTStream * target) { if (fp && request && target) { int status; char buffer[512]; while (1) { if ((status = fread(buffer, 1, 512, fp)) <= 0) { HTTRACE(PROT_TRACE, "Cache....... Meta information loaded\n"); return YES; } /* Send the data down the pipe */ status = (*target->isa->put_block)(target, buffer, status); if (status == HT_LOADED) { (*target->isa->flush)(target); return YES; } if (status < 0) { HTTRACE(PROT_TRACE, "Cache....... Target ERROR %d\n" _ status); break; } } } return NO; } /* ** Read the metainformation for the data object. If no headers are ** available then the meta file is empty */ PRIVATE BOOL HTCache_readMeta (HTCache * cache, HTRequest * request) { HTParentAnchor * anchor = HTRequest_anchor(request); if (cache && request && anchor) { BOOL status; FILE * fp; char * name = HTCache_metaLocation(cache); if (!name) { HTTRACE(CACHE_TRACE, "Cache....... Invalid meta name\n" _ name); HTCache_remove(cache); return NO; } HTTRACE(CACHE_TRACE, "Cache....... Looking for `%s\'\n" _ name); if ((fp = fopen(name, "rb")) == NULL) { HTTRACE(CACHE_TRACE, "Cache....... Can't open `%s\' for reading\n" _ name); HTCache_remove(cache); HT_FREE(name); } else { HTStream * target = HTStreamStack(WWW_MIME_HEAD, WWW_DEBUG, HTBlackHole(), request, NO); /* ** Make sure that we save the reponse information in the anchor */ HTResponse_setCachable(HTRequest_response(request), HT_CACHE_ALL); status = meta_read(fp, request, target); (*target->isa->_free)(target); /* JK: Moved the delete outside of meta_read, because it was being deleted multiple times. Delete the response headers. In principle, they are already available in the anchor */ HTRequest_setResponse(request, NULL); fclose(fp); HT_FREE(name); return status; } } return NO; } /* ** Merge metainformation with existing version. This means that we have had a ** successful validation and hence a true cache hit. We only regard the ** following headers: Date, content-location, expires, cache-control, and vary. */ PUBLIC BOOL HTCache_updateMeta (HTCache * cache, HTRequest * request, HTResponse * response) { if (cache && request && response) { HTParentAnchor * anchor = HTRequest_anchor(request); cache->hits++; /* Calculate the various times */ calculate_time(cache, request, response); /* Get the last-modified and etag values if any */ { char * etag = HTAnchor_etag(anchor); if (etag) StrAllocCopy(cache->etag, etag); cache->lm = HTAnchor_lastModified(anchor); } /* Must we revalidate this every time? */ cache->must_revalidate = HTResponse_mustRevalidate(response); return YES; } return NO; } PUBLIC BOOL HTCache_resetMeta (HTCache * cache, HTRequest * request, HTResponse * response) { /* what a problem... we update the cache with the wrong data from the response... after the redirection */ HTCache_updateMeta (cache, request, response); cache->size = 0; cache->range = YES; /* @@ JK: update the cache meta data on disk */ HTCache_writeMeta (cache, request, response); /* @@ JK: and we remove the file name as it's obsolete now */ REMOVE(cache->cachename); return YES; } /* ** Remove from disk. You must explicitly remove a lock ** before this operation can succeed */ PRIVATE BOOL flush_object (HTCache * cache) { if (cache && !HTCache_hasLock(cache)) { char * head = HTCache_metaLocation(cache); REMOVE(head); HT_FREE(head); REMOVE(cache->cachename); return YES; } return NO; } /* HTCache_flushAll ** ---------------- ** Destroys all cache entried in memory and on disk. Resets the cache ** to empty but the cache does not have to be reinitialized before we ** can use it again. */ PUBLIC BOOL HTCache_flushAll (void) { if (CacheTable) { HTList * cur; int cnt; /* Delete the rest */ for (cnt=0; cntsize == 0) return HT_CACHE_FLUSH; #endif /* ** If we only have a part of this request then make a range request ** using the If-Range condition GET request */ if (cache->range) { char buf[20]; sprintf(buf, "%ld-", cache->size); HTTRACE(CACHE_TRACE, "Cache....... Asking for range `%s\'\n" _ buf); HTRequest_addRange(request, "bytes", buf); HTRequest_addRqHd(request, HT_C_RANGE); return HT_CACHE_RANGE_VALIDATE; } /* ** In case this entry is of type "must-revalidate" then we just ** go ahead and validate it. */ if (cache->must_revalidate) return HT_CACHE_VALIDATE; /* ** Check whether we have any special constraints like min-fresh in ** the cache control */ if (cc) { char * token = NULL; if ((token = HTAssocList_findObject(cc, "max-age"))) max_age = atol(token); if ((token = HTAssocList_findObject(cc, "max-stale"))) max_stale = atol(token); if ((token = HTAssocList_findObject(cc, "min-fresh"))) min_fresh = atol(token); } /* ** Now do the checking against the age constraints that we've got */ { time_t resident_time = time(NULL) - cache->response_time; time_t current_age = cache->corrected_initial_age + resident_time; /* ** Check that the max-age, max-stale, and min-fresh directives ** given in the request cache control header is followed. */ if (max_age >= 0 && current_age > max_age) { HTTRACE(CACHE_TRACE, "Cache....... Max-age validation\n"); return HT_CACHE_VALIDATE; } if (min_fresh >= 0 && cache->freshness_lifetime < current_age + min_fresh) { HTTRACE(CACHE_TRACE, "Cache....... Min-fresh validation\n"); return HT_CACHE_VALIDATE; } return (cache->freshness_lifetime + (max_stale >= 0 ? max_stale : 0) > current_age) ? HT_CACHE_OK : HT_CACHE_VALIDATE; } } return HT_CACHE_FLUSH; } /* ** While we are creating a new cache object or while we are validating an ** existing one, we must have a lock on the entry so that not other ** requests can get to it in the mean while. */ PUBLIC BOOL HTCache_getLock (HTCache * cache, HTRequest * request) { if (cache && request) { HTTRACE(CACHE_TRACE, "Cache....... Locking cache entry %p\n" _ cache); cache->lock = request; return YES; } return NO; } PUBLIC BOOL HTCache_releaseLock (HTCache * cache) { if (cache) { HTTRACE(CACHE_TRACE, "Cache....... Unlocking cache entry %p\n" _ cache); cache->lock = NULL; return YES; } return NO; } PUBLIC BOOL HTCache_hasLock (HTCache * cache) { return cache && cache->lock; } PUBLIC BOOL HTCache_breakLock (HTCache * cache, HTRequest * request) { if (cache && cache->lock) { if (cache->lock == request) { HTTRACE(CACHE_TRACE, "Cache....... Breaking lock on entry %p\n" _ cache); cache->lock = NULL; return YES; } } return NO; } /* ** Is we have a valid entry in the cache then we also need a location ** where we can get it. Hopefully, we may be able to access it ** thourgh one of our protocol modules, for example the local file ** module. The name returned is in URL syntax and must be freed by ** the caller */ PUBLIC char * HTCache_name (HTCache * cache) { if (cache) { char * local = cache->cachename; char * url = HTLocalToWWW(local, "cache:"); return url; } return NULL; } /* ** Remove from memory AND from disk. You must explicitly remove a lock ** before this operation can succeed */ PUBLIC BOOL HTCache_remove (HTCache * cache) { return flush_object(cache) && HTCache_delete(cache); } PUBLIC BOOL HTCache_addHit (HTCache * cache) { if (cache) { cache->hits++; HTTRACE(CACHE_TRACE, "Cache....... Hits for %p is %d\n" _ cache _ cache->hits); return YES; } return NO; } /* ------------------------------------------------------------------------- */ /* CACHE WRITER */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL free_stream (HTStream * me, BOOL abort) { if (me) { HTCache * cache = me->cache; /* ** We close the file object. This does not mean that we have the ** complete object. In case of an "abort" then we only have a part, ** however, next time we do a load we can use byte ranges to complete ** the request. */ if (me->fp) fclose(me->fp); /* ** We are done storing the object body and can update the cache entry. ** Also update the meta information entry on disk as well. When we ** are done we don't need the lock anymore. */ if (cache) { HTCache_writeMeta(cache, me->request, me->response); HTCache_releaseLock(cache); /* ** Remember if this is the full entity body or only a subpart ** We assume that an abort will only give a part of the object. */ cache->range = abort; /* ** Set the size and maybe do gc. If it is an abort then set the ** byte range so that we can start from this point next time. We ** take the byte range as the number of bytes that we have already ** written to the cache entry. */ HTCache_setSize(cache, me->bytes_written, me->append); } /* ** In order not to loose information, we dump the current cache index ** every time we have created DUMP_FREQUENCY new entries */ if (new_entries > DUMP_FREQUENCY) { HTCacheIndex_write(HTCacheRoot); new_entries = 0; } HT_FREE(me); return YES; } return NO; } PRIVATE int HTCache_free (HTStream * me) { return free_stream(me, NO) ? HT_OK : HT_ERROR; } PRIVATE int HTCache_abort (HTStream * me, HTList * e) { HTTRACE(CACHE_TRACE, "Cache....... ABORTING\n"); free_stream(me, YES); return HT_ERROR; } PRIVATE int HTCache_flush (HTStream * me) { return (fflush(me->fp) == EOF) ? HT_ERROR : HT_OK; } PRIVATE int HTCache_putBlock (HTStream * me, const char * s, int l) { int status = (fwrite(s, 1, l, me->fp) != l) ? HT_ERROR : HT_OK; if (l > 1 && status == HT_OK) { HTCache_flush(me); me->bytes_written += l; } return status; } PRIVATE int HTCache_putChar (HTStream * me, char c) { return HTCache_putBlock(me, &c, 1); } PRIVATE int HTCache_putString (HTStream * me, const char * s) { return HTCache_putBlock(me, s, (int) strlen(s)); } PRIVATE const HTStreamClass HTCacheClass = { "Cache", HTCache_flush, HTCache_free, HTCache_abort, HTCache_putChar, HTCache_putString, HTCache_putBlock }; PRIVATE HTStream * HTCacheStream (HTRequest * request, BOOL append) { HTCache * cache = NULL; FILE * fp = NULL; HTResponse * response = HTRequest_response(request); HTParentAnchor * anchor = HTRequest_anchor(request); /* If cache is not enabled then exit now */ if (!HTCacheEnable || !HTCacheInitialized) { HTTRACE(CACHE_TRACE, "Cache....... Not enabled\n"); return NULL; } /* don't cache protected documents */ if (HTRequest_credentials (request) && !HTCacheProtected) { HTTRACE(CACHE_TRACE, "Cache....... won't cache protected objects\n"); return NULL; } /* ** Check to see if we already now can see that the entry is going ** to be too big. */ if (HTAnchor_length(anchor) > HTCacheMaxEntrySize) { HTTRACE(CACHE_TRACE, "Cache....... Entry is too big - won't cache\n"); return NULL; } /* Get a new cache entry */ if ((cache = HTCache_new(request, response, anchor)) == NULL) { HTTRACE(CACHE_TRACE, "Cache....... Can't get a cache object\n"); return NULL; } /* Test that the cached object is not locked */ if (HTCache_hasLock(cache)) { if (HTCache_breakLock(cache, request) == NO) { HTTRACE(CACHE_TRACE, "Cache....... Entry already in use\n"); return NULL; } } HTCache_getLock(cache, request); /* ** Test that we can actually write to the cache file. If the entry already ** existed then it will be overridden with the new data. */ if ((fp = fopen(cache->cachename, append ? "ab" : "wb")) == NULL) { HTTRACE(CACHE_TRACE, "Cache....... Can't open `%s\' for writing\n" _ cache->cachename); HTCache_delete(cache); return NULL; } else { HTTRACE(CACHE_TRACE, "Cache....... %s file `%s\'\n" _ append ? "Append to" : "Creating" _ cache->cachename); } /* Set up the stream */ { HTStream * me = NULL; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("Cache"); me->isa = &HTCacheClass; me->request = request; me->response = response; me->cache = cache; me->fp = fp; me->append = append; return me; } return NULL; } PUBLIC HTStream * HTCacheWriter (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { return HTCacheStream(request, NO); } PUBLIC HTStream * HTCacheAppend (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { return HTCacheStream(request, YES); } /* ------------------------------------------------------------------------- */ /* CACHE READER */ /* ------------------------------------------------------------------------- */ /* ** This function copies the headers associated with a cached ** object to closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE void HTCache_copyHeaders (HTRequest * req) { HTParentAnchor * anchor; char * url; anchor = HTRequest_anchor (req); url = HTAnchor_physical(anchor); if (url && !strncmp (url, "cache:", sizeof ("cache:") - 1 )) { /* HTMIME_anchor2response (req); */ /* set up a "dummy" stack just for copying the MIME type. We need this to remove any dependencies between the MIME and CACHE minilibs */ HTStreamStack(WWW_MIME_COPYHEADERS, WWW_DEBUG, HTBlackHole(), req, NO); } } /* ** This function closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE int CacheCleanup (HTRequest * req, int status) { HTNet * net = HTRequest_net(req); cache_info * cache = (cache_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(req); /* Free stream with data TO Local cache system */ if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); HTRequest_setInputStream(req, NULL); } /* ** Remove if we have registered a timer function as a callback */ if (cache->timer) { HTTimer_delete(cache->timer); cache->timer = NULL; } if (cache) { HT_FREE(cache->local); HT_FREE(cache); } /* if the object was cached, we copy the pertinent HTTP headers from the anchor object (where they are stored) to the response object */ if (status == HT_NOT_MODIFIED) HTCache_copyHeaders (req); HTNet_delete(net, status); return YES; } /* ** This load function loads an object from the cache and puts it to the ** output defined by the request object. For the moment, this load function ** handles the persistent cache as if it was on local file but in fact ** it could be anywhere. ** ** Returns HT_ERROR Error has occured in call back ** HT_OK Call back was OK */ PRIVATE int CacheEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadCache (SOCKET soc, HTRequest * request) { cache_info * cache; /* Specific access information */ HTParentAnchor * anchor = HTRequest_anchor(request); HTNet * net = HTRequest_net(request); /* ** Initiate a new cache structure and bind to request structure ** This is actually state CACHE_BEGIN, but it can't be in the state ** machine as we need the structure first. */ HTTRACE(PROT_TRACE, "Load Cache.. Looking for `%s\'\n" _ HTAnchor_physical(anchor)); if ((cache = (cache_info *) HT_CALLOC(1, sizeof(cache_info))) == NULL) HT_OUTOFMEM("HTLoadCACHE"); cache->state = CL_BEGIN; cache->net = net; HTNet_setContext(net, cache); HTNet_setEventCallback(net, CacheEvent); HTNet_setEventParam(net, cache); /* callbacks get http* */ return CacheEvent(soc, cache, HTEvent_BEGIN); /* get it started - ops is ignored */ } PRIVATE int ReturnEvent (HTTimer * timer, void * param, HTEventType type) { cache_info * cache = (cache_info *) param; if (timer != cache->timer) HTDEBUGBREAK("File timer %p not in sync\n" _ timer); HTTRACE(PROT_TRACE, "HTLoadCache. Continuing %p with timer %p\n" _ cache _ timer); /* ** Delete the timer */ cache->timer = NULL; /* ** Now call the event again */ return CacheEvent(INVSOC, cache, HTEvent_READ); } PRIVATE int CacheEvent (SOCKET soc, void * pVoid, HTEventType type) { cache_info * cache = (cache_info *)pVoid; int status = HT_ERROR; HTNet * net = cache->net; HTRequest * request = HTNet_request(net); HTParentAnchor * anchor = HTRequest_anchor(request); if (type == HTEvent_BEGIN) { cache->state = CL_BEGIN; } else if (type == HTEvent_CLOSE) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED, NULL, 0, "HTLoadCache"); CacheCleanup(request, HT_INTERRUPTED); return HT_OK; } else if (type == HTEvent_END) { CacheCleanup(request, HT_OK); return HT_OK; } else if (type == HTEvent_RESET) { CacheCleanup(request, HT_RECOVER_PIPE); cache->state = CL_BEGIN; return HT_OK; } /* Now jump into the machine. We know the state from the previous run */ while (1) { switch (cache->state) { case CL_BEGIN: if (HTLib_secure()) { HTTRACE(PROT_TRACE, "Load Cache.. No access to local file system\n"); cache->state = CL_ERROR; break; } cache->local = HTWWWToLocal(HTAnchor_physical(anchor), "", HTRequest_userProfile(request)); if (!cache->local) { cache->state = CL_ERROR; break; } /* ** Create a new host object and link it to the net object */ { HTHost * host = NULL; if ((host = HTHost_new("cache", 0)) == NULL) return HT_ERROR; HTNet_setHost(net, host); if (HTHost_addNet(host, net) == HT_PENDING) { HTTRACE(PROT_TRACE, "HTLoadCache. Pending...\n"); return HT_OK; } } cache->state = CL_NEED_BODY; break; case CL_NEED_BODY: if (HT_STAT(cache->local, &cache->stat_info) == -1) { HTTRACE(PROT_TRACE, "Load Cache.. Not found `%s\'\n" _ cache->local); HTRequest_addError(request, ERR_FATAL, NO, HTERR_NOT_FOUND, NULL, 0, "HTLoadCache"); cache->state = CL_ERROR; break; } /* ** The cache entry may be empty in which case we just return */ if (!cache->stat_info.st_size) { HTRequest_addError(request, ERR_FATAL, NO,HTERR_NO_CONTENT, NULL, 0, "HTLoadCache"); cache->state = CL_NO_DATA; } else cache->state = CL_NEED_OPEN_FILE; break; case CL_NEED_OPEN_FILE: status = HTFileOpen(net, cache->local, HT_FB_RDONLY); if (status == HT_OK) { /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ { HTStream * rstream = HTStreamStack(HTAnchor_format(anchor), HTRequest_outputFormat(request), HTRequest_outputStream(request), request, YES); HTNet_setReadStream(net, rstream); HTRequest_setOutputConnected(request, YES); } /* Set the return code as being OK */ HTRequest_addError(request, ERR_INFO, NO, HTERR_OK, NULL, 0, "HTLoadCache"); cache->state = CL_NEED_CONTENT; /* If we are _not_ using preemptive mode and we are Unix fd's ** then return here to get the same effect as when we are ** connecting to a socket. That way, HTCache acts just like any ** other protocol module even though we are in fact doing ** blocking connect */ if (HTEvent_isCallbacksRegistered()) { if (!HTRequest_preemptive(request)) { if (!HTNet_preemptive(net)) { HTTRACE(PROT_TRACE, "HTLoadCache. Returning\n"); HTHost_register(HTNet_host(net), net, HTEvent_READ); } else if (!cache->timer) { HTTRACE(PROT_TRACE, "HTLoadCache. Returning\n"); cache->timer = HTTimer_new(NULL, ReturnEvent, cache, 1, YES, NO); } return HT_OK; } } } else if (status == HT_WOULD_BLOCK || status == HT_PENDING) return HT_OK; else { HTRequest_addError(request, ERR_INFO, NO, HTERR_INTERNAL, NULL, 0, "HTLoadCache"); cache->state = CL_ERROR; /* Error or interrupt */ } break; case CL_NEED_CONTENT: status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_LOADED || status == HT_CLOSED) { cache->state = CL_GOT_DATA; } else { HTRequest_addError(request, ERR_INFO, NO, HTERR_FORBIDDEN, NULL, 0, "HTLoadCache"); cache->state = CL_ERROR; } break; case CL_GOT_DATA: CacheCleanup(request, HT_NOT_MODIFIED); return HT_OK; break; case CL_NO_DATA: CacheCleanup(request, HT_NO_DATA); return HT_OK; break; case CL_ERROR: CacheCleanup(request, HT_ERROR); return HT_OK; break; } } /* End of while(1) */ } libwww/Library/src/HTCache.html0100644000076400001440000003112007343441157016076 0ustar danielusers W3C Sample Code Library libwww Persistent Cache Manager

    Persistent Cache Manager

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The cache contains details of persistent files which contain the contents of remote documents. The existing cache manager is somewhat naive - especially in its garbage collection but it is just an example of how it can be done.However, it is a fully HTTP/1.1 compliant cache manager. More advanced implementations are welcome!

    This module is implemented by HTCache.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTCACHE_H
    #define HTCACHE_H
    #include "WWWLib.h"
    

    Initialize and Terminate the Persistent Cache

    The cache_root is the URI of the location of the persistent cache. An example is "file:/tmp/w3c-lib". If cache_root is NULL then determine a cache root using the following algorithm:

    1. Look for any environment variables (if supported) in the following order: WWW_CACHE, TMP, and TEMP. If none are set then then fall back on "/tmp".
    2. Append the folder name "w3c-cache" to the root identified above

    The cache_root location does not have to exist, it will be created automatically if not. An empty string will make '/' the cache root.

    The size is the total size in MBytes - the default size is 20M. The cache can not be less than 5M.

    We can only enable the cache if we are in secure mode where we can not access the local file system. This is for example the case if using an application as a telnet shell.

    extern BOOL HTCacheInit (const char * cache_root, int size);
    

    After the cache has been terminated it can not be used anymore unless you do another HTCacheInit() call.

    extern BOOL HTCacheTerminate (void);
    

    Cache Mode Parameters

    The persistent cache has a set of overall parameters that you can adjust

    Enable and Disable the Cache

    The cache can be temporarily suspended by using the enable/disable flag. This does not prevent the cache from being enabled/disable at a later point in time.

    extern void HTCacheMode_setEnabled (BOOL mode);
    extern BOOL HTCacheMode_enabled (void);
    

    The cache can be setup to whether cache password protected documents thru the protected flag. By default this flag is turned off.

    extern void HTCacheMode_setProtected (BOOL mode);
    extern BOOL HTCacheMode_protected (void);
    

    What is the current Cache Root?

    Return the value of the cache root. The cache root can only be set through the HTCacheInit() function. The string returned MUST be freed by the caller

    extern char * HTCacheMode_getRoot (void);
    

    Total Cache Size

    We set the default cache size to 20M. We set the minimum size to 5M in order not to get into weird problems while writing the cache. The size is indicated in Mega bytes. The size is given in MBytes and is also returned in MBytes. We don't consider the metainformation as part of the total cache size which is the the reason for why the min cache size should not be less than 5M.

    extern BOOL HTCacheMode_setMaxSize (int size);
    extern int  HTCacheMode_maxSize    (void);
    

    Max Size of a Single Cache Entry

    It is also possible to control the max size of a single cache entry so that the cache doesn't get filled with a very few, very large cached entries. The default max size for a single cached entry is 3M. The value indicated must be in Mbytes, for example, a vaue of 3 would mean 3 MBytes.

    extern BOOL HTCacheMode_setMaxCacheEntrySize (int size);
    extern int HTCacheMode_maxCacheEntrySize (void);
    

    Default expiration time of cache entries

    If a response does not arrive with an expiration time and does not explicitly forbid its being cached, use the default expiration time. The time is given in seconds (e.g., 3,600 is one hour).

    extern void HTCacheMode_setDefaultExpiration (const int exp_time);
    extern int HTCacheMode_DefaultExpiration (void);
    

    How do we handle Expiration of Cached Objects?

    There are various ways of handling Expires header when met in a history list. Either it can be ignored all together, the user can be notified with a warning, or the document can be reloaded automatically. This flag decides what action to be taken. The default action is HT_EXPIRES_IGNORE. In HT_EXPIRES_NOTIFY mode , we push a message on to the Error stack which is presented to the user.

    typedef enum _HTExpiresMode {
        HT_EXPIRES_IGNORE = 0,
        HT_EXPIRES_NOTIFY,
        HT_EXPIRES_AUTO
    } HTExpiresMode;
    extern void HTCacheMode_setExpires (HTExpiresMode mode);
    extern HTExpiresMode HTCacheMode_expires (void);
    

    Disconnected Operation

    The cache can be set to handle disconnected operation where it does not use the network to validate entries and do not attempt to load new documents. All requests that can not be fulfilled by the cache will be returned with a "504 Gateway Timeout" response. There are two modes of how the cache can operate in disconnected mode:

    No network activity at all
    Here is uses its own persistent cache
    Forward all disconnected requests to a proxy cache
    Here it uses the HTTP/1.1 cache-control to indicate that the proxy should operate in disconnected mode. This mode only really makes sense when you are using a proxy, of course.
    typedef enum _HTDisconnectedMode {
        HT_DISCONNECT_NONE     = 0,
        HT_DISCONNECT_NORMAL   = 1,
        HT_DISCONNECT_EXTERNAL = 2
    } HTDisconnectedMode;
    extern void HTCacheMode_setDisconnected (HTDisconnectedMode mode);
    extern HTDisconnectedMode HTCacheMode_disconnected (void);
    extern BOOL HTCacheMode_isDisconnected (HTReload mode);
    

    The Cache Index

    The persistent cache keeps an index of its current entries so that garbage collection and lookup becomes more efficient. This index is stored automatically at regular intervals so that we don't get out of sync. Also, it is automatically loaded at startup and saved at closedown of the cache.

    Reading the Cache Index

    Read the saved set of cached entries from disk. we only allow the index ro be read when there is no entries in memory. That way we can ensure consistancy.

    extern BOOL HTCacheIndex_read (const char * cache_root);
    

    Write the Cache Index

    Walk through the list of cached objects and save them to disk. We override any existing version but that is normally OK as we have already read its contents.

    extern BOOL HTCacheIndex_write (const char * cache_root);
    

    The HTCache Object

    The cache object is what we store about a cached objet in memory.

    typedef struct _HTCache HTCache;
    

    Create and Update a Cache Object

    Filling the cache is done as all other transportation of bulk data in libwww using streams. The cache object creater is a stream which in many cases sits on a T stream so that we get the original feed and at the same time can parse the contents.

    In some situations, we want to append data to an already exiting cache entry. This is the case when a use has interrupted a download and we are stuck with a subpart of the document. If the user later on whishes to download the object again we can issue a range request and continue from where we were. This will in many situations save a lot of bandwidth.

    extern HTConverter HTCacheWriter, HTCacheAppend;
    

    This function writes the metainformation along with the data object stored by the HTCacheWriter stream above. If no headers are available then the meta file is empty

    extern BOOL HTCache_writeMeta (HTCache * cache, HTRequest * request,
                                   HTResponse * response);
    

    In case we received a "304 Not Modified" response then we do not have to tough the body but must merge the metainformation with the previous version. Therefore we need a special metainformation update function.

    extern BOOL HTCache_updateMeta (HTCache * cache, HTRequest * request,
                                    HTResponse * response);
    

    Clear a cache entry

    extern BOOL HTCache_resetMeta (HTCache * cache, HTRequest * request,
                                    HTResponse * response);
    

    Check Cached Entry

    After we get a response back, we should check whether we can still cache an entry and/or we should add an entry for a resource that has just been created so that we can remember the etag and other things. The latter allows us to guarantee that we don't loose data due to the lost update problem.

    extern HTCache * HTCache_touch (HTRequest * request, HTResponse * response,
                                    HTParentAnchor * anchor);
    

    Load a Cached Object

    Loading a cached object is also done as all other loads in libwww by using a protocol load module. For the moment, this load function handles the persistent cache as if it was on local file but in fact  it could be anywhere.

    extern HTProtCallback HTLoadCache;
    

    Delete a Cache Object

    Remove a HTCache object from memory and from disk. You must explicitly remove a lock before this operation can succeed

    extern BOOL HTCache_remove (HTCache * cache);
    

    Delete All Cache Objects in Memory

    Destroys all cache entried in memory but does not write anything to disk. Use the index methods above for doing that. We do not delete the disk contents.

    extern BOOL HTCache_deleteAll (void);
    

    Delete all Cache Object and File Entries

    Destroys all cache entried in memory and on disk. This call basically resets the cache to the inital state but it does not terminate the cache. That is, you don't have to reinitialize the cache before you can use it again.

    extern BOOL HTCache_flushAll (void);
    

    Find a Cached Object

    Verifies if a cache object exists for this URL and if so returns a URL for the cached object. It does not verify whether the object is valid or not, for example it might have expired. Use the cache validation methods for checking this.

    extern HTCache * HTCache_find (HTParentAnchor * anchor, char * default_name);
    

    Verify if an Object is Fresh

    This function checks whether a document has expired or not. The check is based on the metainformation passed in the anchor object The function returns the level of validation needed for getting a fresh version. We also check the cache control directives in the request to see if they change the freshness discission.

    extern HTReload HTCache_isFresh (HTCache * me, HTRequest * request);
    

    Register a Cache Hit

    As a cache hit may occur several places, we have a public function where we can declare a download to be a true cache hit. The number of hits a cache object has affects its status when we are doing garbage collection.

    extern BOOL HTCache_addHit (HTCache * cache);
    

    Find the Location of a Cached Object

    Is we have a valid entry in the cache then we also need a location where we can get it. Hopefully, we may be able to access it thourgh one of our protocol modules, for example the local file module. The name returned is in URL syntax and must be freed by the caller

    extern char * HTCache_name (HTCache * cache);
    

    Locking a Cache Object

    While we are creating a new cache object or while we are validating an existing one, we must have a lock on the entry so that not other requests can get to it in the mean while. A lock can be broken if the same request tries to create the cache entry again. This means that we have tried to validate the cache entry but we got a new shipment of bytes back from the origin server or an intermediary proxy.

    extern BOOL HTCache_getLock     (HTCache * cache, HTRequest * request);
    extern BOOL HTCache_breakLock   (HTCache * cache, HTRequest * request);
    extern BOOL HTCache_hasLock     (HTCache * cache);
    extern BOOL HTCache_releaseLock (HTCache * cache);
    
    #endif
    


    @(#) $Id: HTCache.html,v 2.25 2025/08/30 13:41:03 kahan Exp $
    libwww/Library/src/HTChannl.c0100644000076400001440000003315307124671726015570 0ustar danielusers/* ** CONTAINS STREAMS FOR READING AND WRITING TO AND FROM A TRANSPORT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTChannl.c,v 2.26 2025/06/23 14:27:34 kahan Exp $ ** ** ** HISTORY: ** April 96 HFN Written */ /* Library Include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTAlert.h" #include "HTHost.h" #include "HTError.h" #ifdef HT_MUX #include "WWWMux.h" #endif #include "HTChannl.h" /* Implemented here */ #define HASH(s) ((s) % (HT_M_HASH_SIZE)) struct _HTInputStream { const HTInputStreamClass * isa; HTChannel * channel; }; struct _HTOutputStream { const HTOutputStreamClass * isa; HTChannel * channel; }; struct _HTChannel { /* what media do we talk to? */ SOCKET sockfd; /* Socket */ FILE * fp; /* File descriptor */ /* what streams handle the IO */ HTInputStream * input; /* Input stream */ HTOutputStream * output; /* Output stream */ /* proxy streams to dereference the above streams */ HTInputStream channelIStream; HTOutputStream channelOStream; BOOL active; /* Active or passive channel */ int semaphore; /* On channel use */ HTHost * host; /* Zombie connections */ }; PRIVATE HTList ** channels = NULL; /* List of channels */ /* ------------------------------------------------------------------------- */ /* ** Skinny stream objects to pass the IO requests to the channels current IO streams. ** This was needed because the channel's IO streams could go away after the IO streams ** were set up for multiple requests. */ PRIVATE int ChannelIStream_flush (HTInputStream * me) {return me->channel->input ? (*me->channel->input->isa->flush)(me->channel->input) : HT_ERROR;} PRIVATE int ChannelIStream_free (HTInputStream * me) {return me->channel->input ? (*me->channel->input->isa->_free)(me->channel->input) : HT_ERROR;} PRIVATE int ChannelIStream_abort (HTInputStream * me, HTList * e) {return me->channel->input ? (*me->channel->input->isa->abort)(me->channel->input, e) : HT_ERROR;} PRIVATE int ChannelIStream_read (HTInputStream * me) {return me->channel->input ? (*me->channel->input->isa->read)(me->channel->input) : HT_ERROR;} PRIVATE int ChannelIStream_close (HTInputStream * me) {return me->channel->input ? (*me->channel->input->isa->close)(me->channel->input) : HT_ERROR;} PUBLIC int ChannelIStream_consumed (HTInputStream * me, size_t bytes) {return me->channel->input ? (*me->channel->input->isa->consumed)(me->channel->input, bytes) : HT_ERROR;} PRIVATE const HTInputStreamClass ChannelIStreamIsa = { "ChannelInput", ChannelIStream_flush, ChannelIStream_free, ChannelIStream_abort, ChannelIStream_read, ChannelIStream_close, ChannelIStream_consumed }; PRIVATE int ChannelOStream_flush (HTOutputStream * me) {return me->channel->output ? (*me->channel->output->isa->flush)(me->channel->output) : HT_ERROR;} PRIVATE int ChannelOStream_free (HTOutputStream * me) {return me->channel->output ? (*me->channel->output->isa->_free)(me->channel->output) : HT_ERROR;} PRIVATE int ChannelOStream_abort (HTOutputStream * me, HTList * e) {return me->channel->output ? (*me->channel->output->isa->abort)(me->channel->output, e) : HT_ERROR;} PRIVATE int ChannelOStream_put_character (HTOutputStream * me, char c) {return me->channel->output ? (*me->channel->output->isa->put_character)(me->channel->output, c) : HT_ERROR;} PRIVATE int ChannelOStream_put_string (HTOutputStream * me, const char * s) {return me->channel->output ? (*me->channel->output->isa->put_string)(me->channel->output, s) : HT_ERROR;} PRIVATE int ChannelOStream_put_block (HTOutputStream * me, const char * buf, int len) {return me->channel->output ? (*me->channel->output->isa->put_block)(me->channel->output, buf, len) : HT_ERROR;} PRIVATE int ChannelOStream_close (HTOutputStream * me) {return me->channel->output ? (*me->channel->output->isa->close)(me->channel->output) : HT_ERROR;} PRIVATE const HTOutputStreamClass ChannelOStreamIsa = { "ChannelOutput", ChannelOStream_flush, ChannelOStream_free, ChannelOStream_abort, ChannelOStream_put_character, ChannelOStream_put_string, ChannelOStream_put_block, ChannelOStream_close, }; /* ------------------------------------------------------------------------- */ PRIVATE void free_channel (HTChannel * ch) { if (ch) { /* Close the input and output stream */ if (ch->input) { (*ch->input->isa->close)(ch->input); ch->input = NULL; } if (ch->output) { (*ch->output->isa->close)(ch->output); ch->output = NULL; } /* Close the socket */ if (ch->sockfd != INVSOC) { NETCLOSE(ch->sockfd); HTNet_decreaseSocket(); HTTRACE(PROT_TRACE, "Channel..... Deleted %p, socket %d\n" _ ch _ ch->sockfd); ch->sockfd = INVSOC; } /* Close the file */ if (ch->fp) { fclose(ch->fp); HTTRACE(PROT_TRACE, "Channel..... Deleted %p, file %p\n" _ ch _ ch->fp); ch->fp = NULL; } HT_FREE(ch); } } /* ** A channel is uniquely identified by a socket. ** Note that we don't create the input and output stream - they are ** created later. ** ** We only keep a hash on sockfd's as we don't have to look for channels ** for ANSI file descriptors. */ PUBLIC HTChannel * HTChannel_new (SOCKET sockfd, FILE * fp, BOOL active) { HTList * list = NULL; HTChannel * ch = NULL; int hash = sockfd < 0 ? 0 : HASH(sockfd); HTTRACE(PROT_TRACE, "Channel..... Hash value is %d\n" _ hash); if (!channels) { if (!(channels = (HTList **) HT_CALLOC(HT_M_HASH_SIZE,sizeof(HTList*)))) HT_OUTOFMEM("HTChannel_new"); } if (!channels[hash]) channels[hash] = HTList_new(); list = channels[hash]; if ((ch = (HTChannel *) HT_CALLOC(1, sizeof(HTChannel))) == NULL) HT_OUTOFMEM("HTChannel_new"); ch->sockfd = sockfd; ch->fp = fp; ch->active = active; ch->semaphore = 1; ch->channelIStream.isa = &ChannelIStreamIsa; ch->channelOStream.isa = &ChannelOStreamIsa; ch->channelIStream.channel = ch; ch->channelOStream.channel = ch; HTList_addObject(list, (void *) ch); #ifdef HT_MUX /* ** Create a MUX channel and do a connect on this channel with a ** new session. */ { HTProtocol * protocol = HTNet_protocol(net); HTMuxChannel * muxch = HTMuxChannel_new(me); net->session = HTMuxSession_connect(muxch, net, HTProtocol_id(protocol)); } #endif /* HT_MUX */ HTTRACE(PROT_TRACE, "Channel..... Added %p to list %p\n" _ ch _ list); return ch; } /* ** Look for a channel object if we for some reason should have lost it ** Returns NULL if nothing found */ PUBLIC HTChannel * HTChannel_find (SOCKET sockfd) { if (channels && sockfd != INVSOC) { int hash = HASH(sockfd); HTList * list = channels[hash]; if (list) { HTChannel * ch = NULL; while ((ch = (HTChannel *) HTList_nextObject(list))) if (ch->sockfd == sockfd) return ch; } } return NULL; } /* ** When deleting a channel we first look at if there are no more requests ** using the channel (the semaphore is <= 0). Then, if the socket supports ** persistent connections then we register the channel in the Host cache ** and wait until the other end closes it or we get a time out on our side */ PUBLIC BOOL HTChannel_delete (HTChannel * channel, int status) { if (channel) { HTTRACE(PROT_TRACE, "Channel..... Delete %p with semaphore %d, status %d\n" _ channel _ channel->semaphore _ status); /* ** We call the free methods on both the input stream and the output ** stream so that we can free up the stream pipes. However, note that ** this doesn't mean that we close the input stream and output stream ** them selves - only the generic streams */ HTChannel_deleteInput(channel, status); HTChannel_deleteOutput(channel, status); /* ** Check whether this channel is used by other objects or we can ** delete it and free memory. */ if (channel->semaphore <= 0 && channels && ( channel->sockfd != INVSOC || channel->fp != NULL)) { int hash = HASH(channel->sockfd); HTList * list = channels[hash]; if (list) { HTList_removeObject(list, (void *) channel); free_channel(channel); return YES; } } else HTChannel_downSemaphore(channel); } return NO; } /* HTChannel_deleteAll ** ------------------- ** Destroys all channels. This is called by HTLibTerminate(0 */ PUBLIC BOOL HTChannel_deleteAll (void) { if (channels) { HTList * cur; int cnt; for (cnt=0; cntsockfd : INVSOC; } PUBLIC BOOL HTChannel_setSocket (HTChannel * channel, SOCKET sockfd) { if (channel) { /* ** As we use the socket number as the hash entry then we have to ** update the hash table as well. */ int old_hash = HASH(channel->sockfd); int new_hash = sockfd < 0 ? 0 : HASH(sockfd); HTList * list = channels[old_hash]; if (list) HTList_removeObject(list, channel); if (!channels[new_hash]) channels[new_hash] = HTList_new(); list = channels[new_hash]; HTList_addObject(list, channel); channel->sockfd = sockfd; return YES; } return NO; } /* ** Return the file descriptor associated with this channel */ PUBLIC FILE * HTChannel_file (HTChannel * channel) { return channel ? channel->fp : NULL; } PUBLIC BOOL HTChannel_setFile (HTChannel * channel, FILE * fp) { if (channel) { channel->fp = fp; return YES; } return NO; } /* ** We keep the associated Host object in case we have a ** sleeping connection. */ PUBLIC BOOL HTChannel_setHost (HTChannel * ch, HTHost * host) { if (ch) { ch->host = host; return YES; } return NO; } PUBLIC HTHost * HTChannel_host (HTChannel * ch) { return (ch ? ch->host : NULL); } /* ** Increase the semaphore for this channel */ PUBLIC void HTChannel_upSemaphore (HTChannel * channel) { if (channel) { channel->semaphore++; HTTRACE(PROT_TRACE, "Channel..... Semaphore increased to %d for channel %p\n" _ channel->semaphore _ channel); #ifdef HT_MUX HTMuxChannel * muxch = HTMuxChannel_find(me); HTProtocol * protocol = HTNet_protocol(net); net->session = HTMuxSession_connect(muxch, net, HTProtocol_id(protocol)); #endif /* HT_MUX */ } } /* ** Decrease the semaphore for this channel */ PUBLIC void HTChannel_downSemaphore (HTChannel * channel) { if (channel) { channel->semaphore--; if (channel->semaphore <= 0) channel->semaphore = 0; HTTRACE(PROT_TRACE, "Channel..... Semaphore decreased to %d for channel %p\n" _ channel->semaphore _ channel); } } /* ** Explicitly set the semaphore for this channel */ PUBLIC void HTChannel_setSemaphore (HTChannel * channel, int semaphore) { if (channel) { channel->semaphore = semaphore; if (channel->semaphore <= 0) channel->semaphore = 0; HTTRACE(PROT_TRACE, "Channel..... Semaphore set to %d for channel %p\n" _ channel->semaphore _ channel); } } /* ** Create the input stream and bind it to the channel ** Please read the description in the HTIOStream module on the parameters */ PUBLIC BOOL HTChannel_setInput (HTChannel * ch, HTInputStream * input) { if (ch) { ch->input = input; return YES; } return NO; } PUBLIC HTInputStream * HTChannel_input (HTChannel * ch) { return ch ? ch->input : NULL; } PUBLIC BOOL HTChannel_deleteInput (HTChannel * channel, int status) { if (channel && channel->input && status != HT_IGNORE) { HTTRACE(PROT_TRACE, "Channel..... Delete input stream %p from channel %p\n" _ channel->input _ channel); if (status==HT_INTERRUPTED || status==HT_TIMEOUT) (*channel->input->isa->abort)(channel->input, NULL); else (*channel->input->isa->_free)(channel->input); return YES; } return NO; } /* ** Create the output stream and bind it to the channel ** Please read the description in the HTIOStream module on the parameters */ PUBLIC BOOL HTChannel_setOutput (HTChannel * ch, HTOutputStream * output) { if (ch) { ch->output = output; return YES; } return NO; } PUBLIC HTOutputStream * HTChannel_output (HTChannel * ch) { return ch ? ch->output : NULL; } PUBLIC BOOL HTChannel_deleteOutput (HTChannel * channel, int status) { if (channel && channel->output && status != HT_IGNORE) { HTTRACE(PROT_TRACE, "Channel..... Delete input stream %p from channel %p\n" _ channel->input _ channel); if (status==HT_INTERRUPTED || status==HT_TIMEOUT) (*channel->output->isa->abort)(channel->output, NULL); else (*channel->output->isa->_free)(channel->output); return YES; } return NO; } PUBLIC HTInputStream * HTChannel_getChannelIStream (HTChannel * ch) { if (ch) return &ch->channelIStream; return NULL; } PUBLIC HTOutputStream * HTChannel_getChannelOStream (HTChannel * ch) { if (ch) return &ch->channelOStream; return NULL; } libwww/Library/src/HTChannl.html0100644000076400001440000001063206740672640016306 0ustar danielusers W3C Sample Code Library libwww Channel Interface

    The Channel Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    A channel contains information about sockets and their input and output streams. A channel represents the front end for receiving data towards the underlying transport. The definition of a channel describes how we are to read the data coming in on a socket, for example. In other words - a channel represents the first part of how to get handle incoming data in the Library:

    • Reading data on a channel
    • Defining a target for incoming data
    • Defining a protocol state machine that can handle the data

    This module is implemented by HTChannl.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTCHANNL_H
    #define HTCHANNL_H
    typedef struct _HTChannel HTChannel;
    #include "HTHost.h"
    #include "HTIOStream.h"
    

    The Channel Object

    The channel object contains an input and an output stream for a particular connection.

    Creation and Deletion of Channel Objects

    Either the socket can be invalid (INVSOC) or the file descriptor can be NULL but not both.
    extern HTChannel * HTChannel_new (SOCKET sockfd, FILE * fp, BOOL active);
    

    Deleting a Channel Object

    extern BOOL HTChannel_delete (HTChannel * channel, int status);
    extern BOOL HTChannel_deleteAll (void);
    extern BOOL HTChannel_safeDeleteAll (void);
    

    Search for a Channel

    Look for a channel object if we for some reason should have lost it

    extern HTChannel * HTChannel_find (SOCKET sockfd);
    

    Get Transport Descriptor for Channel

    A transport descriptor can be either a ANSI C file descriptor or a BSD socket. As it is difficult for the channel to know which one is used by a specific transport, we leave this to the caller to figure out. This is probably not the best way of doing it.

    extern SOCKET HTChannel_socket	(HTChannel * channel);
    extern BOOL HTChannel_setSocket	(HTChannel * channel, SOCKET socket);
    extern FILE * HTChannel_file	(HTChannel * channel);
    extern BOOL HTChannel_setFile   (HTChannel * channel, FILE * fp);
    

    The Host Object

    The Channel object also keeps a link to the host object so that we have a link to the persistent connection repository.

    extern BOOL HTChannel_setHost (HTChannel * ch, HTHost * host);
    extern HTHost * HTChannel_host (HTChannel * ch);
    

    Semaphores

    Adjust the semaphore on a channel. As many Net objects can point to the same channel we need to keep count of them so that we know if we can delete a channel or if it is still in use. We do this by having a simple semaphore associated with each channel object

    extern void HTChannel_upSemaphore   (HTChannel * channel);
    extern void HTChannel_downSemaphore (HTChannel * channel);
    extern void HTChannel_setSemaphore  (HTChannel * channel, int semaphore);
    

    Create Input and Output Streams

    You create the input stream and bind it to the channel using the following methods. Please read the description in the HTIOStream module on the parameters target, param, and mode. The input and output stream are instances created by the Transport object. The Transport Object defines the creation methods for the inout and output streams and the Channel object contains the actualy stream objects.

    extern BOOL HTChannel_setInput (HTChannel * ch, HTInputStream * input);
    extern HTInputStream * HTChannel_input (HTChannel * ch);
    extern BOOL HTChannel_deleteInput (HTChannel * channel, int status);
    extern BOOL HTChannel_setOutput (HTChannel * ch, HTOutputStream * output);
    extern HTOutputStream * HTChannel_output (HTChannel * ch);
    extern BOOL HTChannel_deleteOutput (HTChannel * channel, int status);
    extern HTInputStream * HTChannel_getChannelIStream (HTChannel * ch);
    extern HTOutputStream * HTChannel_getChannelOStream (HTChannel * ch);
    
    #endif /* HTCHANNL */
    


    @(#) $Id: HTChannl.html,v 2.12 2025/07/07 15:43:28 frystyk Exp $
    libwww/Library/src/HTChunk.c0100644000076400001440000001343007153731542015424 0ustar danielusers/* HTChunk.c ** CHUNK HANDLING: FLEXIBLE ARRAYS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTChunk.c,v 2.27 2025/09/01 13:47:14 kahan Exp $ ** ** history: AL, HF 28 Apr 94, Now chunk->data is filled by '\0' so ** that the string is terminated at any time. That makes ** HTChunk_terminate not needed any more, but never mind. ** EGP 15 Mar 96, Added CString conversions. ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTChunk.h" /* Implemented here */ struct _HTChunk { int size; /* In bytes */ int growby; /* Allocation unit in bytes */ int allocated; /* Current size of *data */ char * data; /* Pointer to malloced area or 0 */ }; /* --------------------------------------------------------------------------*/ /* Create a chunk with a certain allocation unit ** -------------- */ PUBLIC HTChunk * HTChunk_new (int grow) { HTChunk * ch; if ((ch = (HTChunk *) HT_CALLOC(1, sizeof(HTChunk))) == NULL) HT_OUTOFMEM("HTChunk_new"); ch->growby = grow; return ch; } /* Clear a chunk of all data ** -------------------------- ** Zero the space but do NOT HT_FREE it. We zero because we promise to have ** a NUL terminated string at all times. */ PUBLIC void HTChunk_clear (HTChunk * ch) { if (ch) { ch->size = 0; if (ch->data) memset((void *) ch->data, '\0', ch->allocated); } } /* Free a chunk ** ------------ */ PUBLIC void HTChunk_delete (HTChunk * ch) { if (ch) { HT_FREE(ch->data); HT_FREE(ch); } } PUBLIC char * HTChunk_data (HTChunk * ch) { return ch ? ch->data : NULL; } PUBLIC int HTChunk_size (HTChunk * ch) { return ch ? ch->size : -1; } PUBLIC BOOL HTChunk_truncate (HTChunk * ch, int length) { if (ch && length >= 0 && length < ch->size) { memset(ch->data+length, '\0', ch->size-length); ch->size = length; return YES; } return NO; } /* Set the "size" of the Chunk's data ** ----------------------------------- ** The actual allocated length must be at least 1 byte longer to hold the ** mandatory null terminator. */ PUBLIC BOOL HTChunk_setSize (HTChunk * ch, int length) { if (ch && length >= 0) { if (length < ch->size) memset(ch->data+length, '\0', ch->size-length); else if (length >= ch->allocated) HTChunk_ensure(ch, length - ch->size); ch->size = length; return YES; } return NO; } /* Create a chunk from an allocated string ** --------------------------------------- */ PUBLIC HTChunk * HTChunk_fromCString (char * str, int grow) { HTChunk * ch; ch = HTChunk_new(grow); if (str) { ch->data = str; /* can't handle non-allocated str */ ch->size = strlen(str); ch->allocated = ch->size + 1; /* [SIC] bobr */ } return ch; } /* Create a chunk from an allocated buffer ** --------------------------------------- */ PUBLIC HTChunk * HTChunk_fromBuffer (char * buf, int buflen, int size, int grow) { HTChunk * ch; ch = HTChunk_new(grow); if (buf) { ch->data = buf; ch->size = ch->allocated = buflen; if (size < buflen) HTChunk_setSize(ch, size); /* This ensures the end is 0-filled */ } return ch; } /* Free a chunk but keep the data ** ------------------------------ */ PUBLIC char * HTChunk_toCString (HTChunk * ch) { char * ret = 0; if (ch) { ret = ch->data; HT_FREE(ch); } return ret; } /* Append a character ** ------------------ */ PUBLIC void HTChunk_putc (HTChunk * ch, char c) { if (ch) { if (!ch->data || ch->size >= ch->allocated-1) { /* [SIC] bobr */ if (ch->data) { if ((ch->data = (char *) HT_REALLOC(ch->data,ch->allocated+ch->growby)) == NULL) HT_OUTOFMEM("HTChunk_putc"); memset((void *) (ch->data + ch->allocated), '\0', ch->growby); } else { if ((ch->data = (char *) HT_CALLOC(1, ch->allocated+ch->growby)) == NULL) HT_OUTOFMEM("HTChunk_putc"); } ch->allocated += ch->growby; } *(ch->data+ch->size++) = c; } } /* Append a string ** --------------- */ PUBLIC void HTChunk_puts (HTChunk * ch, const char * s) { HTChunk_putb(ch, s, (int) strlen(s)); } /* Append a block ** --------------- ** The string is always zero terminated */ PUBLIC void HTChunk_putb (HTChunk * ch, const char * block, int len) { if (ch && block && len) { int needed = ch->size+len; if (needed >= ch->allocated) { ch->allocated = needed - needed%ch->growby + ch->growby; if (ch->data) { if ((ch->data = (char *) HT_REALLOC(ch->data, ch->allocated)) == NULL) HT_OUTOFMEM("HTChunk_putb"); memset((void *) (ch->data + needed), '\0', ch->allocated-needed); } else { if ((ch->data = (char *) HT_CALLOC(1, ch->allocated)) == NULL) HT_OUTOFMEM("HTChunk_putb"); } } memcpy((void *) (ch->data+ch->size), block, len); ch->size = needed; } } PUBLIC void HTChunk_terminate (HTChunk * ch) { HTChunk_putc(ch, '\0'); } /* Ensure a certain size ** --------------------- */ PUBLIC void HTChunk_ensure (HTChunk * ch, int len) { if (ch && len > 0) { int needed = ch->size+len; if (needed >= ch->allocated) { ch->allocated = needed - needed%ch->growby + ch->growby; if (ch->data) { if ((ch->data = (char *) HT_REALLOC(ch->data, ch->allocated)) == NULL) HT_OUTOFMEM("HTChunk_ensure"); memset((void *) (ch->data + ch->size), '\0', ch->allocated-ch->size); } else { if ((ch->data = (char *) HT_CALLOC(1, ch->allocated)) == NULL) HT_OUTOFMEM("HTChunk_ensure"); } } } #if 0 if (needed <= ch->allocated) return; ch->allocated = needed-1 - ((needed-1) % ch->growby) + ch->growby; /* Round up */ ch->data = ch->data ? (char *)realloc(ch->data, ch->allocated) : (char *)HT_MALLOC(ch->allocated); if (ch->data == NULL) HT_OUTOFMEM(__FILE__, "HTChunk_ensure"); #endif } libwww/Library/src/HTChunk.html0100644000076400001440000001420507153731542016147 0ustar danielusers W3C Sample Code Library libwww Chunk Class

    The Chunk Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The Chunk Class defines a way to automatically handle dynamic strings and other data types. You create a chunk with an initial size and it will then automatically grow to accommodate added data to the chunk. It is a general utility module. It is guaranteed that the array is '\0' terminated at all times (and hence is a valid C type string). The method HTChunkTerminate can be used to explicitly add a terminating '\0' and then to include this character in the chunk size. If left out, the terminating character is not considered part of the chunk.

    Note: The names without a "_" (made as a #define's) are only provided for backwards compatibility and should not be used.

    This module is implemented by HTChunk.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTCHUNK_H
    #define HTCHUNK_H
    

    Create new chunk

    Create a new chunk and specify the number of bytes to allocate at a time when the chunk is later extended. Arbitrary but normally a trade-off time vs. memory

    typedef struct _HTChunk HTChunk;
    extern HTChunk * HTChunk_new (int growby);
    

    Free a chunk

    Free a chunk created by HTChunk_newfrom memory

    extern void HTChunk_delete (HTChunk * ch);
    

    Clear a chunk

    Keep the chunk in memory but clear all data kept inside. This can be used if you know that you can reuse the allocated memory instead of allocating new memory. This zeros out all the allocated data (even data past the indicated size) and sets the size of the chunk to 0. If you have not used any bytes past the indicated size, it is more efficient to truncate the chunk to 0 instead.

    extern void HTChunk_clear (HTChunk * ch);
    

    Ensure a Chunk has a Certain Amount of Free Space

    Make sure that a chunk has enough memory allocated to grow by the indicated extra size. If this is not the case, then the chunk is expanded (in multiples of the chunk's "growby" size). Nothing is done if the current size plus the requested extra space fits within the chunk's currently allocated memory.

    extern void HTChunk_ensure (HTChunk * ch, int extra_size);
    

    Append a character to a chunk

    Add the character and increment the size of the chunk by one character

    extern void HTChunk_putc (HTChunk * ch, char c);
    

    Append a string to a chunk

    Add the string and increment the size of the chunk by the length of the string (without the trailing zero)

    extern void HTChunk_puts (HTChunk * ch, const char *str);
    

    Append a block to a chunk

    Add the block and increment the size of the chunk by the len

    extern void HTChunk_putb (HTChunk * ch, const char *block, int len);
    

    Return Pointer to Data

    This define converts a chunk to a normal char pointer so that it can be parsed to any ANSI C string function.

    extern char * HTChunk_data (HTChunk * ch);
    

    Return Current Size

    Returns the current size of the chunk

    extern int HTChunk_size (HTChunk * ch);
    

    Setting the Size of a Chunk

    If you want to cut off a piece of a chunk or extend it to make room for some direct buffer manipulation, then you can use one of these functions. Both of these calls set the size of the chunk to be size, but the truncate call only allows you to make the string shorter. If the string is made shorter, the formerly-used bytes are cleared, so truncating a chunk to 0 is analogous to clearing it, but slightly more efficient.

    extern BOOL HTChunk_truncate (HTChunk * ch, int size);
    extern BOOL HTChunk_setSize (HTChunk * ch, int size);
    

    Zero Terminate a chunk

    As a chunk often is a dynamic string, it needs to be terminated by a zero in order to be used in C. However, by default any chunk is always zero terminated, so the only purpose of this function is to increment the size counter with one corresponding to the zero.

    extern void HTChunk_terminate (HTChunk * ch);
    

    CString Conversions

    A Chunk may be built from an allocated string. The chunk assumes control of the passed string, eliminating the need for additional allocations and string copies.
    When you take control of the CString from a chunk, the chunk is destroyed.

    extern HTChunk * HTChunk_fromCString	(char * str, int grow);
    extern char * HTChunk_toCString		(HTChunk * ch);
    

    Creating a Chunk from an allocated buffer

    A Chunk may be built from an allocted buffer. You must specify how much memory is allocated in the buffer (buflen) and what the size the new Chunk should be (size). All memory between size and buflen is zeroed. Note that is is legal to specify a size equal to the buflen if you don't expect the Chunk to be null terminated. The chunk takes control of the memory, and will free it when the Chunk is destroyed. Note that in order to avoid conflicts, the buffer's memory should be allocated using libwww's dedicated functions.

    extern HTChunk * HTChunk_fromBuffer (char * buf, int buflen, int size, int grow);
    

    Old Interface Names

    Don't use these in new applications

    #define HTChunkCreate(growby) HTChunk_new(growby)
    #define HTChunkFree(ch)       HTChunk_delete(ch)
    #define HTChunkClear(ch)      HTChunk_clear(ch)
    #define HTChunkEnsure(ch, s)  HTChunk_ensure((ch), (s))
    #define HTChunkPutc(ch, c)    HTChunk_putc((ch), (c))
    #define HTChunkPuts(ch, str)  HTChunk_puts((ch), (str))
    #define HTChunkTerminate(ch)  HTChunk_terminate(ch)
    #define HTChunkData(ch)       HTChunk_data(ch)
    #define HTChunkSize(ch)       HTChunk_size(ch)
    
    #endif
    


    @(#) $Id: HTChunk.html,v 2.39 2025/09/01 13:47:14 kahan Exp $
    libwww/Library/src/HTConLen.c0100644000076400001440000002152207123421605015524 0ustar danielusers/* HTConlen.c ** CONTENT LENGTH COUNTER STREAM ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTConLen.c,v 2.20 2025/06/19 13:43:33 kahan Exp $ ** ** This stream counts the number of bytes in a stream until it reaches ** max number of bytes it can occupy. If this happens then it gives up. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTConLen.h" /* Implemented here */ #define HT_MIN_BLOCK 0x100 #define HT_MAX_BLOCK 0x2000 #define HT_MAX_SIZE 0x10000 #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target,(b),(l)) typedef struct _HTBufItem { int len; char * buf; struct _HTBufItem * next; } HTBufItem; typedef enum _BufferMode { HT_BM_PLAIN = 0x0, HT_BM_DELAY = 0x1, /* Buffer full and we pause */ HT_BM_COUNT = 0x2, /* Content length counter */ HT_BM_PIPE = 0x4 /* Pipe buffer */ } BufferMode; typedef enum _BufferState { HT_BS_OK = 0, HT_BS_PAUSE = 1, HT_BS_TRANSPARENT = 2 } BufferState; struct _HTStream { HTStreamClass * isa; HTRequest * request; HTStream * target; char * tmp_buf; int tmp_ind; int tmp_max; HTBufItem * head; HTBufItem * tail; int max_size; int cur_size; int conlen; BufferMode mode; /* State of the buffering */ BufferState state; }; /* ------------------------------------------------------------------------- */ /* ** MIME output with content-length calculation ** ------------------------------------------- ** This stream also buffers the result to find out the content length. ** If a maximum buffer limit is reached Content-Length is calculated ** for logs but it is not sent to the client -- rather the buffer is ** flushed right away. ** Code taken from HTRequest.c written by Ari Luotonen and modified to ** fit new stream model */ PRIVATE BOOL free_buf (HTBufItem * me) { if (me) { HT_FREE(me->buf); HT_FREE(me); return YES; } return NO; } PRIVATE void free_buf_all (HTStream * me) { HTBufItem * cur = me->head; HTBufItem * killme; me->tmp_ind = 0; me->tmp_max = 0; HT_FREE(me->tmp_buf); while (cur) { killme = cur; cur = cur->next; free_buf(cur); } me->head = me->tail = NULL; } PRIVATE void append_buf (HTStream * me) { HTBufItem * b; if ((b = (HTBufItem *) HT_CALLOC(1, sizeof(HTBufItem))) == NULL) HT_OUTOFMEM("append_buf"); b->len = me->tmp_ind; b->buf = me->tmp_buf; me->tmp_ind = 0; me->tmp_max = 0; me->tmp_buf = 0; if (me->tail) me->tail->next = b; else me->head = b; me->tail = b; } PRIVATE BOOL alloc_new (HTStream * me, int size) { if (me->conlen >= me->max_size) { HTTRACE(STREAM_TRACE, "Buffer...... size %d reached, going transparent\n" _ me->max_size); return NO; } else if (size) { me->tmp_ind = 0; me->tmp_max = size; if ((me->tmp_buf = (char *) HT_MALLOC(size)) == NULL) HT_OUTOFMEM("buf_put_char"); HTTRACE(STREAM_TRACE, "Buffer...... created with len %d\n" _ size); return YES; } return NO; } /* ** After flushing the buffer we go into transparent mode so that we still ** can handle incoming data. If we already are in transparent mode then ** don't do anything. */ PRIVATE int buf_flush (HTStream * me) { if (me->state != HT_BS_TRANSPARENT) { HTBufItem * cur; if (me->tmp_buf) append_buf(me); while ((cur = me->head)) { int status; if ((status = PUTBLOCK(cur->buf, cur->len)) != HT_OK) { return status; } me->head = cur->next; free_buf(cur); } /* If we are not a pipe then do no more buffering */ if ((me->mode & HT_BM_PIPE)) me->state = HT_BS_TRANSPARENT; } return (*me->target->isa->flush)(me->target); } PRIVATE int buf_put_block (HTStream * me, const char * b, int l) { /* ** If we are in pause mode then don't write anything but return PAUSE. ** The upper stream should then respect it and don't write any more data. */ if (me->state == HT_BS_PAUSE) return HT_PAUSE; /* ** Start handling the incoming data. If we are still buffering then add ** it to the buffer. Otherwise just pump it through. Note that we still ** count the length - even if we have given up buffering! */ me->conlen += l; if (me->state != HT_BS_TRANSPARENT) { /* ** If there is still room in the existing chunk then fill it up. ** Otherwise create a new chunk and add it to the linked list of ** chunks. If the buffer fills up then either return HT_PAUSE or ** flush it and go transparent. */ if (me->tmp_buf && me->tmp_max-me->tmp_ind >= l) { /* Still room */ memcpy(me->tmp_buf + me->tmp_ind, b, l); me->tmp_ind += l; return HT_OK; } else { /* ** Add the temporary buffer (if any) to the list of chunks */ if (me->tmp_buf) append_buf(me); /* ** Find the right size of the next chunk. We increase the size ** exponentially until we reach HT_MAX_BLOCK in order to minimize ** the number of mallocs. */ if (me->cur_size < HT_MAX_BLOCK) { int newsize = me->cur_size ? me->cur_size : HT_MIN_BLOCK; while (l > newsize && newsize < HT_MAX_BLOCK) newsize *= 2; me->cur_size = newsize; } if (alloc_new(me, me->cur_size)) { /* Buffer could accept the new data */ memcpy(me->tmp_buf, b, l); me->tmp_ind = l; } else if (me->mode & HT_BM_DELAY) { /* Buffer ran full and we pause */ me->state = HT_BS_PAUSE; HTTRACE(STREAM_TRACE, "Buffer....... Paused\n"); return HT_PAUSE; } else { /* Buffer ran full and we flush and go transparent */ int status = buf_flush(me); if (status != HT_OK) return status; } } } /* ** If we couldn't buffer the data then check whether we should give up ** or pause the stream. If we are in transparent mode then put the rest ** of the data down the pipe. */ if (me->state == HT_BS_TRANSPARENT) return PUTBLOCK(b, l); return HT_OK; } PRIVATE int buf_put_char (HTStream * me, char c) { return buf_put_block(me, &c, 1); } PRIVATE int buf_put_string (HTStream * me, const char * s) { return buf_put_block(me, s, (int) strlen(s)); } PRIVATE int buf_free (HTStream * me) { int status = HT_OK; /* ** If the buffer has not been flushed explicit and we are a pipe buffer ** then we don't free it. */ if (me->mode & HT_BM_PIPE && me->state != HT_BS_TRANSPARENT) { HTTRACE(STREAM_TRACE, "PipeBuffer Waiting to be flushed\n"); return HT_OK; } /* ** Should we count the content length and assign it to the ** anchor? */ if (me->mode & HT_BM_COUNT && me->request) { HTParentAnchor * anchor = HTRequest_anchor(me->request); HTTRACE(STREAM_TRACE, "Buffer........ Calculated content-length: %d\n" _ me->conlen); HTAnchor_setLength(anchor, me->conlen); } /* ** Flush the buffered data - even if we are paused. That is, we always ** flush - except if we have already flushed the buffer, of course. ** Also, we don't flush if we are a PIPE buffer. Then the flush MUST be ** called explicitly and the buffer can not be freed before this ** happens. */ if ((status = buf_flush(me)) != HT_OK) return status; if ((status = (*me->target->isa->_free)(me->target)) != HT_OK) return status; HT_FREE(me); return status; } PRIVATE int buf_abort (HTStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target,e); free_buf_all(me); HT_FREE(me); HTTRACE(PROT_TRACE, "Buffer...... ABORTING...\n"); return HT_ERROR; } HTStreamClass HTBufferClass = { "Buffer", buf_flush, buf_free, buf_abort, buf_put_char, buf_put_string, buf_put_block }; PUBLIC HTStream * HTBuffer_new (HTStream * target, HTRequest * request, int max_size) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTBufferStream"); me->isa = &HTBufferClass; me->target = target; me->request = request; me->max_size = (max_size > 0) ? max_size : HT_MAX_SIZE; me->mode = HT_BM_PLAIN; HTTRACE(STREAM_TRACE, "Buffer...... Created with size %d\n" _ me->max_size); return me; } PUBLIC HTStream * HTDelayBuffer (HTStream * target, int max_size) { HTStream * me = HTBuffer_new(target, NULL, max_size); if (me) { me->mode = HT_BM_DELAY; return me; } return HTErrorStream(); } PUBLIC HTStream * HTContentCounter (HTStream * target, HTRequest * request, int max_size) { HTStream * me = HTBuffer_new(target, NULL, max_size); if (me) { me->mode = HT_BM_COUNT; return me; } return HTErrorStream(); } PUBLIC HTStream * HTPipeBuffer (HTStream * target, int max_size) { HTStream * me = HTBuffer_new(target, NULL, max_size); if (me) { me->mode = HT_BM_PIPE; return me; } return HTErrorStream(); } libwww/Library/src/HTConLen.html0100644000076400001440000000574006526451215016260 0ustar danielusers W3C Sample Code Library libwww Content Length Counter and Other Buffer Streams

    Content Length Counter and Other Buffer Streams

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module provides various forms of buffering streams. You can also check out the chunk buffer stream which converts a stream to a memory buffer. These streams preseerve the streaming model.

    The content length counter  stream buffers the result to find out the content length before the data is forwarded to the target stream. You can use this stream when generating a HTTP response in order to find the content length before writing the object to the socket, for example.

    This module is implemented by HTConLen.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTCONLEN_H
    #define HTCONLEN_H
    

    Buffer Stream

    This stream does almost the same as the content length counter stream except that it doesn't count the length! In other words - it's a completely normal memory buffer for the stream. If the buffer fills up, this stream flushes the buffer and goes transparent so that all new data will be pumped through without any buffering.

    extern HTStream * HTBuffer_new		(HTStream *	target,
    					 HTRequest *	request,
    					int		max_size);
    

    Content Length Counter Stream

    This stream can be inserted anywhere to count the content length of the body. The result is passed to the Anchor object of this request so that future requests for the content length will get the right size.

    extern HTStream * HTContentCounter	(HTStream *	target,
    					 HTRequest *	request,
    					 int		max_size);
    

    Delay Buffer Stream

    This stream is much like the buffer stream above but instead of goin transparent when the buffer fills up, it returns HT_PAUSE which indicates that the stream doesn't accept more data and so the caller should not put any more data into it. When the buffer is flushed (the flush method invoked) then the stream goes into transparent mode, just like the buffer stream.

    extern HTStream * HTDelayBuffer    	(HTStream *	target,
    					 int		max_size);
    

    Pipe Buffer Stream

    This stream is much like the buffer stream above but instead of goin transparent when the buffer fills up, it returns HT_PAUSE which indicates that the stream doesn't accept more data and so the caller should not put any more data into it.

    extern HTStream * HTPipeBuffer    	(HTStream *	target,
    					 int		max_size);
    

    End of definition module

    #endif /* HTCONLEN_H */
    


    @(#) $Id: HTConLen.html,v 2.8 2025/05/14 02:10:21 frystyk Exp $
    libwww/Library/src/HTCookie.c0100644000076400001440000002675706750450650015605 0ustar danielusers/* ** SIMPLE HTTP COOKIE FILTER HANDLER ** ** (c) COPYRIGHT MIT 1999. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTCookie.c,v 2.5 2025/07/31 01:30:16 raff Exp $ ** ** Written based on Jim Raven's code sent to the list ** ** History: ** JR: Sent code to the list ** HFN: Made a libwww module ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWHTTP.h" #include "WWWMIME.h" #include "HTCookie.h" /* Implemented here */ /* Interface to persistent cookie jar */ PRIVATE HTCookieSetCallback * SetCookie = NULL; PRIVATE void * SetCookieContext = NULL; PRIVATE HTCookieFindCallback * FindCookie = NULL; PRIVATE void * FindCookieContext = NULL; /* Are cookies enabled */ PRIVATE BOOL baking_cookies = NO; /* Our cookies */ struct _HTCookie { char * name; char * value; char * domain; char * path; time_t expiration; BOOL secure; }; /* Hold all cookies found for a single request */ typedef struct _HTCookieHolder { HTRequest * request; HTList * cookies; } HTCookieHolder; /* List of current cookie holders */ PRIVATE HTList * cookie_holder = NULL; /* What should we do with cookies? */ PRIVATE HTCookieMode CookieMode = HT_COOKIE_PROMPT | HT_COOKIE_ACCEPT | HT_COOKIE_SEND; /* ------------------------------------------------------------------------- */ PRIVATE HTCookie * HTCookie_new (void) { HTCookie * me = NULL; if ((me = (HTCookie *) HT_CALLOC(1, sizeof(HTCookie))) == NULL) HT_OUTOFMEM("HTCookie_new"); return me; } PRIVATE BOOL HTCookie_delete (HTCookie * me) { if (me) { HT_FREE(me->name); HT_FREE(me->value); HT_FREE(me->domain); HT_FREE(me->path); HT_FREE(me); return YES; } return NO; } PUBLIC BOOL HTCookie_setName (HTCookie * me, const char * name) { if (me && name) { me->name = StrAllocCopy(me->name, name); return YES; } return NO; } PUBLIC char * HTCookie_name (HTCookie * me) { return me ? me->name : NULL; } PUBLIC BOOL HTCookie_setValue (HTCookie * me, const char * value) { if (me && value) { me->value = StrAllocCopy(me->value, value); return YES; } return NO; } PUBLIC char * HTCookie_value (HTCookie * me) { return me ? me->value : NULL; } PUBLIC BOOL HTCookie_setDomain (HTCookie * me, const char * domain) { if (me && domain) { me->domain = StrAllocCopy(me->domain, domain); return YES; } return NO; } PUBLIC char * HTCookie_domain (HTCookie * me) { return me ? me->domain : NULL; } PUBLIC BOOL HTCookie_setPath (HTCookie * me, const char * path) { if (me && path) { me->path = StrAllocCopy(me->path, path); return YES; } return NO; } PUBLIC char * HTCookie_path (HTCookie * me) { return me ? me->path : NULL; } PUBLIC time_t HTCookie_setExpiration (HTCookie * me, time_t expiration) { if (me) { me->expiration = expiration; return YES; } return NO; } PUBLIC time_t HTCookie_expiration (HTCookie * me) { return me ? me->expiration : -1; } PUBLIC time_t HTCookie_setSecure (HTCookie * me, BOOL secure) { if (me) { me->secure = secure; return YES; } return NO; } PUBLIC BOOL HTCookie_isSecure (HTCookie * me) { return me ? me->secure : NO; } /* ------------------------------------------------------------------------- */ PRIVATE BOOL HTCookieHolder_addCookie (HTRequest * request, HTCookie * cookie) { if (request && cookie) { HTList * cur = cookie_holder; HTCookieHolder * pres = NULL; /* Make sure that we have a cookie holder list */ if (!cookie_holder) cookie_holder = HTList_new(); /* See if we already have a cookie holder for this request */ while ((pres = (HTCookieHolder *) HTList_nextObject(cur))) { if (pres->request == request) break; } /* If found then use existing cookie holder, otherwise create new one */ if (!pres) { if ((pres = (HTCookieHolder *) HT_CALLOC(1, sizeof(HTCookieHolder))) == NULL) HT_OUTOFMEM("HTCookieHolder_newCookie"); pres->request = request; pres->cookies = HTList_new(); /* Add to cookie holder list */ HTList_addObject(cookie_holder, pres); } /* Now add the cookie */ HTList_addObject(pres->cookies, cookie); return YES; } return NO; } PRIVATE HTCookieHolder * HTCookieHolder_find (HTRequest * request) { if (request) { HTList * cur = cookie_holder; HTCookieHolder * pres = NULL; while ((pres = (HTCookieHolder *) HTList_nextObject(cur))) { if (pres->request == request) return pres; } } return NULL; } PRIVATE BOOL HTCookieHolder_delete (HTCookieHolder * me) { if (me) { if (me->cookies) { HTList * cookies = me->cookies; HTCookie * cookie; while ((cookie = (HTCookie *) HTList_nextObject(cookies))) HTCookie_delete(cookie); HTList_delete(me->cookies); } HTList_removeObject(cookie_holder, me); HT_FREE(me); return YES; } return NO; } PRIVATE BOOL HTCookieHolder_deleteAll (void) { if (cookie_holder) { HTList * cur = cookie_holder; HTCookieHolder * pres = NULL; while ((pres = (HTCookieHolder *) HTList_nextObject(cur))) { HTCookieHolder_delete(pres); } HTList_delete(cookie_holder); cookie_holder = NULL; return YES; } return NO; } /* ------------------------------------------------------------------------- */ /* ** MIME header parser for the Set-Cookie header field. We parse the cookies ** and create HTCookie objects and store them in the cookie holder so that ** the cookie after filter can deal with them accordingly. */ PRIVATE int HTCookie_parseSetCookie (HTRequest * request, HTResponse * response, char * token, char * value) { char * cookie_name = HTNextField(&value); char * cookie_value = HTNextField(&value); if (cookie_name && *cookie_name && cookie_value) { HTCookie * cookie = HTCookie_new(); char * param_pair; HTCookie_setName(cookie, cookie_name); HTCookie_setValue(cookie, cookie_value); /* Add the cookie to our holder */ HTCookieHolder_addCookie(request, cookie); /* Parse cookie parameters */ while ((param_pair = HTNextParam(&value))) { char * tok = HTNextField(¶m_pair); char * val = param_pair; if (tok) { if (!strcasecomp(tok, "expires") && val && *val) { HTTRACE(STREAM_TRACE, "Cookie...... Expires `%s\'\n" _ val); HTCookie_setExpiration(cookie, HTParseTime(val, NULL, YES)); } else if (!strcasecomp(tok, "domain") && val && *val) { HTTRACE(STREAM_TRACE, "Cookie...... Domain `%s\'\n" _ val); HTCookie_setDomain(cookie, val); } else if (!strcasecomp(tok, "path") && val && *val) { HTTRACE(STREAM_TRACE, "Cookie...... Path `%s\'\n" _ val); HTCookie_setPath(cookie, val); } else if (!strcasecomp(tok, "secure")) { HTTRACE(STREAM_TRACE, "Cookie...... Secure `%s\'\n" _ val); HTCookie_setSecure(cookie, YES); } else HTTRACE(STREAM_TRACE, "Cookie...... Unknown `%s\' with value `%s\'\n" _ tok _ val ? val : ""); } } } return HT_OK; } /* ** Check whether the application provides us with a cookie or more. */ PRIVATE int HTCookie_beforeFilter (HTRequest * request, void * param, int mode) { if ((CookieMode & HT_COOKIE_SEND) && FindCookie) { HTAssocList * cookies = (*FindCookie)(request, FindCookieContext); if (cookies) { HTChunk * cookie_header = HTChunk_new(64); HTAssocList * cur = cookies; HTAssoc * pres; BOOL first=YES; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { if (!first) HTChunk_putc(cookie_header, ';'); HTChunk_puts(cookie_header, HTAssoc_name(pres)); HTChunk_putc(cookie_header, '='); HTChunk_puts(cookie_header, HTAssoc_value(pres)); first = NO; } HTRequest_addExtraHeader(request, "Cookie", HTChunk_data(cookie_header)); HTChunk_delete(cookie_header); /* Also delete the association list */ HTAssocList_delete(cookies); } } return HT_OK; } /* ** Check the response to see if we got a cookie or more. ** If so then figure out what to do with it (prompt user, store, etc.) */ PRIVATE int HTCookie_afterFilter (HTRequest * request, HTResponse * response, void * param, int status) { if ((CookieMode & HT_COOKIE_ACCEPT) && SetCookie) { HTCookieHolder * holder = HTCookieHolder_find(request); if (holder) { HTList * cookies = holder->cookies; HTCookie * pres; while ((pres = (HTCookie *) HTAssocList_nextObject(cookies))) { /* Should we check to see if hosts match? */ if (CookieMode & (HT_COOKIE_SAME_HOST|HT_COOKIE_SAME_DOMAIN)) { char * cookie_host = HTCookie_domain(pres); if (cookie_host) { int res; char * addr = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); char * host = HTParse(addr, "", PARSE_HOST); if (CookieMode & HT_COOKIE_SAME_DOMAIN) res = tailcasecomp(cookie_host, host); else res = strcasecomp(cookie_host, host); if (res != 0) { HTTRACE(APP_TRACE, "Cookie...... Host `%s\' doesn't match what is sent in cookie `%s\'\n" _ host _ cookie_host); HT_FREE(addr); continue; } HT_FREE(addr); } } /* Should we prompt the user? */ if (CookieMode & HT_COOKIE_PROMPT) { HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM); if (prompt) { if ((*prompt)(request, HT_A_CONFIRM, HT_MSG_ACCEPT_COOKIE, NULL, NULL, NULL) != YES) continue; } else continue; } /* Call the application with our new cookie */ (*SetCookie)(request, pres, SetCookieContext); } /* Delete cookie holder */ HTCookieHolder_delete(holder); } } return HT_OK; } /* ------------------------------------------------------------------------- */ /* ** Start and stop the cookie engine */ PUBLIC BOOL HTCookie_init (void) { if (!baking_cookies) { /* Register the SetCookie header parser */ HTHeader_addParser("Set-Cookie", NO, HTCookie_parseSetCookie); /* Register the cookie before and after filters */ HTNet_addBefore(HTCookie_beforeFilter, "http://*", NULL, HT_FILTER_MIDDLE); HTNet_addAfter(HTCookie_afterFilter, "http://*", NULL, HT_ALL, HT_FILTER_MIDDLE); baking_cookies = YES; return YES; } return NO; } PUBLIC BOOL HTCookie_terminate (void) { /* Unregister Set-Cookie header parser */ HTHeader_deleteParser("Set-Cookie"); /* Unregister the cookie before and after filters */ HTNet_deleteBefore(HTCookie_beforeFilter); HTNet_deleteAfter(HTCookie_afterFilter); /* Delete all pending cookies */ HTCookieHolder_deleteAll(); baking_cookies = NO; return YES; } PUBLIC BOOL HTCookie_setCookieMode (HTCookieMode mode) { CookieMode = mode; return YES; } PUBLIC HTCookieMode HTCookie_cookieMode (void) { return CookieMode; } /* ** Callbacks can be used by the application to set and retrieve cookies ** from a persistent cookie jar as libwww doesn't provide a persistent ** storage for this kind of thing and they probably should be secured ** anyway. */ PUBLIC BOOL HTCookie_setCallbacks (HTCookieSetCallback * setCookie, void * setCookieContext, HTCookieFindCallback * findCookie, void * findCookieContext) { if (setCookie && findCookie) { HTTRACE(APP_TRACE, "Cookie...... Registering cookie callbacks\n"); SetCookie = setCookie; SetCookieContext = setCookieContext; FindCookie = findCookie; FindCookieContext = findCookieContext; return YES; } return NO; } PUBLIC BOOL HTCookie_deleteCallbacks (void) { HTTRACE(APP_TRACE, "Cookie...... Unregistering cookie callbacks\n"); SetCookie = NULL; SetCookieContext = NULL; FindCookie = NULL; FindCookieContext = NULL; return YES; } libwww/Library/src/HTCookie.html0100644000076400001440000001125606750450650016313 0ustar danielusers W3C Sample Code Library libwww Simple Cookie Handler

    Simple Cookie Handler

    /*
    **	(c) COPYRIGHT MIT 1999.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module provides a simple HTTP Cookie handling mechanism. It really also is an excersize in showing how libwww can be extended with something like cookies in a modular manner. An important thing to note about this implementation is that it does not provide storage for cookies - this is left to the application as normally cookies have to be kept under lock.

    This module is implemented by HTCookie.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTCOOKIE_H
    #define HTCOOKIE_H
    #include "WWWLib.h"
    

    Initiate and Terminate Cookie Handling

    In order to start handling cookies, you need to initiate the module. Likewise, when you are done, you must terminate the module in order to clean up memory etc. Note that this cookie handler doesn't provide storage room for cookies - the application MUST do that by registering cookie callbacks. Initiation does three things:

    1. Register a MIME header parser to parse the Set-Cookie header field
    2. Register a BEFORE filter to see if a cookie should be added to the request (uses the "set" callback)
    3. Register an AFTER filter to handle new cookies (uses the "find" callback)
    extern BOOL HTCookie_init (void);
    extern BOOL HTCookie_terminate (void);
    

    The Cookie Class

    The cookie class is used to handle cookies in libwww and to hand them off to the application. The creation and deletion of cookie object is handled by this cookie module - the application is handed a cookie and can access the elements using the following methods:

    typedef struct _HTCookie HTCookie;
    

    Cookie Name

    extern BOOL HTCookie_setName (HTCookie * me, const char * name);
    extern char * HTCookie_name (HTCookie * me);
    

    Cookie Value

    extern BOOL HTCookie_setValue (HTCookie * me, const char * value);
    extern char * HTCookie_value (HTCookie * me);
    

    Cookie Domain

    extern BOOL HTCookie_setDomain (HTCookie * me, const char * domain);
    extern char * HTCookie_domain (HTCookie * me);
    

    Cookie Path

    extern BOOL HTCookie_setPath (HTCookie * me, const char * path);
    extern char * HTCookie_path (HTCookie * me);
    

    Cookie Expiration

    extern time_t HTCookie_setExpiration (HTCookie * me, time_t expiration);
    extern time_t HTCookie_expiration (HTCookie * me);
    

    Is Cookie Secure?

    extern time_t HTCookie_setSecure (HTCookie * me, BOOL secure);
    extern BOOL HTCookie_isSecure (HTCookie * me);
    

    Cookie Callbacks

    The cookie callbacks are called before the request is shipped over the wire to see if any cookies should be included and after the response has been recieved if a new cookie is found in a response and before. Cookie callbacks can be registered with a context that is sent along with the callback when called.

    typedef BOOL HTCookieSetCallback (HTRequest * request, HTCookie * cookie, void * param);
    typedef HTAssocList * HTCookieFindCallback (HTRequest * request, void * param);
    extern BOOL HTCookie_setCallbacks (HTCookieSetCallback *	setCookie,
    				   void * 			setCookieContext,
    				   HTCookieFindCallback *	findCookie,
    				   void * 			findCookieContext);
    extern BOOL HTCookie_deleteCallbacks (void);
    

    Cookie Handling Mode

    The application can decide how cookies are to be handled - should they be ignored, should the user be asked, etc.

    typedef enum _HTCookieMode {
        HT_COOKIE_ACCEPT          = 0x1,  /* Accept cookies */
        HT_COOKIE_SEND            = 0x2,  /* Send cookies when fit */
        HT_COOKIE_SAME_HOST       = 0x4,  /* Don't accept cookies for other hosts */
        HT_COOKIE_SAME_DOMAIN     = 0x8,  /* Don't accept cookies for other domains */
        HT_COOKIE_PROMPT          = 0x10  /* Prompt before accepting cookies */
    } HTCookieMode;
    extern BOOL HTCookie_setCookieMode (HTCookieMode mode);
    extern HTCookieMode HTCookie_cookieMode (void);
    
    #endif /* HTCOOKIE_H */
    


    @(#) $Id: HTCookie.html,v 2.3 2025/07/31 01:30:16 raff Exp $
    libwww/Library/src/HTDNS.c0100644000076400001440000002476107035071422015002 0ustar danielusers/* HTDNS.c ** DOMAIN NAME SERVICE MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTDNS.c,v 2.31 2025/01/06 10:48:50 kahan Exp $ ** ** This object manages a cache of hosts we have looked up vis DNS. ** The object contains the necessary parts from hostent. For Internet host ** hostent->h_addr_list is not an array of char pointers but an array of ** pointers of type in_addr. ** ** 13 Sep 95 HFN Spawned from HTTCP.c and rewritten */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTParse.h" #include "HTAlert.h" #include "HTError.h" #include "HTTrans.h" #include "HTHstMan.h" #include "HTDNS.h" /* Implemented here */ #define DNS_TIMEOUT 1800L /* Default DNS timeout is 30 mn */ /* Type definitions and global variables etc. local to this module */ struct _HTdns { char * hostname; /* name of host */ time_t ntime; /* Creation time */ int addrlength; /* Length of address in bytes */ int homes; /* Number of IP addresses on the host */ char ** addrlist; /* List of addresses from name server */ double * weight; /* Weight on each address */ }; PRIVATE HTList **CacheTable = NULL; PRIVATE time_t DNSTimeout = DNS_TIMEOUT; /* Timeout on DNS entries */ /* ------------------------------------------------------------------------- */ PRIVATE void free_object (HTdns * me) { if (me) { HT_FREE(me->hostname); if (*me->addrlist) HT_FREE(*me->addrlist); HT_FREE(me->addrlist); HT_FREE(me->weight); HT_FREE(me); } } PRIVATE BOOL delete_object (HTList * list, HTdns * me) { HTTRACE(PROT_TRACE, "DNS Delete.. object %p from list %p\n" _ me _ list); HTList_removeObject(list, (void *) me); free_object(me); return YES; } /* HTDNS_setTimeout ** ---------------- ** Set the cache timeout for DNS entries. Default is DNS_TIMEOUT */ PUBLIC void HTDNS_setTimeout (time_t timeout) { DNSTimeout = timeout; } /* HTDNS_timeout ** ------------- ** Get the cache timeout */ PUBLIC time_t HTDNS_timeout (time_t timeout) { return DNSTimeout; } /* HTDNS_add ** --------- ** Add an element to the cache of visited hosts. Note that this function ** requires the system implemented structure hostent and not our own ** host_info. The homes variable indicates the number of IP addresses ** found. A host name must NOT contain a port number. ** Returns address of new HTdns object */ PUBLIC HTdns * HTDNS_add (HTList * list, struct hostent * element, char *host, int *homes) { HTdns *me; char *addr = NULL; char **index = element->h_addr_list; int cnt = 1; while(*index++) cnt++; if ((me = (HTdns *) HT_CALLOC(1, sizeof(HTdns))) == NULL || (me->addrlist = (char **) HT_CALLOC(1, cnt*sizeof(char*))) == NULL || (addr = (char *) HT_CALLOC(1, cnt*element->h_length)) == NULL) HT_OUTOFMEM("HTDNS_add"); StrAllocCopy(me->hostname, host); me->ntime = time(NULL); index = element->h_addr_list; cnt = 0; while (*index) { *(me->addrlist+cnt) = addr+cnt*element->h_length; memcpy((void *) *(me->addrlist+cnt++), *index++, element->h_length); } me->homes = cnt; *homes = cnt; if ((me->weight = (double *) HT_CALLOC(me->homes, sizeof(double))) == NULL) HT_OUTOFMEM("HTDNS_add"); me->addrlength = element->h_length; HTTRACE(PROT_TRACE, "DNS Add..... `%s\' with %d home(s) to %p\n" _ host _ *homes _ list); HTList_addObject(list, (void *) me); return me; } /* HTDNS_updateWeights ** ------------------- ** This function calculates the weights of the different IP addresses ** on a multi homed host. Each weight is calculated as ** ** w(n+1) = w(n)*a + (1-a) * deltatime ** a = exp(-1/Neff) ** Neff is the effective number of samples used ** deltatime is time spend on making a connection ** ** A short window (low Neff) gives a high sensibility, but this is ** required as we can't expect a lot of data to test on. ** "current" is the index returned by HTGetHostByName() */ PUBLIC BOOL HTDNS_updateWeigths(HTdns *dns, int current, ms_t deltatime) { if (dns) { int cnt; const double passive = 0.9; /* Factor for all passive IP_addrs */ #if 0 const int Neff = 3; const double alpha = exp(-1.0/Neff); #else const double alpha = 0.716531310574; /* Doesn't need the math lib */ #endif for (cnt=0; cnthomes; cnt++) { if (cnt == current) { *(dns->weight+current) = *(dns->weight+current)*alpha + (1.0-alpha)*deltatime; if (*(dns->weight+current) < 0.0) *(dns->weight+current) = 0.0; } else { *(dns->weight+cnt) = *(dns->weight+cnt) * passive; } HTTRACE(PROT_TRACE, "DNS weight.. Home %d has weight %4.2f\n" _ cnt _ *(dns->weight+cnt)); } return YES; } HTTRACE(PROT_TRACE, "DNS weight.. Object %p not found'\n" _ dns); return NO; } /* HTDNS_delete ** ------------ ** Remove an element from the cache */ PUBLIC BOOL HTDNS_delete (const char * host) { HTList *list; int hash = 0; const char *ptr; if (!host || !CacheTable) return NO; for(ptr=host; *ptr; ptr++) hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HT_M_HASH_SIZE); if ((list = CacheTable[hash])) { /* We have the list, find the entry */ HTdns *pres; while ((pres = (HTdns *) HTList_nextObject(list))) { if (!strcmp(pres->hostname, host)) { delete_object(CacheTable[hash], pres); break; } } } return YES; } /* HTDNS_deleteAll ** --------------- ** Destroys the cache completely */ PUBLIC BOOL HTDNS_deleteAll (void) { int cnt; HTList *cur; if (!CacheTable) return NO; for (cnt=0; cnt0 Number of homes ** -1 Error */ PUBLIC int HTGetHostByName (HTHost * host, char *hostname, HTRequest* request) { SockA *sin = HTHost_getSockAddr(host); int homes = -1; HTList *list; /* Current list in cache */ HTdns *pres = NULL; if (!host || !hostname) { HTTRACE(PROT_TRACE, "HostByName.. Bad argument\n"); return -1; } HTHost_setHome(host, 0); /* Find a hash for this host */ { int hash = 0; char *ptr; for(ptr=hostname; *ptr; ptr++) hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HT_M_HASH_SIZE); if (!CacheTable) { if ((CacheTable = (HTList* *) HT_CALLOC(HT_M_HASH_SIZE, sizeof(HTList *))) == NULL) HT_OUTOFMEM("HTDNS_init"); } if (!CacheTable[hash]) CacheTable[hash] = HTList_new(); list = CacheTable[hash]; } /* Search the cache */ { HTList *cur = list; while ((pres = (HTdns *) HTList_nextObject(cur))) { if (!strcmp(pres->hostname, hostname)) { if (time(NULL) > pres->ntime + DNSTimeout) { HTTRACE(PROT_TRACE, "HostByName.. Refreshing cache\n"); delete_object(list, pres); pres = NULL; } break; } } } if (pres) { /* ** Find the best home. We still want to do this as we use it as a ** fall back for persistent connections */ homes = pres->homes; if (pres->homes > 1) { int cnt = 0; double best_weight = 1e30; /* Pretty bad */ while (cnt < pres->homes) { if (*(pres->weight+cnt) < best_weight) { best_weight = *(pres->weight+cnt); HTHost_setHome(host, cnt); } cnt++; } } host->dns = pres; memcpy((void *) &sin->sin_addr, *(pres->addrlist+HTHost_home(host)), pres->addrlength); } else { struct hostent *hostelement; /* see netdb.h */ HTAlertCallback *cbf = HTAlert_find(HT_PROG_DNS); #ifdef HT_REENTRANT int thd_errno; char buffer[HOSTENT_MAX]; struct hostent result; /* For gethostbyname_r */ #endif #ifdef GETHOSTBYNAME_R_3 struct hostent_data hdata; #endif if (cbf) (*cbf)(request, HT_PROG_DNS, HT_MSG_NULL,NULL,hostname,NULL); #ifdef GETHOSTBYNAME_R_5 hostelement = gethostbyname_r(hostname, &result, buffer, HOSTENT_MAX, &thd_errno); #elif defined(GETHOSTBYNAME_R_6) gethostbyname_r(hostname, &result, buffer, HOSTENT_MAX, &hostelement, &thd_errno); #elif defined(GETHOSTBYNAME_R_3) if (gethostbyname_r(hostname, &result, &hdata) == 0) { hostelement = &result; } else { hostelement = NULL; } #else if (cbf) (*cbf)(request, HT_PROG_DNS, HT_MSG_NULL,NULL,hostname,NULL); hostelement = gethostbyname(hostname); #endif if (!hostelement) { HTRequest_addSystemError(request, ERR_FATAL, socerrno, NO, "gethostbyname"); return -1; } host->dns = HTDNS_add(list, hostelement, hostname, &homes); memcpy((void *) &sin->sin_addr, *hostelement->h_addr_list, hostelement->h_length); } return homes; } /* ** Get host name of the machine on the other end of a socket. ** */ PUBLIC char * HTGetHostBySock (int soc) { struct sockaddr addr; int len = sizeof(struct sockaddr); struct in_addr *iaddr; char *name = NULL; struct hostent * phost; /* Pointer to host -- See netdb.h */ #ifdef HT_REENTRANT int thd_errno; char buffer[HOSTENT_MAX]; struct hostent result; /* For gethostbyaddr_r */ #endif #ifdef HAVE_GETHOSTBYADDR_R_5 struct hostent_data hdata; #endif #ifdef DECNET /* Decnet ain't got no damn name server 8#OO */ return NULL; #else if (getpeername(soc, &addr, &len) < 0) return NULL; iaddr = &(((struct sockaddr_in *)&addr)->sin_addr); #ifdef HAVE_GETHOSTBYADDR_R_7 phost = gethostbyaddr_r((char *) iaddr, sizeof(struct in_addr), AF_INET, &result, buffer, HOSTENT_MAX, &thd_errno); #elif defined(HAVE_GETHOSTBYADDR_R_8) gethostbyaddr_r((char *) iaddr, sizeof(struct in_addr), AF_INET, &result, buffer, HOSTENT_MAX, &phost, &thd_errno); #elif defined(HAVE_GETHOSTBYADDR_R_5) if(gethostbyaddr_r((char *) iaddr, sizeof(struct in_addr), AF_INET, &result, &hdata)==0) { phost=&result; } else { phost = NULL; } #else phost = gethostbyaddr((char *) iaddr, sizeof(struct in_addr), AF_INET); #endif if (!phost) { HTTRACE(PROT_TRACE, "TCP......... Can't find internet node name for peer!!\n"); return NULL; } StrAllocCopy(name, phost->h_name); HTTRACE(PROT_TRACE, "TCP......... Peer name is `%s'\n" _ name); return name; #endif /* not DECNET */ } libwww/Library/src/HTDNS.html0100644000076400001440000000731706656627476015552 0ustar danielusers W3C Sample Code Library libwww DNS Class

    Domain Name Service Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The DNS Class defines generic access to  the DNS system. It maintains a cache of all visited hosts so that subsequent connects to the same host doesn't imply a new request to the DNS every time. Multihomed hosts are treated specially in that the time spend on every connect is measured and kept in the cache. On the next request to the same host, the IP-address with the lowest average connect time is chosen. If one IP-address fails completely, e.g. connection refused then it disabled and HTDoConnect tries one of the other IP-addresses to the same host.

    Every entry in the cache has its own time to live (TTL) and hence the cache manages its own automatic garbage collection. Currently the TTL is not bound to the DNS records which should be changed. You can set the DNS object TTL

    This module is implemented by HTDNS.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTDNS_H
    #define HTDNS_H
    
    typedef struct _HTdns HTdns;
    

    DNS Cache Expiration Time

    When to remove an entry in the DNS cache. We maintain our own DNS cache as we keep track of the connect time, pick the fastet host on multi-homed hosts etc. However we DO NOT HONOR DNS TTL Records which is the reason for why the expiration must be faily short (the default value is 30 mins), so that it doesn't collide with the DNS mechanism for timing out DNS records befoew swapping IP addresses around.

    extern void HTDNS_setTimeout (time_t timeout);
    extern time_t HTDNS_timeout  (time_t timeout);
    

    Creation and Deletion Methods

    Add a DNS Object

    Add an element to the cache of visited hosts. The homes variable indicates the number of IP addresses found when looking up the name. A host name must NOT contain a port number.

    extern HTdns * HTDNS_add (HTList * list, struct hostent * element,
    			  char * host, int * homes);
    

    Delete a DNS object

    This function flushes the DNS object from the cache and frees up memory

    extern BOOL HTDNS_delete (const char * host);
    

    Delete ALL DNS objects

    This function is called from HTLibTerminate. It can be called at any point in time if the DNS cache is going to be flushed.

    extern BOOL HTDNS_deleteAll (void);
    

    DNS Class Methods

    Recalculating the Time Weights on Multihomed Host

    On every connect to a multihomed host, the average connect time is updated exponentially for all the entries.

    extern BOOL HTDNS_updateWeigths (HTdns *dns, int cur, ms_t deltatime);
    

    Resolver Functions

    These are the functions that resolve a host name

    Get Host By Socket

    This function should have been called HTGetHostByAddr but for historical reasons this is not the case.

    extern char * HTGetHostBySock (int soc);
    

    Get Host By Name

    This function gets the address of the host and puts it in to the socket structure. It maintains its own cache of connections so that the communication to the Domain Name Server is minimized. Returns the number of homes or -1 if error.

    extern int HTGetHostByName (HTHost * host, char *hostname, HTRequest * request);
    
    #endif
    


    @(#) $Id: HTDNS.html,v 2.19 2025/02/05 17:49:50 frystyk Exp $
    libwww/Library/src/HTDemux.c0100644000076400001440000000752406664352703015451 0ustar danielusers/* ** MUX HEADER PARSER STREAM ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTDemux.c,v 2.3 2025/02/22 22:10:11 frystyk Exp $ ** ** This stream parses MUX headers. ** ** Authors ** HFN Henrik Frystyk Nielsen ** ** History: ** Oct 96 Written */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTMuxHeader.h" #include "HTMuxCh.h" #include "HTDemux.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; HTHost * host; HTMuxChannel * muxch; HTMuxSession * session; int next; /* Next header */ }; /* ------------------------------------------------------------------------- */ /* ** Parse through the buffer, identify the headers, and distribute the ** data on the virtual session input streams */ PRIVATE int HTDemux_write (HTStream * me, const char * buf, int len) { HTMuxChannel * muxch = me->muxch; int length = 0; while (len > 0) { /* ** Look for the next header. If this is the first time through then ** we expect the stream of data to start with a header. */ if (!me->next) { HTMuxHeader header[2]; HTMuxSessionId sid = INVSID; header[0] = HT_WORDSWAP(*(HTMuxHeader *) buf); /* ** If the long bit is set then we expect another 32 bits as the ** length of the payload */ if (MUX_IS_LONG(header[0])) { header[1] = HT_WORDSWAP(*(HTMuxHeader *) (buf+1)); me->next = MUX_LONG_ALIGN(header[1]); buf += 8, len -= 8; } else { me->next = MUX_ALIGN(MUX_GET_LEN(header[0])); buf += 4, len -= 4; } length = HTMIN(len, me->next); sid = MUX_GET_SID(header[0]); HTTRACE(MUX_TRACE, "Demux stream Header: %x, sid %d, length %d\n" _ header[0] _ length _ sid); /* ** If this is a control message then handle it here */ if (header[0] & MUX_CONTROL) { if (header[0] & MUX_STRING) { ; /* Define the string */ } else if (header[0] & MUX_STACK) { ; /* Define the stack */ } else if (header[0] & MUX_FRAGMENT) { HTMuxSession_setFragment(muxch, sid, MUX_GET_LEN(header[0])); } else if (header[0] & MUX_CREDIT) { HTMuxSession_setCredit(muxch, sid, header[1]); } } else if (header[0] & MUX_SYN) { me->session = HTMuxSession_register(muxch, sid, MUX_GET_PID(header[0])); } else if (header[0] & MUX_FIN) { me->session = HTMuxChannel_findSession(muxch, sid); HTMuxSession_setClose(me->muxch, me->session, MUX_S_END_READ); } else me->session = HTMuxChannel_findSession(muxch, sid); } /* ** If there is data on this session then handle it here. */ if (me->next && me->session) { if (HTMuxSession_disposeData(me->session, buf, length) == 1) { HTMuxChannel_sendControl(muxch, HTMuxSession_id(me->session), MUX_CREDIT, DEFAULT_CREDIT, NULL, 0); } } buf += length, len -= length, me->next -= length; } return HT_OK; } PRIVATE int HTDemux_put_character (HTStream * me, char c) { return HTDemux_write(me, &c, 1); } PRIVATE int HTDemux_put_string (HTStream * me, const char * s) { return HTDemux_write(me, s, (int) strlen(s)); } PRIVATE int HTDemux_flush (HTStream * me) { return HT_OK; } PRIVATE int HTDemux_free (HTStream * me) { return HT_IGNORE; } PRIVATE int HTDemux_abort (HTStream * me, HTList * e) { return HT_IGNORE; } PRIVATE const HTStreamClass HTDemux = { "Demux", HTDemux_flush, HTDemux_free, HTDemux_abort, HTDemux_put_character, HTDemux_put_string, HTDemux_write }; PUBLIC HTStream * HTDemux_new (HTHost * host, HTMuxChannel * muxch) { HTStream * me = NULL; if (muxch) { if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTDemux_new"); me->isa = &HTDemux; me->host = host; me->muxch = muxch; } return me; } libwww/Library/src/HTDemux.html0100644000076400001440000000253006526451215016156 0ustar danielusers W3C Sample Code Library Socket Reader Stream

    Demultiplexing Stream

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The MUX Reader Stream is an input stream  which knows how to demultiplex a MUX channel. It is part of the Transport interface and may be registered as part of a Transport Object. The application can initialize this stream together with the HTMuxTx stream, for example. In the default initialization module, you can find the HTTransportInit() function which sets up this stream as a default transport for handling socket read operations.

    This module is implemented by HTMuxRx.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTMUXRX_H
    #define HTMUXRX_H
    #include "HTStream.h"
    #include "HTMuxCh.h"
    
    extern HTStream * HTDemux_new (HTHost * host, HTMuxChannel * muxch);
    
    #endif
    


    @(#) $Id: HTDemux.html,v 2.3 2025/05/14 02:10:21 frystyk Exp $
    libwww/Library/src/HTDescpt.c0100644000076400001440000001230506664352703015602 0ustar danielusers/* HTDescpt.c ** FILE DESCRIPTIONS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTDescpt.c,v 2.19 2025/02/22 22:10:11 frystyk Exp $ ** ** Authors: ** AL Ari Luotonen ** ** History: ** 30 Mar 94 AL Written from scratch. ** ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTFormat.h" #include "HTList.h" #define MAX_LINE_LEN 256 PRIVATE char * HTDescriptionFile = ".www_descript"; PRIVATE BOOL HTPeekTitles = YES; /* * Get the descriptions for files in the given directory. * The return value is then later passed as an argument * to HTGetDescription() which returns a description * string for a single file. */ PUBLIC HTList * HTReadDescriptions (char * dirname) { char * name = NULL; FILE * fp = NULL; HTList * list = NULL; char buf[MAX_LINE_LEN + 1]; if (!dirname) return NULL; if ((name = (char *) HT_MALLOC(strlen(dirname) + strlen(HTDescriptionFile) + 2)) == NULL) HT_OUTOFMEM("HTReadDescriptions"); sprintf(name, "%s/%s", dirname, HTDescriptionFile); fp = fopen(name, "r"); if (!fp) { HTTRACE(PROT_TRACE, "DirBrowse... No description file %s\n" _ name); HT_FREE(name); return NULL; } else { HTTRACE(PROT_TRACE, "DirBrowse... Description file found %s\n" _ name); } list = HTList_new(); while (fgets(buf, MAX_LINE_LEN, fp)) { char * s = buf; char * t = NULL; char * d = NULL; while (*s && isspace((int) *s)) s++; /* Skip initial whitespace */ if (*s!='d' && *s!='D') continue; /* Junk non-description lines*/ t = s+1; while (*t && !isspace((int) *t)) t++; /* Find the end of the keyword */ while (*t && isspace((int) *t)) t++; /* Find the beginning of template */ if (*t) { d = t+1; while (*d && !isspace((int) *d)) d++; /* Find end of template */ if (*d) { *d++ = 0; /* Terminate template */ while (*d && isspace((int) *d)) d++; /* Find start of description */ if (*d) { char * p = d; while (*p && *p!='\r' && *p!='\n') p++; *p = 0; /* Terminate description */ } } } if (t && d && *t && *d) { char * stuff; if ((stuff = (char *) HT_MALLOC(strlen(t) + strlen(d) + 2)) == NULL) HT_OUTOFMEM("HTDirReadDescriptions"); sprintf(stuff, "%s %s", t, d); HTList_addObject(list, (void*)stuff); HTTRACE(PROT_TRACE, "Description. %s\n" _ stuff); } } fclose(fp); HT_FREE(name); return list; } PUBLIC void HTFreeDescriptions (HTList * descriptions) { HTList * cur = descriptions; char * str; if (descriptions) { while ((str = (char*)HTList_nextObject(cur))) HT_FREE(str); HTList_delete(descriptions); } } PRIVATE char * HTPeekTitle (char * dirname, char * filename) { #define PEEK_BUF_SIZE 200 char * name; FILE * fp; char buf[PEEK_BUF_SIZE + 1]; int status; char * cur; char * end; static char * ret = NULL; char * p; BOOL space = YES; HT_FREE(ret); /* from previous call */ HTTRACE(PROT_TRACE, "HTPeekTitle. called, dirname=%s filename=%s\n" _ dirname ? dirname : "-null-" _ filename ? filename : "-null-"); if (!dirname || !filename) return NULL; if ((name = (char *) HT_MALLOC(strlen(dirname) + strlen(filename) + 2)) == NULL) HT_OUTOFMEM("HTPeekTitle"); sprintf(name, "%s/%s", dirname, filename); fp = fopen(name, "r"); if (!fp) { HTTRACE(PROT_TRACE, "HTPeekTitle. fopen failed\n"); goto cleanup; } status = fread(buf, 1, PEEK_BUF_SIZE, fp); fclose(fp); if (status <= 0) goto cleanup; buf[status] = 0; cur = buf; while ((cur = strchr(cur,'<'))) { if (!strncasecomp(cur+1,"TITLE>",6)) { cur += 7; end = strchr(cur,'<'); while (end && strncasecomp(end+1, "/TITLE>", 7)) end = strchr(end+1, '<'); if (end) *end = 0; if ((p = ret = (char*) HT_MALLOC(strlen(cur) + 1)) == NULL) HT_OUTOFMEM("HTPeekTitle"); while (*cur) { if (isspace((int) *cur)) { if (!space) { space = YES; *p++ = ' '; } } else { if (space) space = NO; *p++ = *cur; } cur++; } *p = 0; goto cleanup; } cur++; } cleanup: HTTRACE(PROT_TRACE, "HTPeekTitle. returning %c%s%c\n" _ ret ? '"' : '-' _ ret ? ret : "null" _ ret ? '"' : '-'); HT_FREE(name); return ret; } /* * Returns a description string (that must not be HT_FREEd!) * for a file with name name in directory dirname. * Description file contents is in descriptions list. */ PUBLIC char * HTGetDescription (HTList * descriptions, char * dirname, char * filename, HTFormat format) { HTList * cur = descriptions; char * t; if (!dirname || !filename) return NULL; /* * descriptions may well be NULL in which case we may still * want to peek the titles. */ while ((t = (char*)HTList_nextObject(cur))) { char * d = strchr(t,' '); if (!d) continue; *d = 0; #if 0 if (HTAA_templateMatch(t,filename)) { #else if (HTStrMatch(t, filename)) { #endif *d = ' '; return d+1; } *d = ' '; } if (HTPeekTitles && format == WWW_HTML) return HTPeekTitle(dirname, filename); else return NULL; } libwww/Library/src/HTDescpt.html0100644000076400001440000000636306526451216016327 0ustar danielusers W3C Sample Code Library libwww File descriptions

    File Descriptions

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    Descriptions appearing in directory listings are produced by this module. This may be overridden by another module for those who which descriptions to come from somewhere else. It's only HTTP directory listings that contain a description field (if enabled by the Directory browsing module.

    This module is implemented by HTDescpt.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTDESCRIPT_H
    #define HTDESCRIPT_H
    

    Description File

    This module gets descriptions from the file defined by global variable HTDescriptionFile in the same directory as the directoy to be listed. The default value is .www_descript:
    extern char * HTDescriptionFile;
    
    In the description file lines starting with a word starting with 'D' are taken to be descriptions (this looks funny now, but this is to make it easy to extend these description files to contain also other information. An example of the format of the description file is:
    /*
    **	DESCRIBE  welcome.html	Our welcome page
    **	DESCRIBE  map*.gif	Map as a GIF image
    **	DESCRIBE  map*.ps	Map as a PostScript image
    */
    

    HTML Titles

    If description is not specified for a file that is of type text/html, this module uses the HTML TITLE as the description. This feature can be turned off by setting the HTPeekTitles variable to false.
    extern BOOL HTPeekTitles;
    

    Read Description File

    The description file for a directory is read in only once by HTReadDescriptions(), and the result returned by it is given as an argument when finding out a description for a single file.
    extern HTList * HTReadDescriptions (char * dirname);
    

    Get Description For a File

    Once description file has been read and the list of descriptions is returned by HTReadDescriptions(), the function HTGetDescription() can be used to get a description for a given file:
    extern char * HTGetDescription (HTList *	descriptions,
    				       char *	dirname,
    				       char *	filename,
    				       HTFormat	format);
    
    Directory name has to be present because this function may then take a peek at the file itself (to get the HTML TITLE, for example). If format is WWW_HTML and description is not found, this module may be configured to use the HTML TITLE as the description.

    No string returned by this function should be freed!

    Freeing Descriptions

    Once descriptions have been gotten, the description list returned by HTReadDescriptions() must be freed by HTFreeDescriptions():
    extern void HTFreeDescriptions (HTList * descriptions);
    
    #endif /* !HTDESCRIPT_H */
    

    @(#) $Id: HTDescpt.html,v 2.13 2025/05/14 02:10:22 frystyk Exp $
    libwww/Library/src/HTDialog.c0100644000076400001440000002601606666514223015562 0ustar danielusers/* HTDialog.c ** MESSAGES AND DIALOGS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTDialog.c,v 2.35 2025/03/01 13:39:31 frystyk Exp $ ** ** This module provides a default implementation of the application part ** of the Message and Dialog part or the Library. You do not have to do ** it like this - you can use exactly the model for mapping codes into ** messages as you like ** ** Authors ** HFN Henrik Frystyk */ /* Library include files */ #include "WWWLib.h" #include "WWWApp.h" #include "WWWHTTP.h" #include "HTDialog.h" /* Implemented here */ /* ** Dialog Messages */ PRIVATE const char * HTDialogs[HT_MSG_ELEMENTS] = {HT_MSG_ENGLISH_INITIALIZER}; /* ** All errors that are not strictly HTTP errors but originates from, e.g., ** the FTP protocol all have element numbers > HTERR_HTTP_CODES_END, i.e., ** they should be placed after the blank line */ PRIVATE HTErrorMessage HTErrors[HTERR_ELEMENTS] = {HTERR_ENGLISH_INITIALIZER}; /* ------------------------------------------------------------------------- */ /* Functions for generating messages */ /* ------------------------------------------------------------------------- */ PUBLIC char * HTDialog_progressMessage (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input) { char * result = NULL; switch (op) { case HT_PROG_DNS: StrAllocMCopy(&result, "Looking up ", input ? (char *) input : "", NULL); break; case HT_PROG_CONNECT: StrAllocMCopy(&result, "Contacting ", input ? (char *) input : "", NULL); break; case HT_PROG_ACCEPT: StrAllocCopy(result, "Waiting for connection..."); break; case HT_PROG_LOGIN: StrAllocCopy(result, "Logging in..."); break; case HT_PROG_READ: if (request) { long cl = HTAnchor_length(HTRequest_anchor(request)); if (cl > 0) { long b_read = HTRequest_bodyRead(request); double pro = (double) b_read/cl*100; char buf[10]; char pct[10]; HTNumToStr((unsigned long) cl, buf, 10); sprintf(pct, "%d%%", (int) pro); StrAllocMCopy(&result, "Read (", pct, " of ", buf, ")", NULL); } else { long b_read = HTRequest_bytesRead(request); int * raw_read = input ? (int *) input : NULL; if (b_read > 0) { char buf[10]; HTNumToStr(b_read, buf, 10); StrAllocMCopy(&result, "Read ", buf, "bytes", NULL); } else if (raw_read && *raw_read>0) { char buf[10]; HTNumToStr(*raw_read, buf, 10); StrAllocMCopy(&result, "Read ", buf, "bytes", NULL); } else { StrAllocCopy(result, "Reading..."); } } } break; case HT_PROG_WRITE: if (request && HTMethod_hasEntity(HTRequest_method(request))) { HTParentAnchor *anchor=HTRequest_anchor(HTRequest_source(request)); long cl = HTAnchor_length(anchor); if (cl > 0) { long b_write = HTRequest_bodyWritten(request); double pro = (double) b_write/cl*100; char buf[10]; char pct[10]; HTNumToStr((unsigned long) cl, buf, 10); sprintf(pct, "%d%%", (int) pro); StrAllocMCopy(&result, "Writing (", pct, " of ", buf, ")", NULL); } else { long b_written = HTRequest_bytesWritten(request); int * raw_written = input ? (int *) input : NULL; if (b_written > 0) { char buf[10]; HTNumToStr(b_written>0 ? b_written : 0, buf, 10); StrAllocMCopy(&result, "Writing ", buf, "bytes", NULL); } if (raw_written && *raw_written>0) { char buf[10]; HTNumToStr(*raw_written, buf, 10); StrAllocMCopy(&result, "Writing ", buf, "bytes", NULL); } else { StrAllocCopy(result, "Writing..."); } } } break; case HT_PROG_DONE: StrAllocCopy(result, "Done!"); break; case HT_PROG_INTERRUPT: StrAllocCopy(result, "Interrupted!"); break; case HT_PROG_OTHER: StrAllocCopy(result, "Working - please wait..."); break; case HT_PROG_TIMEOUT: StrAllocCopy(result, "Request timeout - server did not respond."); break; default: StrAllocCopy(result, "UNKNOWN PROGRESS STATE"); break; } return result; } PUBLIC char * HTDialog_errorMessage (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input) { HTList * cur = (HTList *) input; HTError * pres; HTErrorShow showmask = HTError_show(); HTChunk * msg = NULL; int code; if (!request || !cur) return NULL; while ((pres = (HTError *) HTList_nextObject(cur))) { int index = HTError_index(pres); if (HTError_doShow(pres)) { if (!msg) { HTSeverity severity = HTError_severity(pres); msg = HTChunk_new(128); if (severity == ERR_WARN) HTChunk_puts(msg, "Warning: "); else if (severity == ERR_NON_FATAL) HTChunk_puts(msg, "Non Fatal Error: "); else if (severity == ERR_FATAL) HTChunk_puts(msg, "Fatal Error: "); else if (severity == ERR_INFO) HTChunk_puts(msg, "Information: "); else { HTChunk_puts(msg, "UNKNOWN ERROR TYPE"); return HTChunk_toCString(msg); } /* Error number */ if ((code = HTErrors[index].code) > 0) { char buf[10]; sprintf(buf, "%d ", code); HTChunk_puts(msg, buf); } } else HTChunk_puts(msg, "\nReason: "); if (index == HTERR_SYSTEM) { int length = 0; char * pars = (char *) HTError_parameter(pres, &length); HTChunk_puts(msg, HTError_location(pres)); HTChunk_puts(msg, " "); HTChunk_puts(msg, HTErrors[index].msg); if (length && pars) { HTChunk_puts(msg, " ("); HTChunk_puts(msg, pars); HTChunk_puts(msg, ")"); } } else { /* Error message */ HTChunk_puts(msg, HTErrors[index].msg); /* Error parameters */ if (showmask & HT_ERR_SHOW_PARS) { int length; int cnt; char *pars = (char *) HTError_parameter(pres, &length); if (length && pars) { HTChunk_puts(msg, " ("); for (cnt=0; cnt= 0x7F) HTChunk_putc(msg, '#'); else HTChunk_putc(msg, ch); } HTChunk_puts(msg, ") "); } } /* Error Location */ if (showmask & HT_ERR_SHOW_LOCATION) { HTChunk_puts(msg, "This occured in "); HTChunk_puts(msg, HTError_location(pres)); HTChunk_putc(msg, '\n'); } } /* ** Make sure that we don't get this error more than once even ** if we are keeping the error stack from one request to another */ HTError_setIgnore(pres); /* If we only are show the most recent entry then break here */ if (showmask & HT_ERR_SHOW_FIRST) break; } } return HTChunk_toCString(msg); } /* ------------------------------------------------------------------------- */ /* ** Functions for providing user interactions registered in the ** HTAlert module. These functions are the default set of user ** inteactions that are provided by libwww. You are likely to want to generate your own versions ** that can be registered instead. */ PUBLIC BOOL HTProgress (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { char * msg = HTDialog_progressMessage(request, op, msgnum, dfault, input); if (msg) { HTPrint("%s\n", msg); HT_FREE(msg); } return YES; } PUBLIC BOOL HTConfirm (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { char response[4]; /* One more for terminating NULL -- AL */ HTPrint("%s", HTDialogs[msgnum]); if (input) HTPrint(" (%s)", (char *) input); HTPrint(" (y/n) "); if (fgets(response, 4, stdin)) { /* get reply, max 3 chars */ char *ptr = response; while (*ptr) { if (*ptr == '\n') { *ptr = '\0'; break; } *ptr = TOUPPER(*ptr); ptr++; } return (!strcmp(response, "YES") || !strcmp(response, "Y")) ? YES : NO; } return NO; } /* Prompt for answer and get text back. Reply text is either NULL on ** error or a dynamic string which the caller must HT_FREE. */ PUBLIC BOOL HTPrompt (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { HTPrint("%s ", HTDialogs[msgnum]); if (input) HTPrint(" (%s) ", (char *) input); if (dfault) HTPrint("(RETURN for [%s]) ", (char *) dfault); if (reply && msgnum>=0) { char buffer[200]; if (!fgets(buffer, 200, stdin)) return NO; buffer[strlen(buffer)-1] = '\0'; /* Overwrite newline */ if (*buffer) HTAlert_setReplyMessage(reply, buffer); else if (dfault) HTAlert_setReplyMessage(reply, (char *) dfault); else return NO; return YES; } return NO; } /* Prompt for password without echoing the reply. Reply text is ** either NULL on error or a dynamic string which the caller must HT_FREE. */ PUBLIC BOOL HTPromptPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { if (reply && msgnum>=0) { #ifdef HAVE_GETPASS char * pw = (char *) getpass(HTDialogs[msgnum]); if (pw) HTAlert_setReplySecret(reply, pw); return YES; #else /* ** This is just to be able to get it wo work when getpass() ** isn't available. */ char buffer[100]; memset(buffer, '\0', 100); HTPrint("%s ", HTDialogs[msgnum]); if (!fgets(buffer, 99, stdin)) return NO; buffer[strlen(buffer)-1] = '\0'; /* Overwrite newline */ if (*buffer) { HTAlert_setReplySecret(reply, buffer); return YES; } return NO; #endif /* HAVE_GETPASS */ } return NO; } /* Username and password ** --------------------- ** Prompt Username and password as an atomic operation */ PUBLIC BOOL HTPromptUsernameAndPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { BOOL status = HTPrompt(request, op, msgnum, dfault, input, reply); return status ? HTPromptPassword(request, op, HT_MSG_PW, dfault, input, reply) : NO; } /* HTError_print ** ------------- ** Default function that creates an error message using HTAlert() to ** put out the contents of the error_stack messages. Furthermore, the ** error_info structure contains a name of a help file that might be put ** up as a link. This file can then be multi-linguistic. */ PUBLIC BOOL HTError_print (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { char * msg = HTDialog_errorMessage(request, op, msgnum, dfault, input); if (msg) { HTPrint("%s\n", msg); HT_FREE(msg); } return YES; } /* NOT USED - HTError_response - NOT USED!!! ** ----------------------------------------- ** Default function that creates an error message using HTAlert() to ** put out the contents of the error_stack messages. Furthermore, the ** error_info structure contains a name of a help file that might be put ** up as a link. This file can then be multi-linguistic. */ PUBLIC BOOL HTError_response (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { return NO; } libwww/Library/src/HTDialog.html0100644000076400001440000002625206700745213016300 0ustar danielusers W3C Sample Code Library libwww Messages and Dialogs

    Application side Error Messages And the like

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module provides some "make life easier" functions in order to get the application going. The functionality of this module was originally in HTAccess, but now It is part of the application interface which the application may use it if desired.

    This module is implemented by HTHome.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTDIALOG_H
    #define HTDIALOG_H
    #include "WWWLib.h"
    

    Default English Error Messages and Progress Notifications

    The following functions provide a default set of error messages and prompts in plain English. You can of course change this as you like.

    Default English User Prompts and Questions

    This list corresponds to the enumeration list defined in the HTAlert module

    #define HT_MSG_ENGLISH_INITIALIZER \
        "Please enter username:", \
        "Please enter username for proxy authentication:", \
        "Please enter username for this FTP server:", \
        "Password:", \
        "Please give name of file to save in:", \
        "Plase enter account:", \
        "You might not be allowed to use this method here, continue?", \
        "Location has moved, continue?", \
        "A new set of rules is requested to be added to your setup - continue?", \
        "This file already exists - replace existing file?", \
        "Authentication failed - retry?", \
        "Proxy authentication failed - retry?", \
        "This method has already been performed - repeat operation?", \
        "This document is very big - continue operation?", \
        "The source document for this operation has moved - continue operation \
    with new location?", \
        "The destination document for this operation has moved - continue \
    operation with new location?", \
        "A redirection may change the behavior of this method - proceed anyway?", \
        "An automatic request for changing proxy has been encountered - continue?", \
        "The persistent cache is already in use by another user. If this is not \
    the case then you can manually delete this lock and restart.", \
        "The server has sent you a cookie - accept?"
    

    Default English Messages and Progress Notifications

    This list corresponds to the enumeration list defined in the HTError module

    /*    CODE  ERROR MESSAGE				ERROR URL */
    #define HTERR_ENGLISH_INITIALIZER \
        { 100, "Continue", 					"information" }, \
        { 101, "Switching Protocols",			"information" }, \
        { 200, "OK", 					"success" }, \
        { 201, "Created", 					"success" }, \
        { 202, "Accepted", 					"success" }, \
        { 203, "Non-authoritative Information",		"success" }, \
        { 204, "Document Updated",				"success" }, \
        { 205, "Reset Content",				"success" }, \
        { 206, "Partial Content",				"success" }, \
        { 207, "Partial Update OK",				"success" }, \
        { 300, "Multiple Choices",				"redirection" }, \
        { 301, "Moved Permanently",				"redirection" }, \
        { 302, "Found",  			                "redirection" }, \
        { 303, "See Other",					"redirection" }, \
        { 304, "Not Modified",       			"redirection" }, \
        { 305, "Use Proxy",					"redirection" }, \
        { 306, "Proxy Redirect",				"redirection" }, \
        { 307, "Temporary Redirect",			"redirection" }, \
        { 400, "Bad Request", 				"client_error" }, \
        { 401, "Unauthorized",				"client_error" }, \
        { 402, "Payment Required", 				"client_error" }, \
        { 403, "Forbidden", 				"client_error" }, \
        { 404, "Not Found",		       			"client_error" }, \
        { 405, "Method Not Allowed",	 		"client_error" }, \
        { 406, "Not Acceptable",		 		"client_error" }, \
        { 407, "Proxy Authentication Required", 		"client_error" }, \
        { 408, "Request Timeout",		 		"client_error" }, \
        { 409, "Conflict",			 		"client_error" }, \
        { 410, "Gone",			 		"client_error" }, \
        { 411, "Length Required",		 		"client_error" }, \
        { 412, "Precondition Failed",	 		"client_error" }, \
        { 413, "Request Entity Too Large",	 		"client_error" }, \
        { 414, "Request-URI Too Large",	 		"client_error" }, \
        { 415, "Unsupported Media Type",	 		"client_error" }, \
        { 416, "Range Not Satisfiable",	 		"client_error" }, \
        { 417, "Expectation Failed",	 		"client_error" }, \
        { 418, "Reauthentication Required",	 		"client_error" }, \
        { 419, "Proxy Reauthentication Reuired", 		"client_error" }, \
        { 500, "Internal Server Error",			"server_error" }, \
        { 501, "Not Implemented", 				"server_error" }, \
        { 502, "Bad Gateway", 				"server_error" }, \
        { 503, "Service Unavailable",			"server_error" }, \
        { 504, "Gateway Timeout", 				"server_error" }, \
        { 505, "HTTP Version not supported",		"server_error" }, \
        { 506, "Partial update Not Implemented",		"server_error" }, \
     \
        /* Cache Warnings */ \
        { 10,  "Response is Stale",				"cache" }, \
        { 11,  "Revalidation Failed",			"cache" }, \
        { 12,  "Disconnected Opeartion",			"cache" }, \
        { 13,  "Heuristic Expiration",			"cache" }, \
        { 14,  "Transformation Applied",			"cache" }, \
        { 99,  "Cache warning", 				"cache" }, \
     \
        /* Non-HTTP Error codes and warnings */ \
        { 0,   "Can't locate remote host", 			"internal" }, \
        { 0,   "No host name found", 			"internal" }, \
        { 0,   "No file name found or file not accessible", "internal" }, \
        { 0,   "FTP server replies", 			"internal" }, \
        { 0,   "FTP server doesn't reply", 			"internal" }, \
        { 0,   "FTP login failure", 			"internal" }, \
        { 0,   "Server timed out", 				"internal" }, \
        { 0,   "Gopher-server replies", 			"internal" }, \
        { 0,   "Data transfer interrupted", 		"internal" }, \
        { 0,   "Connection establishment interrupted", 	"internal" }, \
        { 0,   "CSO-server replies", 			"internal" }, \
        { 0,   "This is probably a HTTP server 0.9 or less","internal" }, \
        { 0,   "Bad, Incomplete, or Unknown Response",	"internal" }, \
        { 0,   "Unknown access authentication scheme",	"internal" }, \
        { 0,   "News-server replies",			"internal" }, \
        { 0,   "Trying `ftp://' instead of `file://'",	"internal" }, \
        { 0,   "Too many redirections",			"internal" }, \
        { 0,   "Method not suited for automatic redirection","internal" }, \
        { 0,   "Premature End Of File",			"internal" }, \
        { 0,   "Response from WAIS Server too Large - Extra lines \
    ignored","internal"}, \
        { 0,   "WAIS-server doesn't return any data", 	"internal" }, \
        { 0,   "Can't connect to WAIS-server",		"internal" }, \
        { 0,   "operation failed",				"internal" }, \
        { 0,   "Wrong or unknown access scheme",		"internal" }, \
        { 0,   "Access scheme not allowed in this context",	"internal" }, \
        { 0,   "When you are connected, you can log in",	"internal" }, \
        { 0,   "This version has expired and will be automatically reloaded", "internal" }, \
        { 0,   "Loading new rules must be explicitly acknowledged", "internal" }, \
        { 0,   "Automatic proxy redirection must be explicitly acknowledged", "internal" }
    

    Generate a Default Error Message

    This function provides an unformatted English string containing the possibly nested status message that explains the result of a request. This is essentially "flattening out" the information provided in the request error strack. The string must be freed by the caller.

    extern char * HTDialog_errorMessage (HTRequest * request, HTAlertOpcode op,
    			             int msgnum, const char * dfault,
    				     void * input);
    

    Generate a Default Progress Notification Message

    This function provides a string containin an English progress message that the application can present to the user if desired. The string must be freed by the caller.

    extern char * HTDialog_progressMessage (HTRequest * request, HTAlertOpcode op,
    			                int msgnum, const char * dfault,
    				        void * input);
    

    Default User Interaction Handlers

    You can register a set of callback functions to handle user prompting, error messages, confimations etc. Here we give a set of functions that can be used on almost anu thinkable platform. If you want to provide your own platform dependent implementation then fine :-)

    Display a message, then wait for 'YES' or 'NO'

    This function prompts the user for a confirmation on the message passed as a parameter. If the user reacts in the affirmative, returns TRUE, returns FALSE otherwise.

    extern HTAlertCallback HTConfirm;
    

    Prompt the User a Question

    Prompt for answer and get text back. Reply text is either NULL on error or a dynamic string which the caller must free.

    		
    extern HTAlertCallback HTPrompt;
    

    Prompt for a Password

    Prompt for password without echoing the reply. Reply text is weither NULL on error or a dynamic string which the caller must free.

    NOTE: The current version uses getpass which on many systems returns a string of 8 or 16 bytes.

    extern HTAlertCallback HTPromptPassword;
    

    Prompt for a UserID and a Password

    This is just a composite function using HTPrompt and HTPromptPassword. The strings returned must be freed by caller.

    extern HTAlertCallback HTPromptUsernameAndPassword;
    

    Display a Message

    This function simply puts out the message passed.

    extern HTAlertCallback HTAlert;
    

    Progress Notification

    This function can be used to indicate the current status of a certain action. In order to avoid having strings directly in the core parts of the Library, this function is passed a "state" argument from which the message can be generated in this module. The "param" argument is for additional information to be passed.

    extern HTAlertCallback HTProgress;
    

    Generating a User Error Message of a request

    This function outputs the content of the error list to standard output (used in Line Mode Browser), but smart clients and servers might overwrite this function so that the error messages can be handled to the user in a nice(r) way. That is the reason for putting the actual implementation in HTAlert.c.

    extern HTAlertCallback HTError_print;
    

    Generating a Server Error Message of a request

    Default function that creates an error message using HTAlert() to put out the contents of the error_stack messages. Furthermore, the error_info structure contains a name of a help file that might be put up as a link. This file can then be multi-linguistic.

    extern BOOL HTError_response (HTRequest * request, HTAlertOpcode op,
    			      int msgnum, const char * dfault, void * input,
    			      HTAlertPar * reply);
    
    #endif /* HTDIALOG_H */
    


    @(#) $Id: HTDialog.html,v 2.9 2025/04/01 19:35:39 frystyk Exp $
    libwww/Library/src/HTDigest.c0100644000076400001440000000320306656625401015573 0ustar danielusers/* HTDigest.c ** GENERIC INTERFACE TO MESSAGE DIGEST ALGORITHMS ** ** (c) COPYRIGHT W3C/INRIA 1998. ** Please first read the full copyright statement in the file COPYRIGHT. ** @(#) $Id: HTDigest.c,v 2.2 2025/02/05 17:31:45 frystyk Exp $ ** ** Contains a generic interface to the message digest algorithms, ** inspired from the RSA-Euro toolkit. For the moment, it only ** covers MD5. ** SHA and other algorithms could be added later on. This code ** is only used during message digest authentication. ** ** AUTHORS: ** JKO Jose Kahan jose@w3.org ** ** HISTORY: ** Dec 98 JKO Created the module from scratch */ /* Library include files */ #include "wwwsys.h" #include "WWWLib.h" #include "HTDigest.h" /* Implemented here */ PUBLIC BOOL HTDigest_init (HTDigestContext *context, int digesttype) { context->algorithm = digesttype; switch (digesttype) { case HTDaMD5: MD5Init (&context->context.md5); break; default: return NO; break; } return YES; } PUBLIC BOOL HTDigest_update (HTDigestContext *context, char *input, unsigned int inputLen) { if (context) { switch (context->algorithm) { case HTDaMD5: MD5Update (&context->context.md5, (unsigned char *) input, inputLen); break; default: return NO; break; } return YES; } return NO; } PUBLIC BOOL HTDigest_final (unsigned char *digest, HTDigestContext *context) { if (context) { switch (context->algorithm) { case HTDaMD5: MD5Final (digest, &context->context.md5); break; default: return NO; break; } return YES; } return NO; } libwww/Library/src/HTDigest.html0100644000076400001440000000345606664276653016341 0ustar danielusers W3C Sample Code Library libwww Generic Message Digest Interface

    Generic Message Digest Interface

    /*
    **	(c) COPYRIGHT W3C, INRIA 1998.
    **	Please first read the full copyright statement in the file COPYRIGHT.
    */
    

    Contains a generic interface to the message digest algorithms, inspired from the RSA-Euro toolkit. For the moment, it only covers MD5. SHA and other algorithms could be added later on. This code is only used during message digest authentication. AUTHORS: JK Jose Kahan jose@w3.org HISTORY: Dec 98 JK Created the module from scratch

    This module is implemented by HTDigest.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTDigest_H
    #define HTDigest_H
    /* Library include files */
    #include "WWWLib.h"
    /* add the MD algorithm header files here below */
    #include "md5.h"
    

    Interface to message digest algorithms

    The list of known message digest algorithms

    #define HTDaMD5 1
    

    This is our general digest context structure. If you add a new algorithm, include its context in the union.

    typedef struct _HTDigestContext {
      int algorithm;          
        union { 
               MD5_CTX md5;
        } context;
    } HTDigestContext;
    

    This is a set of generic functions for generating a message digest

    extern BOOL HTDigest_init (HTDigestContext *context, int digesttype);
    extern BOOL HTDigest_update (HTDigestContext *context, char *input, unsigned int inputLen);
    extern BOOL HTDigest_final (unsigned char *digest, HTDigestContext *context);
    
    #endif	/* NOT HTDigest_H */
    


    @(#) $Id: HTDigest.html,v 2.3 2025/02/22 15:54:19 kahan Exp $
    libwww/Library/src/HTDir.c0100644000076400001440000003255007126076303015073 0ustar danielusers/* HTDir.c ** DIRECTORY BROWSING ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTDir.c,v 2.23 2025/06/27 10:06:59 kahan Exp $ ** ** This is unix-specific code in general ** The module is intended for use in HTFile.c and HTFTP.c where ** it replaces the old directory browsing routine. ** The module is only compiled if GOT_READ_DIR is defined ** ** Authors: ** HF Henrik Frystyk, MIT, ** History: ** Sep 95 HFN written ** ** Note: ** It could be a HTML table instead */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWFile.h" #include "WWWHTML.h" #include "HTIcons.h" #include "HTDescpt.h" #include "HTDir.h" /* Implemented here */ /* Macros and other defines */ #define PUTC(c) (*target->isa->put_character)(target, c) #define PUTS(s) (*target->isa->put_string)(target, s) #define START(e) (*target->isa->start_element)(target, e, 0, 0) #define END(e) (*target->isa->end_element)(target, e) #define FREE_TARGET (*target->isa->_free)(target) #define DEFAULT_MINFW 15 #define DEFAULT_MAXFW 25 /* Type definitions and global variables etc. local to this module */ struct _HTStructured { const HTStructuredClass * isa; /* ... */ }; struct _HTDir { HTStructured * target; HTRequest * request; HTArray * array; /* Array for sorted listings */ char * fnbuf; /* File name buffer */ char * lnbuf; /* Rest of line */ char * base; /* base url is any */ HTDirShow show; /* What do we want to show */ HTDirKey key; /* Key for sorting */ int size; /* Number of files */ int curfw; /* Max file name length in list */ }; typedef struct _HTDirNode { char * fname; char * date; char * size; char * note; HTFileMode mode; } HTDirNode; typedef enum _HTShowLength { /* Width of each collumn */ HT_DLEN_SIZE = 6, HT_DLEN_DATE = 15, HT_DLEN_SPACE = 1, HT_DLEN_DES = 25 } HTShowLength; PRIVATE int MinFileW = DEFAULT_MINFW; PRIVATE int MaxFileW = DEFAULT_MAXFW; /* ------------------------------------------------------------------------- */ /* LINE JUSTIFICATION */ /* ------------------------------------------------------------------------- */ /* ** Left-justifies str_in into str_out expecting str_out having size length ** l is number of chars. No 0 termination, rest of line filled with ' ' */ PRIVATE void LeftStr (char **outstr, char * instr, int l) { char *out = *outstr; while (l-- > 0 && *instr && (*out++ = *instr++)); while (l-- > 0) *out++ = ' '; *outstr = out; } /* ** Like LeftStr(), but result is right-justified. ** l is number of chars. No 0 termination */ PRIVATE void RightStr (char **outstr, char * instr, int l) { char *start = *outstr+l-strlen(instr); char *out = *outstr; while (outfname); HT_FREE(node->date); HT_FREE(node->size); HT_FREE(node->note); HT_FREE(node); return YES; } return NO; } /* ** Escape a filename and add a '/' if it's a directory */ PRIVATE char * expand_name (char * name, HTFileMode mode) { char * escaped = HTEscape(name, URL_XPALPHAS); if (mode == HT_IS_DIR) if (*(name+strlen(name)-1) != '/') StrAllocCat(escaped, "/"); return escaped; } /* ** Output an element in HTML ** Returns YES if OK, else NO */ PRIVATE BOOL HTDirNode_print (HTDir *dir, HTDirNode *node) { char *tp = NULL; HTStructured *target = dir->target; if (dir->show & HT_DS_ICON) { HTFormat format = NULL; HTEncoding encoding = NULL; double q=1.0; HTIconNode * icon; if (node->mode == HT_IS_FILE) HTBind_getFormat(node->fname, &format, &encoding, NULL, NULL, &q); icon = HTIcon_find(node->mode, format, encoding); /* Are we having a hot or a cold icon? */ if (!(dir->show & HT_DS_HOTI)) { if (icon) { char * alt = HTIcon_alternative(icon, YES); HTMLPutImg(target, HTIcon_url(icon), alt, NULL); HT_FREE(alt); PUTC(' '); } } /* Start the anchor element */ if (dir->base) { char *escaped = expand_name(node->fname, node->mode); char *full; if ((full = (char *) HT_MALLOC(strlen(escaped)+strlen(dir->base)+1)) == NULL) HT_OUTOFMEM("HTDirNode_print"); strcpy(full, dir->base); strcat(full, escaped); HTStartAnchor(target, NULL, full); HT_FREE(escaped); HT_FREE(full); } else { char *escaped = expand_name(node->fname, node->mode); HTStartAnchor(target, NULL, escaped); HT_FREE(escaped); } if (dir->show & HT_DS_HOTI) { char * alt = HTIcon_alternative(icon, YES); HTMLPutImg(target, HTIcon_url(icon), alt, NULL); PUTC(' '); } } else { if (dir->base) { char *escaped = expand_name(node->fname, node->mode); char *full; if ((full = (char *) HT_MALLOC(strlen(escaped)+strlen(dir->base)+1)) == NULL) HT_OUTOFMEM("HTDirNode_print"); strcpy(full, dir->base); strcat(full, escaped); HTStartAnchor(target, NULL, escaped); HT_FREE(escaped); HT_FREE(full); } else { char *escaped = HTEscape(node->fname, URL_XPALPHAS); HTStartAnchor(target, NULL, escaped); HT_FREE(escaped); } } /* Insert the anchor text and end anchor */ { char *in = node->fname; char *out = dir->fnbuf; int l = dir->curfw; while (l-- > 0 && *in && (*out++ = *in++)); if (*in) *(out-1) = '>'; else if (node->mode == HT_IS_DIR) { *out++ = '/'; l--; } *out = '\0'; PUTS(dir->fnbuf); END(HTML_A); out = dir->fnbuf; while (l-- >= 0) *out++ = ' '; LeftStr(&out, " ", HT_DLEN_SPACE); *out = '\0'; PUTS(dir->fnbuf); } /* Print the rest of it */ tp = dir->lnbuf; if (node->date) { RightStr(&tp, node->date, HT_DLEN_DATE); LeftStr(&tp, " ", HT_DLEN_SPACE); } if (node->size) { RightStr(&tp, node->size, HT_DLEN_SIZE); LeftStr(&tp, " ", HT_DLEN_SPACE); } if (node->note) { LeftStr(&tp, node->note, HT_DLEN_DES); LeftStr(&tp, " ", HT_DLEN_SPACE); } *tp = '\0'; PUTS(dir->lnbuf); PUTC('\n'); return YES; } /* ------------------------------------------------------------------------- */ /* DIRECTORY MANAGEMENT */ /* ------------------------------------------------------------------------- */ /* HTDir_headLine ** -------------- ** Puts out the header line of the list itself ** Returns YES if OK, else NO */ PRIVATE BOOL HTDir_headLine (HTDir *dir) { if (dir) { char *tp; HTStructured *target = dir->target; START(HTML_PRE); if (dir->show & HT_DS_ICON) { HTIconNode * icon = HTIcon_find(HT_IS_BLANK, NULL, NULL); if (icon) { char * alt = HTIcon_alternative(icon, NO); HTMLPutImg(target, HTIcon_url(icon), alt, NULL); HT_FREE(alt); PUTC(' '); } } tp = dir->fnbuf; LeftStr(&tp, "Name", dir->curfw); LeftStr(&tp, " ", HT_DLEN_SPACE); *tp = '\0'; PUTS(dir->fnbuf); tp = dir->lnbuf; if (dir->show & HT_DS_DATE) { LeftStr(&tp, "Last Modified", HT_DLEN_DATE); LeftStr(&tp, " ", HT_DLEN_SPACE); } if (dir->show & HT_DS_SIZE) { RightStr(&tp, "Size", HT_DLEN_SIZE); LeftStr(&tp, " ", HT_DLEN_SPACE); } if (dir->show & HT_DS_DES) { LeftStr(&tp, "Description", HT_DLEN_DATE); LeftStr(&tp, " ", HT_DLEN_SPACE); } *tp = '\0'; PUTS(dir->lnbuf); END(HTML_PRE); START(HTML_HR); START(HTML_PRE); return YES; } return NO; } /* HTDir_setWidth ** -------------- ** The module automatically ajusts the width of the directory listing as ** a function of the file name. The width can flows dynamically between ** an upper and a lower limit. */ PUBLIC BOOL HTDir_setWidth (int minfile, int maxfile) { MinFileW = (minfile>=0) ? minfile : 0; MaxFileW = (maxfile>minfile) ? maxfile : minfile+1; return YES; } /* HTDir_new ** --------- ** Creates a structured stream object and sets up the initial HTML stuff ** Returns the dir object if OK, else NULL */ PUBLIC HTDir * HTDir_new (HTRequest * request, HTDirShow show, HTDirKey key) { HTDir *dir; char *title = NULL; if (!request) return NULL; /* Create object */ if ((dir = (HTDir *) HT_CALLOC(1, sizeof (HTDir))) == NULL || (dir->fnbuf = (char *) HT_MALLOC(MaxFileW+HT_DLEN_SPACE)) == NULL) HT_OUTOFMEM("HTDir_new"); dir->target = HTMLGenerator(request, NULL, WWW_HTML, HTRequest_outputFormat(request), HTRequest_outputStream(request)); HTRequest_setOutputConnected(request, YES); HTAnchor_setFormat(HTRequest_anchor(request), WWW_HTML); dir->request = request; dir->show = show; dir->key = key; if (key==HT_DK_NONE) dir->curfw = MaxFileW; else { dir->curfw = MinFileW; dir->array = HTArray_new(256); } /* We're all OK */ HTRequest_addError(request, ERR_INFO, NO, HTERR_OK, NULL, 0, "HTDir_new"); /* Find the length of the fields */ { int len = HT_DLEN_SPACE+1; if (show & HT_DS_SIZE) len += (HT_DLEN_SIZE+HT_DLEN_SPACE); if (show & HT_DS_DATE) len += (HT_DLEN_DATE+HT_DLEN_SPACE); if (show & HT_DS_DES) len += HT_DLEN_DES; if ((dir->lnbuf = (char *) HT_MALLOC(len)) == NULL) HT_OUTOFMEM("HTDir_new"); } /* Find the title and the base URL */ { char *addr = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); char *path = HTParse(addr, "", PARSE_PATH+PARSE_PUNCTUATION); char *ptr; if ((ptr = strchr(path, ';')) || (ptr = strchr(path, '?'))) *ptr = '\0'; StrAllocCopy(title, path); HTUnEscape(title); /* Title */ if((ptr=strrchr(path, '/')) && (ptrbase, ++ptr); StrAllocCat(dir->base, "/"); } HTTRACE(PROT_TRACE, "HTDir_new... base is `%s\'\n" _ dir->base ? dir->base : ""); HT_FREE(addr); HT_FREE(path); } /* Start the HTML stuff */ { HTStructured *target = dir->target; START(HTML_HTML); START(HTML_HEAD); START(HTML_TITLE); PUTS("Current index is "); PUTS(title); END(HTML_TITLE); END(HTML_HEAD); START(HTML_BODY); START(HTML_H1); PUTS("Index of "); PUTS(title); END(HTML_H1); } HT_FREE(title); return dir; } /* HTDir_addElement ** --------------- ** This function accepts a directory line. "data" and "size", and ** "description" can all be NULL ** Returns YES if OK, else NO */ PUBLIC BOOL HTDir_addElement (HTDir *dir, char *name, char *date, char *size, HTFileMode mode) { HTDirNode *node = HTDirNode_new(); if (!dir || !name) return NO; if ((node->fname = (char *) HT_MALLOC(strlen(name) + 2)) == NULL) HT_OUTOFMEM("HTDir_addElement"); strcpy(node->fname, name); /* Mandatory */ if (dir->show & HT_DS_DATE && date) StrAllocCopy(node->date, date); if (dir->show & HT_DS_SIZE && size) StrAllocCopy(node->size, size); if (dir->show & HT_DS_DES) { #if 0 /* FIND DESCRIPTION */ #endif } /* Set the mode of the file */ node->mode = mode; /* Should we display now or later? */ if (dir->key == HT_DK_NONE) { if (!dir->size++) HTDir_headLine(dir); HTDirNode_print(dir, node); HTDirNode_free(node); } else { int slen = strlen(name); if (slen > dir->curfw) dir->curfw = slen < MaxFileW ? slen : MaxFileW; HTArray_addObject(dir->array, (void *) node); } return YES; } PRIVATE int DirSort (const void *a, const void *b) { #if 0 HTDirNode *aa = *(HTDirNode **) a; HTDirNode *bb = *(HTDirNode **) b; return strcmp(aa->fname, bb->fname); #else return strcmp((*((HTDirNode **) a))->fname, (*((HTDirNode **) b))->fname); #endif } PRIVATE int DirCaseSort (const void *a, const void *b) { #if 0 HTDirNode *aa = *(HTDirNode **) a; HTDirNode *bb = *(HTDirNode **) b; return strcasecomp(aa->fname, bb->fname); #else return strcasecomp((*((HTDirNode **) a))->fname, (*((HTDirNode **) b))->fname); #endif } /* HTDir_free ** ---------- ** If we are sorting then do the sorting and put out the list, ** else just append the end of the list. */ PUBLIC BOOL HTDir_free (HTDir * dir) { if (!dir) return NO; if (dir->key != HT_DK_NONE) { HTArray *array = dir->array; void **data; HTDirNode *node; HTDir_headLine(dir); HTArray_sort(array, (dir->key==HT_DK_CINS ? DirCaseSort : DirSort)); node = (HTDirNode *) HTArray_firstObject(array, data); while (node) { HTDirNode_print(dir, node); HTDirNode_free(node); node = (HTDirNode *) HTArray_nextObject(array, data); } dir->size = HTArray_size(array); HTArray_delete(array); } /* Put out the end of the HTML stuff */ { HTStructured *target = dir->target; END(HTML_PRE); START(HTML_HR); START(HTML_PRE); if (!dir->size) PUTS("Empty directory"); else if (dir->size == 1) PUTS("1 File"); else { char buffer[20]; sprintf(buffer, "%u files", dir->size); PUTS(buffer); } END(HTML_PRE); END(HTML_BODY); END(HTML_HTML); FREE_TARGET; } HT_FREE(dir->fnbuf); HT_FREE(dir->lnbuf); HT_FREE(dir->base); HT_FREE(dir); return YES; } libwww/Library/src/HTDir.html0100644000076400001440000000645606526451217015627 0ustar danielusers W3C Sample Code Library libwww DIRECTORY BROWSING

    Directory Browsing

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    The directory manager generates directory listings for FTP and HTTP requests. This module contains the protocol independent code and it produces the HTML object. It is only included if either the FTP or the File module is included.

    This module is implemented by HTDir.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTDIR_H
    #define HTDIR_H
    #include "HTReq.h"
    #include "HTIcons.h"
    

    What Should the Listings Look Like?

    If the HT_DS_DES is set then the Description field is added as the last column in the listing. File descriptions are queried from the HTDescript module. Make a full mask by adding/oring the following flags:
    typedef enum _HTDirShow {
        HT_DS_SIZE  = 0x1,			/* Show file size using K, M and G? */
        HT_DS_DATE  = 0x2,			/* Show last modified date? */
        HT_DS_HID   = 0x4,			/* Show hidden files? */
        HT_DS_DES	= 0x8,			/* Show descriptions? */
        HT_DS_ICON  = 0x10,			/* Show icons? */
        HT_DS_HOTI  = 0x20			/* Are Icons hot or cold? */
    } HTDirShow;
    typedef enum _HTDirKey {
        HT_DK_NONE	= 0,			/* No sorting */
        HT_DK_CSEN	= 1,			/* Case sensitive */
        HT_DK_CINS  = 2			/* Case insensitive */
    } HTDirKey;
    

    Length of Filenames and Descriptions

    The module automatically ajusts the width of the directory listing as a function of the file name. The width can flows dynamically between an upper and a lower limit. The maximum length of this field is specified by
    extern BOOL HTDir_setWidth (int minfile, int maxfile);
    

    The Directory Object

    The directory object handles the generation of a directory listing. It is a bit like a stream in that it accept data, but it must be formatted in a special way which makes the normal stream architecture inadequate.

    Width of File Names

    The module automatically ajusts the width of the directory listing as a function of the file name. The width can flows dynamically between an upper and a lower limit.
    extern BOOL HTDir_setWidth (int minfile, int maxfile);
    

    Create a Directory Object

    Creates a structured stream object and sets up the initial HTML stuff Returns the dir object if OK, else NULL
    typedef struct _HTDir HTDir;
    extern HTDir * HTDir_new (HTRequest * request, HTDirShow show, HTDirKey key);
    

    Add a Line to the List

    This function accepts a directory line. "data" and "size", and "description" can all be NULL. Returns YES if OK, else NO
    extern BOOL HTDir_addElement	(HTDir *dir, char *name, char *date,
    				 char *size, HTFileMode mode);
    

    Free a Directory Obejct

    If we are sorting then do the sorting and put out the list, else just append the end of the list.
    extern BOOL HTDir_free (HTDir * dir);
    
    #endif /* HTDIR */
    

    @(#) $Id: HTDir.html,v 2.5 2025/05/14 02:10:23 frystyk Exp $
    libwww/Library/src/HTEPtoCl.c0100644000076400001440000000130206523414272015473 0ustar danielusers/* HTEpToClient.c ** EXTERNAL PARSE TO CLIENT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTEPtoCl.c,v 2.8 2025/05/04 19:36:26 frystyk Exp $ ** ** This module contains the interface between the ** the XParse module and the client. The dummy function is ** only here so that clients that use the XParse module ** can overWrite it. ** ** History: ** 19 Sep 94 Written by Hakon W Lie, howcome@w3.org ** 5 Dec 95 howcome changed name from Ext to X */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTStream.h" PUBLIC void HTCallClient (HTStream * me) { return; } libwww/Library/src/HTEPtoCl.html0100644000076400001440000000221306661445112016217 0ustar danielusers W3C Sample Code Library libwww Callback Stream Callbacks

    External Parser Callbacks

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    An interface between the XParse module and the Application. This module contains the interface between the XParse module and the client. The dummy function is only here so that clients that use the XParse module can overwrite it. See also HTXParse

    This module is implemented by HTEPtoCl.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTEPTOCLIENT_H
    #define HTEPTOCLIENT_H
    #include "HTStream.h"
    #include "HTXParse.h"
    extern CallClient HTCallClient;
    #endif
    


    @(#) $Id: HTEPtoCl.html,v 2.14 2025/02/14 04:00:10 frystyk Exp $
    libwww/Library/src/HTError.c0100644000076400001440000001372306664352703015456 0ustar danielusers/* HTError.c ** ERROR REPORT MODULE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTError.c,v 2.46 2025/02/22 22:10:11 frystyk Exp $ ** ** This is the implementaion of an error message reporting system that ** reports errors occured either in a stream module (structured streams ** inclusive) or in a protocol module. A list of errors are put into the ** a list which can be bound to a request object or a stream ** ** History: ** 05 May 94 Written by Henrik Frystyk, frystyk@w3.org ** Nov 95 Made list as basic data structure */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTInet.h" #include "HTError.h" /* Implemented here */ struct _HTError { HTErrorElement element; /* Index number into HTError */ HTSeverity severity; /* A la VMS */ BOOL ignore; /* YES if msg should not go to user */ void * par; /* Explanation, e.g. filename */ int length; /* For copying by generic routine */ char * where; /* Which function */ }; PRIVATE HTErrorShow HTShowMask = HT_ERR_SHOW_DEFAULT; /* ------------------------------------------------------------------------- */ /* HTError_add ** ----------- ** Add an error message to the error list. `par' and `where' ** might be set to NULL. If par is a string, it is sufficient to let ** length be unspecified, i.e., 0. If only a part of the string is ** wanted then specify a length inferior to strlen((char *) par). ** The string is '\0' terminated automaticly. ** NOTE: See also HTError_addSystem for system errors ** Return YES if OK, else NO */ PUBLIC BOOL HTError_add (HTList * list, HTSeverity severity, BOOL ignore, int element, void * par, unsigned int length, char * where) { HTError *newError; if (!list) return NO; if ((newError = (HTError *) HT_CALLOC(1, sizeof(HTError))) == NULL) HT_OUTOFMEM("HTError_add"); newError->element = (HTErrorElement) element; newError->severity = severity; newError->ignore = ignore; if (par) { if (!length) length = (int) strlen((char *) par); if ((newError->par = HT_MALLOC(length+1)) == NULL) HT_OUTOFMEM("HTErrorError"); memcpy(newError->par, par, length); *(((char *) newError->par)+length) = '\0'; newError->length = length; } newError->where = where; HTTRACE(CORE_TRACE, "Error....... Add %3d\tSeverity: %d\tParameter: `%s\'\tWhere: `%s\'\n" _ element _ newError->severity _ newError->par ? (char *) newError->par : "Unspecified" _ newError->where ? newError->where : "Unspecified"); return HTList_addObject(list, (void *) newError); } /* HTError_addSystem ** ----------------- ** Add a system error message to the error list. syscall ** is the name of the system call, e.g. "close". The message put to the ** list is that corresponds to the error number passed. ** Returns YES if OK, else NO ** See also HTError_add. */ PUBLIC BOOL HTError_addSystem (HTList * list, HTSeverity severity, int errornumber, BOOL ignore, char * syscall) { BOOL status = NO; if (list) { char * errsysmsg = HTErrnoString(errornumber); status = HTError_add(list, severity, ignore, HTERR_SYSTEM, errsysmsg, errsysmsg ? (int) strlen(errsysmsg) : 0, syscall ? syscall : "unknown"); HT_FREE(errsysmsg); } return status; } /* HTError_deleteAll ** ----------------- ** Remove all errors from the list */ PUBLIC BOOL HTError_deleteAll (HTList * list) { if (list) { HTList *cur = list; HTError *pres; while ((pres = (HTError *) HTList_nextObject(cur))) { HT_FREE(pres->par); HT_FREE(pres); } HTList_delete(list); return YES; } return NO; } /* HTError_deleteLast ** ------------------ ** Deletes the last error entry added to the list ** Return YES if OK, else NO */ PUBLIC BOOL HTError_deleteLast (HTList * list) { if (list) { HTError * old = (HTError *) HTList_removeLastObject(list); if (old) { HTTRACE(CORE_TRACE, "Error....... Delete %p\n" _ old); HT_FREE(old->par); HT_FREE(old); return YES; } } return NO; } /* HTError_ignoreLast ** ------------------ ** Turns on the `ignore' flag for the most recent error entered the ** error list. Returns YES if OK else NO */ PUBLIC BOOL HTError_ignoreLast (HTList * list) { if (list) { HTError * last = (HTError *) HTList_lastObject(list); if (last) { HTTRACE(CORE_TRACE, "Error....... Ignore %p\n" _ last); last->ignore = YES; return YES; } } return NO; } /* HTError_setIgnore ** ----------------- */ PUBLIC BOOL HTError_setIgnore (HTError * info) { if (info) { info->ignore = YES; return YES; } return NO; } /* ** Get show preferences */ PUBLIC HTErrorShow HTError_show (void) { return HTShowMask; } PUBLIC BOOL HTError_setShow (HTErrorShow mask) { HTShowMask = mask; return YES; } /* ** Should we show this error entry? */ PUBLIC BOOL HTError_doShow (HTError *info) { return (info && ((HTShowMask & info->severity) && (!info->ignore || HTShowMask & HT_ERR_SHOW_IGNORE))); } /* ** Various Fields in the HTError structure */ PUBLIC HTSeverity HTError_severity (HTError *info) { return info ? info->severity : ERR_UNKNOWN; } /* ** Any error more serious than this? */ PUBLIC BOOL HTError_hasSeverity (HTList * list, HTSeverity severity) { if (list) { HTList * cur = list; HTError * pres; while ((pres = (HTError *) HTList_nextObject(cur))) { if (pres->severity < severity) { HTTRACE(CORE_TRACE, "Severity.... Found a severe error\n"); return YES; } } } return NO; } PUBLIC int HTError_index (HTError * info) { return info ? info->element : HTERR_INTERNAL; } PUBLIC void * HTError_parameter (HTError * info, int * length) { if (info) { *length = info->length; return info->par; } return NULL; } PUBLIC const char * HTError_location (HTError * info) { return info ? info->where : NULL; } libwww/Library/src/HTError.html0100644000076400001440000002244706700745213016174 0ustar danielusers W3C Sample Code Library libwww Error Class

    The Error Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The Error class provides an easy API for registering errors ocurring while libwww serves a request. All errors are registered in an "error stack" in the Request object which allows for nested errors. The Error class is both natural language independent and application independent in that it uses enumerations in order to refer to specific errors. It is for the application to provide an error presentation module which interprets the errors associated with a request. An eample of such an implementation can be found in the HTDialog module.

    This module is implemented by HTError.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTERROR_H
    #define HTERROR_H
    typedef struct _HTError HTError;
    typedef enum _HTSeverity {
        ERR_UNKNOWN		  = 0x0,
        ERR_FATAL		  = 0x1,
        ERR_NON_FATAL	  = 0x2,
        ERR_WARN	 	  = 0x4,
        ERR_INFO	 	  = 0x8
    } HTSeverity;
    #include "HTReq.h"
    

    The Error Message Object

    An error consists of a messsage code, a short, natural language specific message, and a URI which can point to more information. This module also provides a default set of error objects with English text. Errors are registered together with a severity and you can also set the mode for what class of error severities should be shown and which should be ignored.

    typedef struct _HTErrorMessage {
        int  	code;           	/* Error number */
        char *	msg;          		/* Short explanation */
        char *	url;			/* Explaning URL */
    } HTErrorMessage;
    

    Error Message Index

    Note: All non-HTTP error codes have (index number > HTERR_HTTP_CODES), and they will not be shown in the error-message generated.

    Error codes are registered in an array where the following enumerations serve as an index. They must not be replaced! See the HTDialog module for default initialization of these messages.

    typedef enum _HTErrorElement {
    	HTERR_CONTINUE = 0,					/* 100 */
    	HTERR_SWITCHING,					/* 101 */
    	HTERR_OK,						/* 200 */
    	HTERR_CREATED,						/* 201 */
    	HTERR_ACCEPTED,						/* 202 */
    	HTERR_NON_AUTHORITATIVE,				/* 203 */
    	HTERR_NO_CONTENT,					/* 204 */
    	HTERR_RESET,						/* 205 */
    	HTERR_PARTIAL,						/* 206 */
    	HTERR_PARTIAL_OK,					/* 207 */
    	HTERR_MULTIPLE,						/* 300 */
    	HTERR_MOVED,						/* 301 */
    	HTERR_FOUND,						/* 302 */
    	HTERR_METHOD,						/* 303 */
    	HTERR_NOT_MODIFIED,					/* 304 */
    	HTERR_USE_PROXY,					/* 305 */
    	HTERR_PROXY_REDIRECT,					/* 306 */
    	HTERR_TEMP_REDIRECT,					/* 307 */
    	HTERR_BAD_REQUEST,					/* 400 */
    	HTERR_UNAUTHORIZED,					/* 401 */
    	HTERR_PAYMENT_REQUIRED,					/* 402 */
    	HTERR_FORBIDDEN,					/* 403 */
    	HTERR_NOT_FOUND,					/* 404 */
    	HTERR_NOT_ALLOWED,					/* 405 */
    	HTERR_NONE_ACCEPTABLE,					/* 406 */
    	HTERR_PROXY_UNAUTHORIZED,				/* 407 */
    	HTERR_TIMEOUT,						/* 408 */
    	HTERR_CONFLICT,						/* 409 */
    	HTERR_GONE,						/* 410 */
    	HTERR_LENGTH_REQUIRED,					/* 411 */
    	HTERR_PRECON_FAILED,					/* 412 */
    	HTERR_TOO_BIG,						/* 413 */
    	HTERR_URI_TOO_BIG,					/* 414 */
    	HTERR_UNSUPPORTED,					/* 415 */
    	HTERR_BAD_RANGE,					/* 416 */
    	HTERR_EXPECTATION_FAILED,				/* 417 */
    	HTERR_REAUTH,				                /* 418 */
    	HTERR_PROXY_REAUTH,				        /* 419 */
    	HTERR_INTERNAL,						/* 500 */
    	HTERR_NOT_IMPLEMENTED,					/* 501 */
    	HTERR_BAD_GATE,						/* 502 */
    	HTERR_DOWN,						/* 503 */
    	HTERR_GATE_TIMEOUT,					/* 504 */
    	HTERR_BAD_VERSION,					/* 505 */
    	HTERR_NO_PARTIAL_UPDATE,				/* 506 */
    	/* Cache warnings */
    	HTERR_STALE,						/* 10 */
    	HTERR_REVALIDATION_FAILED,				/* 11 */
    	HTERR_DISCONNECTED_CACHE,				/* 12 */
    	HTERR_HEURISTIC_EXPIRATION,				/* 13 */
    	HTERR_TRANSFORMED,					/* 14 */
    	HTERR_CACHE,						/* 99 */
    	/* Put all non-HTTP status codes after this */
    	HTERR_NO_REMOTE_HOST,
    	HTERR_NO_HOST,
    	HTERR_NO_FILE,
    	HTERR_FTP_SERVER,
    	HTERR_FTP_NO_RESPONSE,
            HTERR_FTP_LOGIN_FAILURE,
    	HTERR_TIME_OUT,
    	HTERR_GOPHER_SERVER,
    	HTERR_INTERRUPTED,
    	HTERR_CON_INTR,
    	HTERR_CSO_SERVER,
    	HTERR_HTTP09,
    	HTERR_BAD_REPLY,
    	HTERR_UNKNOWN_AA,
    	HTERR_NEWS_SERVER,
    	HTERR_FILE_TO_FTP,
    	HTERR_AUTO_REDIRECT,
    	HTERR_MAX_REDIRECT,
    	HTERR_EOF,
    	HTERR_WAIS_OVERFLOW,
    	HTERR_WAIS_MODULE,
    	HTERR_WAIS_NO_CONNECT,
    	HTERR_SYSTEM,
    	HTERR_CLASS,
    	HTERR_ACCESS,
    	HTERR_LOGIN,
            HTERR_CACHE_EXPIRED,
            HTERR_NO_AUTO_RULES,
            HTERR_NO_AUTO_PROXY,
    	HTERR_ELEMENTS		            /* This MUST be the last element */
    } HTErrorElement;
    

    Default English Language Messages

    Default set of error messages arranged in an array into which the index codes serve as index. See the HTDialog module for default initialization of these strings.

    What Errors should be Ignored or Passed Through?

    This variable dictates which errors should be put out when generating the message to the user. The first four enumerations make it possible to see `everything as bad or worse than' this level, e.g. HT_ERR_SHOW_NON_FATAL shows messages of type HT_ERR_SHOW_NON_FATAL and HT_ERR_SHOW_FATAL.

    Note: The default value is made so that it only puts a message to stderr if a `real' error has occurred. If a separate widget is available for information and error messages then probably HT_ERR_SHOW_DETAILED would be more appropriate.

    typedef enum _HTErrorShow {
        HT_ERR_SHOW_FATAL     = 0x1,
        HT_ERR_SHOW_NON_FATAL = 0x3,
        HT_ERR_SHOW_WARNING   = 0x7,
        HT_ERR_SHOW_INFO 	  = 0xF,
        HT_ERR_SHOW_PARS	  = 0x10,
        HT_ERR_SHOW_LOCATION  = 0x20,
        HT_ERR_SHOW_IGNORE    = 0x40,
        HT_ERR_SHOW_FIRST     = 0x80,
        HT_ERR_SHOW_LINKS     = 0x100,
        HT_ERR_SHOW_DEFAULT	  = 0x13,
        HT_ERR_SHOW_DETAILED  = 0x1F,
        HT_ERR_SHOW_DEBUG	  = 0x7F
    } HTErrorShow;
    extern HTErrorShow HTError_show (void);
    extern BOOL HTError_setShow (HTErrorShow mask);
    

    Creation and Deletion Methods

    Add an Error

    Add an error message to the error list. `par' and `where' might be set to NULL. If par is a string, it is sufficient to let length be unspecified, i.e., 0. If only a part of the string is wanted then specify a length inferior to strlen((char *) par). The string is '\0' terminated automaticly. See also HTError_addSystem for system errors. Returns YES if OK, else NO.

    extern BOOL HTError_add (HTList * 	list,
    			 HTSeverity	severity,
    			 BOOL		ignore,
    			 int		element,
    			 void *		par,
    			 unsigned int	length,
    			 char *		where);
    

    Add a System Error

    Add a system error message to the error list. syscall is the name of the system call, e.g. "close". The message put to the list is that corresponds to the error number passed. See also HTError_add. Returns YES if OK, else NO.

    extern BOOL HTError_addSystem (HTList *		list,
    			       HTSeverity 	severity,
    			       int		errornumber,
    			       BOOL		ignore,
    			       char *		syscall);
    

    Delete an Entire Error Stack

    Deletes all errors in a list.

    extern BOOL HTError_deleteAll (HTList * list);
    

    Deletes the Last Edded Entry

    Deletes the last error entry added to the list. Return YES if OK, else NO

    extern BOOL HTError_deleteLast (HTList * list);
    

    Object Methods

    Show the Error Entry?

    Should we show this entry in the list or just continue to the next one?

    extern BOOL HTError_doShow (HTError * info);
    

    Ignore last Added Error

    Turns on the `ignore' flag for the most recent error entered the error list. Returns YES if OK else NO

    extern BOOL HTError_ignoreLast	(HTList * list);
    extern BOOL HTError_setIgnore	(HTError * info);
    

    Error Index Number

    Each error object is assigned an index number as defined by the HTErrorElement above. The mapping from this index to an error code and a message must be done by the application. The Library provides a default implementation in the HTDialog module, but that can of course be changed depending on the application.

    extern int HTError_index		(HTError * info);
    

    Error Severity

    This function returns the severity of the error object passed by the caller

    extern HTSeverity HTError_severity	(HTError * info);
    

    You can ask whether a list of errors contains any error object with a severity level which is higher than the one specifed.

    extern BOOL HTError_hasSeverity 	(HTList * list, HTSeverity severity);
    

    Parameters Asscotiated with Error

    extern void * HTError_parameter		(HTError * info, int * length);
    

    Where did it happen?

    extern const char * HTError_location	(HTError * info);
    
    #endif /* HTERROR_H */
    


    @(#) $Id: HTError.html,v 2.50 2025/04/01 19:35:39 frystyk Exp $
    libwww/Library/src/HTEscape.c0100644000076400001440000001002106664352703015551 0ustar danielusers/* HTEscape.c ** ESCAPE AND UNESACPE ILLEGAL CHARACTERS IN A URI ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTEscape.c,v 2.21 2025/02/22 22:10:11 frystyk Exp $ ** ** history: ** Nov 13 94 Spawned from HTParse, as it then can be used in utility ** programs without loading the whole library */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTEscape.h" /* Implemented here */ #define HEX_ESCAPE '%' #define ACCEPTABLE(a) ( a>=32 && a<128 && ((isAcceptable[a-32]) & mask)) /* ** Not BOTH static AND const at the same time in gcc :-(, Henrik 18/03-94 ** code gen error in gcc when making random access to static const table(!!) */ /* ** Bit 0 xalpha -- see HTFile.h ** Bit 1 xpalpha -- as xalpha but with plus. ** Bit 2 ... path -- as xpalpha but with / */ PRIVATE unsigned char isAcceptable[96] = {/* 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF */ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xF,0xE,0x0,0xF,0xF,0xC, /* 2x !"#$%&'()*+,-./ */ 0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x8,0x0,0x0,0x0,0x0,0x0, /* 3x 0123456789:;<=>? */ 0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF, /* 4x @ABCDEFGHIJKLMNO */ 0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x0,0x0,0x0,0x0,0xF, /* 5X PQRSTUVWXYZ[\]^_ */ 0x0,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF, /* 6x `abcdefghijklmno */ 0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x0,0x0,0x0,0x0,0x0 /* 7X pqrstuvwxyz{\}~DEL */ }; PRIVATE char *hex = "0123456789ABCDEF"; /* ------------------------------------------------------------------------- */ /* Escape undesirable characters using % HTEscape() ** ------------------------------------- ** ** This function takes a pointer to a string in which ** some characters may be unacceptable unescaped. ** It returns a string which has these characters ** represented by a '%' character followed by two hex digits. ** ** In the tradition of being conservative in what you do and liberal ** in what you accept, we encode some characters which in fact are ** allowed in URLs unencoded -- so DON'T use the table below for ** parsing! ** ** Unlike HTUnEscape(), this routine returns a HT_MALLOCed string. ** */ PUBLIC char * HTEscape (const char * str, HTURIEncoding mask) { const char * p; char * q; char * result; int unacceptable = 0; if (!str) return NULL; for(p=str; *p; p++) if (!ACCEPTABLE((unsigned char)TOASCII(*p))) unacceptable++; if ((result = (char *) HT_MALLOC(p-str + unacceptable+ unacceptable + 1)) == NULL) HT_OUTOFMEM("HTEscape"); for(q=result, p=str; *p; p++) { unsigned char a = TOASCII(*p); if (!ACCEPTABLE(a)) { *q++ = HEX_ESCAPE; /* Means hex commming */ *q++ = hex[a >> 4]; *q++ = hex[a & 15]; } else *q++ = *p; } *q++ = 0; /* Terminate */ return result; } PUBLIC char HTAsciiHexToChar (char c) { return c >= '0' && c <= '9' ? c - '0' : c >= 'A' && c <= 'F'? c - 'A' + 10 : c - 'a' + 10; /* accept small letters just in case */ } /* Decode %xx escaped characters HTUnEscape() ** ----------------------------- ** ** This function takes a pointer to a string in which some ** characters may have been encoded in %xy form, where xy is ** the acsii hex code for character 16x+y. ** The string is converted in place, as it will never grow. */ PUBLIC char * HTUnEscape (char * str) { char * p = str; char * q = str; if (!str) { /* Just for safety ;-) */ HTTRACE(URI_TRACE, "HTUnEscape.. Called with NULL argument.\n"); return NULL; } while(*p) { if (*p == HEX_ESCAPE) { p++; if (*p) *q = HTAsciiHexToChar(*p++) * 16; #if 1 /* Suggestion from Markku Savela */ if (*p) *q = FROMASCII(*q + HTAsciiHexToChar(*p)), ++p; q++; #else if (*p) *q = FROMASCII(*q + HTAsciiHexToChar(*p)); p++, q++; #endif } else { *q++ = *p++; } } *q++ = 0; return str; } /* HTUnEscape */ libwww/Library/src/HTEscape.html0100644000076400001440000000432706532123461016276 0ustar danielusers W3C Sample Code Library libwww URIs

    Escape and Unescape Illegal Characters in URIs

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    URLs are written only with the graphic printable characters of the US-ASCII coded character set. All other characters must be escaped before they can be used in URLs. This module defines the methods required for escaping and unescaping the URLs. Internally in the Library, all URLs are escaped so that we never see illegal characters in the URL handled by the Library. We only unescape the URLs when we have to, for example while taking to the local file system etc.

    This module is implemented by HTEscape.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTESCAPE_H
    #define HTESCAPE_H
    

    Encode Unacceptable Characters using %xy

    This function takes a string containing any sequence of ASCII characters, and returns a malloced string containing the same infromation but with all "unacceptable" characters represented in the form %xy where x and y are two hex digits.

    typedef enum _HTURIEncoding {
        URL_XALPHAS		= 0x1,     /* Escape all unsafe characters */
        URL_XPALPHAS	= 0x2,     /* As URL_XALPHAS but allows '+' */
        URL_PATH		= 0x4,     /* As URL_XPALPHAS but allows '/' */
        URL_DOSFILE         = 0x8      /* As URL_URLPATH but allows ':' */
    } HTURIEncoding;
    extern char * HTEscape (const char * str, HTURIEncoding mask);
    

    Convert a single Character from Ascii Hex to Char

    extern char HTAsciiHexToChar (char c);
    

    Decode %xy Escaped Characters

    This function takes a pointer to a string in which character smay have been encoded in %xy form, where xy is the acsii hex code for character 16x+y. The string is converted in place, as it will never grow.

    extern char * HTUnEscape (char * str);
    
    #endif	/* HTESCAPE_H */
    


    @(#) $Id: HTEscape.html,v 2.17 2025/05/24 23:03:13 frystyk Exp $
    libwww/Library/src/HTEvent.c0100644000076400001440000000646006664352703015446 0ustar danielusers/* HTEvntrg.c ** EVENT DISPATCHER ** ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTEvent.c,v 2.9 2025/02/22 22:10:11 frystyk Exp $ ** ** The event dispatcher allows applications to register their own event ** models. They may register the standard HTEventrg methods from ** HTEventrg.c, of implement their functionality with their on methods. ** ** Authors: ** EGP Eric Gordon Prud'hommeuax ** Bugs ** */ /* Implementation dependent include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTEvent.h" /* Implemented here */ PRIVATE HTEvent_registerCallback * RegisterCBF = NULL; PRIVATE HTEvent_unregisterCallback * UnregisterCBF = NULL; /* ------------------------------------------------------------------------- */ PUBLIC void HTEvent_setRegisterCallback(HTEvent_registerCallback * registerCBF) { HTTRACE(CORE_TRACE, "Event....... registering %p\n" _ registerCBF); RegisterCBF = registerCBF; } PUBLIC void HTEvent_setUnregisterCallback(HTEvent_unregisterCallback * unregisterCBF) { HTTRACE(CORE_TRACE, "Event....... registering %p\n" _ unregisterCBF); UnregisterCBF = unregisterCBF; } PUBLIC BOOL HTEvent_isCallbacksRegistered (void) { return (RegisterCBF && UnregisterCBF); } PUBLIC int HTEvent_unregister (SOCKET s, HTEventType type) { if (!UnregisterCBF) { HTTRACE(CORE_TRACE, "Event....... No handler registered\n"); return -1; } return (*UnregisterCBF)(s, type); } PUBLIC int HTEvent_register(SOCKET s, HTEventType type, HTEvent * event) { if (!RegisterCBF) { HTTRACE(CORE_TRACE, "Event....... No handler registered\n"); return -1; } return (*RegisterCBF)(s, type, event); } PUBLIC BOOL HTEvent_setCallback(HTEvent * event, HTEventCallback * cbf) { if (!event) return NO; event->cbf = cbf; return YES; } PUBLIC HTEvent * HTEvent_new (HTEventCallback * cbf, void * context, HTPriority priority, int millis) { if (cbf) { HTEvent * me; if ((me = (HTEvent *) HT_CALLOC(1, sizeof(HTEvent))) == NULL) HT_OUTOFMEM("HTEvent_new"); me->cbf = cbf; me->param = context; me->priority = priority; me->millis = millis; HTTRACE(CORE_TRACE, "Event....... Created event %p with context %p, priority %d, and timeout %d\n" _ me _ context _ priority _ millis); return me; } return NULL; } PUBLIC BOOL HTEvent_delete (HTEvent * me) { if (me) { HT_FREE(me); HTTRACE(CORE_TRACE, "Event....... Deleted event %p\n" _ me); return YES; } return NO; } PUBLIC BOOL HTEvent_setParam(HTEvent * event, void * param) { if (!event) return NO; event->param = param; return YES; } PUBLIC BOOL HTEvent_setPriority(HTEvent * event, HTPriority priority) { if (!event) return NO; event->priority = priority; return YES; } PUBLIC BOOL HTEvent_setTimeout(HTEvent * event, int timeout) { if (event) { event->millis = timeout; return YES; } return NO; } PUBLIC char * HTEvent_type2str(HTEventType type) { int i; static char space[20]; /* in case we have to sprintf type */ static struct {int type; char * str;} match[] = {HT_EVENT_INITIALIZER}; for (i = 0; i < sizeof(match)/sizeof(match[0]); i++) if (match[i].type == type) return match[i].str; sprintf(space, "0x%x", type); return space; } libwww/Library/src/HTEvent.html0100644000076400001440000002155406563457004016167 0ustar danielusers W3C Sample Code Library libwww Event Class

    The Event Class

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The Event Class defines any event manager to be used by libwww for handling events. An event is not strictly defined as it is highly platform dependent and hence out of scope for the Library. If you are using the libwww pseudo threads on Unix then an event is when the select() system call returns a notification on a socket descriptor, but it may as well be an asynchronous event from the windows manager etc. If your application is not using anything but traditional blocking sockets then you do not need an event manager at all. In that case, libwww will block on any socket or system call until the process can proceed.

    The libwww interface to an event manager is very simple as it consists of registering a socket descriptor, the location in the program, and the current state when an operation (for example read) would block. When the event manager at a later point in time gets a notification that the socket has become ready, it can then call libwww with the state saved from the registration and libwww can continue. Second, libwww must be able to unregister a socket when it is not anymore in a state where it can block. Only in case the application wishes to use non-blocking sockets it should register methods for handling the registration process as described below.

    Note: The library core does not define any event manager - it is considered part of the application. The library comes with a default event manager which can be initiated using the function HTEventInit() in HTInit module

    This module is implemented by HTEvent.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTEVENT_H
    #define HTEVENT_H
    #include "wwwsys.h"
    #ifdef IN_EVENT
    typedef struct _HTTimer HTTimer;
    #endif
    typedef enum _HTPriority {
        HT_PRIORITY_INV = -1,
        HT_PRIORITY_OFF = 0,
        HT_PRIORITY_MIN = 1,
        HT_PRIORITY_MAX = 20
    } HTPriority; 
    #define HTEVENT_INDEX 0x10
    typedef enum {
    #ifdef WWW_WIN_ASYNC
        HTEvent_READ    = (0x001 | 0 << HTEVENT_INDEX),
        HTEvent_WRITE   = (0x002 | 1 << HTEVENT_INDEX),
        HTEvent_OOB     = (0x004 | 2 << HTEVENT_INDEX),
        HTEvent_ACCEPT  = (0x008 | 3 << HTEVENT_INDEX),
        HTEvent_CONNECT = (0x010 | 4 << HTEVENT_INDEX),
        HTEvent_CLOSE   = (0x020 | 5 << HTEVENT_INDEX),
        HTEvent_TYPES   = 6,	/* winsock has seperate events for all of these */
    #define HTEVENT_TYPES	6 /* use in constructing the fake event below */
    #else /* WWW_WIN_ASYNC */
        HTEvent_READ    = (0x001 | 0 << HTEVENT_INDEX),
        HTEvent_ACCEPT  = (0x002 | 0 << HTEVENT_INDEX),
        HTEvent_CLOSE   = (0x004 | 0 << HTEVENT_INDEX),
        HTEvent_WRITE   = (0x008 | 1 << HTEVENT_INDEX),
        HTEvent_CONNECT = (0x010 | 1 << HTEVENT_INDEX),
        HTEvent_OOB     = (0x020 | 2 << HTEVENT_INDEX),
        HTEvent_TYPES   = 3,	/* only READ, WRITE, and OOB are real types */
    #define HTEVENT_TYPES	3 /* use in constructing the fake event below */
    #endif /* !WWW_WIN_ASYNC */
        /*
        **	fake events - these don't correspond to event manager events, but they
        **	are usefull for communicating with the protocol modules
        */
        HTEvent_TIMEOUT = (0x040 | HTEVENT_TYPES << HTEVENT_INDEX),
        HTEvent_BEGIN   = (0x000 | HTEVENT_TYPES << HTEVENT_INDEX),
        HTEvent_END     = (0x080 | HTEVENT_TYPES << HTEVENT_INDEX),
        HTEvent_FLUSH   = (0x100 | HTEVENT_TYPES << HTEVENT_INDEX),
        HTEvent_RESET   = (0x200 | HTEVENT_TYPES << HTEVENT_INDEX),
        HTEvent_ALL     = 0xFFFF
    } HTEventType;
    #define HTEvent_BITS(type) (type & 0xFFFF)
    #define HTEvent_INDEX(type) (type >> HTEVENT_INDEX)
    #define HT_EVENT_INITIALIZER \
        {HTEvent_READ, "HTEvent_READ"}, \
        {HTEvent_ACCEPT, "HTEvent_ACCEPT"}, \
        {HTEvent_CLOSE, "HTEvent_CLOSE"}, \
        {HTEvent_WRITE, "HTEvent_WRITE"}, \
        {HTEvent_CONNECT, "HTEvent_CONNECT"}, \
        {HTEvent_OOB, "HTEvent_OOB"}, \
        {HTEvent_TIMEOUT, "HTEvent_TIMEOUT"}, \
        {HTEvent_BEGIN, "HTEvent_BEGIN"}, \
        {HTEvent_END, "HTEvent_END"}, \
        {HTEvent_FLUSH, "HTEvent_FLUSH"}, \
        {HTEvent_RESET, "HTEvent_RESET"}
    extern char * HTEvent_type2str(HTEventType type);
    

    Event Handlers

    A location is a function that can be registered by the event manager and called at a later point in time in order to continue an operation. All locations must be of type  HTEventCallback as defined here:

    typedef int HTEventCallback (SOCKET, void *, HTEventType);
    typedef struct _HTEvent HTEvent;
    /* Avoid circular include for HTReq->HTNet->HTHost: HTEvent blah */
    #include "HTReq.h"
    

    There are many default event handlers provided with the Library. For example, all the protocol modules such as the HTTP client module are implemented as event handlers. In stead of using blocking sockets, this allows a protocol module to register itself when performing an operation that would block. When the sockets becomes ready the handler is called with th socket in question, the request object, and the socket operation  

    Registering and Unregistering Events

    As mentioned above, the only interface libwww requires from an event manager is a method to register an event when an operation would block and unregister it when the operation has completed The library registers and unregisters events by calling the following two functions:

    extern int HTEvent_register	(SOCKET, HTEventType, HTEvent *);
    extern int HTEvent_unregister	(SOCKET, HTEventType);
    

    The register function contains information about which socket we are waiting on to get ready and which operation we are waiting for (read, write, etc.), the request object containing the current request, the event handler that we want to be called when the socket becomes reasy, and finally the priority by which we want the thread to be processed by the event manager. Likewise, libwww can unregister a operation on a socket which means that libwww is no longer waiting for this actiion to become ready.

    Registering an Event Manager

    Libwww core does not contain any event manager as it depends on whether you want to use pseudo threads no threads, or real threads. Instead, libwww comes with a default implementation that you may register, but you may as well implement and register your own. The register and unregister functions above actually does nothing than looking for a registered event manager and then passes the call on to that. You register your own event manager by using the methods below:

    typedef int HTEvent_registerCallback(SOCKET, HTEventType, HTEvent *);
    typedef int HTEvent_unregisterCallback(SOCKET, HTEventType);
    extern void HTEvent_setRegisterCallback(HTEvent_registerCallback *);
    extern void HTEvent_setUnregisterCallback(HTEvent_unregisterCallback *);
    

    Has Register and Unregister Callbacks been setup?

    Replies YES if both an HTEvent_setRegisterCallback and HTEvent_setUnregisterCallback have been called with non NULL callbacks.

    extern BOOL HTEvent_isCallbacksRegistered(void);
    

    Create and Delete Events

    extern HTEvent * HTEvent_new (HTEventCallback * cbf, void * context,
    			      HTPriority pritority, int timeoutInMillis);
    extern BOOL HTEvent_delete (HTEvent * event);
    

    Event Timeouts, Priorities, Callbacks, and Contexts

    Normally, these are set when creating the event.

    extern BOOL HTEvent_setParam(HTEvent * event, void * param);
    extern BOOL HTEvent_setPriority(HTEvent * event, HTPriority priority);
    extern BOOL HTEvent_setTimeout(HTEvent * event, int timeoutInMillis);
    extern BOOL HTEvent_setCallback(HTEvent * event, HTEventCallback * cbf);
    

    The Raw Event Type

    Don't use this directly, use the methods above instead.

    struct _HTEvent {
        HTPriority		priority;	 /* Priority of this request (event) */
        int                 millis;              /* Timeout in ms for this event */
    #ifdef IN_EVENT
        HTTimer *		timer;
    #endif
        HTEventCallback *	cbf;			   /* Protocol state machine */
        void *		param;		       /* HTEvent_register parameter */
        HTRequest *		request;
    };
    

    You can register the event manager provided together with libwww by using the HTEventInit() in the HTInit module

    #endif /* HTEVENT_H */
    


    @(#) $Id: HTEvent.html,v 2.17 2025/08/10 02:42:12 frystyk Exp $
    libwww/Library/src/HTEvtLst.c0100644000076400001440000006767007141775017015616 0ustar danielusers/* HTEvtLst.c ** EVENT MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTEvtLst.c,v 2.45 2025/08/02 10:38:07 kahan Exp $ ** ** Updated HTEvent module ** This new module combines the functions of the old HTEvent module and ** the HTThread module. We retain the old HTThread module, but it ** consists of calls to the HTEvent interfaces ** ** Authors: ** HFN Henrik Frystyk ** CLB Charlie Brooks ** Bugs ** */ /* WSAAsyncSelect and windows app stuff need the following definitions: * WWW_WIN_ASYNC - enable WSAAsyncSelect instead of select * _WIN23 - win32 libararies - may be window or console app * _WINSOCKAPI_ - using WINSOCK.DLL - not necessarily the async routines. * _CONSOLE - the console app for NT * * first pass: EGP - 10/26/95 */ /* Implementation dependent include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTReqMan.h" #include "HTTimer.h" #include "HTEvent.h" #include "HTEvtLst.h" /* Implemented here */ /* Type definitions and global variables etc. local to this module */ #define MILLI_PER_SECOND 1000 #define HASH(s) ((s) % HT_M_HASH_SIZE) #define EVENTS_TO_EXECUTE 10 /* how many to execute in one select loop */ #define HT_FS_BYTES(a) ((((a)/16)+1) * 4) typedef struct { SOCKET s ; /* our socket */ HTEvent * events[HTEvent_TYPES]; /* event parameters for read, write, oob */ HTTimer * timeouts[HTEvent_TYPES]; } SockEvents; typedef struct { HTEvent * event; SOCKET s; HTEventType type; HTPriority skipped; } EventOrder; typedef enum { SockEvents_mayCreate, SockEvents_find } SockEvents_action; PRIVATE HTList * HashTable [HT_M_HASH_SIZE]; PRIVATE HTList * EventOrderList = NULL; PRIVATE int HTEndLoop = 0; /* If !0 then exit event loop */ PRIVATE BOOL HTInLoop = NO; #ifdef WWW_WIN_ASYNC #define TIMEOUT 1 /* WM_TIMER id */ PRIVATE HWND HTSocketWin; PRIVATE ATOM HTclass; PRIVATE HINSTANCE HTinstance; PRIVATE unsigned long HTwinMsg; #else /* WWW_WIN_ASYNC */ PRIVATE fd_set FdArray[HTEvent_TYPES]; PRIVATE SOCKET MaxSock = 0; /* max socket value in use */ #endif /* !WWW_WIN_ASYNC */ /* ------------------------------------------------------------------------- */ /* DEBUG FUNCTIONS */ /* ------------------------------------------------------------------------- */ #ifdef HTDEBUG PRIVATE void Event_trace (HTEvent * event) { if (event) { HTTRACE(ALL_TRACE, "%8p: %3d %6d %8p %8p %8p" _ event _ event->priority _ event->millis _ event->cbf _ event->param _ event->request); } } PRIVATE void Event_traceHead (void) { HTTRACE(ALL_TRACE, " event: pri millis callback param request "); } PRIVATE void Timer_trace (HTTimer * timer) { if (timer) { HTTRACE(ALL_TRACE, "%8p: %6d %ld %c %8p" _ timer _ HTTimer_expiresAbsolute(timer) _ HTTimer_expiresRelative(timer) _ HTTimer_isRelative(timer) ? 'R' : 'A' _ HTTimer_callback(timer)); } } PRIVATE void Timer_traceHead (void) { HTTRACE(ALL_TRACE, " timer: millis expires ? param callback "); } /* ** A simple debug function that dumps all the socket arrays ** as trace messages */ PRIVATE void EventList_dump (void) { int v = 0; HTList* cur; SockEvents * pres; HTTRACE(ALL_TRACE, "Event....... Dumping socket events\n"); HTTRACE(ALL_TRACE, "soc "); Event_traceHead(); HTTRACE(ALL_TRACE, " "); Timer_traceHead(); HTTRACE(ALL_TRACE, "\n"); for (v = 0; v < HT_M_HASH_SIZE; v++) { cur = HashTable[v]; while ((pres = (SockEvents *) HTList_nextObject(cur))) { int i; HTTRACE(ALL_TRACE, "%3d \n" _ pres->s); for (i = 0; i < HTEvent_TYPES; i++) if (pres->events[i]) { static char * names[HTEvent_TYPES] = {"read", "writ", "xcpt"}; HTTRACE(ALL_TRACE, "%s " _ names[i]); Event_trace(pres->events[i]); HTTRACE(ALL_TRACE, " "); Timer_trace(pres->timeouts[i]); HTTRACE(ALL_TRACE, " "); } HTTRACE(ALL_TRACE, "\n"); } } } PRIVATE void fd_dump (SOCKET maxfs, fd_set * rset, fd_set * wset, fd_set * oset, struct timeval * wt) { SOCKET cnt; /* Check read set */ HTTRACE(THD_TRACE, "............ READ :"); for (cnt=0; cnt<=maxfs; cnt++) if (FD_ISSET(cnt, rset)) HTTRACE(THD_TRACE, " %d" _ cnt); HTTRACE(THD_TRACE, "\n"); /* Check write set */ HTTRACE(THD_TRACE, "............ WRITE:"); for (cnt=0; cnt<=maxfs; cnt++) if (FD_ISSET(cnt, wset)) HTTRACE(THD_TRACE, " %d" _ cnt); HTTRACE(THD_TRACE, "\n"); /* Check oob set */ HTTRACE(THD_TRACE, "............ OOB :"); for (cnt=0; cnt<=maxfs; cnt++) if (FD_ISSET(cnt, oset)) HTTRACE(THD_TRACE, " %d" _ cnt); HTTRACE(THD_TRACE, "\n"); if (wt) HTTRACE(THD_TRACE, "............ Timeout is %ld s, %ld microsecs\n" _ wt->tv_sec _ wt->tv_usec); } #endif /* HTDEBUG */ /* ------------------------------------------------------------------------- */ /* EVENT TIMING FUNCTIONS */ /* ------------------------------------------------------------------------- */ #ifdef WWW_WIN_ASYNC PRIVATE BOOL Timer_setWindowsTimer (HTTimer * timer) { UINT id; HWND hwnd = HTEventList_getWinHandle(&id); BOOL status = (SetTimer(hwnd, (UINT)timer, (UINT)HTTimer_getTime(timer), NULL) == 0) ? NO : YES; return status; } PRIVATE BOOL Timer_deleteWindowsTimer (HTTimer * timer) { UINT id; HWND hwnd = HTEventList_getWinHandle(&id); BOOL status = (KillTimer(hwnd, (UINT)timer) == 0) ? NO : YES; return status; } #endif /* WWW_WIN_ASYNC */ /* ** Event timeout handler ** If an event didn't occur before the timeout then call it explicitly ** indicating that it timed out. */ PRIVATE int EventListTimerHandler (HTTimer * timer, void * param, HTEventType type) { SockEvents * sockp = (SockEvents *) param; HTEvent * event = NULL; /* Check for read timeout */ if (sockp->timeouts[HTEvent_INDEX(HTEvent_READ)] == timer) { event = sockp->events[HTEvent_INDEX(HTEvent_READ)]; HTTRACE(THD_TRACE, "Event....... READ timed out on %d.\n" _ sockp->s); return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT); } /* Check for write timeout */ if (sockp->timeouts[HTEvent_INDEX(HTEvent_WRITE)] == timer) { event = sockp->events[HTEvent_INDEX(HTEvent_WRITE)]; HTTRACE(THD_TRACE, "Event....... WRITE timed out on %d.\n" _ sockp->s); return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT); } /* Check for out-of-band data timeout */ if (sockp->timeouts[HTEvent_INDEX(HTEvent_OOB)] == timer) { event = sockp->events[HTEvent_INDEX(HTEvent_OOB)]; HTTRACE(THD_TRACE, "Event....... OOB timed out on %d.\n" _ sockp->s); return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT); } HTTRACE(THD_TRACE, "Event....... No event for timer %p with context %p\n" _ timer _ param); return HT_ERROR; } PUBLIC void CheckSockEvent (HTTimer * timer, HTTimerCallback * cbf, void * param) { SockEvents * sockp = (SockEvents *)param; if (cbf == EventListTimerHandler && sockp->timeouts[0] != timer && sockp->timeouts[1] != timer && sockp->timeouts[2] != timer) { HTDEBUGBREAK("Bad timer %p\n" _ timer); } } /* ------------------------------------------------------------------------- */ /* EVENT ORDERING STUFF */ /* ------------------------------------------------------------------------- */ PRIVATE SockEvents * SockEvents_get (SOCKET s, SockEvents_action action) { long v = HASH(s); HTList* cur; SockEvents * pres; /* if the socket doesn't exists, don't do anything */ if (s == INVSOC) return NULL; if (HashTable[v] == NULL) HashTable[v] = HTList_new(); cur = HashTable[v]; while ((pres = (SockEvents *) HTList_nextObject(cur))) if (pres->s == s) return pres; if (action == SockEvents_mayCreate) { if ((pres = (SockEvents *) HT_CALLOC(1, sizeof(SockEvents))) == NULL) HT_OUTOFMEM("HTEventList_register"); pres->s = s; HTList_addObject(HashTable[v], (void *)pres); return pres; } return NULL; } PRIVATE int EventOrder_add (SOCKET s, HTEventType type, ms_t now) { EventOrder * pres; HTList * cur = EventOrderList; HTList * insertAfter = cur; SockEvents * sockp = SockEvents_get(s, SockEvents_find); HTEvent * event; if (sockp == NULL || (event = sockp->events[HTEvent_INDEX(type)]) == NULL) { HTTRACE(THD_TRACE, "EventOrder.. no event found for socket %d, type %s.\n" _ s _ HTEvent_type2str(type)); return HT_ERROR; } /* Fixup the timeout */ if (sockp->timeouts[HTEvent_INDEX(type)]) HTTimer_refresh(sockp->timeouts[HTEvent_INDEX(type)], now); /* Look to see if it's already here from before */ while ((pres = (EventOrder *) HTList_nextObject(cur))) { if (pres->s == s && pres->event == event && pres->type == type) { pres->skipped++; return HT_OK; } if (pres->event->priority+pres->skipped > event->priority) insertAfter = cur; } /* Create a new element */ if ((pres = (EventOrder *) HT_CALLOC(1, sizeof(EventOrder))) == NULL) HT_OUTOFMEM("EventOrder_add"); pres->event = event; pres->s = s; pres->type = type; HTList_addObject(insertAfter, (void *)pres); return HT_OK; } PUBLIC int EventOrder_executeAndDelete (void) { HTList * cur = EventOrderList; EventOrder * pres; int i = 0; HTTRACE(THD_TRACE, "EventOrder.. execute ordered events\n"); if (cur == NULL) return NO; while ((pres=(EventOrder *) HTList_removeLastObject(cur)) && ievent; int ret; HTTRACE(THD_TRACE, "EventList... calling socket %d, request %p handler %p type %s\n" _ pres->s _ (void *) event->request _ (void *) event->cbf _ HTEvent_type2str(pres->type)); ret = (*pres->event->cbf)(pres->s, pres->event->param, pres->type); HT_FREE(pres); if (ret != HT_OK) return ret; i++; } return HT_OK; } PRIVATE BOOL EventOrder_clearAll (void) { HTList * cur = EventOrderList; EventOrder * pres; HTTRACE(THD_TRACE, "EventOrder.. Clearing all ordered events\n"); if (cur) { while ((pres = (EventOrder *) HTList_nextObject(cur))) HT_FREE(pres); return YES; } return NO; } PUBLIC BOOL EventOrder_deleteAll (void) { EventOrder_clearAll(); HTList_delete(EventOrderList); EventOrderList = NULL; return YES; } /* ------------------------------------------------------------------------- */ /* EVENT REGISTRATION */ /* ------------------------------------------------------------------------- */ /* ** ResetMaxSock - reset the value of the maximum socket in use */ #ifndef WWW_WIN_ASYNC PRIVATE void __ResetMaxSock (void) { SOCKET cnt; SOCKET t_max = 0; SOCKET old_max = MaxSock; for (cnt = 0 ; cnt <= MaxSock; cnt++) { if (FD_ISSET(cnt, (FdArray + HTEvent_INDEX(HTEvent_READ))) || FD_ISSET(cnt, (FdArray + HTEvent_INDEX(HTEvent_WRITE))) || FD_ISSET(cnt, (FdArray + HTEvent_INDEX(HTEvent_OOB)))) if (cnt > t_max) t_max = cnt; } MaxSock = t_max+1; HTTRACE(THD_TRACE, "Event....... Reset MaxSock from %u to %u\n" _ old_max _ MaxSock); return; } #endif /* !WWW_WIN_ASYNC */ PRIVATE int EventList_remaining (SockEvents * pres) { int ret = 0; int i; for (i = 0; i < HTEvent_TYPES; i++) if (pres->events[i] != NULL) ret |= 1<request _ (void *) event->cbf _ HTEvent_type2str(type) _ (unsigned) event->priority); if (s==INVSOC || HTEvent_INDEX(type) >= HTEvent_TYPES) return 0; /* ** Insert socket into appropriate file descriptor set. We also make sure ** that it is registered in the global set. */ HTTRACE(THD_TRACE, "Event....... Registering socket for %s\n" _ HTEvent_type2str(type)); sockp = SockEvents_get(s, SockEvents_mayCreate); sockp->s = s; sockp->events[HTEvent_INDEX(type)] = event; newset = EventList_remaining(sockp); #ifdef WWW_WIN_ASYNC if (WSAAsyncSelect(s, HTSocketWin, HTwinMsg, HTEvent_BITS(newset)) < 0) { HTTRACE(THD_TRACE, "Event....... WSAAsyncSelect returned `%s'!" _ HTErrnoString(socerrno)); return HT_ERROR; } #else /* WWW_WIN_ASYNC */ FD_SET(s, FdArray+HTEvent_INDEX(type)); HTTRACEDATA((char *) FdArray+HTEvent_INDEX(type), 8, "HTEventList_register: (s:%d)" _ s); if (s > MaxSock) { MaxSock = s ; HTTRACE(THD_TRACE, "Event....... New value for MaxSock is %d\n" _ MaxSock); } #endif /* !WWW_WIN_ASYNC */ /* ** If the timeout has been set (relative in millis) then we register ** a new timeout for this event unless we already have a timer. */ if (event->millis >= 0) { sockp->timeouts[HTEvent_INDEX(type)] = HTTimer_new(sockp->timeouts[HTEvent_INDEX(type)], EventListTimerHandler, sockp, event->millis, YES, YES); } return HT_OK; } /* ** Remove the registered information for the specified socket for the actions ** specified in ops. if no actions remain after the unregister, the registered ** info is deleted, and, if the socket has been registered for notification, ** the HTEventCallback will be invoked. */ PUBLIC int HTEventList_unregister (SOCKET s, HTEventType type) { long v = HASH(s); HTList * cur = HashTable[v]; HTList * last = cur; SockEvents * pres; int ret = HT_ERROR; /* if the socket doesn't exists, don't do anything */ if (s == INVSOC) return HT_OK; while (cur && (pres = (SockEvents *) HTList_nextObject(cur))) { if (pres->s == s) { int remaining = 0; /* ** Unregister the event from this action */ pres->events[HTEvent_INDEX(type)] = NULL; remaining = EventList_remaining(pres); /* ** Check to see of there was a timeout connected with the event. ** If so then delete the timeout as well. */ { HTTimer * timer = pres->timeouts[HTEvent_INDEX(type)]; if (timer) HTTimer_delete(timer); pres->timeouts[HTEvent_INDEX(type)] = NULL; } #ifdef WWW_WIN_ASYNC if (WSAAsyncSelect(s, HTSocketWin, HTwinMsg, remaining) < 0) ret = HT_ERROR; #else /* WWW_WIN_ASYNC */ FD_CLR(s, FdArray+HTEvent_INDEX(type)); HTTRACEDATA((char*)FdArray+HTEvent_INDEX(type), 8, "HTEventList_unregister: (s:%d)" _ s); #endif /* !WWW_WIN_ASYNC */ /* ** Check to see if we can delete the action completely. We do this ** if there are no more events registered. */ if (remaining == 0) { HTList * doomed = cur; HTTRACE(THD_TRACE, "Event....... No more events registered for socket %d\n" _ s); #ifndef WWW_WIN_ASYNC /* Check to see if we have to update MaxSock */ if (pres->s >= MaxSock) __ResetMaxSock(); #endif /* !WWW_WIN_ASYNC */ HT_FREE(pres); pres = (SockEvents *) HTList_nextObject(cur); HTList_quickRemoveElement(doomed, last); } ret = HT_OK; HTTRACE(THD_TRACE, "Event....... Socket %d unregistered for %s\n" _ s _ HTEvent_type2str(type)); /* We found the socket and can break */ break; } last = cur; } if (THD_TRACE) { if (ret == HT_ERROR) HTTRACE(THD_TRACE, "Event....... Couldn't find socket %d. Can't unregister type %s\n" _ s _ HTEvent_type2str(type)); } return ret; } /* ** Unregister all sockets ** N.B. we just remove them for our internal data structures: it is up to the ** application to actually close the socket. */ PUBLIC int HTEventList_unregisterAll (void) { int i; HTTRACE(THD_TRACE, "Unregister.. all sockets\n"); for (i = 0 ; i < HT_M_HASH_SIZE; i++) { HTList * cur = HashTable[i]; SockEvents * pres; while ((pres = (SockEvents *) HTList_nextObject(cur))) { #ifdef WWW_WIN_ASYNC WSAAsyncSelect(pres->s, HTSocketWin, HTwinMsg, 0); #endif /* WWW_WIN_ASYNC */ HT_FREE(pres); } HTList_delete(HashTable[i]); HashTable[i] = NULL; } #ifndef WWW_WIN_ASYNC MaxSock = 0 ; HTTRACE(THD_TRACE, "Event....... New value for MaxSock is %d\n" _ MaxSock); FD_ZERO(FdArray+HTEvent_INDEX(HTEvent_READ)); FD_ZERO(FdArray+HTEvent_INDEX(HTEvent_WRITE)); FD_ZERO(FdArray+HTEvent_INDEX(HTEvent_OOB)); #endif /* !WWW_WIN_ASYNC */ EventOrder_deleteAll(); return 0; } /* ** Dispatch the event to the appropriate event handler. ** If no event handler is found then just return. */ PUBLIC int HTEventList_dispatch (SOCKET s, HTEventType type, ms_t now) { SockEvents * sockp = SockEvents_get(s, SockEvents_find); if (sockp) { HTEvent * event = sockp->events[HTEvent_INDEX(type)]; /* Fixup the timeout */ if (sockp->timeouts[HTEvent_INDEX(type)]) HTTimer_refresh(sockp->timeouts[HTEvent_INDEX(type)], now); /* ** If we have found an event object for this event then see ** is we should call it. */ if (event && event->priority!=HT_PRIORITY_OFF) return (*event->cbf) (s, event->param, type); HTTRACE(THD_TRACE, "Dispatch.... Handler %p NOT called\n" _ sockp); return HT_OK; } HTTRACE(THD_TRACE, "Dispatch.... Bad socket %d\n" _ s); return NO; } PUBLIC HTEvent * HTEventList_lookup (SOCKET s, HTEventType type) { SockEvents * sockp = NULL; if ((sockp = SockEvents_get(s, SockEvents_find)) == NULL) return NULL; return sockp->events[HTEvent_INDEX(type)]; } /* ------------------------------------------------------------------------- */ /* THE EVENT LOOP */ /* ------------------------------------------------------------------------- */ /* ** Start eventloop */ PUBLIC int HTEventList_newLoop (void) { return HTEventList_loop (NULL); } /* ** Stops the event loop. The function does not guarantee ** that all requests have terminated. This is for the app to do */ PUBLIC void HTEventList_stopLoop (void) { HTEndLoop = 1; } /* ** There are now two versions of the event loop. The first is if you want ** to use async I/O on windows, and the other is if you want to use normal ** Unix setup with sockets */ PUBLIC int HTEventList_loop (HTRequest * theRequest) { #ifdef WWW_WIN_ASYNC MSG msg; int status; while (!HTEndLoop && GetMessage(&msg,0,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } status = HTEndLoop; /* Reset HTEndLoop in case we want to start again */ HTEndLoop = 0; return (status == 1 ? HT_OK : HT_ERROR); #else /* WWW_WIN_ASYNC */ fd_set treadset, twriteset, texceptset; struct timeval waittime, * wt; int active_sockets; int maxfds; ms_t timeout; ms_t now; SOCKET s; int status = HT_OK; /* Check that we don't have multiple loops started at once */ if (HTInLoop) { HTTRACE(THD_TRACE, "Event Loop.. Already one loop running - exiting\n"); return HT_ERROR; } HTInLoop = YES; /* Set up list of events - is kept around until EventOrder_deleteAll */ if (!EventOrderList) EventOrderList = HTList_new(); else EventOrder_clearAll(); /* Don't leave this loop until we leave the application */ while (!HTEndLoop) { /* ** Timeval struct copy needed for linux, as it set the value to the ** remaining timeout while exiting the select. (and perhaps for ** other OS). Code borrowed from X server. */ wt = NULL; if ((status = HTTimer_next(&timeout))) break; if (timeout != 0) { waittime.tv_sec = timeout / MILLI_PER_SECOND; waittime.tv_usec = (timeout % MILLI_PER_SECOND) * (1000000 / MILLI_PER_SECOND); wt = &waittime; } /* ** Check whether we still have to continue the event loop. It could ** be that one of the timer handlers ended the loop. */ if (HTEndLoop) break; /* ** Now we copy the current active file descriptors to pass them to select. */ treadset = FdArray[HTEvent_INDEX(HTEvent_READ)]; twriteset = FdArray[HTEvent_INDEX(HTEvent_WRITE)]; texceptset = FdArray[HTEvent_INDEX(HTEvent_OOB)]; /* And also get the max socket value */ maxfds = MaxSock; HTTRACE(THD_TRACE, "Event Loop.. calling select: maxfds is %d\n" _ maxfds); #ifdef HTDEBUG fd_dump(maxfds, &treadset, &twriteset, &texceptset, wt); #endif #ifdef __hpux active_sockets = select(maxfds+1, (int *)&treadset, (int *)&twriteset, (int *)&texceptset, wt); #elif defined(_WINSOCKAPI_) /* * yovavm@contact.com * * On some WINSOCK versions select() with 3 empty sets and NULL timeout * returns 0 and in some it returns -1. * If 0 is returned in such situation, we will go into an infinite loop * (cause the sets will stay empty forever ...), * so make sure to set the active_sockets = -1 which will take us out * of the loop. */ if ((treadset.fd_count || twriteset.fd_count || texceptset.fd_count) && wt) active_sockets = select(maxfds+1, &treadset, &twriteset, &texceptset, wt); else active_sockets = -1; #else active_sockets = select(maxfds+1, &treadset, &twriteset, &texceptset, wt); #endif now = HTGetTimeInMillis(); HTTRACE(THD_TRACE, "Event Loop.. select returns %d\n" _ active_sockets); #ifdef HTDEBUG fd_dump(maxfds, &treadset, &twriteset, &texceptset, wt); #endif if (active_sockets == -1) { #ifdef EINTR if (socerrno == EINTR) { /* ** EINTR The select() function was interrupted before any ** of the selected events occurred and before the ** timeout interval expired. ** ** If SA_RESTART has been set for the interrupting ** signal, it is implementation-dependent whether ** select() restarts or returns with EINTR. */ HTTRACE(THD_TRACE, "Event Loop.. select was interruted - try again\n"); continue; } #endif /* EINTR */ #ifdef EBADF if (socerrno == EBADF) { /* ** EBADF One or more of the file descriptor sets specified ** a file descriptor that is not a valid open file ** descriptor. */ HTTRACE(THD_TRACE, "Event Loop.. One or more sockets were not through their connect phase - try again\n"); continue; } #endif HTTRACE(THD_TRACE, "Event Loop.. select returned error %d\n" _ socerrno); #ifdef HTDEBUG EventList_dump(); #endif /* HTDEBUG */ status = HT_ERROR; break; } /* ** We had a timeout so now we check and see if we have a timeout ** handler to call. Let HTTimer_next get it. */ if (active_sockets == 0) continue; /* There were active sockets. Determine which fd sets they were in */ for (s = 0 ; s <= maxfds ; s++) { if (FD_ISSET(s, &texceptset)) if ((status = EventOrder_add(s, HTEvent_OOB, now)) != HT_OK) goto stop_loop; if (FD_ISSET(s, &twriteset)) if ((status = EventOrder_add(s, HTEvent_WRITE, now)) != HT_OK) goto stop_loop; if (FD_ISSET(s, &treadset)) if ((status = EventOrder_add(s, HTEvent_READ, now)) != HT_OK) goto stop_loop; } if ((status = EventOrder_executeAndDelete()) != HT_OK) break; }; /* Reset HTEndLoop in case we want to start again */ stop_loop: HTEndLoop = 0; HTInLoop = NO; return status; #endif /* !WWW_WIN_ASYNC */ } /* ------------------------------------------------------------------------- */ /* EVENT INITIALIZATION AND TERMINATION */ /* ------------------------------------------------------------------------- */ #ifdef WWW_WIN_ASYNC /* Only responsible for WM_TIMER and WSA_AsyncSelect */ PRIVATE LRESULT CALLBACK AsyncWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { WORD event; SOCKET sock; HTEventType type; ms_t now = HTGetTimeInMillis(); /* timeout stuff */ if (uMsg == WM_TIMER) { HTTimer_dispatch((HTTimer *)wParam); return (0); } if (uMsg != HTwinMsg) /* not our async message */ return (DefWindowProc(hwnd, uMsg, wParam, lParam)); event = LOWORD(lParam); sock = (SOCKET)wParam; switch (event) { case FD_READ: type = HTEvent_READ; break; case FD_WRITE: type = HTEvent_WRITE; break; case FD_ACCEPT: type = HTEvent_ACCEPT; break; case FD_CONNECT: type = HTEvent_CONNECT; break; case FD_OOB: type = HTEvent_OOB; break; /* JK: was returning HTEvent_CLOSE before, and this was a source of errors, as libwww detects the socket shutdown with a call to recv */ case FD_CLOSE: type = HTEvent_READ; break; default: HTDEBUGBREAK("Unknown event %d\n" _ event); } if (HTEventList_dispatch((int)sock, type, now) != HT_OK) HTEndLoop = -1; return (0); } /* HTEventList_get/setWinHandle ** -------------------------- ** Managing the windows handle on Windows */ PUBLIC BOOL HTEventList_setWinHandle (HWND window, unsigned long message) { HTSocketWin = window; HTwinMsg = message; return YES; } PUBLIC HWND HTEventList_getWinHandle (unsigned long * pMessage) { if (pMessage) *pMessage = HTwinMsg; return (HTSocketWin); } #endif /* WWW_WIN_ASYNC */ PUBLIC BOOL HTEventInit (void) { #ifdef WWW_WIN_ASYNC /* ** We are here starting a hidden window to take care of events from ** the async select() call in the async version of the event loop in ** the Internal event manager (HTEvtLst.c) */ static char className[] = "AsyncWindowClass"; WNDCLASS wc; OSVERSIONINFO osInfo; wc.style=0; wc.lpfnWndProc=(WNDPROC)AsyncWindowProc; wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hIcon=0; wc.hCursor=0; wc.hbrBackground=0; wc.lpszMenuName=(LPSTR)0; wc.lpszClassName=className; osInfo.dwOSVersionInfoSize = sizeof(osInfo); GetVersionEx(&osInfo); /* According to Gary Johnson, GetModuleHandle() works for NT as well */ #if 0 if (osInfo.dwPlatformId == VER_PLATFORM_WIN32s || osInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) wc.hInstance=GetModuleHandle(NULL); /* 95 and non threaded platforms */ else wc.hInstance=GetCurrentProcess(); /* NT and hopefully everything following */ #else wc.hInstance=GetModuleHandle(NULL); /* Should work on all win32 stuff */ #endif HTinstance = wc.hInstance; HTclass = RegisterClass(&wc); if (!HTclass) { HTTRACE(THD_TRACE, "HTLibInit.. Can't RegisterClass \"%s\"\n" _ className); return NO; } if (!(HTSocketWin = CreateWindow(className, "WWW_WIN_ASYNC", WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, wc.hInstance,0))) { #ifdef HTDEBUG char space[50]; HTTRACE(THD_TRACE, "HTLibInit.. Can't Create Window \"WWW_WIN_ASYNC\" - error:"); sprintf(space, "%ld\n", GetLastError()); HTTRACE(THD_TRACE, space); #endif /* HTDEBUG */ return NO; } HTwinMsg = WM_USER; /* use first available message since app uses none */ /* Register platform specific timer handlers for windows */ HTTimer_registerSetTimerCallback(Timer_setWindowsTimer); HTTimer_registerDeleteTimerCallback(Timer_deleteWindowsTimer); #endif /* WWW_WIN_ASYNC */ #ifdef _WINSOCKAPI_ /* ** Initialise WinSock DLL. This must also be shut down! PMH */ { WSADATA wsadata; if (WSAStartup(DESIRED_WINSOCK_VERSION, &wsadata)) { HTTRACE(THD_TRACE, "HTEventInit. Can't initialize WinSoc\n"); WSACleanup(); return NO; } if (wsadata.wVersion < MINIMUM_WINSOCK_VERSION) { HTTRACE(THD_TRACE, "HTEventInit. Bad version of WinSoc\n"); WSACleanup(); return NO; } HTTRACE(APP_TRACE, "HTEventInit. Using WinSoc version \"%s\".\n" _ wsadata.szDescription); } #endif /* _WINSOCKAPI_ */ HTEvent_setRegisterCallback(HTEventList_register); HTEvent_setUnregisterCallback(HTEventList_unregister); return YES; } PUBLIC BOOL HTEventTerminate (void) { #ifdef _WINSOCKAPI_ WSACleanup(); #endif /* _WINSOCKAPI_ */ #ifdef WWW_WIN_ASYNC DestroyWindow(HTSocketWin); UnregisterClass((LPCTSTR)HTclass, HTinstance); #endif /* WWW_WIN_ASYNC */ return YES; } libwww/Library/src/HTEvtLst.html0100644000076400001440000001140406625424432016316 0ustar danielusers W3C Sample Code Library libwww Default Event Manager

    Default Event Manager

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module provides a default event registry and an eventloop which may be used by an application if desired. See also the libwww timers defined in the HTTimer module. An application may use this module for:

    This module is implemented by HTEvtLst.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTEVTLST_H
    #define HTEVTLST_H
    #include "wwwsys.h"
    #include "HTEvent.h"
    #include "HTReq.h"
    

    Windows Specific Handles

    #if defined(WWW_WIN_ASYNC) || defined(WWW_WIN_DLL)
    extern BOOL HTEventList_winHandle (HTRequest * request);
    extern BOOL HTEventList_setWinHandle (HWND window, unsigned long message);
    extern HWND HTEventList_getWinHandle (unsigned long * pMessage);
    extern LRESULT CALLBACK AsyncWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    #endif
    

    Event Registry

    The libwww event registry binds a socket and operation (FD_READ, FD_WRITE, ...) to a callback function. Events are registered, unregistered, and dispatched as they come in.

    Register an Event Handler

    For a given socket, reqister a request structure, a set of operations, a HTEventCallback function, and a priority. For this implementation, we allow only a single HTEventCallback function for all operations. and the priority field is ignored.

    extern HTEvent_registerCallback HTEventList_register;
    

    Unregister an Event Handler

    Remove the registered information for the specified socket for the actions specified in ops. if no actions remain after the unregister, the registered info is deleted, and, if the socket has been registered for notification, the HTEventCallback will be invoked.

    extern HTEvent_unregisterCallback HTEventList_unregister;
    

    Unregister ALL Event Handlers

    Unregister all sockets. N.B. we just remove them for our internal data structures: it is up to the application to actually close the socket.

    extern int HTEventList_unregisterAll (void);
    

    Lookup and Dispatch Event Handlers

    Callbacks can be looked up or dispatched based on the socket and operation (read/write/oob)

    extern int HTEventList_dispatch (SOCKET s, HTEventType type, ms_t now);
    extern HTEvent * HTEventList_lookup (SOCKET s, HTEventType type);
    

    Libwww Default EventLoop

    The libwww default eventloop dispatches events to the event registry.

    Start and Stop the Event Manager

    extern BOOL HTEventInit (void);
    extern BOOL HTEventTerminate (void);
    

    Start the Eventloop

    That is, we wait for activity from one of our registered channels, and dispatch on that. Under Windows/NT, we must treat the console and sockets as distinct. That means we can't avoid a busy wait, but we do our best.

    extern int HTEventList_newLoop (void);
    

    The next version is an old version of the eventloop start. The request is not used for anything and can be NULL.

    extern int HTEventList_loop (HTRequest * request);
    

    Stop the Eventloop

    Stops the (select based) eventloop immediately. The function does not guarantee that all requests have terminated so it is important that the application does this before this function is called. This can be done using the HTNet_isIdle() function in the HTNet Module

    extern void HTEventList_stopLoop (void);
    
    #endif /* HTEVTLST_H */
    


    @(#) $Id: HTEvtLst.html,v 2.7 2025/11/21 02:44:42 frystyk Exp $
    libwww/Library/src/HTFSave.c0100644000076400001440000002235606721573044015370 0ustar danielusers/* ** VARIOUS FILE WRITER STREAMS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTFSave.c,v 2.4 2025/05/22 18:23:32 frystyk Exp $ ** ** This version of the stream object just writes to a C file. ** The file is assumed open and left open. ** ** Bugs: ** strings written must be less than buffer size. ** ** History: ** HFN: wrote it ** HWL: converted the caching scheme to be hierachical by taking ** AL code from Deamon ** HFN: moved cache code to HTCache module ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTBind.h" #include "HTFWrite.h" #include "HTFSave.h" /* Implemented here */ struct _HTStream { const HTStreamClass *isa; HTStream * target; char * end_command; /* Command to execute */ BOOL remove_on_close; /* Remove file? */ char * filename; /* Name of file */ HTRequest * request; /* Saved for callback */ HTRequestCallback * callback; }; #define DEFAULT_LAST_SEGMENT "index" /* ------------------------------------------------------------------------- */ PRIVATE int HTFileSave_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int HTFileSave_put_character (HTStream * me, char c) { return (*me->target->isa->put_character)(me->target, c); } PRIVATE int HTFileSave_put_string (HTStream * me, const char * s) { return (*me->target->isa->put_string)(me->target, s); } PRIVATE int HTFileSave_write (HTStream * me, const char * b, int l) { return (*me->target->isa->put_block)(me->target, b, l); } PRIVATE int HTFileSave_free (HTStream * me) { if (me) { (*me->target->isa->_free)(me->target); #ifdef HAVE_SYSTEM if (me->end_command) system(me->end_command); /* SECURITY HOLE!!! */ #endif if (me->callback) (*me->callback)(me->request, me->filename); if (me->remove_on_close) REMOVE(me->filename); HT_FREE(me->end_command); HT_FREE(me->filename); HT_FREE(me); } return HT_OK; } PRIVATE int HTFileSave_abort (HTStream * me, HTList * e) { HTTRACE(STREAM_TRACE, "Save File.. ABORTING...\n"); if (me) { (*me->target->isa->abort)(me->target, e); if (me->remove_on_close) REMOVE(me->filename); HT_FREE(me->end_command); HT_FREE(me->filename); HT_FREE(me); } return HT_ERROR; } PRIVATE const HTStreamClass HTFileSave = { "FileSave", HTFileSave_flush, HTFileSave_free, HTFileSave_abort, HTFileSave_put_character, HTFileSave_put_string, HTFileSave_write }; PUBLIC HTStream * HTFileSave_new (HTRequest * request, FILE * fp, BOOL leave_open) { HTStream * me = NULL; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTFileSave_new"); me->isa = &HTFileSave; me->target = HTFWriter_new(request, fp, leave_open); me->request = request; return me; } /* ------------------------------------------------------------------------- */ /* ** This function tries really hard to find a non-existent filename relative ** to the path given. Returns a string that must be freed by the caller or ** NULL on error. */ PRIVATE char * get_filename (char * base, const char * uri, const char * suffix, BOOL use_last_segment) { char * path = NULL; if (use_last_segment) { char * uri_path = NULL; if (uri && (uri_path = HTParse(uri, "", PARSE_PATH|PARSE_PUNCTUATION))) { char * last_segment = strrchr(uri_path, '/'); BOOL slash = (base && *(base+strlen(base)-1)==DIR_SEPARATOR_CHAR); if (last_segment && *(last_segment+1)) { StrAllocMCopy(&path, base ? base : "", slash ? "" : DIR_SEPARATOR_STR, ++last_segment, NULL); } else { StrAllocMCopy(&path, base ? base : "", slash ? "" : DIR_SEPARATOR_STR, DEFAULT_LAST_SEGMENT, suffix ? suffix : "", NULL); } } } else { path = HTGetTmpFileName(base); if (path && suffix) StrAllocCat(path, suffix); } HTTRACE(STREAM_TRACE, "Save file... Temporaray file `%s\'\n" _ path ? path : ""); return path; } /* Save Locally ** ------------ ** Saves a file to local disk. This can for example be used to dump ** data objects of unknown media types to local disk. The stream prompts ** for a file name for the temporary file. */ PUBLIC HTStream* HTSaveLocally (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { FILE * fp = NULL; char * filename = NULL; HTUserProfile * up = HTRequest_userProfile(request); char * tmproot = HTUserProfile_tmp(up); if (HTLib_secure()) { HTRequest_addError(request, ERR_NON_FATAL, NO, HTERR_UNAUTHORIZED, NULL, 0, "HTSaveLocally"); return HTErrorStream(); } if (!tmproot) { HTTRACE(STREAM_TRACE, "Save File... turned off\n"); return HTErrorStream(); } /* Let's prompt the user for a file name for this file */ { HTAlertCallback *cbf = HTAlert_find(HT_A_PROMPT); HTParentAnchor *anchor = (HTParentAnchor *) HTRequest_anchor(request); /* ** If we found an alert handler for prompting the user then call it. ** If not then either we are in non-interactive mode or no handler ** has been registered. For now we then return a blackhole which may ** not be the best thing to do. */ if (cbf) { HTAlertPar * reply = HTAlert_newReply(); char * suffix = HTBind_getSuffix(anchor); char * deflt = get_filename(tmproot, HTAnchor_physical(anchor), suffix, YES); if ((*cbf)(request, HT_A_PROMPT, HT_MSG_FILENAME,deflt,NULL,reply)) filename = HTAlert_replyMessage(reply); HTAlert_deleteReply(reply); HT_FREE(suffix); HT_FREE(deflt); } if (filename) { if ((fp = fopen(filename, "wb")) == NULL) { HTRequest_addError(request, ERR_NON_FATAL, NO, HTERR_NO_FILE, filename, strlen(filename),"HTSaveLocally"); HT_FREE(filename); return HTErrorStream(); } } else if (cbf) { HTTRACE(STREAM_TRACE, "Save File... No file name - error stream\n"); return HTErrorStream(); } else { HTTRACE(STREAM_TRACE, "Save File... No file name - black hole\n"); return HTBlackHole(); } } /* Now we are ready for creating the file writer stream */ if (fp) { HTStream * me = HTFileSave_new(request, fp, NO); me->filename = filename; return me; } HT_FREE(filename); return HTErrorStream(); } /* Take action using a system command ** ---------------------------------- ** Creates temporary file, writes to it and then executes system ** command (maybe an external viewer) when EOF has been reached. The ** stream finds a suitable name of the temporary file which preserves the ** suffix. This way, the system command can find out the file type from ** the name of the temporary file name. */ PUBLIC HTStream* HTSaveAndExecute (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { FILE * fp = NULL; char * filename = NULL; HTUserProfile * up = HTRequest_userProfile(request); char * tmproot = HTUserProfile_tmp(up); if (HTLib_secure()) { HTRequest_addError(request, ERR_NON_FATAL, NO, HTERR_UNAUTHORIZED, NULL, 0, "HTSaveLocally"); return HTErrorStream(); } if (!tmproot) { HTTRACE(STREAM_TRACE, "Save File... turned off"); return HTErrorStream(); } /* Let's find a hash name for this file without asking user */ { HTParentAnchor *anchor = (HTParentAnchor *) HTRequest_anchor(request); char *suffix = HTBind_getSuffix(anchor); filename = get_filename(tmproot, HTAnchor_physical(anchor), suffix, NO); HT_FREE(suffix); if (filename) { if ((fp = fopen(filename, "wb")) == NULL) { HTRequest_addError(request, ERR_NON_FATAL, NO, HTERR_NO_FILE, filename, strlen(filename),"HTSaveAndExecute"); HT_FREE(filename); return HTErrorStream(); } } else { HTTRACE(STREAM_TRACE, "Save File... No file name\n"); return HTErrorStream(); } } /* Now we are ready for creating the file writer stream */ if (fp) { HTStream * me = HTFileSave_new(request, fp, NO); me->filename = filename; if (param) { if ((me->end_command = (char *) HT_MALLOC((strlen((char *) param) + 10 + 3*strlen(filename)))) == NULL) HT_OUTOFMEM("SaveAndExecute"); sprintf (me->end_command, (char *)param, filename, filename, filename); } return me; } HT_FREE(filename); return HTErrorStream(); } /* Save and Call Back ** ------------------ ** This stream works exactly like the HTSaveAndExecute ** stream but in addition when EOF has been reached, it checks whether a ** callback function has been associated with the request object in which ** case, this callback is being called. This can be use by the ** application to do some processing after the system command ** has terminated. The callback function is called with the file name of ** the temporary file as parameter. */ PUBLIC HTStream* HTSaveAndCallback (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = HTSaveAndExecute(request, param, input_format, output_format, output_stream); if (me) { me->callback = HTRequest_callback(request); return me; } return HTErrorStream(); } libwww/Library/src/HTFSave.html0100644000076400001440000000451106657355317016114 0ustar danielusers W3C Sample Code Library libwww ANSI C File Streams

    Basic ANSI C File Writer Stream

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module contains some local file writer streams based on the basic file writer stream defined in the HTFWrite module. They can be used to do save-as, save-and-callback etc.

    This module is implemented by HTFSave.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTFSAVE_H
    #define HTFSAVE_H
    #include "HTFWrite.h"
    

    Various Converters using the File Writer Stream

    This is a set of functions that can be registered as converters. They all use the basic ANSI C file writer stream for writing out to the local file system.

    extern HTConverter HTSaveAndExecute, HTSaveLocally, HTSaveAndCallback;
    

    HTSaveLocally
    Saves a file to local disk. This can for example be used to dump date objects of unknown media types to local disk. The stream prompts for a file name for the temporary file.
    HTSaveAndExecute
    Creates temporary file, writes to it and then executes system command (maybe an external viewer) when EOF has been reached. The stream finds a suitable name of the temporary file which preserves the suffix. This way, the system command can find out the file type from the name of the temporary file name.
    HTSaveAndCallback
    This stream works exactly like the HTSaveAndExecute stream but in addition when EOF has been reached, it checks whether a callback function has been associated with the request object in which case, this callback is being called. This can be use by the application to do some processing after the system command has terminated. The callback function is called with the file name of the temporary file as parameter.
    #endif
    


    @(#) $Id: HTFSave.html,v 2.1 2025/02/07 18:26:23 frystyk Exp $
    libwww/Library/src/HTFTP.c0100644000076400001440000014013207144232674015007 0ustar danielusers/* HTFTP.c ** FILE TRANSFER PROTOCOL (FTP) CLIENT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTFTP.c,v 1.109 2025/08/09 10:43:08 kahan Exp $ ** ** A cache of control connections is kept. ** ** Note: Port allocation (not used anymore) ** ** It is essential that the port is allocated by the system, rather ** than chosen in rotation by us (FTP_POLL_PORTS), or the following ** problem occurs. ** ** It seems that an attempt by the server to connect to a port which has ** been used recently by a listen on the same socket, or by another ** socket this or another process causes a hangup of (almost exactly) ** one minute. Therefore, we have to use a rotating port number. ** The problem remains that if the application is run twice in quick ** succession, it will hang for what remains of a minute. ** ** Authors ** TBL Tim Berners-lee ** DD Denis DeLaRoca 310 825-4580 ** LM Lou Montulli ** FM Foteos Macrides ** HF Henrik Frystyk ** AL Ari Luotonen ** ** History: ** 2 May 91 Written TBL, as a part of the WorldWideWeb project. ** 15 Jan 92 Bug fix: close() was used for NETCLOSE for control soc ** 10 Feb 92 Retry if cached connection times out or breaks ** 8 Dec 92 Bug fix 921208 TBL after DD ** 17 Dec 92 Anon FTP password now just WWWuser@ suggested by DD ** fails on princeton.edu! ** 27 Dec 93 (FM) Fixed up so FTP now works with VMS hosts. Path ** must be Unix-style and cannot include the device ** or top directory. ** ?? ??? ?? (LM) Added code to prompt and send passwords for non ** anonymous FTP ** 25 Mar 94 (LM) Added code to recognize different ftp server types ** and code to parse dates and sizes on most hosts. ** 27 Mar 93 (FM) Added code for getting dates and sizes on VMS hosts. ** 27 Apr 94 (HF) The module is basically rewritten to conform with ** rfc 959, 1123 and 1579 and turned into a state ** machine. New semantics of ftp URLs are supported. ** 2 May 94 (AL) Fixed possible security hole when the URL contains ** a newline, that could cause multiple commands to be ** sent to an FTP server. ** Sep 95 HFN Rewritten to support streams and persistent conenctions ** and multiplexed IO ** Mar 1998 NG Neil Griffin - Bug fixes and additions for FTP support on NT. ** Jan 2000 JB Joe Bester - Fixed the protocol bug that appeared after ** after the CERT advisory warning on wu. Added code ** to do an incremental streaming of FTP data. ** ** Notes: ** Portions Copyright 1994 Trustees of Dartmouth College ** Code for recognizing different FTP servers and ** parsing "ls -l" output taken from Macintosh Fetch ** program with permission from Jim Matthews, ** Dartmouth Software Development Team. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWStream.h" #include "WWWTrans.h" #include "WWWFile.h" #include "HTReqMan.h" #include "HTNetMan.h" #include "HTFTPDir.h" #include "HTFTP.h" /* Implemented here */ #ifndef FTP_PORT #define FTP_PORT 21 #define FTP_DATA 20 #endif #define WWW_FTP_CLIENT "libwww@" /* If can't get user-info, use this */ #define FTP_DIR(me) ((me)->type=='L' || (me)->type=='N') /* ** Local context structure used in the HTNet object. */ typedef enum _HTFTPState { FTP_SUCCESS = -2, FTP_ERROR = -1, FTP_BEGIN = 0, FTP_NEED_CCON, /* Control connection */ FTP_NEED_LOGIN, FTP_NEED_DCON, /* Data connection */ FTP_NEED_DATA, FTP_NEED_SERVER /* For directory listings */ } HTFTPState; typedef struct _ftp_ctrl { HTChunk * cmd; int repcode; char * reply; char * uid; char * passwd; char * account; HTFTPState state; /* State of the connection */ int substate; /* For hierarchical states */ BOOL sent; /* Read or write command */ BOOL cwd; /* Done cwd */ BOOL reset; /* Expect greeting */ FTPServerType server; /* Type of server */ HTNet * cnet; /* Control connection */ HTNet * dnet; /* Data connection */ BOOL alreadyLoggedIn; } ftp_ctrl; typedef struct _ftp_data { char host[30]; /* Host to contact for data */ char * file; /* File or dir name */ char * offset; /* offset into file */ BOOL pasv; /* Active or passive */ char type; /* 'A', 'I', 'L'(IST), 'N'(LST) */ int complete; /* Check if both ctrl and data is loaded */ BOOL stream_error; } ftp_data; struct _HTStream { const HTStreamClass * isa; HTStream * target; HTRequest * request; ftp_ctrl * ctrl; HTEOLState state; HTChunk * welcome; BOOL junk; /* For too long lines */ BOOL first_line; char buffer[MAX_FTP_LINE+1]; int buflen; HTHost * host; }; struct _HTInputStream { const HTInputStreamClass * isa; }; /* Determine whether we should use passive or active data TCP connections */ typedef enum _FTPDataCon { FTP_DATA_PASV = 0x1, FTP_DATA_PORT = 0x2 } FTPDataCon; PRIVATE FTPDataCon FTPMode = FTP_DATA_PORT; /* Added by Neil Griffin */ PRIVATE FTPTransferMode g_FTPTransferMode = FTP_DEFAULT_TRANSFER_MODE; PRIVATE FTPControlMode g_FTPControlMode = FTP_DEFAULT_CONTROL_MODE; /* ------------------------------------------------------------------------- */ /* FTP Status Line Stream */ /* ------------------------------------------------------------------------- */ /* FTPCleanup ** ---------- ** This function closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE int FTPCleanup (HTRequest * request, int status) { if (request) { HTNet * cnet = HTRequest_net(request); ftp_ctrl * ctrl = (ftp_ctrl *) HTNet_context(cnet); HTStream * input = HTRequest_inputStream(request); if (status == HT_INTERRUPTED) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_INTERRUPT); if (cbf) (*cbf)(request, HT_PROG_INTERRUPT, HT_MSG_NULL, NULL, NULL, NULL); } else if (status == HT_TIMEOUT) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_TIMEOUT); if (cbf) (*cbf)(request, HT_PROG_TIMEOUT, HT_MSG_NULL, NULL, NULL, NULL); } else if (status == HT_LOADED) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_DONE); if (cbf) (*cbf)(request, HT_PROG_DONE, HT_MSG_NULL, NULL, NULL, NULL); } /* Free control stream with data TO network */ if (!HTRequest_isDestination(request) && input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); } /* Remove the request object and our own context structure for ftp */ if (cnet && ctrl) { HTNet * dnet = ctrl->dnet; ftp_data * data = (ftp_data *) HTNet_context(dnet); HTChunk_delete(ctrl->cmd); HT_FREE(ctrl->reply); HT_FREE(ctrl->uid); HT_FREE(ctrl->passwd); HT_FREE(ctrl->account); HT_FREE(ctrl); if (dnet && data) { HT_FREE(data->file); HT_FREE(data); } /* See if we got a content length */ if (status == HT_LOADED) HTAnchor_setLength(HTRequest_anchor(request), HTNet_bytesRead(dnet)); /* Delete the data net object */ HTChannel_deleteInput(HTNet_channel(dnet), status); HTChannel_deleteOutput(HTNet_channel(dnet), status); HTNet_delete(dnet, HT_IGNORE); } HTNet_delete(cnet, status); return YES; } return NO; } /* ScanResponse ** ------------ ** Analyzes the response from the FTP server. ** Returns HT_LOADED if OK, HT_OK if more, HT_ERROR if error ** the control connection. */ PRIVATE int ScanResponse (HTStream * me) { int reply = 0; char cont = '\0'; char *ptr = me->buffer+4; *(me->buffer+me->buflen) = '\0'; /* begin _GM_ */ /* Note: libwww bug ID: GM3 */ me->ctrl->alreadyLoggedIn = NO; /* end _GM_ */ if (isdigit((int) *(me->buffer))) sscanf(me->buffer, "%d%c", &reply, &cont); if (me->first_line) { HTTRACE(PROT_TRACE, "FTP Rx...... `%s\'\n" _ me->buffer); if (!reply) return HT_ERROR; me->first_line = NO; me->ctrl->repcode = reply; StrAllocCopy(me->ctrl->reply, ptr); /* begin _GM_ */ /* Note: libwww bug ID: GM3 */ if ( (reply == 530) && (HTStrCaseStr(me->buffer, "already") != NULL) ) { me->ctrl->alreadyLoggedIn = YES; } else { me->ctrl->alreadyLoggedIn = NO; } /* end _GM_ */ } else { HTChunk_puts(me->welcome, ptr); HTChunk_putc(me->welcome, '\n'); } me->buflen = 0; me->state = EOL_BEGIN; if (cont != '-') { me->first_line = YES; return HT_LOADED; } return HT_OK; } /* ** Searches for FTP header line until buffer fills up or a CRLF or LF ** is found */ PRIVATE int FTPStatus_put_block (HTStream * me, const char * b, int l) { int status; HTHost_setConsumed(me->host, l); while (l-- > 0) { if (me->state == EOL_FCR) { if (*b == LF) { if (!me->junk) { if ((status = ScanResponse(me)) != HT_OK) return status; } else { me->buflen = 0; me->junk = NO; } } } else if (*b == CR) { me->state = EOL_FCR; } else if (*b == LF) { if (!me->junk) { if ((status = ScanResponse(me)) != HT_OK) return status; } else { me->buflen = 0; me->junk = NO; } } else { *(me->buffer+me->buflen++) = *b; if (me->buflen >= MAX_FTP_LINE) { HTTRACE(PROT_TRACE, "FTP Status.. Line too long - chopped\n"); me->junk = YES; if ((status = ScanResponse(me)) != HT_OK) { me->junk = NO; return status; } } } b++; } return HT_OK; } PRIVATE int FTPStatus_put_string (HTStream * me, const char * s) { return FTPStatus_put_block(me, s, (int) strlen(s)); } PRIVATE int FTPStatus_put_character (HTStream * me, char c) { return FTPStatus_put_block(me, &c, 1); } PRIVATE int FTPStatus_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int FTPStatus_free (HTStream * me) { int status = HT_OK; if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTChunk_delete(me->welcome); HT_FREE(me); return HT_OK; } PRIVATE int FTPStatus_abort (HTStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target, e); HTChunk_delete(me->welcome); HT_FREE(me); HTTRACE(PROT_TRACE, "FTPStatus... ABORTING...\n"); return HT_ERROR; } /* FTPStatus Stream ** ----------------- */ PRIVATE const HTStreamClass FTPStatusClass = { "FTPStatus", FTPStatus_flush, FTPStatus_free, FTPStatus_abort, FTPStatus_put_character, FTPStatus_put_string, FTPStatus_put_block }; PRIVATE HTStream * FTPStatus_new (HTRequest * request, ftp_ctrl * ctrl, HTHost * host) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("FTPStatus_new"); me->isa = &FTPStatusClass; me->request = request; me->first_line = YES; me->welcome = HTChunk_new(256); me->ctrl = ctrl; me->state = EOL_BEGIN; me->host = host; return me; } /* ------------------------------------------------------------------------- */ /* FTP Client Functions for managing control and data connections */ /* ------------------------------------------------------------------------- */ PRIVATE int SendCommand (HTRequest *request, ftp_ctrl *ctrl, char *token, char *pars) { int len = strlen(token) + (pars ? strlen(pars)+1:0) + 2; HTStream * input = HTRequest_inputStream(request); HTChunk_setSize(ctrl->cmd, len); if (pars && *pars) sprintf(HTChunk_data(ctrl->cmd), "%s %s%c%c", token, pars, CR, LF); else sprintf(HTChunk_data(ctrl->cmd), "%s%c%c", token, CR, LF); HTTRACE(PROT_TRACE, "FTP Tx...... %s" _ HTChunk_data(ctrl->cmd)); return (*input->isa->put_block)(input, HTChunk_data(ctrl->cmd), len); } /* HTFTPParseURL ** ------------- ** Scan URL for uid and passwd, and any data type indication. The ** expected format is [user[:password]@]host[:port]. ** If no values are found then use defaults. ** Returns YES if OK, else NO */ PRIVATE BOOL HTFTPParseURL (HTRequest * request, char *url, ftp_ctrl *ctrl, ftp_data *data) { char *login = HTParse(url, "", PARSE_HOST); char *path = HTParse(url, "", PARSE_PATH+PARSE_PUNCTUATION); char *ptr = strchr(login, '@'); if (ptr) { /* Uid and/or passwd specified */ char *passwd; *ptr = '\0'; if ((passwd = strchr(login, ':'))) { /* Passwd specified */ *passwd++ = '\0'; HTUnEscape(passwd); StrAllocCopy(ctrl->passwd, passwd); } HTUnEscape(login); StrAllocCopy(ctrl->uid, login); } else if (g_FTPControlMode & FTP_ALWAYS_ASK_UID_PW) { ctrl->uid=NULL; ctrl->passwd=NULL; } else { /* Use anonymous */ HTUserProfile * up = HTRequest_userProfile(request); const char * mailaddress = HTUserProfile_email(up); StrAllocCopy(ctrl->uid, "anonymous"); if (mailaddress) StrAllocCopy(ctrl->passwd, mailaddress); else StrAllocCopy(ctrl->passwd, WWW_FTP_CLIENT); } HTTRACE(PROT_TRACE, "FTPParse.... uid `%s\' pw `%s\'\n" _ ctrl->uid ? ctrl->uid : "" _ ctrl->passwd ? ctrl->passwd : ""); /* ** Look for any type in the URI. If not 'type' parameter then look for ** trailing slash. */ if ((ptr = strchr(path, ';')) != NULL) { *ptr = '\0'; if (strncasecomp(ptr, ";type=", 6)) /* Look for type */ data->type = TOUPPER(*(ptr+6)); else if (*(ptr-1) == '/') data->type = 'D'; } else if (*(path+strlen(path)-1) == '/') { *(path+strlen(path)-1) = '\0'; data->type = 'D'; } HTTRACE(PROT_TRACE, "FTPParse.... Datatype %c\n" _ data->type ? data->type : '?'); StrAllocCopy(data->file, path); data->offset = data->file; HT_FREE(login); HT_FREE(path); return YES; } /* Use LIST or NLST ** ---------------- ** This function sets the type field for what type of list we can use ** Returns YES if OK, else NO */ PRIVATE BOOL FTPListType (ftp_data * data, FTPServerType type) { if (!data) return NO; switch (type) { case FTP_GENERIC: data->type='N'; break; case FTP_MACHTEN: data->type='L'; break; case FTP_UNIX: data->type='L'; break; case FTP_VMS: data->type='L'; break; case FTP_CMS: data->type='N'; break; case FTP_DCTS: data->type='N'; break; case FTP_TCPC: data->type='N'; break; case FTP_PETER_LEWIS: data->type='L'; break; case FTP_NCSA: data->type='N'; break; case FTP_WINNT: data->type='L'; break; default: data->type='N'; break; } return YES; } /* Open a Data socket for listening on ** ----------------------------------- ** Set up a port to listen for data ** Returns YES if OK, else NO */ PRIVATE BOOL AcceptDataSocket (HTNet *cnet, HTNet *dnet, ftp_data *data) { if (HTHost_listen(NULL, dnet, "ftp://localhost:0") == HT_ERROR) return NO; /* ** Now we must find out who we are to tell the other guy ** We have to get the local IP interface from the control connection as ** this is not yet set in the unaccepted data socket */ { SockA local_port, local_host; int addr_size = sizeof(local_port); memset((void *) &local_host, '\0', addr_size); memset((void *) &local_port, '\0', addr_size); if (getsockname(HTNet_socket(cnet), (struct sockaddr *) &local_host, &addr_size) < 0 || getsockname(HTNet_socket(dnet), (struct sockaddr *) &local_port, &addr_size) < 0) { HTRequest_addSystemError(HTNet_request(dnet), ERR_FATAL, socerrno, NO, "getsockname"); return NO; } HTTRACE(PROT_TRACE, "FTP......... This host is `%s\'\n" _ HTInetString(&local_host)); { u_long addr = local_host.sin_addr.s_addr; u_short port = local_port.sin_port; sprintf(data->host, "%d,%d,%d,%d,%d,%d", (int)*((unsigned char *)(&addr)+0), (int)*((unsigned char *)(&addr)+1), (int)*((unsigned char *)(&addr)+2), (int)*((unsigned char *)(&addr)+3), (int)*((unsigned char *)(&port)+0), (int)*((unsigned char *)(&port)+1)); } } return YES; } /* HTFTPLogin ** ----------- ** This function makes a login to a ftp-server. It takes the user name ** and passwd specified in ctrl->user and if that fails or an additional ** account is needed, the user is prompted. ** Returns HT_OK, HT_ERROR, or HT_WOULD_BLOCK */ PRIVATE int HTFTPLogin (HTRequest *request, HTNet *cnet, ftp_ctrl *ctrl) { int status; typedef enum _state { SUB_ERROR = -2, SUB_SUCCESS = -1, NEED_SELECT = 0, NEED_GREETING, NEED_REIN, NEED_UID, NEED_PASSWD, NEED_ACCOUNT, PROMPT_USER } state; /* Jump into a second level state machine */ while (1) { switch ((state) ctrl->substate) { case NEED_SELECT: { HTAlertCallback * cbf = HTAlert_find(HT_PROG_LOGIN); if (cbf) (*cbf)(request, HT_PROG_LOGIN, HT_MSG_NULL, NULL, NULL, NULL); HTTRACE(PROT_TRACE, "FTP Login... now in state NEED_SELECT\n"); ctrl->substate = ctrl->reset ? NEED_REIN : NEED_GREETING; } break; case NEED_GREETING: HTTRACE(PROT_TRACE, "FTP Login... now in state NEED_GREETING\n"); status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { if (ctrl->repcode/100 == 2) { ctrl->substate = (ctrl->uid && *ctrl->uid) ? NEED_UID : PROMPT_USER; } else { ctrl->substate = SUB_ERROR; } } else { ctrl->substate = SUB_ERROR; } break; case NEED_REIN: HTTRACE(PROT_TRACE, "FTP Login... now in state NEED_REIN\n"); if (!ctrl->sent) { status = SendCommand(request, ctrl, "REIN", NULL); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { /* ** If the FTP server doesn't support the REIN command, then ** the return code will be 502 */ if ((ctrl->repcode/100 == 2) || (ctrl->repcode == 502)) { ctrl->substate = (ctrl->uid && *ctrl->uid) ? NEED_UID : PROMPT_USER; } else { ctrl->substate = SUB_SUCCESS; /* hope the best */ } } else { ctrl->substate = SUB_ERROR; } ctrl->sent = NO; } break; case NEED_UID: HTTRACE(PROT_TRACE, "FTP Login... now in state NEED_UID\n"); if (!ctrl->sent) { status = SendCommand(request, ctrl, "USER", ctrl->uid); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { int code = ctrl->repcode/100; if (code == 2) /* Logged in w/o passwd! */ ctrl->substate = SUB_SUCCESS; else if (code == 3) { /* Password demanded */ ctrl->substate = (ctrl->passwd && *ctrl->passwd) ? NEED_PASSWD : PROMPT_USER; /* begin _GM_ */ /* Note: libwww bug ID: GM3 */ /* } else if (ctrl->repcode == 530) */ /* ctrl->substate = PROMPT_USER;*/ /* User unknown */ } else if (ctrl->repcode == 530) { if (ctrl->alreadyLoggedIn == YES) { ctrl->substate = SUB_SUCCESS; HTTRACE(PROT_TRACE, "FTP Login... Already logged in\n"); } else { ctrl->substate = PROMPT_USER; HTTRACE(PROT_TRACE, "FTP Login... User Unknown\n"); } } /* end _GM_ */ else ctrl->substate = SUB_ERROR; } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case NEED_PASSWD: HTTRACE(PROT_TRACE, "FTP Login... now in state NEED_PASSWD\n"); if (!ctrl->sent) { status = SendCommand(request, ctrl, "PASS", ctrl->passwd); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { int code = ctrl->repcode/100; if (code == 2) /* Logged in with passwd */ ctrl->substate = SUB_SUCCESS; else if (code == 3) { /* Account required */ HTAlertCallback *cbf = HTAlert_find(HT_A_PROMPT); HTAlertPar * reply = HTAlert_newReply(); if (cbf && (*cbf)(request, HT_A_PROMPT, HT_MSG_ACCOUNT, NULL, NULL, reply)) { ctrl->account = HTAlert_replyMessage(reply); ctrl->substate = NEED_ACCOUNT; } else ctrl->substate = SUB_ERROR; HTAlert_deleteReply(reply); } else if (ctrl->repcode == 530) ctrl->substate = PROMPT_USER; else ctrl->substate = SUB_ERROR; } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case NEED_ACCOUNT: HTTRACE(PROT_TRACE, "FTP Login... now in state NEED_ACCOUNT\n"); if (!ctrl->sent) { status = SendCommand(request, ctrl, "ACCT", ctrl->account); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { int code = ctrl->repcode/100; if (code == 2) /* Logged in with account */ ctrl->substate = SUB_SUCCESS; else ctrl->substate = SUB_ERROR; /* hopeless */ } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case PROMPT_USER: HTTRACE(PROT_TRACE, "FTP Login... now in state PROMPT_USER\n"); { HTAlertCallback *cbf = HTAlert_find(HT_A_USER_PW); HTAlertPar * reply = HTAlert_newReply(); HT_FREE(ctrl->uid); HT_FREE(ctrl->passwd); if (cbf && (*cbf)(request, HT_A_USER_PW, HT_MSG_FTP_UID, NULL, NULL, reply)){ ctrl->uid = HTAlert_replyMessage(reply); ctrl->passwd = HTAlert_replySecret(reply); } else { ctrl->uid = NULL; ctrl->passwd = NULL; } HTAlert_deleteReply(reply); if (ctrl->uid && *ctrl->uid && ctrl->passwd && *ctrl->passwd) ctrl->substate = NEED_UID; else ctrl->substate = SUB_ERROR; } break; case SUB_ERROR: HTTRACE(PROT_TRACE, "FTP Login... now in state SUB_ERROR\n"); HTRequest_addError(request, ERR_FATAL, NO, HTERR_FTP_LOGIN_FAILURE, NULL, 0, "HTFTPLogin"); HTTRACE(PROT_TRACE, "FTP......... Login failed\n"); ctrl->substate = 0; return HT_ERROR; break; case SUB_SUCCESS: HTTRACE(PROT_TRACE, "FTP Login... now in state SUB_SUCCESS\n"); HTTRACE(PROT_TRACE, "FTP......... Logged in as `%s\'\n" _ ctrl->uid); ctrl->substate = 0; return HT_OK; break; } } } /* HTFTPDataConnection ** ------------------- ** Prepares a data connection to the server and initializes the ** transfer mode. ** Returns HT_OK, HT_ERROR, or HT_WOULD_BLOCK */ PRIVATE int HTFTPDataConnection (HTRequest * request, HTNet *cnet, ftp_ctrl *ctrl, ftp_data *data) { int status; HTNet *dnet = ctrl->dnet; typedef enum _state { SUB_ERROR = -2, SUB_SUCCESS = -1, NEED_TYPE = 0, NEED_SELECT, NEED_PASV, NEED_PORT } state; /* Jump into a second level state machine */ while (1) { switch ((state) ctrl->substate) { case NEED_TYPE: HTTRACE(PROT_TRACE, "FTP Data.... now in state NEED_TYPE\n"); if(!data->type|| data->pasv || data->type=='N' || data->type=='L'){ ctrl->substate = NEED_SELECT; break; } if (!ctrl->sent) { char type[2]; *type = data->type; *(type+1) = '\0'; status = SendCommand(request, ctrl, "TYPE", type); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { if (ctrl->repcode/100 == 2) ctrl->substate = NEED_SELECT; else ctrl->substate = SUB_ERROR; } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case NEED_SELECT: HTTRACE(PROT_TRACE, "FTP Data.... now in state NEED_SELECT\n"); if (FTPMode & FTP_DATA_PASV && !data->pasv) ctrl->substate = NEED_PASV; else if (AcceptDataSocket(cnet, dnet, data)) ctrl->substate = NEED_PORT; else ctrl->substate = SUB_ERROR; break; case NEED_PASV: HTTRACE(PROT_TRACE, "FTP Data.... now in state NEED_PASV\n"); if (!ctrl->sent) { status = SendCommand(request, ctrl, "PASV", NULL); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { if (ctrl->repcode == 227) { /* ** If succes, we have to scan for the returned number. ** As the format for the response isn't standard, ** the best thing to do is to scan for the first digit ** after the status code, see RFC1123 */ char *host = ctrl->reply; int h0, h1, h2, h3, p0=0, p1=0; while (*host && !isdigit((int) *host++)); if (!*host || sscanf(--host, "%d,%d,%d,%d,%d,%d", &h0,&h1,&h2,&h3,&p0,&p1) < 6) { HTTRACE(PROT_TRACE, "FTP Data.... PASV No addr\n"); ctrl->substate = SUB_ERROR; break; } else { int port = (p0<<8)+p1; sprintf(data->host, "ftp://%d.%d.%d.%d:%d/", h0, h1, h2, h3, port); data->pasv = YES; ctrl->substate = SUB_SUCCESS; } } else { ctrl->substate = AcceptDataSocket(cnet, dnet, data) ? NEED_PORT : SUB_ERROR; } } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case NEED_PORT: HTTRACE(PROT_TRACE, "FTP Data.... now in state NEED_PORT\n"); if (!ctrl->sent) { status = SendCommand(request, ctrl, "PORT", data->host); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { data->pasv = NO; ctrl->substate = (ctrl->repcode/100 == 2) ? SUB_SUCCESS : SUB_ERROR; } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case SUB_ERROR: HTTRACE(PROT_TRACE, "FTP Data.... now in state SUB_ERROR\n"); HTTRACE(PROT_TRACE, "FTP Data.... Can't setup data connection\n"); ctrl->substate = 0; return HT_ERROR; break; case SUB_SUCCESS: HTTRACE(PROT_TRACE, "FTP Data.... now in state SUB_SUCCESS\n"); HTTRACE(PROT_TRACE, "FTP Data.... Data connection negotiated\n"); ctrl->substate = 0; return HT_OK; break; } } } /* HTFTPServerInfo ** --------------- ** This function finds out what server we are talking to. ** Maybe we can upgrade from NLST to LIST. ** Returns HT_OK, HT_ERROR, or HT_WOULD_BLOCK ** Thanks to James.W.Matthews@Dartmouth.EDU (James W. Matthews) for making ** his code available. */ PRIVATE int HTFTPServerInfo (HTRequest *request, HTNet *cnet, ftp_ctrl *ctrl, ftp_data *data) { int status; typedef enum _state { SUB_ERROR = -2, SUB_SUCCESS = -1, NEED_SYST = 0, CHECK_SYST, NEED_PWD, CHECK_PWD } state; /* Jump into a second level state machine */ while (1) { switch ((state) ctrl->substate) { case NEED_SYST: HTTRACE(PROT_TRACE, "FTP Server.. now in state NEED_SYST\n"); if (!ctrl->sent) { if (ctrl->server != FTP_UNSURE) { FTPListType(data, ctrl->server); return HT_OK; } status = SendCommand(request, ctrl, "SYST", NULL); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { ctrl->substate=ctrl->repcode==215 ? CHECK_SYST : NEED_PWD; } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case CHECK_SYST: HTTRACE(PROT_TRACE, "FTP Server.. now in state CHECK_SYST\n"); { char *reply = ctrl->reply; if (!*reply) { HTTRACE(PROT_TRACE, "FTP Server.. No server info?\n"); ctrl->substate = NEED_PWD; break; } if (strncmp(reply, "UNIX Type: L8MAC-OSMachTen", 28) == 0) { ctrl->server = FTP_MACHTEN; } else if (strstr(reply, "UNIX") != NULL) { ctrl->server = FTP_UNIX; } else if (strncmp(reply, "VMS", 3) == 0) { ctrl->server = FTP_VMS; } else if ((strncmp(reply, "VM/CMS", 6) == 0) || (strncmp(reply, "VM", 2) == 0)) { ctrl->server = FTP_CMS; } else if (strncmp(reply, "DCTS", 4) == 0) { ctrl->server = FTP_DCTS; } else if (strstr(reply, "MAC-OS TCP/ConnectII") != NULL) { /* Check old versions of TCP/C using / in pathnames */ ctrl->server = FTP_TCPC + FTP_UNSURE; } else if (strncmp(reply, "MACOS Peter's Server", 20) == 0) { ctrl->server = FTP_PETER_LEWIS; } else if (strncmp(reply, "Windows_NT", 10) == 0) { ctrl->server = FTP_WINNT; } /* If we are unsure, try PWD to get more information */ if (ctrl->server & FTP_UNSURE) ctrl->substate = NEED_PWD; else ctrl->substate = SUB_SUCCESS; } break; case NEED_PWD: HTTRACE(PROT_TRACE, "FTP Server.. now in state NEED_PWD\n"); if (!ctrl->sent) { status = SendCommand(request, ctrl, "PWD", NULL); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { ctrl->substate = (ctrl->repcode/100 == 2) ? CHECK_PWD : SUB_ERROR; } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case CHECK_PWD: HTTRACE(PROT_TRACE, "FTP Server.. now in state CHECK_PWD\n"); { char *start = strchr(ctrl->reply, '"'); char *end; if (!start || (end = strchr(++start, '"')) == NULL) { HTTRACE(PROT_TRACE, "FTP Server.. No current directory?\n"); ctrl->server = FTP_GENERIC; } else { *end = '\0'; if (ctrl->server & FTP_TCPC) { ctrl->server = *start == '/' ? FTP_NCSA : FTP_TCPC; } else if (*start == '/') { /* path names starting with / imply Unix, right? */ ctrl->server = FTP_UNIX; } else if (*(end-1) == ']') { /* path names ending with ] imply VMS, right? */ ctrl->server = FTP_VMS; } else ctrl->server = FTP_GENERIC; } ctrl->substate = SUB_SUCCESS; } break; case SUB_ERROR: HTTRACE(PROT_TRACE, "FTP Server.. now in state SUB_ERROR\n"); HTTRACE(PROT_TRACE, "FTP Server.. Can't get server information\n"); ctrl->substate = 0; ctrl->server = FTP_GENERIC; return HT_ERROR; break; case SUB_SUCCESS: HTTRACE(PROT_TRACE, "FTP Server.. now in state SUB_SUCCESS\n"); { HTHost * host = HTNet_host(cnet); HTTRACE(PROT_TRACE, "FTP Server.. Guessed type %d\n" _ ctrl->server); HTHost_setVersion(host, ctrl->server); FTPListType(data, ctrl->server); ctrl->substate = 0; return HT_OK; break; } } } } /* HTFTPGetData ** ------------ ** This function asks for the file or a directory. First we try in one go, ** but if that doesn't work, then we use CWD for each segment and then ** try to retrieve it. If that also fails, then we try if it is a ** directory. ** Returns HT_OK, HT_LOADED, HT_ERROR, or HT_WOULD_BLOCK */ PRIVATE int HTFTPGetData (HTRequest *request, HTNet *cnet, SOCKET sockfd, ftp_ctrl *ctrl, ftp_data *data) { int status; char *segment = NULL; HTNet *dnet = ctrl->dnet; BOOL data_is_active = (sockfd == HTNet_socket(dnet)); HTPostCallback *pcbf; typedef enum _state { SUB_ERROR = -2, SUB_SUCCESS = -1, NEED_SELECT = 0, NEED_CONNECT, NEED_ACCEPT, NEED_ACTION, NEED_CWD, NEED_SEGMENT, NEED_STREAM, NEED_BODY } state; /* Jump into a second level state machine */ while (1) { switch ((state) ctrl->substate) { case NEED_SELECT: HTTRACE(PROT_TRACE, "FTP Get Data now in state NEED_SELECT\n"); ctrl->substate = data->pasv ? NEED_CONNECT : NEED_ACTION; break; case NEED_CONNECT: HTTRACE(PROT_TRACE, "FTP Get Data now in state NEED_CONNECT\n"); status = HTHost_connect(HTNet_host(dnet), dnet, data->host); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_OK) { HTTRACE(PROT_TRACE, "FTP Get Data Active data socket %d\n" _ HTNet_socket(dnet)); ctrl->substate = NEED_ACTION; } else { /* Swap to PORT on the fly */ NETCLOSE(HTNet_socket(dnet)); HTNet_setSocket(dnet, INVSOC); HTTRACE(PROT_TRACE, "FTP Get Data Swap to PORT on the fly\n"); ctrl->substate = NEED_SELECT; HT_FREE(segment); return HT_OK; } break; case NEED_ACCEPT: HTTRACE(PROT_TRACE, "FTP Get Data now in state NEED_ACCEPT\n"); status = HTHost_accept(HTNet_host(dnet), dnet, NULL); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_OK) { HTTRACE(PROT_TRACE, "FTP Get Data Passive data socket %d\n" _ HTNet_socket(dnet)); ctrl->substate = NEED_STREAM; } else ctrl->substate = SUB_ERROR; break; case NEED_ACTION: HTTRACE(PROT_TRACE, "FTP Get Data now in state NEED_ACTION\n"); if (!ctrl->sent) { char *cmd = (data->type=='L') ? "LIST" : (data->type=='N') ? "NLST" : "RETR"; if (HTRequest_method(request) == METHOD_PUT) cmd = "STOR"; StrAllocCopy(segment, data->offset); HTUnEscape(segment); HTCleanTelnetString(segment); status = SendCommand(request, ctrl, cmd, segment); HT_FREE(segment); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { int code = ctrl->repcode; if (code==125 || code==150 || code==225) ctrl->substate = data->pasv ? NEED_STREAM : NEED_ACCEPT; else if (code/100==5 && !ctrl->cwd) ctrl->substate = NEED_SEGMENT; else { if (ctrl->repcode == 550) { HTTRACE(PROT_TRACE, "FTP Get Data no such file or directory\n"); data->stream_error = YES; } ctrl->substate = SUB_ERROR; } } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case NEED_SEGMENT: HTTRACE(PROT_TRACE, "FTP Get Data now in state NEED_SEGMENT\n"); { char *ptr; if (data->offset == data->file) { if (ctrl->server == FTP_VMS) { /* Change to root */ if ((segment = (char *) HT_MALLOC(strlen(ctrl->uid)+3)) == NULL) HT_OUTOFMEM("segment "); sprintf(segment, "[%s]", ctrl->uid); } else StrAllocCopy(segment, "/"); data->offset++; ctrl->substate = NEED_CWD; } else { if ((ptr = strchr(data->offset, '/'))) { *ptr='\0'; StrAllocCopy(segment, data->offset); *ptr='/'; data->offset = ++ptr; HTUnEscape(segment); HTCleanTelnetString(segment); ctrl->substate = NEED_CWD; } else ctrl->substate = NEED_ACTION; } } break; case NEED_CWD: HTTRACE(PROT_TRACE, "FTP Get Data now in state NEED_CWD\n"); if (!ctrl->sent) { status = SendCommand(request, ctrl, "CWD", segment); HT_FREE(segment); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_ERROR) ctrl->substate = SUB_ERROR; ctrl->cwd = YES; ctrl->sent = YES; } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED) { if (ctrl->repcode/100 == 2) ctrl->substate = NEED_SEGMENT; else ctrl->substate = SUB_ERROR; } else ctrl->substate = SUB_ERROR; ctrl->sent = NO; } break; case NEED_STREAM: HTTRACE(PROT_TRACE, "FTP Get Data now in state NEED_STREAM\n"); /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ { HTStream * target = FTP_DIR(data) ? HTFTPDir_new(request, ctrl->server, data->type) : HTStreamStack(HTAnchor_format(HTRequest_anchor(request)), HTRequest_outputFormat(request), HTRequest_outputStream(request), request, YES); HTNet_setReadStream(dnet, target); HTRequest_setOutputConnected(request, YES); } data_is_active = YES; ctrl->substate = NEED_BODY; break; case NEED_BODY: HTTRACE(PROT_TRACE, "FTP Get Data now in state NEED_BODY\n"); if (data_is_active) { if (HTRequest_method(request) == METHOD_PUT) { HTParentAnchor * entity = HTRequest_entityAnchor(request); const char * document = (const char *) HTAnchor_document(entity); int length = (int)HTAnchor_length(entity); HTStream * output = (HTStream *)HTChannel_output(HTNet_host(dnet)->channel); pcbf = HTRequest_postCallback(request); if (pcbf) { status = (*pcbf)(request, output); } else { status = (*output->isa->put_block)(output, document, length); if (status == HT_OK) { status = HT_LOADED; } } if (status == HT_WOULD_BLOCK) { return HT_WOULD_BLOCK; } else if ( status == HT_LOADED ) { ctrl->substate = SUB_SUCCESS; data->complete |= 3; } else if ( status == HT_OK ) { return HT_WOULD_BLOCK; } else { ctrl->substate = SUB_ERROR; data->stream_error = YES; } continue; } else { status = HTHost_read(HTNet_host(dnet), dnet); } if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED || status == HT_CLOSED || status == HT_OK) { HTDoClose(dnet); data->complete |= 1; if (data->complete >= 3) ctrl->substate = SUB_SUCCESS; else data_is_active = NO; } else { ctrl->substate = SUB_ERROR; data->stream_error = YES; } } else { status = HTHost_read(HTNet_host(cnet), cnet); if (status == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; else if (status == HT_LOADED || status == HT_CLOSED) { if (ctrl->repcode/100 == 2) { data->complete |= 2; if (data->complete >= 3) ctrl->substate = SUB_SUCCESS; else data_is_active = YES; } else ctrl->substate = SUB_ERROR; } else ctrl->substate = SUB_ERROR; } break; case SUB_ERROR: HTTRACE(PROT_TRACE, "FTP Get Data now in state SUB_ERROR\n"); HTRequest_addError(request, ERR_FATAL, NO, HTERR_NOT_FOUND, NULL, 0, "HTFTPGetData"); ctrl->substate = 0; HT_FREE(segment); return HT_ERROR; break; case SUB_SUCCESS: HTTRACE(PROT_TRACE, "FTP Get Data now in state SUB_SUCCESS\n"); ctrl->substate = 0; HT_FREE(segment); return HT_LOADED; break; } } } /* ------------------------------------------------------------------------- */ /* Retrieve File from Server as an atomic action. ** ----------------------------------------------- ** Given a hypertext address, this routine loads a document. ** ** On entry, ** request This is the request structure ** returns HT_ERROR Error has occured in call back ** HT_OK Call back was OK */ PRIVATE int FTPEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadFTP (SOCKET soc, HTRequest * request) { HTNet * cnet = HTRequest_net(request); ftp_ctrl * ctrl = NULL; ftp_data * data = NULL; HTParentAnchor * anchor = HTRequest_anchor(request); char * url = HTAnchor_physical(anchor); /* ** Initiate a new FTP ctrl and data structure and bind to request structure ** This is actually state FTP_BEGIN, but it can't be in the state ** machine as we need the structure first. */ HTTRACE(PROT_TRACE, "FTP......... Looking for `%s\'\n" _ url); if ((ctrl = (ftp_ctrl *) HT_CALLOC(1, sizeof(ftp_ctrl))) == NULL || (data = (ftp_data *) HT_CALLOC(1, sizeof(ftp_data))) == NULL) HT_OUTOFMEM("HTLoadFTP"); ctrl->cmd = HTChunk_new(128); ctrl->state = FTP_BEGIN; ctrl->server = FTP_UNSURE; ctrl->dnet = HTNet_dup(cnet); ctrl->cnet = cnet; HTNet_setContext(cnet, ctrl); HTNet_setEventCallback(cnet, FTPEvent); HTNet_setEventParam(cnet, ctrl); HTNet_setRawBytesCount(ctrl->dnet, YES); /* for now, the dnet comes back to the same place ** - vestigial from when the callback was from the request object */ HTNet_setContext(ctrl->dnet, data); HTNet_setEventCallback(ctrl->dnet, FTPEvent); HTNet_setEventParam(ctrl->dnet, ctrl); return FTPEvent(soc, ctrl, HTEvent_BEGIN); } PRIVATE int FTPEvent (SOCKET soc, void * pVoid, HTEventType type) { ftp_ctrl * ctrl = (ftp_ctrl *) pVoid; ftp_data * data = (ftp_data *) HTNet_context(ctrl->dnet); int status = HT_ERROR; HTNet * cnet = ctrl->cnet; HTRequest * request = HTNet_request(cnet); HTParentAnchor * anchor = HTRequest_anchor(request); char * url = HTAnchor_physical(anchor); HTHost *host = HTNet_host(cnet); if (type == HTEvent_CLOSE) { /* Interrupted */ if (soc == HTNet_socket(cnet) && data->complete<1) FTPCleanup(request, HT_INTERRUPTED); else FTPCleanup(request, HT_LOADED); return HT_OK; } else if (type == HTEvent_TIMEOUT) { /* ** Don't time out the control connection if we are actually recieving data ** on the data connection */ if (!(soc == HTNet_socket(cnet) && !(data->complete & 1) && HTNet_bytesRead(ctrl->dnet)>0)) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_TIME_OUT, NULL, 0, "HTLoadHTTP"); FTPCleanup(request, HT_TIMEOUT); } return HT_OK; } else { ctrl = (ftp_ctrl *) HTNet_context(cnet); /* Get existing copy */ data = (ftp_data *) HTNet_context(ctrl->dnet); } /* Now jump into the machine. We know the state from the previous run */ while (1) { switch (ctrl->state) { case FTP_BEGIN: HTTRACE(PROT_TRACE, "FTP Event... now in state FTP_BEGIN\n"); /* Only handle GET requests for now */ if (HTRequest_method(request) != METHOD_GET && HTRequest_method(request) != METHOD_PUT ) { HTTRACE(PROT_TRACE, "FTP Event... This module only supports the GET or PUT methods\n"); ctrl->state = FTP_ERROR; break; } HTFTPParseURL(request, url, ctrl, data); /* The following is added by Neil Griffin, GAIN Software */ /* ** If the user hasn't specified a permanent transfer type, then ** use the transfer type specified at the end of the URL. */ if (g_FTPTransferMode == FTP_DEFAULT_TRANSFER_MODE) { switch (data->type) { case 'a' : data->type = 'A'; break; case 'A' : data->type = 'A'; break; case 'i' : data->type = 'I'; break; case 'I' : data->type = 'I'; break; case 'd' : FTPListType(data, ctrl->server); break; case 'D' : FTPListType(data, ctrl->server); break; default : data->type = 'I'; break; } /* Otherwise, use the permanent transfer type specified by the user. */ } else { switch (g_FTPTransferMode) { case FTP_ASCII_TRANSFER_MODE : data->type = 'A'; break; case FTP_BINARY_TRANSFER_MODE : data->type = 'I'; break; case FTP_DIR_TRANSFER_MODE : FTPListType(data, ctrl->server); break; default : data->type = 'I'; break; } } HTTRACE(PROT_TRACE, "FTP Event... Transfer mode set to '%c'\n" _ data->type); /* ** See if we can get any hints to what we might expect content wise. */ if (!FTP_DIR(data)) HTBind_getAnchorBindings(anchor); /* Ready for next state */ ctrl->state = FTP_NEED_CCON; break; case FTP_NEED_CCON: HTTRACE(PROT_TRACE, "FTP Event... now in state FTP_NEED_CONN\n"); status = HTHost_connect(host, cnet, url); host = HTNet_host(cnet); if (status == HT_OK) { /* ** Check the protocol class to see if we have connected to a ** the right class of server, in this case HTTP. */ { char * s_class = HTHost_class(host); if (s_class && strcasecomp(s_class, "ftp")) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, NULL, 0, "HTLoadNews"); ctrl->state = FTP_ERROR; break; } HTHost_setClass(host, "ftp"); } /* Check persistent connection */ if (HTNet_persistent(cnet)) { ctrl->server = HTHost_version(host); HTTRACE(PROT_TRACE, "FTP Server.. Cache says type %d server\n" _ ctrl->server); ctrl->reset = 1; } else HTNet_setPersistent(cnet, YES, HT_TP_SINGLE); /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ { HTStream * readstream = FTPStatus_new(request, ctrl, host); HTNet_setReadStream(cnet, readstream); } /* ** Create the stream pipe TO the channel from the application ** and hook it up to the request object */ { HTOutputStream * output = HTNet_getOutput(cnet, NULL, 0); HTRequest_setInputStream(request, (HTStream *) output); } /* ** Set up concurrent read/write if this request isn't the ** source for a PUT or POST. As source we don't start reading ** before all destinations are ready. If destination then ** register the input stream and get ready for read */ if (HTRequest_isPostWeb(request)) { HTEvent * event = HTNet_event(cnet); HTEvent_register(HTNet_socket(cnet), HTEvent_READ, event); HTRequest_linkDestination(request); } ctrl->state = FTP_NEED_LOGIN; } else if (status == HT_WOULD_BLOCK || status == HT_PENDING) return HT_OK; else ctrl->state = FTP_ERROR; /* Error or interrupt */ break; case FTP_NEED_LOGIN: HTTRACE(PROT_TRACE, "FTP Event... now in state FTP_NEED_LOGIN\n"); status = HTFTPLogin(request, cnet, ctrl); if (status == HT_WOULD_BLOCK) return HT_OK; ctrl->state = (status == HT_OK) ? FTP_NEED_DCON : FTP_ERROR; break; case FTP_NEED_DCON: HTTRACE(PROT_TRACE, "FTP Event... now in state FTP_NEED_DCON\n"); status = HTFTPDataConnection(request, cnet, ctrl, data); if (status == HT_WOULD_BLOCK) return HT_OK; if (status == HT_OK) ctrl->state = (data->type=='N') ? FTP_NEED_SERVER : FTP_NEED_DATA; else ctrl->state = FTP_ERROR; break; case FTP_NEED_DATA: HTTRACE(PROT_TRACE, "FTP Event... now in state FTP_NEED_DATA\n"); status = HTFTPGetData(request, cnet, soc, ctrl, data); if (status == HT_WOULD_BLOCK) return HT_OK; if (status == HT_LOADED) ctrl->state = FTP_SUCCESS; else if (status == HT_OK) ctrl->state = FTP_NEED_DCON; else if (HTRequest_method(request) == METHOD_PUT) ctrl->state = FTP_ERROR; else if (!FTP_DIR(data) && !data->stream_error) { FTPListType(data, ctrl->server); ctrl->state = FTP_NEED_SERVER; /* Try a dir instead? */ } else ctrl->state = FTP_ERROR; break; case FTP_NEED_SERVER: HTTRACE(PROT_TRACE, "FTP Event... now in state FTP_NEED_SERVER\n"); status = HTFTPServerInfo(request, cnet, ctrl, data); if (status == HT_WOULD_BLOCK) return HT_OK; ctrl->state = FTP_NEED_DATA; break; case FTP_SUCCESS: HTTRACE(PROT_TRACE, "FTP Event... now in state FTP_SUCCESS\n"); FTPCleanup(request, HT_LOADED); return HT_OK; break; case FTP_ERROR: HTTRACE(PROT_TRACE, "FTP Event... now in state FTP_ERROR\n"); FTPCleanup(request, HT_ERROR); return HT_OK; break; } } /* End of while(1) */ } PUBLIC void HTFTP_setTransferMode(FTPTransferMode mode) { g_FTPTransferMode = mode; } PUBLIC FTPTransferMode HTFTP_transferMode (void) { return g_FTPTransferMode; } PUBLIC void HTFTP_setControlMode (FTPControlMode mode) { g_FTPControlMode = mode; } PUBLIC FTPControlMode HTFTP_controlMode (void) { return g_FTPControlMode; } libwww/Library/src/HTFTP.html0100644000076400001440000000400606530334026015520 0ustar danielusers W3C Sample Code Library libwww FTP CLIENT

    FTP access functions

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    This is the FTP load module that handles all communication with FTP-servers.

    This module is implemented by HTFTP.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTFTP_H
    #define HTFTP_H
    #include "HTProt.h"
    extern HTProtCallback HTLoadFTP;
    typedef enum _FTPServerType {
        FTP_GENERIC 	= 0x1,
        FTP_MACHTEN		= 0x2,
        FTP_UNIX		= 0x4,
        FTP_VMS		= 0x8,
        FTP_CMS		= 0x10,
        FTP_DCTS		= 0x20,
        FTP_TCPC		= 0x40,
        FTP_PETER_LEWIS	= 0x80,
        FTP_NCSA		= 0x200,
        FTP_WINNT		= 0x400,
        FTP_UNSURE		= 0x8000
    } FTPServerType;
    #define MAX_FTP_LINE	128			 /* Don't use more than this */
    

    Global Transfer Mode

    Can be used to set the default transfer mode overruling what may be indicated in the FTP URL.

    Added by Neil Griffin, GAIN Software

    typedef enum _FTPTransferMode {
        FTP_DEFAULT_TRANSFER_MODE   = 0,
        FTP_ASCII_TRANSFER_MODE     = 1,
        FTP_BINARY_TRANSFER_MODE    = 2,
        FTP_DIR_TRANSFER_MODE       = 3
    } FTPTransferMode;
    extern FTPTransferMode HTFTP_transferMode (void);
    extern void HTFTP_setTransferMode (FTPTransferMode mode);
    

    Global Control Mode

    Can be used to set the default control modes for various FTP settings like always aski for user name and password, etc.
    typedef enum _FTPControlMode {
        FTP_DEFAULT_CONTROL_MODE   = 0,
        FTP_ALWAYS_ASK_UID_PW      = 1
    } FTPControlMode;
    extern FTPControlMode HTFTP_controlMode (void);
    extern void HTFTP_setControlMode (FTPControlMode mode);
    
    #endif
    

    @(#) $Id: HTFTP.html,v 2.40 2025/05/19 16:49:26 frystyk Exp $
    libwww/Library/src/HTFTPDir.c0100644000076400001440000001555206664352703015457 0ustar danielusers/* HTFTPDir.c ** FILE TRANSFER PROTOCOL (FTP) DIRECTORY LISTINGS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTFTPDir.c,v 2.18 2025/02/22 22:10:11 frystyk Exp $ ** ** Authors ** HF Henrik Frystyk ** ** History: ** Sep 95 Spawned off from HTFTP.c and made a stream ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWDir.h" #include "WWWTrans.h" #include "HTFTPDir.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; HTRequest * request; FTPServerType server; HTEOLState state; HTDir * dir; BOOL first; BOOL junk; char buffer[MAX_FTP_LINE+1]; int buflen; }; PRIVATE HTDirShow dir_show = HT_DS_SIZE+HT_DS_DATE+HT_DS_DES+HT_DS_ICON; PRIVATE HTDirKey dir_key = HT_DK_CINS; /* ------------------------------------------------------------------------- */ /* ParseUnix ** --------- ** Extract the name, size, and date from an 'ls'. The function expects ** the following format of the ls-line: ** ** [] ** ** Returns YES if OK, NO on error */ PRIVATE BOOL ParseUnix (HTDir *dir, char * line) { int cnt; char *ptr = line; char *column = NULL; char *date = NULL; char sizestr[10]; HTFileMode mode = (*line == 'd') ? HT_IS_DIR : HT_IS_FILE; /* Spool past permission, link, and owner */ for (cnt=0; cnt<4; cnt++) { if ((column = HTNextField(&ptr)) == NULL) break; } /* ** This field can either be group or size. We find out by looking at the ** next field. If this is a non-digit then this field is the size. */ while (*ptr && isspace((int) *ptr)) ptr++; if (isdigit((int) *ptr)) { column = HTNextField(&ptr); while (*ptr && isspace((int) *ptr)) ptr++; } if (mode == HT_IS_FILE) { long ls = atol(column); HTNumToStr(ls, sizestr, 10); } else strcpy(sizestr, "-"); /* Find date field */ date = ptr; ptr += 12; *ptr++ = '\0'; date = HTStrip(date); /* Take the reminder as the filename */ while (*ptr && isspace((int) *ptr)) ptr++; if ((column = strstr(ptr, " -> "))) *column = '\0'; /* Strip any '->' */ /* Add the element with what we've got */ return HTDir_addElement(dir, ptr, date, sizestr, mode); } /* ParseVMS ** -------- ** Parse the VMS line and send it to the directory module ** Returns YES if OK, NO on error */ PRIVATE BOOL ParseVMS (HTDir *dir, char * line) { char *ptr = NULL; char *date = NULL; char *size = NULL; char sizestr[10]; HTFileMode mode; /* Valid lines have the semi-colon version number token */ if ((ptr = strchr(line, ';')) == NULL) return YES; *ptr++ ='\0'; if (HTNextField(&ptr) == NULL) return YES; /* Cast VMS file and directory names to lowercase except .Z and _Z */ { char *lp = line; while (*lp) { if (strcmp(lp, ".Z")==0 || strcmp(lp, "_Z")==0) break; *lp = TOLOWER(*lp); lp++; } if ((lp = strstr(line, ".dir"))) { /* Strip any .dir */ mode = HT_IS_DIR; *lp = '\0'; } else mode = HT_IS_FILE; } /* Find the size */ if ((size = HTNextField(&ptr))) { if (mode == HT_IS_FILE) { long ls = atol(size) * 512; /* Assume blocks */ HTNumToStr(ls, sizestr, 10); } else strcpy(sizestr, "-"); } else *sizestr = '\0'; /* Find the date */ { char *end = strchr(ptr, '['); if (end) *end = '\0'; date = HTStrip(ptr); } return HTDir_addElement(dir, line, date, sizestr, mode); } /* ParseFTPLine ** ----------- ** Determines what to do with a line read from a FTP listing ** Returns YES if OK, else NO */ PRIVATE BOOL ParseFTPLine (HTStream *me) { if (!me->buflen) return YES; /* If empty line */ switch (me->server) { case FTP_WINNT: case FTP_UNIX: case FTP_PETER_LEWIS: case FTP_MACHTEN: if (me->first) { if (strncmp(me->buffer, "total ", 6) && !strstr(me->buffer, "not available")) ParseUnix(me->dir, me->buffer); me->first = NO; } else ParseUnix(me->dir, me->buffer); break; case FTP_VMS: /* Interpret and edit LIST output from VMS server */ /* and convert information lines to zero length. */ ParseVMS(me->dir, me->buffer); break; case FTP_NCSA: case FTP_TCPC: /* Directories identified by trailing "/" characters */ { HTFileMode mode = (*(me->buffer+me->buflen-1)=='/') ? HT_IS_DIR : HT_IS_FILE; return HTDir_addElement(me->dir, me->buffer, NULL, NULL, mode); } break; default: return HTDir_addElement(me->dir, me->buffer, NULL, NULL, HT_IS_FILE); break; } return NO; } /* ** Searches for FTP line until buffer fills up or a CRLF or LF is found */ PRIVATE int FTPDir_put_block (HTStream * me, const char * b, int l) { while (l-- > 0) { if (me->state == EOL_FCR) { if (*b == LF && me->buflen) { if (!me->junk) { *(me->buffer+me->buflen) = '\0'; ParseFTPLine(me); } else me->junk = NO; /* back to normal */ } me->buflen = 0; me->state = EOL_BEGIN; } else if (*b == CR) { me->state = EOL_FCR; } else if (*b == LF && me->buflen) { if (!me->junk) { *(me->buffer+me->buflen) = '\0'; ParseFTPLine(me); } else me->junk = NO; /* back to normal */ me->buflen = 0; me->state = EOL_BEGIN; } else { *(me->buffer+me->buflen++) = *b; if (me->buflen >= MAX_FTP_LINE) { HTTRACE(PROT_TRACE, "FTP Dir..... Line too long - ignored\n"); me->buflen = 0; me->junk = YES; } } b++; } return HT_OK; } PRIVATE int FTPDir_put_string (HTStream * me, const char * s) { return FTPDir_put_block(me, s, (int) strlen(s)); } PRIVATE int FTPDir_put_character (HTStream * me, char c) { return FTPDir_put_block(me, &c, 1); } PRIVATE int FTPDir_flush (HTStream * me) { return HT_OK; } PRIVATE int FTPDir_free (HTStream * me) { HTDir_free(me->dir); HT_FREE(me); return HT_OK; } PRIVATE int FTPDir_abort (HTStream * me, HTList * e) { HTTRACE(PROT_TRACE, "FTPDir...... ABORTING...\n"); FTPDir_free(me); return HT_ERROR; } /* FTPDir Stream ** ----------------- */ PRIVATE const HTStreamClass FTPDirClass = { "FTPDir", FTPDir_flush, FTPDir_free, FTPDir_abort, FTPDir_put_character, FTPDir_put_string, FTPDir_put_block }; PUBLIC HTStream * HTFTPDir_new (HTRequest * request, FTPServerType server, char list) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTFTPDir"); me->isa = &FTPDirClass; me->request = request; me->server = server; me->state = EOL_BEGIN; me->dir = HTDir_new(request, (list=='L' ? dir_show : 0), dir_key); me->first = YES; if (me->dir == NULL) { HT_FREE(me); return HTErrorStream(); } return me; } libwww/Library/src/HTFTPDir.html0100644000076400001440000000150406526451223016163 0ustar danielusers W3C Sample Code Library libwww FTP DIRECTORY LISTING

    FTP Directory Listings

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    This module converts a FTP directory listing to a HTML object

    This module is implemented by HTFTPDir.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTFTPDIR_H
    #define HTFTPDIR_H
    #include "HTStream.h"
    #include "HTFTP.h"
    extern HTStream * HTFTPDir_new (HTRequest *	request,
    				FTPServerType	server,
    				char		list);
    #endif
    

    @(#) $Id: HTFTPDir.html,v 2.5 2025/05/14 02:10:27 frystyk Exp $
    libwww/Library/src/HTFWrite.c0100644000076400001440000000515506664352703015565 0ustar danielusers/* HTFWrite.c ** BASIC FILE WRITER STREAM ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTFWrite.c,v 2.46 2025/02/22 22:10:11 frystyk Exp $ ** ** This version of the stream object just writes to a C file. ** The file is assumed open and left open. ** ** Bugs: ** strings written must be less than buffer size. ** ** History: ** HFN: wrote it ** HWL: converted the caching scheme to be hierachical by taking ** AL code from Deamon ** HFN: moved cache code to HTCache module ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTFWrite.h" /* Implemented here */ struct _HTStream { const HTStreamClass *isa; FILE * fp; BOOL leave_open; /* Close file when free? */ }; /* ------------------------------------------------------------------------- */ PRIVATE int HTFWriter_put_character (HTStream * me, char c) { return (fputc(c, me->fp) == EOF) ? HT_ERROR : HT_OK; } PRIVATE int HTFWriter_put_string (HTStream * me, const char* s) { if (*s) /* For vms :-( 10/04-94 */ return (fputs(s, me->fp) == EOF) ? HT_ERROR : HT_OK; return HT_OK; } PRIVATE int HTFWriter_flush (HTStream * me) { return (fflush(me->fp) == EOF) ? HT_ERROR : HT_OK; } PRIVATE int HTFWriter_write (HTStream * me, const char* s, int l) { int status ; status = (fwrite(s, 1, l, me->fp) != l) ? HT_ERROR : HT_OK ; if (l > 1 && status == HT_OK) (void) HTFWriter_flush(me); return status ; } PRIVATE int HTFWriter_free (HTStream * me) { if (me) { if (me->leave_open != YES) fclose(me->fp); else HTFWriter_flush(me); HT_FREE(me); } return HT_OK; } PRIVATE int HTFWriter_abort (HTStream * me, HTList * e) { HTTRACE(STREAM_TRACE, "FileWriter.. ABORTING...\n"); if (me) { if (me->leave_open != YES) fclose(me->fp); HT_FREE(me); } return HT_ERROR; } PRIVATE const HTStreamClass HTFWriter = /* As opposed to print etc */ { "FileWriter", HTFWriter_flush, HTFWriter_free, HTFWriter_abort, HTFWriter_put_character, HTFWriter_put_string, HTFWriter_write }; PUBLIC HTStream * HTFWriter_new (HTRequest * request, FILE * fp, BOOL leave_open) { HTStream * me = NULL; if (!fp) { HTTRACE(STREAM_TRACE, "FileWriter.. Bad file descriptor\n"); return HTErrorStream(); } if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTFWriter_new"); me->isa = &HTFWriter; me->fp = fp; me->leave_open = leave_open; return me; } libwww/Library/src/HTFWrite.html0100644000076400001440000000243506657355317016313 0ustar danielusers W3C Sample Code Library libwww ANSI C File Streams

    Basic ANSI C File Writer Stream

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module contains a basic file writer stream that can be used to dump data objects to local disk. See also the various subclasses of this basic stream which can be used to do save-as, save-and-callback etc. in the HTFSave module

    This module is implemented by HTFWrite.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTFWRITE_H
    #define HTFWRITE_H
    #include "HTStream.h"
    #include "HTReq.h"
    

    Basic ANSI C File Writer Stream

    This function puts up a new stream given an open file descripter. If the file is not to be closed afterwards, then set leave_open=NO.

    extern HTStream * HTFWriter_new	(
            HTRequest * request,
    	FILE * fp,
    	BOOL leave_open);
    
    #endif
    


    @(#) $Id: HTFWrite.html,v 2.23 2025/02/07 18:26:23 frystyk Exp $
    libwww/Library/src/HTFile.c0100644000076400001440000004633407144551323015241 0ustar danielusers/* HTFile.c ** FILE ACCESS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTFile.c,v 1.158 2025/08/10 16:05:39 kahan Exp $ ** ** This is unix-specific code in general, with some VMS bits. ** These are routines for file access used by browsers. ** ** History: ** Feb 91 Written Tim Berners-Lee CERN/CN ** Apr 91 vms-vms access included using DECnet syntax ** 26 Jun 92 (JFG) When running over DECnet, suppressed FTP. ** Fixed access bug for relative names on VMS. ** Sep 93 (MD) Access to VMS files allows sharing. ** 15 Nov 93 (MD) Moved HTVMSname to HTVMSUTILS.C ** 22 Feb 94 (MD) Excluded two routines if we are not READING directories ** 18 May 94 (HF) Directory stuff removed and stream handling updated, ** error messages introduced etc. ** HFN Separated transport ** ** Bugs: ** FTP: Cannot access VMS files from a unix machine. ** How can we know that the ** target machine runs VMS? */ /* Library Includes */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWDir.h" #include "WWWTrans.h" #include "HTReqMan.h" #include "HTBind.h" #include "HTMulti.h" #include "HTFile.h" /* Implemented here */ /* Final states have negative value */ typedef enum _FileState { FS_RETRY = -4, FS_ERROR = -3, FS_NO_DATA = -2, FS_GOT_DATA = -1, FS_BEGIN = 0, FS_PENDING, FS_DO_CN, FS_NEED_OPEN_FILE, FS_NEED_BODY, FS_PARSE_DIR, FS_TRY_FTP } FileState; /* This is the context structure for the this module */ typedef struct _file_info { FileState state; /* Current state of the connection */ char * local; /* Local representation of file name */ struct stat stat_info; /* Contains actual file chosen */ HTNet * net; HTTimer * timer; } file_info; struct _HTStream { const HTStreamClass * isa; }; struct _HTInputStream { const HTInputStreamClass * isa; }; PRIVATE HTDirReadme dir_readme = HT_DIR_README_TOP; PRIVATE HTDirAccess dir_access = HT_DIR_OK; PRIVATE HTDirShow dir_show = HT_DS_SIZE+HT_DS_DATE+HT_DS_DES+HT_DS_ICON; PRIVATE HTDirKey dir_key = HT_DK_CINS; PRIVATE BOOL file_suffix_binding = YES; /* ------------------------------------------------------------------------- */ /* Directory Access ** ---------------- */ PUBLIC BOOL HTFile_setDirAccess (HTDirAccess mode) { dir_access = mode; return YES; } PUBLIC HTDirAccess HTFile_dirAccess (void) { return dir_access; } /* Directory Readme ** ---------------- */ PUBLIC BOOL HTFile_setDirReadme (HTDirReadme mode) { dir_readme = mode; return YES; } PUBLIC HTDirReadme HTFile_dirReadme (void) { return dir_readme; } /* ** Should we find the bindings between file suffixes and media types ** here or not? */ PUBLIC BOOL HTFile_doFileSuffixBinding (BOOL mode) { file_suffix_binding = mode; return YES; } PUBLIC BOOL HTFile_fileSuffixBinding (void) { return file_suffix_binding; } /* HTFile_readDir ** -------------- ** Reads the directory "path" ** Returns: ** HT_ERROR Error ** HT_FORBIDDEN Directory reading not allowed ** HT_LOADED Successfully read the directory */ PRIVATE int HTFile_readDir (HTRequest * request, file_info *file) { #ifdef HAVE_READDIR DIR * dp; struct stat file_info; HTParentAnchor * anchor = HTRequest_anchor(request); char *url = HTAnchor_physical(anchor); char fullname[HT_MAX_PATH+1]; char *name; HTTRACE(PROT_TRACE, "Reading..... directory\n"); if (dir_access == HT_DIR_FORBID) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN, NULL, 0, "HTFile_readDir"); return HT_FORBIDDEN; } /* Initialize path name for stat() */ if (*(name = (url+strlen(url)-1)) != '/') { char *newurl = NULL; StrAllocCopy(newurl, url); StrAllocCat(newurl, "/"); HT_FREE(file->local); file->local = HTWWWToLocal(newurl, "", HTRequest_userProfile(request)); HT_FREE(newurl); } strcpy(fullname, file->local); name = fullname+strlen(fullname); /* Point to end of fullname */ /* Check if access is enabled */ if (dir_access == HT_DIR_SELECTIVE) { strcpy(name, DEFAULT_DIR_FILE); if (HT_STAT(fullname, &file_info)) { HTTRACE(PROT_TRACE, "Read dir.... `%s\' not found\n" _ DEFAULT_DIR_FILE); HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN, NULL, 0, "HTFile_readDir"); return HT_FORBIDDEN; } } if ((dp = opendir(file->local))) { struct dirent * dirbuf; HTDir *dir = HTDir_new(request, dir_show, dir_key); char datestr[20]; char sizestr[10]; HTFileMode mode; #ifdef HT_REENTRANT struct dirent result; /* For readdir_r */ #endif #ifdef HAVE_READDIR_R_2 while ((dirbuf = (struct dirent *) readdir_r(dp, &result))) #elif defined(HAVE_READDIR_R_3) while (readdir_r(dp, &result, &dirbuf) == 0) #else while ((dirbuf = readdir(dp))) #endif /* HAVE_READDIR_R_2 */ { /* Current and parent directories are never shown in list */ #ifdef HAVE_DIRENT_INO if (!dirbuf->d_ino || !strcmp(dirbuf->d_name, ".") || !strcmp(dirbuf->d_name, "..")) #else if (!strcmp(dirbuf->d_name, ".") || !strcmp(dirbuf->d_name, "..")) #endif continue; /* Make a lstat on the file */ strcpy(name, dirbuf->d_name); if (HT_LSTAT(fullname, &file_info)) { HTTRACE(PROT_TRACE, "Read dir.... lstat failed: %s\n" _ fullname); continue; } /* Convert stat info to fit our setup */ if (((mode_t) file_info.st_mode & S_IFMT) == S_IFDIR) { #ifdef VMS char *dot = strstr(name, ".DIR"); /* strip .DIR part... */ if (dot) *dot = '\0'; #endif /* VMS */ mode = HT_IS_DIR; if (dir_show & HT_DS_SIZE) strcpy(sizestr, "-"); } else { mode = HT_IS_FILE; if (dir_show & HT_DS_SIZE) HTNumToStr(file_info.st_size, sizestr, 10); } if (dir_show & HT_DS_DATE) HTDateDirStr(&file_info.st_mtime, datestr, 20); /* Add to the list */ if (HTDir_addElement(dir, name, datestr, sizestr, mode) != YES) break; } closedir(dp); HTDir_free(dir); return HT_LOADED; } else { HTRequest_addSystemError(request, ERR_FATAL, errno, NO, "opendir"); return HT_ERROR; } #else return HT_ERROR; /* needed for WWW_MSWINDOWS */ #endif /* HAVE_READDIR */ } /* Determine write access to a file ** -------------------------------- ** If stat_info is NULL then the function calls stat() on it's own, ** otherwise it uses the information found in stat_info ** On exit, ** return value YES if file can be accessed and can be written to. ** ** Bugs: ** 1. No code for non-unix systems. ** 2. Isn't there a quicker way? */ PRIVATE BOOL HTEditable (const char * filename, struct stat * stat_info) { #ifdef GETGROUPS_T int i; uid_t myUid; int ngroups; /* The number of groups */ struct stat fileStatus; struct stat *fileptr = stat_info ? stat_info : &fileStatus; GETGROUPS_T groups[NGROUPS]; if (!stat_info) { if (HT_STAT(filename, &fileStatus)) return NO; /* Can't even access file! */ } ngroups = getgroups(NGROUPS, groups); /* Groups to which I belong */ myUid = geteuid(); /* Get my user identifier */ #ifdef HTDEBUG if (PROT_TRACE) { int i; HTTRACE(PROT_TRACE, "File mode is 0%o, uid=%d, gid=%d. My uid=%d, %d groups (" _ (unsigned int) fileptr->st_mode _ (int) fileptr->st_uid _ (int) fileptr->st_gid _ (int) myUid _ ngroups); for (i=0; ist_mode & 0002) /* I can write anyway? */ return YES; if ((fileptr->st_mode & 0200) /* I can write my own file? */ && (fileptr->st_uid == myUid)) return YES; if (fileptr->st_mode & 0020) /* Group I am in can write? */ { for (i=0; ist_gid) return YES; } } HTTRACE(PROT_TRACE, "\tFile is not editable.\n"); return NO; /* If no excuse, can't do */ #else /* ** We don't know and can't find out. Can we be sure that when opening ** a file in mode "a" that the file is not modified? */ return NO; #endif /* GETGROUPS_T */ } /* FileCleanup ** ----------- ** This function closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE int FileCleanup (HTRequest *req, int status) { HTNet * net = HTRequest_net(req); file_info * file = (file_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(req); /* Free stream with data TO Local file system */ if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); HTRequest_setInputStream(req, NULL); } /* ** Remove if we have registered a timer function as a callback */ if (file->timer) { HTTimer_delete(file->timer); file->timer = NULL; } if (file) { HT_FREE(file->local); HT_FREE(file); } HTNet_delete(net, status); return YES; } /* Load a document ** --------------- ** ** On entry, ** request This is the request structure ** On exit, ** returns HT_ERROR Error has occured in call back ** HT_OK Call back was OK */ PRIVATE int FileEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadFile (SOCKET soc, HTRequest * request) { file_info *file; /* Specific access information */ HTNet * net = HTRequest_net(request); HTParentAnchor * anchor = HTRequest_anchor(request); HTTRACE(PROT_TRACE, "HTLoadFile.. Looking for `%s\'\n" _ HTAnchor_physical(anchor)); if ((file = (file_info *) HT_CALLOC(1, sizeof(file_info))) == NULL) HT_OUTOFMEM("HTLoadFILE"); file->state = FS_BEGIN; file->net = net; HTNet_setContext(net, file); HTNet_setEventCallback(net, FileEvent); HTNet_setEventParam(net, file); /* callbacks get http* */ return FileEvent(soc, file, HTEvent_BEGIN); /* get it started - ops is ignored */ } PRIVATE int ReturnEvent (HTTimer * timer, void * param, HTEventType type) { file_info * file = (file_info *) param; if (timer != file->timer) HTDEBUGBREAK("File timer %p not in sync\n" _ timer); HTTRACE(PROT_TRACE, "HTLoadFile.. Continuing %p with timer %p\n" _ file _ timer); /* ** Delete the timer */ HTTimer_delete(file->timer); file->timer = NULL; /* ** Now call the event again */ return FileEvent(INVSOC, file, HTEvent_READ); } PRIVATE int FileEvent (SOCKET soc, void * pVoid, HTEventType type) { file_info *file = pVoid; /* Specific access information */ int status = HT_ERROR; HTNet * net = file->net; HTRequest * request = HTNet_request(net); HTParentAnchor * anchor = HTRequest_anchor(request); /* ** Initiate a new file structure and bind to request structure ** This is actually state FILE_BEGIN, but it can't be in the state ** machine as we need the structure first. */ if (type == HTEvent_CLOSE) { /* Interrupted */ HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED, NULL, 0, "HTLoadFile"); FileCleanup(request, HT_INTERRUPTED); return HT_OK; } /* Now jump into the machine. We know the state from the previous run */ while (1) { switch (file->state) { case FS_BEGIN: /* We only support safe (GET, HEAD, etc) methods for the moment */ if (!HTMethod_isSafe(HTRequest_method(request))) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_NOT_ALLOWED, NULL, 0, "HTLoadFile"); file->state = FS_ERROR; break; } /* Check whether we have access to local disk at all */ if (HTLib_secure()) { HTTRACE(PROT_TRACE, "LoadFile.... No access to local file system\n"); file->state = FS_TRY_FTP; break; } file->local = HTWWWToLocal(HTAnchor_physical(anchor), "", HTRequest_userProfile(request)); if (!file->local) { file->state = FS_TRY_FTP; break; } /* Create a new host object and link it to the net object */ { HTHost * host = NULL; if ((host = HTHost_new("localhost", 0)) == NULL) return HT_ERROR; HTNet_setHost(net, host); if (HTHost_addNet(host, net) == HT_PENDING) { HTTRACE(PROT_TRACE, "HTLoadFile.. Pending...\n"); /* move to the hack state */ file->state = FS_PENDING; return HT_OK; } } file->state = FS_DO_CN; break; case FS_PENDING: /* ** 2025/08/10 JK : This is a funny state. Because of the ** internal libwww stacks, when doing multiple local ** requests (e.g., while using the Robot), we need to ask ** again for the host object. If we had jumped directly to ** the FS_DO_CN state, libwww would have blocked because ** of socket starvation. ** This state is similar to FS_BEGINNING, but just requests ** the host object. ** YES. THIS IS AN UGLY HACK!! */ { HTHost * host = NULL; if ((host = HTHost_new("localhost", 0)) == NULL) return HT_ERROR; HTNet_setHost(net, host); if (HTHost_addNet(host, net) == HT_PENDING) { HTTRACE(PROT_TRACE, "HTLoadFile.. Pending...\n"); file->state = FS_PENDING; return HT_OK; } } file->state = FS_DO_CN; break; case FS_DO_CN: /* ** If we have to do content negotiation then find the object that ** fits best into either what the client has indicated in the ** accept headers or what the client has registered on its own. ** The object chosen can in fact be a directory! However, content ** negotiation only makes sense if we can read the directory! ** We stat the file in order to find the size and to see it if ** exists. */ if (HTRequest_negotiation(request) && HTMethod_isSafe(HTRequest_method(request))) { char * conneg = HTMulti(request, file->local,&file->stat_info); if (conneg) { HT_FREE(file->local); file->local = conneg; HTAnchor_setPhysical(anchor, conneg); HTTRACE(PROT_TRACE, "Load File... Found `%s\'\n" _ conneg); } else { HTTRACE(PROT_TRACE, "Load File... Not found - even tried content negotiation\n"); HTRequest_addError(request, ERR_FATAL, NO, HTERR_NOT_FOUND, NULL, 0, "HTLoadFile"); file->state = FS_ERROR; break; } } else { if (HT_STAT(file->local, &file->stat_info) == -1) { HTTRACE(PROT_TRACE, "Load File... Not found `%s\'\n" _ file->local); HTRequest_addError(request, ERR_FATAL, NO, HTERR_NOT_FOUND, NULL, 0, "HTLoadFile"); file->state = FS_ERROR; break; } } /* ** Check to see if the 'localname' is in fact a directory. ** Note that we can't do a HEAD on a directory */ if (((file->stat_info.st_mode) & S_IFMT) == S_IFDIR) { if (HTRequest_method(request) == METHOD_GET) file->state = FS_PARSE_DIR; else { HTRequest_addError(request, ERR_INFO, NO, HTERR_NO_CONTENT, NULL, 0, "HTLoadFile"); file->state = FS_NO_DATA; } break; } /* ** If empty file then only serve it if it is editable. We also get ** the bindings for the file suffixes in lack of better bindings */ { BOOL editable = HTEditable(file->local, &file->stat_info); if (file_suffix_binding) HTBind_getAnchorBindings(anchor); if (editable) HTAnchor_appendAllow(anchor, METHOD_PUT); /* Set the file size */ if (file->stat_info.st_size) HTAnchor_setLength(anchor, file->stat_info.st_size); /* Set the file last modified time stamp */ if (file->stat_info.st_mtime > 0) HTAnchor_setLastModified(anchor, file->stat_info.st_mtime); /* Check to see if we can edit it */ if (!editable && !file->stat_info.st_size) { HTRequest_addError(request, ERR_INFO, NO, HTERR_NO_CONTENT, NULL, 0, "HTLoadFile"); file->state = FS_NO_DATA; } else { file->state = (HTRequest_method(request)==METHOD_GET) ? FS_NEED_OPEN_FILE : FS_GOT_DATA; } } break; case FS_NEED_OPEN_FILE: status = HTFileOpen(net, file->local, HT_FB_RDONLY); if (status == HT_OK) { /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ { HTStream * rstream = HTStreamStack(HTAnchor_format(anchor), HTRequest_outputFormat(request), HTRequest_outputStream(request), request, YES); HTNet_setReadStream(net, rstream); HTRequest_setOutputConnected(request, YES); } /* ** Create the stream pipe TO the channel from the application ** and hook it up to the request object */ { HTOutputStream * output = HTNet_getOutput(net, NULL, 0); HTRequest_setInputStream(request, (HTStream *) output); } /* ** Set up concurrent read/write if this request isn't the ** source for a PUT or POST. As source we don't start reading ** before all destinations are ready. If destination then ** register the input stream and get ready for read */ if (HTRequest_isSource(request) && !HTRequest_destinationsReady(request)) return HT_OK; HTRequest_addError(request, ERR_INFO, NO, HTERR_OK, NULL, 0, "HTLoadFile"); file->state = FS_NEED_BODY; /* If we are _not_ using preemptive mode and we are Unix fd's ** then return here to get the same effect as when we are ** connecting to a socket. That way, HTFile acts just like any ** other protocol module even though we are in fact doing ** blocking connect */ if (HTEvent_isCallbacksRegistered()) { if (!HTRequest_preemptive(request)) { if (!HTNet_preemptive(net)) { HTTRACE(PROT_TRACE, "HTLoadFile.. Returning\n"); HTHost_register(HTNet_host(net), net, HTEvent_READ); } else if (!file->timer) { HTTRACE(PROT_TRACE, "HTLoadFile.. Returning\n"); file->timer = HTTimer_new(NULL, ReturnEvent, file, 1, YES, NO); } return HT_OK; } } } else if (status == HT_WOULD_BLOCK || status == HT_PENDING) return HT_OK; else { HTRequest_addError(request, ERR_INFO, NO, HTERR_INTERNAL, NULL, 0, "HTLoadFile"); file->state = FS_ERROR; /* Error or interrupt */ } break; case FS_NEED_BODY: status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_LOADED || status == HT_CLOSED) { file->state = FS_GOT_DATA; } else { HTRequest_addError(request, ERR_INFO, NO, HTERR_FORBIDDEN, NULL, 0, "HTLoadFile"); file->state = FS_ERROR; } break; case FS_PARSE_DIR: status = HTFile_readDir(request, file); if (status == HT_LOADED) file->state = FS_GOT_DATA; else file->state = FS_ERROR; break; case FS_TRY_FTP: { char *url = HTAnchor_physical(anchor); HTAnchor *anchor; char *newname = NULL; StrAllocCopy(newname, "ftp:"); if (!strncmp(url, "file:", 5)) StrAllocCat(newname, url+5); else StrAllocCat(newname, url); anchor = HTAnchor_findAddress(newname); HTRequest_setAnchor(request, anchor); HT_FREE(newname); FileCleanup(request, HT_IGNORE); return HTLoad(request, YES); } break; case FS_GOT_DATA: FileCleanup(request, HT_LOADED); return HT_OK; break; case FS_NO_DATA: FileCleanup(request, HT_NO_DATA); return HT_OK; break; case FS_RETRY: FileCleanup(request, HT_RETRY); return HT_OK; break; case FS_ERROR: FileCleanup(request, HT_ERROR); return HT_OK; break; } } /* End of while(1) */ } libwww/Library/src/HTFile.html0100644000076400001440000000441006526451224015752 0ustar danielusers W3C Sample Code Library libwww Local File Access

    Local File Access

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    These are routines for local file access used by WWW browsers and servers.

    This module is implemented by HTFile.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTFILE_H
    #define HTFILE_H
    #include "HTProt.h"
    extern HTProtCallback HTLoadFile;
    

    Directory Access

    You can define the directory access for file URLs by using the following function.

    typedef enum _HTDirAccess {
        HT_DIR_FORBID,			/* Altogether forbidden */
        HT_DIR_SELECTIVE,			/* Only if "selfile" exists */
        HT_DIR_OK				/* Directory reading always OK */
    } HTDirAccess;
    #define DEFAULT_DIR_FILE	".www_browsable"    /* If exists, can browse */
    extern HTDirAccess  HTFile_dirAccess	(void);
    extern BOOL HTFile_setDirAccess		(HTDirAccess mode);
    

    Readme Files

    You can specify the module to look for a README file and to put into a directory listing. These are the possibilities:

    typedef enum _HTDirReadme {
        HT_DIR_README_NONE,
        HT_DIR_README_TOP,
        HT_DIR_README_BOTTOM
    } HTDirReadme;
    #define DEFAULT_README		"README"
    extern HTDirReadme  HTFile_dirReadme	(void);
    extern BOOL HTFile_setDirReadme		(HTDirReadme mode);
    

    Should we do Automatic File Suffix Binding?

    By default, libwww uses the file suffix bindings to figure out the media type, natural language, charset, content encoding, etc and assign the values to the anchor of the local file.

    However, in some situations, the application can either already have done this or isn't interested in using the libwww bindings. You can control whether libwww should do thi or not using the following methods:

    extern BOOL HTFile_doFileSuffixBinding (BOOL mode);
    extern BOOL HTFile_fileSuffixBinding (void);
    
    #endif /* HTFILE_H */
    


    @(#) $Id: HTFile.html,v 2.40 2025/05/14 02:10:28 frystyk Exp $
    libwww/Library/src/HTFilter.c0100644000076400001440000003303306700271013015567 0ustar danielusers/* ** BEFORE AND AFTER FILTERS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTFilter.c,v 2.38 2025/03/31 00:53:31 frystyk Exp $ ** ** This module implrments a set of default filters that can be registerd ** as BEFORE and AFTER filters to the Net manager ** Authors ** HFN Henrik Frystyk, frystyk@w.org ** History ** Jul 4, 96 Written */ /* Library include files */ #include "WWWLib.h" #include "WWWCache.h" #include "WWWHTTP.h" #include "HTLog.h" #include "HTAccess.h" #include "HTProxy.h" #include "HTRules.h" #include "HTFilter.h" /* Implemented here */ /* ------------------------------------------------------------------------- */ /* ** Proxy and Gateway BEFORE filter ** ------------------------------- ** Checks for registerd proxy servers or gateways and sees whether this ** request should be redirected to a proxy or a gateway. Proxies have ** higher priority than gateways so we look for them first! ** For HTTP/1.0 and HTTP/1.1 we may only send a full URL (including the ** host portion) to proxy servers. Therefore, we tell the Library whether ** to use the full URL or the traditional HTTP one without the host part. */ PUBLIC int HTProxyFilter (HTRequest * request, void * param, int mode) { HTParentAnchor * anchor = HTRequest_anchor(request); char * addr = HTAnchor_physical(anchor); char * physical = NULL; if ((physical = HTProxy_find(addr))) { HTRequest_setFullURI(request, YES); /* For now */ HTRequest_setProxy(request, physical); HT_FREE(physical); #if 0 /* Don't paste the URLs together anymore */ StrAllocCat(physical, addr); HTAnchor_setPhysical(anchor, physical); #endif } else if ((physical = HTGateway_find(addr))) { /* ** A gateway URL is crated by chopping off any leading "/" to make the ** host into part of path */ char * path = HTParse(addr, "", PARSE_HOST + PARSE_PATH + PARSE_PUNCTUATION); char * gatewayed = HTParse((*path=='/') ? path+1 : path, physical, PARSE_ALL); HTAnchor_setPhysical(anchor, gatewayed); HT_FREE(path); HT_FREE(gatewayed); HTRequest_setFullURI(request, NO); HTRequest_deleteProxy(request); } else { HTRequest_setFullURI(request, NO); /* For now */ HTRequest_deleteProxy(request); } return HT_OK; } /* ** Rule Translation BEFORE Filter ** ------------------------------ ** If we have a set of rules loaded (see the Rule manager) then check ** before each request whether how that should be translated. The trick ** is that a parent anchor has a "address" which is the part from the URL ** we used when we created the anchor. However, it also have a "physical ** address" which is the place we are actually going to look for the ** resource. Hence this filter translates the physical address ** (if any translations are found) */ PUBLIC int HTRuleFilter (HTRequest * request, void * param, int mode) { HTList * list = HTRule_global(); HTParentAnchor * anchor = HTRequest_anchor(request); char * addr = HTAnchor_physical(anchor); char * physical = HTRule_translate(list, addr, NO); if (!physical) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN, NULL, 0, "HTRuleFilter"); return HT_ERROR; } HTAnchor_setPhysical(anchor, physical); HT_FREE(physical); return HT_OK; } /* ** Check the Memory Cache (History list) BEFORE filter ** --------------------------------------------------- ** Check if document is already loaded. The user can define whether ** the history list should follow normal expiration or work as a ** traditional history list where expired documents are not updated. ** We don't check for anything but existence proof of a document ** associated with the anchor as the definition is left to the application */ PUBLIC int HTMemoryCacheFilter (HTRequest * request, void * param, int mode) { HTReload validation = HTRequest_reloadMode(request); HTParentAnchor * anchor = HTRequest_anchor(request); void * document = HTAnchor_document(anchor); /* ** We only check the memory cache if it's a GET method */ if (HTRequest_method(request) != METHOD_GET) { HTTRACE(CACHE_TRACE, "Mem Cache... We only check GET methods\n"); return HT_OK; } /* ** If we are asked to flush the persistent cache then there is no reason ** to do anything here - we're flushing it anyway. Also if no document ** then just exit from this filter. */ if (!document || validation > HT_CACHE_FLUSH_MEM) { HTTRACE(CACHE_TRACE, "Mem Cache... No fresh document...\n"); return HT_OK; } /* ** If we have a document object associated with this anchor then we also ** have the object in the history list. Depending on what the user asked, ** we can add a cache validator */ if (document && validation != HT_CACHE_FLUSH_MEM) { HTTRACE(CACHE_TRACE, "Mem Cache... Document already in memory\n"); return HT_LOADED; } return HT_OK; } /* ** Error and Information AFTER filter ** ---------------------------------- ** It checks the status code from a request and generates an ** error/information message if required. */ PUBLIC int HTInfoFilter (HTRequest * request, HTResponse * response, void * param, int status) { HTParentAnchor * anchor = HTRequest_anchor(request); char * uri = HTAnchor_address((HTAnchor*) anchor); switch (status) { case HT_RETRY: { HTAlertCallback *cbf = HTAlert_find(HT_A_MESSAGE); if (cbf) (*cbf)(request, HT_A_MESSAGE, HT_MSG_NULL, NULL, HTRequest_error(request), NULL); HTTRACE(PROT_TRACE, "Load End.... NOT AVAILABLE, RETRY AT %ld\n" _ HTResponse_retryTime(response)); } break; case HT_NO_DATA: { /* ** The document was empty */ HTAlertCallback *cbf = HTAlert_find(HT_A_MESSAGE); if (cbf) (*cbf)(request, HT_A_MESSAGE, HT_MSG_NULL, NULL, HTRequest_error(request), NULL); HTTRACE(PROT_TRACE, "Load End.... EMPTY: No content `%s\'\n" _ uri ? uri : ""); break; } case HT_LOADED: HTTRACE(PROT_TRACE, "Load End.... OK: `%s\'\n" _ uri); break; default: { /* ** See if we have a function registered for outputting errors. ** If so then call it and present the message to the user */ HTAlertCallback *cbf = HTAlert_find(HT_A_MESSAGE); if (cbf) (*cbf)(request, HT_A_MESSAGE, HT_MSG_NULL, NULL, HTRequest_error(request), NULL); HTTRACE(PROT_TRACE, "Load End.... Request ended with code %d\n" _ status); break; } } HT_FREE(uri); return HT_OK; } /* ** Redirection AFTER filter ** ------------------------ ** The redirection handler only handles redirections ** on the GET or HEAD method (or any other safe method) */ PUBLIC int HTRedirectFilter (HTRequest * request, HTResponse * response, void * param, int status) { HTMethod method = HTRequest_method(request); HTAnchor * new_anchor = HTResponse_redirection(response); /* Check for destination */ if (!new_anchor) { HTTRACE(PROT_TRACE, "Redirection. No destination\n"); return HT_OK; } /* ** Only do automatic redirect on GET and HEAD. Ask for all ** other methods. */ if (!HTMethod_isSafe(method)) { /* ** If we got a 303 See Other then change the method to GET. ** Otherwise ask the user whether we should continue. */ if (status == HT_SEE_OTHER) { HTTRACE(PROT_TRACE, "Redirection. Changing method from %s to GET\n" _ HTMethod_name(method)); HTRequest_setMethod(request, METHOD_GET); } else { HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM); if (prompt) { if ((*prompt)(request, HT_A_CONFIRM, HT_MSG_REDIRECTION, NULL, NULL, NULL) != YES) return HT_OK; } } } /* Register the redirection as a link relationship */ { HTLinkType ltype = status==HT_PERM_REDIRECT ? HT_LR_PERM_REDIRECT : (status==HT_TEMP_REDIRECT || status==HT_FOUND) ? HT_LR_TEMP_REDIRECT : status==HT_SEE_OTHER ? HT_LR_SEE_OTHER : NULL; if (ltype) { HTLink_add((HTAnchor *) HTRequest_anchor(request), new_anchor, ltype, method); } } /* Delete any auth credendials as they get regenerated */ HTRequest_deleteCredentialsAll(request); /* ** Start new request with the redirect anchor found in the headers. ** Note that we reuse the same request object which means that we must ** keep this around until the redirected request has terminated. It also ** allows us in an easy way to keep track of the number of redirections ** so that we can detect endless loops. */ if (HTRequest_doRetry(request)) { HTLoadAnchor(new_anchor, request); } else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_MAX_REDIRECT, NULL, 0, "HTRedirectFilter"); return HT_OK; /* Wanna fall through */ } /* ** By returning HT_ERROR we make sure that this is the last handler to be ** called. We do this as we don't want any other filter to delete the ** request object now when we have just started a new one ourselves */ return HT_ERROR; } /* ** Retry through Proxy AFTER Filter ** -------------------------------- ** This filter handles a 305 Use Proxy response and retries the request ** through the proxy */ PUBLIC int HTUseProxyFilter (HTRequest * request, HTResponse * response, void * param, int status) { HTAlertCallback * cbf = HTAlert_find(HT_A_CONFIRM); HTAnchor * proxy_anchor = HTResponse_redirection(response); if (!proxy_anchor) { HTTRACE(PROT_TRACE, "Use Proxy... No proxy location\n"); return HT_OK; } /* ** Add the proxy to the list. Assume HTTP access method only! ** Because evil servers may rediret the client to an untrusted ** proxy, we can only accept redirects for this particular ** server. Also, we do not know whether this is for HTTP or all ** other requests as well */ if ((cbf && (*cbf)(request, HT_A_CONFIRM, HT_MSG_PROXY, NULL,NULL,NULL))) { char * addr = HTAnchor_address(proxy_anchor); HTProxy_add("http", addr); HT_FREE(addr); /* ** Start new request through the proxy if we haven't reached the max ** number of redirections for this request */ if (HTRequest_doRetry(request)) { HTLoadAnchor(proxy_anchor, request); } else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_MAX_REDIRECT, NULL, 0, "HTRedirectFilter"); } /* ** By returning HT_ERROR we make sure that this is the last handler to be ** called. We do this as we don't want any other filter to delete the ** request object now when we have just started a new one ourselves */ return HT_ERROR; } else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_NO_AUTO_PROXY, NULL, 0, "HTUseProxyFilter"); return HT_OK; } } /* ** Client side authentication BEFORE filter ** ---------------------------------------- ** The filter generates the credentials required to access a document ** Getting the credentials may involve asking the user */ PUBLIC int HTCredentialsFilter (HTRequest * request, void * param, int mode) { /* ** Ask the authentication module to call the right credentials generator ** that understands this scheme */ if (HTAA_beforeFilter(request, param, mode) == HT_OK) { HTTRACE(PROT_TRACE, "Credentials. verified\n"); return HT_OK; } else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_UNAUTHORIZED, NULL, 0, "HTCredentialsFilter"); return HT_ERROR; } } /* ** Client side authentication AFTER filter ** --------------------------------------- ** The client side authentication filter uses the ** user dialog messages registered in the HTAlert module. ** By default these are the ones used by the line mode browser but you can ** just register something else. */ PUBLIC int HTAuthFilter (HTRequest * request, HTResponse * response, void * param, int status) { /* ** Ask the authentication module to call the right challenge parser ** that understands this scheme */ if (HTAA_afterFilter(request, response, param, status) == HT_OK) { /* ** Start request with new credentials. As with the redirection filter ** we reuse the same request object which means that we must ** keep this around until the redirected request has terminated */ HTLoad(request, NO); /* ** We return HT_ERROR to make sure that this is the last handler to be ** called. We do this as we don't want any other filter to delete the ** request object now when we have just started a new one ourselves */ return HT_ERROR; } return HT_OK; } /* ** Client side authentication info AFTER filter ** --------------------------------------- */ PUBLIC int HTAuthInfoFilter (HTRequest * request, HTResponse * response, void * param, int status) { /* ** Ask the authentication module to call the right authentication info ** parser */ if (! HTResponse_challenge (response)) return HT_OK; else if (HTAA_updateFilter(request, response, param, status) == HT_OK) return HT_OK; else return HT_ERROR; } /* ** Request Logging AFTER filter ** ---------------------------- ** Default Logging filter using the log manager provided by HTLog.c */ PUBLIC int HTLogFilter (HTRequest * request, HTResponse * response, void * param, int status) { if (request) { HTLog * log = (HTLog *) param; if (log) HTLog_addCLF(log, request, status); return HT_OK; } return HT_ERROR; } /* ** Request Referer AFTER filter ** ---------------------------- ** Default Referer Log filter using the log manager provided by HTLog.c */ PUBLIC int HTRefererFilter (HTRequest * request, HTResponse * response, void * param, int status) { if (request) { HTLog * log = (HTLog *) param; if (log) HTLog_addReferer(log, request, status); return HT_OK; } return HT_ERROR; } libwww/Library/src/HTFilter.html0100644000076400001440000001210606656075277016337 0ustar danielusers W3C Sample Code Library libwww BEFORE and AFTER Filters

    Standard BEFORE and AFTER Filters

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    This module provides a set of default BEFORE and AFTER filters that can be registered by the Net manager to be called before and after a request. All filters can be registered either to be called globally (all requests) or locally (pr request basis).

    This module is implemented by HTFilter.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTFILTER_H
    #define HTFILTER_H
    #include "WWWLib.h"
    

    BEFORE Filters

    This is a standard set of BEFORE filters which the application may initialize. This can be done in an easy way using the function HTBeforeInit() in the Initialization interface.

    Proxy and Gateway BEFORE filter

    Checks for registerd proxy servers or gateways and sees whether this request should be redirected to a proxy or a gateway. Proxies have higher priority than gateways so we look for them first! For HTTP/1.0 and HTTP/1.1 we may only send a full URL (including the host portion) to proxy servers. Therefore, we tell the Library whether to use the full URL or the traditional HTTP one without the host part.

    extern HTNetBefore HTProxyFilter;
    

    Rule Translation BEFORE Filter

    If we have a set of rules loaded (see the Rule manager) then check before each request whether how that should be translated. The trick is that a parent anchor has a "address" which is the part from the URL we used when we created the anchor. However, it also have a "physical address" which is the place we are actually going to look for the resource. Hence this filter translates from the address to the physical address (if any translations are found)

    extern HTNetBefore HTRuleFilter;
    

    Memory Cache (History List) Validation BEFORE Filter

    Check if document is already loaded. The user can define whether the history list should follow normal expiration or work as a traditional history list where expired documents are not updated. We don't check for anything but existence proof of a document associated with the anchor as the definition is left to the application.

    extern HTNetBefore HTMemoryCacheFilter;
    

    Client side authentication BEFORE filter

    The filter generates the credentials required to access a document Getting the credentials may involve asking the user in which case we use the methods registered by the HTAlert module

        
    extern HTNetBefore HTCredentialsFilter;
    

    AFTER Filters

    Like BEFORE filters we provide a default set of typical AFTER filters that may be initialized by the application. Again, an easy way of doing this is to call the HTAfterInit() function in the Initialization interface.

    Error and Information filter

    It checks the status code from a request and generates an error/information message if required.

    extern HTNetAfter HTInfoFilter;
    

    Redirection filter

    The redirection handler only handles automatic redirections on the GET or HEAD method (or any other safe method). The users is asked for all other methods.

    extern HTNetAfter HTRedirectFilter;
    

    Proxy Redirection filter

    This filter handles a "305 Use Proxy" response and retries the request through the proxy

    extern HTNetAfter HTUseProxyFilter;
    

    Client side authentication filter

    The client side authentication filter uses the user dialog messages registered in the HTAlert module. By default these are the ones used by the line mode browser but you can just register something else.

    extern HTNetAfter HTAuthFilter;
    

    Client side authentication information filter

    This filter updates the client's local authentication information database with new information sent by the server via the authentication-info header. This header is currently used only by the Digest authentication scheme. This filter is initialized by default, but you can just register something else.

    extern HTNetAfter HTAuthInfoFilter;
    

    Request Common Log File Filter

    Default Logging filter using the log manager provided by the Log Manager.

    extern HTNetAfter HTLogFilter;
    

    Request Referer Log File Filter

    Default Referer Log filter using the log manager provided by the Log Manager.

    extern HTNetAfter HTRefererFilter;
    
    #endif /* HTFILTER_H */
    


    @(#) $Id: HTFilter.html,v 2.13 2025/02/03 16:35:11 frystyk Exp $
    libwww/Library/src/HTFormat.c0100644000076400001440000006265206664352703015622 0ustar danielusers/* HTFormat.c ** MANAGE DIFFERENT FILE FORMATS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTFormat.c,v 1.100 2025/02/22 22:10:11 frystyk Exp $ ** ** Bugs: ** Assumes the incoming stream is ASCII, rather than a local file ** format, and so ALWAYS converts from ASCII on non-ASCII machines. ** Therefore, non-ASCII machines can't read local files. ** ** HISTORY: ** 8 Jul 94 FM Insulate free from _free structure element. ** 8 Nov 94 HFN Changed a lot to make reentrant */ /* Library Include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTStream.h" #include "HTWWWStr.h" #include "HTFWrite.h" #include "HTError.h" #include "HTFormat.h" /* Implemented here */ #define NO_VALUE_FOUND -1e30 /* Stream Stack Value if none found */ PRIVATE HTList * HTConversions = NULL; /* Content types */ PRIVATE HTList * HTContentCoders = NULL; /* Content coders */ PRIVATE HTList * HTTransferCoders = NULL; /* Content transfer coders */ PRIVATE HTList * HTCharsets = NULL; PRIVATE HTList * HTLanguages = NULL; PRIVATE double HTMaxSecs = 1e10; /* No effective limit */ PRIVATE HTConverter * presentation_converter = NULL; struct _HTStream { const HTStreamClass * isa; }; struct _HTCoding { HTEncoding encoding; HTCoder * encoder; HTCoder * decoder; double quality; }; PRIVATE HTStream HTBaseConverterStreamInstance; /* ------------------------------------------------------------------------- */ /* BASIC CONVERTERS */ /* ------------------------------------------------------------------------- */ PRIVATE int HTBlackHoleConverter_put_character (HTStream * me, char c) { return HT_OK; } PRIVATE int HTBlackHoleConverter_put_string (HTStream * me, const char * s) { return HT_OK; } PRIVATE int HTBlackHoleConverter_write (HTStream * me, const char * s, int l) { return HT_OK; } PRIVATE int HTBlackHoleConverter_flush (HTStream * me) { return HT_OK; } PRIVATE int HTBlackHoleConverter_free (HTStream * me) { return HT_OK; } PRIVATE int HTBlackHoleConverter_abort (HTStream * me, HTList * e) { return HT_ERROR; } PRIVATE const HTStreamClass HTBlackHoleConverterClass = { "BlackHoleConverter", HTBlackHoleConverter_flush, HTBlackHoleConverter_free, HTBlackHoleConverter_abort, HTBlackHoleConverter_put_character, HTBlackHoleConverter_put_string, HTBlackHoleConverter_write }; PUBLIC HTStream * HTBlackHoleConverter (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTTRACE(STREAM_TRACE, "BlackHole... Converter Created\n"); HTBaseConverterStreamInstance.isa = &HTBlackHoleConverterClass; return &HTBaseConverterStreamInstance; } /* HTThroughLine ** ------------- ** ** This function is a dummy function that returns the same output stream ** as given as a parameter. Henrik 01/03-94 */ PUBLIC HTStream* HTThroughLine (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { return output_stream; } /* HTSaveConverter ** ** This function is a place holder for a save to local file converter */ PUBLIC HTStream * HTSaveConverter (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { return HTBlackHole(); } PUBLIC HTStream * HTIdentityCoding (HTRequest * request, void * param, HTEncoding coding, HTStream * output_stream) { return output_stream; } /* ** For all `accept lists' there is a local list and a global list. The ** local list is a part of the request structure and the global list is ** internal to the HTFormat module. The global lists can be used when ** specifying accept lists for ALL requests and the local list can be ** used to add specific accept headers to the request. */ /* ------------------------------------------------------------------------- */ /* CONTENT TYPES */ /* ------------------------------------------------------------------------- */ PUBLIC void HTPresentation_setConverter (HTConverter * pconv) { presentation_converter = pconv; } PUBLIC HTConverter * HTPresentation_converter (void) { return presentation_converter; } /* Define a presentation system command for a content-type ** ------------------------------------------------------- ** INPUT: ** conversions: The list of conveters and presenters ** representation: the MIME-style format name ** command: the MAILCAP-style command template ** quality: A degradation faction [0..1] ** maxbytes: A limit on the length acceptable as input (0 infinite) ** maxsecs: A limit on the time user will wait (0 for infinity) */ PUBLIC void HTPresentation_add (HTList * conversions, const char * representation, const char * command, const char * test_command, double quality, double secs, double secs_per_byte) { HTPresentation * pres; if (presentation_converter) { if ((pres = (HTPresentation *) HT_CALLOC(1,sizeof(HTPresentation))) == NULL) HT_OUTOFMEM("HTSetPresentation"); pres->rep = HTAtom_for(representation); pres->rep_out = WWW_PRESENT; /* Fixed for now ... :-) */ pres->converter = presentation_converter; pres->quality = quality; pres->secs = secs; pres->secs_per_byte = secs_per_byte; pres->rep = HTAtom_for(representation); pres->command = NULL; StrAllocCopy(pres->command, command); pres->test_command = NULL; StrAllocCopy(pres->test_command, test_command); HTTRACE(CORE_TRACE, "Presentation Adding `%s\' with quality %.2f\n" _ command _ quality); HTList_addObject(conversions, pres); } } PUBLIC void HTPresentation_deleteAll (HTList * list) { if (list) { HTList *cur = list; HTPresentation *pres; while ((pres = (HTPresentation*) HTList_nextObject(cur))) { HT_FREE(pres->command); HT_FREE(pres); } HTList_delete(list); } } /* Define a built-in function for a content-type ** --------------------------------------------- */ PUBLIC void HTConversion_add (HTList * conversions, const char * representation_in, const char * representation_out, HTConverter * converter, double quality, double secs, double secs_per_byte) { HTPresentation * pres; if ((pres = (HTPresentation*) HT_CALLOC(1,sizeof(HTPresentation))) == NULL) HT_OUTOFMEM("HTSetPresentation"); pres->rep = HTAtom_for(representation_in); pres->rep_out = HTAtom_for(representation_out); pres->converter = converter; pres->command = NULL; /* Fixed */ pres->test_command = NULL; pres->quality = quality; pres->secs = secs; pres->secs_per_byte = secs_per_byte; HTTRACE(CORE_TRACE, "Conversions. Adding %p with quality %.2f\n" _ converter _ quality); HTList_addObject(conversions, pres); } PUBLIC void HTConversion_deleteAll (HTList * list) { HTPresentation_deleteAll(list); } /* ------------------------------------------------------------------------- */ /* CONTENT ENCODING AND CONTENT TRANSFER ENCODING */ /* ------------------------------------------------------------------------- */ PUBLIC BOOL HTCoding_add (HTList * list, const char * encoding, HTCoder * encoder, HTCoder * decoder, double quality) { if (list && encoding && (encoder || decoder)) { HTCoding * me; if ((me = (HTCoding *) HT_CALLOC(1, sizeof(HTCoding))) == NULL) HT_OUTOFMEM("HTCoding_add"); me->encoding = HTAtom_for(encoding); me->encoder = encoder; me->decoder = decoder; me->quality = quality; HTTRACE(CORE_TRACE, "Codings..... Adding %s with quality %.2f\n" _ encoding _ quality); return HTList_addObject(list, (void *) me); } HTTRACE(CORE_TRACE, "Codings..... Bad argument\n"); return NO; } PUBLIC void HTCoding_deleteAll (HTList * list) { if (list) { HTList * cur = list; HTCoding * pres; while ((pres = (HTCoding *) HTList_nextObject(cur))) HT_FREE(pres); HTList_delete(list); } } PUBLIC const char * HTCoding_name (HTCoding * me) { return me ? HTAtom_name(me->encoding) : NULL; } PUBLIC double HTCoding_quality (HTCoding * me) { return me ? me->quality : 0.0; } /* ------------------------------------------------------------------------- */ /* CONTENT LANGUAGE */ /* ------------------------------------------------------------------------- */ PUBLIC void HTLanguage_add (HTList * list, const char * lang, double quality) { HTAcceptNode * node; if (!list || !lang || !*lang) { HTTRACE(CORE_TRACE, "Languages... Bad argument\n"); return; } if ((node = (HTAcceptNode *) HT_CALLOC(1, sizeof(HTAcceptNode))) == NULL) HT_OUTOFMEM("HTAcceptLanguage"); HTList_addObject(list, (void*)node); node->atom = HTAtom_for(lang); node->quality = quality; } PUBLIC void HTLanguage_deleteAll (HTList * list) { if (list) { HTList *cur = list; HTAcceptNode *pres; while ((pres = (HTAcceptNode *) HTList_nextObject(cur))) { HT_FREE(pres); } HTList_delete(list); } } /* ------------------------------------------------------------------------- */ /* CONTENT CHARSET */ /* ------------------------------------------------------------------------- */ PUBLIC void HTCharset_add (HTList * list, const char * charset, double quality) { HTAcceptNode * node; if (!list || !charset || !*charset) { HTTRACE(CORE_TRACE, "Charset..... Bad argument\n"); return; } if ((node = (HTAcceptNode *) HT_CALLOC(1, sizeof(HTAcceptNode))) == NULL) HT_OUTOFMEM("HTAcceptCharsetuage"); HTList_addObject(list, (void*)node); node->atom = HTAtom_for(charset); node->quality = quality; } PUBLIC void HTCharset_deleteAll (HTList * list) { if (list) { HTList *cur = list; HTAcceptNode *pres; while ((pres = (HTAcceptNode *) HTList_nextObject(cur))) { HT_FREE(pres); } HTList_delete(list); } } /* ------------------------------------------------------------------------- */ /* GLOBAL LIST OF CONVERTERS ETC. */ /* ------------------------------------------------------------------------- */ /* ** Global Accept Format Types Conversions ** list can be NULL */ PUBLIC void HTFormat_setConversion (HTList * list) { HTConversions = list; } PUBLIC HTList * HTFormat_conversion (void) { return HTConversions; } PUBLIC void HTFormat_addConversion (const char * input_format, const char * output_format, HTConverter * converter, double quality, double secs, double secs_per_byte) { if (!HTConversions) HTConversions = HTList_new(); HTConversion_add(HTConversions, input_format, output_format, converter, quality, secs, secs_per_byte); } /* ** Global list of Content Encodings ** list can be NULL */ PUBLIC void HTFormat_setContentCoding (HTList *list) { HTContentCoders = list; } PUBLIC HTList * HTFormat_contentCoding (void) { return HTContentCoders; } PUBLIC BOOL HTFormat_addCoding ( char * encoding, HTCoder * encoder, HTCoder * decoder, double quality) { if (!HTContentCoders) HTContentCoders = HTList_new(); return HTCoding_add(HTContentCoders, encoding, encoder, decoder, quality); } /* ** Global list of Content Transfer Encodings ** list can be NULL */ PUBLIC void HTFormat_setTransferCoding (HTList *list) { HTTransferCoders = list; } PUBLIC HTList * HTFormat_transferCoding (void) { return HTTransferCoders; } PUBLIC BOOL HTFormat_addTransferCoding ( char * encoding, HTCoder * encoder, HTCoder * decoder, double quality) { if (!HTTransferCoders) HTTransferCoders = HTList_new(); return HTCoding_add(HTTransferCoders, encoding, encoder, decoder, quality); } /* ** Global Accept Languages ** list can be NULL */ PUBLIC void HTFormat_setLanguage (HTList *list) { HTLanguages = list; } PUBLIC HTList * HTFormat_language (void) { return HTLanguages; } /* ** Global Accept Charsets ** list can be NULL */ PUBLIC void HTFormat_setCharset (HTList *list) { HTCharsets = list; } PUBLIC HTList * HTFormat_charset (void) { return HTCharsets; } /* ** Convenience function to clean up */ PUBLIC void HTFormat_deleteAll (void) { if (HTConversions) { HTConversion_deleteAll(HTConversions); HTConversions = NULL; } if (HTLanguages) { HTLanguage_deleteAll(HTLanguages); HTLanguages = NULL; } if (HTContentCoders) { HTCoding_deleteAll(HTContentCoders); HTContentCoders = NULL; } if (HTTransferCoders) { HTCoding_deleteAll(HTTransferCoders); HTTransferCoders = NULL; } if (HTCharsets) { HTCharset_deleteAll(HTCharsets); HTCharsets = NULL; } } /* ------------------------------------------------------------------------- */ /* STREAM STACKS */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL better_match (HTFormat f, HTFormat g) { const char *p, *q; if (f && g && (p = HTAtom_name(f)) && (q = HTAtom_name(g))) { int i,j; for(i=0 ; *p; p++) if (*p == '*') i++; for(j=0 ; *q; q++) if (*q == '*') j++; if (i < j) return YES; } return NO; } /* Create a Content Type filter stack ** ---------------------------------- ** If a wildcard match is made, a temporary HTPresentation ** structure is made to hold the destination format while the ** new stack is generated. This is just to pass the out format to ** MIME so far. Storing the format of a stream in the stream might ** be a lot neater. ** ** The star/star format is special, in that if you can take ** that you can take anything. */ PUBLIC HTStream * HTStreamStack (HTFormat rep_in, HTFormat rep_out, HTStream * output_stream, HTRequest * request, BOOL guess) { HTList * conversion[2]; int which_list; double best_quality = -1e30; /* Pretty bad! */ HTPresentation *pres, *best_match=NULL; if (rep_out == WWW_RAW) { HTTRACE(CORE_TRACE, "StreamStack. Raw output...\n"); return output_stream ? output_stream : HTErrorStream(); } if (rep_out == rep_in) { HTTRACE(CORE_TRACE, "StreamStack. Identical input/output format (%s)\n" _ HTAtom_name(rep_out)); return output_stream ? output_stream : HTErrorStream(); } #ifdef HTDEBUG if (CORE_TRACE) { const char *p = HTAtom_name(rep_in); const char *q = HTAtom_name(rep_out); HTTRACE(CORE_TRACE, "StreamStack. Constructing stream stack for %s to %s\n" _ p ? p : "" _ q ? q : ""); } #endif /* HTDEBUG */ conversion[0] = HTRequest_conversion(request); conversion[1] = HTConversions; for(which_list = 0; which_list<2; which_list++) { HTList * cur = conversion[which_list]; while ((pres = (HTPresentation*)HTList_nextObject(cur))) { if ((pres->rep==rep_in || HTMIMEMatch(pres->rep, rep_in)) && (pres->rep_out==rep_out || HTMIMEMatch(pres->rep_out,rep_out))){ if (!best_match || better_match(pres->rep, best_match->rep) || (!better_match(best_match->rep, pres->rep) && pres->quality > best_quality)) { #ifdef HAVE_SYSTEM int result=0; if (pres->test_command) { result = system(pres->test_command); HTTRACE(CORE_TRACE, "StreamStack. system(%s) returns %d\n" _ pres->test_command _ result); } if (!result) { best_match = pres; best_quality = pres->quality; } #else best_match = pres; best_quality = pres->quality; #endif /* HAVE_SYSTEM */ } } } } if (best_match) { if (rep_out == WWW_SOURCE && best_match->rep_out != WWW_SOURCE) { HTTRACE(CORE_TRACE, "StreamStack. Source output\n"); return output_stream ? output_stream : HTErrorStream(); } return (*best_match->converter)(request, best_match->command, rep_in, rep_out, output_stream); } if (rep_out == WWW_SOURCE) { HTTRACE(CORE_TRACE, "StreamStack. Source output\n"); return output_stream ? output_stream : HTErrorStream(); } HTTRACE(CORE_TRACE, "StreamStack. NOT FOUND - error!\n"); return HTBlackHole(); } /* Find the cost of a filter stack ** ------------------------------- ** ** Must return the cost of the same stack which StreamStack would set up. ** ** On entry, ** length The size of the data to be converted */ PUBLIC double HTStackValue (HTList * theseConversions, HTFormat rep_in, HTFormat rep_out, double initial_value, long int length) { int which_list; HTList* conversion[2]; HTTRACE(CORE_TRACE, "StackValue.. Evaluating stream stack for %s worth %.3f to %s\n" _ HTAtom_name(rep_in) _ initial_value _ HTAtom_name(rep_out)); if (rep_out == WWW_SOURCE || rep_out == rep_in) return 0.0; conversion[0] = theseConversions; conversion[1] = HTConversions; for(which_list = 0; which_list<2; which_list++) if (conversion[which_list]) { HTList * cur = conversion[which_list]; HTPresentation * pres; while ((pres = (HTPresentation*)HTList_nextObject(cur))) { if (pres->rep == rep_in && (pres->rep_out == rep_out || HTMIMEMatch(pres->rep_out, rep_out))) { double value = initial_value * pres->quality; if (HTMaxSecs != 0.0) value = value - (length*pres->secs_per_byte + pres->secs) /HTMaxSecs; return value; } } } return NO_VALUE_FOUND; /* Really bad */ } /* Create a new coder and insert it into stream chain ** -------------------------------------------------- ** Creating the content decoding stack is not based on quality factors as ** we don't have the freedom as with content types. Specify whether you ** you want encoding or decoding using the BOOL "encode" flag. */ PUBLIC HTStream * HTContentCodingStack (HTEncoding encoding, HTStream * target, HTRequest * request, void * param, BOOL encode) { HTList * coders[2]; HTStream * top = target; HTCoding * pres = NULL; HTCoding * best_match = NULL; double best_quality = -1e30; /* Pretty bad! */ int cnt; if (!encoding || !request) { HTTRACE(CORE_TRACE, "Codings... Nothing applied...\n"); return target ? target : HTErrorStream(); } coders[0] = HTRequest_encoding(request); coders[1] = HTContentCoders; HTTRACE(CORE_TRACE, "C-E......... Looking for `%s\'\n" _ HTAtom_name(encoding)); for (cnt=0; cnt < 2; cnt++) { HTList * cur = coders[cnt]; while ((pres = (HTCoding *) HTList_nextObject(cur))) { if ((pres->encoding == encoding || HTMIMEMatch(pres->encoding, encoding)) && pres->quality > best_quality) { best_match = pres; best_quality = pres->quality; } } } if (best_match) { HTTRACE(CORE_TRACE, "C-E......... Found `%s\'\n" _ HTAtom_name(best_match->encoding)); if (encode) { if (best_match->encoder) top = (*best_match->encoder)(request, param, encoding, top); } else { if (best_match->decoder) top = (*best_match->decoder)(request, param, encoding, top); } } else if (!HTFormat_isUnityContent(encoding)) { /* ** If this is not a unity coding and we didn't find any coders ** that could handle it then put in a local file save stream ** instead of the stream that we got. */ if (encode) { HTTRACE(CORE_TRACE, "C-E......... NOT FOUND - can't encode stream!\n"); } else { HTTRACE(CORE_TRACE, "C-E......... NOT FOUND - error!\n"); top = HTBlackHole(); } } return top; } /* ** Here you can provide a complete list instead of a single token. ** The list has to filled up in the order the _encodings_ are to be applied */ PUBLIC HTStream * HTContentEncodingStack (HTList * encodings, HTStream * target, HTRequest * request, void * param) { if (encodings) { HTList * cur = encodings; HTEncoding pres; HTStream * top = target; while ((pres = (HTEncoding) HTList_nextObject(cur))) { top = HTContentCodingStack(pres, top, request, param, YES); if (top == HTBlackHole()) break; } return top; } return HTErrorStream(); } /* ** Here you can provide a complete list instead of a single token. ** The list has to be in the order the _encodings_ were applied - that ** is, the same way that _encodings_ are to be applied. This is all consistent ** with the order of the Content-Encoding header. */ PUBLIC HTStream * HTContentDecodingStack (HTList * encodings, HTStream * target, HTRequest * request, void * param) { if (encodings) { HTEncoding pres; int cnt = HTList_count(encodings); HTStream * top = target; while (cnt > 0) { pres = (HTEncoding) HTList_objectAt(encodings, --cnt); top = HTContentCodingStack(pres, top, request, param, NO); if (top == HTBlackHole()) break; } return top; } return HTErrorStream(); } /* Create a new coder and insert it into stream chain ** -------------------------------------------------- ** Creating the transfer decoding stack is not based on quality factors as ** we don't have the freedom as with content types. Specify whether you ** you want encoding or decoding using the BOOL "encode" flag. */ PUBLIC HTStream * HTTransferCodingStack (HTEncoding encoding, HTStream * target, HTRequest * request, void * param, BOOL encode) { HTList * coders[2]; HTStream * top = target; HTCoding * pres = NULL; int cnt; if (!encoding || !request) { HTTRACE(CORE_TRACE, "Codings... Nothing applied...\n"); return target ? target : HTErrorStream(); } coders[0] = HTRequest_transfer(request); coders[1] = HTTransferCoders; HTTRACE(CORE_TRACE, "C-E......... Looking for `%s\'\n" _ HTAtom_name(encoding)); for (cnt=0; cnt < 2; cnt++) { HTList * cur = coders[cnt]; while ((pres = (HTCoding *) HTList_nextObject(cur))) { if (pres->encoding == encoding || HTMIMEMatch(pres->encoding, encoding)) { HTTRACE(CORE_TRACE, "C-E......... Found...\n"); if (encode) { if (pres->encoder) top = (*pres->encoder)(request, param, encoding, top); break; } else if (pres->decoder) { top = (*pres->decoder)(request, param, encoding, top); break; } } } } /* ** If this is not a unity coding and we didn't find any coders ** that could handle it then put in a local file save stream ** instead of the stream that we got. */ if (!HTFormat_isUnityContent(encoding) && target==top) { if (encode) { HTTRACE(CORE_TRACE, "C-E......... NOT FOUND - can't encode stream!\n"); } else { HTTRACE(CORE_TRACE, "C-E......... NOT FOUND - error!\n"); top = HTBlackHole(); } } return top; } /* ** Here you can provide a complete list instead of a single token. ** The list has to filled up in the order the _encodings_ are to be applied */ PUBLIC HTStream * HTTransferEncodingStack (HTList * encodings, HTStream * target, HTRequest * request, void * param) { if (encodings) { HTList * cur = encodings; HTEncoding pres; HTStream * top = target; while ((pres = (HTEncoding) HTList_nextObject(cur))) { top = HTTransferCodingStack(pres, top, request, param, YES); if (top == HTBlackHole()) break; } return top; } return HTErrorStream(); } /* ** Here you can provide a complete list instead of a single token. ** The list has to be in the order the _encodings_ were applied - that ** is, the same way that _encodings_ are to be applied. This is all consistent ** with the order of the Content-Encoding header. */ PUBLIC HTStream * HTTransferDecodingStack (HTList * encodings, HTStream * target, HTRequest * request, void * param) { if (encodings) { HTEncoding pres; int cnt = HTList_count(encodings); HTStream * top = target; while (cnt > 0) { pres = (HTEncoding) HTList_objectAt(encodings, --cnt); top = HTTransferCodingStack(pres, top, request, param, NO); if (top == HTBlackHole()) break; } return top; } return HTErrorStream(); } /* Create a new transfer coder and insert it into stream chain ** ----------------------------------------------------------- ** Creating the content decoding stack is not based on quality factors as ** we don't have the freedom as with content types. Specify whether you ** you want encoding or decoding using the BOOL "encode" flag. */ PUBLIC HTStream * HTContentTransferCodingStack (HTEncoding encoding, HTStream * target, HTRequest * request, void * param, BOOL encode) { HTList * coders[2]; HTStream * top = target; HTCoding * pres = NULL; int cnt; if (!encoding || !request) { HTTRACE(CORE_TRACE, "C-T-E..... Nothing applied...\n"); return target ? target : HTErrorStream(); } /* ** We use the same encoders/decoders as for Transfer-Encodings */ coders[0] = HTRequest_transfer(request); coders[1] = HTTransferCoders; HTTRACE(CORE_TRACE, "C-T-E....... Looking for %s\n" _ HTAtom_name(encoding)); for (cnt=0; cnt < 2; cnt++) { HTList * cur = coders[cnt]; while ((pres = (HTCoding *) HTList_nextObject(cur))) { if (pres->encoding == encoding) { HTTRACE(CORE_TRACE, "C-T-E....... Found...\n"); if (encode) { if (pres->encoder) top = (*pres->encoder)(request, param, encoding, top); break; } else if (pres->decoder) { top = (*pres->decoder)(request, param, encoding, top); break; } } } } /* ** If this is not a unity coding and we didn't find any coders ** that could handle it then put in a local file save stream ** instead of the stream that we got. */ if (!HTFormat_isUnityTransfer(encoding) && target==top) { if (encode) { HTTRACE(CORE_TRACE, "C-T-E....... NOT FOUND - removing encoding!\n"); HTAnchor_setContentTransferEncoding(HTRequest_anchor(request), NULL); } else { HTTRACE(CORE_TRACE, "C-T-E....... NOT FOUND - error!\n"); top = HTBlackHole(); } } return top; } libwww/Library/src/HTFormat.html0100644000076400001440000006144507217441310016327 0ustar danielusers W3C Sample Code Library libwww Stream Pipe Manager

    The Stream Pipe Manager

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    

    The Stream Pipe Manager is responsible for setting up the stream pipe from the Channel Object to the Request Object when data is arriving, for example as a response to s HTTP Get request. As data arrives, we start to parse it and the more we know the more we can build up our stream pipe. For example, in the case of HTTP, we first have a stream that can parse the HTTP response line containing "200 OK". Then we have a MIME parser for handling the MIME headers. When the MIME headers have been parsed, we know the content type and any encoding of the MIME body. If we need to decode a chunked encoding then we set up a chunked decoder, and if we have to parse a HTML object then we set up a HTML parser.

    The Format Manager is also responsible for keeping track of the "preferences" of the application and/or user. It is an integral part of the Web and HTTP, that the client application can express its preferences as a set of "accept" headers in a HTTP request. This task is highly related to the task mentioned above as we there use the modules that are registered and here tell the remote server what we are capable of doing and what we would prefer.

    Note: The library core does not define any default decoders or parsers - they are all considered part of the application. The library comes with a default set of parsers including the ones mentioned above which can be initiated using the functions in HTInit module. There are different initialization functions for content type parsers and content encodings respectively.

    The application can assign its preferences in two ways: either locally to a single request or globally to all requests. The local assignment can either add to or override the global settings depending on how they are registered. All local registration is handled by the Request Object and the global registration is handled by the Format Manager.

    This module is implemented by HTFormat.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTFORMAT_H
    #define HTFORMAT_H
    #include "HTUtils.h"
    #include "HTStream.h"
    #include "HTAtom.h"
    #include "HTList.h"
    #include "HTAnchor.h"
    #include "HTReq.h"
    

    Converters and Presenters

    All content type converters are subclassed from the Generic stream objetc. That way, we allow the application to do very fast progressive display of incoming data. In other words, the stream model of the Library provides data as soon as it arrives from the network, the application does not have to wait until the whole document has been down loaded before it starts parsing it.

    Predefined Content Types

    These macros (which used to be constants) define some basic internally referenced representations. The www/xxx ones are of course not MIME standard. They are internal representations used in the Library but they can't be exported to other apps!

    #define WWW_INTERNAL	HTAtom_for("www/*")          /* All internal formats */
    

    WWW_INTERNAL represent all internal formats. This can for example be used to match using the HTMIMEMatch(...).

    #define WWW_RAW		HTAtom_for("www/void")   /* Raw output from Protocol */
    

    WWW_RAW is an output format which leaves the input untouched exactly as it is received by the protocol module. For example, in the case of FTP, this format returns raw ASCII objects for directory listings; for HTTP, everything including the header is returned, for Gopher, a raw ASCII object is returned for a menu etc.

    #define WWW_SOURCE	HTAtom_for("*/*")
    

    WWW_SOURCE is an output format which leaves the input untouched exactly as it is received by the protocol module IF not a suitable converter has been registered with a quality factor higher than 1 (for example 2). In this case the SUPER CONVERTER is preferred for the raw output. This can be used as a filter effect that allows conversion from, for example raw FTPdirectory listings into HTML but passes a MIME body untouched.

    #define WWW_PRESENT	HTAtom_for("www/present")
    

    WWW_PRESENT represents the user's perception of the document. If you convert to WWW_PRESENT, you present the material to the user.

    #define WWW_DEBUG	HTAtom_for("www/debug")
    

    WWW_DEBUG represents the user's perception of debug information, for example sent as a HTML document in a HTTP redirection message.

    #define WWW_UNKNOWN     HTAtom_for("www/unknown")
    

    WWW_UNKNOWN is a really unknown type. It differs from the real MIME type "application/octet-stream" in that we haven't even tried to figure out the content type at this point.

    #define WWW_CACHE         HTAtom_for("www/cache")
    #define WWW_CACHE_APPEND  HTAtom_for("www/cache-append")
    

    WWW_CACHE is the internal content-type designated for a persistent cache module which can store the object to local storage. The cache append format is special in that we append information to an already existing cache entry. This can happen if we have issued a If-Range request and got back a "206 Partial response".

    These are regular MIME types defined. Others can be added!

    #define WWW_HTML 	HTAtom_for("text/html")
    #define WWW_PLAINTEXT 	HTAtom_for("text/plain")
    #define WWW_FORM	HTAtom_for("application/x-www-form-urlencoded")
    #define WWW_MIME	HTAtom_for("message/rfc822")
    #define WWW_MIME_HEAD	HTAtom_for("message/x-rfc822-head")
    #define WWW_MIME_FOOT	HTAtom_for("message/x-rfc822-foot")
    #define WWW_MIME_PART   HTAtom_for("message/x-rfc822-partial")
    #define WWW_MIME_CONT   HTAtom_for("message/x-rfc822-cont")
    #define WWW_MIME_UPGRADE	HTAtom_for("message/x-rfc822-upgrade")
    #define WWW_MIME_COPYHEADERS HTAtom_for("www/x-rfc822-headers")
    #define WWW_AUDIO       HTAtom_for("audio/basic")
    #define WWW_VIDEO 	HTAtom_for("video/mpeg")
    #define WWW_GIF 	HTAtom_for("image/gif")
    #define WWW_JPEG 	HTAtom_for("image/jpeg")
    #define WWW_TIFF 	HTAtom_for("image/tiff")
    #define WWW_PNG 	HTAtom_for("image/png")
    #define WWW_BINARY 	HTAtom_for("application/octet-stream")
    #define WWW_POSTSCRIPT 	HTAtom_for("application/postscript")
    #define WWW_RICHTEXT 	HTAtom_for("application/rtf")
    

    We also have some MIME types that come from the various protocols when we convert from ASCII to HTML.

    #define WWW_GOPHER_MENU HTAtom_for("text/x-gopher")
    #define WWW_CSO_SEARCH	HTAtom_for("text/x-cso")
    #define WWW_FTP_LNST	HTAtom_for("text/x-ftp-lnst")
    #define WWW_FTP_LIST	HTAtom_for("text/x-ftp-list")
    #define WWW_NNTP_LIST   HTAtom_for("text/x-nntp-list")
    #define WWW_NNTP_OVER	HTAtom_for("text/x-nntp-over")
    #define WWW_NNTP_HEAD	HTAtom_for("text/x-nntp-head")
    #define WWW_HTTP	HTAtom_for("text/x-http")
    

    Finally we have defined a special format for our RULE files as they can be handled by a special converter.

    #define WWW_RULES	HTAtom_for("application/x-www-rules")
    

    The Quality Factor

    Characteristic for all preferences is that there is a quality factor associated with each member. The quality factor is a real number between 0 and 1 with 0 meaning "very bad" and 1 means "perfect". By registering a natural language or any or other preference in this group together with a quality factor you can specify "how well the preference is handled" either by the application or by the user. In the case of the user the quality factor of a natural language is how well the user understands the language. In my case, the quality factors for, for example Greek would be close to zero and 1 for Danish (nothing bad said about Greek!).

    It is a bit different for converters where it is often the application's ability of handling the data format rather than the user's perception. As an example it is often faster to use a converter than a presenter as it takes time to launch the external application and libwww can not use progressive display mechanisms which is often the case for converters. Therefore, as an example, if we capable of handling an image in png format inline but rely on an external viewer for presenting postscript, we might set up the following list:

    HTConversion_add (converters, "image", "www/present", GifPresenter, 1.0, 0.0, 0.0);
    HTPresentation_add (presenters, "application/postscript", "ghostview %s", NULL, 0.5, 0.0, 0.0);>

    where the gif converter is registered with a quality factor of 1.0 and the postscript presenter with a quality factor of 0.5.Register Presenters

    The Converter Class

    A converter is a stream with a special set of parameters and which is registered as capable of converting from a MIME type to something else (maybe another MIME-type). A converter is defined to be a function returning a stream and accepting the following parameters. The content type elements are atoms for which we have defined a prototype.

    typedef HTStream * HTConverter	(HTRequest *	request,
    				 void *		param,
    				 HTFormat	input_format,
    				 HTFormat	output_format,
    				 HTStream *	output_stream);
    extern void HTConversion_add   (HTList *	conversions,
    				const char * 	rep_in,
    				const char * 	rep_out,
    				HTConverter *	converter,
    				double		quality,
    				double		secs, 
    				double		secs_per_byte);
    extern void HTConversion_deleteAll	(HTList * list);
    

    The Presenter Class

    A presenter is a module (possibly an external program) which can present a graphic object of a certain MIME type to the user. That is, presenters are normally used to present objects that the converters are not able to handle. Data is transferred to the external program using a special "presenter stream" which for example can use the local disk to transfer the data from libwww to the external program.

    Libwww provides a default HTSaveAndExecute stream which you may want to use for this purpose. However, any stream that is of type HTConverter will do. You can manage the special presenter stream using the following methods:

    extern void HTPresentation_setConverter (HTConverter * pconv);
    extern HTConverter * HTPresentation_converter (void);
    
    Both presenters and converters are of the type HTConverter.
    extern void HTPresentation_add (HTList *	conversions,
    				const char * 	representation,
    				const char * 	command,
    				const char * 	test_command,
    				double		quality,
    				double		secs, 
    				double		secs_per_byte);
    extern void HTPresentation_deleteAll	(HTList * list);
    

    Basic Converters

    We have a small set of basic converters that can be hooked in anywhere. They don't "convert" anything but are nice to have.

    extern HTConverter HTThroughLine;
    extern HTConverter HTBlackHoleConverter;
    extern HTConverter HTSaveConverter;
    

    Content and Transfer Encoders and Decoders

    Content codins are transformations applied to an entity object after it was created in its original form. The Library handles two types of codings:

    Content Codings
    Content codings values indicate an encoding transformation that has been applied to a resource. Content cosings are primarily used to allow a document to be compressed or encrypted without loosing the identity of its underlying media type.
    Content Transfer Codings
    Content transfer codings values are used to indicate an encoding transformation that has been, can be, or may be need to be applied to an enity body in order to ensure safe transport through the network. This differs from a content coding in that the transfer coding is a property of the message, not the original message.

    Both types of encodings use the same registration mechanism in the Library which we describe below:

    Encoders and Decoders

    Encoders and decoders are subclassed from the generic stream class. Encoders are capable of adding a content coding to a data object and decoders can remove a content coding.

    typedef HTStream * HTCoder	(HTRequest *	request,
    				 void *		param,
    				 HTEncoding	coding,
    				 HTStream *	target);
    

    The encoding is the name of the encoding mechanism reporesented as an atom, for example "zip", "chunked", etc. Encodings are registered in lists and content encodings are separated from transfer encodings by registering them in different lists.

    Basic Encoders

    We have a small set of basic coders that can be hooked in anywhere.

    extern HTCoder HTIdentityCoding;
    

    The HTCoding Object

    The HTCoding object represents a registered encoding together with a encoder and a decoder.

    typedef struct _HTCoding HTCoding;
    

    Predefined Coding Types We have a set of pre defined atoms for various types of content encodings and transfer encodings. "chunked" is not exactly in the same group as the other encodings such as "binary" but it really doesn't make any difference as it is just a matter of how the words are chosen. The first three transfer encodings are actually not encodings - they are just left overs from brain dead mail systems.

    #define WWW_CODING_7BIT		HTAtom_for("7bit")
    #define WWW_CODING_8BIT		HTAtom_for("8bit")
    #define WWW_CODING_BINARY	HTAtom_for("binary")
    #define WWW_CODING_IDENTITY     HTAtom_for("identity")
    #define WWW_CODING_BASE64	HTAtom_for("base64")
    #define WWW_CODING_MACBINHEX	HTAtom_for("macbinhex")
    #define WWW_CODING_CHUNKED	HTAtom_for("chunked")
    #define WWW_CODING_COMPRESS	HTAtom_for("compress")
    #define WWW_CODING_GZIP	        HTAtom_for("gzip")
    #define WWW_CODING_DEFLATE      HTAtom_for("deflate")
    

    Register Content Coders

    Some documents are not send in their original data obejct but is encoded in some way. On the Web this is mostly some kind of compression but other encodings for example base 64 can be encountered when talking to NNTP servers etc. Just as for the other preferences, an application can register a supported encoders or decodes as a list. Encoders and decoders are registered in the same way with no differentiation whether it is a encoder or a decoder:

    extern BOOL HTCoding_add (HTList * 	list,
    			 const char *	encoding,
    			 HTCoder *	encoder,
    			 HTCoder *	decoder,
    			 double		quality);
    extern void HTCoding_deleteAll (HTList * list);
    extern const char * HTCoding_name (HTCoding * me);
    extern double HTCoding_quality (HTCoding * me);
    

    Content Charsets

    As the Web reaches all parts of the Internet there are more and more documents written in languages which contains characters not included in the ISO-8859-1 character set. A consequence of this the set of characters sets is often tightly connected with the natural language. libwww does not directly support other character sets but in case an application is capable of handling alternative sets it can register these as preferred character sets along with a quality factor just as all the other preferences in this section.

    extern void HTCharset_add (HTList * list, const char * charset, double quality);
    
    typedef struct _HTAcceptNode {
        HTAtom *	atom;
        double	quality;
    } HTAcceptNode;
    
    extern void HTCharset_deleteAll	(HTList * list);
    

    Content Languages

    The preferred natural language or languages is in almost all situations dependent on the individual user and an application should therefore give the user the opportunity to change the setup. When specifying a natural language preference, libwww will send this preference along with all HTTP requests. The remote server will then (it if supports this feature) look for a version in the language or languages mentioned. If it finds a matching document then it returns this one, otherwise it uses the best alternative. If no language is specified the remote server may whatever version it finds.

    extern void HTLanguage_add (HTList * list, const char * lang, double quality);
    extern void HTLanguage_deleteAll (HTList * list);
    

    Global Preferences

    There are two places where these preferences can be registered: in a global list valid for all requests and a local list valid for a particular request only. These are valid for all requests. See the Request Manager fro local sets.

    Global Converters and Presenters

    The global list of specific conversions which the format manager can do in order to fulfill the request. There is also a local list of conversions which contains a generic set of possible conversions.

    extern void HTFormat_setConversion	(HTList * list);
    extern HTList * HTFormat_conversion	(void);
    extern void HTFormat_addConversion (const char *	input_format,
    				    const char *	output_format,
    				    HTConverter *	converter,
    				    double		quality,
    				    double		secs, 
    				    double		secs_per_byte);
    

    Global Content Codings

    extern void HTFormat_setContentCoding	(HTList * list);
    extern HTList * HTFormat_contentCoding	(void);
    extern BOOL HTFormat_addCoding ( char *		encoding,
    				 HTCoder *	encoder,
    				 HTCoder *	decoder,
    				 double		quality);
    

    We also define a macro to find out whether a content encoding is really an encoding or whether it is a unity encoder.

    #define HTFormat_isUnityContent(me) \
    	((me)==NULL || \
    	(me)==WWW_CODING_BINARY || (me)==WWW_CODING_IDENTITY || \
            (me)==WWW_CODING_7BIT || (me)==WWW_CODING_8BIT)
    

    Global Transfer Codings

    extern void HTFormat_setTransferCoding	(HTList * list);
    extern HTList * HTFormat_transferCoding	(void);
    extern BOOL HTFormat_addTransferCoding ( char *		encoding,
    					 HTCoder *	encoder,
    					 HTCoder *	decoder,
    					 double		quality);
    

    We also define a macro to find out whether a transfer encoding is really an encoding or whether it is just a "dummy" as for example 7bit, 8bit, and binary.

    #define HTFormat_isUnityTransfer(me) \
    	((me)==NULL || \
    	 (me)==WWW_CODING_BINARY || (me)==WWW_CODING_IDENTITY || \
             (me)==WWW_CODING_7BIT || (me)==WWW_CODING_8BIT)
    

    Global Content Languages

    extern void HTFormat_setLanguage	(HTList * list);
    extern HTList * HTFormat_language	(void);
    

    Global Content Charsets

    extern void HTFormat_setCharset		(HTList * list);
    extern HTList * HTFormat_charset	(void);
    

    Delete All Global Lists

    This is a convenience function that might make life easier.

    extern void HTFormat_deleteAll (void);
    

    The Content Type Stream Stack

    This is the routine which actually sets up the content type conversion. It currently checks only for direct conversions, but multi-stage conversions are forseen. It takes a stream into which the output should be sent in the final format, builds the conversion stack, and returns a stream into which the data in the input format should be fed. If guess is true and input format is www/unknown, try to guess the format by looking at the first few bytes of the stream.

    extern HTStream * HTStreamStack (HTFormat	rep_in,
    				 HTFormat	rep_out,
    				 HTStream *	output_stream,
    				 HTRequest *	request,
    				 BOOL		guess);
    

    Cost of a Stream Stack

    Must return the cost of the same stack which HTStreamStack would set up.

    extern double HTStackValue	(HTList *	conversions,
    				 HTFormat	format_in,
    				 HTFormat	format_out,
    				 double		initial_value,
    				 long int	length);
    

    Content Encoding Stream Stack

    When creating a coding stream stack, it is important that we keep the right order of encoders and decoders. As an example, the HTTP spec specifies that the list in the Content-Encoding header follows the order in which the encodings have been applied to the object. Internally, we represent the content encodings as atoms in a linked list object.

    The creation of the content coding stack is not based on quality factors as we don't have the freedom as with content types. When using content codings we must apply the codings specified or fail.

    extern HTStream * HTContentCodingStack (HTEncoding	coding,
    					HTStream *	target,
    					HTRequest *	request,
    					void *		param,
    					BOOL		encoding);
    

    Here you can provide a complete list instead of a single token. The list has to be filled up in the order the _encodings_ are to be applied

    extern HTStream * HTContentEncodingStack (HTList *	encodings,
    					  HTStream *	target,
    					  HTRequest *	request,
    					  void *	param);
    

    Here you can provide a complete list instead of a single token. The list has to be in the order the _encodings_ were applied - that is, the same way that _encodings_ are to be applied. This is all consistent with the order of the Content-Encoding header.

    extern HTStream * HTContentDecodingStack (HTList *	encodings,
    					  HTStream *	target,
    					  HTRequest *	request,
    					  void *	param);
    

    Transfer Encoding Stream Stack

    When creating a coding stream stack, it is important that we keep the right order of encoders and decoders. As an example, the HTTP spec specifies that the list in the Transfer-Encoding header follows the order in which the encodings have been applied to the object. Internally, we represent the content encodings as atoms in a linked list object.

    The creation of the content coding stack is not based on quality factors as we don't have the freedom as with content types. When using content codings we must apply the codings specified or fail.

    extern HTStream * HTTransferCodingStack (HTEncoding	coding,
    					 HTStream *	target,
    					 HTRequest *	request,
    					 void *		param,
    					 BOOL		encoding);
    

    Here you can provide a complete list instead of a single token. The list has to be filled up in the order the _encodings_ are to be applied

    extern HTStream * HTTransferEncodingStack (HTList *	encodings,
    					   HTStream *	target,
    					   HTRequest *	request,
    					   void *	param);
    

    Here you can provide a complete list instead of a single token. The list has to be in the order the _encodings_ were applied - that is, the same way that _encodings_ are to be applied. This is all consistent with the order of the Transfer-Encoding header.

    extern HTStream * HTTransferDecodingStack (HTList *	encodings,
    					  HTStream *	target,
    					  HTRequest *	request,
    					  void *	param);
    

    Transfer Encoding Stream Stack

    Creating the transfer content encoding stream stack is not based on quality factors as we don't have the freedom as with content types. Specify whether you you want encoding or decoding using the BOOL "encode" flag.

    extern HTStream * HTContentTransferCodingStack (HTEncoding	encoding,
    					        HTStream *	target,
    					        HTRequest *	request,
    					        void *		param,
    					        BOOL		encode);
    

    Presentation Object

    This object is not to be used - it should have been hidden 

    typedef struct _HTPresentation {
        HTFormat	rep;			     /* representation name atomized */
        HTFormat	rep_out;			 /* resulting representation */
        HTConverter *converter;	      /* The routine to gen the stream stack */
        char *	command;			       /* MIME-format string */
        char *	test_command;			       /* MIME-format string */
        double	quality;		     /* Between 0 (bad) and 1 (good) */
        double	secs;
        double	secs_per_byte;
    } HTPresentation;
    
    #endif /* HTFORMAT */
    


    @(#) $Id: HTFormat.html,v 2.85 2025/12/18 17:00:56 kahan Exp $
    libwww/Library/src/HTGopher.c0100644000076400001440000005503706740672640015615 0ustar danielusers/* HTGopher.c ** GOPHER ACCESS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** ** History: ** 26 Sep 90 Adapted from other accesses (News, HTTP) TBL ** 29 Nov 91 Downgraded to C, for portable implementation. ** 28 Apr 94 target no more global and icons implemented ** HF, frystyk@w3.org ** 2 May 94 Fixed possible security hole when the URL contains ** a newline, that could cause multiple commands to be ** sent to a Gopher server. AL, luotonen@www.cern.ch ** 12 May 94 Checked and made ready for multi-threads, Frystyk ** 8 Jul 94 FM Insulate free() from _free structure element. ** Sep 95 HFN Made non-blocking and state stream oriented */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWHTML.h" #include "WWWDir.h" #include "WWWTrans.h" #include "HTNetMan.h" #include "HTGopher.h" /* Implemented here */ /* Macros and other defines */ #ifndef GOPHER_PORT #define GOPHER_PORT 70 /* See protocol spec */ #endif /* Hypertext object building machinery */ #define PUTC(c) (*target->isa->put_character)(target, c) #define PUTS(s) (*target->isa->put_string)(target, s) #define START(e) (*target->isa->start_element)(target, e, 0, 0) #define END(e) (*target->isa->end_element)(target, e) /* Type definitions and global variables etc. local to this module */ typedef enum _HTGopherType { GT_TEXT = '0', GT_MENU = '1', GT_CSO = '2', GT_ERROR = '3', GT_MACBINHEX = '4', GT_PCBINHEX = '5', GT_UUENCODED = '6', GT_INDEX = '7', GT_TELNET = '8', GT_BINARY = '9', GT_GIF = 'g', GT_HTML = 'h', /* HTML */ GT_INFO = 'i', GT_SOUND = 's', GT_WWW = 'w', /* W3 address */ GT_IMAGE = 'I', GT_TN3270 = 'T', GT_DUPLICATE = '+', GT_PLUS_IMAGE = ':', /* Addition from Gopher Plus */ GT_PLUS_MOVIE = ';', GT_PLUS_SOUND = '<', GT_EOF = '.' } HTGopherType; /* Final states have negative value */ typedef enum _GopherState { GOPHER_ERROR = -3, GOPHER_NO_DATA = -2, GOPHER_GOT_DATA = -1, GOPHER_BEGIN = 0, GOPHER_NEED_CONNECTION, GOPHER_NEED_REQUEST, GOPHER_NEED_RESPONSE } GopherState; /* This is the context structure for the this module */ typedef struct _gopher_info { HTGopherType type; /* Gopher item type */ GopherState state; char * cmd; HTNet * net; } gopher_info; #define MAX_GOPHER_LINE 256 struct _HTStructured { const HTStructuredClass * isa; }; struct _HTStream { const HTStreamClass * isa; HTStructured * target; HTRequest * request; HTEOLState state; char * url; BOOL pre; /* Preformatted mode? */ BOOL junk; /* For too long lines */ BOOL CSO; char cso_rec[10]; /* CSO record number */ char buffer[MAX_GOPHER_LINE+1]; int buflen; }; struct _HTInputStream { const HTInputStreamClass * isa; }; PRIVATE HTDirShow dir_show = HT_DS_ICON; /* ------------------------------------------------------------------------- */ /* GopherIcon ** ---------- ** This function finds an appopriate icon for the item in the gopher ** list. Actually it is only a shell build upon HTIcon_find(). */ PRIVATE HTIconNode *GopherIcon (HTGopherType type) { HTFormat content_type = NULL; HTEncoding content_encoding = NULL; HTFileMode mode = HT_IS_FILE; switch(type) { case GT_MENU: mode = HT_IS_DIR; case GT_TEXT: content_type = HTAtom_for("text/void"); break; case GT_IMAGE: case GT_PLUS_IMAGE: case GT_GIF: content_type = HTAtom_for("image/void"); break; case GT_WWW: case GT_HTML: content_type = HTAtom_for("text/void"); break; case GT_SOUND: case GT_PLUS_SOUND: content_type = HTAtom_for("audio/void"); break; case GT_PLUS_MOVIE: content_type = HTAtom_for("video/void"); break; case GT_INDEX: content_type = HTAtom_for("application/x-gopher-index"); break; case GT_CSO: content_type = HTAtom_for("application/x-gopher-cso"); break; case GT_TELNET: content_type = HTAtom_for("application/x-gopher-telnet"); break; case GT_TN3270: content_type = HTAtom_for("application/x-gopher-tn3270"); break; case GT_DUPLICATE: content_type = HTAtom_for("application/x-gopher-duplicate"); break; case GT_ERROR: content_type = HTAtom_for("www/unknown"); break; case GT_BINARY: content_type = WWW_BINARY; break; default: content_type = HTAtom_for("www/unknown"); break; } return HTIcon_find(mode, content_type, content_encoding); } /* ------------------------------------------------------------------------- */ /* STREAMS */ /* ------------------------------------------------------------------------- */ /* GopherTitle ** ----------- ** Create the top part of the page */ PRIVATE BOOL GopherTitle (HTStream *me) { HTStructured *target = me->target; char *str = NULL; StrAllocCopy(str, me->CSO ? "CSO Search " : "GopherMenu"); START(HTML_HTML); START(HTML_HEAD); START(HTML_TITLE); if (me->CSO) { char *keyword = strchr(me->url, '?'); if (keyword) { StrAllocCat(str, "for "); StrAllocCat(str, ++keyword); } } PUTS(str); END(HTML_TITLE); END(HTML_HEAD); START(HTML_BODY); START(HTML_H1); PUTS(str); END(HTML_H1); HT_FREE(str); return YES; } /* GopherBottom ** ------------ ** Create the bottom part of the page */ PRIVATE BOOL GopherBottom (HTStream *me) { HTStructured *target = me->target; if (me->pre) END(HTML_PRE); END(HTML_BODY); END(HTML_HTML); return YES; } /* GopherMenuLine ** -------------- ** Parses a Gopher Menu Line ** Return YES if more data else NO */ PRIVATE BOOL GopherMenuLine (HTStream *me, char *line) { HTStructured *target = me->target; HTGopherType gtype = (HTGopherType) *line++; HTTRACE(PROT_TRACE, "HTGopher.... Menu line: `%s\'\n" _ line); if (gtype == GT_INFO) { char *stop = strchr(line, '\t'); if (stop) *stop = '\0'; PUTS(line); } else if (gtype == GT_ERROR) { char *stop = strchr(line, '\t'); if (stop) *stop = '\0'; PUTS(line); } else if ((strstr(line, "error.host") || strstr(line, "errorhost"))) { char *stop = strchr(line, '\t'); /* Chop off error.host */ if (stop) *stop = '\0'; PUTS(line); } else if (gtype == GT_EOF) { return NO; } else { /* Parse normal gopher menu line */ char *name = line; /* Get link information */ char *selector = strchr(name, '\t'); char *host = NULL; char *port = NULL; if (selector) { *selector++ = '\0'; if ((host = strchr(selector, '\t'))) { *host++ = '\0'; if ((port = strchr(host, '\t'))) { char *junk; *port = ':'; /* delimit host a la W3 */ if ((junk = strchr(port, '\t')) != NULL) *junk = '\0'; /* Chop port */ if (*(port+1) == '0' && !*(port+2)) *port = '\0'; } } } if (!me->pre) { /* For now we use preformatted listing */ START(HTML_PRE); me->pre = YES; } if (dir_show & HT_DS_ICON) { /* Put out the icon */ HTIconNode *icon = GopherIcon(gtype); if (icon) { char * alt = HTIcon_alternative(icon, YES); HTMLPutImg(target, HTIcon_url(icon), alt, NULL); HT_FREE(alt); PUTC(' '); } } if (gtype == GT_WWW) { /* Gopher pointer to W3 */ char *escaped = NULL; escaped = HTEscape(selector, URL_PATH); HTStartAnchor(target, NULL, escaped); PUTS(name); END(HTML_A); HT_FREE(escaped); } else if (port) { /* Other types need port */ char *escaped = NULL; char *address = NULL; int addr_len; /* Calculate the length of the WWW-address */ if (selector && *selector) { escaped = HTEscape(selector, URL_PATH); addr_len = 15 + strlen(escaped) + strlen(host) + 1; } else { addr_len = 15 + strlen(host) + 1; } if ((address = (char *) HT_MALLOC(addr_len)) == NULL) HT_OUTOFMEM("GopherMenuLine"); *address = '\0'; if (gtype == GT_TELNET) { if (escaped) sprintf(address, "telnet://%s@%s/", escaped, host); else sprintf(address, "telnet://%s/", host); } else if (gtype == GT_TN3270) { if (escaped) sprintf(address, "tn3270://%s@%s/", escaped, host); else sprintf(address, "tn3270://%s/", host); } else { if (escaped) sprintf(address, "//%s/%c%s", host, gtype, escaped); else sprintf(address, "//%s/%c", host, gtype); } HTStartAnchor(target, NULL, address); PUTS(name); END(HTML_A); HT_FREE(address); HT_FREE(escaped); PUTC('\n'); } else { /* If parse error */ HTTRACE(PROT_TRACE, "HTGopher.... Bad menu item, `%s\'\n" _ line); } } return YES; } /* GopherCSOLine ** -------------- ** Parses a Gopher Menu Line ** Return YES if more data else NO */ PRIVATE BOOL GopherCSOLine (HTStream *me, char *line) { HTStructured *target = me->target; if (*line == '1') { /* Information line */ char *start = strchr(line, ':'); if (start) start++; else start=line; PUTS(start); } else if (*line == '2') { /* Transfer complete */ return NO; } else if (*line == '5') { /* Error */ char *start = strchr(line, ':'); if (start) start++; else start=line; PUTS(start); } else if (*line == '-') { /* data */ /* data lines look like '-200:code:field:value' * where code is the search result number and can be * multiple digits (infinte?) * find the second colon and check the digit to the * left of it to see if they are diferent * if they are then a different person is starting. */ char *code; char *field; if ((code = strchr(line, ':')) && (field = strchr(++code, ':'))) { BOOL newrec = YES; *field++ = '\0'; if (!*me->cso_rec) { /* Header of first record */ START(HTML_DL); } else if (strcmp(me->cso_rec, code)) { /* Another new record */ START(HTML_B); } else newrec = NO; START(HTML_DT); /* I'm not sure whether the name field comes in any * special order or if its even required in a * record, so for now the first line is the header * no matter what it is (it's almost always the * alias) */ { char *value = strchr(field, ':'); if (!value) value = "Empty value"; else *value++ = '\0'; { char *strip = HTStrip(field); PUTS(strip); START(HTML_DD); strip = HTStrip(value); if (newrec) { PUTS(strip); END(HTML_B); } else PUTS(strip); } /* Save the code for comparison on the next pass */ strcpy(me->cso_rec, code); } } } else { /* Unknown line */ char *start = strchr(line, ':'); if (start) start++; else start=line; PUTS(start); } return YES; } /* ** Searches for Gopher line until buffer fills up or a CRLF or LF is found */ PRIVATE int GopherMenu_put_block (HTStream * me, const char * b, int l) { while (l-- > 0) { if (me->state == EOL_FCR) { if (*b == LF && me->buflen) { if (!me->junk) { BOOL cont; *(me->buffer+me->buflen) = '\0'; cont = me->CSO ? GopherCSOLine(me, me->buffer) : GopherMenuLine(me, me->buffer); if (cont == NO) return HT_LOADED; } else me->junk = NO; /* back to normal */ } me->buflen = 0; me->state = EOL_BEGIN; } else if (*b == CR) { me->state = EOL_FCR; } else if (*b == LF && me->buflen) { if (!me->junk) { BOOL cont; *(me->buffer+me->buflen) = '\0'; cont = me->CSO ? GopherCSOLine(me, me->buffer) : GopherMenuLine(me, me->buffer); if (cont == NO) return HT_LOADED; } else me->junk = NO; /* back to normal */ me->buflen = 0; me->state = EOL_BEGIN; } else { *(me->buffer+me->buflen++) = *b; if (me->buflen >= MAX_GOPHER_LINE) { HTTRACE(PROT_TRACE, "Gopher...... Line too long - ignored\n"); me->buflen = 0; me->junk = YES; } } b++; } return HT_OK; } PRIVATE int GopherMenu_put_string (HTStream * me, const char* s) { return GopherMenu_put_block(me, s, (int) strlen(s)); } PRIVATE int GopherMenu_put_character (HTStream * me, char c) { return GopherMenu_put_block(me, &c, 1); } PRIVATE int GopherMenu_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int GopherMenu_free (HTStream * me) { int status = HT_OK; GopherBottom(me); if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; HT_FREE(me); return HT_OK; } PRIVATE int GopherMenu_abort (HTStream * me, HTList * e) { (*me->target->isa->abort)(me->target, e); HT_FREE(me); HTTRACE(PROT_TRACE, "Gopher...... ABORTING...\n"); return HT_ERROR; } /* Goper Menu Stream ** ----------------- */ PRIVATE const HTStreamClass GopherMenuClass = { "GopherMenu", GopherMenu_flush, GopherMenu_free, GopherMenu_abort, GopherMenu_put_character, GopherMenu_put_string, GopherMenu_put_block }; /* ** Stream for creating a HTML object out of a Gopher Menu object */ PRIVATE HTStream * GopherMenu_new (HTRequest * request, char *url, BOOL CSO) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("GopherMenu_new"); me->isa = &GopherMenuClass; me->target = HTMLGenerator(request, NULL, WWW_HTML, HTRequest_outputFormat(request), HTRequest_outputStream(request)); HTAnchor_setFormat(HTRequest_anchor(request), WWW_HTML); me->request = request; me->state = EOL_BEGIN; me->url = url; me->CSO = CSO; GopherTitle(me); return me; } /* ------------------------------------------------------------------------- */ /* GOPHER STATE MACHINE */ /* ------------------------------------------------------------------------- */ /* GopherCleanup ** ------------- ** This function closes the connection and frees memory. ** Returns YES if OK, else NO */ PRIVATE BOOL GopherCleanup (HTRequest * request, int status) { HTNet * net = HTRequest_net(request); gopher_info * gopher = (gopher_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(request); /* Free stream with data TO network */ if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); } /* Remove the request object and our own context structure for gopher */ HTNet_delete(net, status); if (gopher) { HT_FREE(gopher->cmd); HT_FREE(gopher); } return YES; } /* Display a Gopher Index document ** ------------------------------- ** We create a small HTML object as we have no network activity */ PRIVATE void display_index (HTRequest * request) { HTParentAnchor * anchor = HTRequest_anchor(request); HTStructured *target = HTMLGenerator(request, NULL, WWW_HTML, HTRequest_outputFormat(request), HTRequest_outputStream(request)); /* Update anchor information */ HTAnchor_setFormat(anchor, WWW_HTML); HTAnchor_setTitle(anchor, "Searchable Gopher Index"); /* @@@ We don't set Content-Length */ START(HTML_HTML); START(HTML_HEAD); START(HTML_TITLE); PUTS("Searchable Gopher Index"); END(HTML_TITLE); END(HTML_HEAD); START(HTML_BODY); START(HTML_H1); PUTS("Searchable Gopher Index"); END(HTML_H1); START(HTML_ISINDEX); END(HTML_BODY); END(HTML_HTML); (*target->isa->_free)(target); } /* Display a CSO index document ** ------------------------------- ** We create a small HTML object as we have no network activity */ PRIVATE void display_cso (HTRequest * request) { HTParentAnchor * anchor = HTRequest_anchor(request); HTStructured *target = HTMLGenerator(request, NULL, WWW_HTML, HTRequest_outputFormat(request), HTRequest_outputStream(request)); /* Update anchor information */ HTAnchor_setFormat(anchor, WWW_HTML); HTAnchor_setTitle(anchor, "Searchable SCO Index"); /* @@@ We don't set Content-Length */ START(HTML_HTML); START(HTML_HEAD); START(HTML_TITLE); PUTS("Searchable Index of a CSO Name Server"); END(HTML_TITLE); END(HTML_HEAD); START(HTML_BODY); START(HTML_H1); PUTS("Searchable Index of a CSO Name Server"); END(HTML_H1); PUTS("A CSO Name Server usually provides directory information about people."); START(HTML_ISINDEX); END(HTML_BODY); END(HTML_HTML); (*target->isa->_free)(target); } /* HTLoadGopher ** ------------ ** Given a hypertext address, this routine loads a gopher document ** ** On entry, ** request This is the request structure ** On Exit ** returns HT_ERROR Error has occured in call back ** HT_OK Call back was OK */ PRIVATE int GopherEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadGopher (SOCKET soc, HTRequest * request) { gopher_info * gopher; HTNet * net = HTRequest_net(request); HTParentAnchor * anchor = HTRequest_anchor(request); char * url = HTAnchor_physical(anchor); /* ** Initiate a new gopher structure and bind to request structure ** This is actually state GOPHER_BEGIN, but it can't be in the state ** machine as we need the structure first. */ HTTRACE(PROT_TRACE, "Gopher...... Looking for `%s\'\n" _ url); if ((gopher = (gopher_info *) HT_CALLOC(1, sizeof(gopher_info))) == NULL) HT_OUTOFMEM("HTLoadGopher"); gopher->type = GT_MENU; gopher->state = GOPHER_BEGIN; gopher->net = net; HTNet_setContext(net, gopher); HTNet_setEventCallback(net, GopherEvent); HTNet_setEventParam(net, gopher); /* callbacks get http* */ return GopherEvent(soc, gopher, HTEvent_BEGIN); /* get it started - ops is ignored */ } PRIVATE int GopherEvent (SOCKET soc, void * pVoid, HTEventType type) { gopher_info * gopher = (gopher_info *)pVoid; int status = HT_ERROR; HTNet * net = gopher->net; HTRequest * request = HTNet_request(net); HTParentAnchor * anchor = HTRequest_anchor(request); HTHost * host = HTNet_host(net); char * url = HTAnchor_physical(anchor); if (type == HTEvent_CLOSE) { /* Interrupted */ GopherCleanup(request, HT_INTERRUPTED); return HT_OK; } else gopher = (gopher_info *) HTNet_context(net); /* Get existing copy */ /* Now jump into the machine. We know the state from the previous run */ while (1) { switch (gopher->state) { case GOPHER_BEGIN: /* Get entity type, and selector string */ { char *path = HTParse(url, "", PARSE_PATH); char *selector = path; char *query = NULL; char *separator = NULL; if (*selector) gopher->type = (HTGopherType) *selector++; if (gopher->type == GT_INDEX) { HTAnchor_setIndex(anchor); /* Is index */ query = strchr(selector, '?'); /* Display local cover page only if no search requested */ if (!query || !*(query+1)) { /* No search required */ display_index(request); gopher->state = GOPHER_GOT_DATA; HT_FREE(path); break; } else { *query++ = 0; /* Skip '?' */ separator = "\t"; } } else if (gopher->type == GT_CSO) { HTAnchor_setIndex(anchor); /* Search is allowed */ query = strchr(selector, '?'); /* Look for search string */ /* Display local cover page only if no search requested */ if (!query || !*(query+1)) { /* No search required */ display_cso(request); gopher->state = GOPHER_GOT_DATA; HT_FREE(path); break; } else { *query++ = 0; /* Skip '?' */ *selector = 0; separator = "query "; } } /* Now generate the final command */ { char crlf[3]; StrAllocCopy(gopher->cmd, selector); if (query) { char *p; for (p=query; *p; p++) /* Remove plus signs 921006 */ if (*p == '+') *p = ' '; StrAllocCat(gopher->cmd, separator); StrAllocCat(gopher->cmd, query); } HTUnEscape(gopher->cmd); HTCleanTelnetString(gopher->cmd); /* Prevent sec holes */ *crlf = CR; /* Telnet termination */ *(crlf+1) = LF; *(crlf+2) = '\0'; StrAllocCat(gopher->cmd, crlf); } HT_FREE(path); gopher->state = GOPHER_NEED_CONNECTION; } break; case GOPHER_NEED_CONNECTION: status = HTHost_connect(host, net, url); host = HTNet_host(net); if (status == HT_OK) { /* ** Check the protocol class to see if we have connected to a ** the right class of server, in this case HTTP. */ { HTHost * host = HTNet_host(net); char * s_class = HTHost_class(host); if (s_class && strcasecomp(s_class, "gopher")) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, NULL, 0, "HTLoadGopher"); gopher->state = GOPHER_ERROR; break; } HTHost_setClass(host, "gopher"); } /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ { if (gopher->type == GT_MENU || gopher->type == GT_INDEX) net->readStream = GopherMenu_new(request, url, NO); else if (gopher->type == GT_CSO) net->readStream = GopherMenu_new(request, url, YES); else net->readStream = HTStreamStack(WWW_UNKNOWN, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, NO); HTRequest_setOutputConnected(request, YES); } /* ** Create the stream pipe TO the channel from the application ** and hook it up to the request object */ { HTOutputStream * output = HTNet_getOutput(net, NULL, 0); HTRequest_setInputStream(request, (HTStream *) output); } gopher->state = GOPHER_NEED_REQUEST; } else if (status == HT_WOULD_BLOCK) return HT_OK; else gopher->state = GOPHER_ERROR; break; case GOPHER_NEED_REQUEST: HTTRACE(PROT_TRACE, "Gopher Tx... `%s\'" _ gopher->cmd); { HTStream * input = HTRequest_inputStream(request); status = (*input->isa->put_block) (input, gopher->cmd, strlen(gopher->cmd)); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_ERROR) gopher->state = GOPHER_ERROR; else gopher->state = GOPHER_NEED_RESPONSE; } break; case GOPHER_NEED_RESPONSE: status = HTHost_read(net->host, net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_LOADED || status == HT_CLOSED) gopher->state = GOPHER_GOT_DATA; else gopher->state = GOPHER_ERROR; break; case GOPHER_GOT_DATA: GopherCleanup(request, HT_LOADED); return HT_OK; break; case GOPHER_NO_DATA: GopherCleanup(request, HT_NO_DATA); return HT_OK; break; case GOPHER_ERROR: GopherCleanup(request, HT_ERROR); return HT_OK; break; } } /* while(1) */ } libwww/Library/src/HTGopher.html0100644000076400001440000000135706526451226016330 0ustar danielusers W3C Sample Code Library libwww GOPHER CLIENT

    Gopher Access

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */
    
    This module also cantains the CSO Name Server access via Gopher.

    This module is implemented by HTGopher.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTGOPHER_H
    #define HTGOPHER_H
    #include "HTProt.h"
    extern HTProtCallback HTLoadGopher;
    #endif
    

    @(#) $Id: HTGopher.html,v 2.27 2025/05/14 02:10:30 frystyk Exp $
    libwww/Library/src/HTGuess.c0100644000076400001440000001670406664352703015455 0ustar danielusers/* HTGuess.c ** STREAM TO GUESS CONTENT-TYPE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTGuess.c,v 2.36 2025/02/22 22:10:11 frystyk Exp $ ** ** This version of the stream object just writes its input ** to its output, but prepends Content-Type: field and an ** empty line after it. ** ** HISTORY: ** 8 Jul 94 FM Insulate free() from _free structure element. ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWLib.h" #include "WWWFile.h" #include "HTGuess.h" #define SAMPLE_SIZE 200 /* Number of chars to look at */ /* Stream Object ** ------------ */ struct _HTStream { const HTStreamClass * isa; HTRequest * request; HTResponse * response; HTFormat output_format; HTStream * output_stream; HTStream * target; BOOL transparent; int cnt; int text_cnt; int lf_cnt; int cr_cnt; int pg_cnt; int ctrl_cnt; int high_cnt; char * write_ptr; char buffer[ SAMPLE_SIZE + 1 ]; }; #define PUT_CHAR(c) (*me->target->isa->put_character)(me->target,(c)) #define PUT_STRING(s) (*me->target->isa->put_string)(me->target,(s)) #define PUT_BLOCK(b,l) (*me->target->isa->put_block)(me->target,(b),(l)) /* ------------------------------------------------------------------------- */ PRIVATE BOOL is_html (char * buf) { char * p = strchr(buf,'<'); if (p && (!strncasecomp(p, "", 6) || !strncasecomp(p, "", 7) || !strncasecomp(p, "", 6) || !strncasecomp(p, "", 11) || (p[0]=='<' && TOUPPER(p[1]) == 'H' && p[3]=='>'))) return YES; else return NO; } PRIVATE int HTGuess_flush (HTStream * me) { if (!me->transparent) { HTResponse * response = me->response; /* ** First we look for magic tokens and evaluate the contents of the buffer ** that we are investigating. */ if (me->cnt) { HTTRACE(STREAM_TRACE, "GUESSING.... Result of content analysis: Text=%d%% Newlines=%d%% Ctrl=%d%% High=%d%%\n" _ (int)(100*me->text_cnt/me->cnt + 0.5) _ (int)(100*me->lf_cnt /me->cnt + 0.5) _ (int)(100*me->ctrl_cnt/me->cnt + 0.5) _ (int)(100*me->high_cnt/me->cnt + 0.5)); } if (!me->ctrl_cnt || me->text_cnt + me->lf_cnt >= 16 * (me->ctrl_cnt + me->high_cnt)) { char *ptr; /* some kind of text */ *me->write_ptr = 0; /* terminate buffer */ if (me->high_cnt > 0) HTResponse_setContentTransferEncoding(response, WWW_CODING_8BIT); else HTResponse_setContentTransferEncoding(response, WWW_CODING_7BIT); if (is_html(me->buffer)) HTResponse_setFormat(response, HTAtom_for("text/html")); else if (!strncmp(me->buffer, "%!", 2)) HTResponse_setFormat(response, HTAtom_for("application/postscript")); else if (strstr(me->buffer, "#define") && strstr(me->buffer, "_width") && strstr(me->buffer, "_bits")) HTResponse_setFormat(response, HTAtom_for("image/x-xbitmap")); else if ((ptr = strstr(me->buffer, "converted with BinHex"))!=NULL) HTResponse_setContentTransferEncoding(response, WWW_CODING_MACBINHEX); else if (!strncmp(me->buffer, "begin ", 6)) HTResponse_setContentTransferEncoding(response, WWW_CODING_BASE64); else HTResponse_setFormat(response, WWW_PLAINTEXT); } else { if (!strncmp(me->buffer, "GIF", 3)) HTResponse_setFormat(response, WWW_GIF); else if (!strncmp(me->buffer, "\377\330\377\340", 4)) HTResponse_setFormat(response, WWW_JPEG); else if (!strcmp(me->buffer, "MM")) /* MM followed by a zero */ HTResponse_setFormat(response, WWW_TIFF); else if (!strncmp(me->buffer, "\211PNG\r\n\032\n", 8)) HTResponse_setFormat(response, WWW_PNG); else if (!strncmp(me->buffer, ".snd", 4)) HTResponse_setFormat(response, WWW_AUDIO); else if (!strncmp(me->buffer, "\037\235", 2)) HTResponse_addEncoding(response, WWW_CODING_COMPRESS); else if (!strncmp(me->buffer, "\037\213", 2)) HTResponse_addEncoding(response, WWW_CODING_GZIP); else HTResponse_setFormat(response, WWW_BINARY); } /* ** If we couldn't find any magic tokens then we try and look at the suffix ** of the URL file name and use our own bindings to see if that gives any ** results. */ if (HTResponse_format(response) == WWW_UNKNOWN) { HTParentAnchor * anchor = HTRequest_anchor(me->request); char * addr = HTAnchor_physical(anchor); HTTRACE(STREAM_TRACE, "GUESSING.... Hmm - trying local bindings\n"); HTBind_getResponseBindings (response, addr); } /* ** If nothing worked then give up and say binary... */ if (HTResponse_format(response) == WWW_UNKNOWN) { HTTRACE(STREAM_TRACE, "GUESSING.... That's it - I'm giving up!\n"); HTResponse_setFormat(response, WWW_BINARY); } HTTRACE(STREAM_TRACE, "Guessed..... Content-Type `%s\'\n" _ HTAtom_name(HTResponse_format(response))); /* ** Set up the new stream stack with the type we figured out */ if ((me->target = HTStreamStack(HTResponse_format(response), me->output_format, me->output_stream, me->request, NO)) == NULL) { HTTRACE(STREAM_TRACE, "HTGuess..... Can't convert media type\n"); me->target = HTErrorStream(); } me->transparent = YES; return PUT_BLOCK(me->buffer, me->cnt); } return HT_OK; } PRIVATE int HTGuess_put_block (HTStream * me, const char * b, int l) { while (!me->transparent && l-- > 0) { int status; if (me->target) { if ((status = HTGuess_flush(me)) != HT_OK) return status; } else { me->cnt++; if (*b == LF) me->lf_cnt++; else if (*b == CR) me->cr_cnt++; else if (*b == 12) me->pg_cnt++; else if (*b =='\t') me->text_cnt++; else if ((unsigned char)*b < 32) me->ctrl_cnt++; else if ((unsigned char)*b < 128) me->text_cnt++; else me->high_cnt++; *me->write_ptr++ = *b++; if (me->cnt >= SAMPLE_SIZE) { if ((status = HTGuess_flush(me)) != HT_OK) return status; } } } if (l > 0) return PUT_BLOCK(b, l); return HT_OK; } PRIVATE int HTGuess_put_character (HTStream * me, char c) { return HTGuess_put_block(me, &c, 1); } PRIVATE int HTGuess_put_string (HTStream * me, const char * s) { return HTGuess_put_block(me, s, (int) strlen(s)); } PRIVATE int HTGuess_free (HTStream * me) { int status; if (!me->transparent && (status = HTGuess_flush(me)) != HT_OK) return status; else me->transparent = YES; if ((status = (*me->target->isa->_free)(me->target)) != HT_OK) return status; HT_FREE(me); return HT_OK; } PRIVATE int HTGuess_abort (HTStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target, e); HT_FREE(me); return HT_ERROR; } /* Guessing stream ** --------------- */ PRIVATE const HTStreamClass HTGuessClass = { "GuessWhat", HTGuess_flush, HTGuess_free, HTGuess_abort, HTGuess_put_character, HTGuess_put_string, HTGuess_put_block }; PUBLIC HTStream * HTGuess_new (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1,sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTGuess_new"); me->isa = &HTGuessClass; me->request = request; me->response = HTRequest_response(request); me->output_format = output_format; me->output_stream = output_stream; me->write_ptr = me->buffer; return me; } ������������������������������������������������������������libwww/Library/src/HTGuess.html���������������������������������������������������������������������0100644�0000764�0000144�00000002220�06526451227�016161� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> <TITLE>W3C Sample Code Library libwww Content-Type Guessing Stream</TITLE> </HEAD> <BODY> <H1> Content-Type Guessing Stream </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This interface provides functionality for guessing unknown media types from magic words. The stream is a one that reads first a chunk of stuff, tries to figure out the format, and calls <CODE>HTStreamStack()</CODE>. This is a kind of lazy-evaluation of <CODE>HTStreamStack()</CODE>. <P> This could be extended arbitrarily to recognize all the possible file formats in the world, if someone only had time to do it. <P> This module is implemented by <A HREF="HTGuess.c">HTGuess.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTGUESS_H #define HTGUESS_H #include "HTStream.h" #include "HTFormat.h" extern HTConverter HTGuess_new; #endif /* !HTGUESS_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTGuess.html,v 2.18 2025/05/14 02:10:31 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHInit.c������������������������������������������������������������������������0100644�0000764�0000144�00000002404�06523414310�015355� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** CONFIGURATION-SPECIFIC INITIALIALIZATION FOR HTML PARSER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTHInit.c,v 2.3 2025/05/04 19:36:40 frystyk Exp $ ** ** Set up the HTML parsers in libwww */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTHInit.h" /* Implemented here */ /* ------------------------------------------------------------------------- */ /* BINDINGS BETWEEN A SOURCE MEDIA TYPE AND A DEST MEDIA TYPE (CONVERSION) ** ---------------------------------------------------------------------- ** Not done automaticly - may be done by application! */ PUBLIC void HTMLInit (HTList * c) { /* ** This set of converters uses the HTML/HText interface. ** If you do not want this interface then replace them! */ HTConversion_add(c,"text/html", "www/present", HTMLPresent, 1.0, 0.0, 0.0); HTConversion_add(c,"text/plain", "www/present", HTPlainPresent, 1.0, 0.0, 0.0); HTConversion_add(c,"text/html", "text/x-c", HTMLToC, 0.5, 0.0, 0.0); HTConversion_add(c,"text/html", "text/plain", HTMLToPlain, 0.5, 0.0, 0.0); HTConversion_add(c,"text/html", "text/latex", HTMLToTeX, 1.0, 0.0, 0.0); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHInit.html���������������������������������������������������������������������0100644�0000764�0000144�00000004151�06526451227�016113� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 14-Jun-1996 --> <TITLE>W3C Sample Code Library libwww Default HTML Parser Initialization</TITLE> </HEAD> <BODY> <H1> Default HTML Parser Initialization Methods </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> As mentioned in the <A HREF="../User/Architecture/">Library Architecture</A>, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing <A HREF="http://info.internet.isi.edu:80/in-notes/rfc/files/rfc822.txt">RFC 822</A> headers etc. This module helps the application programmer setting up the <B>HTML parser</B>, but it is important to note that none of it is <I>required</I> in order to use the Library. <P> This module is implemented by <A HREF="HTHInit.c">HTInit.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. You can also have a look at the other <A HREF="WWWInit.html">Initialization modules</A>. <PRE> #ifndef HTHINIT_H #define HTHINIT_H #include "WWWLib.h" </PRE> <H2> Default HTML Parsers </H2> <P> The <EM>Converters</EM> are used to convert a media type to another media type, or to present it on screen. This is a part of the stream stack algorithm. The Presenters are also used in the stream stack, but are initialized separately. <PRE> #include "HTML.h" /* Uses HTML/HText interface */ #include "HTPlain.h" /* Uses HTML/HText interface */ #include "HTTeXGen.h" #include "HTMLGen.h" extern void HTMLInit (HTList * conversions); </PRE> <PRE>#endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTHInit.html,v 2.4 2025/05/14 02:10:31 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHash.c�������������������������������������������������������������������������0100644�0000764�0000144�00000010707�07144727763�015255� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** HASH TABLE CLASS ** ** This HashTable class implements a simple hash table to keep ** objects associated with key words. ** ** Author: ** JP John Punin ** */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTHash.h" /* ( Creation and Deletion Methods ) These methods create and deletes a Hash Table */ PUBLIC HTHashtable * HTHashtable_new (int size) { HTHashtable *newHashtable; int c = size > 0 ? size : HT_L_HASH_SIZE; if ((newHashtable = (HTHashtable *) HT_CALLOC(1, sizeof (HTHashtable))) == NULL) HT_OUTOFMEM("HTHashtable_new"); if((newHashtable->table = (void **) HT_CALLOC(c, sizeof (void *))) == NULL) HT_OUTOFMEM("HTHashtable_new"); newHashtable->count = 0; newHashtable->size = c; return newHashtable; } PUBLIC BOOL HTHashtable_delete (HTHashtable *me) { if (me) { int i; for(i = 0; i< me->size; i++) { HTList * l = (HTList *)me->table[i]; if (l) { HTList *cur = l; keynode *kn; while ((kn = (keynode *) HTList_nextObject(cur))) { HT_FREE(kn->key); HT_FREE(kn); } HTList_delete(l); } } HT_FREE(me->table); HT_FREE(me); return YES; } return NO; } PRIVATE int hash_number (const char *key, int size) { int hash = 0; if (key) { const char * ptr = key; for(; *ptr; ptr++) hash = (int) ((hash*3 + (*(unsigned char*)ptr)) % size); } return hash; } /* ( Add an Element to a HashTable ) */ PUBLIC BOOL HTHashtable_addObject (HTHashtable *me, const char *key, void *newObject) { if(me) { int size = me->size; int i = hash_number(key,size); HTList *l = (HTList *)me->table[i]; keynode *kn; if(!l) l = me->table[i] = HTList_new(); if ((kn = (keynode *) HT_CALLOC(1, sizeof (keynode))) == NULL) HT_OUTOFMEM("HTHashtable_addObject"); StrAllocCopy(kn->key,key); kn->object = newObject; HTList_addObject(l,kn); me->count++; return YES; } return NO; } /* ( Remove an Element from the HashTable ) */ PUBLIC BOOL HTHashtable_removeObject (HTHashtable *me, const char *key) { if(me) { int size = me->size; int i = hash_number(key,size); HTList *l = (HTList *)me->table[i]; if(l) { HTList *cur = l; keynode *kn; while ((kn = (keynode *) HTList_nextObject(cur))) { if(!strcmp(key,kn->key)) { HTList_removeObject(l,kn); me->count--; return YES; } } } } return NO; } /* ( Search for an Element in a Hash Table ) */ PUBLIC void *HTHashtable_object (HTHashtable * me, const char *key) { if(me) { int size = me->size; int i = hash_number(key,size); HTList * l = (HTList *)me->table[i]; if (l) { HTList *cur = l; keynode *kn; while ((kn = (keynode *) HTList_nextObject(cur))) { if(!strcmp(key,kn->key)) return kn->object; } } } return NULL; } /* ( Size of a Hash Table ) */ PUBLIC int HTHashtable_count (HTHashtable *me) { if(me) return me->count; return -1; } /* ( Walk all Elements in the HashTable ) */ PUBLIC BOOL HTHashtable_walk (HTHashtable *me, int (*walkFunc)(HTHashtable *,char *, void *)) { if(me) { int i, j; for(i = 0; i< me->size; i++) { HTList *l = (HTList *)me->table[i]; if(l) { HTList *cur = l; keynode *kn, *nextkn; for(kn = (keynode *)HTList_nextObject(cur); kn; kn = nextkn) { j = walkFunc(me, kn->key, kn->object); if(j == 0) return YES; nextkn = (keynode *)HTList_nextObject(cur); if (j < 0) { HTList_removeObject(l, kn); me->count--; } } } } return YES; } return NO; } /* ( Extract in a dynamic array all keys of the Hash Table ) */ PUBLIC HTArray * HTHashtable_keys (HTHashtable *me) { if(me) { HTArray *keys = HTArray_new(me->count); int i; for(i = 0; i< me->size; i++) { HTList * l = (HTList *)me->table[i]; if (l) { HTList *cur = l; keynode *kn; while ((kn = (keynode *) HTList_nextObject(cur))) { char * nkey = NULL; StrAllocCopy(nkey,kn->key); HTArray_addObject(keys,nkey); } } } return keys; } return NULL; } /* ( Print the keys of the Hash Table ) */ PUBLIC void HTHashtable_print (HTHashtable *me) { HTArray *keys = HTHashtable_keys(me); int i; HTPrint("Printing Hash Table of size %d\n", HTArray_size(keys)); for(i = 0; i< HTArray_size(keys); i++) { HTPrint("Key %d %s\n",i,HTArray_data(keys)[i]); } for(i = 0; i< HTArray_size(keys); i++) { HT_FREE(HTArray_data(keys)[i]); } HTArray_delete(keys); } ���������������������������������������������������������libwww/Library/src/HTHash.html����������������������������������������������������������������������0100644�0000764�0000144�00000005045�07144727763�015776� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Hash Table Class</TITLE> </HEAD> <BODY> <H1> Hash Table Class </H1> <P> <STRONG>Written and integrated into libwww by John Punin - thanks!</STRONG> <P> This module is implemented by <A HREF="HTHash.c">HTHash.c</A>, and is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <P> This HashTable class implements a simple hash table to keep objects associated with key words. <PRE> #ifndef HTHASH_H #define HTHASH_H #include "HTList.h" typedef struct _HTHashtable HTHashtable; struct _HTHashtable { void **table; int count; int size; }; typedef struct _keynode keynode; struct _keynode { char *key; void *object; }; </PRE> <H2> Creation and Deletion Methods </H2> <P> These methods create and deletes a Hash Table <PRE> extern HTHashtable * HTHashtable_new (int size); extern BOOL HTHashtable_delete (HTHashtable *me); </PRE> <H2> Add an Element to a HashTable </H2> <PRE> extern BOOL HTHashtable_addObject (HTHashtable *me, const char *key, void *newObject); </PRE> <H2> Remove an Element from a HashTable </H2> <PRE> extern BOOL HTHashtable_removeObject (HTHashtable *me, const char *key); </PRE> <H2> Search for an Element in a Hash Table </H2> <PRE> extern void * HTHashtable_object (HTHashtable * me, const char *key); </PRE> <H2> Size of a Hash Table </H2> <PRE> extern int HTHashtable_count (HTHashtable *me); </PRE> <H2> Walk all the elements in a Hash Table </H2> <P> Walking the hashtable calls the specified function pointer with each key and object that is in the hash table. If the callback function returns 0, the walking stops. If it returns a negative number, the current element is removed from the hash table. Return a positive number to keep going. <P> Note that it is legal for the walkFunc to call HTHashtable_removeObject() on any element in the current hash table <STRONG>except</STRONG> the current one (if you intend to keep going, that is). The only legal way to delete the current element while continuing to walk the table is to use the negative return value. <PRE> extern BOOL HTHashtable_walk (HTHashtable *me, int (*walkFunc)(HTHashtable *, char *, void *)); </PRE> <H2> Extract in a dynamic array all keys of the Hash Table </H2> <PRE> extern HTArray * HTHashtable_keys (HTHashtable *me); </PRE> <H2> Print the keys of the Hash Table </H2> <PRE> extern void HTHashtable_print (HTHashtable *me); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTHash.html,v 1.2 2025/08/11 07:49:07 kahan Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHeader.c�����������������������������������������������������������������������0100644�0000764�0000144�00000005752�06657354557�015573� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTHeader.c ** EXTRA HEADER MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTHeader.c,v 2.13 2025/02/07 18:20:31 frystyk Exp $ ** ** HISTORY: ** 2 Nov 95 HFN Written on a rainy night */ /* Library Include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTParse.h" #include "HTString.h" #include "HTReq.h" #include "HTHeader.h" /* Implemented here */ #include "HTMIMPrs.h" HTMIMEParseSet * ParseSet = NULL; PRIVATE HTList * HTGenerators = NULL; /* --------------------------------------------------------------------------*/ /* ** Register a Header generator to be called when we make request */ PUBLIC BOOL HTGenerator_add (HTList * gens, HTPostCallback * callback) { return callback ? HTList_addObject(gens, (void *) callback) : NO; } /* ** Unregister a Header generator */ PUBLIC BOOL HTGenerator_delete (HTList * gens, HTPostCallback * callback) { return callback ? HTList_removeObject(gens, (void *) callback) : NO; } /* ** Delete the list of registered header generators. */ PUBLIC BOOL HTGenerator_deleteAll (HTList * gens) { return HTList_delete(gens); } /* ------------------------------------------------------------------------- */ /* GLOBAL LIST OF PARSERS AND GENERATORS */ /* ------------------------------------------------------------------------- */ /* ** Global List of parsers. list can be NULL */ PUBLIC void HTHeader_setMIMEParseSet (HTMIMEParseSet * list) { ParseSet = list; } PUBLIC HTMIMEParseSet * HTHeader_MIMEParseSet (void) { return ParseSet; } PUBLIC BOOL HTHeader_addParser (const char * token, BOOL case_sensitive, HTParserCallback * callback) { if (!ParseSet) ParseSet = HTMIMEParseSet_new(MIME_HASH_SIZE); return (HTMIMEParseSet_add(ParseSet, token, case_sensitive, callback) != NULL); } PUBLIC BOOL HTHeader_addRegexParser (const char * token, BOOL case_sensitive, HTParserCallback * callback) { if (!ParseSet) ParseSet = HTMIMEParseSet_new(MIME_HASH_SIZE); return (HTMIMEParseSet_addRegex(ParseSet, token, case_sensitive, callback) != NULL); } PUBLIC BOOL HTHeader_deleteParser (const char * token) { return HTMIMEParseSet_delete(ParseSet, token); } /* ** Global List of header generators. list can be NULL */ PUBLIC void HTHeader_setGenerator (HTList * list) { HTGenerators = list; } PUBLIC HTList * HTHeader_generator (void) { return HTGenerators; } PUBLIC BOOL HTHeader_addGenerator (HTPostCallback * callback) { if (!HTGenerators) HTGenerators = HTList_new(); return HTGenerator_add(HTGenerators, callback); } PUBLIC BOOL HTHeader_deleteGenerator (HTPostCallback * callback) { if (!HTGenerators) return NO; return HTGenerator_delete(HTGenerators, callback); } /* ** Convenience function to clean up */ PUBLIC void HTHeader_deleteAll (void) { HTMIMEParseSet_deleteAll(ParseSet); if (HTGenerators) { HTGenerator_deleteAll(HTGenerators); HTGenerators = NULL; } } ����������������������libwww/Library/src/HTHeader.html��������������������������������������������������������������������0100644�0000764�0000144�00000006312�06657354557�016306� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> <!-- Changed by: Eric Prud'hommeaux, 28-May-1996 --> <NEXTID N="z11"> <TITLE>W3C Sample Code Library libwww MIME Headers</TITLE> </HEAD> <BODY> <H1> MIME Headers </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module handles lists of callback functions for generating and parsing protocol headers. This works exactly like the lists in <A HREF="HTFormat.html">HTFormat</A>. <P> This module is implemented by <A HREF="HTHeader.c">HTHeader.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTHEADER_H #define HTHEADER_H #include "HTResponse.h" #include "HTStream.h" </PRE> <P> We have two call back functions: the first is for generating headers. This needs a stream to put down the extra headers. This one is defined in the <A HREF="HTReq.html">Request Manager</A>. The other one is for parsing. This needs the string to parse. <PRE> typedef int HTParserCallback (HTRequest * request, HTResponse * response, char * token, char * value); </PRE> <H2> Header Parser Management </H2> <P> Header Parsers can be registered to handle any header. The standard set of HTTP/1.1 MIME parsers is registered by HTMIMEInit in the <A HREF="HTInit.html">HTInit</A> module. The HTParserCallbacks are called by the <A HREF="HTMIME.html">HTMIME</A> module. <P> HTParserCallbacks may be registered for known MIME headers (HTParser_*), or for regular expressions (HTRegexParser_*). To data the regex support is limited to the use of '*' for a wild card. <H2> Header Generator Management </H2> <P> Header Generators can be use to add additional information to aprotocol request. They will all be called. <PRE> extern BOOL HTGenerator_add (HTList * gens, HTPostCallback * callback); extern BOOL HTGenerator_delete (HTList * gens, HTPostCallback * callback); extern BOOL HTGenerator_deleteAll (HTList * gens); </PRE> <H2> Global List Of Parsers and Generators </H2> <P> As in <A HREF="HTFormat.html">HTFormat module</A> you can register a list globally or locally as you like. The local registrations is managed by <A HREF="HTReq.html">Request Manager</A> <H3> Header Parsers </H3> <PRE> #define MIME_HASH_SIZE HT_L_HASH_SIZE extern void HTHeader_setMIMEParseSet (HTMIMEParseSet * list); extern HTMIMEParseSet * HTHeader_MIMEParseSet (void); extern BOOL HTHeader_addParser (const char * token, BOOL case_sensitive, HTParserCallback * callback); extern BOOL HTHeader_addRegexParser (const char * token, BOOL case_sensitive, HTParserCallback * callback); extern BOOL HTHeader_deleteParser (const char * token); </PRE> <H3> Header Generation </H3> <PRE> extern void HTHeader_setGenerator (HTList * list); extern BOOL HTHeader_addGenerator (HTPostCallback * callback); extern BOOL HTHeader_deleteGenerator (HTPostCallback * callback); extern HTList * HTHeader_generator (void); </PRE> <H3> Delete all Global Lists </H3> <PRE> extern void HTHeader_deleteAll (void); </PRE> <PRE> #endif /* HTHEADER_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTHeader.html,v 2.13 2025/02/07 18:20:31 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHist.c�������������������������������������������������������������������������0100644�0000764�0000144�00000015617�06523414312�015265� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTHist.c ** NAVIGATION MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTHist.c,v 2.9 2025/05/04 19:36:42 frystyk Exp $ ** ** The history manager for the Library. This module is not called any ** where in the Library so if the application does not call it, it is ** not linked in at all. */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTAnchor.h" #include "HTHist.h" /* Implemented here */ struct _HTHistory { HTList * alist; /* List of anchors */ int pos; /* Current position in list. 1 is home anchor */ }; /* ------------------------------------------------------------------------- */ /* Create a new History List ** ------------------------- ** Creates a new history list and returns a handle to it. There can be ** multiple history lists - for example one for each open window in ** an application. ** Returns HTHistory object if OK, else NULL */ PUBLIC HTHistory *HTHistory_new (void) { HTHistory *element; if ((element = (HTHistory *) HT_CALLOC(1, (sizeof(HTHistory)))) == NULL) HT_OUTOFMEM("HTHistory_new"); element->alist = HTList_new(); return element; } /* Delete a History list ** --------------------- ** Deletes the history list. ** Returns YES if OK, else NO */ PUBLIC BOOL HTHistory_delete (HTHistory * hist) { if (hist) { HTList_delete(hist->alist); HT_FREE(hist); return YES; } return NO; } /* Record an entry in a list ** ------------------------- ** Registers the object in the linear list. The first entry is the ** home page. No check is done for duplicates. ** Returns YES if ok, else NO */ PUBLIC BOOL HTHistory_record (HTHistory * hist, HTAnchor * cur) { return (hist && cur && HTList_addObject(hist->alist, cur) && hist->pos++); } /* Replace list with new element ** ----------------------------- ** Inserts the new element at the current position and removes all any ** old list from current position. For example if c is cur pos ** before: a b c d e ** after : a b f ** Returns YES if ok, else NO */ PUBLIC BOOL HTHistory_replace (HTHistory * hist, HTAnchor * cur) { if (hist && cur) { HTHistory_removeFrom(hist, hist->pos); HTHistory_record(hist, cur); } return NO; } /* Delete last entry in a list ** --------------------------- ** Deletes the last object from the list ** Returns YES if OK, else NO */ PUBLIC BOOL HTHistory_removeLast (HTHistory * hist) { return (hist && HTList_removeLastObject(hist->alist) && hist->pos--); } /* Remove the History list from position ** ------------------------------------ ** Deletes the history list FROM the entry at position 'cur' (excluded). ** Home page has position 1. ** Returns YES if OK, else NO */ PUBLIC BOOL HTHistory_removeFrom (HTHistory * hist, int pos) { if (hist && pos>=0) { int cnt = HTList_count(hist->alist) - pos; while (cnt-->0 && HTList_removeLastObject(hist->alist)); if (hist->pos > pos) hist->pos = pos; return YES; } return NO; } /* Number of elements stored ** ------------------------- ** Returns the size of the history list or -1 if none. */ PUBLIC int HTHistory_count (HTHistory * hist) { return (hist ? HTList_count(hist->alist) : -1); } /* Current Location ** ---------------- ** Returns the current position or -1 */ PUBLIC int HTHistory_position (HTHistory * hist) { return (hist ? hist->pos : -1); } /* ------------------------------------------------------------------------- */ /* NAVIGATION */ /* ------------------------------------------------------------------------- */ /* Find and re-register visited anchor ** ----------------------------------- ** Finds already registered anchor at given position and registers it ** again EXCEPT if last entry. This allows for `circular' history lists ** with duplicate entries. Position 1 is the home anchor. */ PUBLIC HTAnchor * HTHistory_recall (HTHistory * hist, int pos) { HTAnchor *cur = NULL; if (hist && pos > 0) { int len = HTList_count(hist->alist); if ((cur = (HTAnchor *) HTList_objectAt(hist->alist, len-pos))) { if (cur != HTList_lastObject (hist->alist)) { HTHistory_record(hist, cur); } else hist->pos = pos; } } return cur; } /* Find Entry at position ** ---------------------- ** Entry with the given index in the list (1 is the home page). Like ** HTHistory_recall but without re-registration. Current position is ** updated. */ PUBLIC HTAnchor * HTHistory_find (HTHistory * hist, int pos) { HTAnchor *cur = NULL; if (hist && pos > 0) { if ((cur = (HTAnchor *) (HTList_objectAt(hist->alist, HTList_count(hist->alist)-pos)))) hist->pos = pos; } return cur; } /* List Entry at position ** ---------------------- ** Entry with the given index in the list (1 is the home page). Like ** HTHistory_find but current position is NOT updated. */ PUBLIC HTAnchor * HTHistory_list (HTHistory * hist, int pos) { return (hist ? (HTAnchor *) (HTList_objectAt(hist->alist, HTList_count(hist->alist)-pos)) : NULL); } /* Can we back in history ** ---------------------- ** Returns YES if the current anchor is not the first entry (home page) */ PUBLIC BOOL HTHistory_canBacktrack (HTHistory * hist) { return ((hist && hist->pos > 1) ? YES : NO); } /* ** Backtrack with deletion ** ----------------------- ** Returns the previous object and erases the last object. This does not ** allow for 'forward' as we are always at the end of the list. If no ** previous object exists, NULL is returned so that the application knows ** that no previous object was found. See also HTHistory_back(). */ PUBLIC HTAnchor * HTHistory_backtrack (HTHistory * hist) { if (HTHistory_canBacktrack(hist)) { HTHistory_removeLast(hist); return (HTAnchor *) HTList_lastObject(hist->alist); } return NULL; } /* ** Backtrack without deletion ** -------------------------- ** Returns the previos object but does not erase the last object. This ** does not allow for 'forward'. If no previous object exists, NULL is ** returned so that the application knows that no previous object was ** found. See also HTHistory_backtrack() */ PUBLIC HTAnchor * HTHistory_back (HTHistory * hist) { if (HTHistory_canBacktrack(hist)) { int pos = HTList_count(hist->alist) - (--hist->pos); return ((HTAnchor *) HTList_objectAt(hist->alist, pos)); } return NULL; } /* Can we go forward ** ----------------- ** Returns YES if the current anchor is not the last entry */ PUBLIC BOOL HTHistory_canForward (HTHistory * hist) { return ((hist && hist->pos < HTList_count(hist->alist)) ? YES : NO); } /* ** Forward ** ------- ** Return the next object in the list or NULL if none */ PUBLIC HTAnchor * HTHistory_forward (HTHistory * hist) { if (HTHistory_canForward(hist)) { int pos = HTList_count(hist->alist) - (++hist->pos); return ((HTAnchor *) HTList_objectAt(hist->alist, pos)); } return NULL; } �����������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHist.html����������������������������������������������������������������������0100644�0000764�0000144�00000011433�06526451230�016002� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HISTORY</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>History Manager</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This is a simple history module for a WWW client. It keeps a linear history, with a destructive <EM>or</EM> non-destructive backtrack, and list sequencing (previous, next) operations.<P> If you are building a client, you don't have to use this: just don't call it. This module is not used by any other modules in the libwww, so if you don't refer to it you don't get it in your linked application. <P> This module is implemented by <A HREF="HTHist.c">HTHist.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTHISTORY_H #define HTHISTORY_H #include "HTAnchor.h" </PRE> <H2>Creation and Deletion Methods</H2> The history module can handle multiple history lists which can be useful in a multithreaded environment with several open windows in the client application. A new histrory lidt is referenced by the handle returned from the creation method. <PRE> typedef struct _HTHistory HTHistory; extern HTHistory *HTHistory_new (void); extern BOOL HTHistory_delete (HTHistory *old); </PRE> <H2>Add and delete History Elements</H2> <H3>Record an entry in a list</H3> Registers the object in the linear list. The first entry is the home page. No check is done for duplicates. Returns YES if ok, else NO <PRE> extern BOOL HTHistory_record (HTHistory *hist, HTAnchor *cur); </PRE> <H3>Replace list with new element</H3> Iserts the new element at the current position and removes all any old list from current position. For example if c is cur pos <UL> <LI>before: a b c d e <LI>after : a b f </UL> Returns YES if ok, else NO <PRE> extern BOOL HTHistory_replace (HTHistory *hist, HTAnchor *cur); </PRE> <H3>Delete last entry in a list</H3> Deletes the last object from the list Returns YES if OK, else NO <PRE> extern BOOL HTHistory_removeLast (HTHistory *hist); </PRE> <H3>Remove the History list from position</H3> Deletes the history list FROM the entry at position 'cur' (excluded). Home page has position 1. Returns YES if OK, else NO <PRE> extern BOOL HTHistory_removeFrom (HTHistory *hist, int pos); </PRE> <H3>Number of elements stored</H3> Returns the size of the history list or -1 if none. <PRE> extern int HTHistory_count (HTHistory *hist); </PRE> <H3>Current Position</H3> Returns the current position or -1 on error <PRE> extern int HTHistory_position (HTHistory *hist); </PRE> <H3>Find and re-register visited anchor</H3> Finds already registered anchor at given position and registers it again EXCEPT if last entry. This allows for `circular' history lists with duplicate entries. Position 1 is the home anchor. The current position <EM>is</EM> updated. <PRE> extern HTAnchor * HTHistory_recall (HTHistory *hist, int pos); </PRE> <H3>Find Entry at position</H3> Entry with the given index in the list (1 is the home page). Like <CODE>HTHistory_recall</CODE> but without re-registration. Un success, the current position <EM>is</EM> updated to the value 'pos' value. <PRE> extern HTAnchor * HTHistory_find (HTHistory *hist, int pos); </PRE> <H3>List the History List</H3> This function is like <CODE>HTHistory_find()</CODE> but <EM>does not</EM> update the current position <PRE> extern HTAnchor * HTHistory_list (HTHistory *hist, int pos); </PRE> <H2>Navigation</H2> <H3>Can we back in history</H3> Returns YES if the current anchor is not the first entry (home page) <PRE> extern BOOL HTHistory_canBacktrack (HTHistory *hist); </PRE> <H3>Backtrack with deletion</H3> Returns the previous object and erases the last object. This does not allow for 'forward' as we are always at the end of the list. If no previous object exists, NULL is returned so that the application knows that no previous object was found. See also HTHistory_back(). <PRE> extern HTAnchor * HTHistory_backtrack (HTHistory *hist); </PRE> <H3>Backtrack without deletion</H3> Returns the previos object but does not erase the last object. This does not allow for 'forward'. If no previous object exists, NULL is returned so that the application knows that no previous object was found. See also HTHistory_backtrack() <PRE> extern HTAnchor * HTHistory_back (HTHistory *hist); </PRE> <H3>Can we go forward</H3> Returns YES if the current anchor is not the last entry <PRE> extern BOOL HTHistory_canForward (HTHistory *hist); </PRE> <H3>Forward</H3> Return the next object in the list or NULL if none <PRE> extern HTAnchor * HTHistory_forward (HTHistory *hist); #endif /* HTHISTORY_H */ </PRE> <HR> <ADDRESS> @(#) $Id: HTHist.html,v 2.14 2025/05/14 02:10:32 frystyk Exp $ </ADDRESS> </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHome.c�������������������������������������������������������������������������0100644�0000764�0000144�00000017664�07140240570�015251� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTHome.c ** ANCHOR TRANSLATIONS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTHome.c,v 2.38 2025/07/28 08:16:56 kahan Exp $ ** ** Authors ** TBL Tim Berners-Lee timbl@w3.org ** JFG Jean-Francois Groff jfg@dxcern.cern.ch ** DD Denis DeLaRoca (310) 825-4580 <CSP1DWD@mvs.oac.ucla.edu> ** HFN Henrik Frystyk ** History ** 8 Jun 92 Telnet hopping prohibited as telnet is not secure TBL ** 26 Jun 92 When over DECnet, suppressed FTP, Gopher and News. JFG ** 6 Oct 92 Moved HTClientHost and HTlogfile into here. TBL ** 17 Dec 92 Tn3270 added, bug fix. DD ** 4 Feb 93 Access registration, Search escapes bad chars TBL ** PARAMETERS TO HTSEARCH AND HTLOADRELATIVE CHANGED ** 28 May 93 WAIS gateway explicit if no WAIS library linked in. ** Dec 93 Bug change around, more reentrant, etc ** 09 May 94 logfile renamed to HTlogfile to avoid clash with WAIS ** 8 Jul 94 Insulate free from _free structure element. ** Sep 95 Rewritten, HFN ** Nov 95 Spawned from HTAccess.c */ /* Library include files */ #include "WWWLib.h" #include "HTHome.h" /* Implemented here */ /* ------------------------------------------------------------------------- */ /* Find Related Name ** ----------------- ** Creates a string that can be used as a related name when ** calling HTParse initially. ** ** The code for this routine originates from the Linemode ** browser and was moved here by howcome@w3.org ** in order for all clients to take advantage. ** The string returned must be freed by the caller */ PUBLIC char * HTGetCurrentDirectoryURL (void) { char wd[HT_MAX_PATH+2]; #ifdef HAVE_GETCWD /* System V variant SIGN CHANGED TBL 921006 !! */ char * result = (char *) getcwd(wd, sizeof(wd)); #else #ifdef HAVE_GETWD char * result = (char *) getwd(wd); #else #error "This platform does not support neither getwd nor getcwd\n" char * result = NULL; #endif /* HAVE_GETWD */ #endif /* HAVE_GETCWD */ if (result) { *(wd+HT_MAX_PATH) = '\0'; if (*(wd+strlen(wd)-1) != '/') strcat(wd, "/"); } return result ? HTLocalToWWW(result, NULL) : NULL; } /* Generate the anchor for the home page ** ------------------------------------- ** ** As it involves file access, this should only be done once ** when the program first runs. ** This is a default algorithm -- browser don't HAVE to use this. ** But consistency betwen browsers is STRONGLY recommended! ** ** Priority order is: ** ** 1 WWW_HOME environment variable (logical name, etc) ** 2 ~/WWW/default.html ** 3 /usr/local/bin/default.html ** 4 http://www.w3.org/default.html ** */ PUBLIC HTParentAnchor * HTHomeAnchor (void) { char * my_home_document = NULL; char * home = (char *) getenv(LOGICAL_DEFAULT); char * ref; HTParentAnchor * anchor; /* Someone telnets in, they get a special home */ if (home) { StrAllocCopy(my_home_document, home); } else if (HTLib_secure()) { /* Telnet server */ FILE * fp = fopen(REMOTE_POINTER, "r"); char * status; if (fp) { if ((my_home_document = (char *) HT_MALLOC(HT_MAX_PATH)) == NULL) HT_OUTOFMEM("my_home_document "); status = fgets(my_home_document, HT_MAX_PATH, fp); if (!status) { HT_FREE(my_home_document); my_home_document = NULL; } fclose(fp); } if (!my_home_document) StrAllocCopy(my_home_document, REMOTE_ADDRESS); } if (!my_home_document) { FILE * fp = NULL; char * home = (char *) getenv("HOME"); if (home) { if ((my_home_document = (char *) HT_MALLOC(strlen(home)+1+ strlen(PERSONAL_DEFAULT)+1)) == NULL) HT_OUTOFMEM("HTLocalName"); sprintf(my_home_document, "%s/%s", home, PERSONAL_DEFAULT); fp = fopen(my_home_document, "r"); } if (!fp) { StrAllocCopy(my_home_document, LOCAL_DEFAULT_FILE); fp = fopen(my_home_document, "r"); } if (fp) { fclose(fp); } else { HTTRACE(APP_TRACE, "Home Anchor. No local home document in ~/%s or %s\n" _ PERSONAL_DEFAULT _ LOCAL_DEFAULT_FILE); HT_FREE(my_home_document); my_home_document = NULL; } } ref = HTParse(my_home_document ? my_home_document : HTLib_secure() ? REMOTE_ADDRESS : LAST_RESORT, "file:", PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); if (my_home_document) { HTTRACE(APP_TRACE, "Home Anchor. `%s\' used for custom home page as\n`%s\'\n" _ my_home_document _ ref); HT_FREE(my_home_document); } anchor = (HTParentAnchor*) HTAnchor_findAddress(ref); HT_FREE(ref); return anchor; } /* ** Creates a temporary anchor that doesn't exist */ PUBLIC HTParentAnchor * HTTmpAnchor (HTUserProfile * up) { static int offset = 0; /* Just keep counting... */ HTParentAnchor * htpa = NULL; time_t t = time(NULL); char * tmpfile = HTGetTmpFileName(HTUserProfile_tmp(up)); char * tmpurl = HTParse(tmpfile, "file:", PARSE_ALL); if (tmpfile && tmpurl && t >= 0) { char * result; if (!(result = (char *) HT_MALLOC(strlen(tmpurl)+20))) HT_OUTOFMEM("HTTmpAnchor"); #ifdef HAVE_LONG_TIME_T sprintf(result, "%s.%ld.%d", tmpurl, t, offset++); #else sprintf(result, "%s.%d.%d", tmpurl, t, offset++); #endif HTTRACE(APP_TRACE, "Tmp Anchor.. With location `%s\'\n" _ result); htpa = HTAnchor_parent(HTAnchor_findAddress(result)); HT_FREE(result); } HT_FREE(tmpfile); HT_FREE(tmpurl); return htpa; } /* ** Takes a string of the form "a=b" containing HTML form data, escapes ** it accordingly and puts it into the association list so that it ** readily can be passed to any of the HTAccess function that handles ** HTML form data. */ PUBLIC BOOL HTParseFormInput (HTAssocList * list, const char * str) { if (list && str) { char * me = NULL; char * name = NULL; char * value = NULL; StrAllocCopy(me, str); value = strchr(me, '='); if (value) *value++ = '\0'; else value = ""; name = HTStrip(me); /* Escape the name and value */ if (name) { char * escaped_name = HTEscape(name, URL_XALPHAS); char * escaped_value = HTEscape(value, URL_XALPHAS); HTTRACE(APP_TRACE, "Form data... Adding name `%s\' with value `%s\' to %p\n" _ escaped_name _ escaped_value _ list); HTAssocList_addObject(list, escaped_name, escaped_value); HT_FREE(escaped_name); HT_FREE(escaped_value); } HT_FREE(me); return YES; } return NO; } /* ** Standard interface to libwww TRACE messages. Pass this function a ** string of characters and it will set up the appropriate TRACE flags. ** The shortnames for the trace messages are not as intuitive as they ** could be :-(. The string must be null terminated */ PUBLIC int HTSetTraceMessageMask (const char * shortnames) { #if defined(HTDEBUG) && defined(WWWTRACE) WWWTRACE = 0; if (shortnames && *shortnames) { char * ptr = (char *) shortnames; for(; *ptr; ptr++) { switch (*ptr) { case 'a': WWWTRACE |= SHOW_ANCHOR_TRACE; break; case 'b': WWWTRACE |= SHOW_BIND_TRACE; break; case 'c': WWWTRACE |= SHOW_CACHE_TRACE; break; case 'e': WWWTRACE |= SHOW_MUX_TRACE; break; case 'f': WWWTRACE |= SHOW_UTIL_TRACE; break; case 'g': WWWTRACE |= SHOW_SGML_TRACE; break; case 'h': WWWTRACE |= SHOW_AUTH_TRACE; break; case 'i': WWWTRACE |= SHOW_PICS_TRACE; break; case 'l': WWWTRACE |= SHOW_APP_TRACE; break; case 'm': WWWTRACE |= SHOW_MEM_TRACE; break; case 'o': WWWTRACE |= SHOW_CORE_TRACE; break; case 'p': WWWTRACE |= SHOW_PROTOCOL_TRACE; break; case 'q': WWWTRACE |= SHOW_SQL_TRACE; break; case 's': WWWTRACE |= SHOW_STREAM_TRACE; break; case 't': WWWTRACE |= SHOW_THREAD_TRACE; break; case 'u': WWWTRACE |= SHOW_URI_TRACE; break; case 'x': WWWTRACE |= SHOW_XML_TRACE; break; case '*': WWWTRACE |= SHOW_ALL_TRACE; break; default: if (WWWTRACE) HTTRACE(APP_TRACE, "Trace....... Bad argument\n"); } } if (!WWWTRACE) WWWTRACE = SHOW_ALL_TRACE; } else { WWWTRACE = SHOW_ALL_TRACE; } return WWWTRACE; #else return 0; #endif } ����������������������������������������������������������������������������libwww/Library/src/HTHome.html����������������������������������������������������������������������0100644�0000764�0000144�00000014444�07130400221�015752� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 16-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Home Page Management</TITLE> </HEAD> <BODY> <H1> Home Page Management </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module provides some "<I>make life easier</I>" functions in order to get the application going. The functionality of this module was originally in <A HREF="HTAccess.html">HTAccess</A>, but now it has been moved here as a part of the <A HREF="WWWApp.html">application interface</A> where the application <EM>may</EM> use it if desired. <P> This module is implemented by <A HREF="HTHome.c">HTHome.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTHOME_H #define HTHOME_H #include "WWWLib.h" </PRE> <P> The <I>home page </I>is special in that this is is the first page to visit when &nbsp;a client application starts up. Note that a home page is a generic URL and hence can be any resouce - not only resources on the local file system. <H2> <A NAME="Personal">Personal Home Page</A> </H2> <PRE>#define LOGICAL_DEFAULT "WWW_HOME" /* Defined to be the home page */ #ifndef PERSONAL_DEFAULT #define PERSONAL_DEFAULT "WWW/default.html" /* in home directory */ #endif /* If the home page isn't found, use this file: */ #ifndef LAST_RESORT #define LAST_RESORT "http://www.w3.org/" #endif </PRE> <H2> <A NAME="Remote">Home Page for Remote Access</A> </H2> <P> Some Web applications can also be run remotely - for example as a telnet login shell. The Line Mode Browser is an example of such an application.&nbsp;In that case, the home page is often more generic than a personal home page. <PRE> /* If one telnets to an access point it will look in this file for home page */ #ifndef REMOTE_POINTER #define REMOTE_POINTER "/etc/www-remote.url" /* can't be file */ #endif /* and if that fails it will use this. */ #ifndef REMOTE_ADDRESS #define REMOTE_ADDRESS "http://www.w3.org/" /* can't be file */ #endif #ifndef LOCAL_DEFAULT_FILE #define LOCAL_DEFAULT_FILE "/usr/local/lib/WWW/default.html" #endif </PRE> <H2> <A NAME="HomeAnchor">Get an Anchor for the Home Page</A> </H2> <P> Getting an anchor for the <I>home page</I> involves looking for the (environment) variables described in the section above. As this is something that almost all client applications must do then we provide some simple methods that do the work for you. <PRE> extern HTParentAnchor * HTHomeAnchor (void); </PRE> <H2> <A NAME="temp">Create a New Anchor for Temporary Local Files</A> </H2> <P> When the user starts writing a new document, the client application should create a new anchor which can contain the document while it is created. This can also be the location for backups and for security "auto-save" functionality. This functions creates a new anchor with a URL pointing to the temporary location defined by this user profile and returns that anchor. Andy Levine: I additionally found that calling HTTmpAnchor repeatedly without freeing the newly allocated anchor will cause the anchor hash table to continue to grow. <PRE> extern HTParentAnchor * HTTmpAnchor (HTUserProfile * up); </PRE> <H2> Get The Current Directory in URL form </H2> <P> Creates a local file URL that can be used as a relative name when calling expanding other URLs relative to the current location in the local file system tree where the application is running. The code for this routine originates from the Line Mode Browser and was moved here by <EM>howcome@w3.org</EM> in order for all clients to take advantage. <PRE> #define HTFindRelatedName HTGetCurrentDirectoryURL extern char * HTGetCurrentDirectoryURL (void); </PRE> <H2> <A NAME="FormInput">Handle HTML Form Input fields</A> </H2> <P> Takes a string of the form "<CODE>a=b</CODE>" containing HTML form data, escapes it accordingly and puts it into the association list so that it readily can be passed to any of the HTAccess function that handles HTML form data. The string should not be encoded in any way - this function encodes it according to the HTML form encoding rules. <P> Examples are "foo=bar", "baz=foo and bar", "a= b ", " a = b ", "toto=", "four = two + two", "six three + three", and "a=b=c" <PRE> extern BOOL HTParseFormInput (HTAssocList * list, const char * str); </PRE> <H2> <A NAME="Trace">Handle Library Trace Messages</A> </H2> <P> Standard interface to libwww <A HREF="HTUtils.html#Debug">TRACE messages</A>. Pass this function a string of characters. It will set up the appropriate TRACE flags. The following characters are used as follows: <DL COMPACT> <DT> <B>f</B> <DD> Show <A HREF="WWWUtil.html">BASIC UTILITIES </A>Trace Messages <DT> <B>l</B> <DD> Show <A HREF="WWWApp.html">APPLICATION LEVEL</A> Trace Messages <DT> <B>c</B> <DD> Show <A HREF="WWWCache.html]">CACHE</A> Trace Messages <DT> <B>g</B> <DD> Show <A HREF="WWWHTML.html">SGML</A> Trace Messages <DT> <B>b</B> <DD> Show <A HREF="HTBind.html">BIND</A> Trace Messages <DT> <B>t</B> <DD> Show <A HREF="HTEvent.html">THREAD</A> Trace Messages <DT> <B>s</B> <DD> Show <A HREF="WWWStream.html">STREAM</A> Trace Messages <DT> <B>p</B> <DD> Show <A HREF="HTProt.html">PROTOCOL</A> Trace Messages <DT> <B>m</B> <DD> Show <A HREF="HTMemory.html">MEMORY</A> Trace Messages <DT> <B>q</B> <DD> Show <A HREF="WWWSQL.html">SQL</A> Trace Messages <DT> <B>u</B> <DD> Show <A HREF="HTParse.html">URI</A> Trace Messages <DT> <B>h</B> <DD> Show <A HREF="HTAAUtil.html">AUTH</A> Trace Messages <DT> <B>a</B> <DD> Show <A HREF="HTAnchor.html">ANCHOR</A> Trace Messages <DT> <B>i</B> <DD> Show <A HREF="../../PICS-client/">PICS</A> Trace Messages <DT> <B>o</B> <DD> Show <A HREF="WWWCore.html">CORE</A> Trace Messages <DT> <B>x</B> <DD> Show <A HREF="WWWMux.html">MUX</A> Trace Messages <DT> <B>*</B> <DD> Show <EM>ALL</EM> Trace Messages </DL> <P> The string must be null terminated, an example is "<TT>sop</TT>". <PRE> extern int HTSetTraceMessageMask (const char * shortnames); </PRE> <PRE> #endif /* HTHOME_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTHome.html,v 2.19 2025/07/04 15:19:45 kahan Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHost.c�������������������������������������������������������������������������0100644�0000764�0000144�00000144100�07140310370�015254� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTHost.c ** REMOTE HOST INFORMATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTHost.c,v 2.72 2025/07/28 13:56:08 kahan Exp $ ** ** This object manages the information that we know about a remote host. ** This can for example be what type of host it is, and what version ** it is using. We also keep track of persistent connections ** ** April 96 HFN Written */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTParse.h" #include "HTAlert.h" #include "HTError.h" #include "HTNetMan.h" #include "HTTrans.h" #include "HTTPUtil.h" #include "HTTCP.h" #include "HTHost.h" /* Implemented here */ #include "HTHstMan.h" #define HOST_OBJECT_TTL 43200L /* Default host timeout is 12 h */ #define TCP_IDLE_PASSIVE 120L /* Passive TTL in s on an idle connection */ #define TCP_IDLE_ACTIVE 60000L /* Active TTL in ms on an idle connection */ #define MAX_PIPES 50 /* maximum number of pipelined requests */ #define MAX_HOST_RECOVER 1 /* Max number of auto recovery */ #define DEFAULT_DELAY 30 /* Default write flush delay in ms */ struct _HTInputStream { const HTInputStreamClass * isa; }; PRIVATE int HostEvent(SOCKET soc, void * pVoid, HTEventType type); /* Type definitions and global variables etc. local to this module */ PRIVATE time_t HostTimeout = HOST_OBJECT_TTL; /* Timeout for host objects */ PRIVATE time_t HTPassiveTimeout = TCP_IDLE_PASSIVE; /* Passive timeout in s */ PRIVATE ms_t HTActiveTimeout = TCP_IDLE_ACTIVE; /* Active timeout in ms */ PRIVATE HTList ** HostTable = NULL; PRIVATE HTList * PendHost = NULL; /* List of pending host elements */ /* JK: New functions for interruption the automatic pending request activation */ PRIVATE HTHost_ActivateRequestCallback * ActivateReqCBF = NULL; PRIVATE int HTHost_ActivateRequest (HTNet *net); PRIVATE BOOL DoPendingReqLaunch = YES; /* controls automatic activation of pending requests */ PRIVATE int EventTimeout = -1; /* Global Host event timeout */ PRIVATE ms_t WriteDelay = DEFAULT_DELAY; /* Delay in ms */ PRIVATE int MaxPipelinedRequests = MAX_PIPES; /* ------------------------------------------------------------------------- */ PRIVATE void free_object (HTHost * me) { if (me) { int i; HT_FREE(me->hostname); HT_FREE(me->type); HT_FREE(me->server); HT_FREE(me->user_agent); HT_FREE(me->range_units); /* Delete the channel (if any) */ if (me->channel) { HTChannel_delete(me->channel, HT_OK); me->channel = NULL; } /* Unregister the events */ for (i = 0; i < HTEvent_TYPES; i++) HTEvent_delete(me->events[i]); /* Delete the timer (if any) */ if (me->timer) HTTimer_delete(me->timer); /* Delete the queues */ HTList_delete(me->pipeline); HTList_delete(me->pending); HT_FREE(me); } } PRIVATE BOOL delete_object (HTList * list, HTHost * me) { HTTRACE(CORE_TRACE, "Host info... object %p from list %p\n" _ me _ list); HTList_removeObject(list, (void *) me); free_object(me); return YES; } PRIVATE BOOL isLastInPipe (HTHost * host, HTNet * net) { return HTList_lastObject(host->pipeline) == net; } PRIVATE BOOL killPipeline (HTHost * host, HTEventType type) { if (host) { int piped = HTList_count(host->pipeline); int pending = HTList_count(host->pending); int cnt; HTTRACE(CORE_TRACE, "Host kill... Pipeline due to %s event\n" _ HTEvent_type2str(type)); /* Terminate all net objects in pending queue */ for (cnt=0; cnt<pending; cnt++) { HTNet * net = HTList_removeLastObject(host->pending); if (net) { HTTRACE(CORE_TRACE, "Host kill... Terminating net object %p from pending queue\n" _ net); net->registeredFor = 0; (*net->event.cbf)(HTChannel_socket(host->channel), net->event.param, type); if (host->lock == net) host->lock = NULL; } } /* Terminate all net objects in pipeline */ if (piped >= 1) { /* ** Terminte all net objects in the pipeline */ for (cnt=0; cnt<piped; cnt++) { HTNet * net = HTList_firstObject(host->pipeline); if (net) { HTTRACE(CORE_TRACE, "Host kill... Terminating net object %p from pipe line\n" _ net); net->registeredFor = 0; (*net->event.cbf)(HTChannel_socket(host->channel), net->event.param, type); } } } return YES; } return NO; } /* ** Silently close an idle persistent connection after ** HTActiveTimeout secs */ PRIVATE int IdleTimeoutEvent (HTTimer * timer, void * param, HTEventType type) { HTHost * host = (HTHost *) param; SOCKET sockfd = HTChannel_socket(host->channel); HTTimer_delete(timer); host->timer = NULL; return HostEvent (sockfd, host, HTEvent_CLOSE); } /* ** HostEvent - host event manager - recieves events from the event ** manager and dispatches them to the client net objects by calling the ** net object's cbf. ** */ PRIVATE int HostEvent (SOCKET soc, void * pVoid, HTEventType type) { HTHost * host = (HTHost *)pVoid; if (type == HTEvent_READ || type == HTEvent_CLOSE || type == HTEvent_ACCEPT) { HTNet * targetNet; /* call the first net object */ do { int ret; /* netscape and apache servers can do a lazy close well after usage * of previous socket has been dispensed by the library, * the section below makes sure the event does not get miss attributed */ if (HTChannel_socket(host->channel) != soc && type != HTEvent_ACCEPT && !host->listening) { HTTRACE(CORE_TRACE, "Host Event.. wild socket %d type = %s real socket is %d\n" _ soc _ type == HTEvent_CLOSE ? "Event_Close" : "Event_Read" _ HTChannel_socket(host->channel)); return HT_OK; } targetNet = (HTNet *)HTList_firstObject(host->pipeline); if (targetNet) { HTTRACE(CORE_TRACE, "Host Event.. READ passed to `%s\'\n" _ HTAnchor_physical(HTRequest_anchor(HTNet_request(targetNet)))); if ((ret = (*targetNet->event.cbf)(HTChannel_socket(host->channel), targetNet->event.param, type)) != HT_OK) return ret; } if (targetNet == NULL && host->remainingRead > 0) { HTTRACE(CORE_TRACE, "HostEvent... Error: %d bytes left to read and nowhere to put them\n" _ host->remainingRead); host->remainingRead = 0; /* ** Fall through to close the channel */ } /* call pipelined net object to eat all the data in the channel */ } while (host->remainingRead > 0); /* last target net should have set remainingRead to 0 */ if (targetNet) return HT_OK; /* If there was notargetNet, it should be a close */ HTTRACE(CORE_TRACE, "Host Event.. host %p `%s\' closed connection.\n" _ host _ host->hostname); /* Is there garbage in the channel? Let's check: */ { char buf[256]; int ret; memset(buf, '\0', sizeof(buf)); if (HTChannel_socket(host->channel) != INVSOC) { while ((ret = NETREAD(HTChannel_socket(host->channel), buf, sizeof(buf)-1)) > 0) { HTTRACE(CORE_TRACE, "Host Event.. Host %p `%s\' had %d extraneous bytes: `%s\'\n" _ host _ host->hostname _ ret _ buf); memset(buf, '\0', sizeof(buf)); } } } HTHost_clearChannel(host, HT_OK); return HT_OK; /* extra garbage does not constitute an application error */ } else if (type == HTEvent_WRITE || type == HTEvent_CONNECT) { HTNet * targetNet = (HTNet *)HTList_lastObject(host->pipeline); if (targetNet) { HTTRACE(CORE_TRACE, "Host Event.. WRITE passed to `%s\'\n" _ HTAnchor_physical(HTRequest_anchor(HTNet_request(targetNet)))); return (*targetNet->event.cbf)(HTChannel_socket(host->channel), targetNet->event.param, type); } HTTRACE(CORE_TRACE, "Host Event Host %p (`%s\') dispatched with event %s but doesn't have a target - %d requests made, %d requests in pipe, %d pending\n" _ host _ host ? host->hostname : "<null>" _ HTEvent_type2str(type) _ host ? host->reqsMade : -1 _ HTList_count(host->pipeline) _ HTList_count(host->pending)); #if 0 HTDEBUGBREAK("Host Event.. Host %p (`%s\') dispatched with event %d\n" _ host _ host ? host->hostname : "<null>" _ type); return HT_ERROR; #else return HT_OK; #endif } else if (type == HTEvent_TIMEOUT) { killPipeline(host, HTEvent_TIMEOUT); } else { HTTRACE(CORE_TRACE, "Don't know how to handle OOB data from `%s\'?\n" _ host->hostname); } return HT_OK; } /* ** Search the host info cache for a host object or create a new one ** and add it. Examples of host names are ** ** www.w3.org ** www.foo.com:8000 ** 18.52.0.18 ** ** Returns Host object or NULL if error. You may get back an already ** existing host object - you're not guaranteed a new one each time. */ PUBLIC HTHost * HTHost_new (char * host, u_short u_port) { HTList * list = NULL; /* Current list in cache */ HTHost * pres = NULL; int hash = 0; if (!host) { HTTRACE(CORE_TRACE, "Host info... Bad argument\n"); return NULL; } /* Find a hash for this host */ { char *ptr; for (ptr=host; *ptr; ptr++) hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HOST_HASH_SIZE); if (!HostTable) { if ((HostTable = (HTList **) HT_CALLOC(HOST_HASH_SIZE, sizeof(HTList *))) == NULL) HT_OUTOFMEM("HTHost_find"); } if (!HostTable[hash]) HostTable[hash] = HTList_new(); list = HostTable[hash]; } /* Search the cache */ { HTList * cur = list; while ((pres = (HTHost *) HTList_nextObject(cur))) { if (!strcmp(pres->hostname, host) && u_port == pres->u_port) { if (HTHost_isIdle(pres) && time(NULL)>pres->ntime+HostTimeout){ HTTRACE(CORE_TRACE, "Host info... Collecting host info %p\n" _ pres); delete_object(list, pres); pres = NULL; } break; } } } /* If not found then create new Host object, else use existing one */ if (pres) { if (pres->channel) { /* ** If we have a TTL for this TCP connection then ** check that we haven't passed it. */ if (pres->expires > 0) { time_t t = time(NULL); if (HTHost_isIdle(pres) && pres->expires < t) { HTTRACE(CORE_TRACE, "Host info... Persistent channel %p gotten cold\n" _ pres->channel); HTHost_clearChannel(pres, HT_OK); } else { pres->expires = t + HTPassiveTimeout; HTTRACE(CORE_TRACE, "Host info... REUSING CHANNEL %p\n" _ pres->channel); } } } else { HTTRACE(CORE_TRACE, "Host info... Found Host %p with no active channel\n" _ pres); } } else { if ((pres = (HTHost *) HT_CALLOC(1, sizeof(HTHost))) == NULL) HT_OUTOFMEM("HTHost_add"); pres->hash = hash; StrAllocCopy(pres->hostname, host); pres->u_port = u_port; pres->ntime = time(NULL); pres->mode = HT_TP_SINGLE; pres->delay = WriteDelay; pres->inFlush = NO; { int i; for (i = 0; i < HTEvent_TYPES; i++) pres->events[i]= HTEvent_new(HostEvent, pres, HT_PRIORITY_MAX, EventTimeout); } HTTRACE(CORE_TRACE, "Host info... added `%s\' with host %p to list %p\n" _ host _ pres _ list); HTList_addObject(list, (void *) pres); } return pres; } PUBLIC HTHost * HTHost_newWParse (HTRequest * request, char * url, u_short u_port) { char * port; char * fullhost = NULL; char * parsedHost = NULL; SockA * sin; HTHost * me; char * proxy = HTRequest_proxy(request); fullhost = HTParse(proxy ? proxy : url, "", PARSE_HOST); /* If there's an @ then use the stuff after it as a hostname */ if (fullhost) { char * at_sign; if ((at_sign = strchr(fullhost, '@')) != NULL) parsedHost = at_sign+1; else parsedHost = fullhost; } if (!parsedHost || !*parsedHost) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_NO_HOST, NULL, 0, "HTHost_newWParse"); HT_FREE(fullhost); return NULL; } /* See if the default port should be overridden */ if ((port = strchr(parsedHost, ':')) != NULL) { *port++ = '\0'; if (*port && isdigit((int) *port)) u_port = (u_short) atol(port); } HTTRACE(PROT_TRACE, "HTHost parse Looking up `%s\' on port %u\n" _ parsedHost _ u_port); /* Find information about this host */ if ((me = HTHost_new(parsedHost, u_port)) == NULL) { HTTRACE(PROT_TRACE, "HTHost parse Can't get host info\n"); me->tcpstate = TCP_ERROR; return NULL; } sin = &me->sock_addr; memset((void *) sin, '\0', sizeof(SockA)); #ifdef DECNET sin->sdn_family = AF_DECnet; net->sock_addr.sdn_objnum = port ? (unsigned char)(strtol(port, (char **) 0, 10)) : DNP_OBJ; #else /* Internet */ sin->sin_family = AF_INET; sin->sin_port = htons(u_port); #endif HT_FREE(fullhost); /* parsedHost points into fullhost */ return me; } /* ** Search the host info cache for a host object. Examples of host names: ** ** www.w3.org ** www.foo.com:8000 ** 18.52.0.18 ** ** Returns Host object or NULL if not found. */ PUBLIC HTHost * HTHost_find (char * host) { HTList * list = NULL; /* Current list in cache */ HTHost * pres = NULL; HTTRACE(CORE_TRACE, "Host info... Looking for `%s\'\n" _ host ? host : "<null>"); /* Find a hash for this host */ if (host && HostTable) { int hash = 0; char *ptr; for (ptr=host; *ptr; ptr++) hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HOST_HASH_SIZE); if (!HostTable[hash]) return NULL; list = HostTable[hash]; /* Search the cache */ { HTList * cur = list; while ((pres = (HTHost *) HTList_nextObject(cur))) { if (!strcmp(pres->hostname, host)) { if (time(NULL) > pres->ntime + HostTimeout) { HTTRACE(CORE_TRACE, "Host info... Collecting host %p\n" _ pres); delete_object(list, pres); pres = NULL; } else { HTTRACE(CORE_TRACE, "Host info... Found `%s\'\n" _ host); } return pres; } } } } return NULL; } /* ** Cleanup the host list */ PUBLIC void HTHost_deleteAll (void) { HTList * list; HTHost * host; int i; if (!HostTable) return; for (i=0; i < HOST_HASH_SIZE; i++) { list = HostTable[i]; if (!list) continue; while ((host = (HTHost *) HTList_removeFirstObject(list)) != NULL) free_object(host); HTList_delete(list); } HT_FREE(HostTable); HostTable = NULL; } /* ** Get and set the hostname of the remote host */ PUBLIC char * HTHost_name (HTHost * host) { return host ? host->hostname : NULL; } /* ** Get and set the type class of the remote host */ PUBLIC char * HTHost_class (HTHost * host) { return host ? host->type : NULL; } PUBLIC void HTHost_setClass (HTHost * host, char * s_class) { if (host && s_class) StrAllocCopy(host->type, s_class); } /* ** Get and set the version of the remote host */ PUBLIC int HTHost_version (HTHost *host) { return host ? host->version : 0; } PUBLIC void HTHost_setVersion (HTHost * host, int version) { if (host) host->version = version; } /* ** Get and set the passive timeout for persistent entries. */ PUBLIC BOOL HTHost_setPersistTimeout (time_t timeout) { if (timeout > 0) { HTPassiveTimeout = timeout; return YES; } return NO; } PUBLIC time_t HTHost_persistTimeout (void) { return HTPassiveTimeout; } /* ** Get and set the active timeout for persistent entries. */ PUBLIC BOOL HTHost_setActiveTimeout (ms_t timeout) { if (timeout > 1000) { HTActiveTimeout = timeout; return YES; } return NO; } PUBLIC ms_t HTHost_activeTimeout (void) { return HTActiveTimeout; } /* Persistent Connection Expiration ** -------------------------------- ** Should normally not be used. If, then use calendar time. */ PUBLIC void HTHost_setPersistExpires (HTHost * host, time_t expires) { if (host) host->expires = expires; } PUBLIC time_t HTHost_persistExpires (HTHost * host) { return host ? host->expires : -1; } PUBLIC void HTHost_setReqsPerConnection (HTHost * host, int reqs) { if (host) host->reqsPerConnection = reqs; } PUBLIC int HTHost_reqsPerConnection (HTHost * host) { return host ? host->reqsPerConnection : -1; } PUBLIC void HTHost_setReqsMade (HTHost * host, int reqs) { if (host) host->reqsMade = reqs; } PUBLIC int HTHost_reqsMade (HTHost * host) { return host ? host->reqsMade : -1; } /* ** Public methods for this host */ PUBLIC HTMethod HTHost_publicMethods (HTHost * me) { return me ? me->methods : METHOD_INVALID; } PUBLIC void HTHost_setPublicMethods (HTHost * me, HTMethod methodset) { if (me) me->methods = methodset; } PUBLIC void HTHost_appendPublicMethods (HTHost * me, HTMethod methodset) { if (me) me->methods |= methodset; } /* ** Get and set the server name of the remote host */ PUBLIC char * HTHost_server (HTHost * host) { return host ? host->server : NULL; } PUBLIC BOOL HTHost_setServer (HTHost * host, const char * server) { if (host && server) { StrAllocCopy(host->server, server); return YES; } return NO; } /* ** Get and set the userAgent name of the remote host */ PUBLIC char * HTHost_userAgent (HTHost * host) { return host ? host->user_agent : NULL; } PUBLIC BOOL HTHost_setUserAgent (HTHost * host, const char * userAgent) { if (host && userAgent) { StrAllocCopy(host->user_agent, userAgent); return YES; } return NO; } /* ** Get and set acceptable range units */ PUBLIC char * HTHost_rangeUnits (HTHost * host) { return host ? host->range_units : NULL; } PUBLIC BOOL HTHost_setRangeUnits (HTHost * host, const char * units) { if (host && units) { StrAllocCopy(host->range_units, units); return YES; } return NO; } /* ** Checks whether a specific range unit is OK. We always say ** YES except if we have a specific statement from the server that ** it doesn't understand byte ranges - that is - it has sent "none" ** in a "Accept-Range" response header */ PUBLIC BOOL HTHost_isRangeUnitAcceptable (HTHost * host, const char * unit) { if (host && unit) { #if 0 if (host->range_units) { char * start = HTStrCaseStr(host->range_units, "none"); /* ** Check that "none" is infact a token. It could be part of some ** other valid string, so we'd better check for it. */ if (start) { } return NO; } #endif return strcasecomp(unit, "bytes") ? NO : YES; } return NO; } /* ** As soon as we know that this host accepts persistent connections, ** we associated the channel with the host. ** We don't want more than MaxSockets-2 connections to be persistent in ** order to avoid deadlock. */ PUBLIC BOOL HTHost_setPersistent (HTHost * host, BOOL persistent, HTTransportMode mode) { if (!host) return NO; if (!persistent) { /* ** We use the HT_IGNORE status code as we don't want to free ** the stream at this point in time. The situation we want to ** avoid is that we free the channel from within the stream pipe. ** This will lead to an infinite look having the stream freing ** itself. */ host->persistent = NO; return HTHost_clearChannel(host, HT_IGNORE); } /* ** Set the host persistent if not already. Also update the mode to ** the new one - it may have changed */ HTHost_setMode(host, mode); if (!host->persistent) { SOCKET sockfd = HTChannel_socket(host->channel); if (sockfd != INVSOC && HTNet_availablePersistentSockets() > 0) { host->persistent = YES; host->expires = time(NULL) + HTPassiveTimeout; /* Default timeout */ HTChannel_setHost(host->channel, host); HTNet_increasePersistentSocket(); HTTRACE(CORE_TRACE, "Host info... added host %p as persistent\n" _ host); return YES; } else { HTTRACE(CORE_TRACE, "Host info... no room for persistent socket %d\n" _ sockfd); return NO; } } else { HTTRACE(CORE_TRACE, "Host info... %p already persistent\n" _ host); return YES; } return NO; } /* ** Check whether we have a persistent channel or not */ PUBLIC BOOL HTHost_isPersistent (HTHost * host) { return host && host->persistent; } /* ** Find persistent channel associated with this host. */ PUBLIC HTChannel * HTHost_channel (HTHost * host) { return host ? host->channel : NULL; } /* ** Check whether we have got a "close" notification, for example in the ** connection header */ PUBLIC BOOL HTHost_setCloseNotification (HTHost * host, BOOL mode) { if (host) { host->close_notification = mode; return YES; } return NO; } PUBLIC BOOL HTHost_closeNotification (HTHost * host) { return host && host->close_notification; } /* ** Clear the persistent entry by deleting the channel object. Note that ** the channel object is only deleted if it's not used anymore. */ PUBLIC BOOL HTHost_clearChannel (HTHost * host, int status) { if (host && host->channel) { HTChannel_setHost(host->channel, NULL); HTEvent_unregister(HTChannel_socket(host->channel), HTEvent_READ); HTEvent_unregister(HTChannel_socket(host->channel), HTEvent_WRITE); host->registeredFor = 0; /* ** We don't want to recursively delete ourselves so if we are ** called from within the stream pipe then don't delete the channel ** at this point */ HTChannel_delete(host->channel, status); host->expires = 0; host->channel = NULL; host->tcpstate = TCP_BEGIN; host->reqsMade = 0; if (HTHost_isPersistent(host)) { HTNet_decreasePersistentSocket(); host->persistent = NO; } host->close_notification = NO; host->broken_pipe = NO; host->mode = HT_TP_SINGLE; host->recovered = 0; HTTRACE(CORE_TRACE, "Host info... removed host %p as persistent\n" _ host); if (!HTList_isEmpty(host->pending)) { HTTRACE(CORE_TRACE, "Host has %d object(s) pending - attempting launch\n" _ HTList_count(host->pending)); HTHost_launchPending(host); } return YES; } return NO; } PUBLIC BOOL HTHost_doRecover (HTHost * host) { return host ? host->do_recover : NO; } /* ** Move all entries in the pipeline and move the rest to the pending ** queue. They will get launched at a later point in time. */ PUBLIC BOOL HTHost_recoverPipe (HTHost * host) { if (host) { int piped = HTList_count(host->pipeline); /* ** First check that we haven't already recovered more than we want */ if (host->recovered > MAX_HOST_RECOVER) { HTTRACE(CORE_TRACE, "Host recover %p already %d times - not doing it anymore\n" _ host _ host->recovered); return NO; } /* ** If we decided to recover and actually have something in the pipe ** then go ahead. */ if (piped > 0) { int cnt; host->recovered++; HTTRACE(CORE_TRACE, "Host recover %p recovered %d times. Moving %d Net objects from pipe line to pending queue\n" _ host _ host->recovered _ piped); /* ** Unregister this host for all events */ HTEvent_unregister(HTChannel_socket(host->channel), HTEvent_READ); HTEvent_unregister(HTChannel_socket(host->channel), HTEvent_WRITE); host->registeredFor = 0; /* ** Set new mode to single until we know what is going on */ host->mode = HT_TP_SINGLE; /* ** Move all net objects from the net object to the pending queue. */ if (!host->pending) host->pending = HTList_new(); for (cnt=0; cnt<piped; cnt++) { HTNet * net = HTList_removeLastObject(host->pipeline); HTTRACE(CORE_TRACE, "Host recover Resetting net object %p\n" _ net); net->registeredFor = 0; (*net->event.cbf)(HTChannel_socket(host->channel), net->event.param, HTEvent_RESET); HTList_appendObject(host->pending, net); host->lock = net; } HTChannel_setSemaphore(host->channel, 0); HTHost_clearChannel(host, HT_INTERRUPTED); host->do_recover = NO; } return YES; } return NO; } /* ** Terminate a pipeline prematurely, for example because of timeout, ** interruption, etc. */ PUBLIC BOOL HTHost_killPipe (HTHost * host) { return killPipeline(host, HTEvent_CLOSE); } /* ** Handle the connection mode. The mode may change mode in the ** middle of a connection. */ PUBLIC HTTransportMode HTHost_mode (HTHost * host, BOOL * active) { return host ? host->mode : HT_TP_SINGLE; } /* ** If the new mode is lower than the old mode then adjust the pipeline ** accordingly. That is, if we are going into single mode then move ** all entries in the pipeline and move the rest to the pending ** queue. They will get launched at a later point in time. */ PUBLIC BOOL HTHost_setMode (HTHost * host, HTTransportMode mode) { if (host) { /* ** Check the new mode and see if we must adjust the queues. */ if (mode == HT_TP_SINGLE && host->mode > mode) { int piped = HTList_count(host->pipeline); if (piped > 0) { int cnt; HTTRACE(CORE_TRACE, "Host info... Moving %d Net objects from pipe line to pending queue\n" _ piped); if (!host->pending) host->pending = HTList_new(); for (cnt=0; cnt<piped; cnt++) { HTNet * net = HTList_removeLastObject(host->pipeline); HTTRACE(CORE_TRACE, "Host info... Resetting net object %p\n" _ net); (*net->event.cbf)(HTChannel_socket(host->channel), net->event.param, HTEvent_RESET); HTList_appendObject(host->pending, net); } HTChannel_setSemaphore(host->channel, 0); HTHost_clearChannel(host, HT_INTERRUPTED); } } /* ** If we know that this host is bad then we don't allow anything than ** single mode. We can't recover connections for the rest of our life */ if (mode == HT_TP_PIPELINE && host->recovered > MAX_HOST_RECOVER) { HTTRACE(PROT_TRACE, "Host info... %p is bad for pipelining so we won't do it!!!\n" _ host); } else { host->mode = mode; HTTRACE(PROT_TRACE, "Host info... New mode is %d for host %p\n" _ host->mode _ host); } } return NO; } /* ** Check whether a host is idle meaning if it is ready for a new ** request which depends on the mode of the host. If the host is ** idle, i.e. ready for use then return YES else NO. If the host supports ** persistent connections then still only return idle if no requests are ** ongoing. */ PUBLIC BOOL HTHost_isIdle (HTHost * host) { return (host && HTList_isEmpty(host->pipeline)); } PRIVATE BOOL _roomInPipe (HTHost * host) { int count; if (!host || (host->reqsPerConnection && host->reqsMade >= host->reqsPerConnection) || HTHost_closeNotification(host) || host->broken_pipe) return NO; count = HTList_count(host->pipeline); switch (host->mode) { case HT_TP_SINGLE: return count <= 0; case HT_TP_PIPELINE: return (host->recovered < MAX_HOST_RECOVER) ? (count < MaxPipelinedRequests) : (count <= 0); case HT_TP_INTERLEAVE: return YES; } return NO; } /* ** Add a net object to the host object. If the host ** is idle then add to active list (pipeline) else add ** it to the pending list ** Return HT_PENDING if we must pend, HT_OK, or HT_ERROR */ PUBLIC int HTHost_addNet (HTHost * host, HTNet * net) { if (host && net) { int status = HT_OK; BOOL doit = (host->doit==net); /* ** If we don't have a socket already then check to see if we can get ** one. Otherwise we put the host object into our pending queue. */ if (!host->channel && HTNet_availableSockets() <= 0) { /* Create list for pending Host objects */ if (!PendHost) PendHost = HTList_new(); /* Add the host object ad pending if not already */ if (HTList_indexOf(PendHost, host) < 0) HTList_addObject(PendHost, host); /* ** Add the Net object to the Host object. If it is the current Net ** obejct holding the lock then add it to the beginning of the list. ** Otherwise add it to the end */ if (!host->pending) host->pending = HTList_new(); if (host->lock == net) HTList_appendObject(host->pending, net); else HTList_addObject(host->pending, net); HTTRACE(CORE_TRACE, "Host info... Added Net %p (request %p) as pending on pending Host %p, %d requests made, %d requests in pipe, %d pending\n" _ net _ net->request _ host _ host->reqsMade _ HTList_count(host->pipeline) _ HTList_count(host->pending)); return HT_PENDING; } #if 0 /* ** First check whether the net object is already on either queue. ** Do NOT add extra copies of the HTNet object to ** the pipeline or pending list (if it's already on the list). */ if (HTList_indexOf(host->pipeline, net) >= 0) { HTTRACE(CORE_TRACE, "Host info... The Net %p (request %p) is already in pipe," " %d requests made, %d requests in pipe, %d pending\n" _ net _ net->request _ host->reqsMade _ HTList_count(host->pipeline) _ HTList_count(host->pending)); HTDEBUGBREAK("Net object %p registered multiple times in pipeline\n" _ net); return HT_OK; } if (HTList_indexOf(host->pending, net) >= 0) { HTTRACE(CORE_TRACE, "Host info... The Net %p (request %p) already pending," " %d requests made, %d requests in pipe, %d pending\n" _ net _ net->request _ host->reqsMade _ HTList_count(host->pipeline) _ HTList_count(host->pending)); HTDEBUGBREAK("Net object %p registered multiple times in pending queue\n" _ net); return HT_PENDING; } #endif /* ** Add net object to either active or pending queue. */ if (_roomInPipe(host) && (HTList_isEmpty(host->pending) || doit)) { if (doit) host->doit = NULL; if (!host->pipeline) host->pipeline = HTList_new(); HTList_addObject(host->pipeline, net); host->reqsMade++; HTTRACE(CORE_TRACE, "Host info... Added Net %p (request %p) to pipe on Host %p, %d requests made, %d requests in pipe, %d pending\n" _ net _ net->request _ host _ host->reqsMade _ HTList_count(host->pipeline) _ HTList_count(host->pending)); /* ** If we have been idle then make sure we delete the timer */ if (host->timer) { HTTimer_delete(host->timer); host->timer = NULL; } /*JK: New CBF function ** Call any user-defined callback to say the request will ** be processed. */ HTHost_ActivateRequest (net); } else { if (!host->pending) host->pending = HTList_new(); HTList_addObject(host->pending, net); HTTRACE(CORE_TRACE, "Host info... Added Net %p (request %p) as pending on Host %p, %d requests made, %d requests in pipe, %d pending\n" _ net _ net->request _ host _ host->reqsMade _ HTList_count(host->pipeline) _ HTList_count(host->pending)); status = HT_PENDING; } return status; } return HT_ERROR; } PRIVATE BOOL HTHost_free (HTHost * host, int status) { if (host->channel) { /* Check if we should keep the socket open */ if (HTHost_isPersistent(host)) { int piped = HTList_count(host->pipeline); if (HTHost_closeNotification(host)) { HTTRACE(CORE_TRACE, "Host Object. got close notifiation on socket %d\n" _ HTChannel_socket(host->channel)); /* ** If more than a single element (this one) in the pipe ** then we have to recover gracefully */ if (piped > 1) { host->reqsPerConnection = host->reqsMade - piped; HTTRACE(CORE_TRACE, "%d requests made, %d in pipe, max %d requests pr connection\n" _ host->reqsMade _ piped _ host->reqsPerConnection); host->do_recover = YES; /* @@ JK: not clear yet if I need or not to set the channel to NULL. I think not */ /* HTChannel_delete(host->channel, status); */ if (HTChannel_delete(host->channel, status)) { HTTRACE(CORE_TRACE, "Host Event.. clearing channel on host %p (%s)\n" _ host _ host->hostname); host->channel = NULL; } } else { HTChannel_setSemaphore(host->channel, 0); HTHost_clearChannel(host, status); } } else if (piped<=1 && host->reqsMade==host->reqsPerConnection) { HTTRACE(CORE_TRACE, "Host Object. closing persistent socket %d\n" _ HTChannel_socket(host->channel)); /* ** By lowering the semaphore we make sure that the channel ** is gonna be deleted */ HTChannel_setSemaphore(host->channel, 0); HTHost_clearChannel(host, status); } else { HTTRACE(CORE_TRACE, "Host Object. keeping persistent socket %d\n" _ HTChannel_socket(host->channel)); if (HTChannel_delete(host->channel, status)) { HTDEBUGBREAK("Host Event.. Channel unexpected deleted from host %p (%s)\n" _ host _ host->hostname); host->channel = NULL; } /* ** If connection is idle then set a timer so that we close the ** connection if idle too long */ if (piped<=1 && HTList_isEmpty(host->pending) && !host->timer) { host->timer = HTTimer_new(NULL, IdleTimeoutEvent, host, HTActiveTimeout, YES, NO); HTTRACE(PROT_TRACE, "Host........ Object %p going idle...\n" _ host); } } return YES; } else { HTTRACE(CORE_TRACE, "Host Object. closing socket %d\n" _ HTChannel_socket(host->channel)); HTChannel_setSemaphore(host->channel, 0); HTHost_clearChannel(host, status); } } return NO; } PUBLIC BOOL HTHost_deleteNet (HTHost * host, HTNet * net, int status) { if (host && net) { HTTRACE(CORE_TRACE, "Host info... Remove %p from pipe\n" _ net); /* If the Net object is in the pipeline then also update the channel */ if (host->pipeline && HTList_indexOf(host->pipeline, net) >= 0) { HTHost_free(host, status); HTList_removeObjectAll(host->pipeline, net); } HTList_removeObjectAll(host->pending, net); /* just to make sure */ host->lock = HTList_firstObject(host->pending); return YES; } return NO; } /* ** Handle pending host objects. ** There are two ways we can end up with pending reqyests: ** 1) If we are out of sockets then register new host objects as pending. ** 2) If we are pending on a connection then register new net objects as ** pending ** This set of functions handles pending host objects and can start new ** requests as resources get available */ /* ** Check this host object for any pending requests and return the next ** registered Net object. */ PUBLIC HTNet * HTHost_nextPendingNet (HTHost * host) { HTNet * net = NULL; if (host && host->pending) { /*JK 23/Sep/96 Bug correction. Associated the following lines to the **above if. There was a missing pair of brackets. */ if ((net = (HTNet *) HTList_removeFirstObject(host->pending)) != NULL) { HTTRACE(CORE_TRACE, "Host info... Popping %p from pending net queue on host %p\n" _ net _ host); #if 0 { HTRequest * request = HTNet_request(net); char * uri = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); fprintf(stderr, "Popping '%s'\n", uri); } #endif host->doit = net; } } return net; } /* ** Return the current list of pending host objects waiting for a socket */ PUBLIC HTHost * HTHost_nextPendingHost (void) { HTHost * host = NULL; if (PendHost) { if ((host = (HTHost *) HTList_removeFirstObject(PendHost)) != NULL) HTTRACE(PROT_TRACE, "Host info... Popping %p from pending host queue\n" _ host); } return host; } /* ** Start the next pending request if any. First we look for pending ** requests for the same host and then we check for any other pending ** hosts */ PUBLIC BOOL HTHost_launchPending (HTHost * host) { HTNet * net = NULL; if (!host) { HTTRACE(PROT_TRACE, "Host info... Bad arguments\n"); return NO; } /* ** In pipeline we can only have one doing writing at a time. ** We therefore check that there are no other Net object ** registered for write */ if (host->mode == HT_TP_PIPELINE) { net = (HTNet *) HTList_lastObject(host->pipeline); if (net && net->registeredFor == HTEvent_WRITE) return NO; } /* ** Check the current Host object for pending Net objects */ if (_roomInPipe(host) && DoPendingReqLaunch && (net = HTHost_nextPendingNet(host))) { HTHost_ActivateRequest(net); HTTRACE(CORE_TRACE, "Launch pending net object %p with %d reqs in pipe (%d reqs made)\n" _ net _ HTList_count(host->pipeline) _ host->reqsMade); return HTNet_execute(net, HTEvent_WRITE); } /* ** Check for other pending Host objects */ if (DoPendingReqLaunch && HTNet_availableSockets() > 0) { HTHost * pending = HTHost_nextPendingHost(); if (pending && (net = HTHost_nextPendingNet(pending))) { if (!pending->pipeline) pending->pipeline = HTList_new(); HTList_addObject(pending->pipeline, net); host->reqsMade++; HTTRACE(CORE_TRACE, "Launch pending host object %p, net %p with %d reqs in pipe (%d reqs made)\n" _ pending _ net _ HTList_count(pending->pipeline) _ pending->reqsMade); HTHost_ActivateRequest(net); return HTNet_execute(net, HTEvent_WRITE); } } return YES; } PUBLIC HTNet * HTHost_firstNet (HTHost * host) { return (HTNet *) HTList_firstObject(host->pipeline); } PUBLIC int HTHost_numberOfOutstandingNetObjects (HTHost * host) { return host ? HTList_count(host->pipeline) : -1; } PUBLIC int HTHost_numberOfPendingNetObjects (HTHost * host) { return host ? HTList_count(host->pending) : -1; } /* ** The host event manager keeps track of the state of it's client engines ** (typically HTTPEvent), accepting multiple blocks on read or write from ** multiple pipelined engines. It then registers its own engine ** (HostEvent) with the event manager. */ PUBLIC int HTHost_connect (HTHost * host, HTNet * net, char * url) { HTRequest * request = HTNet_request(net); int status = HT_OK; if (!host) { HTProtocol * protocol = HTNet_protocol(net); if ((host = HTHost_newWParse(request, url, HTProtocol_id(protocol))) == NULL) return HT_ERROR; /* ** If not already locked and without a channel ** then lock the darn thing with the first Net object ** pending. */ if (!host->lock && !host->channel) { HTNet * next_pending = NULL; host->forceWriteFlush = YES; host->lock = (next_pending = HTList_firstObject(host->pending)) ? next_pending : net; HTTRACE(CORE_TRACE, "Host connect Grabbing lock on Host %p with %p\n" _ host _ host->lock); } HTNet_setHost(net, host); } if (!host->lock || (host->lock && host->lock == net)) { status = HTDoConnect(net); if (status == HT_PENDING) return HT_WOULD_BLOCK; else if (status == HT_WOULD_BLOCK) { host->lock = net; return status; } else { /* ** See if there is already a new pending request that should ** take over the current lock */ HTNet * next_pending = NULL; if ((next_pending = HTList_firstObject(host->pending))) { HTTRACE(CORE_TRACE, "Host connect Changing lock on Host %p to %p\n" _ host _ next_pending); host->lock = next_pending; } else { HTTRACE(CORE_TRACE, "Host connect Unlocking Host %p\n" _ host); host->lock = NULL; } return status; } } else { HTTRACE(CORE_TRACE, "Host connect Host %p already locked with %p\n" _ host _ host->lock); if ((status = HTHost_addNet(host, net)) == HT_PENDING) { return HT_PENDING; } } return HT_ERROR; /* @@@ - some more deletion and stuff here? */ } PUBLIC int HTHost_listen (HTHost * host, HTNet * net, char * url) { HTRequest * request = HTNet_request(net); int status = HT_OK; if (!host) { HTProtocol * protocol = HTNet_protocol(net); if ((host = HTHost_newWParse(request, url, HTProtocol_id(protocol))) == NULL) return HT_ERROR; /* ** If not already locked and without a channel ** then lock the darn thing with the first Net object ** pending. */ if (!host->lock && !host->channel) { host->forceWriteFlush = YES; host->lock = net; } HTNet_setHost(net, host); } /* ** See if we already have a dedicated listen Net object. If not ** then create one. */ if (!host->listening) host->listening = HTNet_new(host); /* ** Start listening on the Net object */ status = HTDoListen(host->listening, net, HT_BACKLOG); if (status != HT_OK) { HTTRACE(CORE_TRACE, "Host listen. On Host %p resulted in %d\n" _ host _ status); return status; } return HT_OK; } PUBLIC int HTHost_accept (HTHost * host, HTNet * net, char * url) { int status = HT_OK; if (!host || !host->listening) { HTTRACE(CORE_TRACE, "Host accept. No host object or not listening on anything\n"); return HT_ERROR; } if (!host->lock || (host->lock && host->lock == net)) { status = HTDoAccept(host->listening, net); if (status == HT_PENDING) return HT_WOULD_BLOCK; else if (status == HT_WOULD_BLOCK) { host->lock = net; return status; } else { /* ** See if there is already a new pending request that should ** take over the current lock */ HTNet * next_pending = NULL; if ((next_pending = HTList_firstObject(host->pending))) { HTTRACE(CORE_TRACE, "Host connect Changing lock on Host %p to %p\n" _ host _ next_pending); host->lock = next_pending; } else { HTTRACE(CORE_TRACE, "Host connect Unlocking Host %p\n" _ host); host->lock = NULL; } return status; } } else { HTTRACE(CORE_TRACE, "Host connect Host %p already locked with %p\n" _ host _ host->lock); if ((status = HTHost_addNet(host, net)) == HT_PENDING) { return HT_PENDING; } } return HT_ERROR; } /* ** Rules: SINGLE: one element in pipe, either reading or writing ** PIPE: n element in pipe, n-1 reading, 1 writing */ PUBLIC int HTHost_register (HTHost * host, HTNet * net, HTEventType type) { HTEvent *event; if (host && net) { if (type == HTEvent_CLOSE) { /* ** Unregister this host for all events */ HTEvent_unregister(HTChannel_socket(host->channel), HTEvent_READ); HTEvent_unregister(HTChannel_socket(host->channel), HTEvent_WRITE); host->registeredFor = 0; return YES; } else { /* net object may already be registered */ if (HTEvent_BITS(type) & net->registeredFor) return NO; net->registeredFor ^= HTEvent_BITS(type); /* host object may already be registered */ if (host->registeredFor & HTEvent_BITS(type)) return YES; host->registeredFor ^= HTEvent_BITS(type); #ifdef WWW_WIN_ASYNC /* Make sure we are registered for CLOSE on windows */ event = *(host->events+HTEvent_INDEX(HTEvent_CLOSE)); HTEvent_register(HTChannel_socket(host->channel), HTEvent_CLOSE, event); #endif /* WWW_WIN_ASYNC */ /* JK: register a request in the event structure */ event = *(host->events+HTEvent_INDEX(type)); event->request = HTNet_request (net); return HTEvent_register(HTChannel_socket(host->channel), type, event); } return YES; } HTTRACE(CORE_TRACE, "HTHost...... Don't register event with bad arguments\n"); return NO; } PUBLIC int HTHost_unregister (HTHost * host, HTNet * net, HTEventType type) { if (host && net) { /* net object may not be registered */ if (!(HTEvent_BITS(type) & net->registeredFor)) return NO; net->registeredFor ^= HTEvent_BITS(type); /* host object may not be registered */ if (!(host->registeredFor & HTEvent_BITS(type))) return YES; host->registeredFor ^= HTEvent_BITS(type); /* stay registered for READ to catch a socket close */ /* WRITE and CONNECT can be unregistered, though */ if ((type == HTEvent_WRITE && isLastInPipe(host, net)) || type == HTEvent_CONNECT) /* if we are blocked downstream, shut down the whole pipe */ HTEvent_unregister(HTChannel_socket(host->channel), type); return YES; } return NO; } /* ** The reader tells HostEvent that it's stream did not finish the data */ PUBLIC BOOL HTHost_setRemainingRead (HTHost * host, size_t remaining) { if (host == NULL) return NO; host->remainingRead = remaining; HTTRACE(PROT_TRACE, "Host........ %d bytes remaining \n" _ remaining); if (host->broken_pipe && remaining == 0) { HTTRACE(PROT_TRACE, "Host........ Emtied out connection\n"); } return YES; } PUBLIC size_t HTHost_remainingRead (HTHost * host) { return host ? host->remainingRead : -1; } PUBLIC SockA * HTHost_getSockAddr (HTHost * host) { if (!host) return NULL; return &host->sock_addr; } PUBLIC BOOL HTHost_setHome (HTHost * host, int home) { if (!host) return NO; host->home = home; return YES; } PUBLIC int HTHost_home (HTHost * host) { if (!host) return 0; return host->home; } PUBLIC BOOL HTHost_setRetry (HTHost * host, int retry) { if (!host) return NO; host->retry = retry; return YES; } PUBLIC BOOL HTHost_decreaseRetry (HTHost * host) { if (!host) return NO; if (host->retry > 0) host->retry--; return YES; } PUBLIC int HTHost_retry (HTHost * host) { if (!host) return 0; return host->retry; } #if 0 /* Is a macro right now */ PRIVATE BOOL HTHost_setDNS5 (HTHost * host, HTdns * dns) { if (!host) return NO; host->dns = dns; return YES; } #endif PUBLIC BOOL HTHost_setChannel (HTHost * host, HTChannel * channel) { if (!host) return NO; host->channel = channel; return YES; } PUBLIC HTNet * HTHost_getReadNet(HTHost * host) { return host ? (HTNet *) HTList_firstObject(host->pipeline) : NULL; } PUBLIC HTNet * HTHost_getWriteNet(HTHost * host) { return host ? (HTNet *) HTList_lastObject(host->pipeline) : NULL; } /* ** Create the input stream and bind it to the channel ** Please read the description in the HTIOStream module for the parameters */ PUBLIC HTInputStream * HTHost_getInput (HTHost * host, HTTransport * tp, void * param, int mode) { if (host && host->channel && tp) { HTChannel * ch = host->channel; HTInputStream * input = (*tp->input_new)(host, ch, param, mode); HTChannel_setInput(ch, input); return HTChannel_getChannelIStream(ch); } HTTRACE(CORE_TRACE, "Host Object. Can't create input stream\n"); return NULL; } PUBLIC HTOutputStream * HTHost_getOutput (HTHost * host, HTTransport * tp, void * param, int mode) { if (host && host->channel && tp) { HTChannel * ch = host->channel; HTOutputStream * output = (*tp->output_new)(host, ch, param, mode); HTChannel_setOutput(ch, output); return output; } HTTRACE(CORE_TRACE, "Host Object. Can't create output stream\n"); return NULL; } PUBLIC HTOutputStream * HTHost_output (HTHost * host, HTNet * net) { if (host && host->channel && net) { HTOutputStream * output = HTChannel_output(host->channel); return output; } return NULL; } PUBLIC int HTHost_read(HTHost * host, HTNet * net) { HTInputStream * input = HTChannel_input(host->channel); if (net != HTHost_getReadNet(host)) { HTHost_register(host, net, HTEvent_READ); return HT_WOULD_BLOCK; } /* ** If there is no input channel then this can either mean that ** we have lost the channel or an error occurred. We return ** HT_CLOSED as this is a sign to the caller that we don't ** have a channel */ return input ? (*input->isa->read)(input) : HT_CLOSED; } PUBLIC BOOL HTHost_setConsumed(HTHost * host, size_t bytes) { HTInputStream * input; if (!host || !host->channel) return NO; if ((input = HTChannel_input(host->channel)) == NULL) return NO; HTTRACE(CORE_TRACE, "Host........ passing %d bytes as consumed to %p\n" _ bytes _ input); return (*input->isa->consumed)(input, bytes); } PUBLIC int HTHost_hash (HTHost * host) { return host ? host->hash : -1; } PUBLIC BOOL HTHost_setWriteDelay (HTHost * host, ms_t delay) { if (host && delay >= 0) { host->delay = delay; return YES; } return NO; } PUBLIC ms_t HTHost_writeDelay (HTHost * host) { return host ? host->delay : 0; } PUBLIC int HTHost_findWriteDelay (HTHost * host, ms_t lastFlushTime, int buffSize) { #if 0 unsigned short mtu; int ret = -1; int socket = HTChannel_socket(host->channel); #ifndef WWW_MSWINDOWS ret = ioctl(socket, 666, (unsigned long)&mtu); #endif /* WWW_MSWINDOWS */ if ((ret == 0 && buffSize >= mtu) || host->forceWriteFlush) return 0; return host->delay; #else return host->forceWriteFlush ? 0 : host->delay; #endif } PUBLIC BOOL HTHost_setDefaultWriteDelay (ms_t delay) { if (delay >= 0) { WriteDelay = delay; HTTRACE(CORE_TRACE, "Host........ Default write delay is %d ms\n" _ delay); return YES; } return NO; } PUBLIC ms_t HTHost_defaultWriteDelay (void) { return WriteDelay; } PUBLIC int HTHost_forceFlush(HTHost * host) { HTNet * targetNet = (HTNet *) HTList_lastObject(host->pipeline); int ret; if (targetNet == NULL) return HT_ERROR; /* 2000/28/07 JK: The following test was proposed by Heiner Kallweit, as there's a problem ** while using SSL because of a recursive call to this function. We tested the ** fix and it doesn't seem to introduce any side effects... but one never knows, ** thus this comment. This seems more like a bug in the SSL code than here. */ if (host->inFlush) { HTTRACE(CORE_TRACE, "Host Event.. FLUSH requested for `%s\'\n, but ignoring it as we're already processing a flush in this host" _ HTAnchor_physical(HTRequest_anchor(HTNet_request(targetNet)))); return HT_OK; } HTTRACE(CORE_TRACE, "Host Event.. FLUSH passed to `%s\'\n" _ HTAnchor_physical(HTRequest_anchor(HTNet_request(targetNet)))); host->forceWriteFlush = YES; host->inFlush = YES; ret = (*targetNet->event.cbf)(HTChannel_socket(host->channel), targetNet->event.param, HTEvent_FLUSH); host->forceWriteFlush = NO; host->inFlush = NO; return ret; } /* ** Context pointer to be used as a user defined context */ PUBLIC void HTHost_setContext (HTHost * me, void * context) { if (me) me->context = context; } PUBLIC void * HTHost_context (HTHost * me) { return me ? me->context : NULL; } PUBLIC int HTHost_eventTimeout (void) { return EventTimeout; } PUBLIC void HTHost_setEventTimeout (int millis) { EventTimeout = millis; HTTRACE(CORE_TRACE, "Host........ Setting event timeout to %d ms\n" _ millis); } PUBLIC BOOL HTHost_setMaxPipelinedRequests (int max) { if (max > 1) { MaxPipelinedRequests = max; return YES; } return NO; } PUBLIC int HTHost_maxPipelinedRequests (void) { return MaxPipelinedRequests; } PUBLIC void HTHost_setActivateRequestCallback (HTHost_ActivateRequestCallback * cbf) { HTTRACE(CORE_TRACE, "HTHost...... Registering %p\n" _ cbf); ActivateReqCBF = cbf; } PRIVATE int HTHost_ActivateRequest (HTNet * net) { HTRequest * request = NULL; if (!ActivateReqCBF) { HTTRACE(CORE_TRACE, "HTHost...... No ActivateRequest callback handler registered\n"); return HT_ERROR; } request = HTNet_request(net); return (*ActivateReqCBF)(request); } PUBLIC void HTHost_disable_PendingReqLaunch (void) { DoPendingReqLaunch = NO; } PUBLIC void HTHost_enable_PendingReqLaunch (void) { DoPendingReqLaunch = YES; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHost.html����������������������������������������������������������������������0100644�0000764�0000144�00000044764�06740672640�016035� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Host Class</TITLE> </HEAD> <BODY> <H1> The Host Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Host class manages what we know about a remote host. This can for example be what type of host it is, and what version it is using. Notice that a host object can be used to describe both a server or a client - all information in the Host object can be shared regardless of whether it is to be used in a server application or a client application. <P> This module is implemented by <A HREF="HTHost.c">HTHost.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTHOST_H #define HTHOST_H typedef struct _HTHost HTHost; #define HOST_HASH_SIZE HT_M_HASH_SIZE #include "HTChannl.h" #include "HTReq.h" #include "HTEvent.h" #include "HTProt.h" #include "HTTimer.h" </PRE> <P> The Host class contains information about the remote host, for example the type (HTTP/1.0, HTTP/1.1, FTP etc.) along with information on how the connections can be used (if it supports persistent connections, interleaved access etc.) <H2> <A NAME="Creation">Creation and Deletion Methods</A> </H2> <P> We keep a cache of information that we know about a remote host. This allows us to be much more detailed in generating requests. Search the host info cache for a host object or create a new one and add it. Examples of host names are <UL> <LI> www.w3.org <LI> www.foo.com:8000 </UL> <H3> Add a Host Object </H3> <PRE> extern HTHost * HTHost_new (char * host, u_short u_port); extern HTHost * HTHost_newWParse(HTRequest * request, char * url, u_short u_port); extern int HTHost_hash (HTHost * host); </PRE> <H3> Delete a Host Object </H3> <P> The Host Class contains an automatic garbage collection of Host objects so that we don't keep information around that is stale. <H3> Find a Host Object </H3> <P> Searches the cache of known hosts to see if we already have information about this host. If not then we return NULL. <PRE> extern HTHost * HTHost_find (char * host); </PRE> <H3> Delete the Host table </H3> <P> Cleanup and delete the host table. <PRE> extern void HTHost_deleteAll (void); </PRE> <H3> Is Host Idle? </H3> <P> You can use this function to see whether a host object is idle or in use. We have several modes describing how and when a host is idle. This is a function of the <A HREF="HTTrans.html">Transport Object</A> <PRE> extern BOOL HTHost_isIdle (HTHost * host); </PRE> <H2> <A NAME="Remote">Remote Host Information</A> </H2> <P> We keep track of the capabilities of the host in the other end so thatwe may adjust our queries to fit it better <H3> Remote Host Name </H3> <P> Get the name of the remote host. This is set automatically when a new Host object and can be asked for at any point in time. You can not change the host name but must create a new Host object instead. <PRE> extern char * HTHost_name (HTHost * host); </PRE> <H3> Remote Host Protocol Class and Version </H3> <P> Define the <EM>host class</EM> of the host at the other end. A class is a generic description of the protocol which is exactly like the access method in a URL, for example "http" etc. The <EM>host version</EM> is a finer distinction (sub-class) between various versions of the host class, for example HTTP/0.9, HTTP/1.1 etc. The host version is a bit flag that the protocol module can define on its own. That way we don't have to change this module when registering a new protocol module. The <EM>host type</EM> is a description of whether we can keep the connection persistent or not. <PRE> extern char * HTHost_class (HTHost * host); extern void HTHost_setClass (HTHost * host, char * s_class); extern int HTHost_version (HTHost * host); extern void HTHost_setVersion (HTHost * host, int version); </PRE> <H3> Public Methods accessible on This Host </H3> <P> A server can inform a client about the supported methods using the <CODE>Public</CODE> header. <PRE>extern HTMethod HTHost_publicMethods (HTHost * me); extern void HTHost_setPublicMethods (HTHost * me, HTMethod methodset); extern void HTHost_appendPublicMethods (HTHost * me, HTMethod methodset); </PRE> <H3> Server Name of Remote Host </H3> <P> A server can send its server application name and version in a HTTP response. We pick up this information and add it to the Host object <PRE>extern char * HTHost_server (HTHost * host); extern BOOL HTHost_setServer (HTHost * host, const char * server); </PRE> <H3> User Agent Name of Remote Host </H3> <P> A client can send the name of the client application in a HTTP request. We pick up this information and add it to the Host Object <PRE>extern char * HTHost_userAgent (HTHost * host); extern BOOL HTHost_setUserAgent (HTHost * host, const char * userAgent); </PRE> <H3> Range Units Accepted by this Host </H3> <P> Since all HTTP entities are represented in HTTP messages as sequences of bytes, the concept of a byte range is meaningful for any HTTP entity. (However, not all clients and servers need to support byte-range operations.) Byte range specifications in HTTP apply to the sequence of bytes in the entity-body (not necessarily the same as the message-body). A byte range operation may specify a single range of bytes, or a set of ranges within a single entity. <P> You can also check whether a specific range unit is OK. We always say <CODE>YES</CODE> except if we have a specific statement from the server that it doesn't understand byte ranges - that is - it has sent "none" in a "Accept-Range" response header <PRE> extern char * HTHost_rangeUnits (HTHost * host); extern BOOL HTHost_setRangeUnits (HTHost * host, const char * units); extern BOOL HTHost_isRangeUnitAcceptable (HTHost * host, const char * unit); </PRE> <H3> User Defined Contexts </H3> <P> This can be used for anything that the application would like to keep tabs on. <PRE> extern void HTHost_setContext (HTHost * me, void * context); extern void * HTHost_context (HTHost * me); </PRE> <H2> Register a Request on a Host Object </H2> <P> Requests are queued in the Host object until we have <A HREF="#Pending">resources to start them</A>. The request is in the form of a <A HREF="HTNet.html">Net object</A> as we may have multiple socket requests per <A HREF="HTReq.html">Request object</A>. This is for example the case with <A HREF="WWWFTp.html">FTP</A> which uses two connections. <PRE> extern int HTHost_addNet (HTHost * host, HTNet * net); extern BOOL HTHost_deleteNet (HTHost * host, HTNet * net, int status); extern HTList * HTHost_net (HTHost * host); </PRE> <H2> Channels </H2> <P> A <A HREF="HTChannl.html">Channel object</A> is an abstraction for a transport, like a TCP connection, for example. Each host object can have at most one channel object associated with it. <H3> Create a Channel to a Host </H3> <P> As a <A HREF="HTNet.html">Net Object</A> doesn't necessarily know whether there is a channel up and running and whether that channel can be reused, it must do an explicit connect the the host. <PRE> extern int HTHost_connect (HTHost * host, HTNet * net, char * url); extern int HTHost_accept (HTHost * host, HTNet * net, char * url); extern int HTHost_listen (HTHost * host, HTNet * net, char * url); </PRE> <H3> Is Channel About to Close? </H3> <P> As soon as we know that a channel is about to close (for example because the server sends us a <TT>Connection: close</TT> header field) then we register this informtation in the Host object: <PRE> extern BOOL HTHost_setCloseNotification (HTHost * host, BOOL mode); extern BOOL HTHost_closeNotification (HTHost * host); </PRE> <H3> Find Channel Associated with a Host Object </H3> <P> Here you can find an already associated channel with a host object or you can explicitly associate a channel with a host object. <PRE> extern BOOL HTHost_setChannel (HTHost * host, HTChannel * channel); extern HTChannel * HTHost_channel (HTHost * host); </PRE> <H3> Delete a Channel </H3> <P> When a channel is deleted, it must be unregistered from the host object which is done by this operation: <PRE> extern BOOL HTHost_clearChannel (HTHost * host, int status); </PRE> <H2> <A NAME="Transport">Transport Mode</A> </H2> <P> The way a channel can be used depends on the <A HREF="HTTrans.html">transport</A> and what mode the channel is in. The mode (whether we can use persistent connections, pipeline, etc.) may change mode in the middle of a connection If the new mode is lower than the old mode then adjust the pipeline accordingly. That is, if we are going into single mode then move all entries in the pipeline and move the rest to the pending queue. They will get launched at a later point in time. <PRE> extern HTTransportMode HTHost_mode (HTHost * host, BOOL * active); extern BOOL HTHost_setMode (HTHost * host, HTTransportMode mode); </PRE> <H2> <A NAME="Pending">Handling Pending Requests</A> </H2> <P> There are two ways we can end up with pending requests: <OL> <LI> If we are out of sockets then register new host objects as pending. <LI> If we are pending on a connection then register new net objects as pending </OL> <P> This set of functions handles pending host objects and can start new requests as resources get available. The first function checks the host object for any pending <A HREF="HTNet.html">Net objects</A> and return the first of these Net objects. <PRE> extern HTNet * HTHost_nextPendingNet (HTHost * host); </PRE> <P> The second checks the list of pending host objects waiting for a socket and returns the first of these Host objects. <PRE> extern HTHost * HTHost_nextPendingHost (void); </PRE> <H3> Start the Next Pending reqeust </H3> <P> Start the next pending request if any. First we look for pending requests for the same host and then we check for any other pending hosts. If nothing pending then register a close event handler to have something catching the socket if the remote server closes the connection, for example due to timeout. <PRE> extern BOOL HTHost_launchPending (HTHost * host); </PRE> <H3> Stop Launch of Pending Requests </H3> <P> Controls whether pending requests should be automatically activated. The default is on, but if turned off then no pending requests are launched. <PRE> extern void HTHost_enable_PendingReqLaunch (void); extern void HTHost_disable_PendingReqLaunch (void); </PRE> <H2> <A NAME="Persistent">Persistent Connections</A> </H2> <P> We don't want more than (Max open sockets) - 2 connections to be persistent in order to avoid deadlock. You can set the max number of simultaneous open connection in the <A HREF="HTNet.html"#Resources>HTNet manager</A>. <H3> Is this host Persistent? </H3> <PRE> extern BOOL HTHost_setPersistent (HTHost * host, BOOL persistent, HTTransportMode mode); extern BOOL HTHost_isPersistent (HTHost * host); </PRE> <H3> Persistent Connection Timeouts </H3> <P> If the server doesn't close the connection on us then we close it after a while so that we don't unnecessarily take up resources (see also how the <A HREF="#RequestTimeout">timeouts of individual requests </A>can be set). Libwww provides two mechanisms: an active timeout and a passive timeout. The former uses <A HREF="HTTimer.html">libwww timers</A> and is the preferred mechanism, the latter passively looks at the Host object when a new request is issued in order to determine whether the existing channel can be reused. This is primariliy for non-preemptive requests which in general is deprecated. <P> By default we have an active timeout of 60 secs and a passive timeout of 120 secs (the latter is longer as this is less reliable). Active timeout s can be accessed using these functions: <PRE> extern BOOL HTHost_setActiveTimeout (ms_t timeout); extern ms_t HTHost_activeTimeout (void); </PRE> <P> and passive timeouts can be accessed using these functions <PRE> extern time_t HTHost_persistTimeout (void); extern BOOL HTHost_setPersistTimeout (time_t timeout); </PRE> <P> The following two functions are deprecated: <PRE> extern void HTHost_setPersistExpires (HTHost * host, time_t expires); extern time_t HTHost_persistExpires (HTHost * host); </PRE> <H3> Keeping Track of Number of Reqeusts </H3> <P> Another way to detect when a connection is about to close is to count the number of requests made. For example, the (current) default bevaior by most Apache servers is to close a TCP connection after 100 requests. I don't quite think it makes sense to control the close of a connection like this but anyway, there we go. <PRE> extern void HTHost_setReqsPerConnection (HTHost * host, int reqs); extern int HTHost_reqsPerConnection (HTHost * host); extern void HTHost_setReqsMade (HTHost * host, int reqs); extern int HTHost_reqsMade (HTHost * host); </PRE> <H2> <A NAME="R&amp;W">Read and Write Management</A> </H2> <P> Which <A HREF="HTNet.html">Net object</A> can read and/or write? When doing pipelining, we essentially serialize requests and therefore we must keep track of who can read and who can write. <H3> Get the Next Net object for Reading and Writing </H3> <PRE> extern HTNet * HTHost_firstNet (HTHost * host); extern HTNet * HTHost_getReadNet (HTHost * host); extern HTNet * HTHost_getWriteNet (HTHost * host); </PRE> <H3> Get input and output Streams for this Host </H3> <PRE> extern HTInputStream * HTHost_getInput (HTHost * host, HTTransport * transport, void * param, int mode); extern HTOutputStream * HTHost_getOutput (HTHost * host, HTTransport * tp, void * param, int mode); </PRE> <H3> Reading Data and Keeping Track of how Much </H3> <P> Because of the push streams, the streams must keep track of how much data actually was consumed by that stream. <PRE> extern int HTHost_read(HTHost * host, HTNet * net); extern BOOL HTHost_setConsumed(HTHost * host, size_t bytes); extern BOOL HTHost_setRemainingRead(HTHost * host, size_t remainaing); extern size_t HTHost_remainingRead (HTHost * host); </PRE> <H2> <A NAME="Pipeline">Pipelining Requests</A> </H2> <P> When possible, we try to pipeline requests onto the same connection as this saves a lot of time and leads to much higher throughput. <H3> How many Requests can we Pipeline onto the same Connection? </H3> <P> Use these functions to set the max number of requests that can be pipelined at any one time on a single, persistent connection. The higher the number, the more we have to recover if the server closes the connection prematurely. The default is about 50 requests which is enough to fill most links. <PRE> extern BOOL HTHost_setMaxPipelinedRequests (int max); extern int HTHost_maxPipelinedRequests (void); </PRE> <H3> How many Pending and Outstanding Net objects are there on a Host? </H3> <P> You can query how many Het objects (essentially requests) are outstanding or pending on a host object using these methods: <PRE> extern int HTHost_numberOfOutstandingNetObjects (HTHost * host); extern int HTHost_numberOfPendingNetObjects (HTHost * host); </PRE> <H3> Pipeline Recovery </H3> <P> Pipelines normally run by themselves (requests are issued and responses recieved). However, it may be necessry to either prematurely abort a pipeline or to recover a broken pipeline due to communication problems with the server. In case a pipeline is broken then we have to recover it and start again. This is handled automatically by the host object, so you do not have to call this one explicitly. <PRE> extern BOOL HTHost_recoverPipe (HTHost * host); extern BOOL HTHost_doRecover (HTHost * host); </PRE> <H3> Kill a Pipeline </H3> <P> Call this function to terminate all requests (pending as well as active) registered with a host object. This is typically the function that handles timeout, abort (user hits the red button, etc). You can also use the <A HREF="HTNet.html">HTNet object kill method</A> which in terms call this function. <PRE>extern BOOL HTHost_killPipe (HTHost * host); </PRE> <H2> <A NAME="Event">Event Management</A> </H2> <P> These functions are used to register and unregister events (read, write, etc.) so that the host object knows about it. <PRE> extern int HTHost_register(HTHost * host, HTNet * net, HTEventType type); extern int HTHost_unregister(HTHost * host, HTNet * net, HTEventType type); extern int HTHost_tickleFirstNet(HTHost * host, HTEventType type); extern SockA * HTHost_getSockAddr(HTHost * host); </PRE> <H3> <A NAME="RequestTimeout">Request Timeouts</A> </H3> <P> Events can be assigned a timeout which causes the event to be triggered if the timeout happens before other action is available on the socket. You can assign a global timeout for all host object using the following methods. The default is no timeout. <PRE> extern int HTHost_eventTimeout (void); extern void HTHost_setEventTimeout (int millis); </PRE> <H2> <A NAME="Delayed">Delayed Flush Timer</A> </H2> <P> These methods can control how long we want to wait for a flush on a pipelined channel. The default is 30ms which is OK in most situations. <PRE> extern BOOL HTHost_setWriteDelay (HTHost * host, ms_t delay); extern ms_t HTHost_writeDelay (HTHost * host); extern int HTHost_findWriteDelay(HTHost * host, ms_t lastFlushTime, int buffSize); </PRE> <P> It is also possible to explicitly require a flush using the following method. This can also be set directly in the <A HREF="HTReq.html">request object</A> for a single request. <PRE> extern int HTHost_forceFlush(HTHost * host); </PRE> <P> You can also set the <EM>global</EM> value so that all new host objects (and therefore all new requests) will inherit this value instead of setting it individually. <PRE>extern BOOL HTHost_setDefaultWriteDelay (ms_t delay); extern ms_t HTHost_defaultWriteDelay (void); </PRE> <H2> Multi homed Host Management </H2> <P> We keep track of hosts with multiple IP addresses - socalled <I>multi-homed hosts</I>. This is used for two things: finding the fastest IP address of that host and as a backup if one or more of the hosts are down. This is handled in connection with the <A HREF="HTDNS.html">DNS manager</A> <PRE> extern BOOL HTHost_setHome (HTHost * host, int home); extern int HTHost_home (HTHost * host); extern BOOL HTHost_setRetry (HTHost * host, int retry); extern int HTHost_retry (HTHost * host); extern BOOL HTHost_decreaseRetry (HTHost * host); </PRE> <H2> Notify Request that it has become Active </H2> <P> A new callback plugged to the activation of a request which allows an application to know when a request has become active. <PRE> typedef int HTHost_ActivateRequestCallback (HTRequest * request); extern void HTHost_setActivateRequestCallback (HTHost_ActivateRequestCallback * cbf); </PRE> <P> <PRE> #endif /* HTHOST_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTHost.html,v 2.29 2025/07/07 15:43:28 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������libwww/Library/src/HTHstMan.html��������������������������������������������������������������������0100644�0000764�0000144�00000010302�07140310027�016246� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Private Hst Definition</TITLE> </HEAD> <BODY> <H1> Private Host Definition </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the private definition of the Host Class. Please look in the public <A HREF="HTHost.html">Host Class</A> for more documentation <P> This module is implemented by <A HREF="HTHost.c">HTHost.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTHSTMAN_H #define HTHSTMAN_H #include "HTHost.h" #include "HTDNS.h" #include "HTEvent.h" #include "HTProt.h" #define PIPE_BUFFER_SIZE 8192 </PRE> <P> The <CODE>HTHost</CODE> object is the core of the request queue management. This object contains information about the socket descriptor, the input read buffer etc. required to identify and service a request. <PRE> typedef enum _TCPState { TCP_DNS_ERROR = -3, TCP_ERROR = -2, TCP_CONNECTED = -1, TCP_BEGIN = 0, TCP_CHANNEL, TCP_DNS, TCP_NEED_SOCKET, TCP_NEED_BIND, TCP_NEED_LISTEN, TCP_NEED_CONNECT, TCP_IN_USE } TCPState; struct _HTHost { int hash; /* Information about the otherend */ char * hostname; /* name of host + optional port */ u_short u_port; time_t ntime; /* Creation time */ char * type; /* Peer type */ int version; /* Peer version */ HTMethod methods; /* Public methods (bit-flag) */ char * server; /* Server name */ char * user_agent; /* User Agent */ char * range_units; /* ??? */ /* When does this entry expire? */ time_t expires; /* Persistent channel expires time */ int reqsPerConnection; /* from Keep-Alive: header */ int reqsMade; /* updated as they are sent */ /* Queuing and connection modes */ HTList * pipeline; /* Pipe line of net objects */ HTList * pending; /* List of pending Net objects */ HTNet * doit; /* Transfer from pending to pipe */ HTNet * lock; /* This is a kludge! */ HTNet * listening; /* Master for accepting connections */ BOOL persistent; HTTransportMode mode; /* Supported mode */ HTTimer * timer; /* Timer for handling idle connection */ BOOL do_recover; /* If we are supposed to recover */ int recovered; /* How many times had we recovered */ BOOL close_notification; /* Got a hint about close */ BOOL broken_pipe; /* Support for transports */ HTChannel * channel; /* data channel */ /* Connection dependent stuff */ HTdns * dns; /* Link to DNS object */ TCPState tcpstate; /* State in connection */ SockA sock_addr; /* SockA is defined in wwwsys.h */ int retry; /* Counting attempts to connect */ int home; /* Current home if multiple */ ms_t connecttime; /* Time in ms on multihomed hosts */ /* Event Management */ HTEvent * events[HTEvent_TYPES];/* reading and writing may differ */ HTEventType registeredFor; /* Which actions are we blocked on */ size_t remainingRead; /* Tells HostEvent to call next net */ /* User specific stuff */ ms_t delay; /* Write delay in ms */ void * context; /* Protocol Specific context */ int forceWriteFlush; int inFlush; /* Tells if we're currently processing a file flush */ }; #define HTHost_bytesRead(me) ((me) ? (me)-&gt;bytes_read : -1) #define HTHost_bytesWritten(me) ((me) ? (me)-&gt;bytes_written : -1) #define HTHost_setBytesRead(me,l) ((me) ? (me-&gt;bytes_read=(l)) : -1) #define HTHost_setBytesWritten(me,l) ((me) ? (me-&gt;bytes_written=(l)) :-1) #define HTHost_setDNS (host, dns) ((me) ? (me-&gt;dns=(dns)) :-1) </PRE> <PRE> #endif /* HTHSTMAN_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTHstMan.html,v 2.19 2025/07/28 13:52:23 kahan Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTIOStream.html������������������������������������������������������������������0100644�0000764�0000144�00000012530�06701527120�016552� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 6-Apr-1996 --> <TITLE>W3C Sample Code Library libwww I/O Stream Classes</TITLE> </HEAD> <BODY> <H1> I/O Stream Classes </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The I/O Stream class defines objects which accepts a sequence of characters to and from a <A HREF="HTTrans.html">transport</A> &nbsp;The input and output stream are mainly derived from the <A HREF="HTStream.html">generic stream class</A> and contains much of the same functionality. The main difference is that the I/O streams also contains methods for reading and writing to a transport. <P> This module is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTIOSTREAM_H #define HTIOSTREAM_H typedef struct _HTInputStream HTInputStream; typedef struct _HTOutputStream HTOutputStream; #include "HTList.h" #include "HTStream.h" #include "HTChannl.h" </PRE> <H2> Input Stream </H2> <P> An input stream is a stream that can read data from a transport and via a <A HREF="HTChannl.html">channel</A> putting the data down to the application. <PRE> typedef struct _HTInputStreamClass { char * name; </PRE> <P> This field is for diagnostics only <PRE> int (*flush) (HTInputStream * me); </PRE> <P> The <B>flush</B> method is introduced in order to allow the stream to put any buffered data down the stream pipe but without taking the stream pipe down. It is for the stream to decide whether it has buffered data or not. In some situations, the stream might not want to send buffered data down the target as the date might be relevant for this stream only. <PRE> int (*_free) (HTInputStream * me); </PRE> <P> The <CODE><B>free</B></CODE> method is like the <CODE>flush</CODE> method but it also frees the current stream object and all stream objects down stream. When the <CODE>free</CODE> method has been called, the <EM>whole</EM> stream pipe (not only this object) should not accept any more data. See also the <CODE>close</CODE> method below <PRE> int (*abort) (HTInputStream * me, HTList * errorlist); </PRE> <P> The <B>abort</B> method should only be used if a stream is interrupted, for example by the user, or an error occurs. <PRE> int (*read) (HTInputStream * me); </PRE> <P> The <B>read</B> method is the method by which we can read data from the <A HREF="HTTrans.html">transport layer</A>. <PRE> int (*close) (HTInputStream * me); </PRE> <P> Pipelined transports need to know how many bytes were <B>consumed</B> by the net object. <PRE> int (*consumed) (HTInputStream * me, size_t bytes); </PRE> <P> The <CODE>close</CODE> method closes the transport and deletes the input stream object. Note that this is different than the free method which doesn't have to delete the input stream object itself. <PRE> } HTInputStreamClass; </PRE> <H2> Output Stream </H2> <P> The output stream is similar to the <A HREF="HTStream.html">generic stream definition</A> in that it has a superset of methods. The <CODE>param</CODE> parameter and the <CODE>mode</CODE> parameter can be used for whatever purpose suited. <PRE> typedef struct _HTOutputStreamClass { char * name; int (*flush) (HTOutputStream * me); int (*_free) (HTOutputStream * me); int (*abort) (HTOutputStream * me, HTList * errorlist); int (*put_character)(HTOutputStream * me, char ch); int (*put_string) (HTOutputStream * me, const char * str); int (*put_block) (HTOutputStream * me, const char * str, int len); </PRE> <P> See the <A HREF="HTStream.html">generic Stream Definition</A> for an explanation of these methods. Note that they all have a <CODE>HTOutputStream</CODE> object a the parameter, not a generic stream. This is to avoid <EM>incompatible pointer</EM> warnings <PRE> int (*close) (HTOutputStream * me); </PRE> <P> The <CODE>close</CODE> method closes the transport and deletes the input stream object. Note that this is different than the free method which doesn't have to delete the input stream object itself. <PRE> } HTOutputStreamClass; </PRE> <H2> Transport Streams </H2> <P> Transport streams are special streams with creation methods like defined below. Transport streams can be registered in a <A HREF="HTTrans.html">transport object</A> as ways of communicating with the a transport. <H3> Transport Input Stream </H3> <P> We have two modes of the input stream depending on model used for data reading is <B>PUSH</B> or <B>PULL</B>. The PUSH model is suitable if we are using pseudo threads based on a <CODE>select()</CODE> call or equivalent and the <B>PULL</B> is suitable in a real thread environment. In the latter case it doesn't matter if a read procedure blocks as this only concerns a single thread. <PRE> typedef HTInputStream * HTInput_new (HTHost * host, HTChannel * ch, void * param, int mode); </PRE> <H3> Transport Output Stream </H3> <PRE> typedef HTOutputStream * HTOutput_new (HTHost * host, HTChannel * ch, void * param, int mode); </PRE> <H3> Transport Output Stream Converter </H3> <PRE> typedef HTOutputStream * HTOutputConverter_new( HTHost * host, HTChannel * ch, void * param, int mode, HTOutputStream * target); </PRE> <PRE> #endif /* HTIOSTREAM_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTIOStream.html,v 2.6 2025/04/04 00:12:00 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTIcons.c������������������������������������������������������������������������0100644�0000764�0000144�00000017064�07034453474�015441� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTIcon.c ** ICON MANAGEMENT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTIcons.c,v 2.30 2025/01/04 20:25:32 kahan Exp $ ** ** This module contains the functions for initializing, adding ** and selecting the icon for local directory listings, FTP and Gopher. ** ** History: ** Mar 94 Written by Ari Luotonen, luotonen@dxcern.cern.ch ** Henrik Frystyk, frystyk@w3.org ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTIcons.h" /* Implemented here */ struct _HTIconNode { char * icon_url; char * icon_alt; char * type_templ; }; /* Globals */ PRIVATE HTIconNode * icon_unknown = NULL; /* Unknown file type */ PRIVATE HTIconNode * icon_blank = NULL; /* Blank icon in heading */ PRIVATE HTIconNode * icon_parent = NULL; /* Parent directory icon */ PRIVATE HTIconNode * icon_dir = NULL; /* Directory icon */ /* Type definitions and global variables etc. local to this module */ PRIVATE HTList * icons = NULL; PRIVATE int alt_len = 0; /* Longest ALT text */ /* ------------------------------------------------------------------------- */ PRIVATE void alt_resize (char * alt) { if (alt) { int len = strlen(alt); if (len > alt_len) alt_len = len; } } PRIVATE BOOL match (char * templ, const char * actual) { static char * c1 = NULL; static char * c2 = NULL; char * slash1; char * slash2; StrAllocCopy(c1,templ); StrAllocCopy(c2,actual); slash1 = strchr(c1,'/'); slash2 = strchr(c2,'/'); if (slash1 && slash2) { *slash1++ = 0; *slash2++ = 0; return HTStrMatch(c1,c2) && HTStrMatch(slash1,slash2); } else if (!slash1 && !slash2) return HTStrMatch(c1,c2) ? YES : NO; else return NO; } PRIVATE char * prefixed (const char * name, const char * prefix) { char * ret = NULL; if (name) { int len = prefix ? strlen(prefix) : 0; if ((ret = (char *) HT_MALLOC(len + strlen(name) + 2)) == NULL) HT_OUTOFMEM("prefixed"); if (prefix) { strcpy(ret, prefix); if (*prefix && prefix[len-1] != '/') strcat(ret, "/"); strcat(ret, name); } else strcpy(ret, name); } return ret; } PUBLIC char * HTIcon_url (HTIconNode * node) { return node ? node->icon_url : NULL; } /* ** Returned string must be freed by caller */ PUBLIC char * HTIcon_alternative (HTIconNode * node, BOOL brackets) { char * ret = NULL; if (node) { char * p = NULL; int len = node->icon_alt ? strlen(node->icon_alt) : 0; if ((p = ret = (char *) HT_MALLOC(alt_len + 3)) == NULL) HT_OUTOFMEM("HTIcon_alt_string"); *p++ = brackets ? '[' : ' '; if (node->icon_alt) strcpy(p, node->icon_alt); p += len; while (len++ < alt_len) *p++=' '; *p++ = brackets ? ']' : ' '; *p = 0; } return ret; } /* ** HTAddIcon(url, alt, type_templ) adds icon: ** ** <IMG SRC="url" ALT="[alt]"> ** ** for files for which content-type or content-encoding matches ** type_templ. If type_templ contains a slash, it is taken to be ** a content-type template. Otherwise, it is a content-encoding ** template. */ PUBLIC BOOL HTIcon_add (const char * url, const char * prefix, char * alt, char * type_templ) { if (url && type_templ) { HTIconNode * node; if ((node = (HTIconNode *) HT_CALLOC(1,sizeof(HTIconNode))) == NULL) HT_OUTOFMEM("HTAddIcon"); if (url) node->icon_url = prefixed(url, prefix); if (alt) StrAllocCopy(node->icon_alt, alt); if (type_templ) StrAllocCopy(node->type_templ, type_templ); if (!icons) icons = HTList_new(); HTList_addObject(icons, (void *) node); alt_resize(alt); HTTRACE(PROT_TRACE, "AddIcon..... %s => SRC=\"%s\" ALT=\"%s\"\n" _ type_templ _ url _ alt ? alt : ""); return YES; } return NO; } /* ** Add the icon used for files for which ** no other icon seems appropriate (unknown type). */ PUBLIC BOOL HTIcon_addUnknown (const char * url, const char * prefix, char * alt) { if ((icon_unknown = (HTIconNode *) HT_CALLOC(1,sizeof(HTIconNode)))==NULL) HT_OUTOFMEM("HTAddUnknownIcon"); if (url) icon_unknown->icon_url = prefixed(url, prefix); if (alt) StrAllocCopy(icon_unknown->icon_alt, alt); alt_resize(alt); HTTRACE(PROT_TRACE, "Icon add.... UNKNOWN => SRC=\"%s\" ALT=\"%s\"\n" _ url _ alt ? alt : ""); return YES; } /* ** Add the blank icon used in the heading of the listing. */ PUBLIC BOOL HTIcon_addBlank (const char * url, const char * prefix, char * alt) { if ((icon_blank = (HTIconNode *) HT_CALLOC(1,sizeof(HTIconNode))) == NULL) HT_OUTOFMEM("HTAddBlankIcon"); if (url) icon_blank->icon_url = prefixed(url, prefix); if (alt) StrAllocCopy(icon_blank->icon_alt, alt); alt_resize(alt); HTTRACE(PROT_TRACE, "Icon add.... BLANK => SRC=\"%s\" ALT=\"%s\"\n" _ url _ alt ? alt : ""); return YES; } /* ** Add the parent directory icon. */ PUBLIC BOOL HTIcon_addParent (const char * url, const char * prefix, char * alt) { if ((icon_parent = (HTIconNode *) HT_CALLOC(1,sizeof(HTIconNode))) == NULL) HT_OUTOFMEM("HTAddBlankIcon"); if (url) icon_parent->icon_url = prefixed(url, prefix); if (alt) StrAllocCopy(icon_parent->icon_alt, alt); alt_resize(alt); HTTRACE(PROT_TRACE, "Icon add.... PARENT => SRC=\"%s\" ALT=\"%s\"\n" _ url _ alt ? alt : ""); return YES; } /* ** Add the directory icon. */ PUBLIC BOOL HTIcon_addDir (const char * url, const char * prefix, char * alt) { if ((icon_dir = (HTIconNode *) HT_CALLOC(1,sizeof(HTIconNode))) == NULL) HT_OUTOFMEM("HTAddBlankIcon"); if (url) icon_dir->icon_url = prefixed(url, prefix); if (alt) StrAllocCopy(icon_dir->icon_alt, alt); alt_resize(alt); HTTRACE(PROT_TRACE, "Icon add.... DIRECTORY => SRC=\"%s\" ALT=\"%s\"\n" _ url _ alt ? alt : ""); return YES; } /* ** Returns the icon corresponding to content_type or content_encoding. ** If no match is found then use "unknown icon" */ PUBLIC HTIconNode * HTIcon_find (HTFileMode mode, HTFormat content_type, HTEncoding content_encoding) { if (!icon_unknown) icon_unknown = icon_blank; if (mode == HT_IS_FILE) { const char * ct = content_type ? HTAtom_name(content_type) : NULL; const char * ce = content_encoding ? HTAtom_name(content_encoding) : NULL; HTList * cur = icons; HTIconNode * node; while ((node = (HTIconNode*)HTList_nextObject(cur))) { char * slash = strchr(node->type_templ,'/'); if ((ct && slash && match(node->type_templ,ct)) || (ce && !slash && HTStrMatch(node->type_templ,ce))) { return node; } } } else if (mode == HT_IS_DIR) { return icon_dir ? icon_dir : icon_unknown; } else if (mode == HT_IS_BLANK) { return icon_blank ? icon_blank : icon_unknown; } else if (mode == HT_IS_PARENT) { return icon_parent ? icon_parent : icon_unknown; } return icon_unknown; } PRIVATE void HTIconNode_delete (HTIconNode* pNode) { if (pNode) { HT_FREE(pNode->icon_url); HT_FREE(pNode->icon_alt); HT_FREE(pNode->type_templ); HT_FREE(pNode); } } /* ** cleans up all memory used by icons. Should be called by ** HTLibTerminate() (but it isn't) ** */ PUBLIC void HTIcon_deleteAll (void) { if(icons != NULL) { HTList * iconList = icons; HTIconNode * node; while((node = (HTIconNode*)HTList_removeLastObject(iconList))) { HTIconNode_delete(node); } /* delete the list as well */ HTList_delete(icons); icons = NULL; } HTIconNode_delete(icon_unknown); icon_unknown = NULL; HTIconNode_delete(icon_blank); icon_blank = NULL; HTIconNode_delete(icon_parent); icon_parent = NULL; HTIconNode_delete(icon_dir); icon_dir = NULL; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTIcons.html���������������������������������������������������������������������0100644�0000764�0000144�00000011052�07034453474�016152� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Jun-1996 --> <TITLE>W3C Sample Code Library libwww Icon Management</TITLE> </HEAD> <BODY> <H1> Icon Management </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> Icons for directory listsings etc. are bound to MIME <CODE>content-types</CODE> and <CODE>content-encodings</CODE> as described in the <A HREF="HTFormat.html">format manager</A>. These functions bind icon URLs to given <CODE>content-type</CODE> or encoding templates. Templates containing a slash are taken to be <CODE>content-type</CODE> templates, other are <CODE>content-encoding</CODE> templates. <P> This module is implemented by <A HREF="HTIcons.c">HTIcons.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTICONS_H #define HTICONS_H #include "WWWLib.h" </PRE> <PRE> typedef struct _HTIconNode HTIconNode; </PRE> <H2> Add new Icons </H2> <P> All of these functions take an absolute URL and alternate text to use. Add an icon the list <H3> Generic Icons </H3> <PRE>extern BOOL HTIcon_add (const char * url, const char * prefix, char * alt, char * type_templ); </PRE> <H3> Specific Icons </H3> <P> We also have a special set of icons used to represent well-known things in direcctory listings. <H4> Unknown Icon </H4> <P> Add a unknown icon representing files that we can't figure out what is and hence can`'t come up with a better icon. <PRE>extern BOOL HTIcon_addUnknown (const char * url, const char * prefix, char * alt); </PRE> <H4> Empty Icon </H4> <P> In order to aligned HTML pages for directory listings in preformatted mode, we need an empty (or blank) icon of the same size as the other icons. <PRE>extern BOOL HTIcon_addBlank (const char * url, const char * prefix, char * alt); </PRE> <H4> Parent Icon </H4> <P> Add an icon representing a level up in a directory listing - the parent directory. <PRE>extern BOOL HTIcon_addParent (const char * url, const char * prefix, char * alt); </PRE> <H4> Directory Icon </H4> <P> This icon represents a directory or a folder <PRE>extern BOOL HTIcon_addDir (const char * url, const char * prefix, char * alt); </PRE> <H2> Find an Icon </H2> <P> This is a simplified file mode enumeration that can is used in directory listings. <PRE> typedef enum _HTFileMode { HT_IS_FILE, /* Normal file */ HT_IS_DIR, /* Directory */ HT_IS_BLANK, /* Blank Icon */ HT_IS_PARENT /* Parent Directory */ } HTFileMode; extern HTIconNode * HTIcon_find (HTFileMode mode, HTFormat content_type, HTEncoding content_encoding); </PRE> <H2> Icon URL </H2> <P> When you want to add the icon reference into a directory listing, you can get the URL of the icon by using this method. Don't free or modify the string returned! <PRE>extern char * HTIcon_url (HTIconNode * node); </PRE> <H2> Alternative text </H2> <P> Get the alternative text (if any) for text based clients or if you don't want to download the image right away. The string returned must be freed by the caller. <PRE>extern char * HTIcon_alternative (HTIconNode * node, BOOL brackets); </PRE> <H2> Delete all icons </H2> <P> Cleans up all memory used by icons. Should be called by HTLibTerminate() (but it isn't). <PRE>extern void HTIcon_deleteAll (void); </PRE> <H2> A Standard Set of Icons </H2> <P> The <A HREF="WWWFile.html">WWWFile</A> interface does not define a default set of icons but the Library distribution files comes with a <I>standard</I> set of icons that can be used if desired. The Icons can be found in <CODE>$(datadir)/www-icons</CODE>.The set covers the types described below and they can be set up using the <A HREF="HTInit.html#icons">HTIconInit() initialization</A> function in the <A HREF="WWWInit.html">WWWInit startup interface</A> <P> <UL> <LI> <CODE>blank.xbm</CODE> for the blank icon <LI> <CODE>directory.xbm</CODE> for directory icon <LI> <CODE>back.xbm</CODE> for parent directory <LI> <CODE>unknown.xbm</CODE> for unknown icon <LI> <CODE>binary.xbm</CODE> for binary files <LI> <CODE>text.xbm</CODE> for ascii files <LI> <CODE>image.xbm</CODE> for image files <LI> <CODE>movie.xbm</CODE> for video files <LI> <CODE>sound.xbm</CODE> for audio files <LI> <CODE>tar.xbm</CODE> for tar and gtar files <LI> <CODE>compressed.xbm</CODE> for compressed and gzipped files </UL> <PRE> #endif /* HTICONS */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTIcons.html,v 2.25 2025/01/04 20:25:32 kahan Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTInet.c�������������������������������������������������������������������������0100644�0000764�0000144�00000044347�07035071422�015257� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTInet.c ** GENERIC INTERNET UTILITIES ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTInet.c,v 2.28 2025/01/06 10:48:50 kahan Exp $ ** ** This code is in common between client and server sides. ** ** 16 Mar 96 HFN Spawned off from HTTCP.c */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTParse.h" #include "HTAlert.h" #include "HTError.h" #include "HTNetMan.h" #include "HTDNS.h" #include "HTInet.h" /* Implemented here */ #ifndef DEFAULT_NEWS_HOST #define DEFAULT_NEWS_HOST "news" #endif #ifndef SERVER_FILE #define SERVER_FILE "/usr/local/lib/rn/server" #endif /* ------------------------------------------------------------------------- */ /* ** Returns the string equivalent to the errno passed in the argument. ** We can't use errno directly as we have both errno and socerrno. The ** result is a dynamic string that must be freed by the caller. */ PUBLIC char * HTErrnoString (int errornumber) { char * msg = NULL; #ifdef _WINSOCKAPI_ if ((msg = (char *) HT_MALLOC(64)) == NULL) HT_OUTOFMEM("HTErrnoString"); *msg = '\0'; sprintf(msg, "WinSock reported error=%ld", WSAGetLastError()); #else #ifdef HAVE_STRERROR StrAllocCopy(msg, strerror(errornumber)); #else #ifdef HAVE_SYS_ERRLIST #ifdef HAVE_SYS_NERR if (errno < sys_nerr) StrAllocCopy(msg, sys_errlist[errno]); else StrAllocCopy(msg, "Unknown error"); #else StrAllocCopy(msg, sys_errlist[errno]); #endif /* HAVE_SYS_NERR */ #else #ifdef VMS if ((msg = (char *) HT_MALLOC(64)) == NULL) HT_OUTOFMEM("HTErrnoString"); *msg = '\0'; sprintf(msg, "Unix errno=%ld dec, VMS error=%lx hex", errornumber, vaxc$errno); #else StrAllocCopy(msg, "Error number not translated!"); #endif /* _WINSOCKAPI_ */ #endif /* VMS */ #endif /* HAVE_SYS_ERRLIST */ #endif /* HAVE_STRERROR */ return msg; } /* Debug error message */ PUBLIC int HTInetStatus (int errnum, char * where) { #ifdef VMS HTTRACE(CORE_TRACE, "System Error Unix = %ld dec\n" _ errno); HTTRACE(CORE_TRACE, "System Error VMS = %lx hex\n" _ vaxc$errno); return (-vaxc$errno); #else #ifdef _WINSOCKAPI_ HTTRACE(CORE_TRACE, "System Error Unix = %ld dec\n" _ errno); HTTRACE(CORE_TRACE, "System Error WinSock error=%lx hex\n" _ WSAGetLastError()); return (-errnum); #else #ifdef HTDEBUG if (CORE_TRACE) { char * errmsg = HTErrnoString(errnum); HTTRACE(CORE_TRACE, "System Error %d after call to %s() failed\n............ %s\n" _ errno _ where _ errmsg); HT_FREE(errmsg); } #endif /* HTDEBUG */ return (-errnum); #endif /* _WINSOCKAPI_ */ #endif /* VMS */ } /* Parse a cardinal value parse_cardinal() ** ---------------------- ** ** On entry, ** *pp points to first character to be interpreted, terminated by ** non 0:9 character. ** *pstatus points to status already valid ** maxvalue gives the largest allowable value. ** ** On exit, ** *pp points to first unread character ** *pstatus points to status updated iff bad */ PUBLIC unsigned int HTCardinal (int * pstatus, char ** pp, unsigned int max_value) { unsigned int n=0; if ( (**pp<'0') || (**pp>'9')) { /* Null string is error */ *pstatus = -3; /* No number where one expeceted */ return 0; } while ((**pp>='0') && (**pp<='9')) n = n*10 + *((*pp)++) - '0'; if (n>max_value) { *pstatus = -4; /* Cardinal outside range */ return 0; } return n; } /* ------------------------------------------------------------------------- */ /* SIGNAL HANDLING */ /* ------------------------------------------------------------------------- */ #ifdef WWWLIB_SIG /* HTSetSignal ** This function sets up signal handlers. This might not be necessary to ** call if the application has its own handlers. */ #include <signal.h> PUBLIC void HTSetSignal (void) { /* On some systems (SYSV) it is necessary to catch the SIGPIPE signal ** when attemting to connect to a remote host where you normally should ** get `connection refused' back */ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { HTTRACE(CORE_TRACE, "HTSignal.... Can't catch SIGPIPE\n"); } else { HTTRACE(CORE_TRACE, "HTSignal.... Ignoring SIGPIPE\n"); } } #else /* WWWLIB_SIG */ PUBLIC void HTSetSignal (void) { } #endif /* WWWLIB_SIG */ /* ------------------------------------------------------------------------- */ /* HOST NAME FUNCTIONS */ /* ------------------------------------------------------------------------- */ /* Produce a string for an Internet address ** ---------------------------------------- ** ** On exit, ** returns a pointer to a static string which must be copied if ** it is to be kept. */ PUBLIC const char * HTInetString (SockA * sin) { #ifndef DECNET /* Function only used below for a trace message */ #if 0 /* This dumps core on some Sun systems :-(. The problem is now, that the current implememtation only works for IP-addresses and not in other address spaces. */ return inet_ntoa(sin->sin_addr); #endif static char string[16]; sprintf(string, "%d.%d.%d.%d", (int)*((unsigned char *)(&sin->sin_addr)+0), (int)*((unsigned char *)(&sin->sin_addr)+1), (int)*((unsigned char *)(&sin->sin_addr)+2), (int)*((unsigned char *)(&sin->sin_addr)+3)); return string; #else return ""; #endif /* Decnet */ } /* Parse a network node address and port ** ------------------------------------- ** It is assumed that any portnumber and numeric host address ** is given in decimal notation. Separation character is '.' ** Any port number gets chopped off ** Returns: ** >0 Number of homes ** 0 Wait for persistent socket ** -1 Error */ PUBLIC int HTParseInet (HTHost * host, char * hostname, HTRequest * request) { int status = 1; SockA *sin = &host->sock_addr; #ifdef DECNET /* read Decnet node name. @@ Should know about DECnet addresses, but it's probably worth waiting until the Phase transition from IV to V. */ sin->sdn_nam.n_len = min(DN_MAXNAML, strlen(hostname)); /* <=6 in phase 4 */ strncpy (sin->sdn_nam.n_name, hostname, sin->sdn_nam.n_len + 1); HTTRACE(CORE_TRACE, "DECnet: Parsed address as object number %d on host %.6s...\n" _ sin->sdn_objnum _ hostname); #else /* Internet */ { char *strptr = hostname; while (*strptr) { if (*strptr == ':') { *strptr = '\0'; /* Don't want port number in numeric host */ break; } if (!isdigit((int) *strptr) && *strptr != '.') break; strptr++; } if (!*strptr) { #ifdef GUSI sin->sin_addr = inet_addr(hostname); /* See netinet/in.h */ #else sin->sin_addr.s_addr = inet_addr(hostname); /* See arpa/inet.h */ #endif } else { char * port = strchr(hostname, ':'); /* Chop port */ if (port) *port = '\0'; status = HTGetHostByName(host, hostname, request); } #ifdef HTDEBUG if (status > 0) HTTRACE(CORE_TRACE, "ParseInet... as port %d on %s with %d homes\n" _ (int) ntohs(sin->sin_port) _ HTInetString(sin) _ status); #endif /* HTDEBUG */ } #endif /* Internet vs. Decnet */ return status; } #if 0 /* HTGetDomainName ** Returns the current domain name without the local host name. ** The response is pointing to a static area that might be changed ** using HTSetHostName(). ** ** Returns NULL on error, "" if domain name is not found */ PRIVATE char * HTGetDomainName (void) { char * host = HTGetHostName(); char * domain; if (host && *host) { if ((domain = strchr(host, '.')) != NULL) return ++domain; else return ""; } else return NULL; } #endif /* HTGetHostName ** Returns the name of this host. It uses the following algoritm: ** ** 1) gethostname() ** 2) if the hostname doesn't contain any '.' try to read ** /etc/resolv.conf. If there is no domain line in this file then ** 3) Try getdomainname and do as the man pages say for resolv.conf (sun) ** If there is no domain line in this file, then it is derived ** from the domain name set by the domainname(1) command, usually ** by removing the first component. For example, if the domain- ** name is set to ``foo.podunk.edu'' then the default domain name ** used will be ``pudunk.edu''. ** ** This is the same procedure as used by res_init() and sendmail. ** ** Return: hostname on success else NULL */ PUBLIC char * HTGetHostName (void) { char * hostname = NULL; int fqdn = 0; /* 0=no, 1=host, 2=fqdn */ char name[MAXHOSTNAMELEN+1]; *(name+MAXHOSTNAMELEN) = '\0'; #if defined(HAVE_SYSINFO) && defined(SI_HOSTNAME) if (!fqdn && sysinfo(SI_HOSTNAME, name, MAXHOSTNAMELEN) > 0) { char * dot = strchr(name, '.'); HTTRACE(CORE_TRACE, "HostName.... sysinfo says `%s\'\n" _ name); StrAllocCopy(hostname, name); fqdn = dot ? 2 : 1; } #endif /* HAVE_SYSINFO */ #ifdef HAVE_GETHOSTNAME if (!fqdn && gethostname(name, MAXHOSTNAMELEN) == 0) { char * dot = strchr(name, '.'); HTTRACE(CORE_TRACE, "HostName.... gethostname says `%s\'\n" _ name); StrAllocCopy(hostname, name); fqdn = dot ? 2 : 1; } #endif /* HAVE_GETHOSTNAME */ #ifdef RESOLV_CONF /* Now try the resolver config file */ { FILE *fp; if (fqdn==1 && (fp = fopen(RESOLV_CONF, "r")) != NULL) { char buffer[80]; *(buffer+79) = '\0'; while (fgets(buffer, 79, fp)) { if (!strncasecomp(buffer, "domain", 6) || !strncasecomp(buffer, "search", 6)) { char *domainstr = buffer+6; char *end; while (*domainstr == ' ' || *domainstr == '\t') domainstr++; end = domainstr; while (*end && !isspace((int) *end)) end++; *end = '\0'; if (*domainstr) { StrAllocCat(hostname, "."); StrAllocCat(hostname, domainstr); fqdn = 2; break; } } } fclose(fp); } } #endif /* RESOLV_CONF */ #ifdef HAVE_GETDOMAINNAME /* If everything else has failed then try getdomainname */ if (fqdn==1) { if (getdomainname(name, MAXHOSTNAMELEN)) { HTTRACE(CORE_TRACE, "HostName.... Can't get domain name\n"); StrAllocCopy(hostname, ""); return NULL; } /* If the host name and the first part of the domain name are different then use the former as it is more exact (I guess) */ if (strncmp(name, hostname, (int) strlen(hostname))) { char *domain = strchr(name, '.'); if (!domain) domain = name; StrAllocCat(hostname, domain); } } #endif /* HAVE_GETDOMAINNAME */ if (hostname) { char *strptr = hostname; while (*strptr) { *strptr = TOLOWER(*strptr); strptr++; } if (*(hostname+strlen(hostname)-1) == '.') /* Remove trailing dot */ *(hostname+strlen(hostname)-1) = '\0'; HTTRACE(CORE_TRACE, "HostName.... FQDN is `%s\'\n" _ hostname); } return hostname; } /* HTGetMailAddress ** ** Get the mail address of the current user on the current host. The ** domain name used is the one initialized in HTSetHostName or ** HTGetHostName. The login name is determined using (ordered): ** ** getlogin ** getpwuid(getuid()) ** ** The weakness about the last attempt is if the user has multiple ** login names each with the same user ID. If this fails as well then: ** ** LOGNAME environment variable ** USER environment variable ** ** Returns NULL or string to be freed by caller */ PUBLIC char * HTGetMailAddress (void) { #ifdef HT_REENTRANT char name[HT_LOGNAME_MAX]; /* For getlogin_r or getUserName */ int result; #endif #ifdef WWW_MSWINDOWS/* what was the plan for this under windows? - EGP */ char name[256]; /* For getlogin_r or getUserName */ unsigned int bufSize = sizeof(name); #endif #ifdef HAVE_PWD_H struct passwd * pw_info = NULL; #endif char * login = NULL; #ifdef WWW_MSWINDOWS if (!login && GetUserName(name, &bufSize) != TRUE) HTTRACE(CORE_TRACE, "MailAddress. GetUsername returns NO\n"); #endif /* WWW_MSWINDOWS */ #ifdef HAVE_CUSERID if (!login && (login = (char *) cuserid(NULL)) == NULL) HTTRACE(CORE_TRACE, "MailAddress. cuserid returns NULL\n"); #endif /* HAVE_CUSERID */ #ifdef HAVE_GETLOGIN #ifdef GETLOGIN_R_RETURNS_POINTER if (!login && (login = (char *) getlogin_r(name, HT_LOGNAME_MAX)) == NULL) #elif defined(GETLOGIN_R_RETURNS_INT) if (!login && (result = getlogin_r(name, HT_LOGNAME_MAX)) == 0) { login = &name[0]; } else #else if (!login && (login = (char *) getlogin()) == NULL) #endif /* HT_REENTRANT */ HTTRACE(CORE_TRACE, "MailAddress. getlogin returns NULL\n"); #endif /* HAVE_GETLOGIN */ #ifdef HAVE_PWD_H if (!login && (pw_info = getpwuid(getuid())) != NULL) login = pw_info->pw_name; #endif /* HAVE_PWD_H */ if (!login && (login = getenv("LOGNAME")) == NULL) HTTRACE(CORE_TRACE, "MailAddress. LOGNAME not found\n"); if (!login && (login = getenv("USER")) == NULL) HTTRACE(CORE_TRACE, "MailAddress. USER not found\n"); if (!login) login = HT_DEFAULT_LOGIN; if (login) { char * domain = NULL; char * mailaddress = NULL; StrAllocCopy(mailaddress, login); StrAllocCat(mailaddress, "@"); if ((domain = HTGetHostName()) != NULL) { StrAllocCat(mailaddress, domain); HT_FREE(domain); } return mailaddress; } return NULL; } /* ** Except on the NeXT, we pick up the NewsHost name from ** ** 1. Environment variable NNTPSERVER ** 2. File SERVER_FILE ** 3. Compilation time macro DEFAULT_NEWS_HOST ** ** On the NeXT, we pick up the NewsHost name from, in order: ** ** 1. WorldWideWeb default "NewsHost" ** 2. News default "NewsHost" ** 3. Compilation time macro DEFAULT_NEWS_HOST ** ** Returns NULL or string to be freed by caller */ PUBLIC char * HTGetNewsServer (void) { char * newshost = NULL; char buffer[80]; #ifdef NeXTStep if ((newshost = NXGetDefaultValue("WorldWideWeb","NewsHost")) == 0) if ((newshost = NXGetDefaultValue("News","NewsHost")) == 0) newshost = DEFAULT_NEWS_HOST; #else if ((newshost = (char *) getenv("NNTPSERVER")) == NULL) { FILE *fp = fopen(SERVER_FILE, "r"); *(buffer+79) = '\0'; if (fp) { if (fgets(buffer, 79, fp)) { char *end; newshost = buffer; while (*newshost == ' ' || *newshost == '\t') newshost++; end = newshost; while (*end && !isspace((int) *end)) end++; *end = '\0'; } fclose(fp); } } #endif /* NestStep */ /* Last resort */ if (!newshost || !*newshost) newshost = DEFAULT_NEWS_HOST; /* Canonicalize host name */ { char * result = NULL; StrAllocCopy(result, newshost); { char * strptr = result; while (*strptr) { *strptr = TOLOWER(*strptr); strptr++; } } return result; } } /* Timezone Offset ** --------------- ** Calculates the offset from GMT in seconds */ PUBLIC time_t HTGetTimeZoneOffset (void) { static time_t HTTimeZone = -1; /* Invalid timezone offset */ if (HTTimeZone != -1) return HTTimeZone; /* Already done */ #ifdef HAVE_TIMEZONE { time_t cur_t = time(NULL); #ifdef HT_REENTRANT struct tm loctime; struct tm *local = (struct tm *) localtime_r(&cur_t, &loctime); #else struct tm *local = localtime(&cur_t); #endif /* HT_REENTRANT */ #ifdef HAVE_DAYLIGHT if (daylight && local->tm_isdst>0) { /* daylight time? */ #else if (local->tm_isdst>0) { /* daylight time? */ #endif /* HAVE_DAYLIGHT */ #ifdef HAVE_ALTZONE HTTimeZone = altzone; #else /* Assumes a fixed DST offset of 1 hour, which is probably wrong */ #ifdef __CYGWIN__ HTTimeZone = _timezone - 3600; #else HTTimeZone = timezone - 3600; #endif #endif /* HAVE_ALTZONE */ } else { /* no */ #ifdef __CYGWIN__ HTTimeZone = _timezone; #else HTTimeZone = timezone; #endif } HTTimeZone = -HTTimeZone; HTTRACE(CORE_TRACE, "TimeZone.... GMT + (%02d) hours (including DST)\n" _ (int) HTTimeZone/3600); } #else #ifdef HAVE_TM_GMTOFF { time_t cur_t = time(NULL); #ifdef HT_REENTRANT struct tm loctime; localtime_r(&cur_t, &loctime); #else struct tm * local = localtime(&cur_t); #endif /* HT_REENTRANT */ HTTimeZone = local->tm_gmtoff; HTTRACE(CORE_TRACE, "TimeZone.... GMT + (%02d) hours (including DST)\n" _ (int)local->tm_gmtoff / 3600); } #else HTTRACE(CORE_TRACE, "TimeZone.... Not defined\n"); #endif /* HAVE_TM_GMTOFF */ #endif /* HAVE_TIMEZONE */ return HTTimeZone; } /* ** Finds a temporary name in in the directory given. If the directory ** is NULL then don't prepend anything. ** If success, the result must be freed by caller, else we return NULL */ PUBLIC char * HTGetTmpFileName (const char * abs_dir) { char * result = NULL; #ifdef HAVE_TEMPNAM static char * envtmpdir = NULL; size_t len = 0; if (abs_dir && *abs_dir) { char * tmpdir = getenv("TMPDIR"); if (tmpdir) len = strlen(tmpdir); if (len) { if (!(envtmpdir = (char *) HT_REALLOC(envtmpdir, len + 8))) HT_OUTOFMEM("HTGetTmpFileName"); strcpy(envtmpdir, "TMPDIR="); strcpy(envtmpdir + 7, tmpdir); putenv("TMPDIR="); } } #ifdef __CYGWIN__ result = tempnam(abs_dir, ""); #else result = tempnam(abs_dir, NULL); #endif /* __CYGWIN__ */ if (len) putenv(envtmpdir); #else /* ** This is only approx. as we don't know if this file exists or not. ** Hopefully, tempnam() exists on enough platforms so that this is not ** a problem. */ char * offset = NULL; if (!(result = (char *) HT_MALLOC((abs_dir ? strlen(abs_dir) : 0) + HT_MAX_TMPNAM + 2))) HT_OUTOFMEM("HTGetTmpFileName"); #ifdef WWW_MSWINDOWS if (abs_dir) { #else if (abs_dir && *abs_dir==DIR_SEPARATOR_CHAR) { #endif /* WWW_MSWINDOWS */ strcpy(result, abs_dir); offset = result+strlen(result); if (*(offset-1) != DIR_SEPARATOR_CHAR) *offset++ = DIR_SEPARATOR_CHAR; #ifdef HT_REENTRANT tmpnam_r(offset); #else tmpnam(offset); #endif { char * orig = strrchr(offset, DIR_SEPARATOR_CHAR); char * dest = offset; if (orig++) while ((*dest++ = *orig++)); } } else { offset = result; #ifdef HT_REENTRANT tmpnam_r(offset); #else tmpnam(offset); #endif offset = result; } #endif /* HAVE_TEMPNAM */ return result; } /* ** Copied from X utilities */ PUBLIC ms_t HTGetTimeInMillis (void) { #ifdef WWW_MSWINDOWS return GetTickCount(); #else /* WWW_MSWINDOWS */ #ifdef HAVE_GETTIMEOFDAY struct timeval tp; gettimeofday(&tp, NULL); return(tp.tv_sec * 1000) + (tp.tv_usec / 1000); #else return((ms_t) 0); #endif #endif /* !WWW_MSWINDOWS */ } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTInet.html����������������������������������������������������������������������0100644�0000764�0000144�00000010276�06602034421�015770� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Generic Network Communication</TITLE> </HEAD> <BODY> <H1> Generic Network Communication </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module has the common code for handling typical Internet functions like getting the name of the local host, getting the domain name and email address of user, parsing error codes returned in <CODE>errno</CODE> or equivalent etc. <P> This module is implemented by <A HREF="HTInet.c">HTInet.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTINET_H #define HTINET_H #include "HTReq.h" #include "HTHstMan.h" </PRE> <H3> System Description of Error Message </H3> <P> Return error message corresponding to errno number given. We need to pass the error number as a parameter as we on some platforms get different codes from sockets and local file access. <PRE> extern char * HTErrnoString (int errnum); extern int HTInetStatus (int errnum, char * where); </PRE> <H3> Parse a Cardinal Value </H3> <P> Converts a string to a cardinal value. On entry: *pp points to first character to be interpreted, terminated by non 0..9 character. *pstatus points to status already valid, maxvalue gives the largest allowable value. On exit: *pp points to first unread character, *pstatus points to status updated iff bad <PRE> extern unsigned int HTCardinal (int * pstatus, char ** pp, unsigned int max_value); </PRE> <H3> Produce a string for an internet address </H3> <P> This function is equivalent to the BSD system call <B>inet_ntoa</B> in that it converts a numeric 32-bit IP-address to a dotted-notation decimal string. The pointer returned points to static memory which must be copied if it is to be kept. <PRE> extern const char * HTInetString (struct sockaddr_in * sin); </PRE> <H3> Parse a network node address and port </H3> <P> It is assumed that any portnumber and numeric host address is given in decimal notation. Separation character is '.' Any port number given in host name overrides all other values. 'host' might be modified. <PRE> extern int HTParseInet (HTHost * host, char * hostname, HTRequest * request); </PRE> <H3> Timezone Offset </H3> <P> Calculates the offset from GMT in <I>seconds</I>. <PRE> extern time_t HTGetTimeZoneOffset (void); </PRE> <H3> Get Time of day in Milli Seconds </H3> <P> Return the time of day in milli seconds. <PRE>extern ms_t HTGetTimeInMillis (void); </PRE> <H3> FQDN of this Host </H3> <P> This function returns a the name of this host or NULL if not available. The name is stored in a static variable. <PRE> extern char * HTGetHostName (void); </PRE> <H3> User Email Address </H3> <P> This functions returns a char pointer to a static location containing the mail address of the current user. The static location is different from the one of the current host name so different values can be assigned. The default value is <CODE>&lt;USER&gt;@hostname</CODE> where hostname is as returned by <I>HTGetHostName()</I>. <PRE> #ifndef HT_DEFAULT_LOGIN #define HT_DEFAULT_LOGIN "libwww" #endif extern char * HTGetMailAddress (void); </PRE> <H3> News server </H3> <P> The default news host is "news" but you can get ans set the value here. <PRE>extern char * HTGetNewsServer (void); </PRE> <H3> Get a Temporary File Name </H3> <P> HTGetTmpFileName() allows the user to control the choice of a directory. The argument dir points to the name of the directory in which the file is to be created. This is equivalent to tempnam() function. <PRE> extern char * HTGetTmpFileName (const char * dir); </PRE> <H3> Signal Handling </H3> <P> This is only necessary to compile on a few platforms and only if the application does not have its own signal handling. It is required on Solaris 2.3 (and other SVR4 platforms?) due to a bug in the TCP kernel. When a <CODE>connect()</CODE> is tried to a illegal port, solaris gives a SIGPIPE signal instead of returning <EM>Connection refused</EM>. <PRE> #ifdef WWWLIB_SIG extern void HTSetSignal (void); #endif #endif /* HTINET_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTInet.html,v 2.11 2025/09/22 23:56:01 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTInit.c�������������������������������������������������������������������������0100644�0000764�0000144�00000041145�07217441310�015253� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTInit.c ** CONFIGURATION-SPECIFIC INITIALIALIZATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTInit.c,v 2.100 2025/12/18 17:00:56 kahan Exp $ ** ** General initialization functions. ** ** @@@A lot of these should be moved to the various modules instead ** of being here */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #ifdef HT_MUX #include "WWWMux.h" #endif #include "HTInit.h" /* Implemented here */ #ifndef W3C_ICONS #define W3C_ICONS "w3c-icons" #endif #define ICON_LOCATION "/icons/" /* ------------------------------------------------------------------------- */ /* BINDINGS BETWEEN A SOURCE MEDIA TYPE AND A DEST MEDIA TYPE (CONVERSION) ** ---------------------------------------------------------------------- ** Not done automaticly - may be done by application! */ PUBLIC void HTConverterInit (HTList * c) { /* ** You can get debug information out through the debug stream if you set ** the debug format appropriately */ HTConversion_add(c,"*/*", "www/debug", HTBlackHoleConverter, 1.0, 0.0, 0.0); /* ** Set our own local file save stream for the MIME parser so that ** we know how to dump to local disk in case we get content type ** application/octect stream, or an encoding that we don't know. */ HTMIME_setSaveStream (HTSaveLocally); /* ** These are converters that converts to something other than www/present, ** that is not directly outputting someting to the user on the screen */ HTConversion_add(c,"message/rfc822", "*/*", HTMIMEConvert, 1.0, 0.0, 0.0); HTConversion_add(c,"message/x-rfc822-foot", "*/*", HTMIMEFooter, 1.0, 0.0, 0.0); HTConversion_add(c,"message/x-rfc822-head", "*/*", HTMIMEHeader, 1.0, 0.0, 0.0); HTConversion_add(c,"message/x-rfc822-cont", "*/*", HTMIMEContinue, 1.0, 0.0, 0.0); HTConversion_add(c,"message/x-rfc822-upgrade","*/*", HTMIMEUpgrade, 1.0, 0.0, 0.0); HTConversion_add(c,"message/x-rfc822-partial","*/*", HTMIMEPartial, 1.0, 0.0, 0.0); #ifndef NO_CACHE HTConversion_add(c,"www/x-rfc822-headers","*/*", HTCacheCopyHeaders, 1.0, 0.0, 0.0); #endif HTConversion_add(c,"multipart/*", "*/*", HTBoundary, 1.0, 0.0, 0.0); HTConversion_add(c,"text/plain", "text/html", HTPlainToHTML, 1.0, 0.0, 0.0); /* ** The following conversions are converting ASCII output from various ** protocols to HTML objects. */ HTConversion_add(c,"text/x-http", "*/*", HTTPStatus_new, 1.0, 0.0, 0.0); #if 0 HTConversion_add(c,"text/x-gopher", "www/present", HTGopherMenu, 1.0, 0.0, 0.0); HTConversion_add(c,"text/x-cso", "www/present", HTGopherCSO, 1.0, 0.0, 0.0); HTConversion_add(c,"text/x-wais-source", "*/*", HTWSRCConvert, 1.0, 0.0, 0.0); #endif HTConversion_add(c,"text/x-nntp-list", "*/*", HTNewsList, 1.0, 0.0, 0.0); HTConversion_add(c,"text/x-nntp-over", "*/*", HTNewsGroup, 1.0, 0.0, 0.0); /* ** If we have the XML expat parser linked in */ #ifdef HT_EXPAT HTConversion_add(c, "text/xml", "*/*", HTXML_new, 1.0, 0.0, 0.0); HTConversion_add(c, "application/xml", "*/*", HTXML_new, 1.0, 0.0, 0.0); #endif /* ** We also register a special content type guess stream that can figure out ** the content type by reading the first bytes of the stream */ HTConversion_add(c,"www/unknown", "*/*", HTGuess_new, 1.0, 0.0, 0.0); /* ** Register a persistent cache stream which can save an object to local ** file */ HTConversion_add(c,"www/cache", "*/*", HTCacheWriter, 1.0, 0.0, 0.0); HTConversion_add(c,"www/cache-append", "*/*", HTCacheAppend, 1.0, 0.0, 0.0); /* ** Handling Rule files is handled just like any other stream ** This converter reads a rule file and generates the rules */ HTConversion_add(c,"application/x-www-rules","*/*", HTRules, 1.0, 0.0, 0.0); /* ** This dumps all other formats to local disk without any further ** action taken */ HTConversion_add(c,"*/*", "www/present", HTSaveConverter, 0.3, 0.0, 0.0); } /* BINDINGS BETWEEN MEDIA TYPES AND EXTERNAL VIEWERS/PRESENTERS ** ------------------------------------------------------------ ** Not done automaticly - may be done by application! ** The data objects are stored in temporary files before the external ** program is called */ PUBLIC void HTPresenterInit (HTList * c) { /* ** First we set the special "presenter" stream that writes to a ** temporary file before executing the external presenter */ HTPresentation_setConverter(HTSaveAndExecute); #ifdef NeXT HTPresentation_add(c,"application/postscript", "open %s", NULL, 1.0, 2.0, 0.0); /* The following needs the GIF previewer -- you might not have it. */ HTPresentation_add(c,"image/gif", "open %s", NULL, 0.3, 2.0, 0.0); HTPresentation_add(c,"image/tiff", "open %s", NULL, 1.0, 2.0, 0.0); HTPresentation_add(c,"audio/basic", "open %s", NULL, 1.0, 2.0, 0.0); HTPresentation_add(c,"*/*", "open %s", NULL, 0.05, 0.0, 0.0); #else if (getenv("DISPLAY")) { /* Must have X11 */ HTPresentation_add(c,"application/postscript", "ghostview %s", NULL, 1.0, 3.0, 0.0); HTPresentation_add(c,"image/gif", "xv %s", NULL, 1.0, 3.0, 0.0); HTPresentation_add(c,"image/tiff", "xv %s", NULL, 1.0, 3.0, 0.0); HTPresentation_add(c,"image/jpeg", "xv %s", NULL, 1.0, 3.0, 0.0); HTPresentation_add(c,"image/png", "xv %s", NULL, 1.0, 3.0, 0.0); } #endif } /* PRESENTERS AND CONVERTERS AT THE SAME TIME ** ------------------------------------------ ** Not done automaticly - may be done by application! ** This function is only defined in order to preserve backward ** compatibility. */ PUBLIC void HTFormatInit (HTList * c) { HTConverterInit(c); HTPresenterInit(c); } /* BINDINGS BETWEEN A TRANSFER ENCODING AND CODERS / DECODERS ** ---------------------------------------------------------- ** Not done automaticly - may be done by application! */ PUBLIC void HTTransferEncoderInit (HTList * c) { #ifdef HT_ZLIB HTCoding_add(c, "deflate", NULL, HTZLib_inflate, 1.0); #endif HTCoding_add(c, "chunked", HTChunkedEncoder, HTChunkedDecoder, 1.0); } /* BINDINGS BETWEEN A CONTENT ENCODING AND CODERS / DECODERS ** --------------------------------------------------------- ** Not done automaticly - may be done by application! */ PUBLIC void HTContentEncoderInit (HTList * c) { #ifdef HT_ZLIB HTCoding_add(c, "deflate", NULL, HTZLib_inflate, 1.0); #endif /* HT_ZLIB */ } /* REGISTER BEFORE FILTERS ** ----------------------- ** The BEFORE filters handle proxies, caches, rule files etc. ** The filters are called in the order by which the are registered ** Not done automaticly - may be done by application! */ PUBLIC void HTBeforeInit (void) { HTNet_addBefore(HTCredentialsFilter, "http://*", NULL, HT_FILTER_LATE); HTNet_addBefore(HTPEP_beforeFilter, "http://*", NULL, HT_FILTER_LATE); HTNet_addBefore(HTRuleFilter, NULL, NULL, HT_FILTER_LATE); HTNet_addBefore(HTProxyFilter, NULL, NULL, HT_FILTER_LATE); } /* REGISTER AFTER FILTERS ** ---------------------- ** The AFTER filters handle error messages, logging, redirection, ** authentication etc. ** The filters are called in the order by which the are registered ** Not done automaticly - may be done by application! */ PUBLIC void HTAfterInit (void) { HTNet_addAfter(HTAuthFilter, "http://*", NULL, HT_NO_ACCESS, HT_FILTER_MIDDLE); HTNet_addAfter(HTAuthFilter, "http://*", NULL, HT_REAUTH, HT_FILTER_MIDDLE); HTNet_addAfter(HTPEP_afterFilter, "http://*", NULL, HT_ALL, HT_FILTER_MIDDLE); HTNet_addAfter(HTRedirectFilter, "http://*", NULL, HT_PERM_REDIRECT, HT_FILTER_MIDDLE); HTNet_addAfter(HTRedirectFilter, "http://*", NULL, HT_FOUND, HT_FILTER_MIDDLE); HTNet_addAfter(HTRedirectFilter, "http://*", NULL, HT_SEE_OTHER, HT_FILTER_MIDDLE); HTNet_addAfter(HTRedirectFilter, "http://*", NULL, HT_TEMP_REDIRECT, HT_FILTER_MIDDLE); HTNet_addAfter(HTAuthInfoFilter, "http://*", NULL, HT_ALL, HT_FILTER_MIDDLE); HTNet_addAfter(HTUseProxyFilter, "http://*", NULL, HT_USE_PROXY, HT_FILTER_MIDDLE); HTNet_addAfter(HTInfoFilter, NULL, NULL, HT_ALL, HT_FILTER_LATE); } /* REGISTER DEFAULT AUTHENTICATION SCHEMES ** --------------------------------------- ** This function registers the BASIC access authentication */ PUBLIC void HTAAInit (void) { HTAA_newModule ("basic", HTBasic_generate, HTBasic_parse, NULL, HTBasic_delete); #ifdef HT_MD5 HTAA_newModule ("digest", HTDigest_generate, HTDigest_parse, HTDigest_updateInfo, HTDigest_delete); #endif /* HT_MD5 */ } /* REGISTER BEFORE AND AFTER FILTERS ** --------------------------------- ** We register a commonly used set of BEFORE and AFTER filters. ** Not done automaticly - may be done by application! */ PUBLIC void HTNetInit (void) { HTBeforeInit(); HTAfterInit(); } /* REGISTER CALLBACKS FOR THE ALERT MANAGER ** ---------------------------------------- ** We register a set of alert messages ** Not done automaticly - may be done by application! */ PUBLIC void HTAlertInit (void) { HTAlert_add(HTProgress, HT_A_PROGRESS); HTAlert_add(HTError_print, HT_A_MESSAGE); HTAlert_add(HTConfirm, HT_A_CONFIRM); HTAlert_add(HTPrompt, HT_A_PROMPT); HTAlert_add(HTPromptPassword, HT_A_SECRET); HTAlert_add(HTPromptUsernameAndPassword, HT_A_USER_PW); } /* REGISTER ALL KNOWN TRANSPORTS IN THE LIBRARY ** -------------------------------------------- ** Not done automaticly - may be done by application! */ PUBLIC void HTTransportInit (void) { HTTransport_add("tcp", HT_TP_SINGLE, HTReader_new, HTWriter_new); HTTransport_add("buffered_tcp", HT_TP_SINGLE, HTReader_new, HTBufferWriter_new); #ifdef HT_MUX HTTransport_add("mux", HT_TP_INTERLEAVE, HTReader_new, HTBufferWriter_new); #endif /* HT_MUX */ #ifndef NO_UNIX_IO HTTransport_add("local", HT_TP_SINGLE, HTReader_new, HTWriter_new); #else HTTransport_add("local", HT_TP_SINGLE, HTANSIReader_new, HTANSIWriter_new); #endif } /* REGISTER ALL KNOWN PROTOCOLS IN THE LIBRARY ** ------------------------------------------- ** Not done automaticly - may be done by application! */ PUBLIC void HTProtocolInit (void) { #ifndef DECNET HTProtocol_add("ftp", "tcp", FTP_PORT, NO, HTLoadFTP, NULL); HTProtocol_add("nntp", "tcp", NEWS_PORT, NO, HTLoadNews, NULL); HTProtocol_add("news", "tcp", NEWS_PORT, NO, HTLoadNews, NULL); HTProtocol_add("gopher", "tcp", GOPHER_PORT, NO, HTLoadGopher, NULL); #ifdef HT_DIRECT_WAIS HTProtocol_add("wais", "tcp", WAIS_PORT, YES, HTLoadWAIS, NULL); #endif #endif /* DECNET */ #ifdef HT_MUX HTProtocol_add("http", "mux", HTTP_PORT, NO, HTLoadHTTP, NULL); #else HTProtocol_add("http", "buffered_tcp", HTTP_PORT, NO, HTLoadHTTP, NULL); #endif /* !HT_MUX */ #ifndef NO_UNIX_IO HTProtocol_add("file", "local", 0, NO, HTLoadFile, NULL); HTProtocol_add("cache", "local", 0, NO, HTLoadCache, NULL); #else HTProtocol_add("file", "local", 0, YES, HTLoadFile, NULL); HTProtocol_add("cache", "local", 0, YES, HTLoadCache, NULL); #endif HTProtocol_add("telnet", "", 0, YES, HTLoadTelnet, NULL); HTProtocol_add("tn3270", "", 0, YES, HTLoadTelnet, NULL); HTProtocol_add("rlogin", "", 0, YES, HTLoadTelnet, NULL); } /* REGISTER ALL KNOWN PROTOCOLS IN THE LIBRARY PREEMPTIVELY ** -------------------------------------------------------- ** Not done automaticly - may be done by application! */ PUBLIC void HTProtocolPreemptiveInit (void) { #ifndef DECNET HTProtocol_add("ftp", "tcp", FTP_PORT, YES, HTLoadFTP, NULL); HTProtocol_add("nntp", "tcp", NEWS_PORT, YES, HTLoadNews, NULL); HTProtocol_add("news", "tcp", NEWS_PORT, YES, HTLoadNews, NULL); HTProtocol_add("gopher", "tcp", GOPHER_PORT, YES, HTLoadGopher, NULL); #ifdef HT_DIRECT_WAIS HTProtocol_add("wais", "", WAIS_PORT, YES, HTLoadWAIS, NULL); #endif #endif /* DECNET */ HTProtocol_add("http", "buffered_tcp", HTTP_PORT, YES, HTLoadHTTP, NULL); HTProtocol_add("file", "local", 0, YES, HTLoadFile, NULL); HTProtocol_add("telnet", "", 0, YES, HTLoadTelnet, NULL); HTProtocol_add("tn3270", "", 0, YES, HTLoadTelnet, NULL); HTProtocol_add("rlogin", "", 0, YES, HTLoadTelnet, NULL); HTProtocol_add("cache","local",0,YES,HTLoadCache, NULL); } /* BINDINGS BETWEEN ICONS AND MEDIA TYPES ** -------------------------------------- ** Not done automaticly - may be done by application! ** For directory listings etc. you can bind a set of icons to a set of ** media types and special icons for directories and other objects that ** do not have a media type. */ PUBLIC void HTIconInit (const char * url_prefix) { const char * prefix = url_prefix ? url_prefix : ICON_LOCATION; HTIcon_addBlank("blank.xbm", prefix, NULL); HTIcon_addDir("directory.xbm", prefix, "DIR"); HTIcon_addParent("back.xbm", prefix, "UP"); HTIcon_addUnknown("unknown.xbm", prefix, NULL); HTIcon_add("unknown.xbm", prefix, NULL, "*/*"); HTIcon_add("binary.xbm", prefix, "BIN", "binary"); HTIcon_add("unknown.xbm", prefix, NULL, "www/unknown"); HTIcon_add("text.xbm", prefix, "TXT", "text/*"); HTIcon_add("image.xbm", prefix, "IMG", "image/*"); HTIcon_add("movie.xbm", prefix, "MOV", "video/*"); HTIcon_add("sound.xbm", prefix, "AU", "audio/*"); HTIcon_add("tar.xbm", prefix, "TAR", "multipart/x-tar"); HTIcon_add("tar.xbm", prefix, "TAR", "multipart/x-gtar"); HTIcon_add("compressed.xbm",prefix, "CMP", "x-compress"); HTIcon_add("compressed.xbm",prefix, "GZP", "x-gzip"); HTIcon_add("index.xbm", prefix, "IDX", "application/x-gopher-index"); HTIcon_add("index2.xbm", prefix, "CSO", "application/x-gopher-cso"); HTIcon_add("telnet.xbm", prefix, "TEL", "application/x-gopher-telnet"); HTIcon_add("unknown.xbm", prefix, "DUP", "application/x-gopher-duplicate"); HTIcon_add("unknown.xbm", prefix, "TN", "application/x-gopher-tn3270"); /* Add global mapping to where to find the internal icons */ { char * curdir = HTGetCurrentDirectoryURL(); char * virtual = HTParse(ICON_LOCATION, curdir, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); char * physical = NULL; StrAllocCat(virtual, "*"); { char * str = NULL; if ((str = (char *) HT_MALLOC(strlen(W3C_ICONS) + 4)) == NULL) HT_OUTOFMEM("HTIconInit"); strcpy(str, W3C_ICONS); if (*(str + strlen(str) - 1) != '/') strcat(str, "/"); strcat(str, "*"); physical = HTParse(str, curdir, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); HT_FREE(str); } HTRule_addGlobal(HT_Pass, virtual, physical); HT_FREE(virtual); HT_FREE(physical); HT_FREE(curdir); } } /* REGISTER ALL HTTP/1.1 MIME HEADERS ** -------------------------------------------- ** Not done automaticly - may be done by application! */ PUBLIC void HTMIMEInit (void) { struct { char * string; HTParserCallback * pHandler; } fixedHandlers[] = { {"accept", &HTMIME_accept}, {"accept-charset", &HTMIME_acceptCharset}, {"accept-encoding", &HTMIME_acceptEncoding}, {"accept-language", &HTMIME_acceptLanguage}, {"accept-ranges", &HTMIME_acceptRanges}, {"authorization", NULL}, {"cache-control", &HTMIME_cacheControl}, {"connection", &HTMIME_connection}, {"content-encoding", &HTMIME_contentEncoding}, {"content-length", &HTMIME_contentLength}, {"content-range", &HTMIME_contentRange}, {"content-transfer-encoding", &HTMIME_contentTransferEncoding}, {"content-type", &HTMIME_contentType}, {"digest-MessageDigest", &HTMIME_messageDigest}, {"keep-alive", &HTMIME_keepAlive}, {"link", &HTMIME_link}, {"location", &HTMIME_location}, {"max-forwards", &HTMIME_maxForwards}, {"mime-version", NULL}, {"pragma", &HTMIME_pragma}, {"protocol", &HTMIME_protocol}, {"protocol-info", &HTMIME_protocolInfo}, {"protocol-request", &HTMIME_protocolRequest}, {"proxy-authenticate", &HTMIME_authenticate}, {"proxy-authorization", &HTMIME_proxyAuthorization}, {"public", &HTMIME_public}, {"range", &HTMIME_range}, {"referer", &HTMIME_referer}, {"retry-after", &HTMIME_retryAfter}, {"server", &HTMIME_server}, {"trailer", &HTMIME_trailer}, {"transfer-encoding", &HTMIME_transferEncoding}, {"upgrade", &HTMIME_upgrade}, {"user-agent", &HTMIME_userAgent}, {"vary", &HTMIME_vary}, {"via", &HTMIME_via}, {"warning", &HTMIME_warning}, {"www-authenticate", &HTMIME_authenticate}, {"authentication-info", &HTMIME_authenticationInfo}, {"proxy-authentication-info", &HTMIME_proxyAuthenticationInfo} }; int i; for (i = 0; i < sizeof(fixedHandlers)/sizeof(fixedHandlers[0]); i++) HTHeader_addParser(fixedHandlers[i].string, NO, fixedHandlers[i].pHandler); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTInit.html����������������������������������������������������������������������0100644�0000764�0000144�00000017056�07130377545�016015� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 13-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Default Initialization</TITLE> </HEAD> <BODY> <H1> Default Initialization Methods </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> As mentioned in the <A HREF="../User/Architecture/">Library Architecture</A>, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing <A HREF="http://info.internet.isi.edu:80/in-notes/rfc/files/rfc822.txt">RFC 822</A> headers etc. This module helps the application programmer setting up all this functionality, but it is important to note that none of it is <I>required</I> in order to use the Library. <P> This module is implemented by <A HREF="HTInit.c">HTInit.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. You can also have a look at the other <A HREF="WWWInit.html">Initialization modules</A>. <PRE> #ifndef HTINIT_H #define HTINIT_H #include "<A HREF="WWWLib.html">WWWLib.h</A>" #include "<A HREF="WWWApp.html">WWWApp.h</A>" </PRE> <H2> Default Transport Protocol Modules </H2> <P> Register the default set of transport protocols. <PRE> #include "<A HREF="WWWTrans.html">WWWTrans.h</A>" extern void HTTransportInit (void); </PRE> <H2> Default Protocol Modules </H2> <P> Set up default bindings between access schemes and the set of protocol modules in the Library. The preemptive version registers all protocol modules to use blocking sockets. <PRE> #include "<A HREF="WWWHTTP.html">WWWHTTP.h</A>" #include "<A HREF="WWWFile.html">WWWFile.h</A>" #include "<A HREF="WWWFTP.html">WWWFTP.h</A>" #include "<A HREF="WWWGophe.html">WWWGophe.h</A>" #include "<A HREF="WWWTelnt.html">WWWTelnt.h</A>" #include "<A HREF="WWWNews.html">WWWNews.h</A>" #ifdef HT_DIRECT_WAIS #include "<A HREF="WWWWAIS.html">WWWWAIS.h</A>" #endif #ifndef FTP_PORT #define FTP_PORT 21 #endif #ifndef NEWS_PORT #define NEWS_PORT 119 #endif #ifndef GOPHER_PORT #define GOPHER_PORT 70 #endif #ifndef WAIS_PORT #define WAIS_PORT 666 #endif #ifndef HTTP_PORT #define HTTP_PORT 80 #endif #define HTAccessInit HTProtocolInit extern void HTProtocolInit (void); extern void HTProtocolPreemptiveInit (void); </PRE> <H2> <A NAME="MIME">Default MIME Parsers</A> </H2> <P> The core doesn't have any built in MIME parsers, but many of the protocols need them. For instance, many elements of the library rely on the <CODE>Content-Length</CODE> being correctly set. <CODE>HTMIMEInit()</CODE> provides the minimal functionality needed for library reliabilty. <PRE> #include "WWWMIME.h" #include "WWWApp.h" extern void HTMIMEInit (void); </PRE> <H2> Default Event Manager </H2> <P> libwww core does not have any default event loop - it has to be added by the application. However, it does come with an example implementation thta may be used. This implementation is based on a <CODE>select</CODE> system call using non-blocking and interleaved sockets. <PRE> #include "WWWApp.h" </PRE> <H2> <A NAME="Converter">Default Media Type Conversions</A> </H2> <P> The <EM>Converters</EM> are used to convert a media type to another media type, or to present it on screen. This is a part of the stream stack algorithm. The Presenters are also used in the stream stack, but are initialized separately. <PRE> #include "<A HREF="WWWMIME.html">WWWMIME.h</A>" #include "<A HREF="WWWHTML.html">WWWHTML.h</A>" #include "<A HREF="WWWStream.html">WWWStream.h</A>" #include "<A HREF="WWWDir.html">WWWDir.h</A>" #include "<A HREF="WWWCache.html">WWWCache.h</A>" #ifdef HT_EXPAT #include "<A HREF="WWWXML.html">WWWXML.h</A>" #endif extern void HTConverterInit (HTList * conversions); </PRE> <H3> Presenters </H3> <P> The <EM>Presenters</EM> are used to present media types by calling external programs, for example, a Postscript viewer. This is a part of the stream stack algorithm. The <I>Converters</I> are also used in the stream stack, but are initialized separately. The <I>Presenters</I> use the same include files as the <I>Converters</I>. <PRE> extern void HTPresenterInit (HTList * conversions); </PRE> <H3> Converters and Presenters </H3> <P> This function is only defined in order to preserve backward compatibility. <PRE> extern void HTFormatInit (HTList * conversions); </PRE> <H2> Default Transfer Encodings </H2> <P> Transfer encoders and decoders can handle encodings like <EM>chunked</EM> etc. <PRE>#include "<A HREF="WWWHTTP.html">WWWHTTP.h</A>" extern void HTTransferEncoderInit (HTList * encodings); </PRE> <H2> Default Content Encodings </H2> <P> Content encoders and decoders can handle encodings like <EM>deflate</EM> etc. <PRE>#include "<A HREF="WWWZip.html">WWWZip.h</A>" extern void HTContentEncoderInit (HTList * encodings); </PRE> <H2> Default BEFORE and AFTER Filters </H2> <P> This module provides a set of default <B>BEFORE</B> and <B>AFTER</B> filters that can be registered by the <A HREF="HTNet.html">Net manager</A> to be called before and after a request. All filters can be registered either to be called <I>globally</I> (all requests) or <I>locally</I> (pr request basis). <B>Not</B> done automaticly - may be done by application! <H3> BEFORE Filters </H3> <P> The <I>BEFORE</I> filters handle <I>proxies</I>, <I>caches</I>, <I>rule files</I> etc. The filters are called in the order by which the are registered <PRE>#include "<A HREF="WWWApp.html">WWWApp.h</A>" extern void HTBeforeInit (void); </PRE> <H3> AFTER Filters </H3> <P> The <I>AFTER</I> filters handle error messages, logging, redirection, authentication etc. The filters are called in the order by which the are registered <PRE>extern void HTAfterInit (void); </PRE> <H3> BEFORE and AFTER Filters </H3> <P> This is just a short cut for registrating both <I>BEFORE</I> and <I>AFTER</I> at once <PRE>extern void HTNetInit (void); </PRE> <H2> Default Access Authentication Modules </H2> <P> The <A HREF="HTAAUtil.html">Access Manager</A> which is implemented as a <I>BEFORE</I> and an <I>AFTER</I> filter (automatically registered in <CODE>HTNetInit()</CODE>) does not, by default, know of any access authentication schemes. As everything else, this must be registered! This function does the job and should be all you need. <PRE>extern void HTAAInit (void); </PRE> <H2> Default Message and Dialog Functions </H2> <P> We register a set of alert messages Not done automaticly - may be done by application! <PRE>#include "<A HREF="WWWApp.html">WWWApp.h</A>" extern void HTAlertInit (void); </PRE> <H2> Default Icons for Directory Listings </H2> <P> The <A HREF="WWWDir.html">WWWDir interface</A> contains support for including references (URLs and <CODE>ALT</CODE> text tags) to icons in directory listings. The icons are selected as a function of the media type and the content encoding of the file in question. That is - you can set up icons for compressed files, postscript files etc. There is also a small set of specific icons representing directories etc. <PRE>#include "<A HREF="WWWFile.html">WWWFile.h</A>" extern void HTIconInit (const char * url_prefix); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTInit.html,v 2.55 2025/07/04 15:14:45 kahan Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLib.c��������������������������������������������������������������������������0100644�0000764�0000144�00000011304�06734010360�015050� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** GENEREAL LIBRARY INFORMATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTLib.c,v 2.17 2025/06/22 22:40:48 frystyk Exp $ ** ** Authors ** HFN Henrik Frystyk Nielsen, frystyk@w3.org */ #if !defined(HT_DIRECT_WAIS) && !defined(HT_DEFAULT_WAIS_GATEWAY) #define HT_DEFAULT_WAIS_GATEWAY "http://www.w3.org:8001/" #endif /* Library include files */ #include "WWWUtil.h" #include "HTAnchor.h" #include "HTProt.h" #include "HTDNS.h" #include "HTUTree.h" #include "HTLib.h" /* Implemented here */ #ifndef W3C_VERSION #define W3C_VERSION "unknown" #endif #ifndef HT_DEFAULT_USER #define HT_DEFAULT_USER "LIBWWW_GENERIC_USER" #endif PRIVATE char * HTAppName = NULL; /* Application name: please supply */ PRIVATE char * HTAppVersion = NULL; /* Application version: please supply */ PRIVATE char * HTLibName = "libwww"; PRIVATE char * HTLibVersion = W3C_VERSION; PRIVATE BOOL HTSecure = NO; /* Can we access local file system? */ PRIVATE BOOL initialized = NO; PRIVATE HTUserProfile * UserProfile = NULL; /* Default user profile */ /* --------------------------------------------------------------------------*/ /* Information about the Application ** --------------------------------- */ PUBLIC const char * HTLib_appName (void) { return HTAppName ? HTAppName : "UNKNOWN"; } PUBLIC BOOL HTLib_setAppName (const char * name) { if (name) { char * ptr; StrAllocCopy(HTAppName, name); ptr = HTAppName; while (*ptr) { if (isspace((int) *ptr)) *ptr = '_'; ptr++; } return YES; } return NO; } PUBLIC const char * HTLib_appVersion (void) { return HTAppVersion ? HTAppVersion : "0.0"; } PUBLIC BOOL HTLib_setAppVersion (const char * version) { if (version) { char * ptr; StrAllocCopy(HTAppVersion, version); ptr = HTAppVersion; while (*ptr) { if (isspace((int) *ptr)) *ptr = '_'; ptr++; } return YES; } return NO; } /* Information about libwww ** ------------------------ */ PUBLIC const char * HTLib_name (void) { return HTLibName ? HTLibName : "UNKNOWN"; } PUBLIC const char * HTLib_version (void) { return HTLibVersion ? HTLibVersion : "0.0"; } /* Default User Profile ** -------------------- */ PUBLIC HTUserProfile * HTLib_userProfile (void) { return UserProfile; } PUBLIC BOOL HTLib_setUserProfile (HTUserProfile * up) { if (up) { UserProfile = up; return YES; } return NO; } /* Access Local File System ** ------------------------ ** In this mode we do not tough the local file system at all */ PUBLIC BOOL HTLib_secure (void) { return HTSecure; } PUBLIC void HTLib_setSecure (BOOL mode) { HTSecure = mode; } /* Have application initalized ** --------------------------- */ PUBLIC BOOL HTLib_isInitialized (void) { return initialized; } /* HTLibInit ** ** This function initiates the Library and it MUST be called when ** starting up an application. See also HTLibTerminate() */ PUBLIC BOOL HTLibInit (const char * AppName, const char * AppVersion) { HTTRACE(CORE_TRACE, "WWWLibInit.. INITIALIZING LIBRARY OF COMMON CODE\n"); /* Set the application name and version */ HTLib_setAppName(AppName); HTLib_setAppVersion(AppVersion); /* Initialize the timezone */ #ifdef HAVE_TZSET tzset(); #endif /* Create a default user profile and initialize it */ UserProfile = HTUserProfile_new(HT_DEFAULT_USER, NULL); HTUserProfile_localize(UserProfile); #ifdef WWWLIB_SIG /* On Solaris (and others?) we get a BROKEN PIPE signal when connecting ** to a port where we should get `connection refused'. We ignore this ** using the following function call */ HTSetSignal(); /* Set signals in library */ #endif initialized = YES; return YES; } /* HTLibTerminate ** -------------- ** This function HT_FREEs memory kept by the Library and should be called ** before exit of an application (if you are on a PC platform) */ PUBLIC BOOL HTLibTerminate (void) { HTTRACE(CORE_TRACE, "WWWLibTerm.. Cleaning up LIBRARY OF COMMON CODE\n"); HTNet_killAll(); HTHost_deleteAll(); /* Delete remaining hosts */ HTChannel_deleteAll(); /* Delete remaining channels */ HT_FREE(HTAppName); /* Freed thanks to Wade Ogden <wade@ebt.com> */ HT_FREE(HTAppVersion); HTAtom_deleteAll(); /* Remove the atoms */ HTDNS_deleteAll(); /* Remove the DNS host cache */ HTAnchor_deleteAll(NULL); /* Delete anchors and drop hyperdocs */ HTProtocol_deleteAll(); /* Remove bindings between access and protocols */ HTUserProfile_delete(UserProfile); /* Free our default User profile */ HTUTree_deleteAll(); /* Delete all URL Trees */ initialized = NO; return YES; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLib.html�����������������������������������������������������������������������0100644�0000764�0000144�00000006745�07133046031�015605� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Initialization</TITLE> </HEAD> <BODY> <H1> Libwww Initialization </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module contains some generic functions for getting the name and version of libwww. It also contains some global configuration options like if you can access the local file system, for example. <P> This module is implemented by <A HREF="HTLib.c">HTLib.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTLIB_H #define HTLIB_H #include "<A HREF="HTUser.html">HTUser.h</A>" </PRE> <H2> Initializing and Terminating libwww </H2> <P> These two functions initialize memory and settings for the libwww core and cleans up memory kept by libwww core when exiting the application. They &nbsp;MUST be used as libwww otherwise is in a undefined state. <PRE>extern BOOL HTLibInit (const char * AppName, const char * AppVersion); extern BOOL HTLibTerminate (void); </PRE> <H2> Libwww Name and Version </H2> <P> You can get the generic name of the Library and the version by using the following functions: <PRE>extern const char * HTLib_name (void); extern const char * HTLib_version (void); </PRE> <H2> Is libwww Initalized? </H2> <P> Returns YES or NO <PRE>extern BOOL HTLib_isInitialized (void); </PRE> <H2> Application Name and Version </H2> <P> Returns the name of the application name and the version number. The name and version SHOULD be short and to the point. They MUST NOT be used for advertising or other non-essential information. Although any token character MAY appear in a product-version, this token SHOULD only be used for a version identifier. <H3> Set or get the application name </H3> <P> The name can not contain any spaces as it is used as part of the user agent field. For the same reason, the string MUST be in US-ASCII. For example, "<B>SmartApp</B>" <PRE> extern const char * HTLib_appName (void); extern BOOL HTLib_setAppName (const char * name); </PRE> <H3> Set or get the application version </H3> <P> The version token can not contain any spaces as it is used as part of the user agent field. For the same reason, the string MUST be in US-ASCII. For example, "<B>1.0</B>". <PRE> extern const char * HTLib_appVersion (void); extern BOOL HTLib_setAppVersion (const char * version); </PRE> <H2> <A NAME="Secure">Accessing the Local File System</A> </H2> <P> Libwww does normally use the local file system for dumping unknown data objects, file cache etc. In some situations this is not desired, and we can therefore turn it off. This mode also prevents you from being able to access other resources where you have to login telnet, for example. <PRE>extern BOOL HTLib_secure (void); extern void HTLib_setSecure (BOOL mode); </PRE> <H2> Default User Profile </H2> <P> The default <A HREF="HTUser.html">user profile</A> is automatically created by the libwww in order to get information about the <I>hostname</I>, default <I>email -address </I>etc. All <A HREF="HTReq.html">request objects</A> will be created with this default user profile. The application may assign individual user profiles to every request object or may set the default user profile. <PRE>extern HTUserProfile * HTLib_userProfile (void); extern BOOL HTLib_setUserProfile (HTUserProfile * up); </PRE> <PRE> #endif /* HTLIB_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTLib.html,v 2.7 2025/07/12 10:44:41 kahan Exp $ </ADDRESS> </BODY></HTML> ���������������������������libwww/Library/src/HTLink.c�������������������������������������������������������������������������0100644�0000764�0000144�00000015423�06667051626�015264� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** HYPERTEXT LINK CLASS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTLink.c,v 2.4 2025/03/02 21:09:42 frystyk Exp $ ** ** An anchor represents a region of a hypertext document which is ** linked to another anchor in the same or a different document. ** ** History ** Nov 1990 Written in Objective-C for the NeXT browser (TBL) ** 24-Oct-1991 (JFG), written in C, browser-independant ** 21-Nov-1991 (JFG), first complete version ** 3-May-1995 (HF), Added a lot of methods and other stuff made an object ** HF - moved all Link stuff to HTLink */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTFormat.h" #include "HTParse.h" #include "HTMethod.h" #include "HTAncMan.h" #include "HTLink.h" /* Implemented here */ /* ------------------------------------------------------------------------- */ PUBLIC HTLink * HTLink_new (void) { HTLink * link; if ((link = (HTLink *) HT_CALLOC(1, sizeof (HTLink))) == NULL) HT_OUTOFMEM("HTLink_new"); return link; } PUBLIC BOOL HTLink_delete (HTLink * me) { HT_FREE(me); return YES; } /* Link me Anchor to another given one ** ------------------------------------- */ PUBLIC BOOL HTLink_add (HTAnchor * source, HTAnchor * destination, HTLinkType type, HTMethod method) { if (source && destination) { HTTRACE(ANCH_TRACE, "Link create. from anchor %p to %p with type %s, method %s\n" _ (void *) source _ (void *) destination _ type ? HTAtom_name(type) : "NONE" _ method != METHOD_INVALID ? HTMethod_name(method) : "NONE"); if (!source->mainLink.dest) { source->mainLink.dest = destination; source->mainLink.type = type; source->mainLink.method = method; } else { HTLink * newLink = HTLink_new(); newLink->dest = destination; newLink->type = type; newLink->method = method; if (!source->links) source->links = HTList_new(); HTList_addObject (source->links, newLink); } if (!destination->parent->sources) destination->parent->sources = HTList_new(); HTList_addObject (destination->parent->sources, source); return YES; } else HTTRACE(ANCH_TRACE, "Link........ Bad argument\n"); return NO; } /* ** Removes link information from one anchor to another. ** Returns YES if OK, else NO */ PUBLIC BOOL HTLink_remove (HTAnchor * source, HTAnchor * destination) { if (!source || !destination) return NO; HTTRACE(ANCH_TRACE, "Link delete. from anchor %p to anchor %p\n" _ (void *) source _ (void *) destination); /* Remove if dest is the main link */ if (source->mainLink.dest == destination) { source->mainLink.dest = NULL; source->mainLink.type = NULL; source->mainLink.method = METHOD_INVALID; source->mainLink.result = HT_LINK_INVALID; return YES; } /* Remove link information for other links */ if (source->links) { HTList *cur = source->links; HTLink *pres; while ((pres = (HTLink *) HTList_nextObject(cur))) { if (pres->dest == destination) { HTList_removeObject(source->links, pres); HT_FREE(pres); return YES; } } } return NO; } /* ** Removes all link information ** Returns YES if OK, else NO */ PUBLIC BOOL HTLink_removeAll (HTAnchor * me) { if (!me) return NO; HTTRACE(ANCH_TRACE, "Link delete. from anchor %p\n" _ (void *) me); /* Remove if dest is the main link */ me->mainLink.dest = NULL; me->mainLink.type = NULL; me->mainLink.method = METHOD_INVALID; me->mainLink.result = HT_LINK_INVALID; /* Remove link information for other links */ if (me->links) { HTList *cur = me->links; HTLink *pres; while ((pres = (HTLink *) HTList_nextObject(cur))) HT_FREE(pres); HTList_delete(me->links); me->links = NULL; } return YES; } /* ** Moves all link information from one anchor to another. ** This is used in redirection etc. ** Returns YES if OK, else NO */ PUBLIC BOOL HTLink_moveAll (HTAnchor * src, HTAnchor * dest) { if (!src || !dest) return NO; HTTRACE(ANCH_TRACE, "Link move... all from anchor %p to anchor %p\n" _ (void *) src _ (void *) dest); /* Move main link information */ dest->mainLink.dest = src->mainLink.dest; dest->mainLink.type = src->mainLink.type; dest->mainLink.method = src->mainLink.method; dest->mainLink.result = src->mainLink.result; src->mainLink.dest = NULL; src->mainLink.type = NULL; src->mainLink.method = METHOD_INVALID; src->mainLink.result = HT_LINK_INVALID; /* Move link information for other links */ if (dest->links) { HTList *cur = dest->links; HTLink *pres; while ((pres = (HTLink *) HTList_nextObject(cur))) HT_FREE(pres); HTList_delete(dest->links); } dest->links = src->links; src->links = NULL; return YES; } /* ** Find the anchor object between a destination and a source ancher. ** Return link object if any, else NULL */ PUBLIC HTLink * HTLink_find (HTAnchor * src, HTAnchor * dest) { if (src && dest) { if (src->mainLink.dest == dest) return &(src->mainLink); if (src->links) { HTList *cur = src->links; HTLink *pres; while ((pres = (HTLink *) HTList_nextObject(cur)) != NULL) { if (pres->dest == dest) return pres; } } } return NULL; } /* ** Returns a link with a given link type or NULL if nothing found */ PUBLIC HTLink * HTLink_findType (HTAnchor * me, HTLinkType type) { if (me) { HTLink * link = HTAnchor_mainLink(me); HTList * sublinks = HTAnchor_subLinks(me); if (link && link->type==type) return link; else if (sublinks) { while ((link = (HTLink *) HTList_nextObject (sublinks))) if (link->type == type) return link; } } return NULL; } /* ** Link destinations */ PUBLIC BOOL HTLink_setDestination (HTLink * link, HTAnchor * dest) { if (link) { link->dest = dest; return YES; } return NO; } PUBLIC HTAnchor * HTLink_destination (HTLink * link) { return link ? link->dest : NULL; } PUBLIC BOOL HTLink_setType (HTLink * link, HTLinkType type) { if (link) { link->type = type; return YES; } return NO; } PUBLIC HTLinkType HTLink_type (HTLink * link) { return link ? link->type : NULL; } /* ** When a link has been used for posting an object from a source to a ** destination link, the result of the operation is stored as part of the ** link information. */ PUBLIC BOOL HTLink_setResult (HTLink * link, HTLinkResult result) { if (link) { link->result = result; return YES; } return NO; } PUBLIC HTLinkResult HTLink_result (HTLink * link) { return link ? link->result : HT_LINK_INVALID; } PUBLIC BOOL HTLink_setMethod (HTLink * link, HTMethod method) { if (link) { link->method = method; return YES; } return NO; } PUBLIC HTMethod HTLink_method (HTLink * link) { return link ? link->method : METHOD_INVALID; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLink.html����������������������������������������������������������������������0100644�0000764�0000144�00000013606�06677720620�016005� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <!-- Changed by: Henrik Frystyk Nielsen, 30-Jun-1996 --> <title>W3C Sample Code Library libwww Link Class</title> </head> <body> <h1>The Link Class</h1> <pre>/* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */</pre> <p>The <a href="HTLink.html">HTLink class</a> represents links between <a href="HTAnchor.html">anchor objects</a>. By keeping the link as a object and not as part of the anchor we are capable of handling link semantics in a much more organized way. For example, we can then search for link types among all the link objects that we have created. <a href="HTAnchor.html">Anchor objects</a> are bound together using Link objects. Each anchor can be the source or destination of zero, one, or more links from and to other anchors.</p> <p>Link information can come from many places - two classic examples are the HTML <code>LINK</code> element and the HTTP <code>Link</code> header field. Libwww supports both - the HTML <code>LINK</code> element is handled by the <a href="HTML.html">HTML parser</a> and the HTTP <code>Link</code> header field is handled by the <a href="HTMIMImp.html">MIME parser</a>.</p> <p>The <a href="/">Webbot</a> uses the link class to maintain the information of the Web that it is seeing when traversing the Web as a robot.</p> <p>This module is implemented by <a href="HTLink.c">HTLink.c</a>, and it is a part of the <a href="http://www.w3.org/Library/"> W3C Sample Code Library</a>.</p> <pre>#ifndef HTLINK_H #define HTLINK_H typedef struct _HTLink HTLink; #include "WWWUtil.h" #include "HTMethod.h" #include "HTAnchor.h"</pre> <h2>Creation and Deletion Methods</h2> <p>These are the methods for crating and deleting new link objects</p> <h3>Create a new Link Object</h3> <pre>typedef HTAtom * HTLinkType; typedef enum _HTLinkResult { HT_LINK_INVALID = -1, HT_LINK_NONE = 0, HT_LINK_ERROR, HT_LINK_OK } HTLinkResult; struct _HTLink { HTAnchor * dest; /* The anchor to which this leads */ HTLinkType type; /* Semantics of this link */ HTMethod method; /* Method for this link, e.g. PUT */ HTLinkResult result; /* Result of any attempt to get this link */ }; HTLink * HTLink_new (void);</pre> <h3>Delete a Link Object</h3> <p>A link can be removed as any other object</p> <pre>BOOL HTLink_delete (HTLink * link);</pre> <h3>Remove All Link Information from an Anchor</h3> <p>This is normally a part of deleting anchor objects.</p> <pre>extern BOOL HTLink_removeAll (HTAnchor * me);</pre> <h2>Predefined Link Types</h2> <p>Just for ease of use, we define a seet of commonly used link types. You can ofcourse use any other link type you want.</p> <pre>#define HT_LR_PERM_REDIRECT HTAtom_for("PERMANENT_REDIRECTION") #define HT_LR_TEMP_REDIRECT HTAtom_for("TEMPORARY_REDIRECTION") #define HT_LR_SEE_OTHER HTAtom_for("SEE_OTHER")</pre> <h2>Handle Link Between Anchors</h2> <p>As mentioned, link objects are the ones that bind anchor objects together in a Web like structure</p> <h3>Add a Link between two Anchors</h3> <p>This method creates a new link between two <a href="HTAnchor.html">anchor objects</a>.</p> <pre>extern BOOL HTLink_add ( HTAnchor * source, HTAnchor * destination, HTLinkType type, HTMethod method);</pre> <h3>Remove All Links Between two Anchors</h3> <p>Removes link information from one anchor to another.</p> <pre>extern BOOL HTLink_remove ( HTAnchor * source, HTAnchor * destination);</pre> <h3>Find a Link</h3> <p>Find the anchor object between a destination and a source ancher. Return link object if any, else NULL</p> <pre>extern HTLink * HTLink_find (HTAnchor * source, HTAnchor * destination);</pre> <h3>Find a Link with a given link type</h3> <p>Returns a link with a given link type or NULL if nothing found</p> <pre>extern HTLink * HTLink_findType (HTAnchor * me, HTLinkType type);</pre> <h2>Link Information</h2> <p>This is the set of methods for accessing the information carried by a link object</p> <h3>Link Destination</h3> <p>The link destination is the destination anchor pointed to by the link.</p> <pre>extern BOOL HTLink_setDestination (HTLink * link, HTAnchor * dest); extern HTAnchor * HTLink_destination (HTLink * link);</pre> <h3>Link Types and Semantic Links</h3> <p>Each link has a sematic representation associated with it. This means that the application can distinguish between pages based on the semantics of the link. This is very similar to the <code>LINK</code> tag in HTML pages which indicates the meaning if this pages to other pages.</p> <pre>extern BOOL HTLink_setType (HTLink * link, HTLinkType type); extern HTLinkType HTLink_type (HTLink * link);</pre> <h3>Link Method</h3> <p>The link method is the HTTP method we have performed between the two links. For example, it can be a POST operation, or a PUT operation where the operation on the first anchor created a new anchor.</p> <pre>extern BOOL HTLink_setMethod (HTLink * link, HTMethod method); extern HTMethod HTLink_method (HTLink * link);</pre> <h3>Link Result</h3> <p>When a link has been used for posting an object from a source to a destination link, the result of the operation is stored as part of the link information. This means that we can keep track of which operations we have performed on a link and hence the application can ask the user whether he or she wants to do a re-post, for example.</p> <pre>extern BOOL HTLink_setResult (HTLink * link, HTLinkResult result); extern HTLinkResult HTLink_result (HTLink * link);</pre> <pre>#endif /* HTLINK_H */</pre> <p></p> <hr> <address> @(#) $Id: HTLink.html,v 2.6 2025/03/29 15:51:44 frystyk Exp $ </address> </body> </html> ��������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTList.c�������������������������������������������������������������������������0100644�0000764�0000144�00000014750�07122157274�015275� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTList.c ** MANAGEMENT OF LINKED LISTS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTList.c,v 2.33 2025/06/15 13:48:44 kahan Exp $ ** ** A list is represented as a sequence of linked nodes of type HTList. ** The first node is a header which contains no object. ** New nodes are inserted between the header and the rest of the list. */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTList.h" PUBLIC HTList * HTList_new (void) { HTList *newList; if ((newList = (HTList *) HT_CALLOC(1, sizeof (HTList))) == NULL) HT_OUTOFMEM("HTList_new"); newList->object = NULL; newList->next = NULL; return newList; } PUBLIC BOOL HTList_delete (HTList * me) { if (me) { HTList *current; while ((current = me)) { me = me->next; HT_FREE(current); } return YES; } return NO; } PUBLIC BOOL HTList_addObject (HTList * me, void * newObject) { if (me) { HTList *newNode; if ((newNode = (HTList *) HT_CALLOC(1, sizeof(HTList))) == NULL) HT_OUTOFMEM("HTList_addObject"); newNode->object = newObject; newNode->next = me->next; me->next = newNode; return YES; } else { HTTRACE(CORE_TRACE, "HTList...... Can not add object %p to nonexisting list\n" _ newObject); } return NO; } PUBLIC BOOL HTList_appendObject (HTList * me, void * newObject) { if (me) { while (me->next) me = me->next; return HTList_addObject(me, newObject); } return NO; } PUBLIC BOOL HTList_removeObject (HTList * me, void * oldObject) { if (me) { HTList *previous; while (me->next) { previous = me; me = me->next; if (me->object == oldObject) { previous->next = me->next; HT_FREE(me); return YES; /* Success */ } } } return NO; /* object not found or NULL list */ } PUBLIC HTList * HTList_addList (HTList * me, void * newObject) { if (me) { HTList *newNode; if ((newNode = (HTList *) HT_CALLOC(1, sizeof(HTList))) == NULL) HT_OUTOFMEM("HTList_addObject"); newNode->object = newObject; newNode->next = me->next; me->next = newNode; return newNode; } else { HTTRACE(CORE_TRACE, "HTList...... Can not add object %p to nonexisting List\n" _ newObject); } return (HTList *) NULL; } PUBLIC HTList * HTList_appendList (HTList * me, void *newObject) { if (me) { while (me->next) me = me->next; return HTList_addList(me, newObject); } return (HTList *) NULL; } PUBLIC BOOL HTList_quickRemoveElement (HTList * me, HTList * last) { if (me && last) { last->next = me->next; HT_FREE(me); return YES; /* Success */ } return NO; /* object not found or NULL list */ } PUBLIC BOOL HTList_removeObjectAll (HTList * me, void * oldObject) { BOOL found = NO; if (me) { HTList* i; while ((i = me->next)) { if (i->object == oldObject) { me->next = i->next; HT_FREE(i); found = YES; /* At least one object found */ } else { me = i; } } } return found; } PUBLIC void * HTList_removeLastObject (HTList * me) { if (me && me->next) { HTList *lastNode = me->next; void * lastObject = lastNode->object; me->next = lastNode->next; HT_FREE(lastNode); return lastObject; } else /* Empty list */ return NULL; } PUBLIC void * HTList_removeFirstObject (HTList * me) { if (me && me->next) { HTList * prevNode; void *firstObject; while (me->next) { prevNode = me; me = me->next; } firstObject = me->object; prevNode->next = NULL; HT_FREE(me); return firstObject; } else /* Empty list */ return NULL; } PUBLIC void * HTList_firstObject (HTList * me) { if (me && me->next) { HTList * prevNode; while (me->next) { prevNode = me; me = me->next; } return me->object; } else /* Empty list */ return NULL; } PUBLIC int HTList_count (HTList * me) { int count = 0; if (me) while ((me = me->next)) count++; return count; } PUBLIC int HTList_indexOf (HTList * me, void * object) { if (me) { int position = 0; while ((me = me->next)) { if (me->object == object) return position; position++; } } return -1; } PUBLIC int HTList_indexOfElement (HTList * me, HTList * element) { if (me) { int position = 0; if (me == element) return -1; while ((me = me->next)) { if (me == element) return position; position++; } } return -2; } PUBLIC HTList * HTList_elementOf (HTList * cur, void * object, HTList ** pLast) { HTList * last = cur; void * pres; while ((pres = HTList_nextObject(cur))) { if (pres == object) { if (pLast) *pLast = last; return cur; } last = cur; } /* ** didn't find object, but return end of list so it is easy to append */ if (pLast) *pLast = last; return NULL; } PUBLIC void * HTList_objectAt (HTList * me, int position) { if (position < 0) return NULL; if (me) { while ((me = me->next)) { if (position == 0) return me->object; position--; } } return NULL; /* Reached the end of the list */ } PUBLIC void * HTList_removeObjectAt (HTList * me, int position) { if (position < 0) return NULL; if (me) { HTList * prevNode; prevNode = me; while ((me = me->next)) { if (position == 0) { prevNode->next = me->next; return me->object; } prevNode = me; position--; } } return NULL; /* Reached the end of the list */ } /* ** Do an insertion sort algorithm on the list. An empty list is already ** sorted and so is a single element list. */ PUBLIC BOOL HTList_insertionSort (HTList * head, HTComparer * comp) { HTList *tail, *q, *r, *p; if (head && head->next && comp) { tail = head->next; while (tail->next) { q = tail->next; /* ** Depending on the return status of the comparer we either move ** the sentinel down the list or search the sorted sublist to ** insert it. */ if (comp(q->object, head->next->object) >= 0) { tail->next = q->next; q->next = head->next; head->next = q; } else { r = head->next; p = r->next; while (comp(q->object, p->object) < 0) { r = p; p = r->next; } /* ** If sentinel was found then q is already in right place. ** Otherwise we'll have to move it */ if (q == p) tail = q; else { tail->next = q->next; q->next = p; r->next = q; } } } return YES; } else { HTTRACE(CORE_TRACE, "List........ Empty list or no sort algorithm\n"); } return NO; } ������������������������libwww/Library/src/HTList.html����������������������������������������������������������������������0100644�0000764�0000144�00000011233�07122157274�016010� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 2-Jul-1996 --> <TITLE>W3C Sample Code Library libwww List Class</TITLE> </HEAD> <BODY> <H1> The List Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The list class defines a generic container for storing collections of things in order. In principle it could be implemented in many ways, but in practice knowing that it is a linked list is important for speed. <P> This module is implemented by <A HREF="HTList.c">HTList.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTLIST_H #define HTLIST_H #include "HTArray.h" typedef struct _HTList HTList; struct _HTList { void * object; HTList * next; }; </PRE> <H2> Creation and Deletion Methods </H2> <P> These two functions create and deletes a list <PRE> extern HTList * HTList_new (void); extern BOOL HTList_delete (HTList *me); </PRE> <H2> Add an Element to List </H2> <P> A new list element is added to the beginning of the list so that it is first element just after the head element. <PRE>extern BOOL HTList_addObject (HTList *me, void *newObject); </PRE> <P> <A NAME="appendObject"></A> You can also append an element to the end of the list (the end is the first entered object) by using the following function: <PRE> extern BOOL HTList_appendObject (HTList * me, void * newObject); </PRE> <P>The following two functions, contributed by Vic Bancroft (bancroft@america.net) that do the same operation as above, but return a pointer to the new HTList element that was added or appended. This allows one to keep a reference to the end of the list outside of the list itself, which can be used to speed up certain list operations. <PRE> extern HTList * HTList_addList (HTList * me, void * newObject); extern HTList * HTList_appendList (HTList * me, void * newObject); </PRE> <H2> Remove List Elements </H2> <P> You can delete elements in a list using the following methods. The first method only removes the first entry that it finds matching the <CODE>oldObject</CODE> whereas the second method removes all occurances of <CODE>oldObject</CODE>. <PRE> extern BOOL HTList_removeObject (HTList * me, void * oldObject); extern BOOL HTList_quickRemoveElement (HTList * me, HTList * last); extern BOOL HTList_removeObjectAll (HTList * me, void * oldObject); extern void * HTList_removeLastObject (HTList * me); extern void * HTList_removeFirstObject (HTList * me); </PRE> <H2> Size of a List </H2> <P> Two small function to ask for the size <PRE> #define HTList_isEmpty(me) (me ? me-&gt;next == NULL : YES) extern int HTList_count (HTList *me); </PRE> <H2> Reference List Elements By Index </H2> <P> In some situations is is required to use an index in order to refer to a list element. This is for example the case if an element can be registered multiple times. <PRE> extern int HTList_indexOf (HTList * me, void * object); extern int HTList_indexOfElement (HTList * me, HTList * element); extern void * HTList_objectAt (HTList * me, int position); extern HTList * HTList_elementOf (HTList * me, void * object, HTList ** pLast); #define HTList_objectOf(me) (me ? me-&gt;object: NULL) </PRE> <H2> Find List Elements </H2> <P> This method returns the <I>last</I> element to the list or NULL if list is empty <PRE> #define HTList_lastObject(me) \ ((me) && (me)-&gt;next ? (me)-&gt;next-&gt;object : NULL) </PRE> <P> This method returns the <I>first</I> element to the list or NULL if list is empty <PRE>extern void * HTList_firstObject (HTList * me); </PRE> <H2> Traverse list </H2> <P> Fast macro to traverse the list. Call it first with copy of list header: it returns the first object and increments the passed list pointer. Call it with the same variable until it returns NULL. <PRE> #define HTList_nextObject(me) \ ((me) && ((me) = (me)-&gt;next) ? (me)-&gt;object : NULL) </PRE> <H2> Insertion Sort a List </H2> <P> This function sorts a list using the insertion sort mechanism. The comparison function is passed as a parameter and you can &nbsp;find the definition of <CODE>HTComparer</CODE> in the <A HREF="HTArray.html">HTArray</A> module. Insertion sort is good method whenever a list is nearly in the correct order and few items are many positions away from their sorted location. If the list gets very long then you may wanna use a quicksort instead. <PRE>extern BOOL HTList_insertionSort(HTList * list, HTComparer * comp); </PRE> <H2> Free list </H2> <PRE> #define HTList_free(x) HT_FREE(x) #endif /* HTLIST_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTList.html,v 2.34 2025/06/15 13:48:44 kahan Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLocal.c������������������������������������������������������������������������0100644�0000764�0000144�00000010077�06672616535�015423� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTLocal.c ** LOCAL FILE HANDLING ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTLocal.c,v 2.13 2025/03/14 02:22:21 frystyk Exp $ ** ** History: ** HFN: Written */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTLocal.h" /* Implemented here */ /* ------------------------------------------------------------------------- */ /* ** Opens a local file usien whatever means are available on the current ** platform. If we have unix file descriptors then use that as we can use ** select on them. Otherwise use ANSI C file descriptors. ** ** returns HT_ERROR Error has occured or interrupted ** HT_OK if connected ** HT_WOULD_BLOCK if operation would have blocked */ PUBLIC int HTFileOpen (HTNet * net, char * local, HTLocalMode mode) { HTRequest * request = HTNet_request(net); HTHost * host = HTNet_host(net); #ifdef NO_UNIX_IO FILE * fp = NULL; #else SOCKET sockfd = INVSOC; #endif /* NO_UNIX_IO */ #ifndef NO_UNIX_IO int status = -1; /* JTD:5/30/96 - must init status to -1 */ if ((sockfd = open(local, mode)) == -1) { HTRequest_addSystemError(request, ERR_FATAL, errno, NO, "open"); return HT_ERROR; } /* If non-blocking protocol then change socket status ** I use fcntl() so that I can ask the status before I set it. ** See W. Richard Stevens (Advan. Prog. in UNIX env, p.364) ** Be CAREFULL with the old `O_NDELAY' - it wont work as read() ** returns 0 when blocking and NOT -1. FNDELAY is ONLY for BSD ** and does NOT work on SVR4 systems. O_NONBLOCK is POSIX. */ if (!HTNet_preemptive(net)) { #ifdef HAVE_FCNTL if ((status = fcntl(sockfd, F_GETFL, 0)) != -1) { #ifdef O_NONBLOCK status |= O_NONBLOCK;/* POSIX */ #else #ifdef F_NDELAY status |= F_NDELAY; /* BSD */ #endif /* F_NDELAY */ #endif /* O_NONBLOCK */ status = fcntl(sockfd, F_SETFL, status); } #endif /* HAVE_FCNTL */ HTTRACE(PROT_TRACE, "HTFileOpen.. `%s\' opened %d as %sblocking socket\n" _ local _ sockfd _ status == -1 ? "" : "NON-"); } /* #endif - HAVE_FCNTL <- wrong location, moved up JTD:5/30/96 */ #else /* !NO_UNIX_IO */ #ifdef VMS if ((fp = fopen(local, mode,"shr=put","shr=upd")) == NULL) { HTRequest_addSystemError(request, ERR_FATAL, errno, NO, "fopen"); return HT_ERROR; } #else if ((fp = fopen(local, mode)) == NULL) { HTRequest_addSystemError(request, ERR_FATAL, errno, NO, "fopen"); return HT_ERROR; } #endif /* VMS */ HTTRACE(PROT_TRACE, "HTDoOpen.... `%s\' opened using FILE %p\n" _ local _ fp); #endif /* !NO_UNIX_IO */ /* ** Associate the channel with the host and create ** an input and and output stream */ #ifdef NO_UNIX_IO HTHost_setChannel(host, HTChannel_new(INVSOC, fp, YES)); #else HTHost_setChannel(host, HTChannel_new(sockfd, NULL, YES)); #endif /* NO_UNIX_IO */ HTHost_getInput(host, HTNet_transport(net), NULL, 0); HTHost_getOutput(host, HTNet_transport(net), NULL, 0); return HT_OK; } /* ** Closes a file descriptor whatever means are available on the current ** platform. If we have unix file descriptors then use this otherwise use ** the ANSI C file descriptors ** ** returns HT_ERROR Error has occured or interrupted ** HT_OK if connected ** HT_WOULD_BLOCK if operation would have blocked */ PUBLIC int HTFileClose (HTNet * net) { HTHost * host = HTNet_host(net); HTChannel * ch = HTHost_channel(host); int status = -1; if (net && ch) { #ifdef NO_UNIX_IO FILE * fp = HTChannel_file(ch); if (fp) { HTTRACE(PROT_TRACE, "Closing..... ANSI file %p\n" _ fp); status = fclose(fp); HTChannel_setFile(ch, NULL); } #else SOCKET sockfd = HTChannel_socket(ch); if (sockfd != INVSOC) { HTTRACE(PROT_TRACE, "Closing..... fd %d\n" _ sockfd); status = NETCLOSE(sockfd); HTChannel_setSocket(ch, INVSOC); } #endif /* NO_UNIX_IO */ } return status < 0 ? HT_ERROR : HT_OK; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLocal.html���������������������������������������������������������������������0100644�0000764�0000144�00000004311�07056754157�016137� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 3-Apr-1996 --> <TITLE>W3C Sample Code Library libwww Local File Access</TITLE> </HEAD> <BODY> <H1> Local File Access </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module has the common code for opening and closing local files. <P> This module is implemented by <A HREF="HTTCP.c">HTTCP.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTLOCAL_H #define HTLOCAL_H #include "HTNet.h" </PRE> <H2> Mode of File </H2> <P> A file can be opened in variuos modes dependent on whether it is to be opened for reading or writing or both. We here define a set that is largely equivalent to what we know from ANSI C file modes and Unix file modes: <PRE> #ifndef NO_UNIX_IO typedef int HTLocalMode; #define HT_FB_RDONLY O_RDONLY #define HT_FT_RDONLY HT_FB_RDONLY #define HT_FB_WRONLY O_WRONLY|O_CREAT #define HT_FT_WRONLY HT_FB_WRONLY #define HT_FB_RDWR O_RDWR #define HT_FT_RDWR HT_FB_RDWR #define HT_FB_APPEND O_APPEND #define HT_FT_APPEND HT_FB_APPEND #else typedef const char *HTLocalMode; #define HT_FB_RDONLY "rb" #define HT_FT_RDONLY "r" #define HT_FB_WRONLY "wb" #define HT_FT_WRONLY "w" #define HT_FB_RDWR "r+b" #define HT_FT_RDWR "r+" #define HT_FB_APPEND "ab" #define HT_FT_APPEND "a" #endif </PRE> <H2> Open a Local File </H2> <P> Opens a local file using whatever means are available on the current platform. If we have unix file descriptors then use that as we can use select on them. On windows we want to use asynchrounous handles - just like we handle the socket interface as well. On other platforms, we use ANSI C file descriptors. <PRE> extern int HTFileOpen (HTNet * net, char * local, HTLocalMode mode); </PRE> <H2> Close a Local File </H2> <P> Closes a file descriptor whatever means are available on the current platform. If we have unix file descriptors then use this otherwise use the ANSI C file descriptors <PRE> extern int HTFileClose (HTNet * net); </PRE> <PRE> #endif /* HTLOCAL_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTLocal.html,v 2.6 2025/02/29 14:32:15 kahan Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLog.c��������������������������������������������������������������������������0100644�0000764�0000144�00000010730�06664352703�015101� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTLog.c ** LOGGING MODULE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTLog.c,v 2.24 2025/02/22 22:10:11 frystyk Exp $ ** ** This module contains a simple logging mechanism for requests. ** The user must open and close the log file!!! ** ** History: ** 01 May 95 Henrik Frystyk, frystyk@w3.org ** Bugs: ** ANSI file handling is not capable of handling simultanous writing ** from several processes at the same time in a multi-process environment */ /* Library include files */ #include "WWWLib.h" #include "HTLog.h" /* Implemented here */ struct _HTLog { FILE * fp; BOOL localtime; int accesses; }; /* ------------------------------------------------------------------------- */ /* Open a Logfile ** -------------- ** You can use either GMT or local time. If no filename is given, ** no log is kept. New log entries can be either appended to an existing ** file or overwriting an exsisting file. ** Returns YES if OK, NO on error */ PUBLIC HTLog * HTLog_open (const char * filename, BOOL local, BOOL append) { HTLog * log; if (!filename || !*filename) { HTTRACE(APP_TRACE, "Log......... No log file given\n"); return NULL; } if ((log = (HTLog *) HT_CALLOC(1, sizeof(HTLog))) == NULL) HT_OUTOFMEM("HTLog_open"); HTTRACE(APP_TRACE, "Log......... Open log file `%s\'\n" _ filename); log->fp = fopen(filename, append ? "a" : "w"); if (!log->fp) { HTTRACE(APP_TRACE, "Log......... Can't open log file `%s\'\n" _ filename); HT_FREE(log); return NULL; } log->localtime = local; return log; } /* Close the log file ** ------------------ ** Returns YES if OK, NO on error */ PUBLIC BOOL HTLog_close (HTLog * log) { if (log && log->fp) { int status; HTTRACE(APP_TRACE, "Log......... Closing log file %p\n" _ log->fp); status = fclose(log->fp); HT_FREE(log); return (status != EOF); } return NO; } PUBLIC int HTLog_accessCount (HTLog * log) { return log ? log->accesses : -1; } /* Add entry to the log file ** ------------------------- ** Format: <HOST> - - <DATE> <METHOD> <URI> <RESULT> <CONTENT_LENTGH> ** which is almost equivalent to Common Logformat. Permissions on UNIX ** are modified by umask. ** ** Returns YES if OK, NO on error ** ** BUG: No result code is produced :-( Should be taken from HTError.c */ PUBLIC BOOL HTLog_addCLF (HTLog * log, HTRequest * request, int status) { if (log && log->fp) { time_t now = time(NULL); HTParentAnchor * anchor = HTRequest_anchor(request); char * uri = HTAnchor_address((HTAnchor *) anchor); HTTRACE(APP_TRACE, "Log......... Writing CLF log\n"); fprintf(log->fp, "localhost - - [%s] %s %s %d %ld\n", HTDateTimeStr(&now, log->localtime), HTMethod_name(HTRequest_method(request)), uri ? uri : "<null>", /* Bill Rizzi */ abs(status), HTAnchor_length(anchor)); HT_FREE(uri); log->accesses++; return (fflush(log->fp) != EOF); /* Actually update it on disk */ } return NO; } /* Add entry to the referer log file ** --------------------------------- ** ** which is almost equivalent to Common Logformat. Permissions on UNIX ** are modified by umask. ** ** Returns YES if OK, NO on error */ PUBLIC BOOL HTLog_addReferer (HTLog * log, HTRequest * request, int status) { if (log && log->fp && request) { HTParentAnchor * parent_anchor = HTRequest_parent(request); if (parent_anchor) { char * me = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); char * parent = HTAnchor_address((HTAnchor *) parent_anchor); HTTRACE(APP_TRACE, "Log......... Writing Referer log\n"); if (me && parent && *parent) { fprintf(log->fp, "%s -> %s\n", parent, me); } HT_FREE(me); HT_FREE(parent); log->accesses++; return (fflush(log->fp) != EOF); /* Actually update it on disk */ } } return NO; } /* ** A generic logger - logs whatever you put in as the line. */ PUBLIC BOOL HTLog_addLine (HTLog * log, const char * line) { if (log && log->fp && line) { fprintf(log->fp, "%s\n", line); log->accesses++; return (fflush(log->fp) != EOF); /* Actually update it on disk */ } return NO; } /* ** A generic logger with variable arguments */ PUBLIC BOOL HTLog_addText (HTLog * log, const char * fmt, ...) { if (log && log->fp) { va_list pArgs; va_start(pArgs, fmt); #ifdef HAVE_VPRINTF log->accesses++; (vfprintf(log->fp, fmt, pArgs)); va_end(pArgs); #endif return (fflush(log->fp) != EOF); /* Actually update it on disk */ } return NO; } ����������������������������������������libwww/Library/src/HTLog.html�����������������������������������������������������������������������0100644�0000764�0000144�00000003766�06526451240�015627� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Log Class</TITLE> </HEAD> <BODY> <H1>Log Manager</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This is a generic log object which can be used to log events to a file.<P> This module is implemented by <A HREF="HTLog.c">HTLog.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTLIBLOG_H #define HTLIBLOG_H #include "HTReq.h" </PRE> <H2>Create a new Log Object</H2> Create a new object and open the log file. The time used in the log file is either GMT or local dependent on <CODE>local</CODE>. <PRE> typedef struct _HTLog HTLog; extern HTLog * HTLog_open (const char * filename, BOOL local, BOOL append); </PRE> <H2>Delete a Log Object</H2> Close the log file and delete the object <PRE> extern BOOL HTLog_close (HTLog * log); </PRE> <H2>How many times has log object been accessed?</h2> Returns access count number or -1 <PRE> extern int HTLog_accessCount (HTLog * log); </PRE> <H2>Log a Client Request in CLF</H2> This functions logs the result of a request in what's close to CLF. It can be used on client side to track user behavior. <PRE> extern BOOL HTLog_addCLF (HTLog * log, HTRequest * request, int status); </PRE> <H2>Log Referer Fields</H2> This functions logs the referer logs of where the user has been. <PRE> extern BOOL HTLog_addReferer (HTLog * log, HTRequest * request, int status); </PRE> <H2>Log the following line</H2> A generic logger - logs whatever you put in as the line. The caller is responsible for adding a line feed if desired. <PRE> extern BOOL HTLog_addLine (HTLog * log, const char * line); </PRE> <H2>Log the Following Variable Arguments</H2> A generic logger with variable arguments <PRE> extern BOOL HTLog_addText (HTLog * log, const char * fmt, ...); </PRE> <PRE> #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTLog.html,v 2.17 2025/05/14 02:10:40 frystyk Exp $ </ADDRESS> </BODY> </HTML> ����������libwww/Library/src/HTMIME.c�������������������������������������������������������������������������0100644�0000764�0000144�00000060256�07217441310�015103� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTMIME.c ** MIME MESSAGE PARSE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMIME.c,v 2.101 2025/12/18 17:00:56 kahan Exp $ ** ** This is RFC 1341-specific code. ** The input stream pushed into this parser is assumed to be ** stripped on CRs, ie lines end with LF, not CR LF. ** (It is easy to change this except for the body part where ** conversion can be slow.) ** ** History: ** Feb 92 Written Tim Berners-Lee, CERN ** 8 Jul 94 FM Insulate free() from _free structure element. ** 14 Mar 95 HFN Now using response for storing data. No more `\n', ** static buffers etc. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTReqMan.h" #include "HTNetMan.h" #include "HTHeader.h" #include "HTWWWStr.h" #ifndef NO_CACHE #include "HTTee.h" #include "HTConLen.h" #include "HTMerge.h" #include "WWWCache.h" #endif #include "HTMIME.h" /* Implemented here */ typedef enum _HTMIMEMode { HT_MIME_HEADER = 0x1, HT_MIME_FOOTER = 0x2, HT_MIME_PARTIAL = 0x4, HT_MIME_CONT = 0x8, HT_MIME_UPGRADE = 0x10 } HTMIMEMode; struct _HTStream { const HTStreamClass * isa; HTRequest * request; HTResponse * response; HTNet * net; HTStream * target; HTConverter * save_stream; HTFormat target_format; HTChunk * token; HTChunk * value; int hash; HTEOLState EOLstate; HTMIMEMode mode; BOOL transparent; BOOL haveToken; BOOL hasBody; }; PRIVATE HTConverter * LocalSaveStream = NULL; /* Where to save unknown stuff */ /* ------------------------------------------------------------------------- */ PRIVATE int pumpData (HTStream * me) { HTRequest * request = me->request; HTResponse * response = me->response; HTFormat format = HTResponse_format(response); HTList * te = HTResponse_transfer(response); HTList * ce = HTResponse_encoding(response); long length = HTResponse_length(response); HTStream * BlackHole = HTBlackHole(); BOOL savestream = NO; me->transparent = YES; /* Pump rest of data right through */ /* ** Cache the metainformation in the anchor object by copying ** it from the response object. This we do regardless if ** we have a persistent cache or not as the memory cache will ** use it as well. If we are updating a cache entry using ** byte ranges then we already have the metainformation and ** hence we can ignore the new one as it'd better be the same. */ if (!(me->mode & HT_MIME_PARTIAL) && HTResponse_isCachable(me->response) != HT_NO_CACHE) HTAnchor_update(HTRequest_anchor(request), me->response); /* ** If we asked only to read the header or footer or we used a HEAD ** method then we stop here as we don't expect any body part. */ if (me->mode & (HT_MIME_HEADER | HT_MIME_FOOTER) || HTRequest_method(request) == METHOD_HEAD) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_DONE); if (cbf) (*cbf)(request, HT_PROG_DONE, HT_MSG_NULL, NULL, NULL, NULL); return HT_LOADED; } /* ** If we are paring a 1xx response then return HT_CONTINUE */ if (me->mode & HT_MIME_CONT) return HT_CONTINUE; /* ** If we get a 101 Protocol Switch then we are done here ** but not done with the response (which we don't know ** how to go about parsing */ if (me->mode & HT_MIME_UPGRADE) { me->hasBody = YES; return HT_OK; } /* ** If there is no content-length, no transfer encoding and no ** content type then we assume that there is no body part in ** the message and we can return HT_LOADED */ { HTHost * host = HTNet_host(me->net); if (length<0 && te==NULL && HTHost_isPersistent(host) && !HTHost_closeNotification(host)) { if (format != WWW_UNKNOWN) { HTTRACE(STREAM_TRACE, "MIME Parser. BAD - there seems to be a body but no length. This must be an HTTP/1.0 server pretending that it is HTTP/1.1\n"); HTHost_setCloseNotification(host, YES); } else { HTAlertCallback * cbf = HTAlert_find(HT_PROG_DONE); if (cbf) (*cbf)(request, HT_PROG_DONE, HT_MSG_NULL, NULL, NULL, NULL); HTTRACE(STREAM_TRACE, "MIME Parser. No body in this message\n"); return HT_LOADED; } } } /* ** Deal with the body */ me->hasBody = YES; /* ** Handle any Content Type */ if (!(me->mode & HT_MIME_PARTIAL) && (format != WWW_UNKNOWN || length > 0 || te)) { HTStream * target; HTTRACE(STREAM_TRACE, "Building.... C-T stack from %s to %s\n" _ HTAtom_name(format) _ HTAtom_name(me->target_format)); if ((target = HTStreamStack(format, me->target_format, me->target, request, YES))==BlackHole) { if (!savestream) { if (me->target) (*me->target->isa->abort)(me->target, NULL); me->target = me->save_stream(request, NULL, format, me->target_format, me->target); savestream = YES; } } else me->target = target; } /* ** Handle any Content Encodings */ HTTRACE(STREAM_TRACE, "Building.... Content-Decoding stack\n"); if (ce) { HTStream * target = HTContentDecodingStack(ce, me->target, request, NULL); if (target == BlackHole) { if (!savestream) { if (me->target) (*me->target->isa->abort)(me->target, NULL); me->target = me->save_stream(request, NULL, format, me->target_format, me->target); savestream = YES; } } else me->target = target; } /* ** Can we cache the data object? If so then create a T stream and hook it ** into the stream pipe. We do it before the transfer decoding so that we ** don't have to deal with that when we retrieve the object from cache. ** If we are appending to a cache entry then use a different stream than ** if creating a new entry. */ #ifndef NO_CACHE if (HTCacheMode_enabled()) { if (me->mode & HT_MIME_PARTIAL) { HTStream * append = HTStreamStack(WWW_CACHE_APPEND, me->target_format, me->target, request, NO); if (append) me->target = HTTee(me->target, append, NULL); #if 0 /* @@ JK: change */ if (append) me->target = append; #endif } else if (HTResponse_isCachable(me->response) == HT_CACHE_ALL) { HTStream * cache = HTStreamStack(WWW_CACHE, me->target_format, me->target, request, NO); if (cache) me->target = HTTee(me->target, cache, NULL); } } #endif /* ** Handle any Transfer Encodings */ HTTRACE(STREAM_TRACE, "Building.... Transfer-Decoding stack\n"); if (te) { HTStream * target = HTTransferDecodingStack(te, me->target, request, NULL); if (target == BlackHole) { if (!savestream) { if (me->target) (*me->target->isa->abort)(me->target, NULL); me->target = me->save_stream(request, NULL, format, me->target_format, me->target); savestream = YES; } } else me->target = target; } /* ** If we for some reason couldn't find a target stream */ if (!me->target) me->target = HTBlackHole(); return HT_OK; } /* _dispatchParsers * call request's MIME header parser. Use global parser if no * appropriate one is found for request. */ PRIVATE int _dispatchParsers (HTRequest * req, char * token, char * value) { int status; BOOL found = NO; BOOL local = NO; HTMIMEParseSet * parseSet; /* In case we get an empty header consisting of a CRLF, we fall thru */ HTTRACE(STREAM_TRACE, "MIME header. %s: %s\n" _ token ? token : "<null>" _ value ? value : "<null>"); if (!token) return HT_OK; /* Ignore noop token */ /* ** Search the local set of MIME parsers */ if ((parseSet = HTRequest_MIMEParseSet(req, &local)) != NULL) { status = HTMIMEParseSet_dispatch(parseSet, req, token, value, &found); if (found) return status; } /* ** Search the global set of MIME parsers */ if (local==NO && (parseSet = HTHeader_MIMEParseSet()) != NULL) { status = HTMIMEParseSet_dispatch(parseSet, req, token, value, &found); if (found) return status; } return HT_OK; } /* _stream2dispatchParsers - extracts the arguments from a * MIME stream before calling the generic _dispatchParser * function. */ PRIVATE int _stream2dispatchParsers (HTStream * me) { char * token = HTChunk_data(me->token); char * value = HTChunk_data(me->value); /* In case we get an empty header consisting of a CRLF, we fall thru */ HTTRACE(STREAM_TRACE, "MIME header. %s: %s\n" _ token ? token : "<null>" _ value ? value : "<null>"); if (!token) return HT_OK; /* Ignore noop token */ /* ** Remember the original header */ HTResponse_addHeader(me->response, token, value); /* call the parsers to set the headers */ return (_dispatchParsers (me->request, token, value)); } /* ** Header is terminated by CRCR, LFLF, CRLFLF, CRLFCRLF ** Folding is either of CF LWS, LF LWS, CRLF LWS */ PRIVATE int HTMIME_put_block (HTStream * me, const char * b, int l) { const char * start = b; const char * end = start; const char * value = HTChunk_size(me->value) > 0 ? b : NULL; int length = l; int status; while (!me->transparent) { if (me->EOLstate == EOL_FCR) { if (*b == CR) /* End of header */ me->EOLstate = EOL_END; else if (*b == LF) /* CRLF */ me->EOLstate = EOL_FLF; else if (isspace((int) *b)) /* Folding: CR SP */ me->EOLstate = EOL_FOLD; else /* New line */ me->EOLstate = EOL_LINE; } else if (me->EOLstate == EOL_FLF) { if (*b == CR) /* LF CR or CR LF CR */ me->EOLstate = EOL_SCR; else if (*b == LF) /* End of header */ me->EOLstate = EOL_END; else if (isspace((int) *b)) /* Folding: LF SP or CR LF SP */ me->EOLstate = EOL_FOLD; else /* New line */ me->EOLstate = EOL_LINE; } else if (me->EOLstate == EOL_SCR) { if (*b==CR || *b==LF) /* End of header */ me->EOLstate = EOL_END; else if (isspace((int) *b)) /* Folding: LF CR SP or CR LF CR SP */ me->EOLstate = EOL_FOLD; else /* New line */ me->EOLstate = EOL_LINE; } else if (*b == CR) me->EOLstate = EOL_FCR; else if (*b == LF) me->EOLstate = EOL_FLF; /* Line found */ else { if (!me->haveToken) { if (*b == ':' || isspace((int) *b)) { HTChunk_putb(me->token, start, end-start); HTChunk_putc(me->token, '\0'); me->haveToken = YES; } else { unsigned char ch = *(unsigned char *) b; ch = TOLOWER(ch); me->hash = (me->hash * 3 + ch) % MIME_HASH_SIZE; } } else if (value == NULL && *b != ':' && !isspace((int) *b)) value = b; end++; } switch (me->EOLstate) { case EOL_LINE: case EOL_END: { int ret = HT_ERROR; HTChunk_putb(me->value, value, end-value); HTChunk_putc(me->value, '\0'); ret = _stream2dispatchParsers(me); HTNet_addBytesRead(me->net, b-start); start=b, end=b; if (me->EOLstate == EOL_END) { /* EOL_END */ if (ret == HT_OK) { b++, l--; ret = pumpData(me); HTNet_addBytesRead(me->net, 1); if (me->mode & (HT_MIME_FOOTER | HT_MIME_CONT)) { HTHost_setConsumed(HTNet_host(me->net), length - l); return ret; } else { HTNet_setHeaderBytesRead(me->net, HTNet_bytesRead(me->net)); } } } else { /* EOL_LINE */ HTChunk_truncate(me->token,0); HTChunk_truncate(me->value,0); me->haveToken = NO; me->hash = 0; value = NULL; } me->EOLstate = EOL_BEGIN; if (ret != HT_OK && ret != HT_LOADED) return ret; break; } case EOL_FOLD: me->EOLstate = EOL_BEGIN; if (!me->haveToken) { HTChunk_putb(me->token, start, end-start); HTChunk_putc(me->token, '\0'); me->haveToken = YES; } else if (value) { HTChunk_putb(me->value, value, end-value); HTChunk_putc(me->value, ' '); } start=b, end=b; break; default: b++, l--; if (!l) { BOOL stop = NO; if (!me->haveToken) { /* If empty header then prepare to stop */ if (end-start) HTChunk_putb(me->token, start, end-start); else stop = YES; } else if (value) HTChunk_putb(me->value, value, end-value); HTHost_setConsumed(HTNet_host(me->net), length - l); return stop ? pumpData(me) : HT_OK; } } } if (length != l) HTHost_setConsumed(HTNet_host(me->net), length - l); /* ** Put the rest down the stream without touching the data but make sure ** that we get the correct content length of data. If we have a CL in ** the headers then this stream is responsible for the accountance. */ if (me->hasBody) { HTNet * net = me->net; /* Check if CL at all - thanks to jwei@hal.com (John Wei) */ long cl = HTResponse_length(me->response); if (cl >= 0) { long bodyRead = HTNet_bytesRead(net) - HTNet_headerBytesRead(net); /* ** If we have more than we need then just take what belongs to us. */ if (bodyRead + l >= cl) { int consume = cl - bodyRead; if ((status = (*me->target->isa->put_block)(me->target, b, consume)) < 0) return status; else { HTAlertCallback * cbf = HTAlert_find(HT_PROG_DONE); HTNet_addBytesRead(net, consume); HTHost_setConsumed(HTNet_host(net), consume); if (cbf) (*cbf)(me->request, HT_PROG_DONE, HT_MSG_NULL, NULL, NULL, NULL); return HT_LOADED; } } else { if ((status = (*me->target->isa->put_block)(me->target, b, l)) < 0) return status; HTNet_addBytesRead(net, l); HTHost_setConsumed(HTNet_host(net), l); return status; } } return (*me->target->isa->put_block)(me->target, b, l); } else { HTAlertCallback * cbf = HTAlert_find(HT_PROG_DONE); if (cbf) (*cbf)(me->request, HT_PROG_DONE, HT_MSG_NULL, NULL, NULL, NULL); } return HT_LOADED; } /* Character handling ** ------------------ */ PRIVATE int HTMIME_put_character (HTStream * me, char c) { return HTMIME_put_block(me, &c, 1); } /* String handling ** --------------- */ PRIVATE int HTMIME_put_string (HTStream * me, const char * s) { return HTMIME_put_block(me, s, (int) strlen(s)); } /* Flush an stream object ** --------------------- */ PRIVATE int HTMIME_flush (HTStream * me) { return me->target ? (*me->target->isa->flush)(me->target) : HT_OK; } /* Free a stream object ** -------------------- */ PRIVATE int HTMIME_free (HTStream * me) { int status = HT_OK; if (!me->transparent) if (_stream2dispatchParsers(me) == HT_OK) pumpData(me); if (me->target) { if ((status = (*me->target->isa->_free)(me->target))==HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTTRACE(PROT_TRACE, "MIME........ FREEING....\n"); HTChunk_delete(me->token); HTChunk_delete(me->value); HT_FREE(me); return status; } /* End writing */ PRIVATE int HTMIME_abort (HTStream * me, HTList * e) { int status = HT_ERROR; if (me->target) status = (*me->target->isa->abort)(me->target, e); HTTRACE(PROT_TRACE, "MIME........ ABORTING...\n"); HTChunk_delete(me->token); HTChunk_delete(me->value); HT_FREE(me); return status; } /* Structured Object Class ** ----------------------- */ PRIVATE const HTStreamClass HTMIME = { "MIMEParser", HTMIME_flush, HTMIME_free, HTMIME_abort, HTMIME_put_character, HTMIME_put_string, HTMIME_put_block }; /* MIME header parser stream. ** ------------------------- ** This stream parses a complete MIME header and if a content type header ** is found then the stream stack is called. Any left over data is pumped ** right through the stream */ PUBLIC HTStream* HTMIMEConvert (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(* me))) == NULL) HT_OUTOFMEM("HTMIMEConvert"); me->isa = &HTMIME; me->request = request; me->response = HTRequest_response(request); me->net = HTRequest_net(request); me->target = output_stream; me->target_format = output_format; me->save_stream = LocalSaveStream ? LocalSaveStream : HTBlackHoleConverter; me->token = HTChunk_new(256); me->value = HTChunk_new(256); me->hash = 0; me->EOLstate = EOL_BEGIN; me->haveToken = NO; return me; } /* MIME header ONLY parser stream ** ------------------------------ ** This stream parses a complete MIME header and then returnes HT_PAUSE. ** It does not set up any streams and resting data stays in the buffer. ** This can be used if you only want to parse the headers before you ** decide what to do next. This is for example the case in a server app. */ PUBLIC HTStream * HTMIMEHeader (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = HTMIMEConvert(request, param, input_format, output_format, output_stream); me->mode |= HT_MIME_HEADER; return me; } PUBLIC HTStream * HTMIMEContinue (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = HTMIMEConvert(request, param, input_format, output_format, output_stream); me->mode |= HT_MIME_CONT; return me; } PUBLIC HTStream * HTMIMEUpgrade (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = HTMIMEConvert(request, param, input_format, output_format, output_stream); me->mode |= HT_MIME_UPGRADE; return me; } /* MIME footer ONLY parser stream ** ------------------------------ ** Parse only a footer, for example after a chunked encoding. */ PUBLIC HTStream * HTMIMEFooter (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = HTMIMEConvert(request, param, input_format, output_format, output_stream); me->mode |= HT_MIME_FOOTER; return me; } #ifndef NO_CACHE /* ** A small BEFORE filter that just finds a cache entry unconditionally ** and loads the entry. All freshness and any other constraints are ** ignored. */ PRIVATE int HTCacheLoadFilter (HTRequest * request, void * param, int mode) { HTParentAnchor * anchor = HTRequest_anchor(request); char * default_name; HTCache * cache; default_name = HTRequest_defaultPutName (request); cache = HTCache_find(anchor, default_name); HTTRACE(STREAM_TRACE, "Cache Load.. loading partial cache entry\n"); if (cache) { char * name = HTCache_name(cache); HTAnchor_setPhysical(anchor, name); HTCache_addHit(cache); HT_FREE(name); } return HT_OK; } /* ** A small AFTER filter that flushes the PIPE buffer so that we can ** get the rest of the data */ PRIVATE int HTCacheFlushFilter (HTRequest * request, HTResponse * response, void * param, int mode) { HTStream * pipe = (HTStream *) param; if (pipe) { HTTRACE(STREAM_TRACE, "Cache Flush. Flushing and freeing PIPE buffer\n"); (*pipe->isa->flush)(pipe); #if 0 /* @@ JK: flush converts the pipe to an open one, we shouldn't free it as we'll loose our references */ (*pipe->isa->_free)(pipe); #endif } /* ** We also delete the request obejct and stop more filters from being called. ** As this is our own request, it's OK to do that */ HTRequest_delete(request); return HT_ERROR; } #endif /* Partial Response MIME parser stream ** ----------------------------------- ** In case we sent a Range conditional GET we may get back a partial ** response. This response must be appended to the already existing ** cache entry before presented to the user. ** We do this by continuing to load the new object into a temporary ** buffer and at the same time start the cache load of the already ** existing object. When we have loaded the cache we merge the two ** buffers. */ PUBLIC HTStream * HTMIMEPartial (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { #ifndef NO_CACHE HTParentAnchor * anchor = HTRequest_anchor(request); HTFormat format = HTAnchor_format(anchor); HTStream * pipe = NULL; /* ** The merge stream is a place holder for where we can put data when it ** arrives. We have two feeds: one from the cache and one from the net. ** We call the stream stack already now to get the right output stream. ** We can do this as we already know the content type from when we got the ** first part of the object. */ HTStream * merge = HTMerge(HTStreamStack(format, output_format, output_stream, request, YES), 2); /* ** Now we create the MIME parser stream in partial data mode. We also ** set the target to our merge stream. */ HTStream * me = HTMIMEConvert(request, param, input_format, output_format, output_stream); me->mode |= HT_MIME_PARTIAL; me->target = merge; #if 0 /* JK: this doesn't work because this work is repeated before */ /* ** Create the cache append stream, and a Tee stream */ { HTStream * append = HTStreamStack(WWW_CACHE_APPEND, output_format, output_stream, request, NO); if (append) me->target = HTTee(me->target, append, NULL); } #endif /* ** Create the pipe buffer stream to buffer the data that we read ** from the network */ if ((pipe = HTPipeBuffer(me->target, 0))) me->target = pipe; /* ** Now start the second load from the cache. First we read this data from ** the cache and then we flush the data that we have read from the net. */ { HTRequest * cache_request = HTRequest_new(); /* ** Set the output format to source and the output stream to the ** merge stream. As we have already set up the stream pipe, we just ** load it as source. */ HTRequest_setOutputFormat(cache_request, WWW_SOURCE); HTRequest_setOutputStream(cache_request, merge); /* ** Bind the anchor to the new request and also register a local ** AFTER filter to flush the pipe buffer so that we can get ** rest of the data through. */ HTRequest_setAnchor(cache_request, (HTAnchor *) anchor); HTRequest_addBefore(cache_request, HTCacheLoadFilter, NULL, NULL, HT_FILTER_FIRST, YES); HTRequest_addAfter(cache_request, HTCacheFlushFilter, NULL, pipe, HT_ALL, HT_FILTER_FIRST, YES); HTTRACE(STREAM_TRACE, "Partial..... Starting cache load\n"); HTLoad(cache_request, NO); } return me; #else return NULL; #endif } PUBLIC void HTMIME_setSaveStream (HTConverter * save_stream) { LocalSaveStream = save_stream; } PUBLIC HTConverter * HTMIME_saveStream (void) { return LocalSaveStream; } #ifndef NO_CACHE /* HTMIME_anchor2response * Copies the anchor HTTP headers into a response object by means * of the generic _dispatchParsers function. Written so that we can * copy the HTTP headers stored in the cache to the response object. */ PRIVATE void HTMIME_anchor2response (HTRequest * req) { char * token; char * value; HTAssocList * header; HTAssoc * pres; HTResponse * res; HTParentAnchor * anchor; if (!req) return; anchor = HTRequest_anchor (req); header = HTAnchor_header (anchor); if (!anchor || !header) return; while ((pres = (HTAssoc *) HTAssocList_nextObject (header))) { token = HTAssoc_name (pres); value = HTAssoc_value (pres); _dispatchParsers (req, token, value); } /* ** Notify the response object not to delete the lists that we ** have inherited from the anchor object */ res = HTRequest_response (req); HTResponse_isCached (res, YES); } /* ** A small AFTER filter that is a frontend to the ** HTMIME_anchor2headers function. */ PUBLIC HTStream * HTCacheCopyHeaders (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTTRACE(STREAM_TRACE, "Cache Copy Headers.. Copying headers into the response object\n"); HTMIME_anchor2response (request); return HT_OK; } #endif /* NO_CACHE */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMIME.html����������������������������������������������������������������������0100644�0000764�0000144�00000010753�07217441310�015622� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww MIME Parsers</TITLE> </HEAD> <BODY> <H1> Libwww MIME Parsers </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The MIME parser stream presents a MIME document with a header and possibly a footer. It recursively invokes the format manager to handle embedded formats like MIME multipart. As well as stripping off and parsing the headers, the MIME parser has to parse any weird MIME encodings it may meet within the body parts of messages, and must deal with <A HREF="HTBound.html">multipart messages</A> (see HTBound.h). <P> This module is implemented to the level necessary for operation with WWW, but is not currently complete for any arbitrary MIME message. <P> This module is implemented by <A HREF="HTMIME.c">HTMIME.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTMIME_H #define HTMIME_H #include "HTStream.h" #include "HTFormat.h" </PRE> <H2> How to Deal with Unknown Data </H2> <P> When the MIME parser can't find a target stream, for example because the media type is unknown, or it has a content encoding or transfer encoding that it doesn't know about then it has to get rid of the data in some other fashion, for example by dumping it to local disk (but it could also be dumping it to a black hole). The following two functions allow you to set and get the stream to use in this situation. By default, libwww provides an implementation of a save stream as <A HREF="HTFSave.html">HTSaveLocally</A> which you may want to use - this is for example used by the <A HREF="HTProfil.html">current profiles</A>. <PRE> extern void HTMIME_setSaveStream (HTConverter * save_stream); extern HTConverter * HTMIME_saveStream (void); </PRE> <H2> MIME Parse Stream </H2> <P> This stream parses a complete MIME message and if a media type header is found then the stream stack is called to create the nest stream instance in the stream pipe. Any piece of the MIME body is pumped right through the stream. <PRE> extern HTConverter HTMIMEConvert; </PRE> <H2> MIME Header ONLY Parse Stream </H2> <P> This stream parses a complete MIME header and then returnes <CODE>HT_LOADED</CODE>. It does not set up any streams and resting data stays in the buffer. This can be used if you only want to parse the headers before you decide what to do next. This is for example the case with HTTP HEAD requests. <PRE> extern HTConverter HTMIMEHeader; </PRE> <H2> MIME Footer ONLY Parse Stream </H2> <P> Parse only a footer, for example after a chunked encoding. <PRE> extern HTConverter HTMIMEFooter; </PRE> <H2> HTTP 100 Continue Parse Stream </H2> <P> The 100 continue status codes can come at any time - we take them and put the data down a temporary stream. When the 100 continue message has been parsed, the stream returns <CODE>HT_CONTINUE</CODE> <PRE> extern HTConverter HTMIMEContinue; </PRE> <H2> HTTP 101 Switching Protocol Parse Stream </H2> <P> The 101 Switching Protocol status code indicates that the rest of the stream is using another format, protocol, what ever. The result is the same - we are done parsing here and must leave the rest to the next stream which hopefully knows more about how to parse the rest of the stream. The stream stack is called to look for a stream registered for handling <TT><A HREF="HTFormat.html#type">WWW_MIME_UPGRADE</A></TT>. This steam should return <CODE>HT_LOADED</CODE> when it is done, <CODE>HT_ERROR</CODE> if an error occurred and <CODE>HT_OK</CODE> as long as it just reads more data. <PRE> extern HTConverter HTMIMEUpgrade; </PRE> <H2> HTTP 206 Partial Data MIME Parse Stream </H2> <P> In case we sent a <I>Range conditional GET</I> we may get back a 206 Partial Response. This response must be appended to the already existing cache entry before presented to the user. That is, first we load the <A HREF="HTCache.html">cached object</A> and pump it down the pipe and then the new data follows. Only the latter part gets appended to the cache, of course. <PRE> extern HTConverter HTMIMEPartial; </PRE> <H2> HTMIME_anchor2response </H2> <P> Copies the anchor HTTP headers into a response object by means of the generic _dispatchParsers function. Written so that we can copy the HTTP headers stored in the cache to the response object. <PRE> #ifndef NO_CACHE extern HTConverter HTCacheCopyHeaders; #endif </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMIME.html,v 2.32 2025/12/18 17:00:56 kahan Exp $ </ADDRESS> </BODY></HTML> ���������������������libwww/Library/src/HTMIMERq.c�����������������������������������������������������������������������0100644�0000764�0000144�00000025543�06664352703�015422� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTMIMERq.c ** MIME ENTITY HEADERS GENERATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMIMERq.c,v 2.42 2025/02/22 22:10:11 frystyk Exp $ ** ** This module implements the output stream for MIME used for sending ** requests with a entity body to HTTP, NEWS, etc. or for generating ** responses ** ** History: ** Jan 95 HFN Written */ /* Library Includes */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTAncMan.h" #include "HTNetMan.h" #include "HTReqMan.h" #include "HTHeader.h" #include "HTMIMERq.h" /* Implements */ #define PUTC(c) (*me->target->isa->put_character)(me->target, c) #define PUTS(s) (*me->target->isa->put_string)(me->target, s) #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) struct _HTStream { const HTStreamClass * isa; HTStream * target; HTRequest * request; BOOL endHeader; BOOL transparent; }; #define HT_MAX_WAIT 8 /* Max number of secs to wait for PUT */ PRIVATE int MIMERequest_put_block (HTStream * me, const char * b, int l); /* ------------------------------------------------------------------------- */ /* MIME Output Request Stream */ /* ------------------------------------------------------------------------- */ /* MIMEMakeRequest ** --------------- ** Generates the BODY parts of a MIME message. */ PRIVATE int MIMEMakeRequest (HTStream * me, HTRequest * request) { char crlf[3]; char linebuf[256]; /* @@@ */ HTParentAnchor * entity = HTRequest_entityAnchor(request); HTEnHd EntityMask = HTRequest_enHd(request); BOOL transfer_coding = NO; /* We should get this from the Host object */ *crlf = CR; *(crlf+1) = LF; *(crlf+2) = '\0'; if (EntityMask & HT_E_ALLOW) { BOOL first = YES; int cnt; HTMethod methodset = HTAnchor_allow(entity); for (cnt=0; cnt<sizeof(HTMethod)<<3 ; cnt++) { if (methodset & (1<<cnt)) { if (first) { PUTS("Allow: "); first = NO; } else PUTC(','); PUTS(HTMethod_name(1<<cnt)); } } if (!first) PUTBLOCK(crlf, 2); } if (EntityMask & HT_E_CONTENT_ENCODING && entity->content_encoding) { BOOL first = YES; HTList * cur = entity->content_encoding; HTEncoding pres; while ((pres = (HTEncoding) HTList_nextObject(cur)) && !HTFormat_isUnityContent(pres)) { if (first) { PUTS("Content-Encoding: "); first = NO; } else PUTC(','); PUTS(HTAtom_name(pres)); } if (!first) PUTBLOCK(crlf, 2); } if (EntityMask & HT_E_CTE && entity->cte) { HTEncoding cte = HTAnchor_contentTransferEncoding(entity); if (!HTFormat_isUnityTransfer(cte)) { sprintf(linebuf, "Content-Transfer-Encoding: %s%c%c", HTAtom_name(cte), CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } } if (EntityMask & HT_E_CONTENT_LANGUAGE && entity->content_language){ BOOL first = YES; HTList * cur = entity->content_language; HTLanguage pres; while ((pres = (HTLanguage) HTList_nextObject(cur))) { if (first) { PUTS("Content-Language: "); first = NO; } else PUTC(','); PUTS(HTAtom_name(pres)); } if (!first) PUTBLOCK(crlf, 2); } /* Only send out Content-Length if we don't have a transfer coding */ if (!HTRequest_transfer(request)) { if (EntityMask & HT_E_CONTENT_LENGTH) { if (entity->content_length >= 0) { sprintf(linebuf, "Content-Length: %ld%c%c", entity->content_length, CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } else { transfer_coding = YES; sprintf(linebuf, "Transfer-Encoding: %s%c%c", HTAtom_name(WWW_CODING_CHUNKED), CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } } } if (EntityMask & HT_E_CONTENT_TYPE && entity->content_type) { HTFormat format = entity->content_type != WWW_UNKNOWN ? entity->content_type : WWW_BINARY; HTAssocList * parameters = HTAnchor_formatParam(entity); /* Output the content type */ PUTS("Content-Type: "); PUTS(HTAtom_name(format)); /* Add all parameters */ if (parameters) { HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(parameters))) { PUTS(";"); PUTS(HTAssoc_name(pres)); PUTS("="); PUTS(HTAssoc_value(pres)); } } PUTBLOCK(crlf, 2); } if (EntityMask & HT_E_DERIVED_FROM && entity->derived_from) { sprintf(linebuf, "Derived-From: %s%c%c", entity->derived_from, CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } if (EntityMask & HT_E_EXPIRES) { if (entity->expires != -1) { sprintf(linebuf, "Expires: %s%c%c", HTDateTimeStr(&entity->expires, NO), CR,LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } } if (EntityMask & HT_E_LAST_MODIFIED) { if (entity->last_modified != -1) { sprintf(linebuf, "Last-Modified: %s%c%c", HTDateTimeStr(&entity->last_modified, NO), CR,LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } } if (EntityMask & HT_E_LINK) { HTLink * link = HTAnchor_mainLink((HTAnchor *) entity); HTList * sublinks = HTAnchor_subLinks((HTAnchor *) entity); HTLinkType linktype = NULL; /* First look in the main link */ if (link && (linktype = HTLink_type(link))) { char * src = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link)); char * dst = HTAnchor_address((HTAnchor *) dest); char * rel_dst = HTRelative(dst, src); if (rel_dst) { PUTS("Link: \""); PUTS(rel_dst); PUTS("\""); sprintf(linebuf, ";rel=\"%s\"", HTAtom_name(linktype)); PUTBLOCK(linebuf, (int) strlen(linebuf)); HT_FREE(rel_dst); HT_FREE(dst); } /* ... and then in any sublinks */ if (sublinks) { HTLink * pres; while ((pres = (HTLink *) HTList_nextObject(sublinks))) { if ((linktype = HTLink_type(pres))) { dest = HTAnchor_parent(HTLink_destination(pres)); dst = HTAnchor_address((HTAnchor *) dest); rel_dst = HTRelative(dst, src); if (rel_dst) { PUTS(", \""); PUTS(rel_dst); PUTS("\""); sprintf(linebuf, ";rel=\"%s\"", HTAtom_name(linktype)); PUTBLOCK(linebuf, (int) strlen(linebuf)); HT_FREE(rel_dst); HT_FREE(dst); } } } } PUTBLOCK(crlf, 2); HT_FREE(src); } } if (EntityMask & HT_E_TITLE && entity->title) { sprintf(linebuf, "Title: %s%c%c", entity->title, CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } if (EntityMask & HT_E_URI) { /* @@@@@@@@@@ */ } if (EntityMask & HT_E_VERSION && entity->version) { sprintf(linebuf, "Content-Version: %s%c%c", entity->version, CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } if (me->endHeader) { sprintf(linebuf, "%c%c", CR, LF); /* Blank line means "end" */ PUTBLOCK(linebuf, (int) strlen(linebuf)); } /* ** Handle any Transfer encoding. This is really a transport issue but ** as it often pops up when we are sending an entity then we put it ** here for now. A better place whould be in the HTTPGen stream. ** the real problem is that the server doesn't have any mechanism of ** telling the client what transports it can handle. The best we can ** hope for is that the server understands "chunked" although we are ** certainly capable of handling nested encodings :( */ if (transfer_coding) { HTStream * target = HTTransferCodingStack(WWW_CODING_CHUNKED, me->target, request, NULL, YES); HTTRACE(STREAM_TRACE, "Building.... Transfer-Encoding stack\n"); if (target == HTBlackHole()) { if (me->target) (*me->target->isa->abort)(me->target, NULL); me->target = HTErrorStream(); } else me->target = target; } #if 0 /* ** We expect the anchor object already to have the right encoding and ** we therefore should not set up extra streams for doing this. */ /* Handle any Content Transfer encoding */ { HTEncoding cte = HTAnchor_contentTransferEncoding(entity); if (!HTFormat_isUnityTransfer(cte)) { HTTRACE(STREAM_TRACE, "Building.... C-T-E stack\n"); me->target = HTContentTransferCodingStack(cte, me->target, request, NULL, YES); } } /* Handle any Content Encodings */ { HTList * cc = HTAnchor_encoding(entity); if (cc) { HTTRACE(STREAM_TRACE, "Building.... C-E stack\n"); me->target = HTContentEncodingStack(cc, me->target, request, NULL); } } #endif HTTRACE(PROT_TRACE, "MIME........ Generating Entity Headers\n"); return HT_OK; } /* ** Flushes header but doesn't free stream object */ PRIVATE int MIMERequest_flush (HTStream * me) { int status = MIMERequest_put_block(me, NULL, 0); return status==HT_OK ? (*me->target->isa->flush)(me->target) : status; } PRIVATE int MIMERequest_put_block (HTStream * me, const char * b, int l) { HTNet * net = HTRequest_net(me->request); if (!me->transparent) { MIMEMakeRequest(me, me->request); me->transparent = YES; /* ** First we only send the header */ if (HTMethod_hasEntity(HTRequest_method(me->request))) { HTHost * host = HTNet_host(net); char * class = HTHost_class(host); if (class && !strcmp(class, "http")) { MIMERequest_flush(me); HTNet_setHeaderBytesWritten(net, HTNet_bytesWritten(net)); return HT_PAUSE; } } } /* Check if we have written it all */ if (b) { HTParentAnchor * entity = HTRequest_entityAnchor(me->request); long cl = HTAnchor_length(entity); return (cl>=0 && HTNet_bytesWritten(net)-HTNet_headerBytesWritten(net) >= cl) ? HT_LOADED : PUTBLOCK(b, l); } return HT_OK; } PRIVATE int MIMERequest_put_character (HTStream * me, char c) { return MIMERequest_put_block(me, &c, 1); } PRIVATE int MIMERequest_put_string (HTStream * me, const char * s) { return MIMERequest_put_block(me, s, strlen(s)); } /* ** Flushes data and frees stream object */ PRIVATE int MIMERequest_free (HTStream * me) { int status = MIMERequest_flush(me); if (status != HT_WOULD_BLOCK) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; HT_FREE(me); } return status; } PRIVATE int MIMERequest_abort (HTStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target, e); HT_FREE(me); HTTRACE(PROT_TRACE, "MIMERequest. ABORTING...\n"); return HT_ERROR; } /* MIMERequest Stream ** ----------------- */ PRIVATE const HTStreamClass MIMERequestClass = { "MIMERequest", MIMERequest_flush, MIMERequest_free, MIMERequest_abort, MIMERequest_put_character, MIMERequest_put_string, MIMERequest_put_block }; PUBLIC HTStream * HTMIMERequest_new (HTRequest * request, HTStream * target, BOOL endHeader) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTMIMERequest_new"); me->isa = &MIMERequestClass; me->target = target; me->request = request; me->endHeader = endHeader; me->transparent = NO; return me; } �������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMIMERq.html��������������������������������������������������������������������0100644�0000764�0000144�00000002127�06526451241�016127� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww MIME REQUEST STREAM</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>MIME Request Stream</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> The MIME Request stream generates a MIME request header and writes it to the target which is normally a HTWriter stream.<P> This module is implemented by <A HREF="HTMIMERq.c">HTMIMERq.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTMIMERQ_H #define HTMIMERQ_H #include "HTStream.h" #include "HTReq.h" </PRE> <H3>Streams Definition</H3> This stream makes a MIME header before it goes into transparent mode. If <CODE>endHeader</CODE> is YES then we send an empty <CODE>CRLF</CODE> in order to end the header. <PRE> extern HTStream * HTMIMERequest_new (HTRequest * request, HTStream * target, BOOL endHeader); #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTMIMERq.html,v 2.6 2025/05/14 02:10:41 frystyk Exp $ </ADDRESS> </BODY> </HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMIMImp.c�����������������������������������������������������������������������0100644�0000764�0000144�00000037445�06664352703�015464� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** DEFAULT MIME HEADER PARSERS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMIMImp.c,v 2.26 2025/02/22 22:10:11 frystyk Exp $ ** ** This module contains the default MIME header parsers for the MIME ** parser in HTMIME.c. They are all initialized at run time and can hence ** be replaced or extended with your own set. ** ** History: ** Jun 96 HFN Written ** Dec 98 JKO Added support for message-digest authentication */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTHeader.h" #include "HTTPUtil.h" #include "HTMIMImp.h" /* Implemented here */ /* ------------------------------------------------------------------------- */ PUBLIC int HTMIME_accept (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_acceptCharset (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_acceptEncoding (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_acceptLanguage (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_acceptRanges (HTRequest * request, HTResponse * response, char * token, char * value) { if (value) { HTNet * net = HTRequest_net(request); HTHost * host = HTNet_host(net); HTHost_setRangeUnits(host, value); } return HT_OK; } PUBLIC int HTMIME_authenticate (HTRequest * request, HTResponse * response, char * token, char * value) { char * scheme = HTNextField(&value); if (scheme) { HTResponse_addChallenge(response, scheme, value); HTResponse_setScheme(response, scheme); } return HT_OK; } PUBLIC int HTMIME_authenticationInfo (HTRequest * request, HTResponse * response, char * token, char * value) { if (token && value) { HTResponse_addChallenge(response, token, value); HTResponse_setScheme(response, "digest"); } return HT_OK; } PUBLIC int HTMIME_authorization (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_cacheControl (HTRequest * request, HTResponse * response, char * token, char * value) { /* ** Walk through the set of cache-control directives and add them to the ** response association list for cache control directives */ char * name_val; while ((name_val = HTNextPair(&value)) != NULL) { char * name = HTNextField(&name_val); char * val = HTNextField(&name_val); if (name) HTResponse_addCacheControl(response, name, val ? val : ""); } return HT_OK; } PUBLIC int HTMIME_connection (HTRequest * request, HTResponse * response, char * token, char * value) { /* ** Walk through the set of connection directives and add them to the ** response association list for connection directives */ char * name_val; while ((name_val = HTNextPair(&value)) != NULL) { char * name = HTNextField(&name_val); char * val = HTNextField(&name_val); /* ** If we have a name then look if it is concerning persistent ** connections. If so, then we handle it here, otherwise we leave it ** to somebody else by simply adding it to the list of connection ** tokens. */ if (name) { HTNet * net = HTRequest_net(request); HTHost * host = HTNet_host(net); if (!strcasecomp(name, "close")) { /* HTTP/1.1 */ HTTRACE(STREAM_TRACE, "MIMEParser.. Close received...\n"); HTHost_setCloseNotification(host, YES); } else if (!strcasecomp(name, "keep-alive")) { /* HTTP/1.0 */ /* ** In case this is an HTTP/1.1 server sending keep-alive then ** ignore it. */ if (HTHost_version(host) < HTTP_11) { HTNet_setPersistent(net, YES, HT_TP_SINGLE); HTTRACE(STREAM_TRACE, "MIMEParser.. HTTP/1.0 Keep Alive\n"); } else HTTRACE(STREAM_TRACE, "MIMEParser.. HTTP/1.0 Keep Alive ignored\n"); } else HTResponse_addConnection(response, name, val ? val : ""); } } return HT_OK; } PUBLIC int HTMIME_contentEncoding (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; while ((field = HTNextField(&value)) != NULL) { char * lc = field; while ((*lc = TOLOWER(*lc))) lc++; HTResponse_addEncoding(response, HTAtom_for(field)); } return HT_OK; } PUBLIC int HTMIME_contentLength (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; if ((field = HTNextField(&value)) != NULL) HTResponse_setLength(response, atol(field)); return HT_OK; } PUBLIC int HTMIME_contentRange (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; if ((field = HTNextField(&value))) HTResponse_addRange(response, field, value); return HT_OK; } PUBLIC int HTMIME_contentTransferEncoding (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; if ((field = HTNextField(&value)) != NULL) { char *lc = field; while ((*lc = TOLOWER(*lc))) lc++; HTResponse_setContentTransferEncoding(response, HTAtom_for(field)); } return HT_OK; } PUBLIC int HTMIME_contentType (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; if ((field = HTNextField(&value)) != NULL) { /* Get the Content-Type */ char *lc = field; while ((*lc = TOLOWER(*lc))) lc++; HTResponse_setFormat(response, HTAtom_for(field)); /* Get all the parameters to the Content-Type */ { char * param; while ((field = HTNextField(&value)) != NULL && (param = HTNextField(&value)) != NULL) { lc = field; while ((*lc = TOLOWER(*lc))) lc++; lc = param; while ((*lc = TOLOWER(*lc))) lc++; HTResponse_addFormatParam(response, field, param); } } } return HT_OK; } #if 0 PRIVATE int HTFindInt(char * haystack, char * needle, int deflt) { char * start = strstr(haystack, needle); int value = deflt; if (start != NULL) { start += strlen(needle); while isspace(*start) start++; if (isdigit(*start)) { char * end = start + 1; char save; while (isdigit(*end)) end++; save = *end; *end = 0; value = atoi(start); *end = save; } } return value; } #endif PUBLIC int HTMIME_keepAlive (HTRequest * request, HTResponse * response, char * token, char * value) { char * name_val; HTNet * net = HTRequest_net(request); HTHost * host = HTNet_host(net); while ((name_val = HTNextPair(&value)) != NULL) { char * name = HTNextField(&name_val); char * val = HTNextField(&name_val); if (!strcasecomp(name, "max") && val) { int max = atoi(val); HTTRACE(STREAM_TRACE, "MIMEParser.. Max %d requests pr connection\n" _ max); HTHost_setReqsPerConnection(host, max); } else if (!strcasecomp(name, "timeout") && val) { int timeout = atoi(val); HTTRACE(STREAM_TRACE, "MIMEParser.. Timeout after %d secs\n" _ timeout); } } return HT_OK; } PUBLIC int HTMIME_link (HTRequest * request, HTResponse * response, char * token, char * value) { char * element; HTParentAnchor * me = HTRequest_anchor(request); while ((element = HTNextElement(&value))) { char * param_pair; char * uri = HTNextField(&element); HTChildAnchor * child_dest = HTAnchor_findChildAndLink(me, NULL, uri, NULL); HTParentAnchor * parent_dest = HTAnchor_parent(HTAnchor_followMainLink((HTAnchor *) child_dest)); if (parent_dest) { while ((param_pair = HTNextPair(&element))) { char * name = HTNextField(&param_pair); char * val = HTNextField(&param_pair); if (name) { if (!strcasecomp(name, "rel") && val && *val) { HTTRACE(STREAM_TRACE, "MIMEParser.. Link forward relationship `%s\'\n" _ val); HTLink_add((HTAnchor *) me, (HTAnchor *) parent_dest, (HTLinkType) HTAtom_caseFor(val), METHOD_INVALID); } else if (!strcasecomp(name, "rev") && val && *val) { HTTRACE(STREAM_TRACE, "MIMEParser.. Link reverse relationship `%s\'\n" _ val); HTLink_add((HTAnchor *) parent_dest, (HTAnchor *) me, (HTLinkType) HTAtom_caseFor(val), METHOD_INVALID); } else if (!strcasecomp(name, "type") && val && *val) { HTTRACE(STREAM_TRACE, "MIMEParser.. Link type `%s\'\n" _ val); if (HTAnchor_format(parent_dest) == WWW_UNKNOWN) HTAnchor_setFormat(parent_dest, (HTFormat) HTAtom_caseFor(val)); } else HTTRACE(STREAM_TRACE, "MIMEParser.. Link unknown `%s\' with value `%s\'\n" _ name _ val ? val : "<null>"); } } } } return HT_OK; } PUBLIC int HTMIME_location (HTRequest * request, HTResponse * response, char * token, char * value) { HTAnchor * redirection = NULL; char * location = HTStrip(value); /* ** If not absolute URI (Error) then find the base */ if (!HTURL_isAbsolute(location)) { char * base = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); location = HTParse(location, base, PARSE_ALL); redirection = HTAnchor_findAddress(location); HT_FREE(base); HT_FREE(location); } else { redirection = HTAnchor_findAddress(location); } HTResponse_setRedirection(response, redirection); return HT_OK; } PUBLIC int HTMIME_maxForwards (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_messageDigest (HTRequest * request, HTResponse * response, char * token, char * value) { HTResponse_addChallenge(response, "Digest-MessageDigest", value); return HT_OK; } PUBLIC int HTMIME_pragma (HTRequest * request, HTResponse * response, char * token, char * value) { /* ** Walk through the set of pragma directives and search for one that may ** affect the cachability of this object */ char * name_val; while ((name_val = HTNextPair(&value)) != NULL) { char * name = HTNextField(&name_val); if (name) { if (!strcasecomp(name, "no-cache")) { HTResponse_setCachable(response, HT_NO_CACHE); HTTRACE(STREAM_TRACE, "MIMEParser.. No-Cache Pragma\n"); } } } return HT_OK; } PUBLIC int HTMIME_protocol (HTRequest * request, HTResponse * response, char * token, char * value) { char * param = NULL; char * protocol = HTNextSExp(&value, &param); if (protocol) { HTTRACE(PROT_TRACE, "Protocol.... Name: `%s\', value: `%s\'\n" _ protocol _ param); HTResponse_addProtocol(response, protocol, param); } return HT_OK; } PUBLIC int HTMIME_protocolInfo (HTRequest * request, HTResponse * response, char * token, char * value) { char * param = NULL; char * info = HTNextSExp(&value, &param); if (info) { HTTRACE(PROT_TRACE, "Protocol.... Info: `%s\', value: `%s\'\n" _ info _ param); HTResponse_addProtocolInfo(response, info, param); } return HT_OK; } PUBLIC int HTMIME_protocolRequest (HTRequest * request, HTResponse * response, char * token, char * value) { char * param = NULL; char * preq = HTNextSExp(&value, &param); if (preq) { HTTRACE(PROT_TRACE, "Protocol.... Request: `%s\', value: `%s\'\n" _ preq _ param); HTResponse_addProtocolRequest(response, preq, param); } return HT_OK; } PUBLIC int HTMIME_proxyAuthorization (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_proxyAuthenticationInfo (HTRequest * request, HTResponse * response, char * token, char * value) { /* deal here with the next nonce, the qop, and the digest response (mutual authentication */ if (token && value) { HTResponse_addChallenge(response, token, value); HTResponse_setScheme(response, "digest"); } return HT_OK; } PUBLIC int HTMIME_public (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; HTNet * net = HTRequest_net(request); HTHost * host = HTNet_host(net); while ((field = HTNextField(&value)) != NULL) { HTMethod new_method; /* We treat them as case-insensitive! */ if ((new_method = HTMethod_enum(field)) != METHOD_INVALID) HTHost_appendPublicMethods(host, new_method); } HTTRACE(STREAM_TRACE, "MIMEParser.. Public methods: %d\n" _ HTHost_publicMethods(host)); return HT_OK; } PUBLIC int HTMIME_range (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_referer (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_retryAfter (HTRequest * request, HTResponse * response, char * token, char * value) { HTUserProfile * up = HTRequest_userProfile(request); HTResponse_setRetryTime(response, HTParseTime(value, up, YES)); return HT_OK; } PUBLIC int HTMIME_server (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; HTNet * net = HTRequest_net(request); HTHost * host = HTNet_host(net); if ((field = HTNextField(&value)) != NULL) HTHost_setServer(host, field); return HT_OK; } PUBLIC int HTMIME_transferEncoding (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; while ((field = HTNextField(&value)) != NULL) { char * lc = field; while ((*lc = TOLOWER(*lc))) lc++; HTResponse_addTransfer(response, HTAtom_for(field)); } return HT_OK; } PUBLIC int HTMIME_trailer (HTRequest * request, HTResponse * response, char * token, char * value) { /* ** Walk through the set of trailer directives and add them to the ** response association list for trailer directives */ char * name_val; while ((name_val = HTNextPair(&value)) != NULL) { char * name = HTNextField(&name_val); char * val = HTNextField(&name_val); if (name) HTResponse_addTrailer(response, name, val ? val : ""); } return HT_OK; } PUBLIC int HTMIME_upgrade (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_userAgent (HTRequest * request, HTResponse * response, char * token, char * value) { char * field; HTNet * net = HTRequest_net(request); HTHost * host = HTNet_host(net); if ((field = HTNextField(&value)) != NULL) HTHost_setUserAgent(host, field); return HT_OK; } PUBLIC int HTMIME_vary (HTRequest * request, HTResponse * response, char * token, char * value) { /* ** Walk through the set of vary directives and add them to the ** response association list for vary directives */ char * name_val; while ((name_val = HTNextPair(&value)) != NULL) { char * name = HTNextField(&name_val); char * val = HTNextField(&name_val); if (name) HTResponse_addVariant(response, name, val ? val : ""); } return HT_OK; } PUBLIC int HTMIME_via (HTRequest * request, HTResponse * response, char * token, char * value) { return HT_OK; } PUBLIC int HTMIME_warning (HTRequest * request, HTResponse * response, char * token, char * value) { char * codestr = HTNextField(&value); char * agent = HTNextField(&value); if (codestr && agent) { int code = atoi(codestr); int idx; char * ptr; if (code==10) idx=HTERR_STALE; else if (code==11) idx=HTERR_REVALIDATION_FAILED; else if (code==12) idx=HTERR_DISCONNECTED_CACHE; else if (code==13) idx=HTERR_HEURISTIC_EXPIRATION; else if (code==14) idx=HTERR_TRANSFORMED; else idx=HTERR_CACHE; if ((ptr = strchr(agent, '\r')) != NULL) /* Strip \r and \n */ *ptr = '\0'; else if ((ptr = strchr(agent, '\n')) != NULL) *ptr = '\0'; HTRequest_addError(request, ERR_WARN, NO, idx, agent, (int) strlen(agent), "HTMIME_warning"); } else { HTTRACE(STREAM_TRACE, "MIMEParser.. Invalid warning\n"); } return HT_OK; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMIMImp.html��������������������������������������������������������������������0100644�0000764�0000144�00000004372�06635711174�016176� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 1-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Default MIME/RFC822 Header Parsers</TITLE> </HEAD> <BODY> <H1> Default MIME/RFC822 Header Parsers </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Library's MIME parser is divided into two parts: A generic MIME parser that knows how to unwrap all RFC822 headers and specialized header parsers that knows how to parse <CODE>Content-Length</CODE>, for example. This is the default set of the specialized MIME header parsers that can be registered as part of the generic MIME. Note that these functions are not registered by default - they must be registered by the application. This can be done using the <A HREF="HTInit.html">HTMIMEInit()</A> function in the <A HREF="WWWInit.html">WWWInit interface</A>. Of course this can also be used to register new headers that are not represented below - or if you want to replace a default parser then this is also very easy. <P> This module is implemented by <A HREF="HTMIMImp.c">HTMIMImp.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTMIMIMP_H #define HTMIMIMP_H #include "HTReq.h" #include "HTHeader.h" </PRE> <PRE> extern HTParserCallback HTMIME_accept, HTMIME_acceptCharset, HTMIME_acceptEncoding, HTMIME_acceptLanguage, HTMIME_acceptRanges, HTMIME_authenticate, HTMIME_authenticationInfo, HTMIME_authorization, HTMIME_cacheControl, HTMIME_connection, HTMIME_contentEncoding, HTMIME_contentLength, HTMIME_contentRange, HTMIME_contentTransferEncoding, HTMIME_contentType, HTMIME_keepAlive, HTMIME_link, HTMIME_location, HTMIME_maxForwards, HTMIME_messageDigest, HTMIME_pragma, HTMIME_protocol, HTMIME_protocolInfo, HTMIME_protocolRequest, HTMIME_proxyAuthorization, HTMIME_proxyAuthenticationInfo, HTMIME_public, HTMIME_range, HTMIME_referer, HTMIME_retryAfter, HTMIME_server, HTMIME_trailer, HTMIME_transferEncoding, HTMIME_upgrade, HTMIME_userAgent, HTMIME_vary, HTMIME_via, HTMIME_warning; </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMIMImp.html,v 2.11 2025/12/16 10:59:08 kahan Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMIMPrs.c�����������������������������������������������������������������������0100644�0000764�0000144�00000012016�07140260003�015443� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTAtom.c ** HTHashList: hash indexed array of MIME header parsers ** ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMIMPrs.c,v 2.11 2025/07/28 10:27:15 kahan Exp $ ** ** See HTHshLst.html for a description of HashLists. ** ** Authors: ** EGP Eric Prud'hommeaux w3 ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTMIMPrs.h" struct _HTMIMEParseEl{ HTMIMEParseEl * next; char * token; BOOL caseSensitive; HTParserCallback * pFunk; }; PRIVATE HTMIMEParseEl * HTMIMEParseEl_new(HTMIMEParseEl ** pBefore, const char * token, BOOL caseSensitive, HTParserCallback * callback) { HTMIMEParseEl * ret; if ((ret = (HTMIMEParseEl *) HT_MALLOC(sizeof(HTMIMEParseEl))) == NULL) HT_OUTOFMEM("HTMIMEParseEl"); ret->next = *pBefore; *pBefore = ret; if ((ret->token = (char *) HT_MALLOC(strlen(token)+1)) == NULL) HT_OUTOFMEM("token"); strcpy((char *)ret->token, token); ret->caseSensitive = caseSensitive; ret->pFunk = callback; return ret; } PRIVATE int HTMIMEParseEl_delete(HTMIMEParseEl * me, HTMIMEParseEl ** pBefore) { *pBefore = me->next; HT_FREE(me->token); HT_FREE(me); return HT_OK; } PRIVATE int HTMIMEParseSet_hash(HTMIMEParseSet * me, const char * token) { int ret; const char * p; for (p=token, ret=0; *p; p++) { char ch; ch = *(unsigned char *) p; ch = TOLOWER(ch); ret = (ret * 3 +(ch)) % me->size; } return ret; } PUBLIC HTMIMEParseSet * HTMIMEParseSet_new(int hashSize) { HTMIMEParseSet * me; if ((me = (HTMIMEParseSet *) HT_CALLOC(1, sizeof(HTMIMEParseSet))) == NULL) HT_OUTOFMEM("HTMIMEParseSet"); me->size = hashSize; return me; } PUBLIC int HTMIMEParseSet_deleteAll (HTMIMEParseSet * me) { int i; HTMIMEParseEl * pEl, * next; if (me && me->parsers) { for (i=0; i<me->size; i++) { for (pEl = me->parsers[i]; pEl; pEl = next) { next = pEl->next; HT_FREE(pEl->token); HT_FREE(pEl); } } HT_FREE(me->parsers); HT_FREE(me); } return HT_OK; } PUBLIC HTMIMEParseEl * HTMIMEParseSet_add (HTMIMEParseSet * me, const char * token, BOOL caseSensitive, HTParserCallback * callback) { int hash; /* Insure hash list */ if (!me->parsers) { if (!me->size) me->size = HT_S_HASH_SIZE; if ((me->parsers = (HTMIMEParseEl **) HT_CALLOC(me->size, sizeof(HTMIMEParseEl *))) == NULL) HT_OUTOFMEM("HTMIME parsers"); } hash = HTMIMEParseSet_hash(me, token); /* Add a new entry */ return HTMIMEParseEl_new(&me->parsers[hash], token, caseSensitive, callback); } PUBLIC HTMIMEParseEl * HTMIMEParseSet_addRegex (HTMIMEParseSet * me, const char * token, BOOL caseSensitive, HTParserCallback * callback) { return HTMIMEParseEl_new(&me->regexParsers, token, caseSensitive, callback); } PUBLIC int HTMIMEParseSet_delete (HTMIMEParseSet * me, const char * token) { int hash, i; HTMIMEParseEl * pEl, ** last; hash = HTMIMEParseSet_hash(me, token); pEl = me->parsers[hash]; last = &me->parsers[hash]; for (i = 0; i < 2; i++) { /* do both */ for (; pEl; last = &pEl->next, pEl = pEl->next) { if ((pEl->caseSensitive && !strcmp(pEl->token, token)) || (!pEl->caseSensitive && !strcasecomp(pEl->token, token))) { return HTMIMEParseEl_delete(pEl, last); } } pEl = me->regexParsers; last = &me->regexParsers; } return HT_ERROR; } /* ** Search registered parsers to find suitable one for this token ** If a parser isn't found, the function returns HT_OK */ PUBLIC int HTMIMEParseSet_dispatch (HTMIMEParseSet * me, HTRequest * request, char * token, char * value, BOOL * pFound) { int hash; HTResponse * response = HTRequest_response(request); HTMIMEParseEl * pEl; if (pFound) *pFound = NO; /* ** Get a hash value for this token. This has is a function of the hash ** size given when the MIME header parse set was created. */ hash = HTMIMEParseSet_hash(me, token); /* ** Search for an exact match */ for (pEl = me->parsers[hash]; pEl; pEl = pEl->next) { if ((pEl->caseSensitive && !strcmp(pEl->token, token)) || (!pEl->caseSensitive && !strcasecomp(pEl->token, token))) { if (pFound) *pFound = YES; if (!pEl->pFunk) return HT_OK; /* registered with no callback*/ return (*pEl->pFunk)(request, response, token, value); } } /* ** Search for best match using regular expressions. */ for (pEl = me->regexParsers; pEl; pEl = pEl->next) { if ((pEl->caseSensitive && HTStrMatch(pEl->token, token)) || (!pEl->caseSensitive && HTStrCaseMatch(pEl->token, token))) { if (pFound) *pFound = YES; if (!pEl->pFunk) return HT_OK; /* registered with no callback*/ return (*pEl->pFunk)(request, response, token, value); } } return HT_OK; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMIMPrs.html��������������������������������������������������������������������0100644�0000764�0000144�00000004723�06526451242�016211� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Eric Prud'hommeaux, 30-May-1996 --> <TITLE>W3C Sample Code Library libwww MIME header parser managment</TITLE> </HEAD> <BODY> <H1> MIMEParseSet </H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> A MIME<CODE>ParseSet</CODE> associates simple and regex MIME header tokens with <A HREF="HTHeader.html">parsers</A>. Regex tokens are stored in a list, while simple tokens are stored in a hashed list for quick access. <P> This module is implemented by <A HREF="HTMIMPrs.c">HTMIMPrs.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <P> <PRE> #ifndef HTMIMPRS_H #define HTMIMPRS_H #include "HTHeader.h" </PRE> <H2> Data Types </H2> <P> The HTMIMEParseSet contains all registered MIME parses. There are regex parsers, which are stored in a list of HTMIMEParseEl, and simple (no wildcards) parsers stored in a hashed array of lists of HTMIMEParseEl. <PRE> typedef struct _HTMIMEParseEl HTMIMEParseEl; struct _HTMIMEParseSet { int size; HTMIMEParseEl ** parsers; HTMIMEParseEl * regexParsers; }; #define MIMEParseSet_NULL {0, NULL, NULL} </PRE> <H2> Public Functions </H2> <P> The following methods are available for this HTMIMEParseSets: <H3> Create and destroy<CODE>HashLists</CODE> </H3> <PRE> extern HTMIMEParseSet * HTMIMEParseSet_new(int hashSize); extern int HTMIMEParseSet_deleteAll (HTMIMEParseSet * me); </PRE> <H3> Add and remove parsers </H3> <P> Register a Header parser to be called if we encounter the token in the protocol response. Tokens can contain a wildcard '*' which will match zero or more arbritary chars. <P> <PRE> extern HTMIMEParseEl * HTMIMEParseSet_add (HTMIMEParseSet * me, const char * token, BOOL caseSensitive, HTParserCallback * callback); extern HTMIMEParseEl * HTMIMEParseSet_addRegex (HTMIMEParseSet * me, const char * token, BOOL caseSensitive, HTParserCallback * callback); extern int HTMIMEParseSet_delete (HTMIMEParseSet * me, const char * token); </PRE> <H3> Execute these parsers </H3> <P> Find <CODE>HTParserCallback</CODE> which matches the string. <PRE> extern int HTMIMEParseSet_dispatch (HTMIMEParseSet * me, HTRequest * request, char * token, char * value, BOOL * pFound); </PRE> <PRE> #endif /* HTMIMPRS_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMIMPrs.html,v 2.8 2025/05/14 02:10:42 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������libwww/Library/src/HTML.c���������������������������������������������������������������������������0100644�0000764�0000144�00000046666�07144232674�014707� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTML.c ** SIMPLE HTML PARSER WITHOUT ANY PRESENTATION CODE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTML.c,v 1.81 2025/08/09 10:43:08 kahan Exp $ ** ** This generates of a hypertext object. It converts from the ** structured stream interface foo HTML events into the style- ** oriented interface of the HText interface. ** ** HISTORY: ** 8 Jul 94 FM Insulate free() from _free structure element. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWHTML.h" #include "HTML.h" #include "HTextImp.h" #define PUTC(t,c) (*(t)->target->isa->put_character)((t)->target, (c)) #define PUTS(t,s) (*(t)->target->isa->put_string)((t)->target, (s)) #define PUTB(s,b,l) (*(t)->target->isa->put_block)((t)->target, (b), (l)) #define FLUSH_TARGET(t) (*(t)->target->isa->flush)((t)->target) #define FREE_TARGET(t) (*(t)->target->isa->_free)((t)->target) #define ABORT_TARGET(t) (*(t)->target->isa->abort)((t)->target, e) #define MAX_NESTING 40 struct _HTStream { const HTStreamClass * isa; /* .... */ }; struct _HTStructured { const HTStructuredClass * isa; HTRequest * request; HTParentAnchor * node_anchor; HTextImp * text; HTStream * target; HTChunk * title; BOOL in_word; SGML_dtd * dtd; char * comment_start; /* for literate programming */ char * comment_end; BOOL started; int overflow; int * sp; int stack[MAX_NESTING]; }; /* ** Entity values -- for ISO Latin 1 local representation ** This MUST match exactly the table referred to in the DTD! */ static char * ISO_Latin1[HTML_ENTITIES] = { /* 00 */ "\306", /* capital AE diphthong (ligature) */ "\301", /* capital A, acute accent */ "\302", /* capital A, circumflex accent */ "\300", /* capital A, grave accent */ "\305", /* capital A, ring */ "\303", /* capital A, tilde */ "\304", /* capital A, dieresis or umlaut mark */ "\307", /* capital C, cedilla */ "\320", /* capital Eth, Icelandic */ "\311", /* capital E, acute accent */ /* 10 */ "\312", /* capital E, circumflex accent */ "\310", /* capital E, grave accent */ "\313", /* capital E, dieresis or umlaut mark */ "\315", /* capital I, acute accent */ "\316", /* capital I, circumflex accent */ "\314", /* capital I, grave accent */ "\317", /* capital I, dieresis or umlaut mark */ "\321", /* capital N, tilde */ "\323", /* capital O, acute accent */ "\324", /* capital O, circumflex accent */ /* 20 */ "\322", /* capital O, grave accent */ "\330", /* capital O, slash */ "\325", /* capital O, tilde */ "\326", /* capital O, dieresis or umlaut mark */ "\336", /* capital THORN, Icelandic */ "\332", /* capital U, acute accent */ "\333", /* capital U, circumflex accent */ "\331", /* capital U, grave accent */ "\334", /* capital U, dieresis or umlaut mark */ "\335", /* capital Y, acute accent */ /* 30 */ "\341", /* small a, acute accent */ "\342", /* small a, circumflex accent */ "\264", /* acute accent */ "\346", /* small ae diphthong (ligature) */ "\340", /* small a, grave accent */ "\046", /* ampersand */ "\345", /* small a, ring */ "\343", /* small a, tilde */ "\344", /* small a, dieresis or umlaut mark */ "\246", /* broken vertical bar */ /* 40 */ "\347", /* small c, cedilla */ "\270", /* cedilla */ "\242", /* cent sign */ "\251", /* copyright */ "\244", /* general currency sign */ "\260", /* degree sign */ "\367", /* division sign */ "\351", /* small e, acute accent */ "\352", /* small e, circumflex accent */ "\350", /* small e, grave accent */ /* 50 */ "\360", /* small eth, Icelandic */ "\353", /* small e, dieresis or umlaut mark */ "\275", /* fraction one-half */ "\274", /* fraction one-fourth */ "\276", /* fraction three-fourth */ "\076", /* greater than */ "\355", /* small i, acute accent */ "\356", /* small i, circumflex accent */ "\241", /* inverted exclamation */ "\354", /* small i, grave accent */ /* 60 */ "\277", /* inverted question mark */ "\357", /* small i, dieresis or umlaut mark */ "\253", /* left angle quote */ "\074", /* less than */ "\257", /* macron accent */ "\265", /* micro sign (greek mu) */ "\267", /* middle dot */ "\040", /* non-breaking space */ "\254", /* not sign */ "\361", /* small n, tilde */ /* 70 */ "\363", /* small o, acute accent */ "\364", /* small o, circumflex accent */ "\362", /* small o, grave accent */ "\252", /* feminine ordinal */ "\272", /* masculine ordinal */ "\370", /* small o, slash */ "\365", /* small o, tilde */ "\366", /* small o, dieresis or umlaut mark */ "\266", /* paragraph sign */ "\261", /* plus or minus */ /* 80 */ "\243", /* pound sign */ "\042", /* double quote sign - June 94 */ "\273", /* right angle quote */ "\256", /* registered trademark */ "\247", /* section sign */ "\255", /* soft hyphen */ "\271", /* superscript 1 */ "\262", /* superscript 2 */ "\263", /* superscript 3 */ "\337", /* small sharp s, German (sz ligature) */ /* 90 */ "\376", /* small thorn, Icelandic */ "\327", /* multiply sign */ "\372", /* small u, acute accent */ "\373", /* small u, circumflex accent */ "\371", /* small u, grave accent */ "\250", /* dieresis or umlaut mark */ "\374", /* small u, dieresis or umlaut mark */ "\375", /* small y, acute accent */ "\245", /* yen sign */ "\377" /* small y, dieresis or umlaut mark */ /* 100 */ }; PRIVATE char ** CurrentEntityValues = ISO_Latin1; PUBLIC BOOL HTMLUseCharacterSet (HTMLCharacterSet i) { if (i == HTML_ISO_LATIN1) { CurrentEntityValues = ISO_Latin1; return YES; } else { HTTRACE(SGML_TRACE, "HTML Parser. Doesn't support this character set\n"); return NO; } } PRIVATE int HTML_write (HTStructured * me, const char * b, int l) { if (!me->started) { HTextImp_build(me->text, HTEXT_BEGIN); me->started = YES; } /* Look at what we got */ switch (me->sp[0]) { case HTML_TITLE: HTChunk_putb(me->title, b, l); /* Fall through */ default: HTextImp_addText(me->text, b, l); } return HT_OK; } PRIVATE int HTML_put_character (HTStructured * me, char c) { return HTML_write(me, &c, sizeof(char)); } PRIVATE int HTML_put_string (HTStructured * me, const char* s) { return HTML_write(me, s, (int) strlen(s)); } PRIVATE void HTML_start_element (HTStructured * me, int element_number, const BOOL * present, const char ** value) { HTChildAnchor * address = NULL; if (!me->started) { HTextImp_build(me->text, HTEXT_BEGIN); me->started = YES; } /* Look at what element was started */ switch (element_number) { case HTML_A: if (present[HTML_A_HREF] && value[HTML_A_HREF]) { address = HTAnchor_findChildAndLink( me->node_anchor, /* parent */ present[HTML_A_NAME] ? value[HTML_A_NAME] : NULL, /* Tag */ value[HTML_A_HREF], /* Addresss */ present[HTML_A_REL] && value[HTML_A_REL] ? (HTLinkType) HTAtom_caseFor(value[HTML_A_REL]) : NULL); if (present[HTML_A_TITLE] && value[HTML_A_TITLE]) { HTLink * link = HTAnchor_mainLink((HTAnchor *) address); HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link)); if (!HTAnchor_title(dest)) HTAnchor_setTitle(dest, value[HTML_A_TITLE]); } HTextImp_foundLink(me->text, element_number, HTML_A_HREF, address, present, value); HTTRACE(SGML_TRACE, "HTML Parser. Anchor `%s\'\n" _ value[HTML_A_HREF]); } break; case HTML_AREA: if (present[HTML_AREA_HREF] && value[HTML_AREA_HREF]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_AREA_HREF], NULL); HTextImp_foundLink(me->text, element_number, HTML_AREA_HREF, address, present, value); HTTRACE(SGML_TRACE, "HTML Parser. Image map area `%s\'\n" _ value[HTML_AREA_HREF]); } break; case HTML_BASE: if (present[HTML_BASE_HREF] && value[HTML_BASE_HREF]) { HTAnchor_setBase(me->node_anchor, (char *) value[HTML_BASE_HREF]); HTTRACE(SGML_TRACE, "HTML Parser. New base `%s\'\n" _ value[HTML_BASE_HREF]); } break; case HTML_BODY: if (present[HTML_BODY_BACKGROUND] && value[HTML_BODY_BACKGROUND]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_BODY_BACKGROUND], NULL); HTextImp_foundLink(me->text, element_number, HTML_BODY_BACKGROUND, address, present, value); HTTRACE(SGML_TRACE, "HTML Parser. Background `%s\'\n" _ value[HTML_BODY_BACKGROUND]); } break; case HTML_FORM: if (present[HTML_FORM_ACTION] && value[HTML_FORM_ACTION]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_FORM_ACTION], NULL); HTextImp_foundLink(me->text, element_number, HTML_FORM_ACTION, address, present, value); } break; case HTML_FRAME: if (present[HTML_FRAME_SRC] && value[HTML_FRAME_SRC]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_FRAME_SRC], NULL); HTextImp_foundLink(me->text, element_number, HTML_FRAME_SRC, address, present, value); HTTRACE(SGML_TRACE, "HTML Parser. Frame `%s\'\n" _ value[HTML_FRAME_SRC]); } break; case HTML_INPUT: if (present[HTML_INPUT_SRC] && value[HTML_INPUT_SRC]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_INPUT_SRC], NULL); HTextImp_foundLink(me->text, element_number, HTML_INPUT_SRC, address, present, value); } break; case HTML_IMG: if (present[HTML_IMG_SRC] && value[HTML_IMG_SRC]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_IMG_SRC], NULL); HTextImp_foundLink(me->text, element_number, HTML_IMG_SRC, address, present, value); } break; case HTML_ISINDEX: HTAnchor_setIndex(me->node_anchor); break; case HTML_LINK: if (present[HTML_LINK_HREF] && value[HTML_LINK_HREF]) { HTParentAnchor * dest = NULL; address = HTAnchor_findChildAndLink( me->node_anchor, /* parent */ present[HTML_A_NAME] ? value[HTML_A_NAME] : NULL, /* Tag */ present[HTML_A_HREF] ? value[HTML_A_HREF] : NULL, /* Addresss */ NULL); /* Rels */ dest = HTAnchor_parent(HTAnchor_followMainLink((HTAnchor *) address)); /* If forward reference */ if ((present[HTML_LINK_REL] && value[HTML_LINK_REL])) { char * strval = NULL; char * ptr = NULL; char * relation = NULL; StrAllocCopy(strval, value[HTML_LINK_REL]); ptr = strval; while ((relation = HTNextLWSToken(&ptr)) != NULL) { HTLink_add((HTAnchor *) me->node_anchor, (HTAnchor *) dest, (HTLinkType) HTAtom_caseFor(relation), METHOD_INVALID); } HT_FREE(strval); } /* If reverse reference */ if ((present[HTML_LINK_REV] && value[HTML_LINK_REV])) { char * strval = NULL; char * ptr = NULL; char * relation = NULL; StrAllocCopy(strval, value[HTML_LINK_REV]); ptr = strval; while ((relation = HTNextLWSToken(&ptr)) != NULL) { HTLink_add((HTAnchor *) dest, (HTAnchor *) me->node_anchor, (HTLinkType) HTAtom_caseFor(relation), METHOD_INVALID); } HT_FREE(strval); } /* If we got any type information as well */ if (present[HTML_LINK_TYPE] && value[HTML_LINK_TYPE]) { if (HTAnchor_format(dest) == WWW_UNKNOWN) HTAnchor_setFormat(dest, (HTFormat) HTAtom_caseFor(value[HTML_LINK_TYPE])); } /* Call out to the layout engine */ HTextImp_foundLink(me->text, element_number, HTML_LINK_HREF, address, present, value); } break; case HTML_META: if (present[HTML_META_NAME] && value[HTML_META_NAME]) { HTAnchor_addMeta (me->node_anchor, value[HTML_META_NAME], (present[HTML_META_CONTENT] && value[HTML_META_CONTENT]) ? value[HTML_META_CONTENT] : ""); } break; case HTML_OBJECT: if (present[HTML_OBJECT_CLASSID] && value[HTML_OBJECT_CLASSID]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_OBJECT_CLASSID], NULL); HTextImp_foundLink(me->text, element_number, HTML_OBJECT_CLASSID, address, present, value); } if (present[HTML_OBJECT_CODEBASE] && value[HTML_OBJECT_CODEBASE]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_OBJECT_CODEBASE], NULL); HTextImp_foundLink(me->text, element_number, HTML_OBJECT_CODEBASE, address, present, value); } if (present[HTML_OBJECT_DATA] && value[HTML_OBJECT_DATA]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_OBJECT_DATA], NULL); HTextImp_foundLink(me->text, element_number, HTML_OBJECT_DATA, address, present, value); } if (present[HTML_OBJECT_ARCHIVE] && value[HTML_OBJECT_ARCHIVE]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_OBJECT_ARCHIVE], NULL); HTextImp_foundLink(me->text, element_number, HTML_OBJECT_ARCHIVE, address, present, value); } if (present[HTML_OBJECT_USEMAP] && value[HTML_OBJECT_USEMAP]) { address = HTAnchor_findChildAndLink(me->node_anchor, NULL, value[HTML_OBJECT_USEMAP], NULL); HTextImp_foundLink(me->text, element_number, HTML_OBJECT_USEMAP, address, present, value); } break; case HTML_PRE: if (me->comment_end) HTextImp_addText(me->text, me->comment_end, strlen(me->comment_end)); break; case HTML_TITLE: HTChunk_truncate(me->title,0); break; } /* Update our parse stack */ if (SGML_findTagContents(me->dtd, element_number) != SGML_EMPTY) { if (me->sp == me->stack) { HTTRACE(SGML_TRACE, "HTML Parser. Maximum nesting of %d exceded!\n" _ MAX_NESTING); me->overflow++; return; } --(me->sp); me->sp[0] = element_number; } /* Call out to the layout engine */ HTextImp_beginElement(me->text, element_number, present, value); } PRIVATE void HTML_end_element (HTStructured * me, int element_number) { if (!me->started) { HTextImp_build(me->text, HTEXT_BEGIN); me->started = YES; } /* Update our parse stack */ if (me->overflow > 0) { me->overflow--; return; } me->sp++; if (me->sp > me->stack + MAX_NESTING - 1) { HTTRACE(SGML_TRACE, "HTML Parser. Bottom of parse stack reached\n"); me->sp = me->stack + MAX_NESTING - 1; } /* Look at what element was closed */ switch(element_number) { case HTML_TITLE: HTAnchor_setTitle(me->node_anchor, HTChunk_data(me->title)); break; case HTML_PRE: if (me->comment_start) HTextImp_addText(me->text, me->comment_start, strlen(me->comment_start)); break; } /* Call out to the layout engine */ HTextImp_endElement(me->text, element_number); } PRIVATE void HTML_put_entity (HTStructured * me, int entity_number) { if (!me->started) { HTextImp_build(me->text, HTEXT_BEGIN); me->started = YES; } if (entity_number>=0 && entity_number<HTML_ENTITIES) HTML_put_string(me, *(CurrentEntityValues+entity_number)); } PUBLIC int HTML_flush (HTStructured * me) { if (!me->started) { HTextImp_build(me->text, HTEXT_BEGIN); me->started = YES; } if (me->comment_end) HTML_put_string(me, me->comment_end); return me->target ? FLUSH_TARGET(me) : HT_OK; } PRIVATE int HTML_unparsedBeginElement (HTStructured * me, const char * b, int l) { if (!me->started) { HTextImp_build(me->text, HTEXT_BEGIN); me->started = YES; } HTextImp_unparsedBeginElement(me->text, b, l); return HT_OK; } PRIVATE int HTML_unparsedEndElement (HTStructured * me, const char * b, int l) { if (!me->started) { HTextImp_build(me->text, HTEXT_BEGIN); me->started = YES; } HTextImp_unparsedEndElement(me->text, b, l); return HT_OK; } PRIVATE int HTML_unparsedEntity (HTStructured * me, const char * b, int l) { if (!me->started) { HTextImp_build(me->text, HTEXT_BEGIN); me->started = YES; } HTextImp_unparsedEntity(me->text, b, l); return HT_OK; } PUBLIC int HTML_free (HTStructured * me) { if (!me->started) HTextImp_build(me->text, HTEXT_BEGIN); if (me->comment_end) HTML_put_string(me, me->comment_end); HTextImp_build(me->text, HTEXT_END); HTextImp_delete(me->text); HTChunk_delete(me->title); if (me->target) FREE_TARGET(me); HT_FREE(me); return HT_OK; } PRIVATE int HTML_abort (HTStructured * me, HTList * e) { if (!me->started) HTextImp_build(me->text, HTEXT_BEGIN); HTextImp_build(me->text, HTEXT_ABORT); HTextImp_delete(me->text); HTChunk_delete(me->title); if (me->target) ABORT_TARGET(me); HT_FREE(me); return HT_ERROR; } /* Structured Object Class ** ----------------------- */ PRIVATE const HTStructuredClass HTMLPresentation = /* As opposed to print etc */ { "text/html", HTML_flush, HTML_free, HTML_abort, HTML_put_character, HTML_put_string, HTML_write, HTML_start_element, HTML_end_element, HTML_put_entity, HTML_unparsedBeginElement, HTML_unparsedEndElement, HTML_unparsedEntity }; /* Structured Text object ** ---------------------- ** ** The structured stream can generate either presentation, ** or plain text, or HTML. */ PRIVATE HTStructured * HTML_new (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStructured * me = NULL; if (request) { if ((me = (HTStructured *) HT_CALLOC(1, sizeof(HTStructured))) == NULL) HT_OUTOFMEM("HTML_new"); me->isa = &HTMLPresentation; me->dtd = HTML_dtd(); me->request = request; me->node_anchor = HTRequest_anchor(request); me->title = HTChunk_new(128); me->comment_start = NULL; me->comment_end = NULL; me->target = output_stream; me->sp = me->stack + MAX_NESTING - 1; /* Create the text object */ me->text = HTextImp_new(me->request, me->node_anchor, me->target); } return me; } /* HTConverter for HTML to plain text ** ---------------------------------- ** ** This will convert from HTML to presentation or plain text. */ PUBLIC HTStream * HTMLToPlain (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { return SGML_new(HTML_dtd(), HTML_new( request, NULL, input_format, output_format, output_stream)); } /* HTConverter for HTML to C code ** ------------------------------ ** ** C code is like plain text but all non-preformatted code ** is commented out. ** This will convert from HTML to presentation or plain text. */ PUBLIC HTStream * HTMLToC (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { if (output_stream) { HTStructured * html = NULL; (*output_stream->isa->put_string)(output_stream, "/* "); /* Before title */ html = HTML_new(request, NULL, input_format, output_format, output_stream); html->comment_start = "\n/* "; html->dtd = HTML_dtd(); html->comment_end = " */\n"; /* Must start in col 1 for cpp */ return SGML_new(HTML_dtd(), html); } else return HTErrorStream(); } /* Presenter for HTML ** ------------------ ** ** This will convert from HTML to presentation or plain text. ** ** Override this if you have a windows version */ PUBLIC HTStream * HTMLPresent (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { return SGML_new(HTML_dtd(), HTML_new( request, NULL, input_format, output_format, output_stream)); } ��������������������������������������������������������������������������libwww/Library/src/HTML.html������������������������������������������������������������������������0100644�0000764�0000144�00000003751�06644701607�015416� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTML Parser With Text Object Converter</TITLE> </HEAD> <BODY> <H1> Simple HTML Parser With Text Object Converter </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This interprets the <A HREF="http://www.w3.org/MarkUp/MarkUp.html">HTML</A> semantics passed to it by the <A HREF="SGML.html">SGML parser</A>. It then creates a <A HREF="HText.html">HText object</A> which the application can use to render an HTML object as text comes in over the wire. The <A HREF="HTStyle.html">stylesheet manager</A> can be used to ensure that the rendering is done according to whatever style information is present. <P> This module is implemented by <A HREF="HTML.c">HTML.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTML_H #define HTML_H #include "HTFormat.h" #include "HTMLPDTD.h" </PRE> <H2> Converters </H2> <P> These are the converters implemented in this module. The first converts from HTML to presentation or plain text. <PRE> extern HTConverter HTMLToPlain; </PRE> <P> The next converts from HTML to a simple C like representation. It puts everything not in PRE within C style comments. This is the way that the line mode browser is used to convert the libwww HTML files to C style .h files <PRE> extern HTConverter HTMLToC; </PRE> <P> This one converts the HTML stream to a rendered object using the <A HREF="HText.html">HText interface</A>. <PRE> extern HTConverter HTMLPresent; </PRE> <H2> Selecting Internal Character Set Representation </H2> <P> Only <TT>ISO_LATIN1</TT> is currently supported. <PRE> typedef enum _HTMLCharacterSet { HTML_ISO_LATIN1, HTML_NEXT_CHARS, HTML_PC_CP950 } HTMLCharacterSet; extern BOOL HTMLUseCharacterSet (HTMLCharacterSet charset); </PRE> <PRE> #endif /* end HTML_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTML.html,v 2.36 2025/01/06 15:38:47 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������libwww/Library/src/HTMLGen.c������������������������������������������������������������������������0100644�0000764�0000144�00000032153�06664352703�015325� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTMLGen.c ** HTML GENERATOR ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMLGen.c,v 2.45 2025/02/22 22:10:11 frystyk Exp $ ** ** This version of the HTML object sends HTML markup to the output stream. ** ** Bugs: Line wrapping is not done at all. ** All data handled as PCDATA. ** Should convert old XMP, LISTING and PLAINTEXT to PRE. ** ** It is not obvious to me right now whether the HEAD should be generated ** from the incomming data or the anchor. Currently it is from the former ** which is cleanest. TBL ** ** HISTORY: ** 8 Jul 94 FM Insulate free() from _free structure element. ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTMLPDTD.h" #include "HTStruct.h" #include "HTFormat.h" #include "HTMLGen.h" /* Implemented here */ #define BUFFER_SIZE 80 /* Line buffer attempts to make neat breaks */ #define MAX_CLEANNESS 10 #define PUT_CHAR(c) (*me->target->isa->put_character)(me->target, c) #define PUT_STR(s) (*me->target->isa->put_string)(me->target, s) #define PUT_BLOCK(s,l) (*me->target->isa->put_block)(me->target, s, l) /* HTML Generator Object */ struct _HTStream { const HTStreamClass * isa; HTStream * target; }; struct _HTStructured { const HTStructuredClass * isa; HTStream * target; const SGML_dtd * dtd; BOOL seven_bit; /* restrict output */ char buffer[BUFFER_SIZE+1]; char * write_pointer; char * line_break [MAX_CLEANNESS+1]; int cleanness; BOOL overflowed; BOOL delete_line_break_char[MAX_CLEANNESS+1]; char preformatted; }; /* OUTPUT FUNCTIONS ** ** These function output the finished SGML stream doing the ** line wrap */ /* Flush Buffer ** ------------ */ PRIVATE void flush_breaks (HTStructured * me) { int i; for (i=0; i<= MAX_CLEANNESS; i++) { me->line_break[i] = NULL; } } PRIVATE int HTMLGen_flush (HTStructured * me) { PUT_BLOCK(me->buffer, me->write_pointer - me->buffer); me->write_pointer = me->buffer; flush_breaks(me); me->cleanness = 0; return HT_OK; } /* Weighted optional line break ** ** We keep track of all the breaks for when we chop the line */ PRIVATE void allow_break (HTStructured * me, int new_cleanness, BOOL dlbc) { me->line_break[new_cleanness] = dlbc ? me->write_pointer - 1 /* Point to space */ : me->write_pointer ; /* point to gap */ me->delete_line_break_char[new_cleanness] = dlbc; if (new_cleanness >= me->cleanness) me->cleanness = new_cleanness; } /* Character handling ** ------------------ ** ** The tricky bits are the line break handling. This attempts ** to synchrononise line breaks on sentence or phrase ends. This ** is important if one stores SGML files in a line-oriented code ** repository, so that if a small change is made, line ends don't ** shift in a ripple-through to apparently change a large part of the ** file. We give extra "cleanness" to spaces appearing directly ** after periods (full stops), [semi]colons and commas. ** This should make the source files easier to read and modify ** by hand, too, though this is not a primary design consideration. TBL */ PRIVATE char delims[] = ",;:."; /* @@ english bias */ PRIVATE int HTMLGen_output_character (HTStructured * me, char c) { *me->write_pointer++ = c; if (c=='\n') { /* Newlines */ if (me->preformatted) { HTMLGen_flush(me); return HT_OK; } else { me->write_pointer[-1] = c = ' '; /* Treat same as space */ } } /* Figure our whether we can break at this point */ if ((!me->preformatted && c==' ')) { int new_cleanness = 1; if (me->write_pointer > (me->buffer + 1)) { char * p; p = strchr(delims, me->write_pointer[-2]); if (p) new_cleanness = p - delims + 4; } allow_break(me, new_cleanness, YES); } /* Flush buffer out when full, or whenever the line is over the nominal maximum and we can break at all */ if (me->write_pointer >= me->buffer + BUFFER_SIZE-1 || (me->overflowed && me->cleanness)) { if (me->cleanness) { char line_break_char = me->line_break[me->cleanness][0]; char * saved = me->line_break[me->cleanness]; if (me->delete_line_break_char[me->cleanness]) saved++; me->line_break[me->cleanness][0] = '\n'; PUT_BLOCK(me->buffer, me->line_break[me->cleanness]-me->buffer+1); me->line_break[me->cleanness][0] = line_break_char; { /* move next line in */ char * p=saved; char *q; for(q=me->buffer; p < me->write_pointer; ) *q++ = *p++; } me->cleanness = 0; /* Now we have to check whether ther are any perfectly good breaks ** which weren't good enough for the last line but may be ** good enough for the next */ { int i; for(i=0; i <= MAX_CLEANNESS; i++) { if (me->line_break[i] > saved) { me->line_break[i] = me->line_break[i] - (saved-me->buffer); me->cleanness = i; } else { me->line_break[i] = NULL; } } } me->write_pointer = me->write_pointer - (saved-me->buffer); me->overflowed = NO; } else { /* No break- just output with no newline */ PUT_BLOCK(me->buffer, me->write_pointer - me->buffer); me->write_pointer = me->buffer; flush_breaks(me); me->overflowed = YES; } } return HT_OK; } /* String handling ** --------------- */ PRIVATE int HTMLGen_output_string (HTStructured * me, const char* s) { while (*s) HTMLGen_output_character(me, *s++); return HT_OK; } /* INPUT FUNCTIONS ** ** These take data from the structured stream. In the input ** stream, entities are in raw form. The seven_bit flag controls ** whether the ISO Latin-1 charactrs are represented in SGML entity ** form. This is only recommended for viewing on older non-latin-1 ** capable equipment, or for mailing for example. ** ** Bug: assumes local encoding is ISO! */ PRIVATE int HTMLGen_put_character (HTStructured * me, char c) { if (c=='&') HTMLGen_output_string(me, "&"); else if (c=='<') HTMLGen_output_string(me, "&lt;"); else if (me->seven_bit && ((unsigned char)c > 127)) { char temp[8]; sprintf(temp, "&%d;", c); HTMLGen_output_string(me, temp); } else HTMLGen_output_character(me, c); return HT_OK; } PRIVATE int HTMLGen_put_string (HTStructured * me, const char* s) { while (*s) HTMLGen_put_character(me, *s++); return HT_OK; } PRIVATE int HTMLGen_write (HTStructured * me, const char* b, int l) { while (l-- > 0) HTMLGen_put_character(me, *b++); return HT_OK; } /* Start Element ** ------------- ** ** Within the opening tag, there may be spaces ** and the line may be broken at these spaces. */ PRIVATE void HTMLGen_start_element ( HTStructured * me, int element_number, const BOOL* present, const char ** value) { int i; HTTag * tag = &me->dtd->tags[element_number]; /* Control line breaks allowed within tag! */ int was_preformatted = me->preformatted; /* save state */ me->preformatted = 1; /* Can break between attributes */ HTMLGen_output_character(me, '<'); HTMLGen_output_string(me, tag->name); if (present) for (i=0; i< tag->number_of_attributes; i++) { if (present[i]) { HTMLGen_output_character(me, ' '); allow_break(me, 1, YES); HTMLGen_output_string(me, tag->attributes[i].name); if (value[i]) { HTMLGen_output_string(me, "=\""); HTMLGen_output_string(me, value[i]); HTMLGen_output_character(me, '"'); } } } me->preformatted = was_preformatted; /* Restore state */ /* Nested PRE is no more a problem! */ if (element_number == HTML_PRE) me->preformatted++; HTMLGen_output_character(me, '>'); /* Here is a funny one. In PRE, newlines are significant, except of course for one after the <PRE> which is ignored. This means that we MUST put in a dummy one after the <PRE> to protect any real newline within the pre section. However, *within* a PRE section, although we can break after (for example) emphasis start tags, it will probably confuse some parsers so we won't.*/ if (element_number == HTML_PRE) { HTMLGen_output_character(me, '\n'); } else if (!me->preformatted && tag->contents != SGML_EMPTY) { /* can break after element start */ allow_break(me, 3, NO); } } /* End Element ** ----------- ** ** The rules for insertring CR LF into SGML are weird, strict, and ** nonintitive. ** See comment also about PRE above. */ PRIVATE void HTMLGen_end_element (HTStructured * me, int element_number) { if (element_number == HTML_PRE) { HTMLGen_output_character(me, '\n'); } else if (!me->preformatted) { /* can break before element end */ allow_break(me, 1, NO); } HTMLGen_output_string(me, "</"); HTMLGen_output_string(me, me->dtd->tags[element_number].name); HTMLGen_output_character(me, '>'); /* NO break after. TBL 940501 */ if (element_number == HTML_PRE && me->preformatted) me->preformatted--; } /* Expanding entities ** ------------------ ** */ PRIVATE void HTMLGen_put_entity (HTStructured * me, int entity_number) { HTMLGen_output_character(me, '&'); HTMLGen_output_string(me, me->dtd->entity_names[entity_number]); HTMLGen_output_character(me, ';'); } /* Free an object ** -------------- ** */ PRIVATE int HTMLGen_free (HTStructured * me) { HTMLGen_flush(me); PUT_CHAR('\n'); (*me->target->isa->_free)(me->target); HT_FREE(me); return HT_OK; } PRIVATE int PlainToHTML_free (HTStructured * me) { HTMLGen_end_element(me, HTML_PRE); HTMLGen_end_element(me, HTML_BODY); HTMLGen_end_element(me, HTML_HTML); HTMLGen_free(me); return HT_OK; } PRIVATE int HTMLGen_abort (HTStructured * me, HTList * e) { HTMLGen_free(me); return HT_ERROR; } PRIVATE int PlainToHTML_abort (HTStructured * me, HTList * e) { PlainToHTML_free(me); return HT_ERROR; } /* Structured Object Class ** ----------------------- */ PRIVATE const HTStructuredClass HTMLGeneration = /* As opposed to print etc */ { "text/html", HTMLGen_flush, HTMLGen_free, HTMLGen_abort, HTMLGen_put_character, HTMLGen_put_string, HTMLGen_write, HTMLGen_start_element, HTMLGen_end_element, HTMLGen_put_entity }; /* Subclass-specific Methods ** ------------------------- */ PUBLIC HTStructured* HTMLGenerator (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStructured* me; if ((me = (HTStructured *) HT_CALLOC(1, sizeof(HTStructured))) == NULL) HT_OUTOFMEM("HTMLGenerator"); me->isa = &HTMLGeneration; me->dtd = HTML_dtd(); if ((me->target = HTStreamStack(WWW_HTML, output_format, output_stream, request, YES)) == NULL) { HTTRACE(STREAM_TRACE, "HTMLGen..... Can't convert to media type\n"); HT_FREE(me); me->target = HTErrorStream(); } me->write_pointer = me->buffer; flush_breaks(me); return me; } /* Stream Object Class ** ------------------- ** ** This object just converts a plain text stream into HTML ** It is officially a structured stream but only the stream bits exist. ** This is just the easiest way of typecasting all the routines. */ PRIVATE const HTStructuredClass PlainToHTMLConversion = { "plaintexttoHTML", HTMLGen_flush, PlainToHTML_free, /* HTMLGen_free, Henrik 03/03-94 */ PlainToHTML_abort, HTMLGen_put_character, HTMLGen_put_string, HTMLGen_write, NULL, /* Structured stuff */ NULL, NULL }; /* HTConverter from plain text to HTML Stream ** ------------------------------------------ ** ** Changed by henrik 03/03-94, so no more core dumps etc. (I hope!!!) */ PUBLIC HTStream* HTPlainToHTML (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { BOOL present[MAX_ATTRIBUTES]; /* Flags: attribute is present? */ const char *value[MAX_ATTRIBUTES]; /* malloc'd strings or NULL if none */ HTStructured* me; if ((me = (HTStructured *) HT_CALLOC(1,sizeof(*me))) == NULL) HT_OUTOFMEM("PlainToHTML"); memset((void *) present, '\0', MAX_ATTRIBUTES); memset((void *) value, '\0', MAX_ATTRIBUTES*sizeof(char *)); me->isa = (HTStructuredClass*) &PlainToHTMLConversion; me->dtd = HTML_dtd(); me->target = output_stream; me->write_pointer = me->buffer; flush_breaks(me); if (me->target) { HTMLGen_start_element(me, HTML_HTML, present, value); HTMLGen_start_element(me, HTML_BODY, present, value); HTMLGen_start_element(me, HTML_PRE, present, value); } return (HTStream*) me; } /* A safe version for making 7-bit restricted HTML ** Beware that thsi makes it horrible for the Scandinavians ** to actually read it. ** ehh - not horrible - THIS REALLY PISSES THEM OFF - Henrik ;-) */ PUBLIC HTStream* HTPlainTo7BitHTML (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream* me = HTPlainToHTML(request,param,input_format, output_format, output_stream); ((HTStructured*)me)->seven_bit = YES; return me; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMLGen.html���������������������������������������������������������������������0100644�0000764�0000144�00000002353�06526451243�016042� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTML GENERATOR</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>HTML generator</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module converts structed stream into stream. That is, given a stream to write to, it will give you a structured stream to. <P> This module is implemented by <A HREF="HTMLGen.c">HTMLGen.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTMLGEN_H #define HTMLGEN_H #include "HTStruct.h" #include "HTFormat.h" </PRE> The HTML generator stream is almost a converter stream but it returns a structured stream instead of a generic stream. The difference is that a structured stream has methods for starting and ending mark up elements and for HTML/SGML entities. <PRE> extern HTStructured* HTMLGenerator (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream); extern HTConverter HTPlainToHTML; #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTMLGen.html,v 2.23 2025/05/14 02:10:43 frystyk Exp $ </ADDRESS> </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMLPDTD.c�����������������������������������������������������������������������0100644�0000764�0000144�00000066366�06745727770�015376� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTMLPDTD.c ** STATIC DTD FOR HTML (with frame support) ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMLPDTD.c,v 2.32 2025/07/22 23:57:44 raff Exp $ ** ** 6 Nov 93 MD Increased size of img_attr array to make space ** for terminator. */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTMLPDTD.h" struct _HTStructured { HTStructuredClass * isa; /* ... */ }; /* ** ENTITY NAMES ** This table must be matched exactly with ALL the translation tables */ PRIVATE const char* entities[HTML_ENTITIES] = { /* 00 */ "AElig", /* capital AE diphthong (ligature) */ "Aacute", /* capital A, acute accent */ "Acirc", /* capital A, circumflex accent */ "Agrave", /* capital A, grave accent */ "Aring", /* capital A, ring */ "Atilde", /* capital A, tilde */ "Auml", /* capital A, dieresis or umlaut mark */ "Ccedil", /* capital C, cedilla */ "ETH", /* capital Eth, Icelandic */ "Eacute", /* capital E, acute accent */ /* 10 */ "Ecirc", /* capital E, circumflex accent */ "Egrave", /* capital E, grave accent */ "Euml", /* capital E, dieresis or umlaut mark */ "Iacute", /* capital I, acute accent */ "Icirc", /* capital I, circumflex accent */ "Igrave", /* capital I, grave accent */ "Iuml", /* capital I, dieresis or umlaut mark */ "Ntilde", /* capital N, tilde */ "Oacute", /* capital O, acute accent */ "Ocirc", /* capital O, circumflex accent */ /* 20 */ "Ograve", /* capital O, grave accent */ "Oslash", /* capital O, slash */ "Otilde", /* capital O, tilde */ "Ouml", /* capital O, dieresis or umlaut mark */ "THORN", /* capital THORN, Icelandic */ "Uacute", /* capital U, acute accent */ "Ucirc", /* capital U, circumflex accent */ "Ugrave", /* capital U, grave accent */ "Uuml", /* capital U, dieresis or umlaut mark */ "Yacute", /* capital Y, acute accent */ /* 30 */ "aacute", /* small a, acute accent */ "acirc", /* small a, circumflex accent */ "acute", /* acute accent */ "aelig", /* small ae diphthong (ligature) */ "agrave", /* small a, grave accent */ "amp", /* ampersand */ "aring", /* small a, ring */ "atilde", /* small a, tilde */ "auml", /* small a, dieresis or umlaut mark */ "brvbar", /* broken vertical bar */ /* 40 */ "ccedil", /* small c, cedilla */ "cedil", /* cedilla */ "cent", /* cent sign */ "copy", /* copyright */ "curren", /* general currency sign */ "deg", /* degree sign */ "divide", /* division sign */ "eacute", /* small e, acute accent */ "ecirc", /* small e, circumflex accent */ "egrave", /* small e, grave accent */ /* 50 */ "eth", /* small eth, Icelandic */ "euml", /* small e, dieresis or umlaut mark */ "frac12", /* fraction one-half */ "frac14", /* fraction one-fourth */ "frac34", /* fraction three-fourth */ "gt", /* greater than */ "iacute", /* small i, acute accent */ "icirc", /* small i, circumflex accent */ "iexcl", /* inverted exclamation */ "igrave", /* small i, grave accent */ /* 60 */ "iquest", /* inverted question mark */ "iuml", /* small i, dieresis or umlaut mark */ "laquo", /* left angle quote */ "lt", /* less than */ "macr", /* macron accent */ "micro", /* micro sign (greek mu) */ "middot", /* middle dot */ "nbsp", /* non breaking space */ "not", /* not sign */ "ntilde", /* small n, tilde */ /* 70 */ "oacute", /* small o, acute accent */ "ocirc", /* small o, circumflex accent */ "ograve", /* small o, grave accent */ "ordf", /* feminine ordinal */ "ordm", /* masculine ordinal */ "oslash", /* small o, slash */ "otilde", /* small o, tilde */ "ouml", /* small o, dieresis or umlaut mark */ "para", /* paragraph sign */ "plusmn", /* plus or minus */ /* 80 */ "pound", /* pound sign */ "quot", /* double quote sign - June 1994 */ "raquo", /* right angle quote */ "reg", /* registered trademark */ "sect", /* section sign */ "shi", /* soft hyphen */ "sup1", /* superscript 1 */ "sup2", /* superscript 2 */ "sup3", /* superscript 3 */ "szlig", /* small sharp s, German (sz ligature) */ /* 90 */ "thorn", /* small thorn, Icelandic */ "times", /* multiply sign */ "uacute", /* small u, acute accent */ "ucirc", /* small u, circumflex accent */ "ugrave", /* small u, grave accent */ "uml", /* dieresis or umlaut mark */ "uuml", /* small u, dieresis or umlaut mark */ "yacute", /* small y, acute accent */ "yen", /* yen sign */ "yuml" /* small y, dieresis or umlaut mark */ /* 100 */ }; /* ** ATTRIBUTE DEFINITION MACROS (see HTMLPDTD.h) */ /* * redefine the macros, so that the "stringized" attribute name * is generated */ #undef HTML_ATTR #define HTML_ATTR(t,a) { #a } #undef HTML_ATTRIBUTES #define HTML_ATTRIBUTES(t) { 0 } /* ** ATTRIBUTE LISTS */ PRIVATE HTAttr no_attr[1] = {{ 0 }}; PRIVATE HTAttr body_attr[HTML_BODY_ATTRIBUTES+1] = { /* to catch images */ HTML_ATTR(BODY,ALINK), HTML_ATTR(BODY,BACKGROUND), HTML_ATTR(BODY,BGCOLOR), HTML_ATTR(BODY,CLASS), HTML_ATTR(BODY,DIR), HTML_ATTR(BODY,ID), HTML_ATTR(BODY,LANG), HTML_ATTR(BODY,LINK), HTML_ATTR(BODY,STYLE), HTML_ATTR(BODY,TEXT), HTML_ATTR(BODY,TITLE), HTML_ATTR(BODY,VLINK), HTML_ATTRIBUTES(BODY) }; PRIVATE HTAttr frame_attr[HTML_FRAME_ATTRIBUTES+1] = { /* frame attributes */ HTML_ATTR(FRAME,CLASS), HTML_ATTR(FRAME,FRAMEBORDER), HTML_ATTR(FRAME,ID), HTML_ATTR(FRAME,NAME), HTML_ATTR(FRAME,MARGINHEIGHT), HTML_ATTR(FRAME,MARGINWIDTH), HTML_ATTR(FRAME,NORESIZE), HTML_ATTR(FRAME,LONGDESC), HTML_ATTR(FRAME,SCROLLING), HTML_ATTR(FRAME,SRC), HTML_ATTR(FRAME,STYLE), HTML_ATTR(FRAME,TARGET), HTML_ATTR(FRAME,TITLE), HTML_ATTRIBUTES(FRAME) }; PRIVATE HTAttr frameset_attr[HTML_FRAMESET_ATTRIBUTES+1] = { /* frameset attributes */ HTML_ATTR(FRAMESET,CLASS), HTML_ATTR(FRAMESET,COLS), HTML_ATTR(FRAMESET,ID), HTML_ATTR(FRAMESET,ROWS), HTML_ATTR(FRAMESET,STYLE), HTML_ATTR(FRAMESET,TITLE), HTML_ATTRIBUTES(FRAMESET) }; PRIVATE HTAttr a_attr[HTML_A_ATTRIBUTES+1] = { /* Anchor attributes */ HTML_ATTR(A,ACCESSKEY), HTML_ATTR(A,CHARSET), HTML_ATTR(A,CLASS), HTML_ATTR(A,COORDS), HTML_ATTR(A,DIR), HTML_ATTR(A,HREF), HTML_ATTR(A,HREFLANG), HTML_ATTR(A,ID), HTML_ATTR(A,NAME), HTML_ATTR(A,REL), HTML_ATTR(A,REV), HTML_ATTR(A,SHAPE), HTML_ATTR(A,STYLE), HTML_ATTR(A,TABINDEX), HTML_ATTR(A,TARGET), HTML_ATTR(A,TYPE), HTML_ATTR(A,TITLE), HTML_ATTRIBUTES(A) }; PRIVATE HTAttr applet_attr[HTML_APPLET_ATTRIBUTES+1] = { HTML_ATTR(APPLET,ALIGN), HTML_ATTR(APPLET,ALT), HTML_ATTR(APPLET,ARCHIVE), HTML_ATTR(APPLET,CLASS), HTML_ATTR(APPLET,CODE), HTML_ATTR(APPLET,CODEBASE), HTML_ATTR(APPLET,HEIGHT), HTML_ATTR(APPLET,HSPACE), HTML_ATTR(APPLET,ID), HTML_ATTR(APPLET,NAME), HTML_ATTR(APPLET,OBJECT), HTML_ATTR(APPLET,STYLE), HTML_ATTR(APPLET,TITLE), HTML_ATTR(APPLET,VSPACE), HTML_ATTR(APPLET,WIDTH), HTML_ATTRIBUTES(APPLET) }; PRIVATE HTAttr area_attr[HTML_AREA_ATTRIBUTES+1] = { /* Area attributes */ HTML_ATTR(AREA,ACCESSKEY), HTML_ATTR(AREA,ALT), HTML_ATTR(AREA,CLASS), HTML_ATTR(AREA,COORDS), HTML_ATTR(AREA,DIR), HTML_ATTR(AREA,HREF), HTML_ATTR(AREA,ID), HTML_ATTR(AREA,NAME), HTML_ATTR(AREA,NOHREF), HTML_ATTR(AREA,LANG), HTML_ATTR(AREA,SHAPE), HTML_ATTR(AREA,STYLE), HTML_ATTR(AREA,TABINDEX), HTML_ATTR(AREA,TARGET), HTML_ATTR(AREA,TITLE), HTML_ATTRIBUTES(AREA) }; PRIVATE HTAttr base_attr[HTML_BASE_ATTRIBUTES+1] = { /* BASE attributes */ HTML_ATTR(BASE,HREF), HTML_ATTR(BASE,TARGET), HTML_ATTRIBUTES(BASE) }; PRIVATE HTAttr bdo_attr[HTML_BDO_ATTRIBUTES+1] = { HTML_ATTR(BDO,CLASS), HTML_ATTR(BDO,DIR), HTML_ATTR(BDO,ID), HTML_ATTR(BDO,LANG), HTML_ATTR(BDO,STYLE), HTML_ATTR(BDO,TITLE), HTML_ATTRIBUTES(BDO) }; PRIVATE HTAttr bq_attr[HTML_BQ_ATTRIBUTES+1] = { HTML_ATTR(BQ,CITE), HTML_ATTR(BQ,CLASS), HTML_ATTR(BQ,DIR), HTML_ATTR(BQ,ID), HTML_ATTR(BQ,LANG), HTML_ATTR(BQ,STYLE), HTML_ATTR(BQ,TITLE), HTML_ATTRIBUTES(BQ) }; PRIVATE HTAttr br_attr[HTML_BR_ATTRIBUTES+1] = { HTML_ATTR(BR,CLASS), HTML_ATTR(BR,CLEAR), HTML_ATTR(BR,ID), HTML_ATTR(BR,STYLE), HTML_ATTR(BR,TITLE), HTML_ATTRIBUTES(BR) }; PRIVATE HTAttr button_attr[HTML_BUTTON_ATTRIBUTES+1] = { HTML_ATTR(BUTTON,ACCESSKEY), HTML_ATTR(BUTTON,CLASS), HTML_ATTR(BUTTON,DIR), HTML_ATTR(BUTTON,DISABLED), HTML_ATTR(BUTTON,ID), HTML_ATTR(BUTTON,LANG), HTML_ATTR(BUTTON,NAME), HTML_ATTR(BUTTON,STYLE), HTML_ATTR(BUTTON,TABINDEX), HTML_ATTR(BUTTON,TITLE), HTML_ATTR(BUTTON,TYPE), HTML_ATTR(BUTTON,VALUE), HTML_ATTRIBUTES(BUTTON), }; PRIVATE HTAttr col_attr[HTML_COL_ATTRIBUTES+1] = { HTML_ATTR(COL,CLASS), HTML_ATTR(COL,DIR), HTML_ATTR(COL,ID), HTML_ATTR(COL,LANG), HTML_ATTR(COL,SPAN), HTML_ATTR(COL,STYLE), HTML_ATTR(COL,TITLE), HTML_ATTR(COL,WIDTH), HTML_ATTRIBUTES(COL) }; PRIVATE HTAttr changes_attr[HTML_CHANGES_ATTRIBUTES+1] = { HTML_ATTR(CHANGES,CITE), HTML_ATTR(CHANGES,CLASS), HTML_ATTR(CHANGES,DATETIME), HTML_ATTR(CHANGES,DIR), HTML_ATTR(CHANGES,ID), HTML_ATTR(CHANGES,LANG), HTML_ATTR(CHANGES,STYLE), HTML_ATTR(CHANGES,TITLE), HTML_ATTRIBUTES(CHANGES) }; PRIVATE HTAttr font_attr[HTML_FONT_ATTRIBUTES+1] = { HTML_ATTR(FONT,CLASS), HTML_ATTR(FONT,COLOR), HTML_ATTR(FONT,DIR), HTML_ATTR(FONT,FACE), HTML_ATTR(FONT,ID), HTML_ATTR(FONT,LANG), HTML_ATTR(FONT,SIZE), HTML_ATTR(FONT,STYLE), HTML_ATTR(FONT,TITLE), HTML_ATTRIBUTES(FONT) }; PRIVATE HTAttr form_attr[HTML_FORM_ATTRIBUTES+1] = { HTML_ATTR(FORM,ACCEPT), { "ACCEPT-CHARSET" }, /* HTML_ATTR(FORM,ACCEPT_CHARSET) */ HTML_ATTR(FORM,ACTION), HTML_ATTR(FORM,CLASS), HTML_ATTR(FORM,DIR), HTML_ATTR(FORM,ENCTYPE), HTML_ATTR(FORM,ID), HTML_ATTR(FORM,LANG), HTML_ATTR(FORM,METHOD), HTML_ATTR(FORM,STYLE), HTML_ATTR(FORM,TARGET), HTML_ATTR(FORM,TITLE), HTML_ATTRIBUTES(FORM) }; PRIVATE HTAttr gen_attr[HTML_GEN_ATTRIBUTES+1] = { /* General, for many things */ HTML_ATTR(GEN,CLASS), HTML_ATTR(GEN,DIR), HTML_ATTR(GEN,ID), HTML_ATTR(GEN,LANG), HTML_ATTR(GEN,STYLE), HTML_ATTR(GEN,TITLE), HTML_ATTRIBUTES(GEN) }; PRIVATE HTAttr block_attr[HTML_BLOCK_ATTRIBUTES+1] = { /* DIV, SPAN, H1-H6 */ HTML_ATTR(BLOCK,ALIGN), HTML_ATTR(BLOCK,CLASS), HTML_ATTR(BLOCK,DIR), HTML_ATTR(BLOCK,ID), HTML_ATTR(BLOCK,LANG), HTML_ATTR(BLOCK,STYLE), HTML_ATTR(BLOCK,TITLE), HTML_ATTRIBUTES(BLOCK) }; PRIVATE HTAttr head_attr[HTML_HEAD_ATTRIBUTES+1] = { HTML_ATTR(HEAD,DIR), HTML_ATTR(HEAD,LANG), HTML_ATTR(HEAD,PROFILE), HTML_ATTRIBUTES(HEAD) }; PRIVATE HTAttr hr_attr[HTML_HR_ATTRIBUTES+1] = { HTML_ATTR(HR,ALIGN), HTML_ATTR(HR,CLASS), HTML_ATTR(HR,DIR), HTML_ATTR(HR,ID), HTML_ATTR(HR,LANG), HTML_ATTR(HR,NOSHADE), HTML_ATTR(HR,SIZE), HTML_ATTR(HR,STYLE), HTML_ATTR(HR,TITLE), HTML_ATTR(HR,WIDTH), HTML_ATTRIBUTES(HR) }; PRIVATE HTAttr html_attr[HTML_HTML_ATTRIBUTES+1] = { HTML_ATTR(HTML,DIR), HTML_ATTR(HTML,LANG), HTML_ATTR(HTML,VERSION), HTML_ATTRIBUTES(HTML) }; PRIVATE HTAttr iframe_attr[HTML_IFRAME_ATTRIBUTES+1] = { HTML_ATTR(IFRAME,ALIGN), HTML_ATTR(IFRAME,CLASS), HTML_ATTR(IFRAME,FRAMEBORDER), HTML_ATTR(IFRAME,HEIGHT), HTML_ATTR(IFRAME,ID), HTML_ATTR(IFRAME,LONGDESC), HTML_ATTR(IFRAME,MARGINHEIGHT), HTML_ATTR(IFRAME,MARGINWIDTH), HTML_ATTR(IFRAME,NAME), HTML_ATTR(IFRAME,SCROLLING), HTML_ATTR(IFRAME,SRC), HTML_ATTR(IFRAME,STYLE), HTML_ATTR(IFRAME,TARGET), HTML_ATTR(IFRAME,TITLE), HTML_ATTR(IFRAME,WIDTH), HTML_ATTRIBUTES(IFRAME) }; PRIVATE HTAttr img_attr[HTML_IMG_ATTRIBUTES+1] = { /* IMG attributes */ HTML_ATTR(IMG,ALIGN), HTML_ATTR(IMG,ALT), HTML_ATTR(IMG,BORDER), HTML_ATTR(IMG,CLASS), HTML_ATTR(IMG,DIR), HTML_ATTR(IMG,HEIGHT), HTML_ATTR(IMG,HSPACE), HTML_ATTR(IMG,ID), HTML_ATTR(IMG,ISMAP), HTML_ATTR(IMG,LANG), HTML_ATTR(IMG,LONGDESC), HTML_ATTR(IMG,SRC), HTML_ATTR(IMG,STYLE), HTML_ATTR(IMG,TITLE), HTML_ATTR(IMG,USEMAP), HTML_ATTR(IMG,VSPACE), HTML_ATTR(IMG,WIDTH), HTML_ATTRIBUTES(IMG) }; PRIVATE HTAttr input_attr[HTML_INPUT_ATTRIBUTES+1] = { HTML_ATTR(INPUT,ACCEPT), HTML_ATTR(INPUT,ACCESSKEY), HTML_ATTR(INPUT,ALIGN), HTML_ATTR(INPUT,ALT), HTML_ATTR(INPUT,CHECKED), HTML_ATTR(INPUT,CLASS), HTML_ATTR(INPUT,DIR), HTML_ATTR(INPUT,DISABLED), HTML_ATTR(INPUT,ID), HTML_ATTR(INPUT,LANG), HTML_ATTR(INPUT,MAXLENGTH), HTML_ATTR(INPUT,NAME), HTML_ATTR(INPUT,READONLY), HTML_ATTR(INPUT,SIZE), HTML_ATTR(INPUT,SRC), HTML_ATTR(INPUT,STYLE), HTML_ATTR(INPUT,TABINDEX), HTML_ATTR(INPUT,TITLE), HTML_ATTR(INPUT,TYPE), HTML_ATTR(INPUT,USEMAP), HTML_ATTR(INPUT,VALUE), HTML_ATTRIBUTES(INPUT) }; PRIVATE HTAttr isindex_attr[HTML_ISINDEX_ATTRIBUTES+1] = { HTML_ATTR(ISINDEX,CLASS), HTML_ATTR(ISINDEX,DIR), HTML_ATTR(ISINDEX,ID), HTML_ATTR(ISINDEX,LANG), HTML_ATTR(ISINDEX,PROMPT), HTML_ATTR(ISINDEX,STYLE), HTML_ATTR(ISINDEX,TITLE), HTML_ATTRIBUTES(ISINDEX) }; PRIVATE HTAttr label_attr[HTML_LABEL_ATTRIBUTES+1] = { HTML_ATTR(LABEL,ACCESSKEY), HTML_ATTR(LABEL,CLASS), HTML_ATTR(LABEL,DIR), HTML_ATTR(LABEL,FOR), HTML_ATTR(LABEL,ID), HTML_ATTR(LABEL,LANG), HTML_ATTR(LABEL,STYLE), HTML_ATTR(LABEL,TITLE), HTML_ATTRIBUTES(LABEL) }; PRIVATE HTAttr legend_attr[HTML_LEGEND_ATTRIBUTES+1] = { HTML_ATTR(LEGEND,ACCESSKEY), HTML_ATTR(LEGEND,ALIGN), HTML_ATTR(LEGEND,CLASS), HTML_ATTR(LEGEND,DIR), HTML_ATTR(LEGEND,ID), HTML_ATTR(LEGEND,LANG), HTML_ATTR(LEGEND,STYLE), HTML_ATTR(LEGEND,TITLE), HTML_ATTRIBUTES(LEGEND) }; PRIVATE HTAttr li_attr[HTML_LI_ATTRIBUTES+1] = { HTML_ATTR(LI,CLASS), HTML_ATTR(LI,COMPACT), HTML_ATTR(LI,DIR), HTML_ATTR(LI,ID), HTML_ATTR(LI,LANG), HTML_ATTR(LI,STYLE), HTML_ATTR(LI,TITLE), HTML_ATTR(LI,TYPE), HTML_ATTR(LI,VALUE), HTML_ATTRIBUTES(LI) }; PRIVATE HTAttr link_attr[HTML_LINK_ATTRIBUTES+1] = { /* link attributes */ HTML_ATTR(LINK,CHARSET), HTML_ATTR(LINK,CLASS), HTML_ATTR(LINK,DIR), HTML_ATTR(LINK,HREF), HTML_ATTR(LINK,HREFLANG), HTML_ATTR(LINK,ID), HTML_ATTR(LINK,LANG), HTML_ATTR(LINK,MEDIA), HTML_ATTR(LINK,REL), HTML_ATTR(LINK,REV), HTML_ATTR(LINK,STYLE), HTML_ATTR(LINK,TARGET), HTML_ATTR(LINK,TITLE), HTML_ATTR(LINK,TYPE), HTML_ATTRIBUTES(LINK) }; PRIVATE HTAttr map_attr[HTML_MAP_ATTRIBUTES+1] = { HTML_ATTR(MAP,CLASS), HTML_ATTR(MAP,DIR), HTML_ATTR(MAP,ID), HTML_ATTR(MAP,LANG), HTML_ATTR(MAP,NAME), HTML_ATTR(MAP,STYLE), HTML_ATTR(MAP,TITLE), HTML_ATTRIBUTES(MAP) }; PRIVATE HTAttr meta_attr[HTML_META_ATTRIBUTES+1] = { HTML_ATTR(META,CONTENT), HTML_ATTR(META,DIR), { "HTTP-EQUIV" }, /* HTML_ATTR(META,HTTP_EQUIV) */ HTML_ATTR(META,LANG), HTML_ATTR(META,NAME), HTML_ATTR(META,SCHEME), HTML_ATTRIBUTES(META) }; PRIVATE HTAttr nextid_attr[HTML_NEXTID_ATTRIBUTES+1] = { { "N" }, { 0 } /* Terminate list */ }; PRIVATE HTAttr object_attr[HTML_OBJECT_ATTRIBUTES+1] = { /* object attributes */ HTML_ATTR(OBJECT,ALIGN), HTML_ATTR(OBJECT,ARCHIVE), HTML_ATTR(OBJECT,BORDER), HTML_ATTR(OBJECT,CLASS), HTML_ATTR(OBJECT,CLASSID), HTML_ATTR(OBJECT,CODEBASE), HTML_ATTR(OBJECT,CODETYPE), HTML_ATTR(OBJECT,DATA), HTML_ATTR(OBJECT,DECLARE), HTML_ATTR(OBJECT,DIR), HTML_ATTR(OBJECT,HEIGHT), HTML_ATTR(OBJECT,HSPACE), HTML_ATTR(OBJECT,ID), HTML_ATTR(OBJECT,LANG), HTML_ATTR(OBJECT,NAME), HTML_ATTR(OBJECT,STANDBY), HTML_ATTR(OBJECT,STYLE), HTML_ATTR(OBJECT,TABINDEX), HTML_ATTR(OBJECT,TITLE), HTML_ATTR(OBJECT,TYPE), HTML_ATTR(OBJECT,USEMAP), HTML_ATTR(OBJECT,VSPACE), HTML_ATTR(OBJECT,WIDTH), HTML_ATTRIBUTES(OBJECT) }; PRIVATE HTAttr ol_attr[HTML_OL_ATTRIBUTES+1] = { HTML_ATTR(OL,CLASS), HTML_ATTR(OL,COMPACT), HTML_ATTR(OL,DIR), HTML_ATTR(OL,ID), HTML_ATTR(OL,LANG), HTML_ATTR(OL,START), HTML_ATTR(OL,STYLE), HTML_ATTR(OL,TITLE), HTML_ATTR(OL,TYPE), HTML_ATTRIBUTES(OL) }; PRIVATE HTAttr optgroup_attr[HTML_OPTGROUP_ATTRIBUTES+1] = { HTML_ATTR(OPTGROUP,CLASS), HTML_ATTR(OPTGROUP,DISABLED), HTML_ATTR(OPTGROUP,DIR), HTML_ATTR(OPTGROUP,ID), HTML_ATTR(OPTGROUP,LABEL), HTML_ATTR(OPTGROUP,LANG), HTML_ATTR(OPTGROUP,STYLE), HTML_ATTR(OPTGROUP,TITLE), HTML_ATTRIBUTES(OPTGROUP) }; PRIVATE HTAttr option_attr[HTML_OPTION_ATTRIBUTES+1] = { HTML_ATTR(OPTION,CLASS), HTML_ATTR(OPTION,DISABLED), HTML_ATTR(OPTION,DIR), HTML_ATTR(OPTION,ID), HTML_ATTR(OPTION,LABEL), HTML_ATTR(OPTION,LANG), HTML_ATTR(OPTION,SELECTED), HTML_ATTR(OPTION,STYLE), HTML_ATTR(OPTION,TITLE), HTML_ATTR(OPTION,VALUE), HTML_ATTRIBUTES(OPTION) }; PRIVATE HTAttr param_attr[HTML_PARAM_ATTRIBUTES+1] = { HTML_ATTR(PARAM,ID), HTML_ATTR(PARAM,NAME), HTML_ATTR(PARAM,TYPE), HTML_ATTR(PARAM,VALUE), HTML_ATTR(PARAM,VALUETYPE), HTML_ATTRIBUTES(PARAM) }; PRIVATE HTAttr pre_attr[HTML_PRE_ATTRIBUTES+1] = { HTML_ATTR(PRE,CLASS), HTML_ATTR(PRE,DIR), HTML_ATTR(PRE,ID), HTML_ATTR(PRE,LANG), HTML_ATTR(PRE,STYLE), HTML_ATTR(PRE,TITLE), HTML_ATTR(PRE,WIDTH), HTML_ATTRIBUTES(PRE) }; PRIVATE HTAttr script_attr[HTML_SCRIPT_ATTRIBUTES+1] = { HTML_ATTR(SCRIPT,CHARSET), HTML_ATTR(SCRIPT,DEFER), HTML_ATTR(SCRIPT,LANGUAGE), HTML_ATTR(SCRIPT,SRC), HTML_ATTR(SCRIPT,TYPE), HTML_ATTRIBUTES(SCRIPT) }; PRIVATE HTAttr select_attr[HTML_SELECT_ATTRIBUTES+1] = { HTML_ATTR(SELECT,CLASS), HTML_ATTR(SELECT,DIR), HTML_ATTR(SELECT,DISABLED), HTML_ATTR(SELECT,ID), HTML_ATTR(SELECT,LANG), HTML_ATTR(SELECT,MULTIPLE), HTML_ATTR(SELECT,NAME), HTML_ATTR(SELECT,SIZE), HTML_ATTR(SELECT,STYLE), HTML_ATTR(SELECT,TABINDEX), HTML_ATTR(SELECT,TITLE), HTML_ATTRIBUTES(SELECT) }; PRIVATE HTAttr style_attr[HTML_STYLE_ATTRIBUTES+1] = { HTML_ATTR(STYLE,DIR), HTML_ATTR(STYLE,LANG), HTML_ATTR(STYLE,MEDIA), HTML_ATTR(STYLE,TITLE), HTML_ATTR(STYLE,TYPE), HTML_ATTRIBUTES(STYLE) }; PRIVATE HTAttr table_attr[HTML_TABLE_ATTRIBUTES+1] = { HTML_ATTR(TABLE,ALIGN), HTML_ATTR(TABLE,BGCOLOR), HTML_ATTR(TABLE,BORDER), HTML_ATTR(TABLE,CELLPADDING), HTML_ATTR(TABLE,CELLSPACING), HTML_ATTR(TABLE,CLASS), HTML_ATTR(TABLE,DIR), HTML_ATTR(TABLE,FRAME), HTML_ATTR(TABLE,ID), HTML_ATTR(TABLE,LANG), HTML_ATTR(TABLE,RULES), HTML_ATTR(TABLE,SUMMARY), HTML_ATTR(TABLE,STYLE), HTML_ATTR(TABLE,TITLE), HTML_ATTR(TABLE,WIDTH), HTML_ATTRIBUTES(TABLE) }; PRIVATE HTAttr tele_attr[HTML_TELE_ATTRIBUTES+1] = { HTML_ATTR(TELE,ALIGN), HTML_ATTR(TELE,CHAR), HTML_ATTR(TELE,CHAROFF), HTML_ATTR(TELE,CLASS), HTML_ATTR(TELE,DIR), HTML_ATTR(TELE,ID), HTML_ATTR(TELE,LANG), HTML_ATTR(TELE,STYLE), HTML_ATTR(TELE,TITLE), HTML_ATTR(TELE,VALIGN), HTML_ATTRIBUTES(TELE) }; PRIVATE HTAttr td_attr[HTML_TD_ATTRIBUTES+1] = { HTML_ATTR(TD,ABBR), HTML_ATTR(TD,ALIGN), HTML_ATTR(TD,AXIS), HTML_ATTR(TD,BGCOLOR), HTML_ATTR(TD,CHAR), HTML_ATTR(TD,CHAROFF), HTML_ATTR(TD,CLASS), HTML_ATTR(TD,COLSPAN), HTML_ATTR(TD,DIR), HTML_ATTR(TD,ID), HTML_ATTR(TD,HEADERS), HTML_ATTR(TD,HEIGHT), HTML_ATTR(TD,LANG), HTML_ATTR(TD,NOWRAP), HTML_ATTR(TD,ROWSPAN), HTML_ATTR(TD,SCOPE), HTML_ATTR(TD,STYLE), HTML_ATTR(TD,TITLE), HTML_ATTR(TD,VALIGN), HTML_ATTR(TD,WIDTH), HTML_ATTRIBUTES(TD) }; PRIVATE HTAttr textarea_attr[HTML_TEXTAREA_ATTRIBUTES+1] = { HTML_ATTR(TEXTAREA,CLASS), HTML_ATTR(TEXTAREA,COLS), HTML_ATTR(TEXTAREA,DIR), HTML_ATTR(TEXTAREA,DISABLED), HTML_ATTR(TEXTAREA,ID), HTML_ATTR(TEXTAREA,LANG), HTML_ATTR(TEXTAREA,NAME), HTML_ATTR(TEXTAREA,READONLY), HTML_ATTR(TEXTAREA,ROWS), HTML_ATTR(TEXTAREA,STYLE), HTML_ATTR(TEXTAREA,TABINDEX), HTML_ATTR(TEXTAREA,TITLE), HTML_ATTRIBUTES(TEXTAREA) }; PRIVATE HTAttr title_attr[HTML_TITLE_ATTRIBUTES+1] = { HTML_ATTR(TITLE,DIR), HTML_ATTR(TITLE,LANG), HTML_ATTRIBUTES(TITLE) }; PRIVATE HTAttr ul_attr[HTML_UL_ATTRIBUTES+1] = { HTML_ATTR(UL,CLASS), HTML_ATTR(UL,COMPACT), HTML_ATTR(UL,DIR), HTML_ATTR(UL,ID), HTML_ATTR(UL,LANG), HTML_ATTR(UL,STYLE), HTML_ATTR(UL,TITLE), HTML_ATTR(UL,TYPE), HTML_ATTRIBUTES(UL) }; /* ** ELEMENTS ** Must match definitions in HTMLPDTD.html! ** Must be in alphabetical order. ** ** Name, Attributes, content */ PRIVATE HTTag tags[HTML_ELEMENTS] = { { "A" , a_attr, HTML_A_ATTRIBUTES, SGML_MIXED }, { "ABBR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "ACRONYM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "ADDRESS" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "APPLET" , applet_attr, HTML_APPLET_ATTRIBUTES, SGML_MIXED }, { "AREA" , area_attr, HTML_AREA_ATTRIBUTES, SGML_EMPTY }, { "B" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "BASE" , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY }, { "BASEFONT", font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY }, { "BDO" , bdo_attr, HTML_BDO_ATTRIBUTES, SGML_EMPTY }, { "BIG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "BLOCKQUOTE", bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED }, { "BODY" , body_attr, HTML_BODY_ATTRIBUTES, SGML_MIXED }, { "BR" , br_attr, HTML_BR_ATTRIBUTES, SGML_EMPTY }, { "BUTTON" , button_attr, HTML_BUTTON_ATTRIBUTES, SGML_MIXED }, { "CAPTION" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "CENTER" , no_attr, 0, SGML_MIXED }, { "CITE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "CODE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "COL" , col_attr, HTML_COL_ATTRIBUTES, SGML_MIXED }, { "COLGROUP", col_attr, HTML_COL_ATTRIBUTES, SGML_MIXED }, { "DD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, { "DEL" , changes_attr, HTML_CHANGES_ATTRIBUTES,SGML_EMPTY }, { "DFN" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "DIR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "DIV" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "DL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "DT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, { "EM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "FIELDSET", gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "FONT" , font_attr, HTML_FONT_ATTRIBUTES, SGML_MIXED }, { "FORM" , form_attr, HTML_FORM_ATTRIBUTES, SGML_MIXED }, { "FRAME" , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY }, { "FRAMESET", frameset_attr,HTML_FRAMESET_ATTRIBUTES,SGML_MIXED }, { "H1" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "H2" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "H3" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "H4" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "H5" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "H6" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "HEAD" , head_attr, HTML_HEAD_ATTRIBUTES, SGML_MIXED }, { "HR" , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY }, { "HTML" , html_attr, HTML_HTML_ATTRIBUTES, SGML_MIXED }, /* */ { "I" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "IFRAME" , iframe_attr, HTML_IFRAME_ATTRIBUTES, SGML_MIXED }, { "IMG" , img_attr, HTML_IMG_ATTRIBUTES, SGML_EMPTY }, { "INPUT" , input_attr, HTML_INPUT_ATTRIBUTES, SGML_EMPTY }, { "INS" , changes_attr, HTML_CHANGES_ATTRIBUTES,SGML_MIXED }, { "ISINDEX" , isindex_attr, HTML_ISINDEX_ATTRIBUTES,SGML_EMPTY }, { "KBD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "LABEL" , label_attr, HTML_LABEL_ATTRIBUTES, SGML_MIXED }, { "LEGEND" , legend_attr, HTML_LEGEND_ATTRIBUTES, SGML_MIXED }, { "LI" , li_attr, HTML_LI_ATTRIBUTES, SGML_EMPTY }, { "LINK" , link_attr, HTML_LINK_ATTRIBUTES, SGML_EMPTY }, { "MAP" , map_attr, HTML_MAP_ATTRIBUTES, SGML_MIXED }, { "MENU" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "META" , meta_attr, HTML_META_ATTRIBUTES, SGML_EMPTY }, { "NEXTID" , nextid_attr, 1, SGML_EMPTY }, { "NOFRAMES", gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "NOSCRIPT", gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "OBJECT" , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_MIXED }, { "OL" , ol_attr, HTML_OL_ATTRIBUTES, SGML_MIXED }, { "OPTGROUP", optgroup_attr,HTML_OPTGROUP_ATTRIBUTES,SGML_MIXED }, { "OPTION" , option_attr, HTML_OPTION_ATTRIBUTES, SGML_EMPTY },/*Mixed?*/ { "P" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_EMPTY }, { "PARAM" , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY }, { "PRE" , pre_attr, HTML_PRE_ATTRIBUTES, SGML_MIXED }, { "Q" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "S" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "SAMP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "SCRIPT" , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_MIXED }, { "SELECT" , select_attr, HTML_SELECT_ATTRIBUTES, SGML_MIXED }, { "SMALL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "SPAN" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED }, { "STRIKE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "STRONG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "STYLE" , style_attr, HTML_STYLE_ATTRIBUTES, SGML_MIXED }, { "SUB" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "SUP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "TABLE" , table_attr, HTML_TABLE_ATTRIBUTES, SGML_MIXED }, { "TBODY" , tele_attr, HTML_TELE_ATTRIBUTES, SGML_MIXED }, { "TD" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY /*SGML_MIXED*/ }, { "TEXTAREA", textarea_attr,HTML_TEXTAREA_ATTRIBUTES,SGML_MIXED}, { "TFOOT" , tele_attr, HTML_TELE_ATTRIBUTES, SGML_MIXED }, { "TH" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY /*SGML_MIXED*/}, { "THEAD" , tele_attr, HTML_TELE_ATTRIBUTES, SGML_MIXED }, { "TITLE" , title_attr, HTML_TITLE_ATTRIBUTES, SGML_MIXED }, { "TR" , tele_attr, HTML_TELE_ATTRIBUTES, SGML_EMPTY /*SGML_MIXED*/}, { "TT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "U" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, { "UL" , ul_attr, HTML_UL_ATTRIBUTES, SGML_MIXED }, { "VAR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, }; PRIVATE SGML_dtd HTMLP_dtd = { tags, HTML_ELEMENTS, entities, sizeof(entities)/sizeof(char**) }; PRIVATE SGML_dtd * DTD = &HTMLP_dtd; PUBLIC SGML_dtd * HTML_dtd (void) { return DTD; } PUBLIC BOOL HTML_setDtd (const SGML_dtd * dtd) { if (dtd) { DTD = (SGML_dtd *) dtd; return YES; } return NO; } /* Start anchor element ** -------------------- ** ** It is kinda convenient to have a particulr routine for ** starting an anchor element, as everything else for HTML is ** simple anyway. */ PUBLIC void HTStartAnchor (HTStructured * obj, const char * name, const char * href) { BOOL present[HTML_A_ATTRIBUTES]; const char* value[HTML_A_ATTRIBUTES]; { int i; for(i=0; i<HTML_A_ATTRIBUTES; i++) present[i] = NO; } if (name) { present[HTML_A_NAME] = YES; value[HTML_A_NAME] = name; } if (href) { present[HTML_A_HREF] = YES; value[HTML_A_HREF] = href; } (*obj->isa->start_element)(obj, HTML_A , present, value); } /* Put image element ** -------------------- ** ** Hopefully as usefull as HTStartAnchor. Henrik 23/03-94 */ PUBLIC void HTMLPutImg (HTStructured * obj, const char * src, const char * alt, const char * align) { BOOL present[HTML_IMG_ATTRIBUTES]; const char* value[HTML_IMG_ATTRIBUTES]; { int i; for(i=0; i<HTML_IMG_ATTRIBUTES; i++) present[i] = NO; } if (src) { present[HTML_IMG_SRC] = YES; value[HTML_IMG_SRC] = src; } if (alt) { present[HTML_IMG_ALT] = YES; value[HTML_IMG_ALT] = alt; } if (align) { present[HTML_IMG_ALIGN] = YES; value[HTML_IMG_ALIGN] = align; } (*obj->isa->start_element)(obj, HTML_IMG , present, value); /* (*obj->isa->end_element)(obj, HTML_IMG); */ } PUBLIC void HTNextID (HTStructured * obj, const char * next_one) { BOOL present[HTML_NEXTID_ATTRIBUTES]; const char* value[HTML_NEXTID_ATTRIBUTES]; { int i; for(i=0; i<HTML_NEXTID_ATTRIBUTES; i++) present[i] = NO; } present[HTML_NEXTID_N] = YES; value[HTML_NEXTID_N] = next_one; (*obj->isa->start_element)(obj, HTML_NEXTID , present, value); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMLPDTD.html��������������������������������������������������������������������0100644�0000764�0000144�00000045147�07035071422�016065� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 28-Jun-1996 --> <TITLE>W3C Sample Code Library libwww HTML DTD</TITLE> </HEAD> <BODY> <H1> HTML Plus DTD - Software Interface </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> SGML purists should excuse the use of the term "DTD" in this file to represent DTD-related information which is not exactly a DTD itself. The C modular structure doesn't work very well here, as the dtd is partly in the .h and partly in the .c which are not very independent. <EM>Tant pis!</EM> There are a couple of HTML-specific utility routines also defined. <P> This module is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTMLDTD_H #define HTMLDTD_H #include "<A HREF="HTStruct.html">HTStruct.h</A>" #include "<A HREF="SGML.html">SGML.h</A>" </PRE> <H2> Number of HTML Entities </H2> <P> The entity names are defined in the C file. This gives the number of them. Must Match all tables by element! <PRE> #define HTML_ENTITIES 100 </PRE> <H2> HTML Element Enumeration </H2> <P> These include tables in <A HREF="HTMLPDTD.c" NAME="z1">HTMLPDTD.c</A> and code in <A HREF="HTML.c" NAME="z0">HTML.c</A>. Note that not everything from <A HREF="http://www.w3.org/TR/REC-html40">HTML 4.0</A> is there! <PRE> typedef enum _HTMLElement { HTML_A = 0, HTML_ABBR, HTML_ACRONYM, HTML_ADDRESS, HTML_APPLET, HTML_AREA, HTML_B, HTML_BASE, HTML_BASEFONT, HTML_BDO, HTML_BIG, HTML_BLOCKQUOTE, HTML_BODY, HTML_BR, HTML_BUTTON, HTML_CAPTION, HTML_CENTER, HTML_CITE, HTML_CODE, HTML_COL, HTML_COLGROUP, HTML_DD, HTML_DEL, HTML_DFN, HTML_DIR, HTML_DIV, HTML_DL, HTML_DT, HTML_EM, HTML_FIELDSET, HTML_FONT, HTML_FORM, HTML_FRAME, HTML_FRAMESET, HTML_H1, HTML_H2, HTML_H3, HTML_H4, HTML_H5, HTML_H6, HTML_HEAD, HTML_HR, HTML_HTML, HTML_I, HTML_IFRAME, HTML_IMG, HTML_INPUT, HTML_INS, HTML_ISINDEX, HTML_KBD, HTML_LABEL, HTML_LEGEND, HTML_LI, HTML_LINK, HTML_MAP, HTML_MENU, HTML_META, HTML_NEXTID, /* !!! */ HTML_NOFRAMES, HTML_NOSCRIPT, HTML_OBJECT, HTML_OL, HTML_OPTGROUP, HTML_OPTION, HTML_P, HTML_PARAM, HTML_PRE, HTML_Q, HTML_S, HTML_SAMP, HTML_SCRIPT, HTML_SELECT, HTML_SMALL, HTML_SPAN, HTML_STRIKE, HTML_STRONG, HTML_STYLE, HTML_SUB, HTML_SUP, HTML_TABLE, HTML_TBODY, HTML_TD, HTML_TEXTAREA, HTML_TFOOT, HTML_TH, HTML_THEAD, HTML_TITLE, HTML_TR, HTML_TT, HTML_U, HTML_UL, HTML_VAR, HTML_ELEMENTS /* This must be the last entry */ } HTMLElement; </PRE> <H2> Element Attribute Enumerations </H2> <P> Identifier is <TT>HTML_&lt;element&gt;_&lt;attribute&gt;</TT>. These <STRONG>must</STRONG> match the tables in <A HREF="HTMLPDTD.c" NAME="z2">HTMLPDTD.c</A>! <H3> Attributes definition Macros </H3> <PRE> /* Define an attribute as HTML_<tag>_<attribute> */ #define HTML_ATTR(t,a) HTML_##t##_##a #define HTML_ATTRIBUTES(t) HTML_##t##_ATTRIBUTES </PRE> <H3> A </H3> <PRE> enum _HTML_A_Attributes { HTML_ATTR(A,ACCESSKEY) = 0, HTML_ATTR(A,CHARSET), HTML_ATTR(A,CLASS), HTML_ATTR(A,COORDS), HTML_ATTR(A,DIR), HTML_ATTR(A,HREF), HTML_ATTR(A,HREFLANG), HTML_ATTR(A,ID), HTML_ATTR(A,NAME), HTML_ATTR(A,REL), HTML_ATTR(A,REV), HTML_ATTR(A,SHAPE), HTML_ATTR(A,STYLE), HTML_ATTR(A,TABINDEX), HTML_ATTR(A,TARGET), HTML_ATTR(A,TYPE), HTML_ATTR(A,TITLE), HTML_ATTRIBUTES(A) }; </PRE> <H3> APPLET - Deprecated </H3> <PRE> enum _HTML_APPLET_Attributes { HTML_ATTR(APPLET,ALIGN) = 0, HTML_ATTR(APPLET,ALT), HTML_ATTR(APPLET,ARCHIVE), HTML_ATTR(APPLET,CLASS), HTML_ATTR(APPLET,CODE), HTML_ATTR(APPLET,CODEBASE), HTML_ATTR(APPLET,HEIGHT), HTML_ATTR(APPLET,HSPACE), HTML_ATTR(APPLET,ID), HTML_ATTR(APPLET,NAME), HTML_ATTR(APPLET,OBJECT), HTML_ATTR(APPLET,STYLE), HTML_ATTR(APPLET,TITLE), HTML_ATTR(APPLET,VSPACE), HTML_ATTR(APPLET,WIDTH), HTML_ATTRIBUTES(APPLET) }; </PRE> <H3> AREA </H3> <PRE> enum _HTML_AREA_Attributes { HTML_ATTR(AREA,ACCESSKEY) = 0, HTML_ATTR(AREA,ALT), HTML_ATTR(AREA,CLASS), HTML_ATTR(AREA,COORDS), HTML_ATTR(AREA,DIR), HTML_ATTR(AREA,HREF), HTML_ATTR(AREA,ID), HTML_ATTR(AREA,NAME), HTML_ATTR(AREA,NOHREF), HTML_ATTR(AREA,LANG), HTML_ATTR(AREA,SHAPE), HTML_ATTR(AREA,STYLE), HTML_ATTR(AREA,TABINDEX), HTML_ATTR(AREA,TARGET), HTML_ATTR(AREA,TITLE), HTML_ATTRIBUTES(AREA) }; </PRE> <H3> BASE </H3> <PRE> enum _HTML_BASE_Attributes { HTML_ATTR(BASE,HREF) = 0, HTML_ATTR(BASE,TARGET), HTML_ATTRIBUTES(BASE) }; </PRE> <H3> BDO </H3> <PRE> enum _HTML_BDO_Attributes { HTML_ATTR(BDO,CLASS) = 0, HTML_ATTR(BDO,DIR), HTML_ATTR(BDO,ID), HTML_ATTR(BDO,LANG), HTML_ATTR(BDO,STYLE), HTML_ATTR(BDO,TITLE), HTML_ATTRIBUTES(BDO) }; </PRE> <H3> BLOCKQUOTE </H3> <PRE> enum _HTML_BQ_Attributes { HTML_ATTR(BQ,CITE) = 0, HTML_ATTR(BQ,CLASS), HTML_ATTR(BQ,DIR), HTML_ATTR(BQ,ID), HTML_ATTR(BQ,LANG), HTML_ATTR(BQ,STYLE), HTML_ATTR(BQ,TITLE), HTML_ATTRIBUTES(BQ) }; </PRE> <H3> BODY </H3> <PRE> enum _HTML_BODY_Attributes { HTML_ATTR(BODY,ALINK) = 0, HTML_ATTR(BODY,BACKGROUND), HTML_ATTR(BODY,BGCOLOR), HTML_ATTR(BODY,CLASS), HTML_ATTR(BODY,DIR), HTML_ATTR(BODY,ID), HTML_ATTR(BODY,LANG), HTML_ATTR(BODY,LINK), HTML_ATTR(BODY,STYLE), HTML_ATTR(BODY,TEXT), HTML_ATTR(BODY,TITLE), HTML_ATTR(BODY,VLINK), HTML_ATTRIBUTES(BODY) }; </PRE> <H3> BR </H3> <PRE> enum _HTML_BR_Attributes { HTML_ATTR(BR,CLASS) = 0, HTML_ATTR(BR,CLEAR), HTML_ATTR(BR,ID), HTML_ATTR(BR,STYLE), HTML_ATTR(BR,TITLE), HTML_ATTRIBUTES(BR) }; </PRE> <H3> BUTTON </H3> <PRE> enum _HTML_BUTTON_Attributes { HTML_ATTR(BUTTON,ACCESSKEY) = 0, HTML_ATTR(BUTTON,CLASS), HTML_ATTR(BUTTON,DIR), HTML_ATTR(BUTTON,DISABLED), HTML_ATTR(BUTTON,ID), HTML_ATTR(BUTTON,LANG), HTML_ATTR(BUTTON,NAME), HTML_ATTR(BUTTON,STYLE), HTML_ATTR(BUTTON,TABINDEX), HTML_ATTR(BUTTON,TITLE), HTML_ATTR(BUTTON,TYPE), HTML_ATTR(BUTTON,VALUE), HTML_ATTRIBUTES(BUTTON) }; </PRE> <H3> COL </H3> <PRE> enum _HTML_COL_Attributes { HTML_ATTR(COL,CLASS) = 0, HTML_ATTR(COL,DIR), HTML_ATTR(COL,ID), HTML_ATTR(COL,LANG), HTML_ATTR(COL,SPAN), HTML_ATTR(COL,STYLE), HTML_ATTR(COL,TITLE), HTML_ATTR(COL,WIDTH), HTML_ATTRIBUTES(COL) }; </PRE> <H3> DEL, INS </H3> <PRE> enum _HTML_CHANGES_Attributes { HTML_ATTR(CHANGES,CITE) = 0, HTML_ATTR(CHANGES,CLASS), HTML_ATTR(CHANGES,DATETIME), HTML_ATTR(CHANGES,DIR), HTML_ATTR(CHANGES,ID), HTML_ATTR(CHANGES,LANG), HTML_ATTR(CHANGES,STYLE), HTML_ATTR(CHANGES,TITLE), HTML_ATTRIBUTES(CHANGES) }; </PRE> <H3> FONT - Deprecated </H3> <PRE> enum _HTML_FONT_Attributes { HTML_ATTR(FONT,CLASS) = 0, HTML_ATTR(FONT,COLOR), HTML_ATTR(FONT,DIR), HTML_ATTR(FONT,FACE), HTML_ATTR(FONT,ID), HTML_ATTR(FONT,LANG), HTML_ATTR(FONT,SIZE), HTML_ATTR(FONT,STYLE), HTML_ATTR(FONT,TITLE), HTML_ATTRIBUTES(FONT) }; </PRE> <H3> FORM </H3> <PRE> enum _HTML_FORM_Attributes { HTML_ATTR(FORM,ACCEPT) = 0, HTML_ATTR(FORM,ACCEPT_CHARSET), /* { "ACCEPT-CHARSET" } */ HTML_ATTR(FORM,ACTION), HTML_ATTR(FORM,CLASS), HTML_ATTR(FORM,DIR), HTML_ATTR(FORM,ENCTYPE), HTML_ATTR(FORM,ID), HTML_ATTR(FORM,LANG), HTML_ATTR(FORM,METHOD), HTML_ATTR(FORM,STYLE), HTML_ATTR(FORM,TARGET), HTML_ATTR(FORM,TITLE), HTML_ATTRIBUTES(FORM) }; </PRE> <H3> FRAME </H3> <PRE> enum _HTML_FRAME_Attributes { HTML_ATTR(FRAME,CLASS) = 0, HTML_ATTR(FRAME,FRAMEBORDER), HTML_ATTR(FRAME,ID), HTML_ATTR(FRAME,NAME), HTML_ATTR(FRAME,MARGINHEIGHT), HTML_ATTR(FRAME,MARGINWIDTH), HTML_ATTR(FRAME,NORESIZE), HTML_ATTR(FRAME,LONGDESC), HTML_ATTR(FRAME,SCROLLING), HTML_ATTR(FRAME,SRC), HTML_ATTR(FRAME,STYLE), HTML_ATTR(FRAME,TARGET), HTML_ATTR(FRAME,TITLE), HTML_ATTRIBUTES(FRAME) }; </PRE> <H3> FRAMESET </H3> <PRE> enum _HTML_FRAMESET_Attributes { HTML_ATTR(FRAMESET,CLASS) = 0, HTML_ATTR(FRAMESET,COLS), HTML_ATTR(FRAMESET,ID), HTML_ATTR(FRAMESET,ROWS), HTML_ATTR(FRAMESET,STYLE), HTML_ATTR(FRAMESET,TITLE), HTML_ATTRIBUTES(FRAMESET) }; </PRE> <H3> Generic attributes </H3> <PRE> enum _HTML_GEN_Attributes { HTML_ATTR(GEN,CLASS) = 0, HTML_ATTR(GEN,DIR), HTML_ATTR(GEN,ID), HTML_ATTR(GEN,LANG), HTML_ATTR(GEN,STYLE), HTML_ATTR(GEN,TITLE), HTML_ATTRIBUTES(GEN) }; </PRE> <H3> BLOCK </H3> <PRE> enum _HTML_BLOCK_Attributes { HTML_ATTR(BLOCK,ALIGN) = 0, HTML_ATTR(BLOCK,CLASS), HTML_ATTR(BLOCK,DIR), HTML_ATTR(BLOCK,ID), HTML_ATTR(BLOCK,LANG), HTML_ATTR(BLOCK,STYLE), HTML_ATTR(BLOCK,TITLE), HTML_ATTRIBUTES(BLOCK) }; </PRE> <H3> HEAD </H3> <PRE> enum _HTML_HEAD_Attributes { HTML_ATTR(HEAD,DIR) = 0, HTML_ATTR(HEAD,LANG), HTML_ATTR(HEAD,PROFILE), HTML_ATTRIBUTES(HEAD) }; </PRE> <H3> HR </H3> <PRE> enum _HTML_HR_Attributes { HTML_ATTR(HR,ALIGN) = 0, HTML_ATTR(HR,CLASS), HTML_ATTR(HR,DIR), HTML_ATTR(HR,ID), HTML_ATTR(HR,LANG), HTML_ATTR(HR,NOSHADE), HTML_ATTR(HR,SIZE), HTML_ATTR(HR,STYLE), HTML_ATTR(HR,TITLE), HTML_ATTR(HR,WIDTH), HTML_ATTRIBUTES(HR) }; </PRE> <H3> HTML </H3> <PRE> enum _HTML_HTML_Attributes { HTML_ATTR(HTML,DIR) = 0, HTML_ATTR(HTML,LANG), HTML_ATTR(HTML,VERSION), HTML_ATTRIBUTES(HTML) }; </PRE> <H3> IFRAME </H3> <PRE> enum _HTML_IFRAME_Attributes { HTML_ATTR(IFRAME,ALIGN) = 0, HTML_ATTR(IFRAME,CLASS), HTML_ATTR(IFRAME,FRAMEBORDER), HTML_ATTR(IFRAME,HEIGHT), HTML_ATTR(IFRAME,ID), HTML_ATTR(IFRAME,LONGDESC), HTML_ATTR(IFRAME,MARGINHEIGHT), HTML_ATTR(IFRAME,MARGINWIDTH), HTML_ATTR(IFRAME,NAME), HTML_ATTR(IFRAME,SCROLLING), HTML_ATTR(IFRAME,SRC), HTML_ATTR(IFRAME,STYLE), HTML_ATTR(IFRAME,TARGET), HTML_ATTR(IFRAME,TITLE), HTML_ATTR(IFRAME,WIDTH), HTML_ATTRIBUTES(IFRAME) }; </PRE> <H3> IMG </H3> <PRE> enum _HTML_IMG_Attributes { HTML_ATTR(IMG,ALIGN) = 0, HTML_ATTR(IMG,ALT), HTML_ATTR(IMG,BORDER), HTML_ATTR(IMG,CLASS), HTML_ATTR(IMG,DIR), HTML_ATTR(IMG,HEIGHT), HTML_ATTR(IMG,HSPACE), HTML_ATTR(IMG,ID), HTML_ATTR(IMG,ISMAP), HTML_ATTR(IMG,LANG), HTML_ATTR(IMG,LONGDESC), HTML_ATTR(IMG,SRC), HTML_ATTR(IMG,STYLE), HTML_ATTR(IMG,TITLE), HTML_ATTR(IMG,USEMAP), HTML_ATTR(IMG,VSPACE), HTML_ATTR(IMG,WIDTH), HTML_ATTRIBUTES(IMG) }; </PRE> <H3> INPUT </H3> <PRE> enum _HTML_INPUT_Attributes { HTML_ATTR(INPUT,ACCEPT) = 0, HTML_ATTR(INPUT,ACCESSKEY), HTML_ATTR(INPUT,ALIGN), HTML_ATTR(INPUT,ALT), HTML_ATTR(INPUT,CHECKED), HTML_ATTR(INPUT,CLASS), HTML_ATTR(INPUT,DIR), HTML_ATTR(INPUT,DISABLED), HTML_ATTR(INPUT,ID), HTML_ATTR(INPUT,LANG), HTML_ATTR(INPUT,MAXLENGTH), HTML_ATTR(INPUT,NAME), HTML_ATTR(INPUT,READONLY), HTML_ATTR(INPUT,SIZE), HTML_ATTR(INPUT,SRC), HTML_ATTR(INPUT,STYLE), HTML_ATTR(INPUT,TABINDEX), HTML_ATTR(INPUT,TITLE), HTML_ATTR(INPUT,TYPE), HTML_ATTR(INPUT,USEMAP), HTML_ATTR(INPUT,VALUE), HTML_ATTRIBUTES(INPUT) }; </PRE> <H3> </H3> <PRE> enum _HTML_ISINDEX_Attributes { HTML_ATTR(ISINDEX,CLASS) = 0, HTML_ATTR(ISINDEX,DIR), HTML_ATTR(ISINDEX,ID), HTML_ATTR(ISINDEX,LANG), HTML_ATTR(ISINDEX,PROMPT), HTML_ATTR(ISINDEX,STYLE), HTML_ATTR(ISINDEX,TITLE), HTML_ATTRIBUTES(ISINDEX) }; </PRE> <H3> </H3> <PRE> enum _HTML_LABEL_Attributes { HTML_ATTR(LABEL,ACCESSKEY) = 0, HTML_ATTR(LABEL,CLASS), HTML_ATTR(LABEL,DIR), HTML_ATTR(LABEL,FOR), HTML_ATTR(LABEL,ID), HTML_ATTR(LABEL,LANG), HTML_ATTR(LABEL,STYLE), HTML_ATTR(LABEL,TITLE), HTML_ATTRIBUTES(LABEL) }; </PRE> <H3> </H3> <PRE> enum _HTML_LEGEND_Attributes { HTML_ATTR(LEGEND,ACCESSKEY) = 0, HTML_ATTR(LEGEND,ALIGN), HTML_ATTR(LEGEND,CLASS), HTML_ATTR(LEGEND,DIR), HTML_ATTR(LEGEND,ID), HTML_ATTR(LEGEND,LANG), HTML_ATTR(LEGEND,STYLE), HTML_ATTR(LEGEND,TITLE), HTML_ATTRIBUTES(LEGEND) }; </PRE> <H3> LI </H3> <PRE> enum _HTML_LI_Attributes { HTML_ATTR(LI,CLASS) = 0, HTML_ATTR(LI,COMPACT), HTML_ATTR(LI,DIR), HTML_ATTR(LI,ID), HTML_ATTR(LI,LANG), HTML_ATTR(LI,STYLE), HTML_ATTR(LI,TITLE), HTML_ATTR(LI,TYPE), HTML_ATTR(LI,VALUE), HTML_ATTRIBUTES(LI) }; </PRE> <H3> LINK </H3> <PRE> enum _HTML_LINK_Attributes { HTML_ATTR(LINK,CHARSET) = 0, HTML_ATTR(LINK,CLASS), HTML_ATTR(LINK,DIR), HTML_ATTR(LINK,HREF), HTML_ATTR(LINK,HREFLANG), HTML_ATTR(LINK,ID), HTML_ATTR(LINK,LANG), HTML_ATTR(LINK,MEDIA), HTML_ATTR(LINK,REL), HTML_ATTR(LINK,REV), HTML_ATTR(LINK,STYLE), HTML_ATTR(LINK,TARGET), HTML_ATTR(LINK,TITLE), HTML_ATTR(LINK,TYPE), HTML_ATTRIBUTES(LINK) }; </PRE> <H3> MAP </H3> <PRE> enum _HTML_MAP_Attributes { HTML_ATTR(MAP,CLASS) = 0, HTML_ATTR(MAP,DIR), HTML_ATTR(MAP,ID), HTML_ATTR(MAP,LANG), HTML_ATTR(MAP,NAME), HTML_ATTR(MAP,STYLE), HTML_ATTR(MAP,TITLE), HTML_ATTRIBUTES(MAP) }; </PRE> <H3> META </H3> <PRE> enum _HTML_META_Attributes { HTML_ATTR(META,CONTENT) = 0, HTML_ATTR(META,DIR), HTML_ATTR(META,HTTP_EQUIV), /* { "HTTP-EQUIV" ) */ HTML_ATTR(META,LANG), HTML_ATTR(META,NAME), HTML_ATTR(META,SCHEME), HTML_ATTRIBUTES(META) }; </PRE> <H3> NEXTID </H3> <PRE> #define HTML_NEXTID_ATTRIBUTES 1 #define HTML_NEXTID_N 0 </PRE> <H3> OBJECT </H3> <PRE> enum _HTML_OBJECT_Attributes { HTML_ATTR(OBJECT,ALIGN) = 0, HTML_ATTR(OBJECT,ARCHIVE), HTML_ATTR(OBJECT,BORDER), HTML_ATTR(OBJECT,CLASS), HTML_ATTR(OBJECT,CLASSID), HTML_ATTR(OBJECT,CODEBASE), HTML_ATTR(OBJECT,CODETYPE), HTML_ATTR(OBJECT,DATA), HTML_ATTR(OBJECT,DECLARE), HTML_ATTR(OBJECT,DIR), HTML_ATTR(OBJECT,HEIGHT), HTML_ATTR(OBJECT,HSPACE), HTML_ATTR(OBJECT,ID), HTML_ATTR(OBJECT,LANG), HTML_ATTR(OBJECT,NAME), HTML_ATTR(OBJECT,STANDBY), HTML_ATTR(OBJECT,STYLE), HTML_ATTR(OBJECT,TABINDEX), HTML_ATTR(OBJECT,TITLE), HTML_ATTR(OBJECT,TYPE), HTML_ATTR(OBJECT,USEMAP), HTML_ATTR(OBJECT,VSPACE), HTML_ATTR(OBJECT,WIDTH), HTML_ATTRIBUTES(OBJECT) }; </PRE> <H3> OL </H3> <PRE> enum _HTML_OL_Attributes { HTML_ATTR(OL,CLASS) = 0, HTML_ATTR(OL,COMPACT), HTML_ATTR(OL,DIR), HTML_ATTR(OL,ID), HTML_ATTR(OL,LANG), HTML_ATTR(OL,START), HTML_ATTR(OL,STYLE), HTML_ATTR(OL,TITLE), HTML_ATTR(OL,TYPE), HTML_ATTRIBUTES(OL) }; </PRE> <H3> OPTGROUP </H3> <PRE> enum _HTML_OPTGROUP_Attributes { HTML_ATTR(OPTGROUP,CLASS) = 0, HTML_ATTR(OPTGROUP,DISABLED), HTML_ATTR(OPTGROUP,DIR), HTML_ATTR(OPTGROUP,ID), HTML_ATTR(OPTGROUP,LABEL), HTML_ATTR(OPTGROUP,LANG), HTML_ATTR(OPTGROUP,STYLE), HTML_ATTR(OPTGROUP,TITLE), HTML_ATTRIBUTES(OPTGROUP) }; </PRE> <H3> OPTION </H3> <PRE> enum _HTML_OPTION_Attributes { HTML_ATTR(OPTION,CLASS) = 0, HTML_ATTR(OPTION,DISABLED), HTML_ATTR(OPTION,DIR), HTML_ATTR(OPTION,ID), HTML_ATTR(OPTION,LABEL), HTML_ATTR(OPTION,LANG), HTML_ATTR(OPTION,SELECTED), HTML_ATTR(OPTION,STYLE), HTML_ATTR(OPTION,TITLE), HTML_ATTR(OPTION,VALUE), HTML_ATTRIBUTES(OPTION) }; </PRE> <H3> PARAM </H3> <PRE> enum _HTML_PARAM_Attributes { HTML_ATTR(PARAM,ID) = 0, HTML_ATTR(PARAM,NAME), HTML_ATTR(PARAM,TYPE), HTML_ATTR(PARAM,VALUE), HTML_ATTR(PARAM,VALUETYPE), HTML_ATTRIBUTES(PARAM) }; </PRE> <H3> PRE </H3> <PRE> enum _HTML_PRE_Attributes { HTML_ATTR(PRE,CLASS) = 0, HTML_ATTR(PRE,DIR), HTML_ATTR(PRE,ID), HTML_ATTR(PRE,LANG), HTML_ATTR(PRE,STYLE), HTML_ATTR(PRE,TITLE), HTML_ATTR(PRE,WIDTH), HTML_ATTRIBUTES(PRE) }; </PRE> <H3> SCRIPT </H3> <PRE> enum _HTML_SCRIPT_Attributes { HTML_ATTR(SCRIPT,CHARSET) = 0, HTML_ATTR(SCRIPT,DEFER), HTML_ATTR(SCRIPT,LANGUAGE), HTML_ATTR(SCRIPT,SRC), HTML_ATTR(SCRIPT,TYPE), HTML_ATTRIBUTES(SCRIPT) }; </PRE> <H3> SELECT </H3> <PRE> enum _HTML_SELECT_Attributes { HTML_ATTR(SELECT,CLASS) = 0, HTML_ATTR(SELECT,DIR), HTML_ATTR(SELECT,DISABLED), HTML_ATTR(SELECT,ID), HTML_ATTR(SELECT,LANG), HTML_ATTR(SELECT,MULTIPLE), HTML_ATTR(SELECT,NAME), HTML_ATTR(SELECT,SIZE), HTML_ATTR(SELECT,STYLE), HTML_ATTR(SELECT,TABINDEX), HTML_ATTR(SELECT,TITLE), HTML_ATTRIBUTES(SELECT) }; </PRE> <H3> STYLE </H3> <PRE> enum _HTML_STYLE_Attributes { HTML_ATTR(STYLE,DIR) = 0, HTML_ATTR(STYLE,LANG), HTML_ATTR(STYLE,MEDIA), HTML_ATTR(STYLE,TITLE), HTML_ATTR(STYLE,TYPE), HTML_ATTRIBUTES(STYLE) }; </PRE> <H3> TABLE </H3> <PRE> enum _HTML_TABLE_Attributes { HTML_ATTR(TABLE,ALIGN) = 0, HTML_ATTR(TABLE,BGCOLOR), HTML_ATTR(TABLE,BORDER), HTML_ATTR(TABLE,CELLPADDING), HTML_ATTR(TABLE,CELLSPACING), HTML_ATTR(TABLE,CLASS), HTML_ATTR(TABLE,DIR), HTML_ATTR(TABLE,FRAME), HTML_ATTR(TABLE,ID), HTML_ATTR(TABLE,LANG), HTML_ATTR(TABLE,RULES), HTML_ATTR(TABLE,SUMMARY), HTML_ATTR(TABLE,STYLE), HTML_ATTR(TABLE,TITLE), HTML_ATTR(TABLE,WIDTH), HTML_ATTRIBUTES(TABLE) }; </PRE> <H3> TABLE Elements </H3> <PRE> enum _HTML_TELE_Attributes { HTML_ATTR(TELE,ALIGN) = 0, HTML_ATTR(TELE,CHAR), HTML_ATTR(TELE,CHAROFF), HTML_ATTR(TELE,CLASS), HTML_ATTR(TELE,DIR), HTML_ATTR(TELE,ID), HTML_ATTR(TELE,LANG), HTML_ATTR(TELE,STYLE), HTML_ATTR(TELE,TITLE), HTML_ATTR(TELE,VALIGN), HTML_ATTRIBUTES(TELE) }; </PRE> <H3> TD </H3> <PRE> enum _HTML_TD_Attributes { HTML_ATTR(TD,ABBR) = 0, HTML_ATTR(TD,ALIGN), HTML_ATTR(TD,AXIS), HTML_ATTR(TD,BGCOLOR), HTML_ATTR(TD,CHAR), HTML_ATTR(TD,CHAROFF), HTML_ATTR(TD,CLASS), HTML_ATTR(TD,COLSPAN), HTML_ATTR(TD,DIR), HTML_ATTR(TD,ID), HTML_ATTR(TD,HEADERS), HTML_ATTR(TD,HEIGHT), HTML_ATTR(TD,LANG), HTML_ATTR(TD,NOWRAP), HTML_ATTR(TD,ROWSPAN), HTML_ATTR(TD,SCOPE), HTML_ATTR(TD,STYLE), HTML_ATTR(TD,TITLE), HTML_ATTR(TD,VALIGN), HTML_ATTR(TD,WIDTH), HTML_ATTRIBUTES(TD) }; </PRE> <H3> TEXTAREA </H3> <PRE> enum _HTML_TEXTAREA_Attributes { HTML_ATTR(TEXTAREA,CLASS) = 0, HTML_ATTR(TEXTAREA,COLS), HTML_ATTR(TEXTAREA,DIR), HTML_ATTR(TEXTAREA,DISABLED), HTML_ATTR(TEXTAREA,ID), HTML_ATTR(TEXTAREA,LANG), HTML_ATTR(TEXTAREA,NAME), HTML_ATTR(TEXTAREA,READONLY), HTML_ATTR(TEXTAREA,ROWS), HTML_ATTR(TEXTAREA,STYLE), HTML_ATTR(TEXTAREA,TABINDEX), HTML_ATTR(TEXTAREA,TITLE), HTML_ATTRIBUTES(TEXTAREA) }; </PRE> <H3> TITLE </H3> <PRE> enum _HTML_TITLE_Attributes { HTML_ATTR(TITLE,DIR) = 0, HTML_ATTR(TITLE,LANG), HTML_ATTRIBUTES(TITLE) }; </PRE> <H3> UL </H3> <PRE> enum _HTML_UL_Attributes { HTML_ATTR(UL,CLASS) = 0, HTML_ATTR(UL,COMPACT), HTML_ATTR(UL,DIR), HTML_ATTR(UL,ID), HTML_ATTR(UL,LANG), HTML_ATTR(UL,STYLE), HTML_ATTR(UL,TITLE), HTML_ATTR(UL,TYPE), HTML_ATTRIBUTES(UL) }; </PRE> <H2> The C Representation of the SGML DTD </H2> <PRE> extern SGML_dtd * HTML_dtd (void); extern BOOL HTML_setDtd (const SGML_dtd * dtd); </PRE> <H2> Utitity Functions </H2> <H3> Start anchor element </H3> <P> It is kinda convenient to have a particular routine for starting an anchor element, as everything else for HTML is simple anyway. <PRE> extern void HTStartAnchor ( HTStructured * targetstream, const char * name, const char * href); </PRE> <H3> Put image element </H3> <P> This is the same idea but for images <PRE> extern void HTMLPutImg (HTStructured *obj, const char *src, const char *alt, const char *align); </PRE> <H3> Specify next ID to be used </H3> <P> This is another convenience routine, for specifying the next ID to be used by an editor in the series z1. z2,... <PRE> extern void HTNextID (HTStructured * targetStream, const char * s); </PRE> <PRE> #endif /* HTMLDTD_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMLPDTD.html,v 2.32 2025/01/06 10:48:50 kahan Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMemLog.c�����������������������������������������������������������������������0100644�0000764�0000144�00000010551�06664352703�015541� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTMemLog.c ** MEMORY BUFFERED DATA LOGGING UTILITIES ** ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMemLog.c,v 2.21 2025/02/22 22:10:11 frystyk Exp $ ** ** 26 Nov 96 (EGP) started */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTInet.h" #include "HTMemLog.h" #include "HTTimer.h" #ifdef O_SYNC #define OPEN_FLAGS O_WRONLY|O_CREAT|O_TRUNC|O_SYNC #else #define OPEN_FLAGS O_WRONLY|O_CREAT|O_TRUNC #endif #ifdef HTDEBUG #ifdef USE_SYSLOG #define PRINT_BUFF_SIZE 8200 #else /* USE_SYSLOG */ #define PRINT_BUFF_SIZE 200 #endif /* !USE_SYSLOG */ PRIVATE size_t LogBuffSize = 1024; /* default size is 1k */ PRIVATE int LogFd = 2; PRIVATE const char * LogName = NULL; PRIVATE char * LogBuff = NULL; PRIVATE size_t LogLen = 0; PRIVATE BOOL KeepOpen = YES; PRIVATE HTTimer * Timer = NULL; #ifdef USE_EXCLUDES typedef struct {char * str; int len;} StrIndexIndex; PRIVATE StrIndexIndex Excludes[] = {{"HTReader_read", 13}, {"HTWriter_write", 14}, {"HTEventList_loop", 16}}; PRIVATE int StrIndex (char * str, StrIndexIndex element[], int elements) { int i; for (i = 0; i < elements; i++) if (!strncmp(element[i].str, str, element[i].len)) return i + 1; return 0; } #endif /* USE_EXCLUDES */ PRIVATE int MemLogTimeout (HTTimer * timer, void * param, HTEventType type) { int ret; HTTRACE(CORE_TRACE, "MemLog...... flushing on timeout\n"); ret = HTMemLog_flush(); return ret; } PRIVATE ms_t HTMemLog_addTime(void) { char buff[20]; ms_t ms = HTGetTimeInMillis(); int len = sprintf(buff, "%lu", ms); HTMemLog_add(buff, len); return ms; } #endif /* HTDEBUG */ /* ------------------------------------------------------------------------- */ PUBLIC int HTMemLog_open (char * logName, size_t size, BOOL keepOpen) { #ifdef HTDEBUG #ifdef USE_SYSLOG openlog(LogName, LOG_NDELAY, LOG_USER); #else /* USE_SYSLOG */ LogName = logName; KeepOpen = keepOpen; if ((LogFd = open(LogName, OPEN_FLAGS, 0666)) == -1) return HT_ERROR; if (!KeepOpen) close(LogFd); LogBuffSize = size; if ((LogBuff = (char *) HT_MALLOC(size)) == NULL) HT_OUTOFMEM("HTMemLog_open"); LogLen = 0; #endif /* !USE_SYSLOG */ HTTraceData_setCallback(HTMemLog_callback); Timer = HTTimer_new(NULL, MemLogTimeout, NULL, 10000, YES, YES); #endif /* HTDEBUG */ return HT_OK; } PUBLIC int HTMemLog_flush(void) { #ifdef HTDEBUG if (LogLen) { if (!KeepOpen) if ((LogFd = open(LogName, O_WRONLY|O_CREAT|O_APPEND, 0666)) == -1) return HT_ERROR; write(LogFd, LogBuff, LogLen); LogLen = 0; } if (!KeepOpen) close(LogFd); #endif /* HTDEBUG */ return HT_OK; } PUBLIC int HTMemLog_add(char * buf, size_t len) { #ifdef HTDEBUG if (LogBuff) { /* ** Dump everything that won't fit in buffer */ while (len + LogLen > LogBuffSize) { size_t toWrite = LogBuffSize-LogLen; memcpy(LogBuff+LogLen, buf, toWrite); LogLen = LogBuffSize; /* same as += toWrite */ HTMemLog_flush(); buf += toWrite; len -= toWrite; } memcpy(LogBuff+LogLen, buf, len); LogLen += len; return HT_OK; } return HT_ERROR; #else return HT_OK; #endif /* HTDEBUG */ } PUBLIC void HTMemLog_close (void) { #ifdef HTDEBUG #ifdef USE_SYSLOG closelog(); #else /* USE_SYSLOG */ HTMemLog_flush(); if (LogFd > 2) close(LogFd); if (LogBuff != NULL) HT_FREE(LogBuff); #endif /* !USE_SYSLOG */ #endif } PUBLIC int HTMemLog_callback (char * data, size_t len, char * fmt, va_list pArgs) { #ifdef HTDEBUG char buff[PRINT_BUFF_SIZE]; int ret; #ifdef USE_EXCLUDES if (StrIndex(fmt, Excludes, sizeof(Excludes)/sizeof(Excludes[0]))) return 0; #endif /* USE_EXCLUDES */ #ifdef USE_SYSLOG ret = vsprintf(buff, fmt, pArgs); syslog(LOG_DEBUG, "%s\n", buff); if (len > 8192) len = 8192; strncpy(buff, data, len); buff[len] = 0; syslog(LOG_DEBUG, "%s\n", buff); #else /* USE_SYSLOG */ HTMemLog_addTime(); #ifdef HAVE_LONG_SIZE_T ret = sprintf(buff, " %ld ", len); #else ret = sprintf(buff, " %d ", len); #endif HTMemLog_add(buff, ret); if (fmt) { ret = vsprintf(buff, fmt, pArgs); HTMemLog_add(buff, ret); } HTMemLog_add("\n", 1); HTMemLog_add(data, len); HTMemLog_add("\n", 1); #endif /* !USE_SYSLOG */ return ret; #else return 0; #endif /* HTDEBUG */ } �������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMemLog.html��������������������������������������������������������������������0100644�0000764�0000144�00000002247�06526451244�016263� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 6-Apr-1996 --> <TITLE>W3C Sample Code Library libwww Generic String Management</TITLE> </HEAD> <BODY> <H1> Memory Buffered Logging </H1> <PRE> /* ** (c) COPYRIGHT MIT 199G. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> These functions provide functionality for memory buffered logging. This is usefull for tracking data read and written without affecting the timing of the network traffic. <P> This module is implemented by <A HREF="HTMemLog.c">HTMemLog.c</A>, and it is a part of the <A NAME="z10" HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTMEMLOG_H #define HTMEMLOG_H </PRE> <H2> <A NAME="all">The Whole Deal</A> </H2> Too much to do right now. <P> <PRE> extern int HTMemLog_open (char * logName, size_t size, BOOL keepOpen); extern int HTMemLog_add (char * buf, size_t len); extern int HTMemLog_flush (void); extern void HTMemLog_close (void); extern HTTraceDataCallback HTMemLog_callback; </PRE> <PRE> #endif /* !HTMEMLOG_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMemLog.html,v 2.6 2025/05/14 02:10:44 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMemory.c�����������������������������������������������������������������������0100644�0000764�0000144�00000010707�06664352703�015634� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTMemory.c ** DYNAMIC MEMORY MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMemory.c,v 2.10 2025/02/22 22:10:11 frystyk Exp $ ** ** History: ** 8 Feb 95 Written by Eric and Henrik */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTList.h" #include "HTMemory.h" /* Implemented here */ PRIVATE HTList * HTMemCall = NULL; /* List of memory freers */ PRIVATE HTMemory_exitCallback * PExit = NULL; /* panic and exit function */ PRIVATE size_t LastAllocSize = 0; /* size of last allocation */ /* ------------------------------------------------------------------------- */ /* HTMemoryCall_add ** ---------------- ** Register a call back function that is to be called if we need more ** memory. Several call back functions can be registered in which case ** all of them are called in the order of which they were registered. */ PUBLIC BOOL HTMemoryCall_add (HTMemoryCallback * cbf) { HTTRACE(MEM_TRACE, "Mem Add..... Callback %p\n" _ (void *) cbf); if (!HTMemCall) HTMemCall = HTList_new(); return cbf ? HTList_addObject(HTMemCall, (void *) cbf) : NO; } /* HTMemoryCall_delete ** ------------------- ** Unregister a call back function from a list */ PUBLIC BOOL HTMemoryCall_delete (HTMemoryCallback * cbf) { HTTRACE(MEM_TRACE, "Mem Delete.. Callback %p\n" _ (void *) cbf); return (HTMemCall && cbf) ? HTList_removeObject(HTMemCall,(void*)cbf) : NO; } /* HTMemoryCall_deleteAll ** ---------------------- ** Unregisters all call back functions */ PUBLIC BOOL HTMemoryCall_deleteAll (void) { HTTRACE(MEM_TRACE, "Mem Delete.. All Callback functions\n"); if (HTMemCall) { HTList_delete(HTMemCall); HTMemCall = NULL; return YES; } return NO; } /* ** Allocates memory using malloc */ PUBLIC void * HTMemory_malloc (size_t size) { void * ptr; ptr = malloc(LastAllocSize = size); if (ptr != NULL) return ptr; if (HTMemCall) { HTMemoryCallback * pres; while ((pres = (HTMemoryCallback *) HTList_nextObject(HTMemCall))) { HTTRACE(MEM_TRACE, "Mem Calling. %p (size %d)\n" _ (void*)pres _ size); (*pres)(size); if ((ptr = malloc(size)) != NULL) return ptr; } } HTTRACE(MEM_TRACE, "Memory.... Couldn't allocate %d bytes\n" _ size); return NULL; } /* ** Allocates memory using calloc */ PUBLIC void * HTMemory_calloc (size_t nobj, size_t size) { void * ptr; ptr = calloc(nobj, LastAllocSize = size); if (ptr != NULL) return ptr; if (HTMemCall) { HTMemoryCallback * pres; size_t total = size * nobj; while ((pres = (HTMemoryCallback *) HTList_nextObject(HTMemCall))) { HTTRACE(MEM_TRACE, "Mem Calling. %p (size %d)\n" _ (void *) pres _ total); (*pres)(total); if ((ptr = calloc(nobj, size)) != NULL) return ptr; } } HTTRACE(MEM_TRACE, "Memory...... Couldn't allocate %d objects of size %d\n" _ nobj _ size); return NULL; } /* ** Reallocates memory using realloc */ PUBLIC void * HTMemory_realloc (void * p, size_t size) { void * ptr; ptr = realloc(p, LastAllocSize = size); if (ptr != NULL) return ptr; if (HTMemCall) { HTMemoryCallback * pres; while ((pres = (HTMemoryCallback *) HTList_nextObject(HTMemCall))) { HTTRACE(MEM_TRACE, "Mem Calling. %p (size %d)\n" _ (void*)pres _ size); (*pres)(size); if ((ptr = realloc(p, size)) != NULL) return ptr; } } HTTRACE(MEM_TRACE, "Memory...... Couldn't reallocate %d bytes\n" _ size); return NULL; } /* ** Frees memory */ PUBLIC void HTMemory_free (void * ptr) { if (ptr) { HTTRACE(MEM_TRACE, "Memory Free. %p\n" _ ptr); free(ptr); } } /* HTMemory_setExit ** ---------------- ** Register the memory exit function. This function notifies the user that ** it is all over. If this function returns or is undefined, ** HTMemory_outofmem calls abort. */ PUBLIC void HTMemory_setExit (HTMemory_exitCallback * pExit) { PExit = pExit; } /* HTMemory_exit ** ------------- ** Get the current exit function. */ PUBLIC HTMemory_exitCallback * HTMemory_exit (void) { return PExit; } /* HTMemory_outofmem ** ----------------- ** Call app defined exit function. If that returns, exit anyway. */ PUBLIC void HTMemory_outofmem (char * name, char * file, unsigned long line) { if (PExit) (*PExit)(name, file, line); HTTRACE(ALL_TRACE, "%s:%ld failed allocation for \"%s\" (%ld bytes).\nProgram aborted.\n" _ file _ line _ name _ LastAllocSize); abort(); } ���������������������������������������������������������libwww/Library/src/HTMemory.html��������������������������������������������������������������������0100644�0000764�0000144�00000012775�06526451245�016363� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Jun-1996 --> <TITLE>W3C Sample Code Library libwww Dynamic Memory Handlers</TITLE> </HEAD> <BODY> <H1> Dynamic Memory Handlers </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module defines any memory handler to be used by libwww for allocating and de-allocating dynamic memory. As dynamic memory may be a scarce resource, it is required that an application can handle memory exhaustion gracefully. This module provides an interface that covers the following situations: <P> <UL> <LI> <A HREF="#Allocation">Handling of allocation, reallocation and de-allocation of dynamic memory</A> <LI> <A HREF="#Memory">Recovering from temporary lack of available memory</A> <LI> <A HREF="#Panic">Panic handling in case a new allocation fails</A> </UL> <P> <B>Note</B>: The Library <I>core</I> provides a default set of memory handlers for allocating and de-allocating dynamic memory. In order to maintain a reasonable performance, they are not registered dynamically but assigned using <I>C style macros</I>. Hence, it is not possible to swap memory handler at run time but this was considered to be a reasonable trade-off. <P> This module is implemented by <A HREF="HTMemory.c">HTMemory.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTMEMORY_H #define HTMEMORY_H #include "<A HREF="HTUtils.html">HTUtils.h</A>" </PRE> <H2> <A NAME="Allocation">Allocation, Reallocation and De-allocation</A> </H2> <P> The Library provides a default set of methods for handling dynamic memory. They are very basic and essentially identical to the C style <CODE>malloc</CODE>, <CODE>calloc</CODE>, <CODE>realloc</CODE>, and <CODE>free</CODE>: <PRE>extern void* HTMemory_malloc(size_t size); extern void* HTMemory_calloc(size_t count, size_t size); extern void* HTMemory_realloc(void * ptr, size_t size); extern void HTMemory_free(void* ptr); </PRE> <H3> Memory Macros </H3> <P> The methods above are not referred directly in the Library. Instead we use a set of C style macros. If you don't wany any memory management beyond normal malloc and alloc then you can just use that instead of the HTMemory_* function. You can of course also provide your own methods as well. <PRE> #define HT_MALLOC(size) HTMemory_malloc((size)) #define HT_CALLOC(count, size) HTMemory_calloc((count), (size)) #define HT_REALLOC(ptr, size) HTMemory_realloc((ptr), (size)) #define HT_FREE(pointer) {HTMemory_free((pointer));((pointer))=NULL;} </PRE> <H2> <A NAME="Memory">Memory Freer Functions</A> </H2> <P> The dynamic memory freer functions are typically functions that are capable of freeing large chunks of memory. In case a new allocation fails, the allocation method looks for any registered freer functions to call. There can be multiple freer functions and after each call, the allocation method tries again to allocate the desired amount of dynamic memory. The freer functions are called in <EM>reverse</EM> order meaning that the <EM>last</EM> one registered gets called <EM>first</EM>. That way, it is easy to add temporary freer functions which then are guaranteed to be called first if a methods fails. <H3> Add a Freer Function </H3> <P> You can add a freer function by using the following method. The Library may itself register a set of free functions during initialization. If the application does not register any freer functions then the Library looks how it can free internal memory. The freer function is passed the total number of <I>bytes</I> requested by the allocation. <PRE>typedef void HTMemoryCallback(size_t size); extern BOOL HTMemoryCall_add (HTMemoryCallback * cbf); </PRE> <H3> Delete a Freer Function </H3> <P> Freer functions can be deleted at any time in which case they are not called anymore. <PRE> extern BOOL HTMemoryCall_delete (HTMemoryCallback * cbf); extern BOOL HTMemoryCall_deleteAll (void); </PRE> <H2> <A NAME="Panic">Panic Handling</A> </H2> <P> If the freer functions are not capable of de-allocation enough memory then the application must have an organized way of closing down. This is done using the panic handler. In the libwww, each allocation is tested and <CODE>HT_OUTOFMEM</CODE> is called if a <CODE>NULL</CODE> was returned. <CODE>HT_OUTOFMEM</CODE> is a macro which by default calls <CODE>HTMemory_outofmem()</CODE> but of course can point to any method. The default handler calls an exit function defined by the application in a call to <CODE>HTMemory_setExit()</CODE>. If the application has <I>not</I> defined an exit function, <CODE>HTMemory_outofmem()</CODE> prints an error message and calls <CODE>exit(1)</CODE>. <PRE> typedef void HTMemory_exitCallback(char *name, char *file, unsigned long line); extern void HTMemory_setExit(HTMemory_exitCallback * pExit); extern HTMemory_exitCallback * HTMemory_exit(void); </PRE> <H3> Call the Exit Handler </H3> <P> If an allocation fails then this function is called. If the application has registered its own panic handler then this is called directly from this function. Otherwise, the default behavior is to write a small message to stderr and then exit. <PRE> #define outofmem(file, name) HT_OUTOFMEM(name) #define HT_OUTOFMEM(name) HTMemory_outofmem((name), __FILE__, __LINE__) extern void HTMemory_outofmem(char * name, char * file, unsigned long line); </PRE> <PRE> #endif /* HTMEMORY_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMemory.html,v 2.12 2025/05/14 02:10:45 frystyk Exp $ </ADDRESS> </BODY></HTML> ���libwww/Library/src/HTMerge.c������������������������������������������������������������������������0100644�0000764�0000144�00000005014�06664352703�015416� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** MERGE CLASS STREAM DEFINITION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMerge.c,v 2.3 2025/02/22 22:10:11 frystyk Exp $ ** ** The Merge class just is a n entry stream. Easy. The reason for having ** this stream is that we must be able to handle free and abort in an ** organized manner. ** You can also check out the. Tee stream and the Black hole stream. ** ** HISTORY: ** 25 Sep 96 HFN Written */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTMerge.h" struct _HTStream { const HTStreamClass * isa; HTStream * target; int feeds; /* Number of feeds */ }; PRIVATE int HTMerge_putCharacter (HTStream * me, char c) { return (me->feeds > 0) ? (*me->target->isa->put_character)(me->target, c) : HT_OK; } PRIVATE int HTMerge_putString (HTStream * me, const char * s) { return (me->feeds > 0) ? (*me->target->isa->put_string)(me->target, s) : HT_OK; } PRIVATE int HTMerge_putBlock (HTStream * me, const char * s, int l) { return (me->feeds > 0) ? (*me->target->isa->put_block)(me->target, s, l) : HT_OK; } PRIVATE int HTMerge_flush (HTStream * me) { return (me->feeds > 0) ? (*me->target->isa->flush)(me->target) : HT_OK; } /* ** We expect n number of calls to this method but as long as our number ** of feeds is not down to 1, we just ignore it. Abort works the same way */ PRIVATE int HTMerge_free (HTStream * me) { if (me) { HTTRACE(STREAM_TRACE, "Merge Free.. Called with %d feeds\n" _ me->feeds); if (--me->feeds <= 0) { (*me->target->isa->_free)(me->target); HT_FREE(me); } return HT_OK; } return HT_ERROR; } PRIVATE int HTMerge_abort (HTStream * me, HTList * e) { if (me) { HTTRACE(STREAM_TRACE, "Merge Abort. Called with %d feeds\n" _ me->feeds); if (--me->feeds <= 0) { (*me->target->isa->abort)(me->target, e); HT_FREE(me); } } return HT_ERROR; } PRIVATE const HTStreamClass HTMergeClass = { "MergeStream", HTMerge_flush, HTMerge_free, HTMerge_abort, HTMerge_putCharacter, HTMerge_putString, HTMerge_putBlock }; PUBLIC HTStream * HTMerge (HTStream * target, int feeds) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(*me))) == NULL) HT_OUTOFMEM("HTMerge"); me->isa = &HTMergeClass; me->target = target ? target : HTBlackHole(); me->feeds = feeds >= 1 ? feeds : 1; /* Min 1 feed */ HTTRACE(STREAM_TRACE, "Merge....... Created stream %p\n" _ me); return me; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMerge.html���������������������������������������������������������������������0100644�0000764�0000144�00000002043�06526451245�016135� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 31-May-1996 --> <TITLE>W3C Sample Code Library libwww Merge Stream</TITLE> </HEAD> <BODY> <H1> Merge stream </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The <I>Merge</I> stream can be used to merge multiple streams into a single target stream. The Merge stream does not prevent any of the streams from writing and no ordering is imposed. The main feature is basically that the free and abort methods can be called n times where n equals the number of feeds that put data to the stream. <P> This module is implemented by <A HREF="HTMerge.c">HTMerge.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef _HTMERGE_H #define _HTMERGE_H #include "HTStream.h" extern HTStream * HTMerge (HTStream * target, int feeds); #endif /* HTMERGE_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMerge.html,v 2.3 2025/05/14 02:10:45 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMethod.c�����������������������������������������������������������������������0100644�0000764�0000144�00000004657�06523414334�015604� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTMethod.c ** MANAGES REQUEST METHODS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMethod.c,v 2.6 2025/05/04 19:37:00 frystyk Exp $ ** ** ** HISTORY: ** 6 June 95 HFN Spawned off from HTAccess. Can be extended to allow ** registration of new methods */ /* Library Include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTMethod.h" /* Implemented here */ PRIVATE char *method_names[] = { "INVALID-METHOD", "GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "TRACE", "OPTIONS", "LINK", "UNLINK", NULL }; /* ------------------------------------------------------------------------- */ /* Get method enum value ** --------------------- */ PUBLIC HTMethod HTMethod_enum (const char * name) { if (name) { if (!strcasecomp(name, *(method_names+1))) return METHOD_GET; else if (!strcasecomp(name, *(method_names+2))) return METHOD_HEAD; else if (!strcasecomp(name, *(method_names+3))) return METHOD_POST; else if (!strcasecomp(name, *(method_names+4))) return METHOD_PUT; else if (!strcasecomp(name, *(method_names+5))) return METHOD_PATCH; else if (!strcasecomp(name, *(method_names+6))) return METHOD_DELETE; else if (!strcasecomp(name, *(method_names+7))) return METHOD_TRACE; else if (!strcasecomp(name, *(method_names+8))) return METHOD_OPTIONS; else if (!strcasecomp(name, *(method_names+9))) return METHOD_LINK; else if (!strcasecomp(name, *(method_names+10))) return METHOD_UNLINK; } return METHOD_INVALID; } /* Get method name ** --------------- ** Returns pointer to entry in static table in memory */ PUBLIC const char * HTMethod_name (HTMethod method) { if (method & METHOD_GET) return *(method_names+1); else if (method == METHOD_HEAD) return *(method_names+2); else if (method == METHOD_POST) return *(method_names+3); else if (method == METHOD_PUT) return *(method_names+4); else if (method == METHOD_PATCH) return *(method_names+5); else if (method == METHOD_DELETE) return *(method_names+6); else if (method == METHOD_TRACE) return *(method_names+7); else if (method == METHOD_OPTIONS) return *(method_names+8); else if (method == METHOD_LINK) return *(method_names+9); else if (method == METHOD_UNLINK) return *(method_names+10); else return *method_names; } ���������������������������������������������������������������������������������libwww/Library/src/HTMethod.html��������������������������������������������������������������������0100644�0000764�0000144�00000004776�06526451245�016335� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 1-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Request Access Methods</TITLE> </HEAD> <BODY> <H1> Request Access Methods </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module keeps a list of valid methods to be performed on a <A HREF="HTReq.html">request object</A>, for example <B>GET</B>, <B>HEAD</B>, <B>PUT</B>, <B>POST</B>, <B>DELETE</B>, etc.&nbsp;You can assign which method to be performed on the request object <A HREF="HTReq.html">directly</A> or you can go through the <A HREF="HTReq.html">Access module</A> for higher level functions. <P> This module is implemented by <A HREF="HTMethod.c">HTMethod.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE>#ifndef HTMETHOD_H #define HTMETHOD_H </PRE> <P> <B>NOTE:</B> The anchor list of allowed methods is a bitflag, not at list! <PRE> typedef enum { METHOD_INVALID = 0x0, METHOD_GET = 0x1, METHOD_HEAD = 0x2, METHOD_POST = 0x4, METHOD_PUT = 0x8, METHOD_PATCH = 0x10, METHOD_DELETE = 0x20, METHOD_TRACE = 0x40, METHOD_OPTIONS = 0x80, METHOD_LINK = 0x100, METHOD_UNLINK = 0x200 } HTMethod; </PRE> <H3> Get Method Enumeration </H3> <P> Gives the enumeration value of the method as a function of the (char *) name. <PRE> extern HTMethod HTMethod_enum (const char * name); </PRE> <H3> Get Method String </H3> <P> The reverse of <I>HTMethod_enum()</I> <PRE> extern const char * HTMethod_name (HTMethod method); </PRE> <H3> Is Method "Safe"? </H3> <P> If a method is safe, it doesn't produce any side effects on the server <PRE> #define HTMethod_isSafe(me) ((me) & (METHOD_GET|METHOD_HEAD)) </PRE> <H3> Does the Method Replace or Add to Metainformation </H3> <P> Most methods override the current set of metainformation stored in an <A HREF="HTAnchor.html">anchor</A>. However, a few methods actually only add to the anchor metainformation. We have a small macro to make the distinction. <PRE> #define HTMethod_addMeta(me) ((me) & (METHOD_TRACE | METHOD_OPTIONS)) </PRE> <H3> Does a Method include Entity? </H3> <P> Does a method include an entity to be sent from the client to the server? <PRE> #define HTMethod_hasEntity(me) ((me) & (METHOD_PUT | METHOD_POST)) </PRE> <PRE> #endif /* HTMETHOD_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMethod.html,v 2.16 2025/05/14 02:10:45 frystyk Exp $ </ADDRESS> </BODY></HTML> ��libwww/Library/src/HTMulpar.html��������������������������������������������������������������������0100644�0000764�0000144�00000003705�06526451246�016345� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww MIME MULTIPART STREAM</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>MIME Multipart Stream Definition</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTMULPAR_H #define HTMULPAR_H #include "HTStream.h" #include "HTList.h" </PRE> The MIME multipart stream is used to parse MIME multipart messages. It works a bit like a structured stream in that it has some methods to begin and end MIME body just as a structured stream has methods for beginning and ending tags. <P> The <CODE>HTMultipart stream</CODE> is a subclass of a <A HREF="HTStream.html">Generic Stream Object</A>. As always, we don't have classes in basic C so we have to do this by hand! <P> <PRE> typedef struct _HTMultipart HTMultipart; typedef struct _HTMultipartClass { char * name; int (*flush) (HTMultipart * me); int (*_free) (HTMultipart * me); int (*abort) (HTMultipart * me, HTList * errorlist); int (*put_character)(HTMultipart * me, char ch); int (*put_string) (HTMultipart * me, const char * str); int (*put_block) (HTMultipart * me, const char * str, int len); </PRE> See the <A HREF="HTStream.html">Generic Stream Definition</A> for an explanation of these methods. Note that they all have a <CODE>HTMultipart</CODE> object a the parameter, not a generic stream. This is to avoid <EM>incompatible pointer</EM> warnings <PRE> int (*begin_part) (HTMultipart * me, const char * boundary); int (*end_part) (HTMultipart * me); int (*preamble) (HTMultipart * me, const char * pre); int (*epilogue) (HTMultipart * me, const char * epi); } HTMultipartClass; #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTMulpar.html,v 2.6 2025/05/14 02:10:46 frystyk Exp $ </ADDRESS> </BODY> </HTML> �����������������������������������������������������������libwww/Library/src/HTMulti.c������������������������������������������������������������������������0100644�0000764�0000144�00000037422�07035071422�015446� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** CONTENT NEGOTIATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMulti.c,v 2.36 2025/01/06 10:48:50 kahan Exp $ ** ** History: ** March 94 AL Separated from HTFile.c because ** multiformat handling would be a mess in VMS. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTMulti.h" #include "HTBind.h" #include "HTFile.h" #define MULTI_SUFFIX ".multi"/* Extension for scanning formats */ #define MAX_SUFF 15 /* Maximum number of suffixes for a file */ #define VARIANTS 4 /* We start with this array size */ typedef struct _HTContentDescription { char * filename; HTFormat content_type; HTLanguage content_language; HTEncoding content_encoding; HTEncoding content_transfer; int content_length; double quality; } HTContentDescription; PRIVATE HTList * welcome_names = NULL; /* Welcome.html, index.html etc. */ /* ------------------------------------------------------------------------- */ /* ** Sort the q values in descending order */ PRIVATE int VariantSort (const void * a, const void * b) { HTContentDescription * aa = *(HTContentDescription **) a; HTContentDescription * bb = *(HTContentDescription **) b; if (aa && bb) return (aa->quality > bb->quality) ? -1 : 1; return bb - aa; } /* * Added by takada@seraph.ntt.jp (94/04/08) */ PRIVATE BOOL lang_match (HTAtom * tmplate, HTAtom * actual) { const char *t, *a; char *st, *sa; BOOL match = NO; if (tmplate && actual && (t = HTAtom_name(tmplate)) && (a = HTAtom_name(actual))) { st = strchr(t, '_'); sa = strchr(a, '_'); if ((st != NULL) && (sa != NULL)) { if (!strcasecomp(t, a)) match = YES; else match = NO; } else { if (st != NULL) *st = 0; if (sa != NULL) *sa = 0; if (!strcasecomp(t, a)) match = YES; else match = NO; if (st != NULL) *st = '_'; if (sa != NULL) *sa = '_'; } } return match; } PRIVATE double type_value (HTAtom * content_type, HTList * accepted) { if (!content_type) return (1.0); if (accepted) { HTList * cur = accepted; HTPresentation * pres; HTPresentation * wild = NULL; while ((pres = (HTPresentation *) HTList_nextObject(cur))) { if (pres->rep == content_type) return pres->quality; else if (HTMIMEMatch(pres->rep, content_type)) wild = pres; } if (wild) return wild->quality; else return (0.0); /* Nothing matched */ } return (1.0); /* We accept all types */ } PRIVATE double lang_value (HTAtom * language, HTList * accepted) { if (!language) return (1.0); if (accepted) { HTList * cur = accepted; HTAcceptNode * node; HTAcceptNode * wild = NULL; while ((node = (HTAcceptNode *) HTList_nextObject(cur))) { if (node->atom == language) return node->quality; /* * patch by takada@seraph.ntt.jp (94/04/08) * the original line was * else if (HTMIMEMatch(node->atom, language)) { * and the new line is */ else if (lang_match(node->atom, language)) wild = node; } if (wild) return wild->quality; else return (0.0); /* Nothing matched */ } return (1.0); /* We accept all languages */ } PRIVATE double encoding_value (HTAtom * encoding, HTList * accepted) { if (!encoding) return (1.0); if (accepted) { HTList * cur = accepted; HTAcceptNode * node; HTAcceptNode * wild = NULL; const char * e = HTAtom_name(encoding); if (!strcmp(e, "7bit") || !strcmp(e, "8bit") || !strcmp(e, "binary")) return (1.0); while ((node = (HTAcceptNode*)HTList_nextObject(cur))) { if (node->atom == encoding) return node->quality; else if (HTMIMEMatch(node->atom, encoding)) wild = node; } if (wild) return wild->quality; else return (0.0); /* Nothing matched */ } return (1.0); /* We accept all encodings */ } PRIVATE BOOL HTRank (HTRequest * request, HTArray * variants) { HTContentDescription * cd; void ** data; if (!variants) { HTTRACE(PROT_TRACE, "Ranking..... No variants\n"); return NO; } /* ** Walk through the list of local and global preferences and find the ** overall q factor for each variant */ cd = (HTContentDescription *) HTArray_firstObject(variants, data); while (cd) { double ctq_local = type_value(cd->content_type, HTRequest_conversion(request)); double ctq_global = type_value(cd->content_type, HTFormat_conversion()); double clq_local = lang_value(cd->content_language, HTRequest_language(request)); double clq_global = lang_value(cd->content_language, HTFormat_language()); double ceq_local = encoding_value(cd->content_encoding, HTRequest_encoding(request)); double ceq_global = encoding_value(cd->content_encoding, HTFormat_contentCoding()); HTTRACE(PROT_TRACE, "Qualities... Content type: %.3f, Content language: %.3f, Content encoding: %.3f\n" _ HTMAX(ctq_local, ctq_global) _ HTMAX(clq_local, clq_global) _ HTMAX(ceq_local, ceq_global)); cd->quality *= (HTMAX(ctq_local, ctq_global) * HTMAX(clq_local, clq_global) * HTMAX(ceq_local, ceq_global)); cd = (HTContentDescription *) HTArray_nextObject(variants, data); } /* Sort the array of all our accepted preferences */ HTArray_sort(variants, VariantSort); /* Write out the result */ #ifdef HTDEBUG if (PROT_TRACE) { int cnt = 1; cd = (HTContentDescription *) HTArray_firstObject(variants, data); HTTRACE(PROT_TRACE, "Ranking.....\n"); HTTRACE(PROT_TRACE, "RANK QUALITY CONTENT-TYPE LANGUAGE ENCODING FILE\n"); while (cd) { HTTRACE(PROT_TRACE, "%d. %.4f %-20.20s %-8.8s %-10.10s %s\n" _ cnt++ _ cd->quality _ cd->content_type ? HTAtom_name(cd->content_type) : "-" _ cd->content_language?HTAtom_name(cd->content_language):"-" _ cd->content_encoding?HTAtom_name(cd->content_encoding):"-" _ cd->filename ? cd->filename :"-"); cd = (HTContentDescription *) HTArray_nextObject(variants, data); } } #endif /* HTDEBUG */ return YES; } /* PUBLIC HTSplitFilename() ** ** Split the filename to an array of suffixes. ** Return the number of parts placed to the array. ** Array should have MAX_SUFF+1 items. */ PRIVATE int HTSplitFilename (char * s_str, char ** s_arr) { const char *delimiters = HTBind_delimiters(); char * start = s_str; char * end; char save; int i; if (!s_str || !s_arr) return 0; for (i=0; i < MAX_SUFF && *start; i++) { for(end=start+1; *end && !strchr(delimiters, *end); end++); save = *end; *end = 0; StrAllocCopy(s_arr[i], start); /* Frees the previous value */ *end = save; start = end; } HT_FREE(s_arr[i]); /* Terminating NULL */ return i; } /* ** Set default file name for welcome page on each directory. */ PUBLIC void HTAddWelcome (char * name) { if (name) { char * mycopy = NULL; StrAllocCopy(mycopy,name); if (!welcome_names) welcome_names = HTList_new(); HTList_addObject(welcome_names, (void*)mycopy); } } #ifdef HAVE_READDIR /* PRIVATE multi_match() ** ** Check if actual filename (split in parts) fulfills ** the requirements. */ PRIVATE BOOL multi_match (char ** required, int m, char ** actual, int n) { int c; int i,j; #ifdef VMS for(c=0; c<m && c<n && !strcasecomp(required[c], actual[c]); c++); #else /* not VMS */ for(c=0; c<m && c<n && !strcmp(required[c], actual[c]); c++); #endif /* not VMS */ if (!c) return NO; /* Names differ rigth from start */ for(i=c; i<m; i++) { BOOL found = NO; for(j=c; j<n; j++) { #ifdef VMS if (!strcasecomp(required[i], actual[j])) { #else /* not VMS */ if (!strcmp(required[i], actual[j])) { #endif /* not VMS */ found = YES; break; } } if (!found) return NO; } return YES; } /* ** Get multi-match possibilities for a given file ** ---------------------------------------------- ** On entry: ** path absolute path to one file in a directory, ** may end in .multi. ** On exit: ** returns a list of ContentDesription structures ** describing the mathing files. ** */ PRIVATE HTArray * dir_matches (char * path) { static char * required[MAX_SUFF+1]; static char * actual[MAX_SUFF+1]; int m,n; char * dirname = NULL; char * basename = NULL; int baselen; char * multi = NULL; DIR * dp; struct dirent * dirbuf; HTArray * matches = NULL; #ifdef HT_REENTRANT struct dirent result; /* For readdir_r */ #endif if (!path) return NULL; StrAllocCopy(dirname, path); basename = (strrchr(dirname, '/')); if (!basename) goto dir_match_failed; *basename++ = 0; multi = strrchr(basename, MULTI_SUFFIX[0]); if (multi && !strcasecomp(multi, MULTI_SUFFIX)) *multi = 0; baselen = strlen(basename); m = HTSplitFilename(basename, required); dp = opendir(dirname); if (!dp) { HTTRACE(PROT_TRACE, "Warning..... Can't open directory %s\n" _ dirname); goto dir_match_failed; } matches = HTArray_new(VARIANTS); #ifdef HAVE_READDIR_R_2 while ((dirbuf = (struct dirent *) readdir_r(dp, &result))) { #elif defined(HAVE_READDIR_R_3) while (readdir_r(dp, &result, &dirbuf) == 0) { #else while ((dirbuf = readdir(dp))) { #endif /* HAVE_READDIR_R_2 */ if (!dirbuf->d_ino) continue; /* Not in use */ if (!strcmp(dirbuf->d_name,".") || !strcmp(dirbuf->d_name,"..") || !strcmp(dirbuf->d_name, DEFAULT_DIR_FILE)) continue; /* Use of direct->namlen is only valid in BSD'ish system */ /* Thanks to chip@chinacat.unicom.com (Chip Rosenthal) */ /* if ((int)(dirbuf->d_namlen) >= baselen) { */ if ((int) strlen(dirbuf->d_name) >= baselen) { n = HTSplitFilename(dirbuf->d_name, actual); if (multi_match(required, m, actual, n)) { HTContentDescription * cd; if ((cd = (HTContentDescription *) HT_CALLOC(1, sizeof(HTContentDescription))) == NULL) HT_OUTOFMEM("dir_matches"); if (HTBind_getFormat(dirbuf->d_name, &cd->content_type, &cd->content_encoding, &cd->content_transfer, &cd->content_language, &cd->quality)) { if (cd->content_type) { if ((cd->filename = (char *) HT_MALLOC(strlen(dirname) + 2 + strlen(dirbuf->d_name))) == NULL) HT_OUTOFMEM("dir_matches"); sprintf(cd->filename, "%s/%s", dirname, dirbuf->d_name); HTArray_addObject(matches, (void *) cd); } else { HT_FREE(cd); } } else { HT_FREE(cd); } } } } closedir(dp); dir_match_failed: HT_FREE(dirname); return matches; } /* ** Get the best match for a given file ** ----------------------------------- ** On entry: ** req->conversions accepted content-types ** req->encodings accepted content-transfer-encodings ** req->languages accepted content-languages ** path absolute pathname of the filename for ** which the match is desired. ** On exit: ** returns a newly allocated absolute filepath. */ PRIVATE char * HTGetBest (HTRequest * req, char * path) { HTArray * variants = NULL; char * representation = NULL; if (!path || !*path) return NULL; if ((variants = dir_matches(path)) == NULL) { HTTRACE(PROT_TRACE, "No matches.. for \"%s\"\n" _ path); return NULL; } #ifdef HTDEBUG if (PROT_TRACE) { void ** data; HTContentDescription * cd = HTArray_firstObject(variants, data); HTTRACE(PROT_TRACE, "Multi....... Possibilities for \"%s\"\n" _ path); HTTRACE(PROT_TRACE, " QUALITY CONTENT-TYPE LANGUAGE ENCODING FILE\n"); while (cd) { HTTRACE(PROT_TRACE, " %.4f %-20.20s %-8.8s %-10.10s %s\n" _ cd->quality _ cd->content_type ?HTAtom_name(cd->content_type) :"-\t" _ cd->content_language?HTAtom_name(cd->content_language):"-" _ cd->content_encoding?HTAtom_name(cd->content_encoding):"-" _ cd->filename ?cd->filename :"-"); cd = (HTContentDescription *) HTArray_nextObject(variants, data); } } #endif /* HTDEBUG */ /* ** Finally get the best variant which is readable */ if (HTRank(req, variants)) { void ** data; HTContentDescription * cd = HTArray_firstObject(variants, data); while (cd) { if (cd->filename) { if (access(cd->filename, R_OK) != -1) StrAllocCopy(representation, cd->filename); else HTTRACE(PROT_TRACE, "Multi....... `%s\' is not readable\n" _ cd->filename); } HT_FREE(cd->filename); HT_FREE(cd); cd = (HTContentDescription *) HTArray_nextObject(variants, data); } } HTArray_delete(variants); return representation; } PRIVATE int welcome_value (char * name) { HTList * cur = welcome_names; char * welcome; int v = 0; while ((welcome = (char*)HTList_nextObject(cur))) { v++; if (!strcmp(welcome,name)) return v; } return 0; } PRIVATE char * get_best_welcome (char * path) { char * best_welcome = NULL; int best_value = 0; DIR * dp; struct dirent * dirbuf; char * last = strrchr(path, '/'); if (!welcome_names) { HTAddWelcome("Welcome.html"); HTAddWelcome("welcome.html"); #if 0 HTAddWelcome("Index.html"); #endif HTAddWelcome("index.html"); } if (last && last!=path) *last = 0; dp = opendir(path); if (last && last!=path) *last='/'; if (!dp) { HTTRACE(PROT_TRACE, "Warning..... Can't open directory %s\n" _ path); return NULL; } while ((dirbuf = readdir(dp))) { if (!dirbuf->d_ino || !strcmp(dirbuf->d_name,".") || !strcmp(dirbuf->d_name,"..") || !strcmp(dirbuf->d_name, DEFAULT_DIR_FILE)) continue; else { int v = welcome_value(dirbuf->d_name); if (v > best_value) { best_value = v; StrAllocCopy(best_welcome, dirbuf->d_name); } } } closedir(dp); if (best_welcome) { char * welcome; if ((welcome = (char *) HT_MALLOC(strlen(path) + strlen(best_welcome)+2)) == NULL) HT_OUTOFMEM("get_best_welcome"); sprintf(welcome, "%s%s%s", path, last ? "" : "/", best_welcome); HT_FREE(best_welcome); HTTRACE(PROT_TRACE, "Welcome..... \"%s\"\n" _ welcome); return welcome; } return NULL; } #endif /* HAVE_READDIR */ /* ** Do multiformat handling ** ----------------------- ** On entry: ** req->conversions accepted content-types ** req->encodings accepted content-transfer-encodings ** req->languages accepted content-languages ** path absolute pathname of the filename for ** which the match is desired. ** stat_info pointer to result space. ** ** On exit: ** returns a newly allocated absolute filepath of the best ** match, or NULL if no match. ** stat_info will contain inode information as ** returned by stat(). */ PUBLIC char * HTMulti (HTRequest * req, char * path, struct stat * stat_info) { char * new_path = NULL; int stat_status = -1; if (!req || !path || !*path || !stat_info) return NULL; #ifdef HAVE_READDIR if (*(path+strlen(path)-1) == '/') { /* Find welcome page */ new_path = get_best_welcome(path); if (new_path) path = new_path; } else{ char * multi = strrchr(path, MULTI_SUFFIX[0]); if (multi && !strcasecomp(multi, MULTI_SUFFIX)) { HTTRACE(PROT_TRACE, "Multi....... by %s suffix\n" _ MULTI_SUFFIX); if (!(new_path = HTGetBest(req, path))) { HTTRACE(PROT_TRACE, "Multi....... failed -- giving up\n"); return NULL; } path = new_path; } else { stat_status = HT_STAT(path, stat_info); if (stat_status == -1) { HTTRACE(PROT_TRACE, "AutoMulti... can't stat \"%s\"(errno %d)\n" _ path _ errno); if (!(new_path = HTGetBest(req, path))) { HTTRACE(PROT_TRACE, "AutoMulti... failed -- giving up\n"); return NULL; } path = new_path; } } } #endif /* HAVE_READDIR */ if (stat_status == -1) stat_status = HT_STAT(path, stat_info); if (stat_status == -1) { HTTRACE(PROT_TRACE, "Stat fails.. on \"%s\" -- giving up (errno %d)\n" _ path _ errno); return NULL; } else { if (!new_path) { StrAllocCopy(new_path, path); return new_path; } else return path; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMulti.html���������������������������������������������������������������������0100644�0000764�0000144�00000003644�06526451246�016201� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 5-Jun-1996 --> <TITLE>W3C Sample Code Library libwww Content Negotiation</TITLE> </HEAD> <BODY> <H1> Content Negotation </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> As part of the HTTP content negotiation, a server must be able to match the preferences sent by the client in an HTTP request with the possible set of documents that it has avaiable for this URL. For example , it may have an English and a Danish version in which case it looks at the <CODE>Accept-Language</CODE> header and sees what the client prefers. The Library has a simple "Match" algorithm for finding the best as specified by the HTTP specification. As the content algorithm is part of the File Interface then all file access regardless of whether it is from a server or a client application will be able to content negotiotion. <P> This module is implemented by <A HREF="HTMulti.c">HTMulti.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A> <PRE> #ifndef HTMULTI_H #define HTMULTI_H #include "HTReq.h" </PRE> <P> This function is used when the best match among several possible documents is to be found as a function of the accept headers sent in the client request. <H2> Set the default Welcome page </H2> <P> Set default file name for welcome page on each directory. <PRE>extern void HTAddWelcome (char * welcome_name); </PRE> <H2> Content Negotiation Algorithm </H2> <P> This function looks for a set of <A HREF="HTBind.html">bindings</A> between a set of possible objects to be served on a request on the local file system. <PRE> extern char * HTMulti (HTRequest * req, char * path, struct stat * stat_info); </PRE> <PRE> #endif /* HTMULTI_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMulti.html,v 2.17 2025/05/14 02:10:46 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������libwww/Library/src/HTMuxCh.c������������������������������������������������������������������������0100644�0000764�0000144�00000032347�06664352703�015414� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** MUX CHANNEL, SESSION AND PROTOCOL MANAGEMENT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMuxCh.c,v 2.4 2025/02/22 22:10:11 frystyk Exp $ ** ** Handles a MUX Channel with sessions and protocols ** ** Authors ** HFN Henrik Frystyk Nielsen <frystyk@w3.org> ** ** HISTORY: ** Oct 96 HFN Written */ /* Library Include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWTrans.h" #include "WWWStream.h" #include "HTMuxTx.h" #include "HTMuxHeader.h" #include "HTDemux.h" #include "HTMuxCh.h" /* Implemented here */ #define MAX_SESSIONS 0xFF /* Max 256 sessions */ #define SID_BASE 2 #define RECEIVER_OFFSET 0 /* Client control session */ #define SENDER_OFFSET 1 /* Server control session */ struct _HTStream { const HTStreamClass * isa; /* ... */ }; struct _HTOutputStream { const HTOutputStreamClass * isa; /* ... */ }; #define PUTBLOCK(b,l) (*me->isa->put_block)(me,(b),(l)) struct _HTMuxProtocol { HTAtom * name; HTProtocolId pid; }; struct _HTMuxSession { HTMuxSessionId sid; HTProtocolId pid; HTNet * net; /* State */ HTMuxClose close; /* State of the connection */ int credit; /* Available credit */ int fragment; /* Fragment size */ int read; /* Data read sine last credit */ /* Input */ HTStream * buffer; /* If we have to buffer data */ BOOL buffering; }; struct _HTMuxChannel { int hash; HTHost * host; int max_sid; /* A la max_sockfd in select */ HTNet * net; HTList * protocols; /* List of defined protocols */ HTMuxSession * sessions[MAX_SESSIONS]; }; PRIVATE HTList ** muxchs = NULL; /* List of mux muxchs */ /* ------------------------------------------------------------------------- */ PRIVATE HTMuxSession * session_new (void) { HTMuxSession * me; if ((me = (HTMuxSession *) HT_CALLOC(1, sizeof(HTMuxSession))) == NULL) HT_OUTOFMEM("HTMuxSession_new"); me->credit = DEFAULT_CREDIT; return me; } PRIVATE BOOL session_delete (HTMuxSession * session) { if (session) { HT_FREE(session); return YES; } return NO; } PUBLIC HTMuxSession * HTMuxSession_register (HTMuxChannel * muxch, HTMuxSessionId sid, HTProtocolId pid) { if (muxch) { HTMuxSession * session = muxch->sessions[sid]; if (session == NULL) { session = session_new(); session->sid = sid; session->pid = pid; muxch->sessions[sid] = session; HTTRACE(MUX_TRACE, "Mux Channel. Registered session %d on channel %p\n" _ sid _ muxch); } return session; } HTTRACE(MUX_TRACE, "Mux Channel. Can't register new session\n"); return NULL; } PUBLIC HTMuxSessionId HTMuxSession_accept (HTMuxChannel * muxch, HTNet * net, HTProtocolId pid) { if (muxch && net) { HTMuxSession * session; HTMuxSessionId sid = SID_BASE + RECEIVER_OFFSET; for (; sid<MAX_SESSIONS; sid+=2) { if ((session = muxch->sessions[sid]) && session->net == NULL && session->pid == pid) { HTTRACE(MUX_TRACE, "Mux Channel. Accepting session %d on channel %p\n" _ sid _ muxch); return sid; } } } HTTRACE(MUX_TRACE, "Mux Channel. Can't accept new session\n"); return INVSID; } PUBLIC HTMuxSessionId HTMuxSession_connect (HTMuxChannel * muxch, HTNet * net, HTProtocolId pid) { if (muxch && net) { HTMuxSessionId sid = SID_BASE + SENDER_OFFSET; for (; sid<MAX_SESSIONS; sid+=2) { if (muxch->sessions[sid] == NULL) { HTMuxSession * session = session_new(); session->sid = sid; session->pid = pid; session->net = net; muxch->sessions[sid] = session; HTTRACE(MUX_TRACE, "Mux Channel. Creating session %d on channel %p\n" _ sid _ muxch); return sid; } } } HTTRACE(MUX_TRACE, "Mux Channel. Can't create new session\n"); return INVSID; } PUBLIC int HTMuxSession_close (HTMuxChannel * muxch, HTMuxSessionId sid) { if (muxch) { HTMuxSession * session = muxch->sessions[sid]; HTMuxSession_setClose(muxch, session, MUX_S_END_WRITE); return YES; } return NO; } PUBLIC HTMuxSessionId HTMuxSession_id (HTMuxSession * session) { return session ? session->sid : INVSID; } PUBLIC HTProtocolId HTMuxSession_pid (HTMuxSession * session) { return session ? session->pid : INVPID; } PUBLIC HTNet * HTMuxSession_net (HTMuxSession * session) { return session ? session->net : NULL; } PUBLIC BOOL HTMuxSession_setClose (HTMuxChannel * muxch, HTMuxSession * session, HTMuxClose close) { if (muxch && session) { session->close |= close; /* ** If both directions are closed down then we can put the session ** to sleep. */ if (session->close == MUX_S_END) { HTTRACE(MUX_TRACE, "Mux Channel. Closing session %d on channel %p\n" _ session->sid _ muxch); muxch->sessions[session->sid] = NULL; session_delete(session); } return YES; } return NO; } PUBLIC int HTMuxSession_credit (HTMuxSession * session) { return session ? session->credit : -1; } PUBLIC BOOL HTMuxSession_setCredit (HTMuxChannel * muxch, HTMuxSessionId sid, int credit) { HTMuxSession * session; if (muxch && (session = muxch->sessions[sid])) { session->credit = credit; return YES; } return NO; } PUBLIC int HTMuxSession_fragment (HTMuxSession * session) { return session ? session->fragment : -1; } PUBLIC BOOL HTMuxSession_setFragment (HTMuxChannel * muxch, HTMuxSessionId sid, int fragment) { HTMuxSession * session; if (muxch && (session = muxch->sessions[sid])) { session->fragment = fragment; return YES; } return NO; } /* ** Tries really hard to get rid of the data. ** Returns: ** -1 Error ** 0 Buffered the data ** 1 Got rid of the data */ PUBLIC int HTMuxSession_disposeData (HTMuxSession * me, const char * buf, int len) { HTTRACE(MUX_TRACE, "Mux Channel. Writing %d bytes to session %p\n" _ len _ me); /* ** There are two situations that can occur: Either we have an accepted session ** with a Net object or we have an unaccepted session with no Net object. In ** the former case we try to get rid of the data by pushing it directly to the ** read stream of the Net object. In the latter case we buffer as much as we ** can. */ if (me) { HTNet * net; HTStream * sink; int status; if ((net = me->net) && (sink = HTNet_readStream(net))) { /* ** Look first to see if we have old data that we can dispose down ** the sink. We keep the buffer stream so that we can reuse it later. */ if (me->buffer && me->buffering) { if ((*me->buffer->isa->flush)(me->buffer) == HT_OK) { HTTRACE(MUX_TRACE, "Mux Channel. Flushed buffered data\n"); me->buffering = NO; } else if ((*me->buffer->isa->put_block)(me->buffer, buf, len) >= 0) { HTTRACE(MUX_TRACE, "Mux Channel. Buffer accepted data\n"); return 0; } HTTRACE(MUX_TRACE, "Mux Channel. Can't buffer data\n"); return (-1); } /* ** See if we can get rid of the new data. If not then try to buffer it. ** If this also fails then we reset the channel. A positive return code ** from the stream means that we got rid of the data successfully. */ if ((status = (*sink->isa->put_block)(sink, buf, len)) >= 0) { HTTRACE(MUX_TRACE, "Mux Channel. Stream returned %d\n" _ status); /* ** If we get back a HT_LOADED then we have all the data we need ** and we can terminate the request */ if (status == HT_LOADED) { HTNet_execute (net, HTEvent_END); return 0; } /* ** Decide whether we should send a credit message ** MORE TO COME */ me->read += len; if (me->read >= DEFAULT_CREDIT / 2) { me->read = 0; return 1; } return 0; } } /* ** The stream is not ready and we try to buffer the data in ** the meantime. */ if (!me->buffer) { me->buffer = HTPipeBuffer(sink, DEFAULT_CREDIT); me->buffering = YES; } status = (*me->buffer->isa->put_block)(me->buffer, buf, len); if (status >= 0) { HTTRACE(MUX_TRACE, "Mux Channel. Buffer accepted data\n"); return 0; } HTTRACE(MUX_TRACE, "Mux Channel. Buffer returned %d\n" _ status); } return (-1); } /* ------------------------------------------------------------------------- */ PRIVATE BOOL channel_delete (HTMuxChannel * ch) { if (ch) { HT_FREE(ch); return YES; } return NO; } PUBLIC HTMuxChannel * HTMuxChannel_new (HTHost * host) { if (host) { HTMuxChannel * me = NULL; /* Create new object */ if ((me = (HTMuxChannel *) HT_CALLOC(1, sizeof(HTMuxChannel))) == NULL) HT_OUTOFMEM("HTMuxChannel_new"); me->hash = HTHost_hash(host); me->host = host; /* ** Make sure that we are in interleave mode */ HTHost_setMode(host, HT_TP_INTERLEAVE); /* ** Get a special MUX Net object that we keep to our selves. We don't ** associate a request object as the Net object lives longer. */ me->net = HTNet_new(NULL); HTNet_setReadStream(me->net, HTDemux_new(host, me)); /* Insert into hash table */ if (!muxchs) { if ((muxchs=(HTList **) HT_CALLOC(HOST_HASH_SIZE, sizeof(HTList *))) == NULL) HT_OUTOFMEM("HTMuxChannel_new"); } if (!muxchs[me->hash]) muxchs[me->hash] = HTList_new(); HTList_addObject(muxchs[me->hash], (void *) me); HTTRACE(MUX_TRACE, "Mux Channel. %p created with hash %d\n" _ me _ me->hash); return me; } return NULL; } PUBLIC HTMuxChannel * HTMuxChannel_find (HTHost * host) { if (muxchs) { int hash = HTHost_hash(host); HTList * list = muxchs[hash]; if (list) { HTMuxChannel * pres = NULL; while ((pres = (HTMuxChannel *) HTList_nextObject(list))) if (pres->host == host) return pres; } } return NULL; } PUBLIC BOOL HTMuxChannel_delete (HTMuxChannel * me) { if (me) { HTList * list = NULL; HTTRACE(MUX_TRACE, "Mux Channel. Deleting %p\n" _ me); if (muxchs && (list = muxchs[me->hash])) { HTList_removeObject(list, (void *) me); channel_delete(me); return YES; } } return NO; } PUBLIC BOOL HTMuxChannel_deleteAll (void) { if (muxchs) { HTList * cur; int cnt; for (cnt=0; cnt<HOST_HASH_SIZE; cnt++) { if ((cur = muxchs[cnt])) { HTMuxChannel * pres; while ((pres = (HTMuxChannel *) HTList_nextObject(cur))) channel_delete(pres); } HTList_delete(muxchs[cnt]); } HT_FREE(muxchs); } return YES; } PUBLIC HTNet * HTMuxChannel_net (HTMuxChannel * me) { return me ? me->net : NULL; } PUBLIC HTMuxSession * HTMuxChannel_findSession (HTMuxChannel * me, HTMuxSessionId sid) { return (me) ? me->sessions[sid] : NULL; } #if 0 PRIVATE HTMuxSession * HTMuxChannel_findSessionFromNet (HTMuxChannel * me, HTNet * net) { if (me && net) { int cnt = 0; HTMuxSession **session = me->sessions; while (cnt<MAX_SESSIONS) { if (**session->net == net) return *session; session++, cnt++; } } return NULL; } #endif PUBLIC HTHost * HTMuxChannel_host (HTMuxChannel * muxch) { return muxch ? muxch->host : NULL; } PUBLIC int HTMuxChannel_sendControl (HTMuxChannel * muxch, HTMuxSessionId sid, HTMuxHeader opcode, int value, const void * param, int param_size) { if (muxch && muxch->host) { HTOutputStream * me = HTChannel_output(HTHost_channel(muxch->host)); HTMuxHeader header[2]; switch (opcode) { case MUX_STRING: if (param && param_size) { header[0] = HT_WORDSWAP(MUX_CONTROL | MUX_LONG_LENGTH | MUX_SET_LEN(value)); header[1] = HT_WORDSWAP(param_size); PUTBLOCK((const char *) header, 8); PUTBLOCK((const char *) param, MUX_LONG_ALIGN(param_size)); } break; case MUX_STACK: if (param && param_size) { header[0] = HT_WORDSWAP(MUX_CONTROL | MUX_LONG_LENGTH | MUX_SET_LEN(value)); header[1] = HT_WORDSWAP(param_size); PUTBLOCK((const char *) header, 8); PUTBLOCK((const char *) param, MUX_LONG_ALIGN(param_size)); } break; case MUX_FRAGMENT: header[0] = HT_WORDSWAP(MUX_CONTROL | MUX_SET_SID(sid) | MUX_SET_LEN(value)); PUTBLOCK((const char *) header, 4); break; case MUX_CREDIT: header[0] = HT_WORDSWAP(MUX_CONTROL | MUX_LONG_LENGTH | MUX_SET_SID(sid)); header[1] = HT_WORDSWAP(value); PUTBLOCK((const char *) header, 8); break; default: HTTRACE(MUX_TRACE, "Mux Channel. UNKNOWN OPCODE %d\n" _ opcode); return HT_ERROR; } /* Flush for now */ #if 1 return (*me->isa->flush)(me); #else return HT_OK; #endif } return HT_ERROR; } /* ------------------------------------------------------------------------- */ PUBLIC BOOL HTMuxProtocol_add (HTMuxChannel * muxch, HTProtocolId pid, const char * protocol) { if (muxch && protocol) { HTMuxProtocol * ms; if ((ms = (HTMuxProtocol *) HT_CALLOC(1, sizeof(HTMuxProtocol))) == NULL) HT_OUTOFMEM("HTMuxProtocol_new"); ms->name = HTAtom_caseFor(protocol); ms->pid = pid; if (!muxch->protocols) muxch->protocols = HTList_new(); return HTList_addObject(muxch->protocols, ms); } return NO; } PUBLIC BOOL HTMuxProtocol_delete (HTMuxChannel * muxch, HTProtocolId pid) { if (muxch && muxch->protocols) { HTList * cur = muxch->protocols; HTMuxProtocol * pres; while ((pres = (HTMuxProtocol *) HTList_nextObject(cur))) { if (pres->pid == pid) { HTList_removeObject(muxch->protocols, pres); HT_FREE(pres); return YES; } } } return NO; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMuxCh.html���������������������������������������������������������������������0100644�0000764�0000144�00000006517�07142516377�016137� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww MUX Protocol</TITLE> </HEAD> <BODY> <H1> The MUX Protocol </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module defines the read and write functions to and from the network. As we are having reentrant function and a smarter network I/O this will get very small :-) <P> This module is implemented by <A HREF="HTMux.c">HTMux.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTMUXCHANNEL_H #define HTMUXCHANNEL_H typedef struct _HTMuxChannel HTMuxChannel; typedef struct _HTMuxSession HTMuxSession; typedef struct _HTMuxProtocol HTMuxProtocol; typedef unsigned char HTMuxSessionId; #include "HTMuxHeader.h" #include "HTChannl.h" #include "HTHost.h" #define INVSID 0 /* Invalid session id */ #define INVPID 0 /* Invalid protocol id */ </PRE> <H2> Mux Channel </H2> <PRE> extern HTMuxChannel * HTMuxChannel_new (HTHost * host); extern HTMuxChannel * HTMuxChannel_find (HTHost * host); extern BOOL HTMuxChannel_delete (HTMuxChannel * me); extern BOOL HTMuxChannel_deleteAll (void); extern HTNet * HTMuxChannel_net (HTMuxChannel * me); extern HTMuxSession * HTMuxChannel_findSession (HTMuxChannel * me, HTMuxSessionId sid); extern HTMuxSession * HTMuxChannel_findSessionFromNet (HTMuxChannel * me, HTNet * net); extern HTHost * HTMuxChannel_host (HTMuxChannel * muxch); extern int HTMuxChannel_sendControl (HTMuxChannel * muxch, HTMuxSessionId sid, HTMuxHeader opcode, int value, const void * param, int param_size); </PRE> <H2> Mux Session </H2> <PRE> typedef enum _HTMuxClose { MUX_S_END_READ = 0x1, MUX_S_END_WRITE = 0x2, MUX_S_END = 0x3 } HTMuxClose; extern HTMuxSessionId HTMuxSession_accept (HTMuxChannel * muxch, HTNet * net, HTProtocolId pid); extern HTMuxSessionId HTMuxSession_connect (HTMuxChannel * muxch, HTNet * net, HTProtocolId pid); extern int HTMuxSession_close (HTMuxChannel * muxch, HTMuxSessionId sid); extern HTMuxSession * HTMuxSession_register (HTMuxChannel * muxch, HTMuxSessionId sid, HTProtocolId pid); extern HTMuxSessionId HTMuxSession_id (HTMuxSession * session); extern HTProtocolId HTMuxSession_pid (HTMuxSession * session); extern HTNet * HTMuxSession_net (HTMuxSession * session); extern BOOL HTMuxSession_setClose (HTMuxChannel * muxch, HTMuxSession * session, HTMuxClose close); extern int HTMuxSession_credit (HTMuxSession * session); extern BOOL HTMuxSession_setCredit (HTMuxChannel * muxch, HTMuxSessionId sid, int credit); extern int HTMuxSession_fragment (HTMuxSession * session); extern BOOL HTMuxSession_setFragment (HTMuxChannel * muxch, HTMuxSessionId sid, int fragment); extern int HTMuxSession_disposeData (HTMuxSession * me, const char * buf, int len); </PRE> <H2> Mux Protocol </H2> <PRE> extern BOOL HTMuxProtocol_add (HTMuxChannel * muxch, HTProtocolId pid, const char * protocol); extern BOOL HTMuxProtocol_delete (HTMuxChannel * muxch, HTProtocolId pid); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMuxCh.html,v 2.5 2025/08/04 10:37:51 kahan Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMuxHeader.html�����������������������������������������������������������������0100644�0000764�0000144�00000005237�06526451250�016764� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww MUX Header Definition</TITLE> </HEAD> <BODY> <H1> MUX Header Definition </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> Define the parts of a mux header as defined by the MUX draft specification. This is not finalized so be warned! <P> This module is does not contain a <CODE>.c</CODE> file. It is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTMUXHEADER_H #define HTMUXHEADER_H </PRE> <H2> Byte Swapping </H2> <P> MUX is currently using little endian headers. <PRE> #ifdef WORDS_BIGENDIAN #define HT_WORDSWAP(a) ( ((a) &lt;&lt; 24) | \ (((a) &lt;&lt; 8) & 0x00ff0000) | \ (((a) &gt;&gt; 8) & 0x0000ff00) | \ ((unsigned int)(a) &gt;&gt; 24) ) #else #define HT_WORDSWAP(a) ((a)) #endif </PRE> <H2> The MUX Header </H2> <P> Simple, huh? <PRE> typedef unsigned int HTMuxHeader; </PRE> <H3> Generic Header flags </H3> <PRE> #define MUX_LONG_LENGTH 0x80000000 #define MUX_CONTROL 0x40000000 </PRE> <H3> Data Header Flags </H3> <PRE> #define MUX_FLAGS 0x3C000000 #define MUX_SYN 0x20000000 #define MUX_FIN 0x10000000 #define MUX_RST 0x08000000 #define MUX_PUSH 0x04000000 </PRE> <H3> Control Header Opcodes </H3> <PRE> #define MUX_OPCODES 0x3C000000 #define MUX_STRING 0x00000000 #define MUX_STACK 0x04000000 #define MUX_FRAGMENT 0x08000000 #define MUX_CREDIT 0x0C000000 </PRE> <H3> Length and Session ID </H3> <PRE> #define MUX_SESSION 0x03FC0000 #define MUX_LENGTH 0x0003FFFF </PRE> <H2> Macros for Byte Shifting </H2> <PRE> #define MUX_SET_SID(sid) ((sid) &lt;&lt; 18) #define MUX_SET_LEN(len) ((len)) #define MUX_SET_PID MUX_SET_LEN #define MUX_SET_OPCODE(op) ((op) &lt;&lt; 26) #define MUX_GET_SID(sid) (((sid) & MUX_SESSION) &gt;&gt; 18) #define MUX_GET_LEN(len) ((len) & MUX_LENGTH) #define MUX_GET_PID MUX_GET_LEN #define MUX_GET_OPCODE(op) ((op) & MUX_OPCODES &gt;&gt; 26) </PRE> <H2> Header Alignment </H2> <P> You can force 8 byte alignment by defining this to 1. Normally, we decide pr MUX segment whether we have to use a long header or not. <PRE> #define LONG_LENGTH 0 /* 4 or 8 bytes header? */ #define MUX_IS_LONG(hdr) ((hdr) & MUX_LONG_LENGTH) #define MUX_ALIGN(len) ((len) + ((4-(len)%4) % 4)) #define MUX_LONG_ALIGN(len) ((len) + ((8-(len)%8) % 8)) </PRE> <H2> Default Values </H2> <PRE> #define DEFAULT_CREDIT 4096 </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMuxHeader.html,v 2.3 2025/05/14 02:10:48 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMuxTx.c������������������������������������������������������������������������0100644�0000764�0000144�00000010463�06664352703�015450� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** BUFFERED MUX OUTPUT STREAM ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTMuxTx.c,v 2.3 2025/02/22 22:10:11 frystyk Exp $ ** ** A buffered output MUX stream. ** ** Authors ** HFN Henrik Frystyk Nielsen <frystyk@w3.org> ** ** History: ** Oct 96 Written */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWTrans.h" #include "HTMuxHeader.h" #include "HTMuxCh.h" #include "HTMuxTx.h" /* Implemented here */ struct _HTOutputStream { const HTOutputStreamClass * isa; HTOutputStream * target; /* Target for outgoing data */ HTChannel * ch; int size; /* Buffer size */ int bb; char * block; char * read; /* Position in 'data' */ char * data; /* buffer */ }; #define PUTBLOCK(b,l) (*me->target->isa->put_block)(me->target,(b),(l)) /* ------------------------------------------------------------------------- */ PRIVATE int HTMuxBuffer_write (HTOutputStream *me, const char *buf, int len) { int status; if (me->bb > 0) { len -= (me->block - buf); if ((status = PUTBLOCK(me->block, me->bb)) != HT_OK) return status; me->block += me->bb; len -= me->bb; me->bb = 0; } else { int available = me->data + me->size - me->read; /* Still room in buffer */ if (len <= available) { memcpy(me->read, buf, len); me->read += len; return HT_OK; } /* If already data in buffer then fill it and flush */ if (me->read > me->data) { memcpy(me->read, buf, available); me->block = (char *) buf+available; if ((status = PUTBLOCK(me->data, me->size))!=HT_OK) return status; } /* If more data then write n times buffer size */ if (!me->block) me->block = (char *) buf; else { len -= (me->block - buf); } me->bb = len - len%me->size; if ((status = PUTBLOCK(me->block, me->bb)) != HT_OK) return status; me->block += me->bb; len -= me->bb; me->bb = 0; } /* If data is not aligned then save the rest in our buffer */ if (len > 0) { memcpy(me->data, me->block, len); me->read = me->data + len; } else me->read = me->data; me->block = NULL; return HT_OK; } PRIVATE int HTMuxBuffer_put_character (HTOutputStream * me, char c) { return HTMuxBuffer_write(me, &c, 1); } PRIVATE int HTMuxBuffer_put_string (HTOutputStream * me, const char * s) { return HTMuxBuffer_write(me, s, (int) strlen(s)); } PRIVATE int HTMuxBuffer_flush (HTOutputStream * me) { int status = HT_OK; if (me->read > me->data) { if ((status = PUTBLOCK(me->data, me->read - me->data))==HT_WOULD_BLOCK) return HT_WOULD_BLOCK; me->read = me->data; me->block = NULL; } return status; } PRIVATE int HTMuxBuffer_free (HTOutputStream * me) { #if 0 return HTMuxBuffer_flush(me); #else return HT_OK; #endif } PRIVATE int HTMuxBuffer_abort (HTOutputStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target, e); HTTRACE(PROT_TRACE, "MUX Tx...... ABORTING...\n"); return HT_ERROR; } /* ** The difference between the close and the free method is that we don't ** close the connection in the free method - we only call the free method ** of the target stream. That way, we can keep the output stream as long ** as the channel itself. */ PRIVATE int HTMuxBuffer_close (HTOutputStream * me) { if (me) { HTMuxBuffer_flush(me); if (me->target) (*me->target->isa->close)(me->target); HT_FREE(me->data); HT_FREE(me); } return HT_OK; } PRIVATE const HTOutputStreamClass HTMuxBuffer = { "MuxBuffer", HTMuxBuffer_flush, HTMuxBuffer_free, HTMuxBuffer_abort, HTMuxBuffer_put_character, HTMuxBuffer_put_string, HTMuxBuffer_write, HTMuxBuffer_close }; PUBLIC HTOutputStream * HTMuxBuffer_new (HTHost * host, HTChannel * ch, void * param, int bufsize) { if (host && ch) { HTOutputStream * me = HTChannel_output(ch); if (me == NULL) { if (bufsize <= 0) bufsize = MUX_BUFFER_SIZE; if ((me = (HTOutputStream *) HT_CALLOC(1, sizeof(HTOutputStream))) == NULL || (me->data = (char *) HT_MALLOC(bufsize)) == NULL) HT_OUTOFMEM("HTMuxBuffer_new"); me->isa = &HTMuxBuffer; me->target = HTWriter_new(host, ch, param, 0); me->ch = ch; me->size = bufsize; me->read = me->data; } return me; } return NULL; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMuxTx.html���������������������������������������������������������������������0100644�0000764�0000144�00000002331�06526451250�016157� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 12-Apr-1996 --> <TITLE>W3C Sample Code Library libwww Buffered MUX Writer Stream</TITLE> </HEAD> <BODY> <H1> Buffered MUX Writer Stream </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The MUX Writer Stream is an <A HREF="HTIOStream.html">output stream </A>&nbsp;which knows how to write to a MUX channel. It is part of the <A HREF="WWWTrans.html">Transport interface </A>and may be registered as part of a <A HREF="HTTrans.html">Transport Object</A>. In the <A HREF="HTInit.html">default initialization module</A>, you can find the <CODE>HTTransportInit()</CODE> function which sets up this stream as a default transport for handling unbuffered socket write operations. <P> This module is implemented by <A HREF="HTMuxTx.c">HTMuxTx.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTMUXWRITE_H #define HTMUXWRITE_H </PRE> <PRE> #define MUX_BUFFER_SIZE 2048 extern HTOutput_new HTMuxBuffer_new; </PRE> <PRE>#endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTMuxTx.html,v 2.3 2025/05/14 02:10:48 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNDir.c�������������������������������������������������������������������������0100644�0000764�0000144�00000061777�06664352703�015235� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTNDir.c ** GENERIC NEWS LISTINGS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTNDir.c,v 2.12 2025/02/22 22:10:11 frystyk Exp $ ** ** Creates listings for all kind of News output. ** ** Authors: ** HF Henrik Frystyk, MIT, <frystyk@w3.org> ** MP Maciej Puzio <puzio@zodiac1.mimuw.edu.pl> ** History: ** Oct 95 HFN written ** Mar 96 MP modified heavily */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWHTML.h" #include "HTNews.h" #include "HTNewsLs.h" #include "HTNDir.h" /* Implemented here */ /* Macros and other defines */ #define PUTC(c) (*target->isa->put_character)(target, c) #define PUTS(s) (*target->isa->put_string)(target, s) #define START(e) (*target->isa->start_element)(target, e, 0, 0) #define END(e) (*target->isa->end_element)(target, e) #define FREE_TARGET (*target->isa->_free)(target) #define DEFAULT_MAXW 80 /* Default line width */ /* Type definitions and global variables etc. local to this module */ struct _HTStructured { const HTStructuredClass * isa; /* ... */ }; struct _HTNewsNode { int index; char * name; char * subject; char * from; time_t date; int refs; /* Number of references */ BOOL is_tmplate; /* Added by MP: */ HTList* refNames; /* referee names list */ HTList* refObjects; /* referee objects list */ HTNewsNode * refParent; /* direct parent (referee) */ HTNewsNode * lastChild; /* last child (referer) */ BOOL show; /* show this node on the list? */ BOOL fake; /* create anchor with this node? */ int refChildren; /* number of referers */ int refLevel; /* reference level - to speed sorting */ int minRefIndex; /* minimal index in reference subtree */ int maxRefIndex; /* maximal index in reference subtree */ time_t minRefDate; /* minimal date in reference subtree */ time_t maxRefDate; /* maximal date in reference subtree */ }; struct _HTNewsDir { HTStructured * target; HTRequest * request; HTNewsDirKey key; /* Key for sorting */ char * name; /* Name of the newsgroup(s) Added by MP */ char * tmplate; HTNewsNode * tmplate_node; int lastLevel; /* Last printed ref level Added by MP. */ HTArray * array; /* Array for sorted listings */ HTArray * cache; /* Only created on request */ }; PRIVATE int MaxLineW = DEFAULT_MAXW; /* Forward references - added by MP. */ PRIVATE void HTNewsDir_addLevelTags (HTNewsDir* dir, int level); PRIVATE HTNewsNode* HTNewsDir_addFakeElement (HTNewsDir* dir, char* subject, char* name); PRIVATE HTNewsNode* HTNewsDir_findNodeNamed (HTNewsDir* dir, char* name); #define FNWS_ANY 0x0000 /* Date */ #define FNWS_MIN 0x0001 #define FNWS_MAX 0x0002 /* Fake/not-fake */ #define FNWS_ONLYFAKE 0x0010 #define FNWS_NOTFAKE 0x0020 /* Fake or not-fake with references */ #define FNWS_NOTORPHAN 0x0040 PRIVATE HTNewsNode* HTNewsDir_findNodeWithSubject (HTNewsDir* dir, char* subject, int which, HTNewsNode* avoidNode); /* ------------------------------------------------------------------------- */ /* NODE MANAGEMENT */ /* ------------------------------------------------------------------------- */ PRIVATE HTNewsNode * HTNewsNode_new (int index, char * subject, char * from, time_t date, char * name, int refs, HTList * refNames) { HTNewsNode * node; if ((node = (HTNewsNode *) HT_CALLOC(1, sizeof(HTNewsNode))) == NULL) HT_OUTOFMEM("HTNewsNode_new"); if (name) StrAllocCopy(node->name, name); if (subject) { StrAllocCopy(node->subject, subject); node->subject = HTStrip(node->subject); } if (from) StrAllocCopy(node->from, from); node->index = index; node->date = date; node->refs = refs; node->refNames = refNames; node->show = (name != NULL); node->fake = (name == NULL); node->minRefIndex = index; node->maxRefIndex = index; node->minRefDate = date; node->maxRefDate = date; return node; } PRIVATE BOOL HTNewsNode_delete (HTNewsNode * node, BOOL cache) { if (node) { if (!cache || node->is_tmplate) HT_FREE(node->name); HT_FREE(node->subject); HT_FREE(node->from); if (node->refNames) { HTList * cur = node->refNames; char * pres; while ((pres = (char *) HTList_nextObject(cur))) HT_FREE(pres); HTList_delete(node->refNames); } if (node->refObjects) HTList_delete(node->refObjects); HT_FREE(node); return YES; } return NO; } /* Added by MP. */ PRIVATE BOOL HTNewsNode_isAncestor (HTNewsNode* node, HTNewsNode* refered) { HTNewsNode* p; for (p = refered; p; p = p->refParent) if (p == node) return YES; return NO; } /* Added by MP. */ PRIVATE BOOL HTNewsNode_linkRef (HTNewsNode* node, HTNewsNode* referer) { if (node && referer) { node->refChildren++; node->lastChild = referer; node->minRefIndex = (node->minRefIndex != 0 ? HTMIN(node->minRefIndex, referer->index) : referer->index); node->maxRefIndex = (node->maxRefIndex != 0 ? HTMAX(node->maxRefIndex, referer->index) : referer->index); node->minRefDate = (node->minRefDate != 0 ? HTMIN(node->minRefDate, referer->date) : referer->date); node->maxRefDate = (node->maxRefDate != 0 ? HTMAX(node->maxRefDate, referer->date) : referer->date); referer->refParent = node; return YES; } return NO; } /* Added by MP. */ PRIVATE int HTNewsNode_refLevel (HTNewsNode* node) { int cnt = 0; HTNewsNode* p; for (p = node->refParent; p && p->show; p = p->refParent) cnt++; return cnt; } /* Added by MP. */ /* Returns index field for non-fake nodes, minimal or maximal subtreee */ /* index for fake nodes. */ PRIVATE time_t HTNewsNode_getIndex (HTNewsNode* node, BOOL minimal) { if (node->index != 0) return node->index; else if (minimal) return node->minRefIndex; else return node->maxRefIndex; } /* Added by MP. */ /* Returns date field for non-fake nodes, minimal or maximal subtreee */ /* date for fake nodes. */ PRIVATE time_t HTNewsNode_getDate (HTNewsNode* node, BOOL minimal) { if (node->date != 0) return node->date; else if (minimal) return node->minRefDate; else return node->maxRefDate; } /* Helper function - added by MP. */ PRIVATE char* UnReSubject (char* subject) { if (strlen(subject) >= 3 && strncasecomp(subject, "re:", 3) == 0) { char* p = subject + 3; /* "Re:XXX" */ if (*p == ' ') p ++; /* "Re: XXX" */ return p; } return subject; } /* Added by MP. */ PRIVATE void HTNewsNode_setRefInfo_pass1 (HTNewsDir* dir, HTNewsNode* node) { HTList* ptr = node->refNames; char* name = NULL; if (node->fake) return; if (ptr != NULL) name = (char*) HTList_nextObject(ptr); while (ptr != NULL) { HTNewsNode* parent; parent = HTNewsDir_findNodeNamed(dir, name); if (parent) { if (!node->refObjects) node->refObjects = HTList_new(); HTList_addObject (node->refObjects, parent); } name = (char*) HTList_nextObject(ptr); } } /* Added by MP. */ PRIVATE void HTNewsNode_setRefInfo_pass2 (HTNewsDir* dir, HTNewsNode* node) { HTNewsNode* maxParent = NULL; HTList* ptr = node->refObjects; HTNewsNode* parent = NULL; if (node->fake) return; if (ptr != NULL) parent = (HTNewsNode*) HTList_nextObject(ptr); while (ptr != NULL) { if (!maxParent || maxParent->date < parent->date) maxParent = parent; parent = (HTNewsNode*) HTList_nextObject(ptr); } if (maxParent) { if (!HTNewsNode_isAncestor(node, maxParent)) /* better be careful */ HTNewsNode_linkRef (maxParent, node); } else { char* refSubject; BOOL re; /* Here is the only place we REALLY have to check for circular */ /* references. It is normally possible that a node refers to */ /* orphan node and both have the same subject. In this situation */ /* we can't make the orphan to refer to it's child. Without checking */ /* for circular references this is likely to happen here. */ refSubject = UnReSubject(node->subject); re = (strcasecomp(refSubject, node->subject) != 0); if (re) parent = HTNewsDir_findNodeWithSubject(dir, refSubject, FNWS_MIN | FNWS_NOTFAKE, node); if (!parent || HTNewsNode_isAncestor(node, parent)) parent = HTNewsDir_findNodeWithSubject(dir, refSubject, FNWS_MIN | FNWS_ONLYFAKE, node); if (!parent && re) { parent = HTNewsDir_findNodeWithSubject(dir, node->subject, FNWS_MIN | FNWS_ONLYFAKE, node); } if (!parent) parent = HTNewsDir_addFakeElement (dir, refSubject, NULL); if (parent) { HTNewsNode_linkRef (parent, node); if (parent->refChildren > 1) /* Multi-children fake node visible */ parent->show = YES; } } } /* ** Added by MP. */ #if 0 PRIVATE void HTNewsNode_setRefInfo_pass3 (HTNewsDir* dir, HTNewsNode* node) { HTNewsNode* parent = NULL; char* refSubject; BOOL re; if (node->fake || node->refParent) return; /* This is only for nodes not handled in pass 2 */ /* Here is the only place we REALLY have to check for circular */ /* references. It is normally possible that a node refers to */ /* orphan node and both have the same subject. In this situation */ /* we can't make the orphan to refer to it's child. Without checking */ /* for circular references this is likely to happen here. */ refSubject = UnReSubject(node->subject); re = (strcasecomp(refSubject, node->subject) != 0); if (re) parent = HTNewsDir_findNodeWithSubject(dir, refSubject, FNWS_MIN | FNWS_NOTFAKE, node); if (!parent || HTNewsNode_isAncestor(node, parent)) parent = HTNewsDir_findNodeWithSubject(dir, refSubject, FNWS_MIN | FNWS_ONLYFAKE, node); if (!parent && re) { parent = HTNewsDir_findNodeWithSubject(dir, node->subject, FNWS_MIN | FNWS_ONLYFAKE, node); } if (!parent) parent = HTNewsDir_addFakeElement (dir, refSubject, NULL); if (parent) { HTNewsNode_linkRef (parent, node); if (parent->refChildren > 1) /* multi-children fake node visible */ parent->show = YES; } } #else PRIVATE void HTNewsNode_setRefInfo_pass3 (HTNewsDir* dir, HTNewsNode* node) { if (!node->fake) node->refLevel = HTNewsNode_refLevel(node); } #endif /* Added by MP. */ PRIVATE int HTNewsNode_compareRefThread (HTNewsNode* node1, HTNewsNode* node2) { int level1 = node1->refLevel; int level2 = node2->refLevel; int level = HTMAX(level1, level2); int i; HTNewsNode* parent1; HTNewsNode* parent2; int diff = 0; for (i = level; i >= 0; i--) { parent1 = (i < level1 ? parent1->refParent : node1); parent2 = (i < level2 ? parent2->refParent : node2); if (parent1 == parent2) return diff; /* related messages (in same subtree) */ else { time_t date1 = (i > level1 ? 0 : HTNewsNode_getDate(parent1, YES)); time_t date2 = (i > level2 ? 0 : HTNewsNode_getDate(parent2, YES)); diff = date1 - date2; if (diff == 0) { int idx1 = (i > level1 ? 0 : HTNewsNode_getIndex(parent1, YES)); int idx2 = (i > level2 ? 0 : HTNewsNode_getIndex(parent2, YES)); diff = idx1 - idx2; } } } return diff; /* completely unrelated messages */ } /* ** Output an element in HTML ** Returns YES if OK, else NO */ PRIVATE BOOL HTNewsNode_print (HTNewsDir * dir, HTNewsNode * node) { if (node && node->show) { HTStructured *target = dir->target; char * escaped; HTNewsDir_addLevelTags (dir, node->refLevel); /* Added by MP. */ START(HTML_LI); /* Start the anchor and put the subject as anchor text */ /* Changed by MP to allow nodes without names */ if (!node->fake && node->name && node->subject) { escaped = HTEscape(node->name, URL_XPALPHAS); HTStartAnchor(target, NULL, escaped); } if (node->subject) PUTS(node->subject); if (!node->fake && node->name && node->subject) { END(HTML_A); HT_FREE(escaped); } /* From field */ if (node->from) { PUTS (" by "); /* Changed by MP. */ PUTS(node->from); } /* In group listing, put number of groups in the set; added by MP. */ if (node->name && strrchr(node->name, '*')) { char buf[16]; sprintf (buf, " (%d groups)", node->refChildren); PUTS (buf); } } return YES; } /* ------------------------------------------------------------------------- */ /* DIRECTORY MANAGEMENT */ /* ------------------------------------------------------------------------- */ /* HTNewsDir_setWidth ** ------------------ ** The module automatically ajusts the width of the directory listing as ** a function of the file name. The width can flows dynamically between ** an upper and a lower limit. */ PUBLIC BOOL HTNewsDir_setWidth (int max_width) { MaxLineW = (max_width > 0) ? max_width : DEFAULT_MAXW; return YES; } /* HTNewsDir_new ** ---------- ** Creates a structured stream object and sets up the initial HTML stuff ** Returns the newsdir object if OK, else NULL */ PUBLIC HTNewsDir * HTNewsDir_new (HTRequest * request, const char * title, HTNewsDirKey key, BOOL cache) { HTNewsDir *dir; if (!request) return NULL; /* Create object */ if ((dir = (HTNewsDir *) HT_CALLOC(1, sizeof (HTNewsDir))) == NULL) HT_OUTOFMEM("HTNewsDir_new"); dir->target = HTMLGenerator(request, NULL, WWW_HTML, HTRequest_outputFormat(request), HTRequest_outputStream(request)); HTAnchor_setFormat(HTRequest_anchor(request), WWW_HTML); dir->request = request; dir->key = key; dir->lastLevel = -1; /* Added by MP. */ /* Get the newsgroup(s) name; added by MP. */ { char* url = HTAnchor_physical(HTRequest_anchor(request)); char* p = url+strlen(url); while (p > url && p[-1] != ':' && p[-1] != '/' && p[-1] != '\\') p--; StrAllocCopy (dir->name, p); } if (key != HT_NDK_NONE) { /* Thread is unsorted */ int total = HTNews_maxArticles(); dir->array = HTArray_new(total > 0 ? total : 128); } /* If we are asked to prepare a cache entry then create the cache array */ if (cache) { int total = HTNews_maxArticles(); dir->cache = HTArray_new(total > 0 ? total : 128); } /* Start the HTML stuff */ { HTStructured *target = dir->target; const char *msg = title ? title : "News Listing"; START(HTML_HTML); START(HTML_HEAD); START(HTML_TITLE); PUTS(msg); END(HTML_TITLE); END(HTML_HEAD); START(HTML_BODY); START(HTML_H1); PUTS(msg); END(HTML_H1); } return dir; } /* HTNewsDir_addElement ** -------------------- ** This function accepts a news line. Everything except dir and name can ** can be 0 or NULL. ** Returns new node pointer if OK, else NULL ** Changed by MP: reference list added. ** Note: Unlike other parameters, refNames is not copied, but assigned, so ** it has to contain copies of message names, not the originals. */ PUBLIC HTNewsNode* HTNewsDir_addElement (HTNewsDir * dir, int index, char * subject, char * from, time_t date, char * name, int refs, HTList * refNames) { if (dir && name) { HTNewsNode * node = HTNewsNode_new(index, subject, from, date, name, refs, refNames); if (dir->key == HT_NDK_NONE) { HTNewsNode_print(dir, node); HTNewsNode_delete(node, (dir->cache!=NULL)); } else HTArray_addObject(dir->array, (void *) node); return node; } return NULL; } /* Helper function - added by MP. */ PRIVATE HTNewsNode* HTNewsDir_addFakeElement (HTNewsDir * dir, char * subject, char * name) { HTNewsNode * node = HTNewsDir_addElement(dir, 0, subject, NULL, 0, name, 0, NULL); if (node) { node->show = NO; node->fake = YES; } return node; } /* Helper function - added by MP. */ PUBLIC HTNewsNode * HTNewsDir_addGroupElement (HTNewsDir * dir, char * group, BOOL tmplate) { HTNewsNode * node = NULL; if (dir && group) { if (HTNewsDir_belongsToSet(dir, group)) node=HTNewsDir_addElement (dir, 0, group, NULL, 0, group, 0, NULL); /* If we are building a cache object then add the entry */ if (dir->cache && !tmplate) { char * name = node ? node->name : NULL; if (!name) StrAllocCopy(name, group); HTArray_addObject(dir->cache, name); } } return node; } /* Added by MP. */ PUBLIC BOOL HTNewsDir_belongsToSet (HTNewsDir* dir, char* group) { char* p; if (!dir->name || !*(dir->name)) return YES; p = strrchr(dir->name, '*'); if (!p) return strcasecomp(group, dir->name) == 0; else { int len = p - dir->name; return strncasecomp(group, dir->name, len) == 0; } } /* Added by MP. */ PRIVATE void HTNewsDir_addLevelTags (HTNewsDir* dir, int level) { HTStructured *target = dir->target; int i = level; while (i > dir->lastLevel) { START(HTML_UL); i--; } while (i < dir->lastLevel) { END(HTML_UL); i++; } dir->lastLevel = level; } /* Added by MP. */ PRIVATE HTNewsNode* HTNewsDir_findNodeNamed (HTNewsDir* dir, char* name) { int i; for (i = 0; i < HTArray_size(dir->array); i++) { HTNewsNode* node = (HTNewsNode*)(HTArray_data(dir->array)[i]); if (node->name && strcasecomp(node->name, name) == 0) return node; } return NULL; } /* Added by MP. */ PRIVATE HTNewsNode* HTNewsDir_findNodeWithSubject (HTNewsDir* dir, char* subject, int which, HTNewsNode* avoidNode) { int i; int whichDate = (which & FNWS_MIN ? -1 : (which & FNWS_MAX ? 1 : 0)); HTNewsNode* foundNode = NULL; for (i = 0; i < HTArray_size(dir->array); i++) { HTNewsNode* node = (HTNewsNode*)(HTArray_data(dir->array)[i]); if (!(which & FNWS_ONLYFAKE && !node->fake) && !(which & FNWS_NOTFAKE && node->fake) && !(which & FNWS_NOTORPHAN && !node->fake && !node->refNames) && node != avoidNode && node->subject && strcasecomp(node->subject, subject) == 0) { if (which == FNWS_ANY) return node; else if (!foundNode || (node->date != 0 && (node->date - foundNode->date) * (long)whichDate > 0)) foundNode = node; } } return foundNode; } /* Added by MP. */ PRIVATE void HTNewsDir_setRefInfo (HTNewsDir* dir) { /* Array grows when fake elements are added. */ /* We don't want to set reference info for fake elements. */ int size = HTArray_size(dir->array); int i; for (i = 0; i < size; i++) HTNewsNode_setRefInfo_pass1 (dir, (HTNewsNode*)(HTArray_data(dir->array)[i])); for (i = 0; i < size; i++) HTNewsNode_setRefInfo_pass2 (dir, (HTNewsNode*)(HTArray_data(dir->array)[i])); for (i = 0; i < size; i++) HTNewsNode_setRefInfo_pass3 (dir, (HTNewsNode*)(HTArray_data(dir->array)[i])); } PRIVATE void make_template (HTNewsDir * dir, HTNewsNode * node) { HT_FREE(dir->tmplate); if ((dir->tmplate = (char *) HT_MALLOC(strlen(node->name) + 3)) == NULL) HT_OUTOFMEM("HTNewsNode_setGroupInfo"); { char * p1 = dir->name; char * p2 = dir->tmplate; strcpy(p2, node->name); while (*p1 && *p2 && *p1 == *p2) p1++, p2++; while (*p2 && *p2 != '.') p2++; if (*p2) { strcpy(p2, ".*"); dir->tmplate_node=HTNewsDir_addGroupElement(dir, dir->tmplate,YES); dir->tmplate_node->is_tmplate = YES; } else { HT_FREE(dir->tmplate); dir->tmplate_node = node; } dir->tmplate_node->show = YES; } } /* ** Runs through a sorted list of news groups and identifies the group ** hierarchy. Template groups are added to the list, for example as ** "alt.*" */ PRIVATE void HTNewsDir_setGroupInfo (HTNewsDir * dir) { HTArray * array = dir->array; HTNewsNode * node; int cur_size = HTArray_size(array); int cnt; /* ** If we don't have a template to test against then create one ** A template can be something like "alt.*" for example */ for (cnt=0; cnt<cur_size; cnt++) { node = (HTNewsNode *) HTArray_data(array)[cnt]; /* ** Make a template if we don't have any */ if (!dir->tmplate) make_template(dir, node); /* ** Now, if we do have a template then test the node name against ** it to see if we have this group already or it is a new group ** at this level in the hierarchy */ if (dir->tmplate) { if (HTStrCaseMatch(dir->tmplate, node->name) == NULL) { make_template(dir, node); } else { HTNewsNode * tmp_node = dir->tmplate_node; /* Should we show this element in the list? */ if (tmp_node->lastChild) { tmp_node->lastChild->show = NO; node->show = NO; } } HTNewsNode_linkRef(dir->tmplate_node, node); } } } PRIVATE int NDirIndexSort (const void *a, const void *b) { int aa = (*((HTNewsNode **)a))->index; int bb = (*((HTNewsNode **)b))->index; return aa-bb; } PRIVATE int NDirSubjectSort (const void *a, const void *b) { char *aa = (*((HTNewsNode **)a))->subject; char *bb = (*((HTNewsNode **)b))->subject; return strcasecomp(aa?aa:"", bb?bb:""); } PRIVATE int NDirFromSort (const void *a, const void *b) { char *aa = (*((HTNewsNode **)a))->from; char *bb = (*((HTNewsNode **)b))->from; return strcasecomp(aa?aa:"", bb?bb:""); } PRIVATE int NDirDateSort (const void *a, const void *b) { time_t aa = (*((HTNewsNode **)a))->date; time_t bb = (*((HTNewsNode **)b))->date; return bb-aa; } PRIVATE int NDirGroupSort (const void *a, const void *b) { char *aa = (*((HTNewsNode **)a))->name; char *bb = (*((HTNewsNode **)b))->name; while (*aa && *bb && TOLOWER(*aa)==TOLOWER(*bb)) aa++, bb++; return (*aa=='.' && *bb) ? -1 : (*aa && *bb=='.') ? 1 : TOLOWER(*aa)-TOLOWER(*bb); } /* Added by MP. */ PRIVATE int NDirRefThreadSort (const void* a, const void* b) { HTNewsNode* aa = *((HTNewsNode**)a); HTNewsNode* bb = *((HTNewsNode**)b); return HTNewsNode_compareRefThread(aa,bb); } /* HTNewsDir_free ** -------------- ** If we are sorting then do the sorting and put out the list, ** else just append the end of the list. */ PUBLIC BOOL HTNewsDir_free (HTNewsDir * dir) { if (!dir) return NO; if (dir->key != HT_NDK_NONE) { HTArray * array = dir->array; HTArray * cache = NULL; HTComparer * comp = NULL; /* ** Find a suitable sort key for this listing. The sort function ** depends on the type of new listing we have received. */ if (dir->key == HT_NDK_INDEX) /* Sort by Message Number */ comp = NDirIndexSort; else if (dir->key == HT_NDK_DATE) /* Sort by Date */ comp = NDirDateSort; else if (dir->key == HT_NDK_SUBJECT) /* Sort after Subject */ comp = NDirSubjectSort; else if (dir->key == HT_NDK_FROM) /* Sort after From */ comp = NDirFromSort; else if (dir->key == HT_NDK_GROUP) { /* Sort as group hierarchi */ comp = NDirGroupSort; } else if (dir->key == HT_NDK_REFTHREAD) { /* Added by MP. */ HTNewsDir_setRefInfo (dir); comp = NDirRefThreadSort; } else { HTTRACE(STREAM_TRACE, "NewsListing. Invalid sortkey\n"); return NO; } /* ** Now sort the array of news items that we have read with the sort ** function defined by the sort key above. */ HTArray_sort(array, comp); /* ** If we are showing a group listing then run through the list and ** identify group hierarchy. We have to sort the thing again in order ** to get the new template groups included */ if (dir->key == HT_NDK_GROUP) { HTNewsDir_setGroupInfo(dir); HTArray_sort(array, comp); } /* ** After we have sorted the listing, we can write out the result and ** free the array. */ { void ** data; HTNewsNode *node = (HTNewsNode *) HTArray_firstObject(array, data); while (node) { HTNewsNode_print(dir, node); /* ** Create a special array for the cache containing the group ** names only and no templates */ if (dir->key == HT_NDK_GROUP && !node->is_tmplate) HTArray_addObject(cache, node->name); HTNewsNode_delete(node, (dir->cache!=NULL)); node = (HTNewsNode *) HTArray_nextObject(array, data); } HTArray_delete(array); } /* Update the cache */ if (dir->cache) HTNewsCache_after(dir->request, NULL, dir->cache, 0); } /* Put out the end of the HTML stuff */ { HTStructured *target = dir->target; /* END(HTML_UL); */ HTNewsDir_addLevelTags (dir, -1); START(HTML_HR); END(HTML_BODY); END(HTML_HTML); FREE_TARGET; } /* Clean up the dir object */ HT_FREE(dir->name); HT_FREE(dir->tmplate); HT_FREE(dir); return YES; } �libwww/Library/src/HTNDir.html����������������������������������������������������������������������0100644�0000764�0000144�00000005771�06526451252�015743� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> <TITLE>W3C Sample Code Library libwww News/NNTP Browsing</TITLE> </HEAD> <BODY> <H1> Generic News/NNTP Browsing </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This news browser generates listings for NNTP reponses. This module contains the protocol independent code and it produces the HTML object. It is only included if the <A HREF="HTNews.html">NNTP</A>. <P> This module is implemented by <A HREF="HTNDir.c">HTNDir.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTNDIR_H #define HTNDIR_H #include "HTReq.h" </PRE> <H2> What Should the Listings Look Like? </H2> <P> You can set how the listings are to be sorted using the following flags. <PRE> typedef enum _HTNewsDirKey { HT_NDK_NONE = 0, /* Unsorted */ HT_NDK_INDEX = 1, /* Sort by Message Number */ HT_NDK_DATE = 2, /* Sort by date */ HT_NDK_SUBJECT = 3, /* Sort by Subject */ HT_NDK_FROM = 4, /* Sort by Sender */ HT_NDK_GROUP = 5, /* Sort group listing */ HT_NDK_REFTHREAD = 6 /* Sort messages by date and thread Added by MP */ } HTNewsDirKey; </PRE> <H2> The News Listing Object </H2> <P> The news listing object handles the generation of a news listing. It is a bit like a stream in that it accept data, but it must be formatted in a special way which makes the normal stream architecture inadequate. <H3> Create a News Listing Object </H3> <P> Creates a structured stream object and sets up the initial HTML stuff Returns the dir object if OK, else NULL <PRE> typedef struct _HTNewsDir HTNewsDir; extern HTNewsDir * HTNewsDir_new (HTRequest * request, const char * title, HTNewsDirKey key, BOOL cache); </PRE> <H3> Add a Line to the List </H3> <P> This function accepts a news line. Everything except dir and nama can can be 0 or NULL. Returns YES if OK, else NO <PRE> typedef struct _HTNewsNode HTNewsNode; extern HTNewsNode * HTNewsDir_addElement (HTNewsDir * dir, int index, char * subject, char * from, time_t date, char * name, int refs, HTList * refNames); extern HTNewsNode * HTNewsDir_addGroupElement (HTNewsDir * dir, char * group, BOOL tmplate); </PRE> <H3> Check Whether Group Belongs to the Group Set </H3> <P> Returns TRUE if group belongs to set, e.g. group "soc.rec.jokes" belongs to the set "soc.rec.*". Added by MP <PRE>extern BOOL HTNewsDir_belongsToSet (HTNewsDir* dir, char* group); </PRE> <H3> Free a News Listing Object </H3> <P> If we are sorting then do the sorting and put out the list, else just append the end of the list. <PRE> extern BOOL HTNewsDir_free (HTNewsDir * dir); </PRE> <PRE> #endif /* HTNDIR */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTNDir.html,v 2.8 2025/05/14 02:10:50 frystyk Exp $ </ADDRESS> </BODY></HTML> �������libwww/Library/src/HTNet.c��������������������������������������������������������������������������0100644�0000764�0000144�00000105530�07130401041�015064� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTNet.c ** HTNet Class ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTNet.c,v 2.106 2025/07/04 15:26:25 kahan Exp $ ** ** This is the implementation of the internal library multithreading ** functions. This includes an interrupt handler and a event loop. ** ** History: ** 12 June 94 Written by Henrik Frystyk, frystyk@w3.org ** 31 May 95 Charlie Brooks cbrooks@osf.org ** */ /* Implemention dependent include files */ #include "wwwsys.h" /* Library include files */ #include "WWWUtil.h" #include "HTProt.h" #include "HTError.h" #include "HTAlert.h" #include "HTParse.h" #include "HTTrans.h" #include "HTHost.h" #include "HTReq.h" #include "HTEvent.h" #include "HTStream.h" #include "HTHstMan.h" #include "HTIOStream.h" #include "HTNetMan.h" /* Implemented here */ #ifndef HT_MAX_SOCKETS #define HT_MAX_SOCKETS 25 #endif typedef struct _BeforeFilter { HTNetBefore * before; /* Filter function */ char * tmplate; /* URL template for when to call filter */ int order; /* Relative execution order */ void * param; /* Local context */ } BeforeFilter; typedef struct _AfterFilter { HTNetAfter * after; /* Filter function */ char * tmplate; /* URL template for when to call filter */ int order; /* Relative execution order */ void * param; /* Local context */ int status; /* Status of load for when to call filter */ } AfterFilter; struct _HTStream { const HTStreamClass * isa; /* ... */ }; struct _HTInputStream { const HTInputStreamClass * isa; /* ... */ }; typedef struct _HTFilterEvent { HTRequest * request; int status; HTTimer * timer; } HTFilterEvent; PRIVATE HTList * HTBefore = NULL; /* List of global BEFORE filters */ PRIVATE HTList * HTAfter = NULL; /* List of global AFTER filters */ PRIVATE int MaxActive = HT_MAX_SOCKETS; /* Max active requests */ PRIVATE int Active = 0; /* Counts open sockets */ PRIVATE int Persistent = 0; /* Counts persistent sockets */ PRIVATE HTList ** NetTable = NULL; /* List of net objects */ PRIVATE int HTNetCount = 0; /* Counting elements in table */ /* ------------------------------------------------------------------------- */ /* GENERIC BEFORE and AFTER filter Management */ /* ------------------------------------------------------------------------- */ PRIVATE int HTBeforeOrder (const void * a, const void * b) { return ((BeforeFilter *) b)->order - ((BeforeFilter *) a)->order; } PRIVATE int HTAfterOrder (const void * a, const void * b) { return ((AfterFilter *) b)->order - ((AfterFilter *) a)->order; } PRIVATE int check_order (HTFilterOrder order) { return (order<HT_FILTER_FIRST) ? HT_FILTER_FIRST : (order>HT_FILTER_LAST) ? HT_FILTER_LAST : order; } /* ** Register a BEFORE filter in the list provided by the caller. ** Several filters can be registered in which case they are called ** with the filter ordering in mind. */ PUBLIC BOOL HTNetCall_addBefore (HTList * list, HTNetBefore * before, const char * tmplate, void * param, HTFilterOrder order) { if (list && before) { BeforeFilter * me; if ((me = (BeforeFilter *) HT_CALLOC(1, sizeof(BeforeFilter)))==NULL) HT_OUTOFMEM("HTNetCall_addBefore"); me->before = before; if (tmplate) StrAllocCopy(me->tmplate, tmplate); me->order = check_order(order); me->param = param; HTTRACE(CORE_TRACE, "Net Before.. Add %p with order %d tmplate `%s\' context %p\n" _ before _ me->order _ tmplate ? tmplate : "<null>" _ param); return (HTList_addObject(list, me) && HTList_insertionSort(list, HTBeforeOrder)); } return NO; } /* ** Unregister all instances of a BEFORE filter from a list. */ PUBLIC BOOL HTNetCall_deleteBefore (HTList * list, HTNetBefore * before) { HTTRACE(CORE_TRACE, "Net Before.. Delete %p\n" _ before); if (list && before) { HTList * cur = list; BeforeFilter * pres; while ((pres = (BeforeFilter *) HTList_nextObject(cur))) { if (pres->before == before) { HTList_removeObject(list, (void *) pres); HT_FREE(pres->tmplate); HT_FREE(pres); cur = list; } } } return NO; } /* ** Deletes all BEFORE filters in list */ PUBLIC BOOL HTNetCall_deleteBeforeAll (HTList * list) { HTTRACE(CORE_TRACE, "Net Before. Delete All filters\n"); if (list) { HTList * cur = list; BeforeFilter * pres; while ((pres = (BeforeFilter *) HTList_nextObject(cur))) { HT_FREE(pres->tmplate); HT_FREE(pres); } HTList_delete(list); return YES; } return NO; } /* ** Call all the BEFORE filters in the order specified at registration ** time. We also check for any template and whether it matches or not. ** If a filter returns other than HT_OK then stop and return immediately. ** Otherwise return what the last filter returns. */ PUBLIC int HTNetCall_executeBefore (HTList * list, HTRequest * request) { HTParentAnchor * anchor = HTRequest_anchor(request); char * url = HTAnchor_physical(anchor); char * addr = url ? url : HTAnchor_address((HTAnchor *) anchor); int ret = HT_OK; int mode = 0; if (list && request && addr) { BeforeFilter * pres; while ((pres = (BeforeFilter *) HTList_nextObject(list))) { if (!pres->tmplate || (pres->tmplate && HTStrMatch(pres->tmplate, addr))) { HTTRACE(CORE_TRACE, "Net Before.. calling %p (request %p, context %p)\n" _ pres->before _ request _ pres->param); ret = (*pres->before)(request, pres->param, mode); if (ret != HT_OK) break; /* ** Update the address to match against if the filter changed ** the physical address. */ if ((url = HTAnchor_physical(anchor))) addr = url; } } } if (!url) HT_FREE(addr); return ret; } /* ** Register an AFTER filter in the list provided by the caller. ** Several filters can be registered in which case they are called ** with the filter ordering in mind. */ PUBLIC BOOL HTNetCall_addAfter (HTList * list, HTNetAfter * after, const char * tmplate, void * param, int status, HTFilterOrder order) { if (list && after) { AfterFilter * me; if ((me = (AfterFilter *) HT_CALLOC(1, sizeof(AfterFilter)))==NULL) HT_OUTOFMEM("HTNetCall_addAfter"); me->after = after; if (tmplate) StrAllocCopy(me->tmplate, tmplate); me->order = check_order(order); me->param = param; me->status = status; HTTRACE(CORE_TRACE, "Net After... Add %p with order %d tmplate `%s\' code %d context %p\n" _ after _ me->order _ tmplate ? tmplate : "<null>" _ status _ param); return (HTList_addObject(list, me) && HTList_insertionSort(list, HTAfterOrder)); } return NO; } /* ** Unregister all instances of an AFTER filter from a list. */ PUBLIC BOOL HTNetCall_deleteAfter (HTList * list, HTNetAfter * after) { HTTRACE(CORE_TRACE, "Net After... Delete %p\n" _ after); if (list && after) { HTList * cur = list; AfterFilter * pres; while ((pres = (AfterFilter *) HTList_nextObject(cur))) { if (pres->after == after) { HTList_removeObject(list, (void *) pres); HT_FREE(pres->tmplate); HT_FREE(pres); cur = list; } } } return NO; } /* ** Unregister all filters registered for a given status. */ PUBLIC BOOL HTNetCall_deleteAfterStatus (HTList * list, int status) { HTTRACE(CORE_TRACE, "Net After... Delete all with status %d\n" _ status); if (list) { HTList * cur = list; AfterFilter * pres; while ((pres = (AfterFilter *) HTList_nextObject(cur))) { if (pres->status == status) { HTList_removeObject(list, (void *) pres); HT_FREE(pres->tmplate); HT_FREE(pres); cur = list; } } return YES; } return NO; } /* ** Deletes all AFTER filters in list */ PUBLIC BOOL HTNetCall_deleteAfterAll (HTList * list) { HTTRACE(CORE_TRACE, "Net After. Delete All filters\n"); if (list) { HTList * cur = list; AfterFilter * pres; while ((pres = (AfterFilter *) HTList_nextObject(cur))) { HT_FREE(pres->tmplate); HT_FREE(pres); } HTList_delete(list); return YES; } return NO; } /* ** Call all the AFTER filters in the order specified at registration ** time and if it has the right status code and it's not HT_IGNORE. ** We also check for any template and whether it matches or not. ** If a filter returns other than HT_OK then stop and return immediately. ** Otherwise return what the last filter returns. */ PUBLIC int HTNetCall_executeAfter (HTList * list, HTRequest * request, int status) { int ret = HT_OK; if (status != HT_IGNORE) { HTParentAnchor * anchor = HTRequest_anchor(request); char * url = HTAnchor_physical(anchor); char * addr = url ? url : HTAnchor_address((HTAnchor *) anchor); HTResponse * response = HTRequest_response(request); if (list && request && addr) { AfterFilter * pres; while ((pres = (AfterFilter *) HTList_nextObject(list))) { if ((pres->status == status || pres->status == HT_ALL) && (!pres->tmplate || (pres->tmplate && HTStrMatch(pres->tmplate, addr)))) { HTTRACE(CORE_TRACE, "Net After... calling %p (request %p, response %p, status %d, context %p)\n" _ pres->after _ request _ response _ status _ pres->param); ret = (*pres->after)(request, response, pres->param, status); if (ret != HT_OK) break; /* ** Update the address to match against if the filter changed ** the physical address. */ if ((url = HTAnchor_physical(anchor))) addr = url; } } } if (!url) HT_FREE(addr); } return ret; } /* ------------------------------------------------------------------------- */ /* GLOBAL BEFORE and AFTER filter Management */ /* ------------------------------------------------------------------------- */ /* ** Global set of callback functions BEFORE the request is issued ** list can be NULL */ PUBLIC BOOL HTNet_setBefore (HTList *list) { HTBefore = list; return YES; } PUBLIC HTList * HTNet_before (void) { return HTBefore; } PUBLIC BOOL HTNet_addBefore (HTNetBefore * before, const char * tmplate, void * param, HTFilterOrder order) { if (!HTBefore) HTBefore = HTList_new(); return HTNetCall_addBefore(HTBefore, before, tmplate, param, order); } PUBLIC BOOL HTNet_deleteBefore (HTNetBefore * cbf) { return HTNetCall_deleteBefore(HTBefore, cbf); } /* ** Call both the local and the global BEFORE filters (if any) */ PUBLIC int HTNet_executeBeforeAll (HTRequest * request) { int ret; BOOL override = NO; HTList * befores; if ((befores = HTRequest_before(request, &override))) { if ((ret = HTNetCall_executeBefore(befores, request)) != HT_OK) return ret; } return override ? HT_OK : HTNetCall_executeBefore(HTBefore, request); } /* ** Global set of callback functions AFTER the request is issued ** list can be NULL */ PUBLIC BOOL HTNet_setAfter (HTList *list) { HTAfter = list; return YES; } PUBLIC HTList * HTNet_after (void) { return HTAfter; } PUBLIC BOOL HTNet_addAfter (HTNetAfter * after, const char * tmplate, void * param, int status, HTFilterOrder order) { if (!HTAfter) HTAfter = HTList_new(); return HTNetCall_addAfter(HTAfter, after, tmplate, param, status, order); } PUBLIC BOOL HTNet_deleteAfter (HTNetAfter * cbf) { return HTNetCall_deleteAfter(HTAfter, cbf); } PUBLIC BOOL HTNet_deleteAfterStatus (int status) { return HTNetCall_deleteAfterStatus(HTAfter, status); } /* ** Call both the local and the global AFTER filters (if any) */ PUBLIC int HTNet_executeAfterAll (HTRequest * request, int status) { int ret; BOOL override = NO; HTList * afters; if ((afters = HTRequest_after(request, &override))) { if ((ret = HTNetCall_executeAfter(afters, request, status)) != HT_OK) return ret; } return override ? HT_OK : HTNetCall_executeAfter(HTAfter, request, status); } /* ------------------------------------------------------------------------- */ /* Socket Management */ /* ------------------------------------------------------------------------- */ PUBLIC int HTNet_maxSocket (void) { return MaxActive; } PUBLIC BOOL HTNet_setMaxSocket (int newmax) { if (newmax > 0) { MaxActive = newmax; return YES; } return NO; } PUBLIC void HTNet_increaseSocket (void) { Active++; HTTRACE(CORE_TRACE, "Net Manager. Increasing active sockets to %d, %d persistent sockets\n" _ Active _ Persistent); } PUBLIC void HTNet_decreaseSocket (void) { if (--Active < 0) Active = 0; HTTRACE(CORE_TRACE, "Net Manager. Decreasing active sockets to %d, %d persistent sockets\n" _ Active _ Persistent); } PUBLIC int HTNet_availableSockets (void) { int available = MaxActive - Active; return available > 0 ? available : 0; } PUBLIC void HTNet_increasePersistentSocket (void) { Persistent++; HTTRACE(CORE_TRACE, "Net Manager. %d active sockets, increasing persistent sockets to %d\n" _ Active _ Persistent); } PUBLIC void HTNet_decreasePersistentSocket (void) { if (--Persistent < 0) Persistent = 0; HTTRACE(CORE_TRACE, "Net Manager. %d active sockets, decreasing persistent sockets to %d\n" _ Active _ Persistent); } PUBLIC int HTNet_availablePersistentSockets (void) { int available = MaxActive - 2 - Persistent; return available > 0 ? available : 0; } /* ** Returns whether there are any Net objects pending or active */ PUBLIC BOOL HTNet_isIdle (void) { return (HTNetCount > 0); } PUBLIC BOOL HTNet_isEmpty (void) { return (HTNetCount <= 0); } PUBLIC int HTNet_count (void) { return HTNetCount; } /* ------------------------------------------------------------------------- */ /* Creation and deletion methods */ /* ------------------------------------------------------------------------- */ PRIVATE int AfterFilterEvent (HTTimer * timer, void * param, HTEventType type) { HTFilterEvent * fe = (HTFilterEvent *) param; if (fe) { HTRequest * request = fe->request; int status = fe->status; if (timer != fe->timer) HTDEBUGBREAK("Net timer. %p not in sync\n" _ timer); HTTRACE(CORE_TRACE, "HTNet....... Continuing calling AFTER filters %p with timer %p\n" _ fe _ timer); /* Delete the event context */ HT_FREE(fe); /* Now call the remaining AFTER filters */ return HTNet_executeAfterAll(request, status); } return HT_ERROR; } PRIVATE BOOL createAfterFilterEvent (HTRequest * request, int status) { HTFilterEvent * me = NULL; if ((me = (HTFilterEvent *) HT_CALLOC(1, sizeof(HTFilterEvent))) == NULL) HT_OUTOFMEM("createAfterFilterEvent"); me->request = request; me->status = status; me->timer = HTTimer_new(NULL, AfterFilterEvent, me, 1, YES, NO); return YES; } PRIVATE HTNet * create_object (void) { static int net_hash = 0; HTNet * me = NULL; /* Create new object */ if ((me = (HTNet *) HT_CALLOC(1, sizeof(HTNet))) == NULL) HT_OUTOFMEM("HTNet_new"); me->hash = net_hash++ % HT_XL_HASH_SIZE; /* Insert into hash table */ if (!NetTable) { if ((NetTable = (HTList **) HT_CALLOC(HT_XL_HASH_SIZE, sizeof(HTList *))) == NULL) HT_OUTOFMEM("create_object"); } if (!NetTable[me->hash]) NetTable[me->hash] = HTList_new(); HTList_addObject(NetTable[me->hash], (void *) me); HTNetCount++; HTTRACE(CORE_TRACE, "Net Object.. %p created with hash %d\n" _ me _ me->hash); return me; } /* HTNet_duplicate ** --------------- ** Creates a new HTNet object as a duplicate of the same request. ** Returns YES if OK, else NO ** BUG: We do not check if we have a socket free! */ PUBLIC HTNet * HTNet_dup (HTNet * src) { if (src) { HTNet * me; int hash; if ((me = create_object()) == NULL) return NULL; hash = me->hash; HTTRACE(CORE_TRACE, "Net Object.. Duplicated %p\n" _ src); memcpy((void *) me, src, sizeof(HTNet)); me->hash = hash; /* Carry over hash entry */ return me; } return NULL; } PUBLIC BOOL HTNet_execute (HTNet * net, HTEventType type) { if (net && net->event.cbf && net->request) { HTTRACE(CORE_TRACE, "Net Object.. %p calling %p with event type %d and context %p\n" _ net _ net->event.cbf _ type _ net->event.param); (*(net->event.cbf))(HTNet_socket(net), net->event.param, type); return YES; } return NO; } /* ** Start a Net obejct by calling the protocol module. */ PUBLIC BOOL HTNet_start (HTNet * net) { if (net && net->event.cbf && net->request) { HTTRACE(CORE_TRACE, "Net Object.. Launching %p\n" _ net); (*(net->event.cbf))(HTNet_socket(net), net->event.param, HTEvent_BEGIN); return YES; } return NO; } /* HTNet_new ** --------- ** This function creates a new HTNet object and assigns the socket number ** to it. This is intended to be used when you are going to listen on a ** socket using the HTDoListen() function in HTTCP.c. The function do NOT ** call any of the before or after filter functions. ** Returns new object or NULL on error */ PUBLIC HTNet * HTNet_new (HTHost * host) { if (host) { HTNet * me; HTTRACE(CORE_TRACE, "Net Object.. Creating listen object for host %p\n" _ host); me = create_object(); me->host = host; return me; } return NULL; } /* HTNet_newServer ** --------------- ** Create a new HTNet object as a new request to be handled. If we have ** more than MaxActive connections already then return NO. ** Returns YES if OK, else NO */ PUBLIC BOOL HTNet_newServer (HTRequest * request) { HTParentAnchor * anchor = HTRequest_anchor(request); HTNet * me = NULL; HTProtocol * protocol; HTTransport * tp = NULL; /* added JTD:5/28/96 */ char * physical = NULL; int status; HTProtCallback * cbf; if (!request) return NO; /* ** First we do all the "BEFORE" callbacks in order to see if we are to ** continue with this request or not. If we receive a callback status ** that is NOT HT_OK then jump directly to the after callbacks and return */ if ((status = HTNet_executeBeforeAll(request)) != HT_OK) { /* ** If in non-blocking mode then return here and call AFTER ** filters from a timer event handler. As Olga Antropova ** points out, otherwise, the stack can grow if new requests ** are started directly from the after filters */ if (HTEvent_isCallbacksRegistered() && !HTRequest_preemptive(request)) createAfterFilterEvent(request, status); else HTNet_executeAfterAll(request, status); return YES; } /* ** If no translation was provided by the filters then use the anchor ** address directly */ if (!(physical = HTAnchor_physical(anchor))) { char * addr = HTAnchor_address((HTAnchor *) anchor); HTTRACE(CORE_TRACE, "Net Object.. Using default address\n"); HTAnchor_setPhysical(anchor, addr); physical = HTAnchor_physical(anchor); HT_FREE(addr); } /* Find a protocol object for this access scheme */ { char * access = HTParse(physical, "", PARSE_ACCESS); if ((protocol = HTProtocol_find(request, access)) == NULL) { HTTRACE(CORE_TRACE, "Net Object.. NO PROTOCOL Object found for URI scheme `%s\'\n" _ access); HT_FREE(access); return NO; } if (!(cbf = HTProtocol_server(protocol))) { HTTRACE(CORE_TRACE, "Net Object.. NO SERVER HANDLER for URI scheme `%s\'\n" _ access); HT_FREE(access); HT_FREE(me); return NO; } HT_FREE(access); } /* Find a transport object for this protocol */ if ((tp = HTTransport_find(request, HTProtocol_transport(protocol))) == NULL) { HTTRACE(CORE_TRACE, "Net Object.. NO TRANSPORT found for protocol `%s\'\n" _ HTProtocol_name(protocol)); return NO; } /* Create new net object and bind to request object */ if ((me = create_object()) == NULL) return NO; me->preemptive = (HTProtocol_preemptive(protocol) || HTRequest_preemptive(request)); HTNet_setEventPriority(me, HTRequest_priority(request)); me->protocol = protocol; me->transport = tp; /* added - JTD:5/28/96 */ me->request = request; HTRequest_setNet(request, me); /* Start the server request */ HTTRACE(CORE_TRACE, "Net Object.. starting SERVER request %p and net object %p\n" _ request _ me); (*(cbf))(INVSOC, request); return YES; } /* HTNet_newClient ** --------------- ** Create a new HTNet object as a new request to be handled. If we have ** more than MaxActive connections already then put this into the ** pending queue, else start the request by calling the call back ** function registered with this access method. ** Returns YES if OK, else NO */ PUBLIC BOOL HTNet_newClient (HTRequest * request) { HTParentAnchor * anchor = HTRequest_anchor(request); HTNet * me = NULL; HTProtocol * protocol = NULL; HTTransport * tp = NULL; char * physical = NULL; int status; HTProtCallback * cbf; if (!request) return NO; /* ** First we do all the "BEFORE" callbacks in order to see if we are to ** continue with this request or not. If we receive a callback status ** that is NOT HT_OK then jump directly to the after callbacks and return */ if ((status = HTNet_executeBeforeAll(request)) != HT_OK) { /* ** If in non-blocking mode then return here and call AFTER ** filters from a timer event handler. As Olga Antropova ** points out, otherwise, the stack can grow if new requests ** are started directly from the after filters */ if (HTEvent_isCallbacksRegistered() && !HTRequest_preemptive(request)) createAfterFilterEvent(request, status); else HTNet_executeAfterAll(request, status); return YES; } /* ** If no translation was provided by the filters then use the anchor ** address directly */ if (!(physical = HTAnchor_physical(anchor))) { char * addr = HTAnchor_address((HTAnchor *) anchor); HTTRACE(CORE_TRACE, "Net Object.. Using default address\n"); HTAnchor_setPhysical(anchor, addr); physical = HTAnchor_physical(anchor); HT_FREE(addr); } /* Find a protocol object for this access scheme */ { char * proxy = HTRequest_proxy(request); char * access = HTParse(proxy ? proxy : physical, "", PARSE_ACCESS); if ((protocol = HTProtocol_find(request, access)) == NULL) { HTTRACE(CORE_TRACE, "Net Object.. NO PROTOCOL Object found for URI scheme `%s\'\n" _ access); HT_FREE(access); return NO; } if (!(cbf = HTProtocol_client(protocol))) { HTTRACE(CORE_TRACE, "Net Object.. NO CLIENT HANDLER for URI scheme `%s\'\n" _ access); HT_FREE(access); HT_FREE(me); return NO; } HT_FREE(access); } /* Find a transport object for this protocol */ tp = HTTransport_find(request, HTProtocol_transport(protocol)); if (tp == NULL) { HTTRACE(CORE_TRACE, "Net Object.. NO TRANSPORT found for protocol `%s\'\n" _ HTProtocol_name(protocol)); return NO; } /* Create new net object and bind it to the request object */ if ((me = create_object()) == NULL) return NO; me->preemptive = (HTProtocol_preemptive(protocol) || HTRequest_preemptive(request)); #if 0 me->priority = HTRequest_priority(request); #endif HTNet_setEventPriority(me, HTRequest_priority(request)); me->protocol = protocol; me->transport = tp; me->request = request; HTRequest_setNet(request, me); /* Increase the number of retrys for this download */ HTRequest_addRetry(request); /* ** Check if we can start the request, else put it into pending queue ** If so then call the call back function associated with the anchor. ** We use the INVSOC as we don't have a valid socket yet! */ HTTRACE(CORE_TRACE, "Net Object.. starting request %p (retry=%d) with net object %p\n" _ request _ HTRequest_retrys(request) _ me); (*(cbf))(INVSOC, request); return YES; } /* ** Check whether we have any pending HTNet objects and if so ** then start the next one. ** Return YES if OK, else NO */ PRIVATE BOOL check_pending (HTNet * net) { HTTRACE(CORE_TRACE, "Net Object.. Check for pending Net objects\n"); if (net) { /* ** As we may have a socket available we check for whether ** we can start any pending requests. We do this by asking for ** pending Host objects. If none then use the current object */ HTHost_launchPending(net->host); return YES; } return NO; } PRIVATE BOOL free_net (HTNet * net) { HTTRACE(CORE_TRACE, "Net Object.. Freeing object %p\n" _ net); if (net) { if (net == HTRequest_net(net->request)) HTRequest_setNet(net->request, NULL); HT_FREE(net); return YES; } return NO; } /* ** Unregister the net object from the global list ** and see if we can start a new pending request. */ PRIVATE BOOL unregister_net (HTNet * net) { if (net && NetTable) { HTList * list = NetTable[net->hash]; if (list) { HTList_removeObject(list, (void *) net); check_pending(net); HTNetCount--; return YES; } } return NO; } /* ** Clears the contents of the Net object so that we can use it again. */ PUBLIC BOOL HTNet_clear (HTNet * net) { if (net) { net->host->channel = NULL; net->readStream = NULL; net->bytesRead = 0; net->headerBytesRead = 0; net->bytesWritten = 0; net->headerBytesWritten = 0; return YES; } return NO; } /* HTNet_delete ** ------------ ** Deletes the HTNet object from the list of active requests and calls ** any registered call back functions IF not the status is HT_IGNORE. ** This is used if we have internal requests that the app doesn't know ** about. We also see if we have pending requests that can be started ** up now when we have a socket free. ** The callback functions are called in the reverse order of which they ** were registered (last one first) ** Return YES if OK, else NO */ PUBLIC BOOL HTNet_delete (HTNet * net, int status) { HTTRACE(CORE_TRACE, "Net Object.. Delete %p and call AFTER filters\n" _ net); if (net) { HTRequest * request = net->request; /* ** If we have a premature close then recover the request. Otherwise ** break the link to the Host object and continue deleting the net ** object */ if (net->host) { HTHost_unregister (net->host, net, HTEvent_READ); HTHost_unregister (net->host, net, HTEvent_WRITE); if (status == HT_RECOVER_PIPE) { HTNet_clear(net); HTTRACE(CORE_TRACE, "Net Object.. Restarting request %p (retry=%d) with net object %p\n" _ request _ HTRequest_retrys(request) _ net); return YES; } HTHost_deleteNet(net->host, net, status); if (HTHost_doRecover(net->host)) HTHost_recoverPipe(net->host); } /* Remove object from the table of Net Objects */ unregister_net(net); free_net(net); /* Call AFTER filters */ if (status != HT_IGNORE) HTNet_executeAfterAll(request, status); /* ** Truely delete the HTNet object. Thanks to Mikhail Grouchinski ** we now do this after having called the after filters so that ** these filters can use the information in the Net object */ return YES; } return NO; } PUBLIC BOOL HTNet_deleteDup (HTNet * dup) { return dup ? (unregister_net(dup) && free_net(dup)) : NO; } /* HTNet_deleteAll ** --------------- ** Deletes all HTNet object that might either be active or pending ** We DO NOT call the AFTER filters - A crude way of saying goodbye! */ PUBLIC BOOL HTNet_deleteAll (void) { HTTRACE(CORE_TRACE, "Net Object.. Remove all Net objects, NO filters\n"); if (NetTable) { HTList * cur = NULL; HTNet * pres = NULL; int cnt; for (cnt=0; cnt<HT_XL_HASH_SIZE; cnt++) { if ((cur = NetTable[cnt])) { while ((pres = (HTNet *) HTList_nextObject(cur)) != NULL) { check_pending(pres); free_net(pres); } } HTList_delete(NetTable[cnt]); } HT_FREE(NetTable); HTNetCount = 0; return YES; } return NO; } /* ** When pipelining, it is not possible to kill a single request ** as we then loose track of where we are in the pipe. It is ** therefore necessary to kill the whole pipeline. */ PUBLIC BOOL HTNet_killPipe (HTNet * net) { return (net && net->host) ? HTHost_killPipe(net->host) : NO; } /* HTNet_kill ** ---------- ** Kill the request by calling the call back function with a request for ** closing the connection. Does not remove the object. This is done by ** HTNet_delete() function which is called by the load routine. ** Returns OK if success, NO on error */ PUBLIC BOOL HTNet_kill (HTNet * net) { if (net) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_INTERRUPT); if (cbf) (*cbf)(net->request, HT_PROG_INTERRUPT, HT_MSG_NULL, NULL, NULL, NULL); HTTRACE(CORE_TRACE, "Net Object.. Killing %p\n" _ net); if (net->event.cbf) { (*(net->event.cbf))(HTNet_socket(net), net->event.param, HTEvent_CLOSE); return YES; } return unregister_net(net) && free_net(net); } HTTRACE(CORE_TRACE, "Net Object.. No object to kill\n"); return NO; } /* HTNet_killAll ** ------------- ** Kills all registered net objects by calling the call ** back function with a request for closing the connection. We do not ** remove the HTNet object as it is done by HTNet_delete(). ** Returns OK if success, NO on error */ PUBLIC BOOL HTNet_killAll (void) { HTTRACE(CORE_TRACE, "Net Object.. Kill ALL Net objects!!!\n"); if (NetTable) { HTList * cur = NULL; HTNet * pres = NULL; int cnt; for (cnt=0; cnt<HT_XL_HASH_SIZE; cnt++) { if ((cur = NetTable[cnt])) { while ((pres = (HTNet *) HTList_lastObject(cur)) != NULL) { HTNet_kill(pres); cur = NetTable[cnt]; } } } return YES; } HTTRACE(CORE_TRACE, "Net Object.. No objects to kill\n"); return NO; } /* ------------------------------------------------------------------------- */ /* Connection Specifics */ /* ------------------------------------------------------------------------- */ /* HTNet_priority ** -------------- ** Get the current priority of the Net object */ PUBLIC HTPriority HTNet_priority (HTNet * net) { return (net ? net->event.priority : HT_PRIORITY_INV); } /* HTNet_setPriority ** ----------------- ** Set the current priority of the Net object ** This will change the priority next time the thread is blocked */ PUBLIC BOOL HTNet_setPriority (HTNet * net, HTPriority priority) { if (net) { net->event.priority = priority; return YES; } return NO; } /* HTNet_Persistent ** ---------------- ** Check whether the net object handles persistent connections ** If we have a DNS entry then check that as well. */ PUBLIC BOOL HTNet_persistent (HTNet * net) { return (net && HTHost_isPersistent(net->host)); } /* HTNet_persistent ** ---------------- ** Set the net object to handle persistent connections ** If we also have a DNS entry then update that as well */ PUBLIC BOOL HTNet_setPersistent (HTNet * net, BOOL persistent, HTTransportMode mode) { if (net) { BOOL result = HTHost_setPersistent(net->host, persistent, mode); HTTRACE(CORE_TRACE, "Net Object.. Persistent connection set %s %s\n" _ persistent ? "ON" : "OFF" _ result ? "succeeded" : "failed"); return result; } return NO; } /* ** Context pointer to be used in context call back function */ PUBLIC BOOL HTNet_setContext (HTNet * net, void * context) { if (net) { net->context = context; return YES; } return NO; } PUBLIC void * HTNet_context (HTNet * net) { return net ? net->context : NULL; } /* ** Get and set the socket number */ PUBLIC BOOL HTNet_setSocket (HTNet * net, SOCKET sockfd) { if (net && net->host && net->host->channel) { HTChannel_setSocket(net->host->channel, sockfd); return YES; } return NO; } PUBLIC SOCKET HTNet_socket (HTNet * net) { return (net && net->host && net->host->channel ? HTChannel_socket(net->host->channel) : INVSOC); } /* ** Get and set the HTRequest object */ PUBLIC BOOL HTNet_setRequest (HTNet * net, HTRequest * request) { if (net && request) { net->request = request; return YES; } return NO; } PUBLIC HTRequest * HTNet_request (HTNet * net) { return (net ? net->request : NULL); } /* ** Get and set the HTChannel object */ PUBLIC BOOL HTNet_setChannel (HTNet * net, HTChannel * channel) { return (net && channel) ? HTHost_setChannel(net->host, channel) : NO; } PUBLIC HTChannel * HTNet_channel (HTNet * net) { return net ? HTHost_channel(net->host) : NULL; } /* ** Get and set the HTHost object */ PUBLIC BOOL HTNet_setHost (HTNet * net, HTHost * host) { if (net && host) { net->host = host; return YES; } return NO; } PUBLIC HTHost * HTNet_host (HTNet * net) { return (net ? net->host : NULL); } /* ** Get and set the HTdns object */ PUBLIC BOOL HTNet_setDns (HTNet * net, HTdns * dns) { if (net && dns) { net->host->dns = dns; return YES; } return NO; } PUBLIC HTdns * HTNet_dns (HTNet * net) { return (net ? net->host->dns : NULL); } PUBLIC BOOL HTNet_setProtocol (HTNet * net, HTProtocol * protocol) { if (net && protocol) { net->protocol = protocol; return YES; } return NO; } PUBLIC HTProtocol * HTNet_protocol (HTNet * net) { return (net ? net->protocol : NULL); } PUBLIC BOOL HTNet_setTransport (HTNet * net, HTTransport * tp) { if (net && tp) { net->transport = tp; return YES; } return NO; } PUBLIC HTTransport * HTNet_transport (HTNet * net) { return (net ? net->transport : NULL); } PUBLIC BOOL HTNet_preemptive (HTNet * net) { return (net ? net->preemptive : NO); } /* ** Create the output stream and bind it to the channel ** Please read the description in the HTIOStream module on the parameters */ PUBLIC HTOutputStream * HTNet_getOutput (HTNet * me, void * param, int mode) { if (me && me->host && me->host->channel && me->transport) { HTTransport * tp = me->transport; HTChannel * ch = me->host->channel; HTOutputStream * output = (*tp->output_new)(me->host, ch, param, mode); HTChannel_setOutput(ch, output); return output; } HTTRACE(CORE_TRACE, "Host Object.. Can't create output stream\n"); return NULL; } PUBLIC HTEvent * HTNet_event (HTNet * net) { return net ? &net->event : NULL; } PUBLIC BOOL HTNet_setEventParam (HTNet * net, void * eventParam) { if (net) return HTEvent_setParam(&net->event, eventParam); return NO; } PUBLIC void * HTNet_eventParam (HTNet * net) { return net ? net->event.param : NULL; } PUBLIC BOOL HTNet_setEventCallback(HTNet * net, HTEventCallback * cbf) { if (net) return HTEvent_setCallback(&net->event, cbf); return NO; } PUBLIC HTEventCallback * HTNet_eventCallback(HTNet * net) { return net->event.cbf; } PUBLIC BOOL HTNet_setEventPriority(HTNet * net, HTPriority priority) { if (net) return HTEvent_setPriority(&net->event, priority); return NO; } PUBLIC HTPriority HTNet_eventPriority(HTNet * net) { return net->event.priority; } PUBLIC HTStream * HTNet_readStream(HTNet * net) { if (!net) return NULL; return net->readStream; } PUBLIC BOOL HTNet_setReadStream (HTNet * net, HTStream * stream) { if (net) { net->readStream = stream; return YES; } return NO; } /* ** Should we do raw byte count at the network or later? ** Normally it is later but in cases like FTP we need it ** in the raw form */ PUBLIC BOOL HTNet_setRawBytesCount (HTNet * net, BOOL mode) { if (net) { net->countRawBytes = mode; return YES; } return NO; } PUBLIC BOOL HTNet_rawBytesCount (HTNet * net) { return (net && net->countRawBytes); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNet.html�����������������������������������������������������������������������0100644�0000764�0000144�00000052760�07130400133�015615� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTNet Class</TITLE> </HEAD> <BODY> <H1> The Net Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Net class manages information related to a "thread" in libwww. As libwww threads are not really threads but a notion of using interleaved, non-blocking I/O for accessing data objects from the network (or local file system), they can be used on any platform with or without support for native threads. In the case where you have an application using real threads the Net class is simply a object maintaining links to all other objects involved in serving the request. If you are using the libwww pseudo threads then the Net object contains enough information to stop and start a request based on which BSD sockets are ready. In practise this is of course transparent to the application - this is just to explain the difference. <P> When a <A HREF="HTReq.html">Request object</A> is passed to the Library , the core creates a new HTNet object per <A HREF="HTChannl.html">channel</A> used by the request. In many cases a request only uses a single <A HREF="HTChannl.html">channel object </A>but, for example, FTP requests use at least two - one for the control connection and one for the data connection. <P> You can find more information about the libwww pseudo thread model in the <A HREF="../User/Architecture/"> Multithread Specifications</A>. <P> This module is implemented by <A HREF="HTNet.c">HTNet.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTNET_H #define HTNET_H </PRE> <P> The <CODE>HTNet</CODE> object is the core of the request queue management. This object contains information about the socket descriptor, the input read buffer etc. required to identify and service a request. <PRE> typedef struct _HTNet HTNet; #include "HTEvent.h" #include "HTReq.h" #include "HTResponse.h" #include "HTTrans.h" #include "HTHost.h" #include "HTProt.h" #include "HTChannl.h" #include "HTDNS.h" </PRE> <H2> <A NAME="callout">Generic BEFORE and AFTER Filter Management</A> </H2> <P> Filter functions can be registered to be called <EM>before</EM> and <EM>after</EM> a request has either been started or has terminated. The conditions for <I>BEFORE</I> and <I>AFTER</I> filters are not the same, and so we maintain them independently. Filters can be registered globally or locally. The global filters are registered directly by the Net Object (this module) and the local filters are registered by the <A HREF="HTReq.html">HTRequest</A> Object. However, both &nbsp;local and global filters use the same regisration mechanism which we provide here. <H3> Filter Ordering </H3> <P> Filters can be registered by anyone and as they are an often used mechanism for introducing extensions in libwww, they are videly used to handle authentication, redirection, etc. Many filters can be registered at once and not all of the filters may know about the other filters. Therefore, it is difficult to specify an absolute ordering by which the filters should be called. Instead you can decide a relative order by which the filters should be called. The order works pretty much like the Unix priority mechanism running from <CODE>HT_FILTER_FIRST</CODE> to <CODE>HT_FILTER_LAST</CODE> having <CODE>HT_FILTER_MIDDLE</CODE> being the "normal" case. <PRE> typedef enum _HTFilterOrder { HT_FILTER_FIRST = 0x0, /* 0 */ HT_FILTER_EARLY = 0x3FFF, /* 16383 */ HT_FILTER_MIDDLE = 0x7FFF, /* 32767 */ HT_FILTER_LATE = 0xBFFE, /* 49150 */ HT_FILTER_LAST = 0xFFFF /* 65535 */ } HTFilterOrder; </PRE> <P> In case multiple filters are registered with the same order then they are called in the <I>inverse</I> order they were registered.&nbsp; <H3> Filter URL Templates </H3> <P> Both <I>BEFORE</I> and <I>AFTER</I> filters can be registered with a <I>URL template</I> in which case they are only called when the <I>Request URL</I> matches the template. A template is simply a string which is matched against the <I>Request URL</I>. The string can be terminated by a&nbsp;single "<CODE>*</CODE>" in which case all strings matching the template up til the "*" is considered a match. A template can be as short as the access scheme which enmables a filter for a specific access method only, for example "<CODE>http//&lt;star&gt;</CODE>". <H3> BEFORE Filters </H3> <P> A <I>BEFORE</I> filter is called whenever we issue a request and they have been selected by the execution procedure. <I>BEFORE</I> filters are registered with a <I>context</I> and a <I>filter order</I> by which they are to be called and a <I>URL template</I> which may be NULL. In this case, the filter is called on every request. The mode can be used by anybody to pass an extra parameter to a filter. This is not really OO thinking - but hey - this is C ;-) <PRE>typedef int HTNetBefore (HTRequest * request, void * param, int mode); </PRE> <P> You can add a <I>BEFORE</I> filter in the list provided by the caller. Several filters can be registered in which case they are called with the filter ordering in mind. <PRE> extern BOOL HTNetCall_addBefore (HTList * list, HTNetBefore * before, const char * tmplate, void * param, HTFilterOrder order); </PRE> <P> You can also unregister all instances of a BEFORE filter from a list using the following function <PRE> extern BOOL HTNetCall_deleteBefore (HTList * list, HTNetBefore * before); </PRE> <P> You get rid of all BEFORE filters using this function <PRE> extern BOOL HTNetCall_deleteBeforeAll (HTList * list); </PRE> <P> The BEFORE filters are expected and called if appropriate every time we issue a new request. Libwww calls the BEFORE filters in the order specified at registration time. If a filter returns other than HT_OK then stop and return immediately. Otherwise return what the last filter returns. <PRE> extern int HTNetCall_executeBefore (HTList * list, HTRequest * request); </PRE> <H3> AFTER Filters </H3> <P> An <I>AFTER</I> filter is called whenever we have terminated a request. That is, on the way out from the <A HREF="HTProt.html">protocol module</A> and back to the application. <I>AFTER</I> filters are registered with a <I>context</I>, a <I>status</I>, a <I>filter order</I> by which they are to be called and a <I>URL template</I> which may be NULL. The status of the request may determine which filter to call. The set of possible values are given below. An <I>AFTER</I> filter can be registered to handle one or more of the codes. <DL> <DT> HT_ERROR <DD> An error occured <DT> HT_LOADED <DD> The document was loaded <DT> HT_NO_DATA <DD> OK, but no data <DT> HT_NO_ACCESS <DD> The request could not be succeeded due to lack of credentials <DT> HT_NO_PROXY_ACCESS <DD> The request could not be succeeded due to lack of credentials for accessing an intermediate proxy <DT> HT_RETRY <DD> Retry request after at a later time <DT> HT_PERM_REDIRECT <DD> The request has been permanently redirected and we send back the new URL <DT> HT_TEMP_REDIRECT <DD> The request has been temporarily redirected and we send back the new URL <DT> HT_ALL <DD> All of above </DL> <P> A Protocol module can also, in certain cases, return a <CODE>HT_IGNORE</CODE> in which case no filters are called <PRE> typedef int HTNetAfter (HTRequest * request, HTResponse * response, void * param, int status); </PRE> <P> You can register a AFTER filter in the list provided by the caller. Several filters can be registered in which case they are called with the filter ordering in mind. <PRE> extern BOOL HTNetCall_addAfter (HTList * list, HTNetAfter * after, const char * tmplate, void * param, int status, HTFilterOrder order); </PRE> <P> You can either unregister all filters registered for a given status using this function or the filter for all status codes. <PRE> extern BOOL HTNetCall_deleteAfter (HTList * list, HTNetAfter * after); extern BOOL HTNetCall_deleteAfterStatus (HTList * list, int status); </PRE> <P> You can also delete all AFTER filters in list <PRE> extern BOOL HTNetCall_deleteAfterAll (HTList * list); </PRE> <P> This function calls all the AFTER filters in the order specified at registration time and if it has the right status code and it's not <CODE>HT_IGNORE</CODE>. We also check for any template and whether it matches or not. If a filter returns other than HT_OK then stop and return immediately. Otherwise return what the last filter returns. <PRE> extern int HTNetCall_executeAfter (HTList * list, HTRequest * request, int status); </PRE> <H2> <A NAME="Global">Global BEFORE and AFTER Filter Management</A> </H2> <P> Global filters are inspected on every request (they do not have to be called - only if the conditions match). You can also register filters locally in the Request object. <H4> Global BEFORE Filters </H4> <P> These are the methods to handle global <I>BEFORE</I> Filters. <PRE> extern BOOL HTNet_setBefore (HTList * list); extern HTList * HTNet_before (void); extern BOOL HTNet_addBefore (HTNetBefore * before, const char * tmplate, void * param, HTFilterOrder order); extern BOOL HTNet_deleteBefore (HTNetBefore * before); </PRE> <P> You can call both the local and the global BEFORE filters (if any) <PRE> extern int HTNet_executeBeforeAll (HTRequest * request); </PRE> <H4> Global AFTER Filters </H4> <P> These are the methods to handle global <I>AFTER</I> Filters. <PRE> extern BOOL HTNet_setAfter (HTList * list); extern HTList * HTNet_after (void); extern BOOL HTNet_addAfter (HTNetAfter * after, const char * tmplate, void * param, int status, HTFilterOrder order); extern BOOL HTNet_deleteAfter (HTNetAfter * after); extern BOOL HTNet_deleteAfterStatus (int status); </PRE> <P> You can call both the local and the global AFTER filters (if any) <PRE> extern int HTNet_executeAfterAll (HTRequest * request, int status); </PRE> <H2> <A NAME="Resources">Socket Resource Management</A> </H2> <P> The request queue ensures that no more than a fixed number of TCP connections are open at the same time. If more requests are handed to the Library, they are put into the pending queue and initiated when sockets become free. <H3> Number of Simultanous open TCP connections </H3> <P> Set the max number of simultanous sockets. The default value is HT_MAX_SOCKETS which is 6. The number of persistent connections depend on this value as a deadlock can occur if all available sockets a persistent (see the <A HREF="HTDNS.html">DNS Manager</A> for more information on setting the number of persistent connections). The number of persistent connections can never be more than the max number of sockets-2, so letting newmax=2 prevents persistent sockets. <PRE> extern BOOL HTNet_setMaxSocket (int newmax); extern int HTNet_maxSocket (void); </PRE> <H3> Socket Counters </H3> <PRE> extern void HTNet_increaseSocket (void); extern void HTNet_decreaseSocket (void); extern int HTNet_availableSockets (void); </PRE> <H3> Persistent Socket Counters </H3> <PRE> extern void HTNet_increasePersistentSocket (void); extern void HTNet_decreasePersistentSocket (void); extern int HTNet_availablePersistentSockets (void); </PRE> <H3> Any Ongoing Connections? </H3> <P> Returns whether there are active requests. Idle persistent sockets do not count as active. <PRE> extern BOOL HTNet_isIdle (void); </PRE> <H3> List Active Queue </H3> <P> Returns the list of active requests that are currently having an open connection. Returns list of HTNet objects or NULL if error. <PRE> extern HTList *HTNet_activeQueue (void); extern BOOL HTNet_idle (void); </PRE> <H3> Are we Active? </H3> <P> We have some small functions that tell whether there are registered requests in the Net manager. There are tree queues: The <EM>active</EM>, the <EM>pending</EM>, and the <EM>persistent</EM>. The <EM>active</EM> queue is the set of requests that are actively sending or receiving data. The <EM>pending</EM> is the requests that we have registered but which are waiting for a free socket. The <EM>Persistent</EM> queue are requets that are waiting to use the same socket in order to save network resoures (if the server understands persistent connections). <H4> Active Requests? </H4> <P> Returns whether there are requests in the <EM>active</EM> queue or not <PRE> extern BOOL HTNet_idle (void); </PRE> <H4> Registered Requests? </H4> <P> Returns whether there are requests registered in any of the lists or not <PRE> extern BOOL HTNet_isEmpty (void); extern int HTNet_count (void); </PRE> <H3> List Pending Queue </H3> <P> Returns the list of pending requests that are waiting to become active. Returns list of HTNet objects or NULL if error <PRE> extern HTList *HTNet_pendingQueue (void); </PRE> <H2> Creation and Deletion Methods </H2> <P> The Net object is intended to live as long as the request is still active. In that regard it is very similar to the <A HREF="HTReq.html">Request Object </A>. However, the main difference is that a Net object represents a "thread" in the Library and a request may have multiple "threads" - an example is a FTP request which has a thread to handle the control connection and one to handle the data connections. <H3> Create a new Object </H3> <P> If we have more than HTMaxActive connections already then put this into the pending queue, else start the request by calling the call back function registered with this access method. Returns YES if OK, else NO <PRE> extern BOOL HTNet_newClient (HTRequest * request); </PRE> <P> You can create a new HTNet object as a new request to be handled. If we have more than HTMaxActive connections already then return NO. Returns YES if OK, else NO <PRE> extern BOOL HTNet_newServer (HTRequest * request); </PRE> <P> And you can create a plain new HTNet object using the following method: <PRE> extern HTNet * HTNet_new (HTHost * host); </PRE> <H3> Duplicate an existing Object </H3> <P> Creates a new HTNet object as a duplicate of the same request. Returns YES if OK, else NO. <PRE> extern HTNet * HTNet_dup (HTNet * src); extern BOOL HTNet_deleteDup (HTNet * dup); </PRE> <H3> Launch a Net Object </H3> <P> Start a Net obejct by calling the protocol module. <PRE>extern BOOL HTNet_start (HTNet * net); </PRE> <H3> Call a Net Event Handler </H3> <P> This functions lets the caller play event manager as it can calls any event handler with the event type and context passed to the function <PRE> extern BOOL HTNet_execute (HTNet * net, HTEventType type); extern HTEvent * HTNet_event (HTNet * net); extern BOOL HTNet_setEventParam (HTNet * net, void * eventParam); extern void * HTNet_eventParam (HTNet * net); extern BOOL HTNet_setEventCallback(HTNet * net, HTEventCallback * cbf); extern HTEventCallback * HTNet_eventCallback(HTNet * net); </PRE> <H3> Delete an Object </H3> <P> Deletes the HTNet object from the list of active requests and calls any registered call back functions IF not the status is HT_IGNORE. This is used if we have internal requests that the app doesn't know about. We also see if we have pending requests that can be started up now when we have a socket free. The filters are called in the reverse order of which they were registered (last one first); <PRE> extern BOOL HTNet_delete (HTNet * me, int status); </PRE> <H3> Delete ALL HTNet Objects </H3> <P> Deletes all HTNet object that might either be active or pending We DO NOT call the call back functions - A crude way of saying goodbye! <PRE> extern BOOL HTNet_deleteAll (void); </PRE> <H2> Net Class Methods </H2> <H3> Make an Object Wait </H3> <P> Let a net object wait for a persistent socket. It will be launched from the HTNet_delete() function when the socket gets free. <PRE> extern BOOL HTNet_wait (HTNet *net); </PRE> <H3> Priority Management </H3> <P> Each HTNet object is created with a priority which it inherits from the <A HREF="HTReq.html">Request manager</A>. However, in some stuations it is useful to be to change the current priority after the request has been started. These two functions allow you to do this. The effect will show up the first time (which might be imidiately) the socket blocks and control returns to the event loop. Also have a look at how you can do this before the request is issued in the <A HREF="HTReq.html">request manager</A>. <PRE> extern HTPriority HTNet_priority (HTNet * net); extern BOOL HTNet_setPriority (HTNet * net, HTPriority priority); </PRE> <H3> Persistent Connections </H3> <P> You can set a Net object to handle persistent connections for example using HTTP, NNTP, or FTP. You can control whether a Net object supports persistent connections or not using this function. <PRE> extern BOOL HTNet_persistent (HTNet * net); </PRE> <P> You can set or disable a Net object supporting persistent connections using this function: <PRE> extern BOOL HTNet_setPersistent (HTNet * net, BOOL persistent, HTTransportMode mode); </PRE> <H3> Kill one or more Requests </H3> <H4> Kill this request and all requests in the Pipeline </H4> <P> When pipelining, it is not possible to kill a single request as we then loose track of where we are in the pipe. It is therefore necessary to kill the whole pipeline. <PRE> extern BOOL HTNet_killPipe (HTNet * net); </PRE> <H4> Kill a single Request </H4> <P> This is not often used anymore, consider using the pipeline version above. Kill the request by calling the call back function with a request for closing the connection. Does not remove the object. This is done by HTNet_delete() function which is called by the load routine. Returns OK if success, NO on error. <PRE> extern BOOL HTNet_kill (HTNet * me); </PRE> <H4> Kill ALL Requests </H4> <P> Kills <B>all</B> registered (active as well as pending) requests by calling the call back function with a request for closing the connection. We do not remove the HTNet object as it is done by HTNet_delete(). Returns OK if success, NO on error <PRE> extern BOOL HTNet_killAll (void); </PRE> <H3> Create Input and Output Streams </H3> <P> You create the input stream and bind it to the channel using the following methods. Please read the description in the <A HREF="HTIOStream.html">HTIOStream module</A> on the parameters <EM>target</EM>, <EM>param</EM>, and <EM>mode</EM>. Both methods return YES if OK, else NO. <PRE> #if 0 extern HTInputStream * HTNet_getInput (HTNet * net, HTStream * target, void * param, int mode); #endif extern HTOutputStream * HTNet_getOutput (HTNet * me, void * param, int mode); </PRE> <H3> Net Context Descriptor </H3> <P> Just like the <A HREF="../../../../WWW/Library/src/HTReq.html#context">request object</A>, a net object can be assigned a context which keeps track of context dependent information. The Library does not use this information nor does it depend on it but it allows the application to customize a net object to specific uses. <PRE>extern BOOL HTNet_setContext (HTNet * net, void * context); extern void * HTNet_context (HTNet * net); </PRE> <H3> Socket Descriptor </H3> <PRE> extern BOOL HTNet_setSocket (HTNet * net, SOCKET sockfd); extern SOCKET HTNet_socket (HTNet * net); </PRE> <H3> Preemptive or Non-preemptive Access </H3> <P> A access scheme is defined with a default for using either preemptive (blocking I/O) or non-premitve (non-blocking I/O). This is basically a result of the implementation of the protocol module itself. However, if non-blocking I/O is the default then some times it is nice to be able to set the mode to blocking instead. For example when loading the first document (the home page) then blocking can be used instead of non-blocking. <PRE> extern BOOL HTNet_preemptive (HTNet * net); </PRE> <H3> The Request Object </H3> <P> The <A HREF="HTReq.html">Request object</A> is normally set up automatically but can be changed at a later time. <PRE> extern BOOL HTNet_setRequest (HTNet * net, HTRequest * request); extern HTRequest * HTNet_request (HTNet * net); </PRE> <H3> The Protocol Object </H3> <PRE> extern BOOL HTNet_setProtocol (HTNet * net, HTProtocol * protocol); extern HTProtocol * HTNet_protocol (HTNet * net); </PRE> <H3> The Transport Object </H3> <P> The <A HREF="HTTrans.html">transport object</A> is normally set up automatically but can be changed at a later time. <PRE> extern BOOL HTNet_setTransport (HTNet * net, HTTransport * tp); extern HTTransport * HTNet_transport (HTNet * net); </PRE> <H3> The Channel Object </H3> <PRE> extern BOOL HTNet_setChannel (HTNet * net, HTChannel * channel); extern HTChannel * HTNet_channel (HTNet * net); </PRE> <H3> The Host Object </H3> <PRE> extern BOOL HTNet_setHost (HTNet * net, HTHost * host); extern HTHost * HTNet_host (HTNet * net); </PRE> <H3> The DNS Object </H3> <P> The DNS object keeps track of the DNS entries that we have already checked out. <PRE> extern BOOL HTNet_setDns (HTNet * net, HTdns * dns); extern HTdns * HTNet_dns (HTNet * net); </PRE> <H3> Target for Input Read Stream </H3> <PRE> extern HTStream * HTNet_readStream(HTNet * net); extern BOOL HTNet_setReadStream (HTNet * net, HTStream * stream); </PRE> <H3> Should we count Raw bytes? </H3> <P> This functions can be used to determine whether bytes count should be managed at the low level read stream or at a higher level. If the data transfer equals the lifetime of a single document like for example in FTP or HTTP/1.0 then this may be a reasonable thing to do. <PRE>extern BOOL HTNet_setRawBytesCount (HTNet * net, BOOL mode); extern BOOL HTNet_rawBytesCount (HTNet * net); </PRE> <PRE> #endif /* HTNET_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTNet.html,v 2.57 2025/07/04 15:18:51 kahan Exp $ </ADDRESS> </BODY></HTML> ����������������libwww/Library/src/HTNetMan.html��������������������������������������������������������������������0100644�0000764�0000144�00000010157�06602521044�016253� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 19-May-1996 --> <TITLE>W3C Sample Code Library libwww Private Net Definition</TITLE> </HEAD> <BODY> <H1> Private Net Definition </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the private definition of the Net Class. Please look in the public <A HREF="HTNet.html">Net Class</A> for more documentation <P> This module is implemented by <A HREF="HTNet.c">HTNet.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTNETMAN_H #define HTNETMAN_H #include "HTNet.h" #include "HTDNS.h" #include "HTEvent.h" #include "HTProt.h" </PRE> <P> The <CODE>HTNet</CODE> object is the core of the request queue management. This object contains information about the socket descriptor, the input read buffer etc. required to identify and service a request. <PRE> struct _HTNet { int hash; /* Hash value */ /* Link to other objects */ HTRequest * request; /* Link to request object */ HTHost * host; /* What we know about the remote host */ HTProtocol * protocol; /* Protocol to this request */ HTTransport * transport; /* Transport for this request */ int session; /* For progress notifications */ BOOL countRawBytes; /* If we should count raw bytes */ long bytesRead; /* Bytes in body */ long headerBytesRead; /* Bytes read in header */ long bytesWritten; /* Bytes written to network */ long headerBytesWritten; /* Bytes written in header */ #if 0 int retry; /* Counting attempts to connect */ int home; /* Current home if multiple */ #endif time_t connecttime; /* Used on multihomed hosts */ BOOL preemptive; /* Eff result from Request and Protocol */ HTEvent event; HTStream * readStream; /* host's input stream puts data here */ /* User specific stuff */ void * context; /* Protocol Specific context */ /* Eric's sleezoid cheat - should go to extra pipeline object */ HTEventType registeredFor; }; extern SOCKET HTNet_socket(HTNet * me); </PRE> <H2> Bytes Read Stats </H2> <H3> Total Bytes Read </H3> <PRE> #define HTNet_setBytesRead(me,l) ((me) ? (me-&gt;bytesRead=(l)) : -1) #define HTNet_bytesRead(me) ((me) ? (me)-&gt;bytesRead : -1) #define HTNet_addBytesRead(me,l) ((me) ? (me-&gt;bytesRead+=(l)) : -1) </PRE> <H3> Header Bytes Read </H3> <PRE> #define HTNet_setHeaderBytesRead(me,l) ((me) ? (me-&gt;headerBytesRead=(l)) :-1) #define HTNet_headerBytesRead(me) ((me) ? (me)-&gt;headerBytesRead : -1) #define HTNet_addHeaderBytesRead(me,l) ((me) ? (me-&gt;headerBytesRead+=(l)) : -1) </PRE> <H2> Bytes Written Stats </H2> <H3> Total Bytes Written </H3> <PRE> #define HTNet_setBytesWritten(me,l) ((me) ? (me-&gt;bytesWritten=(l)) :-1) #define HTNet_bytesWritten(me) ((me) ? (me)-&gt;bytesWritten : -1) #define HTNet_addBytesWritten(me,l) ((me) ? (me-&gt;bytesWritten+=(l)) : -1) </PRE> <H3> Header Bytes Written </H3> <PRE> #define HTNet_setHeaderBytesWritten(me,l) ((me) ? (me-&gt;headerBytesWritten=(l)) :-1) #define HTNet_headerBytesWritten(me) ((me) ? \ ((me)-&gt;headerBytesWritten==0 ? \ HTNet_bytesWritten(me) : \ (me)-&gt;headerBytesWritten) : -1) #define HTNet_addHeaderBytesWritten(me,l) ((me) ? (me-&gt;headerBytesWritten+=(l)) : -1) </PRE> <H2> Event Callbacks </H2> <PRE> extern BOOL HTNet_setEventParam(HTNet * net, void * eventParam); extern void* HTNet_eventParam(HTNet * net); extern BOOL HTNet_setEventCallback(HTNet * net, HTEventCallback * cbf); extern HTEventCallback * HTNet_eventCallback(HTNet * net); extern BOOL HTNet_setEventPriority(HTNet * net, HTPriority priority); extern HTPriority HTNet_eventPriority(HTNet * net); </PRE> <PRE> #endif /* HTNETMAN_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTNetMan.html,v 2.25 2025/09/24 19:48:52 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNetTxt.c�����������������������������������������������������������������������0100644�0000764�0000144�00000011503�06523414343�015576� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTNetTxt.c ** NETWORK TELNET TO INTERNAL CHARACTER TEXT AND VISE VERSA ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTNetTxt.c,v 2.10 2025/05/04 19:37:07 frystyk Exp $ ** ** This module provides two basic streams that converts from CRLF to ** an internal C representation (\n) and from the C representation to ** CRLF. ** ** HISTORY: ** 27 Mar 95 HFN Spawned off from HTFormat.c */ /* Library Include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTStream.h" #include "HTNetTxt.h" /* Implemented here */ /* Typedefs and global variable local to this module */ struct _HTStream { const HTStreamClass * isa; HTStream * target; const char * start; BOOL had_cr; }; #define PUTC(c) (*me->target->isa->put_character)(me->target, c) #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) /* ------------------------------------------------------------------------- */ /* Converter from CRLF to \n ** ------------------------- ** The input is assumed to be in local representation with lines ** delimited by (CR,LF) pairs in the local representation. ** The conversion to local representation is always done in HTSocket.c ** The (CR,LF) sequence when found is changed to a '\n' character, ** the internal C representation of a new line. */ PRIVATE int NetToText_put_block (HTStream * me, const char * s, int l) { int status; if (!me->start) me->start = s; else { l -= (me->start - s); s = me->start; } while (l-- > 0) { if (me->had_cr && *s == LF) { if (s > me->start+1) { if ((status = PUTBLOCK(me->start, s - me->start-1)) != HT_OK) return status; } me->start = s+1; if ((status = PUTC('\n')) != HT_OK) return status; } me->had_cr = (*s++ == CR); } if (me->start < s && (status = PUTBLOCK(me->start, s-me->start)) != HT_OK) return status; me->start = NULL; /* Whole buffer is written :-) */ return HT_OK; } PRIVATE int NetToText_put_character (HTStream * me, char c) { return NetToText_put_block(me, &c, 1); } PRIVATE int NetToText_put_string (HTStream * me, const char * s) { return NetToText_put_block(me, s, (int) strlen(s)); } PRIVATE int Net_flush (HTStream * me) { return me->target ? (*me->target->isa->flush)(me->target) : HT_OK; } PRIVATE int Net_free (HTStream * me) { int status = HT_OK; if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HT_FREE(me); return status; } PRIVATE int Net_abort (HTStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target, e); HT_FREE(me); return HT_ERROR; } PRIVATE HTStreamClass NetToTextClass = { "NetToText", Net_flush, Net_free, Net_abort, NetToText_put_character, NetToText_put_string, NetToText_put_block }; PUBLIC HTStream * HTNetToText (HTStream * target) { HTStream* me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("NetToText"); me->isa = &NetToTextClass; me->had_cr = NO; me->target = target; return me; } /* Converter from \n to CRLF ** ------------------------- ** The input is assumed to be in local representation with lines ** delimited by \n. The \n when found is changed to a CRLF sequence, ** the network representation of a new line. ** Conversion: '\r' is stripped and \n => CRLF */ PRIVATE int TextToNet_put_block (HTStream * me, const char* b, int len) { int status; #if 0 const char *limit = b+len; #endif if (!me->start) me->start = b; else { len -= (me->start - b); b = me->start; } while (len-- > 0) { if (me->had_cr && *b == LF) { if (b > me->start+1) { if ((status = PUTBLOCK(me->start, b - me->start-1)) != HT_OK) return status; } me->start = b+1; if ((status = PUTC('\n')) != HT_OK) return status; } me->had_cr = (*b++ == CR); } if (me->start < b && (status = PUTBLOCK(me->start, b-me->start)) != HT_OK) return status; me->start = NULL; /* Whole buffer is written :-) */ return HT_OK; } PRIVATE int TextToNet_put_character (HTStream * me, char c) { return TextToNet_put_block(me, &c, 1); } PRIVATE int TextToNet_put_string (HTStream * me, const char * s) { return TextToNet_put_block(me, s, (int) strlen(s)); } PRIVATE HTStreamClass TextToNetClass = { "TextToNet", Net_flush, Net_free, Net_abort, TextToNet_put_character, TextToNet_put_string, TextToNet_put_block }; PUBLIC HTStream * HTTextToNet (HTStream * target) { HTStream* me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("TextToNet"); me->isa = &TextToNetClass; me->had_cr = NO; me->target = target; return me; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNetTxt.html��������������������������������������������������������������������0100644�0000764�0000144�00000001707�06661445112�016326� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> <NEXTID N="z18"> <TITLE>W3C Sample Code Library libwww CRLF Stripper Stream</TITLE> </HEAD> <BODY> <H1> Network Telnet To Internal Character Text </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is a filter stream suitable for taking text from a socket and passing it into a stream which expects text in the local C representation. It does newline conversion. As usual, pass its output stream to it when creating it. <P> This module is implemented by <A HREF="HTNetTxt.c">HTNetTxt.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTNETTXT_H #define HTNETTXT_H extern HTStream * HTNetToText (HTStream * target); #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTNetTxt.html,v 2.11 2025/02/14 04:00:10 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������libwww/Library/src/HTNews.c�������������������������������������������������������������������������0100644�0000764�0000144�00000053256�07144232674�015304� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* NEWS ACCESS HTNews.c ** =========== ** ** History: ** 26 Sep 90 Written TBL ** 29 Nov 91 Downgraded to C, for portable implementation. ** 16 Feb 94 AL Added Lou Montulli's Lynx & LIST NEWSGROUPS diffs. ** 2 May 94 AL Added HTUnEscape() to HTLoadNews(), and ** fixed a possible security hole when the URL contains ** a newline, that could cause multiple commands to be ** sent to an NNTP server. ** 8 Jul 94 FM Insulate free() from _free structure element. ** 30 Aug 95 FTLO Added POST functionality and updated state machine ** 30 Aug 95 HFN Cleaned up a whole lot and made a state machine */ /* Library Include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWStream.h" #include "WWWTrans.h" #include "HTReqMan.h" /* @@@ */ #include "HTNewsRq.h" #include "HTNewsLs.h" #include "HTNews.h" /* Implements */ /* Macros and other defines */ #ifndef NEWS_LIST_FILE #define NEWS_LIST_FILE ".www_news" /* Name of news list file */ #endif #define MAX_NEWS_ARTICLES 0 /* No default max number of articles */ #define PUTBLOCK(b, l) (*me->target->isa->put_block) (me->target, b, l) #define ABORT_TARGET (*me->target->isa->abort) (me->target, e) /* Local context structure used in the HTNet object */ typedef enum _HTNewsState { NEWS_ERROR = -3, NEWS_SUCCESS = -2, NEWS_NO_DATA = -1, NEWS_BEGIN = 0, NEWS_SEEK_CACHE, NEWS_NEED_CONNECTION, NEWS_NEED_GREETING, NEWS_NEED_SWITCH, NEWS_NEED_ARTICLE, #if HT_LISTGROUP NEWS_NEED_LGRP, #endif NEWS_NEED_LIST, NEWS_NEED_GROUP, NEWS_NEED_XOVER, NEWS_NEED_HEAD, NEWS_NEED_POST, NEWS_NEED_BODY } HTNewsState; typedef struct _news_info { HTChunk * cmd; int repcode; char * reply; HTNewsState state; /* State of the connection */ HTFormat format; char * name; /* Name of article or newsgroup */ BOOL sent; /* Read or write command */ int first; /* First article in the group list */ int last; /* Last article in the group list */ int total; /* Estimated number of articles */ int current; /* To count # of HEADS sent */ HTNet * net; } news_info; /* This version of a stream is used for NEWS LIST conversion to HTML */ struct _HTStream { const HTStreamClass * isa; HTStream * target; HTRequest * request; news_info * news; HTEOLState EOLstate; BOOL semi_trans; BOOL junk; char buffer[MAX_NEWS_LINE+1]; int buflen; HTHost * host; }; struct _HTInputStream { const HTInputStreamClass * isa; }; PRIVATE int MaxArt = MAX_NEWS_ARTICLES; /* ------------------------------------------------------------------------- */ /* NEWS INPUT STREAM */ /* ------------------------------------------------------------------------- */ /* ScanResponse ** ------------ ** Analyzes the response from the NNTP server. ** We only expect one line response codes. ** Returns HT_LOADED if OK, HT_ERROR if error */ PRIVATE int ScanResponse (HTStream * me) { news_info *news = me->news; *(me->buffer+me->buflen) = '\0'; if (isdigit((int) *(me->buffer))) sscanf(me->buffer, "%d", &news->repcode); me->buflen = 0; news->reply = me->buffer+4; HTTRACE(PROT_TRACE, "News Rx..... `%s\'\n" _ news->reply); /* If 2xx code and we expect data then go into semi-transparent mode */ if (me->news->format && news->repcode/100 == 2) { HTRequest *req = me->request; me->target = HTStreamStack(me->news->format, req->output_format, req->output_stream, req, NO); me->semi_trans = YES; if (!me->target) return HT_ERROR; } else if (news->repcode/100 == 4) { HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_NOT_FOUND, news->reply, strlen(news->reply), "ScanResponse"); } return HT_LOADED; } /* ** Searches for NNTP header line until buffer fills up or a CRLF or LF ** is found */ PRIVATE int HTNewsStatus_put_block (HTStream * me, const char * b, int l) { int status; HTHost_setConsumed(me->host, l); while (!me->semi_trans && l-- > 0) { if (me->EOLstate == EOL_FCR) { if (*b == LF) { if (me->junk) me->junk = NO; me->EOLstate = EOL_BEGIN; if ((status = ScanResponse(me)) != HT_LOADED) return status; } } else if (*b == CR) { me->EOLstate = EOL_FCR; } else if (*b == LF) { if (me->junk) me->junk = NO; me->EOLstate = EOL_BEGIN; if ((status = ScanResponse(me)) != HT_LOADED) return status; } else { *(me->buffer+me->buflen++) = *b; if (me->buflen >= MAX_NEWS_LINE) { HTTRACE(PROT_TRACE, "News Status. Line too long - chopped\n"); me->junk = YES; if ((status = ScanResponse(me)) != HT_LOADED) return status; } } b++; } /* ** Now see if we have parts of the body to put down the stream pipe. ** At this point we are looking for CRLF.CRLF. We are guaranteed a stream */ if (l > 0) { int rest = l; const char *ptr = b; while (rest-- > 0) { if (*ptr == CR) { me->EOLstate = me->EOLstate==EOL_DOT ? EOL_SCR : EOL_FCR; } else if (*ptr == '.') { me->EOLstate = me->EOLstate==EOL_FLF ? EOL_DOT : EOL_BEGIN; } else if (*ptr == LF) { me->EOLstate = me->EOLstate>EOL_DOT ? EOL_SLF : EOL_FLF; } else me->EOLstate = EOL_BEGIN; ptr++; } if (me->EOLstate == EOL_SLF) { int status = PUTBLOCK(b, l-5); return status != HT_OK ? status : HT_LOADED; } else { int status = PUTBLOCK(b, l); return status; } } return HT_LOADED; } PRIVATE int HTNewsStatus_put_character (HTStream * me, char ch) { return HTNewsStatus_put_block(me, &ch, 1); } PRIVATE int HTNewsStatus_put_string (HTStream * me, const char * str) { return HTNewsStatus_put_block(me, str, (int) strlen(str)); } PRIVATE int HTNewsStatus_flush (HTStream * me) { return me->target ? (*me->target->isa->flush)(me->target) : HT_OK; } PRIVATE int HTNewsStatus_free (HTStream * me) { int status = HT_OK; if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HT_FREE(me); return status; } PRIVATE int HTNewsStatus_abort (HTStream * me, HTList * e) { if (me->target) ABORT_TARGET; HT_FREE(me); HTTRACE(PROT_TRACE, "NewsStatus.. ABORTING...\n"); return HT_ERROR; } PRIVATE const HTStreamClass HTNewsStatusClass = { "NewsStatus", HTNewsStatus_flush, HTNewsStatus_free, HTNewsStatus_abort, HTNewsStatus_put_character, HTNewsStatus_put_string, HTNewsStatus_put_block }; PRIVATE HTStream * HTNewsStatus_new (HTRequest * request, news_info * news, HTHost * host) { HTStream *me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTNewsStatus_new"); me->isa = &HTNewsStatusClass; me->request = request; me->news = news; me->EOLstate = EOL_BEGIN; me->host = host; return me; } /* ------------------------------------------------------------------------- */ /* PROTOCOL FUNCTIONS */ /* ------------------------------------------------------------------------- */ /* ** Set the max number of articles at the same time. ** Default is MAX_NEWS_ARTICLES */ PUBLIC BOOL HTNews_setMaxArticles (int new_max) { if (new_max >= 0) { MaxArt = new_max; return YES; } return NO; } /* ** Get current max number of articles at the same time. */ PUBLIC int HTNews_maxArticles (void) { return MaxArt; } /* HTNewsCleanup ** ------------- ** This function closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE int HTNewsCleanup (HTRequest * req, int status) { HTNet * net = HTRequest_net(req); news_info *news = (news_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(req); /* Free stream with data TO network */ if (!HTRequest_isDestination(req)) HTRequest_removeDestination(req); else if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); HTRequest_setInputStream(req, NULL); } /* Remove the request object and our own context structure for nntp */ HTNet_delete(net, status); if (news) { HT_FREE(news->name); HTChunk_delete(news->cmd); HT_FREE(news); } return YES; } PRIVATE int SendCommand (HTRequest *request, news_info *news, char *token, char *pars) { HTStream * input = HTRequest_inputStream(request); int len = strlen(token) + (pars ? strlen(pars)+1:0) + 2; HTChunk_setSize(news->cmd, len); if (pars && *pars) sprintf(HTChunk_data(news->cmd), "%s %s%c%c", token, pars, CR, LF); else sprintf(HTChunk_data(news->cmd), "%s%c%c", token, CR, LF); HTTRACE(PROT_TRACE, "News Tx..... %s" _ HTChunk_data(news->cmd)); return (*input->isa->put_block)(input, HTChunk_data(news->cmd), len); } /* Load data object from NNTP Server HTLoadNews ** ================================= ** ** Given a hypertext addres, this routine loads a document ** ** On Entry, ** request The request structure ** ** returns HT_ERROR Error has occured or interrupted ** HT_WOULD_BLOCK if operation would have blocked ** HT_LOADED if 200 OK ** HT_NO_DATA if No Response ** HT_RETRY if Service Unavail. */ PRIVATE int NewsEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadNews (SOCKET soc, HTRequest * request) { news_info *news; HTParentAnchor *anchor = HTRequest_anchor(request); HTNet * net = HTRequest_net(request); char * url = HTAnchor_physical(anchor); HTTRACE(PROT_TRACE, "NNTP........ Looking for `%s\'\n" _ url); if ((news = (news_info *) HT_CALLOC(1, sizeof(news_info))) == NULL) HT_OUTOFMEM("HTLoadNews"); news->cmd = HTChunk_new(128); news->state = NEWS_BEGIN; news->net = net; HTNet_setContext(net, news); HTNet_setEventCallback(net, NewsEvent); HTNet_setEventParam(net, news); /* callbacks get http* */ return NewsEvent(soc, news, HTEvent_BEGIN); /* get it started - ops is ignored */ } PRIVATE int NewsEvent (SOCKET soc, void * pVoid, HTEventType type) { news_info *news = (news_info *)pVoid; int status = HT_ERROR; HTNet * net = news->net; HTRequest * request = HTNet_request(net); HTParentAnchor * anchor = HTRequest_anchor(request); char * url = HTAnchor_physical(anchor); HTHost * host = HTNet_host(net); /* ** Initiate a new nntp structure and bind to request structure ** This is actually state NNTP_BEGIN, but it can't be in the state ** machine as we need the structure first. */ if (type == HTEvent_CLOSE) { /* Interrupted */ HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED, NULL, 0, "HTLoadHTTP"); HTNewsCleanup(request, HT_INTERRUPTED); return HT_OK; } else news = (news_info *) HTNet_context(net); /* Get existing copy */ /* Now jump into the machine. We know the state from the previous run */ while (1) { switch (news->state) { case NEWS_BEGIN: news->state = (!strchr(url, '@') && strchr(url, '*')) ? NEWS_SEEK_CACHE : NEWS_NEED_CONNECTION; break; case NEWS_SEEK_CACHE: if (HTNewsCache_before(request, NULL, 0) == HT_LOADED) news->state = NEWS_SUCCESS; else news->state = NEWS_NEED_CONNECTION; break; case NEWS_NEED_CONNECTION: /* Let's set up a connection */ if (!strncasecomp(url, "news:", 5)) { HTUserProfile * up = HTRequest_userProfile(request); char * newshost = HTUserProfile_news(up); StrAllocCopy(news->name, url+5); if (newshost) { char *newshack = NULL; /* Then we can use HTParse :-) */ StrAllocCopy(newshack, "news://"); StrAllocCat(newshack, newshost); status = HTHost_connect(host, net, (char *) newshack); host = HTNet_host(net); HT_FREE(newshack); } else news->state = NEWS_ERROR; } else if (!strncasecomp(url, "nntp:", 5)) { news->name = HTParse(url, "", PARSE_PATH); status = HTHost_connect(host, net, url); host = HTNet_host(net); } else { HTTRACE(PROT_TRACE, "News........ Huh?"); news->state = NEWS_ERROR; } if (status == HT_OK) { BOOL greeting = NO; /* Set up the persistent connection */ if (!HTNet_persistent(net)) { HTNet_setPersistent(net, YES, HT_TP_SINGLE); greeting = YES; } /* ** Check the protocol class to see if we have connected to a ** the right class of server, in this case HTTP. */ { HTHost * host = HTNet_host(net); char * s_class = HTHost_class(host); if (s_class && strcasecomp(s_class, "nntp")) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, NULL, 0, "HTLoadNews"); news->state = NEWS_ERROR; break; } HTHost_setClass(host, "nntp"); } /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ { HTStream * rstream = HTNewsStatus_new(request, news, host); HTNet_setReadStream(net, rstream); HTRequest_setOutputConnected(request, YES); } /* ** Create the stream pipe TO the channel from the application ** and hook it up to the request object */ { HTOutputStream * output = HTNet_getOutput(net, NULL, 0); HTRequest_setInputStream(request, (HTStream *) output); } news->state = greeting ? NEWS_NEED_GREETING : NEWS_NEED_SWITCH; } else if (status == HT_WOULD_BLOCK || status == HT_PENDING) return HT_OK; else news->state = NEWS_ERROR; break; case NEWS_NEED_GREETING: status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_LOADED) { if (news->repcode/100 == 2) news->state = NEWS_NEED_SWITCH; else news->state = NEWS_ERROR; } else news->state = NEWS_ERROR; break; case NEWS_NEED_SWITCH: { HTMethod method = HTRequest_method(request); /* ** Find out what to ask the news server. Syntax of address is ** xxx@yyy Article ** <xxx@yyy> Same article ** xxxxx News group (no "@") */ if (method == METHOD_GET) { if (strchr(url, '@')) { /* ARTICLE */ if (*(news->name) != '<') { /* Add '<' and '>' */ char *newart; if ((newart = (char *) HT_MALLOC(strlen(news->name)+3)) == NULL) HT_OUTOFMEM("HTLoadNews"); sprintf(newart, "<%s>", news->name); HT_FREE(news->name); news->name = newart; } news->state = NEWS_NEED_ARTICLE; } else if (strchr(url, '*')) news->state = NEWS_NEED_LIST; else news->state = NEWS_NEED_GROUP; } else if (method == METHOD_POST) news->state = NEWS_NEED_POST; else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_NOT_IMPLEMENTED,NULL, 0,"HTLoadNews"); news->state = NEWS_ERROR; } HTUnEscape(news->name); HTCleanTelnetString(news->name); } break; case NEWS_NEED_ARTICLE: if (!news->sent) { status = SendCommand(request, news, "ARTICLE", news->name); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_ERROR) news->state = NEWS_ERROR; news->format = WWW_MIME; /* ** Set the default content type to plain text as news servers ** almost never send any useful information about the length ** of the body or the type - the success of MIME! */ HTAnchor_setFormat(anchor, WWW_PLAINTEXT); news->sent = YES; } else { status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_OK) news->state = NEWS_NEED_BODY; else if (status == HT_LOADED) { news->state = (news->repcode/100 == 2) ? NEWS_SUCCESS : NEWS_ERROR; } else news->state = NEWS_ERROR; news->sent = NO; } break; #if HT_LISTGROUP case NEWS_NEED_LGRP: if (!news->sent) { status = SendCommand(request, news, "LIST", "NEWSGROUPS"); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_ERROR) news->state = NEWS_ERROR; news->format = WWW_NNTP_LIST; news->sent = YES; } else { status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_OK) news->state = NEWS_NEED_BODY; else if (status == HT_LOADED) { news->state = (news->repcode/100 == 2) ? NEWS_SUCCESS : NEWS_NEED_LIST; } else news->state = NEWS_ERROR; news->sent = NO; } break; #endif /* HT_LISTGROUP */ case NEWS_NEED_LIST: if (!news->sent) { status = SendCommand(request, news, "LIST", NULL); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_ERROR) news->state = NEWS_ERROR; news->format = WWW_NNTP_LIST; news->sent = YES; } else { status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_OK) news->state = NEWS_NEED_BODY; else if (status == HT_LOADED) { news->state = (news->repcode/100 == 2) ? NEWS_SUCCESS : NEWS_ERROR; } else news->state = NEWS_ERROR; news->sent = NO; } break; case NEWS_NEED_GROUP: if (!news->sent) { status = SendCommand(request, news, "GROUP", news->name); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_ERROR) news->state = NEWS_ERROR; news->sent = YES; } else { status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_LOADED) { if (news->repcode/100 == 2) { if (sscanf(news->reply, "%d%d%d", &news->total, &news->first, &news->last) == 3) { if (MaxArt && news->total>MaxArt) news->last = news->first-MaxArt; news->current = news->first; /* If no content in this group */ if (news->first == news->last) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_NO_CONTENT, NULL, 0, "HTLoadNews"); news->state = NEWS_NO_DATA; break; } news->state = NEWS_NEED_XOVER; } else news->state = NEWS_ERROR; } else news->state = NEWS_ERROR; } else news->state = NEWS_ERROR; news->sent = NO; } break; case NEWS_NEED_XOVER: if (!news->sent) { char buf[20]; sprintf(buf, "%d-%d", news->first, news->last); status = SendCommand(request, news, "XOVER", buf); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_ERROR) news->state = NEWS_ERROR; news->format = WWW_NNTP_OVER; news->sent = YES; } else { status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_OK) news->state = NEWS_NEED_BODY; else if (status == HT_LOADED) { if (news->repcode/100 == 2) news->state = NEWS_SUCCESS; else { news->format = WWW_NNTP_HEAD; news->state = NEWS_NEED_HEAD; } } else news->state = NEWS_ERROR; news->sent = NO; } break; case NEWS_NEED_HEAD: if (!news->sent) { char buf[10]; sprintf(buf, "%d", news->current++); status = SendCommand(request, news, "HEAD", buf); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_ERROR) news->state = NEWS_ERROR; news->sent = YES; } else { status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_LOADED) { if (news->repcode/100 == 2) { if (news->current > news->last) news->state = NEWS_SUCCESS; } else news->state = NEWS_ERROR; } else news->state = NEWS_ERROR; news->sent = NO; } break; case NEWS_NEED_POST: { HTStream * oldinput = HTRequest_inputStream(request); HTStream * newinput = HTNewsPost_new(request, HTBuffer_new(oldinput, request,512)); HTRequest_setInputStream(request, newinput); /* Remember to convert to CRLF */ } news->state = NEWS_NEED_BODY; break; case NEWS_NEED_BODY: if (type == HTEvent_WRITE || type == HTEvent_BEGIN) { if (HTRequest_isDestination(request)) { HTRequest * source = HTRequest_source(request); HTNet * srcnet = HTRequest_net(source); if (srcnet) { HTHost_register(HTNet_host(srcnet), srcnet, HTEvent_READ); HTHost_unregister(HTNet_host(srcnet), srcnet, HTEvent_WRITE); } return HT_OK; } /* ** Should we use the input stream directly or call the post ** callback function to send data down to the network? */ { HTStream * input = HTRequest_inputStream(request); HTPostCallback * pcbf = HTRequest_postCallback(request); if (pcbf) { status = pcbf(request, input); if (status == HT_PAUSE || status == HT_LOADED) type = HTEvent_READ; } else { status = (*input->isa->flush)(input); type = HTEvent_READ; } if (status == HT_WOULD_BLOCK) return HT_OK; } status = request->PostCallback ? request->PostCallback(request, request->input_stream) : (*request->input_stream->isa->flush)(request->input_stream); if (status == HT_WOULD_BLOCK) return HT_OK; else type = HTEvent_READ; /* Trick to ensure that we do READ */ } else if (type == HTEvent_READ) { status = HTHost_read(HTNet_host(net), net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_LOADED) news->state = NEWS_SUCCESS; else news->state = NEWS_ERROR; } else { news->state = NEWS_ERROR; } break; case NEWS_SUCCESS: HTNewsCleanup(request, HT_LOADED); return HT_OK; break; case NEWS_NO_DATA: HTNewsCleanup(request, HT_NO_DATA); return HT_OK; break; case NEWS_ERROR: HTNewsCleanup(request, HT_NOT_FOUND); return HT_OK; break; } } /* End of while(1) */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNews.html����������������������������������������������������������������������0100644�0000764�0000144�00000002716�06526451254�016021� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 18-May-1996 --> <TITLE>W3C Sample Code Library libwww NNTP State Machine</TITLE> </HEAD> <BODY> <H1> NNTP State Machine </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the News/NNTP client module that handles all communication with News/NNTP-servers. <P> This module is implemented by <A HREF="HTNews.c">HTNews.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTNEWS_H #define HTNEWS_H #include "HTProt.h" </PRE> <P> We define the max NNTP line as rather long as the result coming from a <CODE>XOVER</CODE> command needs it. If the line is longer then it is chopped, but we will almost have received the information we're looking for. <PRE> #ifndef NEWS_PORT #define NEWS_PORT 119 /* See rfc977 */ #endif #define MAX_NEWS_LINE 4096 extern HTProtCallback HTLoadNews; </PRE> <H3> Setting Number of Articles to Show </H3> <P> You can set the number of news articles to be shown at a time. If you set the number to none (<CODE>0</CODE>) then <EM>all</EM> articles are shown at once. This is also the default behavior. <PRE>extern BOOL HTNews_setMaxArticles (int new_max); extern int HTNews_maxArticles (void); </PRE> <PRE> #endif /* HTNEWS_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTNews.html,v 2.29 2025/05/14 02:10:52 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������libwww/Library/src/HTNewsLs.c�����������������������������������������������������������������������0100644�0000764�0000144�00000030114�06664352703�015571� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTNewsLs.c ** NEWS (NNTP) GROUP LISTINGS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTNewsLs.c,v 2.18 2025/02/22 22:10:11 frystyk Exp $ ** ** Authors ** FTLO Felix Lo ** HFN Henrik Frystyk <frystyk@w3.org> ** MP Maciej Puzio <puzio@zodiac1.mimuw.edu.pl> ** ** History: ** Oct 95 HFN Written ** Mar 96 MP Modified */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTUTree.h" #include "HTNDir.h" #include "HTNews.h" #include "HTNewsLs.h" /* Implemented here */ #define DELIMITER '\t' #define ATSIGN '@' #define NEWS_TREE "w3c-news" struct _HTStream { const HTStreamClass * isa; HTRequest * request; HTEOLState state; HTNewsDir * dir; BOOL group; BOOL junk; char buffer[MAX_NEWS_LINE+1]; int buflen; }; typedef struct _HTNewsCache { char * host; HTArray * cache; } HTNewsCache; PRIVATE HTNewsDirKey dir_key = HT_NDK_REFTHREAD; PRIVATE HTNewsDirKey list_key = HT_NDK_GROUP; /* Added by MP. */ /* ------------------------------------------------------------------------- */ /* Helper function added by MP. */ PRIVATE char* GetNewsGroupTitle (HTRequest* request) { char * url = HTAnchor_physical(HTRequest_anchor(request)); char * title = NULL; if (strrchr(url, '*')) StrAllocCopy(title, "Newsgroups: "); else StrAllocCopy(title, "Newsgroup: "); if (!strncasecomp(url, "news:", 5)) StrAllocCat(title, url+5); else StrAllocCat(title, HTParse(url, "", PARSE_PATH)); return title; } PRIVATE BOOL ParseList (HTNewsDir * dir, char * line) { char *ptr = line; while (*ptr && !isspace((int) *ptr)) ptr++; *ptr = '\0'; /* Changed by MP */ return (HTNewsDir_addGroupElement(dir, line, NO) != NULL); } /* ParseGroup ** ---------- ** Extract the index number, subject etc, from a XOVER command. Expects ** the following format of the line: ** ** <index> <subject> <from> <data> <msgid> [*<thread>] ... ** ** Returns YES if OK, NO on error */ PRIVATE BOOL ParseGroup (HTRequest * request, HTNewsDir *dir, char * line) { int index; int refcnt=0; time_t t=0; char *subject = line; char *from; char *date; char *msgid; char *ptr=NULL; HTList* reflist = NULL; /* Added by MP. */ while (*subject && *subject != DELIMITER) subject++; *subject++ = '\0'; /* Index */ index = atoi(line); from = subject; while (*from && *from != DELIMITER) from++; *from++ = '\0'; /* Subject */ date = from; while (*date && *date != DELIMITER) { if (*date=='<' || *date=='(') { ptr = date+1; *date = '\0'; } if (*date=='>' || *date==')') *date = '\0'; date++; } *date++ = '\0'; if (strchr(from, ATSIGN) && ptr) from = ptr; /* From */ msgid = date; while (*msgid && *msgid != DELIMITER) msgid++; *msgid++ = '\0'; /* Date */ if (*msgid=='<') msgid++; t = HTParseTime(date, HTRequest_userProfile(request), YES); ptr = msgid; while (*ptr && *ptr != DELIMITER) { if (*ptr=='>') *ptr = '\0'; ptr++; } *ptr++ = '\0'; /* MsgId */ while (ptr && *ptr && !isdigit((int) *ptr)) { char* refstart = ptr; /* Added by MP. */ char* refcopy = NULL; char* refstop; while (*ptr && *ptr != DELIMITER && *ptr != ' ') ptr++; refstop = ptr - 1; *ptr++ = '\0'; if (strlen(refstart) > 0) /* Added by MP. */ { refcnt++; if (*refstart == '<') refstart++; if (*refstop == '>') *refstop = '\0'; if (reflist == NULL) reflist = HTList_new(); StrAllocCopy (refcopy, refstart); HTList_addObject (reflist, (void*) refcopy); } } /* Changed by MP. */ return (HTNewsDir_addElement(dir, index, subject, from, t, msgid, refcnt, reflist) != NULL); } /* ------------------------------------------------------------------------- */ /* NEWS CACHE */ /* ------------------------------------------------------------------------- */ PRIVATE HTNewsCache * HTNewsCache_new (const char * newshost, HTArray * array) { if (newshost && array) { HTNewsCache * me; if ((me = (HTNewsCache *) HT_CALLOC(1, sizeof(HTNewsCache))) == NULL) HT_OUTOFMEM("HTNewsCache_new"); StrAllocCopy(me->host, newshost); me->cache = array; return me; } return NULL; } /* ** Instead of just deleting we could save it to file. */ PRIVATE int HTNewsCache_delete (void * context) { HTNewsCache * me = (HTNewsCache *) context; if (me) { if (me->cache) { void ** data; char * line = (char *) HTArray_firstObject(me->cache, data); while (line) { HT_FREE(line); line = (char *) HTArray_nextObject(me->cache, data); } HTArray_delete(me->cache); } HT_FREE(me->host); HTTRACE(PROT_TRACE, "News Cache.. Deleted cache %p\n" _ me); HT_FREE(me); return YES; } return NO; } /* ** Look for cached information for this news server ** We store the information in a URL Tree so that we can have multiple ** servers stored simultanously */ PRIVATE HTNewsCache * HTNewsCache_find (HTRequest * request, const char * url) { HTUTree * tree = NULL; if (request && url) { char * newshost = NULL; HTNewsCache * element = NULL; if (!strncasecomp(url, "news:", 5)) { HTUserProfile * up = HTRequest_userProfile(request); StrAllocCopy(newshost, HTUserProfile_news(up)); } else if (!strncasecomp(url, "nntp:", 5)) { newshost = HTParse(url, "", PARSE_HOST); } /* If we have a news server then continue to find a URL tree */ if (newshost) { char * colon = strchr(newshost, ':'); int port = NEWS_PORT; if (colon ) { *(colon++) = '\0'; /* Chop off port number */ port = atoi(colon); } tree = HTUTree_find(NEWS_TREE, newshost, port); HT_FREE(newshost); if (!tree) { HTTRACE(PROT_TRACE, "News Cache.. No information for `%s\'\n" _ url); return NULL; } /* Find a cache element (if any) */ element = (HTNewsCache *) HTUTree_findNode(tree, "", "/"); return element; } } return NULL; } PRIVATE BOOL HTNewsCache_update (HTRequest * request, const char * url, HTArray * array) { HTUTree * tree = NULL; if (request && url) { char * newshost = NULL; if (!strncasecomp(url, "news:", 5)) { HTUserProfile * up = HTRequest_userProfile(request); StrAllocCopy(newshost, HTUserProfile_news(up)); } else if (!strncasecomp(url, "nntp:", 5)) { newshost = HTParse(url, "", PARSE_HOST); } /* ** If the news server was found then update the data entry. Otherwise ** create a new entry */ if (newshost) { char * colon = strchr(newshost, ':'); int port = NEWS_PORT; if (colon ) { *(colon++) = '\0'; /* Chop off port number */ port = atoi(colon); } tree = HTUTree_new(NEWS_TREE, newshost, port, HTNewsCache_delete); HT_FREE(newshost); if (!tree) { HTTRACE(PROT_TRACE, "News Cache.. Can't create tree\n"); return NO; } /* Add new cache information to the tree */ { HTNewsCache * element = NULL; BOOL status; if ((element=(HTNewsCache *) HTUTree_findNode(tree, "", "/"))){ element->cache = array; status = YES; } else { element = HTNewsCache_new(url, array); status = HTUTree_addNode(tree, "", "/", element); } return status; } } } return NO; } /* ** Before filter: Check whether we have a cache entry for this host */ PUBLIC int HTNewsCache_before (HTRequest * request, void * context, int mode) { char * url = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); HTNewsCache * element = HTNewsCache_find(request, url); HT_FREE(url); /* ** If we have found a cache object then create a new dir obejct and fill ** it with data from the cache */ if (element) { char * title = GetNewsGroupTitle(request); HTNewsDir * dir = HTNewsDir_new(request, title, list_key, NO); void ** data; char * line = (char *) HTArray_firstObject(element->cache, data); while (line) { HTNewsDir_addGroupElement(dir, line, NO); line = (char *) HTArray_nextObject(element->cache, data); } /* ** After filling the new dir object we write it out and free it again */ HTNewsDir_free(dir); HT_FREE(title); return HT_LOADED; } return HT_OK; } /* ** After filter: Update the cache entry for this host */ PUBLIC int HTNewsCache_after (HTRequest * request, HTResponse * response, void * context, int status) { HTArray * array = (HTArray *) context; HTTRACE(PROT_TRACE, "News Cache.. AFTER filter\n"); if (request && array) { char * url = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); HTNewsCache_update(request, url, array); HT_FREE(url); } return HT_OK; } /* ------------------------------------------------------------------------- */ /* ** Searches for News line until buffer fills up or a CRLF or LF is found */ PRIVATE int HTNewsList_put_block (HTStream * me, const char * b, int l) { while (l-- > 0) { if (me->state == EOL_FCR) { if (*b == LF && me->buflen) { if (!me->junk) { *(me->buffer+me->buflen) = '\0'; me->group ? ParseGroup(me->request, me->dir, me->buffer) : ParseList(me->dir, me->buffer); } else me->junk = NO; /* back to normal */ } me->buflen = 0; me->state = EOL_BEGIN; } else if (*b == CR) { me->state = EOL_FCR; } else if (*b == LF && me->buflen) { if (!me->junk) { *(me->buffer+me->buflen) = '\0'; me->group ? ParseGroup(me->request, me->dir, me->buffer) : ParseList(me->dir, me->buffer); } else me->junk = NO; /* back to normal */ me->buflen = 0; me->state = EOL_BEGIN; } else { *(me->buffer+me->buflen++) = *b; if (me->buflen >= MAX_NEWS_LINE) { HTTRACE(PROT_TRACE, "News Dir.... Line too long - chopped\n"); *(me->buffer+me->buflen) = '\0'; me->group ? ParseGroup(me->request, me->dir, me->buffer) : ParseList(me->dir, me->buffer); me->buflen = 0; me->junk = YES; } } b++; } return HT_OK; } PRIVATE int HTNewsList_put_character (HTStream * me, char ch) { return HTNewsList_put_block(me, &ch, 1); } PRIVATE int HTNewsList_put_string (HTStream * me, const char * s) { return HTNewsList_put_block(me, s, (int) strlen(s)); } PRIVATE int HTNewsList_flush (HTStream * me) { return HT_OK; } PRIVATE int HTNewsList_free (HTStream * me) { HTNewsList_put_character (me, '\n'); /* to flush the last item; added by MP. */ HTNewsDir_free(me->dir); HT_FREE(me); return HT_OK; } PRIVATE int HTNewsList_abort (HTStream * me, HTList * e) { HTTRACE(PROT_TRACE, "News Dir.... ABORTING...\n"); HTNewsList_free(me); return HT_ERROR; } PRIVATE const HTStreamClass HTNewsListClass = { "NewsList", HTNewsList_flush, HTNewsList_free, HTNewsList_abort, HTNewsList_put_character, HTNewsList_put_string, HTNewsList_put_block }; PUBLIC HTStream *HTNewsList (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream *me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTNewsList_new"); me->isa = &HTNewsListClass; me->request = request; me->state = EOL_BEGIN; { char * title = GetNewsGroupTitle(request); me->dir = HTNewsDir_new(request, title, list_key,YES); HT_FREE(title); } /* Modified by MP. */ if (me->dir == NULL) HT_FREE(me); return me; } PUBLIC HTStream *HTNewsGroup (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTNewsList_new"); me->isa = &HTNewsListClass; me->request = request; me->state = EOL_BEGIN; me->group = YES; { char * title = GetNewsGroupTitle(request); me->dir = HTNewsDir_new(request, title, dir_key, YES); HT_FREE(title); } /* Modified by MP. */ if (me->dir == NULL) HT_FREE(me); return me; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNewsLs.html��������������������������������������������������������������������0100644�0000764�0000144�00000002051�06526451255�016311� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> <TITLE>W3C Sample Code Library libwww News/NNTP Listings</TITLE> </HEAD> <BODY> <H1> News/NNTP Article and Group Listings </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module converts a <A HREF="HTNdir.html">generic News group</A> listing to a HTML object <P> This module is implemented by <A HREF="HTFTPDir.c">HTFTPDir.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTNEWSLS_H #define HTNEWSLS_H #include "HTStream.h" #include "HTFormat.h" #include "HTNet.h" extern HTConverter HTNewsList, HTNewsGroup; </PRE> <H3> Newsgroup List Cache </H3> <P> The news list cache uses a URL tree to store the information <PRE> HTNetBefore HTNewsCache_before; HTNetAfter HTNewsCache_after; </PRE> <PRE> #endif /* HTNEWSLS_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTNewsLs.html,v 2.7 2025/05/14 02:10:53 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNewsRq.c�����������������������������������������������������������������������0100644�0000764�0000144�00000012013�06664352703�015573� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTNewsRq.c ** NNTP MESSAGE GENERATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTNewsRq.c,v 2.14 2025/02/22 22:10:11 frystyk Exp $ ** ** This module implements the output stream for MIME used for sending ** requests with or without a entity body to HTTP, NEWS, etc. ** ** History: ** Jan 95 HFN Written */ /* Library Includes */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTReqMan.h" #include "HTMIMERq.h" #include "HTNewsRq.h" /* Implements */ #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) struct _HTStream { const HTStreamClass * isa; HTStream * target; HTRequest * request; SOCKET sockfd; HTChunk * buffer; int version; BOOL transparent; }; /* ------------------------------------------------------------------------- */ /* News Output Post Stream */ /* ------------------------------------------------------------------------- */ /* NewsPost_start ** -------------- ** NNTP needs two extra headers: "From" and "Newsgroups". ** Take the newsgroups from the Postweb model as destinations for this ** anchor. ** Return YES if OK else NO */ PRIVATE BOOL NewsPost_start (HTStream * me, HTRequest * request) { char linebuf[128]; /* @@@ */ HTChunk *header = me->buffer; HTUserProfile * up = HTRequest_userProfile(request); const char * mailaddress = HTUserProfile_email(up); if (mailaddress) { sprintf(linebuf, "From: %s%c%c", mailaddress, CR, LF); HTChunk_puts(header, linebuf); } /* ** Find all the newsgroups we are posting to by looking at all the ** destinations from the source of this request. ** First the main link and then the sub links */ HTChunk_puts(header, "Newsgroups :"); if (HTRequest_isDestination(request)) { HTRequest *src_req = HTRequest_source(request); HTParentAnchor *src_anchor = HTRequest_anchor(src_req); HTLink *link = HTAnchor_mainLink((HTAnchor *) src_anchor); HTAnchor *dest = HTLink_destination(link); HTMethod method = HTLink_method(link); if (link && method == METHOD_POST && HTLink_result(link) == HT_LINK_NONE) { char *desturl = HTAnchor_physical((HTParentAnchor *) dest); char *access = HTParse(desturl, "", PARSE_ACCESS); if (!strcasecomp(access, "news") || !strcasecomp(access, "nntp")) { char *newsgroup = HTParse(desturl, "", PARSE_PATH); HTUnEscape(newsgroup); HTCleanTelnetString(newsgroup); HTChunk_puts(header, newsgroup); HT_FREE(newsgroup); } HT_FREE(access); } /* DO FOR ALL SUB ANCHOR DESTINATION S AS WELL */ } HTTRACE(PROT_TRACE, "News Tx..... %s" _ HTChunk_data(header)); return YES; } /* NewsPost_end ** ------------ ** End the posting by CRLF.CRLF ** returns whatever PUT_BLOCK returns */ PRIVATE int NewsPost_end (HTStream * me) { char buf[6]; *buf = CR; *(buf+1) = LF; *(buf+2) = '.'; *(buf+3) = CR; *(buf+4) = LF; *(buf+5) = '\0'; return PUTBLOCK(buf, 5); } PRIVATE int NewsPost_put_block (HTStream * me, const char* b, int l) { if (!me->target) { return HT_WOULD_BLOCK; } else if (me->transparent) return b ? PUTBLOCK(b, l) : HT_OK; else { int status; NewsPost_start(me, me->request); if ((status = PUTBLOCK(HTChunk_data(me->buffer), HTChunk_size(me->buffer))) == HT_OK) { me->transparent = YES; return b ? PUTBLOCK(b, l) : HT_OK; } return status; } } PRIVATE int NewsPost_put_character (HTStream * me, char c) { return NewsPost_put_block(me, &c, 1); } PRIVATE int NewsPost_put_string (HTStream * me, const char * s) { return NewsPost_put_block(me, s, strlen(s)); } /* ** Flushes header but doesn't free stream object */ PRIVATE int NewsPost_flush (HTStream * me) { return NewsPost_put_block(me, NULL, 0); } /* ** Flushes data and frees stream object */ PRIVATE int NewsPost_free (HTStream * me) { int status; if ((status = NewsPost_flush(me)) != HT_OK || (status = NewsPost_end(me)) != HT_OK || (status = (*me->target->isa->_free)(me->target)) != HT_OK) return status; HTChunk_delete(me->buffer); HT_FREE(me); return status; } PRIVATE int NewsPost_abort (HTStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target, e); HTChunk_delete(me->buffer); HT_FREE(me); HTTRACE(PROT_TRACE, "NewsPost.... ABORTING...\n"); return HT_ERROR; } /* NewsPost Stream ** ----------------- */ PRIVATE const HTStreamClass NewsPostClass = { "NewsPost", NewsPost_flush, NewsPost_free, NewsPost_abort, NewsPost_put_character, NewsPost_put_string, NewsPost_put_block }; PUBLIC HTStream * HTNewsPost_new (HTRequest * request, HTStream * target) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("NewsPost_new"); me->isa = &NewsPostClass; me->target = target; me->request = request; me->buffer = HTChunk_new(256); me->transparent = NO; return HTMIMERequest_new(request, me, YES); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNewsRq.html��������������������������������������������������������������������0100644�0000764�0000144�00000001745�06526451255�016326� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww NNTP REQUEST STREAM</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>NNTP Request Stream</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> The NNTP Request stream generates a NNTP request header and writes it to the target which is normally a HTWriter stream.<P> This module is implemented by <A HREF="HTNewsRq.c">HTNewsRq.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTNEWSREQ_H #define HTNEWSREQ_H #include "HTStream.h" #include "HTAccess.h" </PRE> <H3>Streams Definition</H3> This stream makes a HTNews request header before it goes into transparent mode. <PRE> extern HTStream * HTNewsPost_new (HTRequest * request, HTStream * target); #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTNewsRq.html,v 2.5 2025/05/14 02:10:53 frystyk Exp $ </ADDRESS> </BODY> </HTML> ���������������������������libwww/Library/src/HTNoFree.c�����������������������������������������������������������������������0100644�0000764�0000144�00000003466�06655372507�015552� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** NO FREE STREAM ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTNoFree.c,v 2.1 2025/02/01 18:41:11 frystyk Exp $ ** ** This stream is a throughline for all methods except FREE and ABORT ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTStream.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; HTStream * target; }; /* ------------------------------------------------------------------------- */ PRIVATE int HTNoFreeStream_put_character (HTStream * me, char c) { return (*me->target->isa->put_character)(me->target, c); } PRIVATE int HTNoFreeStream_put_string (HTStream * me, const char * s) { return (*me->target->isa->put_string)(me->target, s); } PRIVATE int HTNoFreeStream_write (HTStream * me, const char * s, int l) { return (*me->target->isa->put_block)(me->target, s, l); } PRIVATE int HTNoFreeStream_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int HTNoFreeStream_free (HTStream * me) { return HT_OK; } PRIVATE int HTNoFreeStream_abort (HTStream * me, HTList * e) { return HT_ERROR; } PRIVATE const HTStreamClass HTNoFreeStreamClass = { "NoFreeStream", HTNoFreeStream_flush, HTNoFreeStream_free, HTNoFreeStream_abort, HTNoFreeStream_put_character, HTNoFreeStream_put_string, HTNoFreeStream_write }; PUBLIC HTStream * HTNoFreeStream_new (HTStream * target) { if (target) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTNoFree"); me->isa = &HTNoFreeStreamClass; me->target = target; return me; } return HTErrorStream(); } PUBLIC int HTNoFreeStream_delete (HTStream * me) { if (me) HT_FREE(me); return HT_OK; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNoFree.html��������������������������������������������������������������������0100644�0000764�0000144�00000001754�06655372507�016272� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww No Free Stream</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 31-May-1996 --> </HEAD> <BODY> <H1>No Free Stream</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This stream is a throughline for all methods except FREE and ABORT. This means that it can be use to put ahead of streams that you don't want to be freed or aborted until you are redy to do it yourself. <P> This module is implemented by <A HREF="HTnoFree.c">HTNoFree.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef _HTNOFREE_H #define _HTNOFREE_H #include "<A HREF="HTStream.html">HTStream.h</A>" extern HTStream * HTNoFreeStream_new (HTStream * target); extern int HTNoFreeStream_delete (HTStream * me); #endif /* HTNOFREE_H */ </PRE> <HR> <ADDRESS> @(#) $Id: HTNoFree.html,v 2.1 2025/02/01 18:41:11 frystyk Exp $ </ADDRESS> </BODY> </HTML> ��������������������libwww/Library/src/HTPEP.c��������������������������������������������������������������������������0100644�0000764�0000144�00000023753�06664352703�015015� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** PEP ENGINE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTPEP.c,v 2.7 2025/02/22 22:10:11 frystyk Exp $ ** ** ** AUTHORS: ** HFN Henrik Frystyk ** ** HISTORY: ** July 96 HFN Written first version */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTPEP.h" /* Implemented here */ #define PEP_NAME "w3c-pep" /* Name of the PEP tree */ #define DEFAULT_PORT 80 /* Concentrate on HTTP */ struct _HTPEPModule { char * name; HTNetBefore * before; HTNetAfter * after; HTUTree_gc * gc; }; typedef struct _HTPEPElement { char * name; void * context; } HTPEPElement; PRIVATE HTList ** HTModules; /* List of registered PEP modules */ /* ------------------------------------------------------------------------- */ /* PEP MODULE MANAGEMENT */ /* ------------------------------------------------------------------------- */ PRIVATE BOOL delete_module (HTPEPModule * module) { if (module) { HT_FREE(module->name); HT_FREE(module); return YES; } return NO; } /* ** Case sensitive search for module */ PRIVATE HTPEPModule * find_module (const char * name, HTList ** hashlist) { HTPEPModule * pres = NULL; *hashlist = NULL; if (!name) { HTTRACE(APP_TRACE, "PEP Engine.. Bad argument\n"); return NULL; } /* Find a hash for this PEP module */ { int hash; const unsigned char * p; for (p=name, hash=0; *p; p++) { hash = (hash * 3 + *p) % HT_M_HASH_SIZE; } if (!HTModules) { if ((HTModules = (HTList **) HT_CALLOC(HT_M_HASH_SIZE, sizeof(HTList *))) == NULL) HT_OUTOFMEM("find_module"); } if (!HTModules[hash]) HTModules[hash] = *hashlist = HTList_new(); else *hashlist = HTModules[hash]; } /* Search the existing list to see if we already have this entry */ { HTList * cur = *hashlist; while ((pres = (HTPEPModule *) HTList_nextObject(cur))) { if (!strcmp(pres->name, name)) return pres; } } return NULL; } PUBLIC HTPEPModule * HTPEP_newModule (const char * name, HTNetBefore * before, HTNetAfter * after, HTUTree_gc * gc) { if (name) { HTList * hashlist = NULL; HTPEPModule * pres = find_module(name, &hashlist); /* If found then update entry - else create a new one */ if (!pres) { if (!(pres = (HTPEPModule *) HT_CALLOC(1, sizeof(HTPEPModule)))) HT_OUTOFMEM("HTPEP_newModule"); StrAllocCopy(pres->name, name); pres->before = before; pres->after = after; pres->gc = gc; /* Add the new PEP Module to the hash table */ HTList_addObject(hashlist, (void *) pres); HTTRACE(APP_TRACE, "PEP Engine.. Created module %p\n" _ pres); } else { HTTRACE(APP_TRACE, "PEP Engine.. Found module %p\n" _ pres); } return pres; } else { HTTRACE(APP_TRACE, "PEP Engine.. Bad argument\n"); return NULL; } } PUBLIC HTPEPModule * HTPEP_findModule (const char * name) { if (name) { HTList * hashlist = NULL; HTPEPModule * pres = find_module(name, &hashlist); HTTRACE(APP_TRACE, "PEP Engine.. did %sfind %s\n" _ pres ? "" : "NOT " _ name); return pres; } else { HTTRACE(APP_TRACE, "PEP Engine.. Bad augument\n"); } return NULL; } PUBLIC BOOL HTPEP_deleteModule (const char * name) { if (name) { HTList * hashlist = NULL; HTPEPModule * pres = find_module(name, &hashlist); if (pres) { HTList_removeObject(hashlist, pres); HTTRACE(APP_TRACE, "PEP Engine.. deleted %p\n" _ pres); delete_module(pres); return YES; } } return NO; } PUBLIC BOOL HTPEP_deleteAllModules (void) { if (HTModules) { int cnt; HTList * cur; for (cnt=0; cnt<HT_M_HASH_SIZE; cnt++) { if ((cur = HTModules[cnt])) { HTPEPModule * pres; while ((pres = (HTPEPModule *) HTList_nextObject(cur))) delete_module(pres); } HTList_delete(HTModules[cnt]); } HT_FREE(HTModules); return YES; } return NO; } /* ------------------------------------------------------------------------- */ /* HANDLE THE PEP URL TREE */ /* ------------------------------------------------------------------------- */ /* ** A PEP element is a particular PEP procotol associated with a ** particular point in the URL tree. The name is the name of the ** protocol known to be able to handle this context. This protocol ** must have been registered as a PEP module. */ PRIVATE HTPEPElement * HTPEP_newElement (const char * name, void * context) { if (name) { HTPEPElement * me; if ((me = (HTPEPElement *) HT_CALLOC(1, sizeof(HTPEPElement))) == NULL) HT_OUTOFMEM("HTPEPElement_new"); StrAllocCopy(me->name, name); me->context = context; HTTRACE(APP_TRACE, "PEP Engine.. Created element %p\n" _ me); return me; } return NULL; } PRIVATE BOOL HTPEP_deleteElement (HTPEPElement * me) { if (me) { HTTRACE(APP_TRACE, "PEP Engine.. Deleted element %p\n" _ me); HT_FREE(me->name); HT_FREE(me); return YES; } return NO; } /* ** A PEP list is a list of PEP elements and the "thing" we store in the ** PEP URL Tree */ PRIVATE HTList * HTPEP_newList (void) { HTList * me = HTList_new(); HTTRACE(APP_TRACE, "PEP Engine.. Created list %p\n" _ me); return me; } PRIVATE int HTPEP_deleteList (void * context) { HTList * list = (HTList *) context; if (list) { HTPEPElement * pres; while ((pres = (HTPEPElement *) HTList_nextObject(list))) HTPEP_deleteElement(pres); HTTRACE(APP_TRACE, "PEP Engine.. Deleted list %p\n" _ list); HTList_delete(list); return YES; } return NO; } /* ** Find a PEP List ** --------------- ** Seaches the set PEP tree for a match. We do the following: ** ** 1) Find the PEP tree for this host ** 2) See if there is a realm match ** 3) See if there is a template match for URL ** ** Return the node found else NULL which means that we don't have any ** authentication information to hook on to this request or response */ PRIVATE HTList * HTPEP_findList (const char * realm, const char * url) { HTUTree * tree; if (!url) { HTTRACE(APP_TRACE, "PEP Engine.. Bad argument\n"); return NULL; } HTTRACE(APP_TRACE, "PEP Engine.. Looking for info on `%s'\n" _ url); /* Find a URLTree for this URL (if any) */ { char * host = HTParse(url, "", PARSE_HOST); char * colon = strchr(host, ':'); int port = DEFAULT_PORT; if (colon ) { *(colon++) = '\0'; /* Chop off port number */ port = atoi(colon); } tree = HTUTree_find(PEP_NAME, host, port); HT_FREE(host); if (!tree) { HTTRACE(APP_TRACE, "PEP Engine.. No information\n"); return NULL; } } /* Find a matchind PEP element (if any)) */ { char * path = HTParse(url, "", PARSE_PATH); HTList * list = (HTList *) HTUTree_findNode(tree, realm, path); HT_FREE(path); return list; } return NULL; /* No match */ } /* Add a PEP element to the URL tree ** --------------------------------- ** Add a protocol context to the PEP tree */ PUBLIC BOOL HTPEP_addNode (const char * protocol, const char * realm, const char * url, void * context) { HTUTree * tree = NULL; HTPEPModule * module = NULL; if (!protocol || !url) { HTTRACE(APP_TRACE, "PEP Engine.. Bad argument\n"); return NO; } HTTRACE(APP_TRACE, "PEP Engine.. Adding info for `%s'\n" _ url); /* Find the PEP module with this name */ if ((module = HTPEP_findModule(protocol)) == NULL) { HTTRACE(APP_TRACE, "PEP Engine.. Module `%s\' not registered\n" _ protocol ? protocol : "<null>"); return NO; } /* Find an existing PEP tree or create a new one */ { char * host = HTParse(url, "", PARSE_HOST); char * colon = strchr(host, ':'); int port = DEFAULT_PORT; if (colon ) { *(colon++) = '\0'; /* Chop off port number */ port = atoi(colon); } tree = HTUTree_new(PEP_NAME, host, port, HTPEP_deleteList); HT_FREE(host); if (!tree) { HTTRACE(APP_TRACE, "PEP Engine.. Can't create tree\n"); return NO; } } /* Find a matching PEP element or create a new one */ { char * path = HTParse(url, "", PARSE_PATH); HTList * list = NULL; HTPEPElement * element = HTPEP_newElement(protocol, context); /* ** If existing list not found then create a new list and add it ** to the tree */ if ((list = (HTList *) HTUTree_findNode(tree, realm, path)) == NULL) { list = HTPEP_newList(); HTUTree_addNode(tree, realm, path, list); } HT_FREE(path); /* Now add the new element */ return HTList_addObject(list, element); } } /* ------------------------------------------------------------------------- */ /* PEP ENGINE */ /* ------------------------------------------------------------------------- */ /* HTPEP_beforeFilter ** ------------------ ** Return YES or whatever callback returns */ PUBLIC int HTPEP_beforeFilter (HTRequest * request, void * param, int mode) { int ret = HT_OK; char * url = HTAnchor_physical(HTRequest_anchor(request)); const char * realm = HTRequest_realm(request); HTList * list = HTPEP_findList(realm, url); if (list) { HTPEPElement * pres; HTTRACE(APP_TRACE, "PEP Engine.. Calling BEFORE protocols %p\n" _ list); while ((pres = (HTPEPElement *) HTList_nextObject(list))) { HTPEPModule * module = HTPEP_findModule(pres->name); if (module) { ret = (*module->before)(request, pres->context, mode); if (ret != HT_OK) break; } } } return HT_OK; } /* HTPEP_afterFilter ** ----------------- ** Return YES or whatever callback returns */ PUBLIC int HTPEP_afterFilter (HTRequest * request, HTResponse * response, void * param, int status) { int ret = HT_OK; HTAssocList * protocols = HTResponse_protocol(response); if (protocols) { HTPEPElement * pres; HTTRACE(APP_TRACE, "PEP Engine.. Calling AFTER protocols %p\n" _ protocols); while ((pres = (HTPEPElement *) HTList_nextObject(protocols))) { HTPEPModule * module = HTPEP_findModule(pres->name); if (module) { ret = (*module->after)(request, response, pres->context, status); if (ret != HT_OK) break; } } } return HT_OK; } ���������������������libwww/Library/src/HTPEP.html�����������������������������������������������������������������������0100644�0000764�0000144�00000012563�06526451256�015534� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 8-Jul-1996 --> <TITLE>W3C Sample Code Library libwww PEP Engine</TITLE> </HEAD> <BODY> <H1> PEP Engine </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The <I>PEP Manager</I> is a registry for <I>PEP Protocols</I> that follow the generic syntax defined by the <A HREF="/">HTTP</A> <I>PEP protocol</I> headers. All <I>PEP Protocols</I> are registered at run-time in form of a <I>PEP Module</I>. A <I>PEP Module</I> consists of the following: <DL> <DT> <B>protocol</B> <DD> The name which is used to identify the protocol. <DT> <B>BEFORE Filter</B> <DD> When a new request is issued, the <I>PEP Manager</I> looks in the URL tree to see if we have any PEP information for this particular request. The search is based on the realm (if known) in which the request belongs and the URL itself. If a record is found then the <I>PEP Manager</I> calls the <I>PEP Module</I> in order to generate the PEP protocol headers. <DT> <B>AFTER Filter</B> <DD> After a request has terminated and the result was lack of required PEP protocol headers, the request should normally be repeated with a new set of PEP protocol headers. The AFTER filter is responsible for extracting the challenge from the HTTP response and store it in the URL tree, so that we next time we request the same URL we know that it is protected and we can ask the user for the appropriate PRP protocol headers. <DT> <B>garbage collection</B> <DD> The PEP information is stored in a <A HREF="HTUTree.html">URL Tree</A> but as it doesn't know the format of the protocol specific parts, you must register a garbage collector (gc). The gc is called when node is deleted in the tree. </DL> <P> <B>Note: </B>The <I>PEP Manager</I> itself consists of <B>BEFORE</B> and an <B>AFTER</B> <A HREF="HTFilter.html">filter</A> - just like the <I>PEP Modules</I>. This means that any <I>PEP Module</I> also can be registered directly as a <B>BEFORE</B> and <B>AFTER</B> <A HREF="HTFilter.html">filter</A> by the <A HREF="HTNet.html">Net Manager</A>. The reason for having the two layer model is that the <I>PEP Manager</I> maintains a single <A HREF="HTUTree.html">URL tree</A> for storing PEP information for all <I>PEP Protocols</I>. <P> A<I> PEP Module</I> has three resources, it can use when creating PEP protocol headers: <UL> <LI> Handle the <I>PEP protocol headers</I> send from the remote party (typically in the form of a HTTP response. <LI> Handle the <I>PEP protocol headers</I> which typically are to part of the next request. <LI> Add information to the <A HREF="HTUTree.html">URL Tree</A> </UL> <P> This module is implemented by <A HREF="HTPEP.c">HTPEP.c</A> (get it?), and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTPEP_H #define HTPEP_H #include "HTList.h" #include "HTReq.h" #include "HTUTree.h" typedef struct _HTPEPModule HTPEPModule; </PRE> <H2> PEP Module Registration </H2> <P> A <I>PEP Protocol</I> is registered by registering an <I>PEP Module</I> to in the <I>PEP Manager</I>. <H3> Add a PEP Module </H3> <P> You can add a PEP protocol by using the following method. Each of the callback function must have the type as defined below. <PRE> extern HTPEPModule * HTPEP_newModule(const char * protocol, HTNetBefore * before, HTNetAfter * after, HTUTree_gc * gc); </PRE> <H3> Find a PEP Module </H3> <PRE>extern HTPEPModule * HTPEP_findModule (const char * protocol); </PRE> <H3> Delete a PEP Module </H3> <PRE>extern BOOL HTPEP_deleteModule (const char * protocol); </PRE> <H3> Delete ALL PEP modules </H3> <PRE>extern BOOL HTPEP_deleteAllModules (void); </PRE> <H2> Handling the URL Tree </H2> <P> The PEP information is stored as <A HREF="HTUTree.html">URL Trees</A>. &nbsp;The root of a URL Tree is identified by a <I>hostname</I> and a <I>port number</I>. Each URL Tree contains a set of templates and realms which can be used to predict what information to use in a hierarchical tree. <P> The URL trees are automatically collected after some time so the application does not have to worry about freeing the trees. When a node in a tree is freed, the gc registered as part of the PEP Module is called. <P> Server applications can have different PEP setups for each hostname and port number, they control. For example, a server with interfaces "<CODE>www.foo.com</CODE>" and "<CODE>internal.foo.com</CODE>" can have different protection setups for each interface. <H3> Add information to the Database </H3> <P> Add a PEP information node to the database. If the entry is already found then it is replaced with the new one. The template must follow normal URI syntax but can include a wildcard Return YES if added (or replaced), else NO <PRE>extern HTPEPModule * HTPEP_findModule (const char * name); </PRE> <H2> The PEP Manager Filters </H2> <P> As mentioned, the <I>PEP Manager</I> is itself a set of <A HREF="HTFilter.html">filters</A> that can be registered by the <A HREF="HTNet.html">Net manager</A>. <PRE> extern HTNetBefore HTPEP_beforeFilter; extern HTNetAfter HTPEP_afterFilter; </PRE> <PRE> #endif /* NOT HTPEP_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTPEP.html,v 2.5 2025/05/14 02:10:54 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTParse.c������������������������������������������������������������������������0100644�0000764�0000144�00000037133�06664352703�015440� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTParse.c ** URI MANAGEMENT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTParse.c,v 2.80 2025/02/22 22:10:11 frystyk Exp $ ** ** history: ** May 12 94 TAB added as legal char in HTCleanTelnetString ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTParse.h" /* Implemented here */ typedef struct _HTURI { char * access; /* Now known as "scheme" */ char * host; char * absolute; char * relative; char * fragment; } HTURI; /* Scan a filename for its consituents ** ----------------------------------- ** ** On entry, ** name points to a document name which may be incomplete. ** On exit, ** absolute or relative may be nonzero (but not both). ** host, fragment and access may be nonzero if they were specified. ** Any which are nonzero point to zero terminated strings. */ PRIVATE void scan (char * name, HTURI * parts) { char * p; char * after_access = name; memset(parts, '\0', sizeof(HTURI)); /* Look for fragment identifier */ if ((p = strchr(name, '#')) != NULL) { *p++ = '\0'; parts->fragment = p; } if ((p = strchr(name, ' ')) != NULL) *p++ = '\0'; for(p=name; *p; p++) { /* ** Look for any whitespace. This is very bad for pipelining as it ** makes the request invalid */ if (isspace((int) *p)) { char *orig=p, *dest=p+1; while ((*orig++ = *dest++)); p = p-1; } if (*p=='/' || *p=='#' || *p=='?') break; if (*p==':') { *p = 0; parts->access = after_access; /* Scheme has been specified */ /* The combination of gcc, the "-O" flag and the HP platform is unhealthy. The following three lines is a quick & dirty fix, but is not recommended. Rather, turn off "-O". */ /* after_access = p;*/ /* while (*after_access == 0)*/ /* after_access++;*/ after_access = p+1; if (0==strcasecomp("URL", parts->access)) { parts->access = NULL; /* Ignore IETF's URL: pre-prefix */ } else break; } } p = after_access; if (*p=='/'){ if (p[1]=='/') { parts->host = p+2; /* host has been specified */ *p=0; /* Terminate access */ p=strchr(parts->host,'/'); /* look for end of host name if any */ if(p) { *p=0; /* Terminate host */ parts->absolute = p+1; /* Root has been found */ } } else { parts->absolute = p+1; /* Root found but no host */ } } else { parts->relative = (*after_access) ? after_access : 0; /* zero for "" */ } } /* Parse a Name relative to another name ** ------------------------------------- ** ** This returns those parts of a name which are given (and requested) ** substituting bits from the related name where necessary. ** ** On entry, ** aName A filename given ** relatedName A name relative to which aName is to be parsed. Give ** it an empty string if aName is absolute. ** wanted A mask for the bits which are wanted. ** ** On exit, ** returns A pointer to a malloc'd string which MUST BE FREED */ PUBLIC char * HTParse (const char *aName, const char *relatedName, int wanted) { char * result = 0; char * return_value = 0; int len; char * name = 0; char * rel = 0; char * p; char * access; HTURI given, related; if (!aName) return NULL; if (!relatedName) /* HWL 23/8/94: dont dump due to NULL */ relatedName = ""; /* Make working copies of input strings to cut up: */ len = strlen(aName)+strlen(relatedName)+10; if ((result=(char *) HT_MALLOC(len)) == NULL) /* Lots of space: more than enough */ HT_OUTOFMEM("parse space"); StrAllocCopy(name, aName); StrAllocCopy(rel, relatedName); scan(name, &given); scan(rel, &related); result[0]=0; /* Clear string */ access = given.access ? given.access : related.access; if (wanted & PARSE_ACCESS) if (access) { strcat(result, access); if(wanted & PARSE_PUNCTUATION) strcat(result, ":"); } if (given.access && related.access) /* If different, inherit nothing. */ if (strcmp(given.access, related.access)!=0) { related.host=0; related.absolute=0; related.relative=0; related.fragment=0; } if (wanted & PARSE_HOST) if(given.host || related.host) { if(wanted & PARSE_PUNCTUATION) strcat(result, "//"); strcat(result, given.host ? given.host : related.host); } if (given.host && related.host) /* If different hosts, inherit no path. */ if (strcmp(given.host, related.host)!=0) { related.absolute=0; related.relative=0; related.fragment=0; } if (wanted & PARSE_PATH) { if(given.absolute) { /* All is given */ if(wanted & PARSE_PUNCTUATION) strcat(result, "/"); strcat(result, given.absolute); } else if(related.absolute) { /* Adopt path not name */ strcat(result, "/"); strcat(result, related.absolute); if (given.relative) { p = strchr(result, '?'); /* Search part? */ if (!p) p=result+strlen(result)-1; for (; *p!='/'; p--); /* last / */ p[1]=0; /* Remove filename */ strcat(result, given.relative); /* Add given one */ #if 0 result = HTSimplify (&result); #endif } } else if(given.relative) { strcat(result, given.relative); /* what we've got */ } else if(related.relative) { strcat(result, related.relative); } else { /* No inheritance */ strcat(result, "/"); } } if (wanted & PARSE_VIEW) if(given.fragment || related.fragment) { if(given.absolute && given.fragment) { /*Fixes for relURLs...*/ if(wanted & PARSE_PUNCTUATION) strcat(result, "#"); strcat(result, given.fragment); } else if (!(given.absolute) && !(given.fragment)) { strcat(result, ""); } else { if(wanted & PARSE_PUNCTUATION) strcat(result, "#"); strcat(result, given.fragment ? given.fragment : related.fragment); } } HT_FREE(rel); HT_FREE(name); StrAllocCopy(return_value, result); HT_FREE(result); return return_value; /* exactly the right length */ } /* ** Canonicalizes the URL in the following manner starting from the host ** pointer: ** ** 1) The host name is converted to lowercase ** 2) Chop off port if `:80' (http), `:70' (gopher), or `:21' (ftp) ** ** Return: OK The position of the current path part of the URL ** which might be the old one or a new one. */ PRIVATE char * HTCanon (char ** filename, char * host) { char *newname = NULL; char *port; char *strptr; char *path; char *access = host-3; while (access>*filename && *(access-1)!='/') /* Find access method */ access--; if ((path = strchr(host, '/')) == NULL) /* Find path */ path = host + strlen(host); if ((strptr = strchr(host, '@')) != NULL && strptr<path) /* UserId */ host = strptr; if ((port = strchr(host, ':')) != NULL && port>path) /* Port number */ port = NULL; strptr = host; /* Convert to lower-case */ while (strptr<path) { *strptr = TOLOWER(*strptr); strptr++; } /* Does the URL contain a full domain name? This also works for a numerical host name. The domain name is already made lower-case and without a trailing dot. */ #if 0 if (((strptr = strchr(host, '.')) == NULL || strptr >= path) && strncasecomp(host, "localhost", 9)) { const char *domain = HTGetDomainName(); if (domain && *domain) { if ((newname = (char *) HT_CALLOC(1, strlen(*filename) + strlen(domain)+2)) == NULL) HT_OUTOFMEM("HTCanon"); if (port) strncpy(newname, *filename, (int) (port-*filename)); else strncpy(newname, *filename, (int) (path-*filename)); strcat(newname, "."); strcat(newname, domain); } } else /* Look for a trailing dot */ #endif { char *dot = port ? port : path; if (dot > *filename && *--dot=='.') { char *orig=dot, *dest=dot+1; while((*orig++ = *dest++)); if (port) port--; path--; } } /* Chop off port if `:', `:80' (http), `:70' (gopher), or `:21' (ftp) */ if (port) { if (!*(port+1) || *(port+1)=='/') { if (!newname) { char *orig=port, *dest=port+1; while((*orig++ = *dest++)); } } else if ((!strncmp(access, "http", 4) && (*(port+1)=='8'&&*(port+2)=='0'&&(*(port+3)=='/'||!*(port+3)))) || (!strncmp(access, "gopher", 6) && (*(port+1)=='7'&&*(port+2)=='0'&&(*(port+3)=='/'||!*(port+3)))) || (!strncmp(access, "ftp", 3) && (*(port+1)=='2'&&*(port+2)=='1'&&(*(port+3)=='/'||!*(port+3))))) { if (!newname) { char *orig=port, *dest=port+3; while((*orig++ = *dest++)); path -= 3; /* Update path position, Henry Minsky */ } } else if (newname) strncat(newname, port, (int) (path-port)); } if (newname) { char *newpath = newname+strlen(newname); strcat(newname, path); path = newpath; HT_FREE(*filename); /* Free old copy */ *filename = newname; } return path; } /* ** Search the URL and determine whether it is a relative or absolute URL. ** We check to see if there is a ":" before any "/", "?", and "#". If this ** is the case then we say it is absolute. Otherwise it is relative. */ PUBLIC BOOL HTURL_isAbsolute (const char * url) { if (url) { const char * ptr = url; while (*ptr) { if (*ptr == ':') return YES; if (*ptr == '/' || *ptr == '?' || *ptr == '#') break; ptr ++; } } return NO; } /* Simplify a URI // -------------- // A URI is allowed to contain the seqeunce xxx/../ which may be // replaced by "" , and the seqeunce "/./" which may be replaced by "/". // Simplification helps us recognize duplicate URIs. // // Thus, /etc/junk/../fred becomes /etc/fred // /etc/junk/./fred becomes /etc/junk/fred // // but we should NOT change // http://fred.xxx.edu/../.. // // or ../../albert.html // // In order to avoid empty URLs the following URLs become: // // /fred/.. becomes /fred/.. // /fred/././.. becomes /fred/.. // /fred/.././junk/.././ becomes /fred/.. // // If more than one set of `://' is found (several proxies in cascade) then // only the part after the last `://' is simplified. // // Returns: A string which might be the old one or a new one. */ PUBLIC char *HTSimplify (char ** url) { char *path; char *p; if (!url || !*url) { HTTRACE(URI_TRACE, "HTSimplify.. Nothing done\n"); return *url; } HTTRACE(URI_TRACE, "HTSimplify.. `%s\' " _ *url); /* Find any scheme name */ if ((path = strstr(*url, "://")) != NULL) { /* Find host name */ char *newptr; char *access = *url; while (access<path && (*access=TOLOWER(*access))) access++; path += 3; while ((newptr = strstr(path, "://")) != NULL) /* For proxies */ path = newptr+3; path = HTCanon(url, path); /* We have a host name */ } else if ((path = strstr(*url, ":/")) != NULL) { path += 2; } else path = *url; if (*path == '/' && *(path+1)=='/') { /* Some URLs start //<foo> */ path += 1; } else if (!strncmp(path, "news:", 5)) { char *ptr = strchr(path+5, '@'); if (!ptr) ptr = path+5; while (*ptr) { /* Make group or host lower case */ *ptr = TOLOWER(*ptr); ptr++; } HTTRACE(URI_TRACE, "into\n............ `%s'\n" _ *url); return *url; /* Doesn't need to do any more */ } if ((p = path)) { char *end; if (!((end = strchr(path, ';')) || (end = strchr(path, '?')) || (end = strchr(path, '#')))) end = path+strlen(path); /* Parse string second time to simplify */ p = path; while(p<end) { if (*p=='/') { if (p>*url && *(p+1)=='.' && (*(p+2)=='/' || !*(p+2))) { char *orig = p+1; char *dest = (*(p+2)!='/') ? p+2 : p+3; while ((*orig++ = *dest++)); /* Remove a slash and a dot */ end = orig-1; } else if (*(p+1)=='.' && *(p+2)=='.' && (*(p+3)=='/' || !*(p+3))) { char *q = p; while (q>path && *--q!='/'); /* prev slash */ if (strncmp(q, "/../", 4)) { char *orig = q+1; char *dest = (*(p+3)!='/') ? p+3 : p+4; while ((*orig++ = *dest++)); /* Remove /xxx/.. */ end = orig-1; p = q; /* Start again with prev slash */ } else p++; } else if (*(p+1)=='/') { while (*(p+1)=='/') { char *orig=p, *dest=p+1; while ((*orig++ = *dest++)); /* Remove multiple /'s */ end = orig-1; } } else p++; } else p++; } } /* ** Check for host/../.. kind of things */ while (*path=='/' && *(path+1)=='.' && *(path+2)=='.' && (!*(path+3) || *(path+3)=='/')) { char * orig = path; char * dest = path+3; while ((*orig++ = *dest++)); } HTTRACE(URI_TRACE, "into\n............ `%s'\n" _ *url); return *url; } /* Make Relative Name ** ------------------ ** ** This function creates and returns a string which gives an expression of ** one address as related to another. Where there is no relation, an absolute ** address is retured. ** ** On entry, ** Both names must be absolute, fully qualified names of nodes ** (no fragment bits) ** ** On exit, ** The return result points to a newly allocated name which, if ** parsed by HTParse relative to relatedName, will yield aName. ** The caller is responsible for freeing the resulting name later. ** */ PUBLIC char * HTRelative (const char * aName, const char * relatedName) { char * result = 0; const char *p = aName; const char *q = relatedName; const char * after_access = NULL; const char * path = 0; const char * last_slash = 0; int slashes = 0; for(;*p; p++, q++) { /* Find extent of match */ if (*p!=*q) break; if (*p==':') if (!after_access) after_access = p+1; if (*p=='/') { last_slash = p; slashes++; if (slashes==3) path=p; } } /* q, p point to the first non-matching character or zero */ if (!after_access) { /* Different access */ StrAllocCopy(result, aName); } else if (slashes<3){ /* Different nodes */ StrAllocCopy(result, after_access); } else { /* Some path in common */ int levels= 0; for(; *q && *q!='#' && *q!=';' && *q!='?'; q++) if (*q=='/') levels++; if ((result = (char *) HT_MALLOC(3*levels + strlen(last_slash) + 4)) == NULL) HT_OUTOFMEM("HTRelative"); *result = '\0'; if (!levels) strcat(result, "./"); for(;levels; levels--)strcat(result, "../"); strcat(result, last_slash+1); if (!*result) strcat(result, "./"); } HTTRACE(URI_TRACE, "HTRelative.. `%s' expressed relative to `%s' is `%s'\n" _ aName _ relatedName _ result); #if 0 { char * absstr = HTParse(result, relatedName, PARSE_ALL); HTSimplify(&absstr); HTTRACE(URI_TRACE, "HTRelative.. `%s' made absolute based on `%s' is `%s'\n" _ result _ relatedName _ absstr); if (strcmp(absstr, aName) != 0) HTTRACE(URI_TRACE, "THEY DIFFER!!!\n"); HT_FREE(absstr); } #endif return result; } /* HTCleanTelnetString() * Make sure that the given string doesn't contain characters that * could cause security holes, such as newlines in ftp, gopher, * news or telnet URLs; more specifically: allows everything between * ASCII 20-7E, and also A0-FE, inclusive. Also TAB ('\t') allowed! * * On entry, * str the string that is *modified* if necessary. The * string will be truncated at the first illegal * character that is encountered. * On exit, * returns YES, if the string was modified. * NO, otherwise. */ PUBLIC BOOL HTCleanTelnetString (char * str) { char * cur = str; if (!str) return NO; while (*cur) { int a = TOASCII((unsigned char) *cur); if (a != 0x9 && (a < 0x20 || (a > 0x7E && a < 0xA0) || a > 0xFE)) { HTTRACE(URI_TRACE, "Illegal..... character in URL: \"%s\"\n" _ str); *cur = 0; HTTRACE(URI_TRACE, "Truncated... \"%s\"\n" _ str); return YES; } cur++; } return NO; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTParse.html���������������������������������������������������������������������0100644�0000764�0000144�00000012500�07142475215�016145� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Jun-1996 --> <TITLE>W3C Sample Code Library libwww URI Management</TITLE> </HEAD> <BODY> <H1> URI Management </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module contains code to parse URIs and various related things such as: <UL> <LI> <A HREF="#parse">Parse a URI for tokens</A> <LI> <A HREF="#canon">Canonicalization of URIs</A> <LI> <A HREF="#secure">Search a URI for illegal characters in order to prevent security holes</A> </UL> <P> This module is implemented by <A HREF="HTParse.c">HTParse.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTPARSE_H #define HTPARSE_H #include "HTEscape.h" </PRE> <H2> <A NAME="Parsing">Parsing URIs</A> </H2> <P> These functions can be used to get information in a URI. <H3> Parse a URI relative to another URI </H3> <P> This returns those parts of a name which are given (and requested) substituting bits from the related name where necessary. The <CODE>aName</CODE> argument is the (possibly relative) URI to be parsed, the <CODE>relatedName</CODE> is the URI which the <CODE>aName</CODE> is to be parsed relative to. Passing an empty string means that the <CODE>aName</CODE> is an absolute URI. The following are flag bits which may be OR'ed together to form a number to give the 'wanted' argument to HTParse. As an example we have the URL: "<CODE>/TheProject.html#news</CODE>" <PRE> #define PARSE_ACCESS 16 /* Access scheme, e.g. "HTTP" */ #define PARSE_HOST 8 /* Host name, e.g. "www.w3.org" */ #define PARSE_PATH 4 /* URL Path, e.g. "pub/WWW/TheProject.html" */ #define PARSE_VIEW 2 /* Fragment identifier, e.g. "news" */ #define PARSE_FRAGMENT PARSE_VIEW #define PARSE_ANCHOR PARSE_VIEW #define PARSE_PUNCTUATION 1 /* Include delimiters, e.g, "/" and ":" */ #define PARSE_ALL 31 </PRE> <P> where the format of a URI is as follows: "<CODE>ACCESS :// HOST / PATH # ANCHOR</CODE>" <P> <CODE>PUNCTUATION</CODE> means any delimiter like '/', ':', '#' between the tokens above. The string returned by the function must be freed by the caller. <PRE> extern char * HTParse (const char * aName, const char * relatedName, int wanted); </PRE> <H3> Create a Relative (Partial) URI </H3> <P> This function creates and returns a string which gives an expression of one address as related to another. Where there is no relation, an absolute address is retured. <DL> <DT> On entry, <DD> Both names must be absolute, fully qualified names of nodes (no anchor bits) <DT> On exit, <DD> The return result points to a newly allocated name which, if parsed by HTParse relative to relatedName, will yield aName. The caller is responsible for freeing the resulting name later. </DL> <PRE> extern char * HTRelative (const char * aName, const char *relatedName); </PRE> <H2> <A NAME="absrel">Is a URL Relative or Absolute?</A> </H2> <P> Search the URL and determine whether it is a relative or absolute URL. We check to see if there is a ":" before any "/", "?", and "#". If this is the case then we say it is absolute. Otherwise we say it is relative. <PRE> extern BOOL HTURL_isAbsolute (const char * url); </PRE> <H2> <A NAME="URL">URL Canonicalization</A> </H2> <P> Canonicalization of URIs is a difficult job, but it saves a lot of down loads and double entries in the cache if we do a good job. A URI is allowed to contain the seqeunce xxx/../ which may be replaced by "" , and the seqeunce "/./" which may be replaced by "/". Simplification helps us recognize duplicate URIs. Thus, the following transformations are done: <UL> <LI> /etc/junk/../fred becomes /etc/fred <LI> /etc/junk/./fred becomes /etc/junk/fred </UL> <P> but we should NOT change <UL> <LI> http://fred.xxx.edu/../.. or <LI> ../../albert.html </UL> <P> In the same manner, the following prefixed are preserved: <UL> <LI> ./&lt;etc&gt; <LI> //&lt;etc&gt; </UL> <P> In order to avoid empty URIs the following URIs become: <UL> <LI> /fred/.. becomes /fred/.. <LI> /fred/././.. becomes /fred/.. <LI> /fred/.././junk/.././ becomes /fred/.. </UL> <P> If more than one set of `://' is found (several proxies in cascade) then only the part after the last `://' is simplified. <PRE> extern char *HTSimplify (char **filename); </PRE> <H2> <A NAME="sec">Prevent Security Holes</A> </H2> <P> In many telnet like protocols, it can be very dangerous to allow a full ASCII character set to be in a URI. Therefore we have to strip them out. <CODE>HTCleanTelnetString()</CODE> makes sure that the given string doesn't contain characters that could cause security holes, such as newlines in ftp, gopher, news or telnet URLs; more specifically: allows everything between hexadesimal ASCII 20-7E, and also A0-FE, inclusive. <DL> <DT> <CODE>str</CODE> <DD> the string that is *modified* if necessary. The string will be truncated at the first illegal character that is encountered. <DT> returns <DD> YES, if the string was modified. NO, otherwise. </DL> <PRE> extern BOOL HTCleanTelnetString (char * str); </PRE> <PRE> #endif /* HTPARSE_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTParse.html,v 2.39 2025/08/04 08:10:53 kahan Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTPlain.c������������������������������������������������������������������������0100644�0000764�0000144�00000004012�07144730703�015411� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTPlain.c ** PLAIN TEXT OBJECT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTPlain.c,v 2.27 2025/08/11 07:56:51 kahan Exp $ ** ** This version of the stream object just writes to a socket. ** The socket is assumed open and left open. ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTStyle.h" #include "HTPlain.h" #include "HTextImp.h" struct _HTStream { const HTStreamClass * isa; HTextImp * text; }; /* -------------------------------------------------------------------------- */ PRIVATE int HTPlain_put_character (HTStream * me, char c) { HTextImp_addText(me->text, &c, 1); return HT_OK; } PRIVATE int HTPlain_put_string (HTStream * me, const char * s) { HTextImp_addText(me->text, s, strlen(s)); return HT_OK; } PRIVATE int HTPlain_write (HTStream * me, const char* b, int l) { HTextImp_addText(me->text, b, l); return HT_OK; } PRIVATE int HTPlain_flush (HTStream * me) { return HT_OK; } PRIVATE int HTPlain_free (HTStream * me) { if (me) { HTextImp_build(me->text, HTEXT_END); HTextImp_delete(me->text); HT_FREE(me); } return HT_OK; } PRIVATE int HTPlain_abort (HTStream * me, HTList * e) { if (me) { HTextImp_build(me->text, HTEXT_ABORT); HTextImp_delete(me->text); HT_FREE(me); } return HT_ERROR; } PRIVATE const HTStreamClass HTPlain = { "PlainText", HTPlain_flush, HTPlain_free, HTPlain_abort, HTPlain_put_character, HTPlain_put_string, HTPlain_write, }; PUBLIC HTStream* HTPlainPresent (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTPlain_new"); me->isa = &HTPlain; me->text = HTextImp_new(request, HTRequest_anchor(request), output_stream); HTextImp_build(me->text, HTEXT_BEGIN); return me; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTPlain.html���������������������������������������������������������������������0100644�0000764�0000144�00000001246�06526451257�016150� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww PLAIN TEXT STREAM</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>Plain text object</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module is implemented by <A HREF="HTPlain.c">HTPlain.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTPLAIN_H #define HTPLAIN_H #include "HTFormat.h" extern HTConverter HTPlainPresent; #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTPlain.html,v 2.20 2025/05/14 02:10:55 frystyk Exp $ </ADDRESS> </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTProfil.c�����������������������������������������������������������������������0100644�0000764�0000144�00000017036�07336247266�015625� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** APPLICATION PROFILES INITALIZATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTProfil.c,v 2.30 2025/08/14 16:15:50 kahan Exp $ ** ** Defines a set of application profiles */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWCache.h" #include "WWWStream.h" #include "HTInit.h" #include "HTProfil.h" /* Implemented here */ PRIVATE HTList * converters = NULL; PRIVATE HTList * transfer_encodings = NULL; PRIVATE HTList * content_encodings = NULL; PRIVATE BOOL preemptive = NO; /* ------------------------------------------------------------------------- */ PUBLIC void HTProfile_delete (void) { if (!preemptive) HTEventTerminate(); if (HTLib_isInitialized()) { /* Clean up the persistent cache (if any) */ HTCacheTerminate(); /* Clean up all the global preferences */ HTFormat_deleteAll(); /* The following lists have been cleaned up by HTFormat_deleteAll */ transfer_encodings = 0; content_encodings = 0; converters = 0; /* Remove bindings between suffixes, media types */ HTBind_deleteAll(); /* Terminate libwww */ HTLibTerminate(); } } PRIVATE void client_profile (const char * AppName, const char * AppVersion, BOOL preemptive, BOOL cache, BOOL HTMLParser) { /* If the Library is not already initialized then do it */ if (!HTLib_isInitialized()) HTLibInit(AppName, AppVersion); /* Register the default set of messages and dialog functions */ HTAlertInit(); HTAlert_setInteractive(YES); if (!converters) converters = HTList_new(); if (!transfer_encodings) transfer_encodings = HTList_new(); if (!content_encodings) content_encodings = HTList_new(); /* Register the default set of transport protocols */ HTTransportInit(); /* Register the default set of application protocol modules */ if (preemptive) HTProtocolPreemptiveInit(); else HTProtocolInit(); /* Initialize suffix bindings for local files */ HTBind_init(); /* Set max number of sockets we want open simultanously */ HTNet_setMaxSocket(32); /* The persistent cache does not work in preemptive mode */ if (cache) HTCacheInit(NULL, 20); /* Register the default set of BEFORE and AFTER filters */ HTNetInit(); /* Set up the default set of Authentication schemes */ HTAAInit(); /* Get any proxy or gateway environment variables */ HTProxy_getEnvVar(); /* Register the default set of converters */ HTConverterInit(converters); /* Register the default libwww HTML parser */ if (HTMLParser) HTMLInit(converters); /* Set the convertes as global converters for all requests */ HTFormat_setConversion(converters); /* Register the default set of transfer encoders and decoders */ HTTransferEncoderInit(transfer_encodings); HTFormat_setTransferCoding(transfer_encodings); /* Register the default set of content encoders and decoders */ HTContentEncoderInit(content_encodings); if (HTList_count(content_encodings) > 0) HTFormat_setContentCoding(content_encodings); else { HTList_delete(content_encodings); content_encodings = NULL; } /* Register the default set of MIME header parsers */ HTMIMEInit(); /* Register the default set of file suffix bindings */ HTFileInit(); /* Register the default set of Icons for directory listings */ HTIconInit(NULL); } PUBLIC void HTProfile_newClient (const char * AppName, const char * AppVersion) { /* Do the default setup */ client_profile(AppName, AppVersion, NO, YES, NO); /* Set up default event loop */ HTEventInit(); } PUBLIC void HTProfile_newHTMLClient (const char * AppName, const char * AppVersion) { /* Do the default setup */ client_profile(AppName, AppVersion, NO, YES, YES); /* Set up default event loop */ HTEventInit(); } PUBLIC void HTProfile_newPreemptiveClient (const char * AppName, const char * AppVersion) { /* Do the default setup */ client_profile(AppName, AppVersion, YES, NO, NO); /* Set up default event loop */ HTEventInit(); /* Remember that we are loading preemptively */ preemptive = YES; } PUBLIC void HTProfile_newNoCacheClient (const char * AppName, const char * AppVersion) { /* Do the default setup */ client_profile(AppName, AppVersion, NO, NO, NO); /* Set up default event loop */ HTEventInit(); } PUBLIC void HTProfile_newHTMLNoCacheClient (const char * AppName, const char * AppVersion) { /* Do the default setup */ client_profile(AppName, AppVersion, NO, NO, YES); /* Set up default event loop */ HTEventInit(); } PRIVATE void robot_profile (const char * AppName, const char * AppVersion) { /* If the Library is not already initialized then do it */ if (!HTLib_isInitialized()) HTLibInit(AppName, AppVersion); if (!converters) converters = HTList_new(); if (!transfer_encodings) transfer_encodings = HTList_new(); if (!content_encodings) content_encodings = HTList_new(); /* Register the default set of transport protocols */ HTTransportInit(); /* Register the default set of application protocol modules */ HTProtocolInit(); /* Initialize suffix bindings for local files */ HTBind_init(); /* Set max number of sockets we want open simultanously */ HTNet_setMaxSocket(32); /* Register some default set of BEFORE and AFTER filters */ HTNet_addBefore(HTRuleFilter, NULL, NULL, HT_FILTER_MIDDLE); HTNet_addBefore(HTProxyFilter, NULL, NULL, HT_FILTER_MIDDLE); HTNet_addAfter(HTInfoFilter, NULL, NULL, HT_ALL, HT_FILTER_LATE); /* Get any proxy or gateway environment variables */ HTProxy_getEnvVar(); /* Register the default set of converters including the HTML parser */ HTConverterInit(converters); HTMLInit(converters); /* Set the convertes as global converters for all requests */ HTFormat_setConversion(converters); /* Register the default set of transfer encoders and decoders */ HTTransferEncoderInit(transfer_encodings); HTFormat_setTransferCoding(transfer_encodings); /* Register the default set of content encoders and decoders */ HTContentEncoderInit(content_encodings); if (HTList_count(content_encodings) > 0) HTFormat_setContentCoding(content_encodings); else { HTList_delete(content_encodings); content_encodings = NULL; } /* Register the default set of MIME header parsers */ HTMIMEInit(); /* Register the default set of file suffix bindings */ HTFileInit(); /* Register the default set of Icons for directory listings */ HTIconInit(NULL); /* Register some default messages and dialog functions */ if (HTAlert_interactive()) { HTAlert_add(HTError_print, HT_A_MESSAGE); HTAlert_add(HTConfirm, HT_A_CONFIRM); HTAlert_add(HTPrompt, HT_A_PROMPT); HTAlert_add(HTPromptPassword, HT_A_SECRET); HTAlert_add(HTPromptUsernameAndPassword, HT_A_USER_PW); } HTAlert_setInteractive(YES); } PUBLIC void HTProfile_newRobot (const char * AppName, const char * AppVersion) { /* set up default event loop */ HTEventInit(); robot_profile(AppName, AppVersion); /* Register the default set of application protocol modules */ HTProtocolInit(); } PUBLIC void HTProfile_newPreemptiveRobot (const char * AppName, const char * AppVersion) { robot_profile(AppName, AppVersion); /* Register the default set of application protocol modules */ HTProtocolPreemptiveInit(); /* Remember that we are loading preemptively */ preemptive = YES; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTProfil.html��������������������������������������������������������������������0100644�0000764�0000144�00000012604�07133046031�016321� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Default Initialization</TITLE> </HEAD> <BODY> <H1> Application Profiles </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> As mentioned in the <A HREF="../User/Architecture/">Library Architecture</A>, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. <P> The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing <A HREF="http://info.internet.isi.edu:80/in-notes/rfc/files/rfc822.txt">RFC 822</A> headers etc. but it must all be registered by the application before the core knows about it. You can either register the parts directly through the many initialization functions in the Initialization Interface or you can use these "precompiled" profiles which are set up to contain the featuers often used by the a specific type of application, for example a client, a server, a robot etc. <P> This module helps the application programmer setting up all this functionality, but it is important to note that none of it is <I>required</I> in order to use the Library. All the profiles declared below superseed the Library core initialization function <CODE>HTLibInit()</CODE> which is defined in the <A HREF="HTLib.html">HTLib module</A>. <P> This module is implemented by <A HREF="HTProfil.c">HTProfil.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. You can also have a look at the other <A HREF="WWWInit.html">Initialization modules</A>. <PRE> #ifndef HTPROF_H #define HTPROF_H #include "WWWLib.h" #include "WWWInit.h" </PRE> <H2> <A NAME="Client">Client Application Profiles</A> </H2> <P> We have a couple of different client application profiles suited to different types of clients. <H3> Traditional Client Application </H3> <P> The first uses a non-blocking socket interface which enables the application to perform multiple requests simultanously - in everyday words called pseudo-threads. Besides that this profile contains typical filters for handling redirection, authentication, logging, and proxy servers. <PRE> extern void HTProfile_newClient ( const char * AppName, const char * AppVersion); </PRE> <H3> Simple HTML Client </H3> <P> As above but furthermore contains the <A HREF="HTML.html">default libwww HTML parser</A> <PRE> extern void HTProfile_newHTMLClient ( const char * AppName, const char * AppVersion); </PRE> <H3> Client without a Persistent Cache </H3> <P> This is the same as above except that it doesn't start the persistent cache. <PRE> extern void HTProfile_newNoCacheClient ( const char * AppName, const char * AppVersion); </PRE> <H3> Simple HTML Client without Persistent Cache </H3> <P> As above but furthermore contains the <A HREF="HTML.html">default libwww HTML parser</A> <PRE> extern void HTProfile_newHTMLNoCacheClient ( const char * AppName, const char * AppVersion); </PRE> <H3> Preemptive (Blocking) Client </H3> <P> <B><IMG SRC="../../Icons/32x32/warning.gif" WIDTH="32" HEIGHT="32" ALT="Note: " BORDER="0">Do not use preemptive profiles if you are doing <TT>PUT</TT> or <TT>POST</TT> requests.</B> <P> We also have a blocking (preemptive) version of the same client interface. The difference is that this version uses traditional blocking sockets and hence only one request can be performed at the same time. <PRE> extern void HTProfile_newPreemptiveClient ( const char * AppName, const char * AppVersion); </PRE> <H2> <A NAME="Robot">Robot Application Profile</A> </H2> <P> The robot profile contains much of the same functionality as the client, but it does contain less filters. For example, robots are normally not interested in performing automatic redirections or access authentication, and hence this is not part of the robot profile. <PRE> extern void HTProfile_newRobot ( const char * AppName, const char * AppVersion); </PRE> <P> <B><IMG SRC="../../Icons/32x32/warning.gif" WIDTH="32" HEIGHT="32" ALT="Note: " BORDER="0">Do not use preemptive profiles if you are doing <TT>PUT</TT> or <TT>POST</TT> requests.</B> <P> As for the client interfacem we also have a blocking (preemptive) version of the same interface. The difference is that this version uses traditional blocking sockets and hence only one reques can be performed at the same time. <PRE> extern void HTProfile_newPreemptiveRobot ( const char * AppName, const char * AppVersion); </PRE> <H2> Delete a Profile </H2> <P> This is a generic profile cleanup that should be used on all the profiles above. This will clean up the memory allocated by the profile and by the Library core itself. After calling this you can not call any Library function again. This call also supersedes the termination function for the Library core, <CODE>HTLibTerminate()</CODE> so that you don't have to call that after calling this function. <PRE>extern void HTProfile_delete (void); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTProfil.html,v 2.8 2025/07/12 10:44:41 kahan Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTProt.c�������������������������������������������������������������������������0100644�0000764�0000144�00000011265�06701526652�015306� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTProt.c ** ACCESS SCHEME MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTProt.c,v 2.21 2025/04/04 00:09:14 frystyk Exp $ ** ** ** HISTORY: ** 6 July 95 HFN Spawned off from HTAccess */ /* Library Include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTParse.h" #include "HTString.h" #include "HTTrans.h" #include "HTProt.h" /* Implemented here */ /* Variables and typedefs local to this module */ struct _HTProtocol { char * name; /* Name of this protocol access scheme */ char * transport; /* Name of the transport */ HTProtocolId id; /* Default port for this protocol */ BOOL preemptive; HTProtCallback * client; HTProtCallback * server; }; PRIVATE HTList * protocols = NULL; /* List of registered protocols */ /* --------------------------------------------------------------------------*/ /* Management of the HTProtocol structure */ /* --------------------------------------------------------------------------*/ /* ** Register a Protocol module as an active access method */ PUBLIC BOOL HTProtocol_add (const char * name, const char * transport, HTProtocolId protocolId, BOOL preemptive, HTProtCallback * client, HTProtCallback * server) { if (name && (client || server)) { HTProtocol *newProt; if ((newProt=(HTProtocol *) HT_CALLOC(1, sizeof(HTProtocol))) == NULL) HT_OUTOFMEM("HTProtocol_add"); StrAllocCopy(newProt->name, name); { char *ptr = newProt->name; while ((*ptr = TOLOWER(*ptr))) ptr++; } StrAllocCopy(newProt->transport, transport); { char *ptr = newProt->transport; while ((*ptr = TOLOWER(*ptr))) ptr++; } newProt->id = protocolId; newProt->preemptive = preemptive; newProt->client = client; newProt->server = server; if (!protocols) protocols = HTList_new(); HTTRACE(CORE_TRACE, "Protocol.... Adding `%s'\n" _ name); return HTList_addObject(protocols, (void *) newProt); } return NO; } /* ** Deletes a Protocol module as an active access method */ PUBLIC BOOL HTProtocol_delete (const char * name) { if (protocols) { HTList *cur = protocols; HTProtocol *pres; while ((pres = (HTProtocol *) HTList_nextObject(cur))) { if (!strcmp(pres->name, name)) { BOOL status = HTList_removeObject(protocols, (void *) pres); HT_FREE(pres->name); HT_FREE(pres->transport); HT_FREE(pres); return status; } } } return NO; } /* ** Returns the client callback function */ PUBLIC HTProtCallback * HTProtocol_client (HTProtocol * protocol) { return protocol ? protocol->client : NULL; } /* ** Returns the server callback function */ PUBLIC HTProtCallback * HTProtocol_server (HTProtocol * protocol) { return protocol ? protocol->server : NULL; } /* ** Returns the default port */ PUBLIC HTProtocolId HTProtocol_id (HTProtocol * protocol) { return protocol ? protocol->id : 0; } /* ** Returns YES if preemptive else NO */ PUBLIC BOOL HTProtocol_preemptive (HTProtocol * protocol) { return protocol ? protocol->preemptive : NO; } /* ** Delete the list of registered access methods. This is called from ** within HTLibTerminate. Thanks to Eric Sink, eric@spyglass.com */ PUBLIC BOOL HTProtocol_deleteAll (void) { if (protocols) { HTList *cur = protocols; HTProtocol *pres; while ((pres = (HTProtocol *) HTList_nextObject(cur))) { HT_FREE(pres->name); HT_FREE(pres->transport); HT_FREE(pres); } HTList_delete(protocols); protocols = NULL; return YES; } return NO; } /* ** Search registered protocols to find suitable protocol object. ** Return protocol object or NULL */ PUBLIC HTProtocol * HTProtocol_find (HTRequest * request, const char * access) { if (access) { HTList * cur = protocols; HTProtocol * pres; if (cur) { while ((pres = (HTProtocol *) HTList_nextObject(cur))) { if (!strcmp(pres->name, access)) return pres; } } if (request) HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, (char*) access, (int) strlen(access), "HTProtocol_find"); } return NULL; } /* ** Get the transport name of this protocol */ PUBLIC BOOL HTProtocol_setTransport (HTProtocol * protocol, const char * transport) { if (protocol && transport) { StrAllocCopy(protocol->transport, transport); { char *ptr = protocol->transport; while ((*ptr = TOLOWER(*ptr))) ptr++; } return YES; } return NO; } PUBLIC const char * HTProtocol_transport (HTProtocol * protocol) { return (protocol ? protocol->transport : NULL); } PUBLIC const char * HTProtocol_name (HTProtocol * protocol) { return (protocol ? protocol->name : NULL); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTProt.html����������������������������������������������������������������������0100644�0000764�0000144�00000014000�07021216573�016010� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <!-- Changed by: Henrik Frystyk Nielsen, 26-Mar-1996 --> <NEXTID N="z11"><title>W3C Sample Code Library libwww Protocol Class</title> </head> <body> <h1>The Protocol Class</h1> <pre>/* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */</pre> <p>The Protocol class defines an application level protocol (HTTP, FTP, Gopher, etc.) to be used by libwww. Note that access to the local file system also is considered to be an appliaction level protocol treated identically to for example the HTTP protocol.</p> <p>The Protocol class does only know about the application layer protocol and it relies on the <a href="HTTrans.html">Transport Class</a> to do the actualt communication with the network, the local file system etc. The protocol class defines an access method for both a client and a server. A typical client application would probably only want to use the client method and a server only the server method. However, any application can use both which allows it to seemlessly to change between server and client profile as needed.</p> <p>All protocol modules are dynamically bound to an access scheme. Take for example the address <code>http://www.w3.org</code> which has the access scheme <b>http</b> and if we have a protocol module capable of handling HTTP then we can make the binding between <b>http</b> and this module. As mentioned in the introduction to this chapter, the Library already comes with a large set of protocol module, including HTTP so all we have to do in this case is to register the HTTP module to the Library as being capable of handling <b>http</b> URLs.</p> <p>Libwww comes with a default set of protocols including the ones mentioned above which can be initiated using the function <code>HTProtocolInit()</code> in <a href="HTInit.html">HTInit module</a></p> <p>One special case is the support for access to WAIS databases. WAIS has its own code Library called <a href="http://www.cnidr.org/">freeWAIS</a> which is required in order to directly access wais URLs. We shall not describe in describe in detail here how this can be enabled as it is described in the <a href="/Gateways/WAISGate.html">WWW-WAIS gateway</a>.</p> <p>This module is implemented by <a href="HTProt.c">HTProt.c</a>, and it is a part of the <a href="http://www.w3.org/Library/"> W3C Sample Code Library</a>.</p> <pre>#ifndef HTPROT_H #define HTPROT_H typedef struct _HTProtocol HTProtocol; typedef u_short HTProtocolId; #include "HTReq.h" #include "HTAnchor.h" #include "HTEvent.h" #include "HTTrans.h"</pre> <p>An access scheme module takes as a parameter a socket (which is an invalid socket the first time the function is called), a <a href="HTReqMan.html">request structure</a> containing details of the request, and the action by which the (valid) socket was selected in the event loop. When the protocol class routine is called, the anchor element in the request is already valid (made valid by HTAccess).</p> <h2>Creation and Deletion Methods</h2> <h3>Add an Protocol</h3> <p>This functions registers a protocol module and binds it to a specific access acheme (the part before the first colon in a URL). For example, the HTTP &nbsp;client module is bound to http URLs. The callback function is the function to be called for loading.</p> <pre>typedef int HTProtCallback (SOCKET, HTRequest *); extern BOOL HTProtocol_add (const char * name, const char * transport, HTProtocolId port, BOOL preemptive, HTProtCallback * client, HTProtCallback * server);</pre> <h3>Delete a Protocol</h3> <p>This functions deletes a registered protocol module so that it can not be used for accessing a resource anymore.</p> <pre>extern BOOL HTProtocol_delete (const char * name);</pre> <h3>Remove ALL Registered Protocols</h3> <p>This is the garbage collection function. It is called by <a href="HTLib.html">HTLibTerminate()</a></p> <pre>extern BOOL HTProtocol_deleteAll (void);</pre> <h2>Protocol Class Methods</h2> <h3>Find a Protocol Object</h3> <p>You can search the list of registered protocol objects as a function of the access acheme. If an access scheme is found then the protocol object is returned.</p> <pre>extern HTProtocol * HTProtocol_find (HTRequest * request, const char * access);</pre> <h3>Get the callback functions</h3> <p>You can get the callback functions registered together with a protocol object using the following methods.</p> <pre>extern HTProtCallback * HTProtocol_client (HTProtocol * protocol); extern HTProtCallback * HTProtocol_server (HTProtocol * protocol);</pre> <h3>Get the default Protocol ID</h3> <p>Each protocol is registered with a default protocol ID which is the default port number that this protocol is using. In the case of FTP it is 21, for HTTP, it is 80 and for NNTP it is 119.</p> <pre>extern HTProtocolId HTProtocol_id (HTProtocol * protocol);</pre> <h3>Get the Protocol Name</h3> <p>Get the protocol name that was registered when the protocol object was created</p> <pre>extern const char * HTProtocol_name (HTProtocol * protocol);</pre> <h3>Is Access Scheme Preemptive</h3> <p>Returns YES if the implementation of the access scheme supports preemptive access only.</p> <pre>extern BOOL HTProtocol_preemptive (HTProtocol * protocol);</pre> <h3>Binding to the Transport Class</h3> <p>An application protocol is registered together with a <a href="HTTrans.html">transport protocol </a>in order to communicate with the thansport layer.</p> <pre>extern BOOL HTProtocol_setTransport (HTProtocol * protoccol, const char * transport); extern const char * HTProtocol_transport (HTProtocol * protocol);</pre> <pre>#endif /* HTPROT_H */</pre> <p></p> <hr> <address> @(#) $Id: HTProt.html,v 2.25 2025/12/01 13:07:07 kahan Exp $ </address> </body> </html> libwww/Library/src/HTProxy.c������������������������������������������������������������������������0100644�0000764�0000144�00000040160�07056753367�015510� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTProxy.c ** GATEWAY AND PROXY MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTProxy.c,v 2.21 2025/02/29 14:25:59 kahan Exp $ ** ** Replaces the old env variables for gateways and proxies. However for ** backward compatibility there is a function that reads the env variables ** at start up. Note that there is a difference between a proxy and a ** gateway! ** ** Authors ** HF Henrik Frystyk, frystyk@w3.org ** History ** 4 Jun 95 Written on a rainy day */ #if !defined(HT_DIRECT_WAIS) && !defined(HT_DEFAULT_WAIS_GATEWAY) #define HT_DEFAULT_WAIS_GATEWAY "http://www.w3.org:8001/" #endif /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWHTTP.h" #include "WWWApp.h" #include "HTProxy.h" /* Implemented here */ /* Variables and typedefs local to this module */ typedef struct _HTProxy { char * access; char * url; /* URL of Gateway or Proxy */ #ifdef HT_POSIX_REGEX regex_t * regex; /* Compiled regex */ #endif } HTProxy; typedef struct _HTHostlist { char * access; char * host; /* Host or domain name */ unsigned port; #ifdef HT_POSIX_REGEX regex_t * regex; /* Compiled regex */ #endif } HTHostList; PRIVATE HTList * proxies = NULL; /* List of proxy servers */ PRIVATE HTList * gateways = NULL; /* List of gateways */ PRIVATE HTList * noproxy = NULL; /* Don't proxy on these hosts and domains */ PRIVATE int noproxy_is_onlyproxy = 0; /* Interpret the noproxy list as an onlyproxy one */ #if 0 PRIVATE HTList * onlyproxy = NULL; /* Proxy only on these hosts and domains */ #endif /* ------------------------------------------------------------------------- */ #ifdef HT_POSIX_REGEX PRIVATE char * get_regex_error (int errcode, regex_t * compiled) { size_t length = regerror (errcode, compiled, NULL, 0); char * str = NULL; if ((str = (char *) HT_MALLOC(length+1)) == NULL) HT_OUTOFMEM("get_regex_error"); (void) regerror (errcode, compiled, str, length); return str; } PRIVATE regex_t * get_regex_t (const char * regex_str, int cflags) { regex_t * regex = NULL; if (regex_str && *regex_str) { int status; if ((regex = (regex_t *) HT_CALLOC(1, sizeof(regex_t))) == NULL) HT_OUTOFMEM("get_regex_t"); if ((status = regcomp(regex, regex_str, cflags))) { char * err_msg = get_regex_error(status, regex); HTTRACE(PROT_TRACE, "HTProxy..... Regular expression error: %s\n" _ err_msg); HT_FREE(err_msg); HT_FREE(regex); } } return regex; } #endif /* ** Existing entries are replaced with new ones */ PRIVATE BOOL add_object (HTList * list, const char * access, const char * url, BOOL regex, int regex_flags) { HTProxy *me; if (!list || !access || !url || !*url) return NO; if ((me = (HTProxy *) HT_CALLOC(1, sizeof(HTProxy))) == NULL) HT_OUTOFMEM("add_object"); StrAllocCopy(me->access, access); /* Access method */ #ifdef HT_POSIX_REGEX /* ** If we support regular expressions then compile one up for ** this regular expression. Otherwise use is as a normal ** access scheme. */ if (regex) { me->regex = get_regex_t(access, regex_flags < 0 ? W3C_DEFAULT_REGEX_FLAGS : regex_flags); } else #endif { char *ptr = me->access; while ((*ptr = TOLOWER(*ptr))) ptr++; } me->url = HTParse(url, "", PARSE_ACCESS+PARSE_HOST+PARSE_PUNCTUATION); if (*(me->url+strlen(me->url)-1) != '/') StrAllocCat(me->url, "/"); me->url = HTSimplify(&me->url); /* See if we already have this one */ { HTList *cur = list; HTProxy *pres; while ((pres = (HTProxy *) HTList_nextObject(cur)) != NULL) { if (!strcmp(pres->access, me->access)) break; /* We already have it */ } if (pres) { HTTRACE(PROT_TRACE, "HTProxy..... replacing for `%s\' access %s\n" _ me->url _ me->access); HT_FREE(pres->access); HT_FREE(pres->url); #ifdef HT_POSIX_REGEX if (pres->regex) regfree(pres->regex); #endif HTList_removeObject(list, (void *) pres); HT_FREE(pres); } HTTRACE(PROT_TRACE, "HTProxy..... adding for `%s\' access %s\n" _ me->url _ me->access); HTList_addObject(list, (void *) me); } return YES; } PRIVATE BOOL remove_allObjects (HTList * list) { if (list) { HTList *cur = list; HTProxy *pres; while ((pres = (HTProxy *) HTList_nextObject(cur)) != NULL) { HT_FREE(pres->access); HT_FREE(pres->url); #ifdef HT_POSIX_REGEX if (pres->regex) regfree(pres->regex); #endif HT_FREE(pres); } return YES; } return NO; } /* Add an entry to a list of host names ** ------------------------------------ ** Existing entries are replaced with new ones */ PRIVATE BOOL add_hostname (HTList * list, const char * host, const char * access, unsigned port, BOOL regex, int regex_flags) { HTHostList *me; if (!list || !host || !*host) return NO; if ((me = (HTHostList *) HT_CALLOC(1, sizeof(HTHostList))) == NULL) HT_OUTOFMEM("add_hostname"); #ifdef HT_POSIX_REGEX if (regex) me->regex = get_regex_t(host, regex_flags < 0 ? W3C_DEFAULT_REGEX_FLAGS : regex_flags); #endif if (access) { char *ptr; StrAllocCopy(me->access, access); /* Access method */ ptr = me->access; while ((*ptr = TOLOWER(*ptr))) ptr++; } StrAllocCopy(me->host, host); /* Host name */ { char *ptr = me->host; while ((*ptr = TOLOWER(*ptr))) ptr++; } me->port = port; /* Port number */ HTTRACE(PROT_TRACE, "HTHostList.. adding `%s\' to list\n" _ me->host); HTList_addObject(list, (void *) me); return YES; } PRIVATE BOOL remove_AllHostnames (HTList * list) { if (list) { HTList *cur = list; HTHostList *pres; while ((pres = (HTHostList *) HTList_nextObject(cur)) != NULL) { HT_FREE(pres->access); HT_FREE(pres->host); #ifdef HT_POSIX_REGEX if (pres->regex) regfree(pres->regex); #endif HT_FREE(pres); } return YES; } return NO; } /* HTProxy_add ** ----------- ** Registers a proxy as the server to contact for a specific ** access method. `proxy' should be a fully valid name, like ** "http://proxy.w3.org:8001" but domain name is not required. ** If an entry exists for this access then delete it and use the ** ne one. Returns YES if OK, else NO */ PUBLIC BOOL HTProxy_add (const char * access, const char * proxy) { /* ** If this is the first time here then also add a before filter to handle ** proxy authentication and the normal AA after filter as well. ** These filters will be removed if we remove all proxies again. */ if (!proxies) { proxies = HTList_new(); HTNet_addBefore(HTAA_proxyBeforeFilter, NULL, NULL, HT_FILTER_MIDDLE); HTNet_addAfter(HTAuthFilter, NULL, NULL, HT_NO_PROXY_ACCESS, HT_FILTER_MIDDLE); HTNet_addAfter(HTAuthFilter, NULL, NULL, HT_PROXY_REAUTH, HT_FILTER_MIDDLE); } return add_object(proxies, access, proxy, NO, -1); } /* HTProxy_addRegex ** ---------------- ** Registers a proxy as the server to contact for any URL matching the ** regular expression. `proxy' should be a fully valid name, like ** "http://proxy.w3.org:8001". ** If an entry exists for this access then delete it and use the ** new one. Returns YES if OK, else NO */ PUBLIC BOOL HTProxy_addRegex (const char * regex, const char * proxy, int regex_flags) { /* ** If this is the first time here then also add a before filter to handle ** proxy authentication and the normal AA after filter as well. ** These filters will be removed if we remove all proxies again. */ if (!proxies) { proxies = HTList_new(); HTNet_addBefore(HTAA_proxyBeforeFilter, NULL, NULL, HT_FILTER_MIDDLE); HTNet_addAfter(HTAuthFilter, NULL, NULL, HT_NO_PROXY_ACCESS, HT_FILTER_MIDDLE); HTNet_addAfter(HTAuthFilter, NULL, NULL, HT_PROXY_REAUTH, HT_FILTER_MIDDLE); } #ifdef HT_POSIX_REGEX return add_object(proxies, regex, proxy, YES, regex_flags); #else return add_object(proxies, regex, proxy, NO, -1); #endif } /* ** Removes all registered proxies */ PUBLIC BOOL HTProxy_deleteAll (void) { if (remove_allObjects(proxies)) { HTList_delete(proxies); /* ** If we have no more proxies then there is no reason for checking ** proxy authentication. We therefore unregister the filters for ** handling proxy authentication */ HTNet_deleteBefore(HTAA_proxyBeforeFilter); HTNet_deleteAfterStatus(HT_NO_PROXY_ACCESS); HTNet_deleteAfterStatus(HT_PROXY_REAUTH); proxies = NULL; return YES; } return NO; } /* HTGateway_add ** ------------- ** Registers a gateway as the server to contact for a specific ** access method. `gateway' should be a fully valid name, like ** "http://gateway.w3.org:8001" but domain name is not required. ** If an entry exists for this access then delete it and use the ** ne one. Returns YES if OK, else NO */ PUBLIC BOOL HTGateway_add (const char * access, const char * gate) { if (!gateways) gateways = HTList_new(); return add_object(gateways, access, gate, NO, -1); } /* ** Removes all registered gateways */ PUBLIC BOOL HTGateway_deleteAll (void) { if (remove_allObjects(gateways)) { HTList_delete(gateways); gateways = NULL; return YES; } return NO; } /* HTNoProxy_add ** ------------- ** Registers a host name or a domain as a place where no proxy should ** be contacted - for example a very fast link. If `port' is '0' then ** it applies to all ports and if `access' is NULL then it applies to ** to all access methods. ** ** Examples: w3.org ** www.close.com */ PUBLIC BOOL HTNoProxy_add (const char * host, const char * access, unsigned port) { if (!noproxy) noproxy = HTList_new(); return add_hostname(noproxy, host, access, port, NO, -1); } /* HTNoProxy_addRegex ** ------------------ ** Registers a regular expression where URIs matching this expression ** should go directly and not via a proxy. ** */ PUBLIC BOOL HTNoProxy_addRegex (const char * regex, int regex_flags) { if (!noproxy) noproxy = HTList_new(); #ifdef HT_POSIX_REGEX return add_hostname(noproxy, regex, NULL, 0, YES, regex_flags); #else return add_hostname(noproxy, regex, NULL, 0, NO, -1); #endif } /* HTNoProxy_deleteAll ** ------------------- ** Removes all registered no_proxy directives */ PUBLIC BOOL HTNoProxy_deleteAll (void) { if (remove_AllHostnames(noproxy)) { HTList_delete(noproxy); noproxy = NULL; return YES; } return NO; } /* HTNProxy_noProxyIsOnlyProxy ** `---------------------------- ** Returns the state of the noproxy_is_onlyproxy flag */ PUBLIC int HTProxy_NoProxyIsOnlyProxy (void) { return noproxy_is_onlyproxy; } /* HTNProxy_setNoProxyisOnlyProxy ** -------------------------- ** Sets the state of the noproxy_is_onlyproxy flag */ PUBLIC void HTProxy_setNoProxyIsOnlyProxy (int value) { noproxy_is_onlyproxy = value; } /* HTProxy_find ** ------------ ** This function evaluates the lists of registered proxies and if ** one is found for the actual access method and it is not registered ** in the `noproxy' list, then a URL containing the host to be contacted ** is returned to the caller. This string must be freed be the caller. ** ** Returns: proxy If OK (must be freed by caller) ** NULL If no proxy is found or error */ PUBLIC char * HTProxy_find (const char * url) { char * access; char * proxy = NULL; int no_proxy_found = 0; if (!url || !proxies) return NULL; access = HTParse(url, "", PARSE_ACCESS); /* First check if the host (if any) is registered in the noproxy list */ if (noproxy) { char *host = HTParse(url, "", PARSE_HOST); char *ptr; unsigned port=0; if ((ptr = strchr(host, ':')) != NULL) { *ptr++ = '\0'; /* Chop off port */ if (*ptr) port = (unsigned) atoi(ptr); } if (*host) { /* If we have a host name */ HTList *cur = noproxy; HTHostList *pres; while ((pres = (HTHostList *) HTList_nextObject(cur)) != NULL) { #ifdef HT_POSIX_REGEX if (pres->regex) { BOOL match = regexec(pres->regex, url, 0, NULL, 0) ? NO : YES; if (match) { HTTRACE(PROT_TRACE, "GetProxy.... No proxy directive found: `%s\'\n" _ pres->host); no_proxy_found = 1; break; } } else #endif if (!pres->access || (pres->access && !strcmp(pres->access, access))) { if ((pres->port == 0) || (pres->port == port)) { char *np = pres->host+strlen(pres->host); char *hp = host+strlen(host); while (np>=pres->host && hp>=host && (*np--==*hp--)); if (np==pres->host-1 && (hp==host-1 || *hp=='.')) { HTTRACE(PROT_TRACE, "GetProxy.... No proxy directive found: `%s\'\n" _ pres->host); no_proxy_found = 1; break; } } } } } HT_FREE(host); } if ((no_proxy_found && !noproxy_is_onlyproxy) || (!no_proxy_found && noproxy_is_onlyproxy)) { HT_FREE(access); return NULL; } /* Now check if we have a proxy registered for this access method */ { HTList *cur = proxies; HTProxy *pres; while ((pres = (HTProxy *) HTList_nextObject(cur)) != NULL) { #ifdef HT_POSIX_REGEX if (pres->regex) { BOOL match = regexec(pres->regex, url, 0, NULL, 0) ? NO : YES; if (match) { StrAllocCopy(proxy, pres->url); HTTRACE(PROT_TRACE, "GetProxy.... Found: `%s\'\n" _ pres->url); break; } } else #endif if (!strcmp(pres->access, access)) { StrAllocCopy(proxy, pres->url); HTTRACE(PROT_TRACE, "GetProxy.... Found: `%s\'\n" _ pres->url); break; } } } HT_FREE(access); return proxy; } /* HTGateway_find ** -------------- ** This function evaluates the lists of registered gateways and if ** one is found for the actual access method then it is returned ** ** Returns: gateway If OK (must be freed by caller) ** NULL If no gateway is found or error */ PUBLIC char * HTGateway_find (const char * url) { char * access; char * gateway = NULL; if (!url || !gateways) return NULL; access = HTParse(url, "", PARSE_ACCESS); /* Check if we have a gateway registered for this access method */ { HTList *cur = gateways; HTProxy *pres; while ((pres = (HTProxy *) HTList_nextObject(cur)) != NULL) { if (!strcmp(pres->access, access)) { StrAllocCopy(gateway, pres->url); HTTRACE(PROT_TRACE, "GetGateway.. Found: `%s\'\n" _ pres->url); break; } } } HT_FREE(access); return gateway; } /* ** This function maintains backwards compatibility with the old ** environment variables and searches for the most common values: ** http, ftp, news, wais, and gopher */ PUBLIC void HTProxy_getEnvVar (void) { char buf[80]; static const char *accesslist[] = { "http", "ftp", "news", "wais", "gopher", NULL }; const char **access = accesslist; HTTRACE(PROT_TRACE, "Proxy....... Looking for environment variables\n"); while (*access) { BOOL found = NO; char *gateway=NULL; char *proxy=NULL; /* Search for proxy gateways */ if (found == NO) { strcpy(buf, *access); strcat(buf, "_proxy"); if ((proxy = (char *) getenv(buf)) && *proxy) { HTProxy_add(*access, proxy); found = YES; } /* Try the same with upper case */ if (found == NO) { char * up = buf; while ((*up = TOUPPER(*up))) up++; if ((proxy = (char *) getenv(buf)) && *proxy) { HTProxy_add(*access, proxy); found = YES; } } } /* As a last resort, search for gateway servers */ if (found == NO) { strcpy(buf, "WWW_"); strcat(buf, *access); strcat(buf, "_GATEWAY"); if ((gateway = (char *) getenv(buf)) && *gateway) { HTGateway_add(*access, gateway); found = YES; } } ++access; } /* Search for `noproxy' directive */ { char *noproxy = getenv("no_proxy"); if (noproxy && *noproxy) { char *str = NULL; char *strptr; char *name; StrAllocCopy(str, noproxy); /* Get copy we can mutilate */ strptr = str; while ((name = HTNextField(&strptr)) != NULL) { char *portstr = strchr(name, ':'); unsigned port=0; if (portstr) { *portstr++ = '\0'; if (*portstr) port = (unsigned) atoi(portstr); } /* Register it for all access methods */ HTNoProxy_add(name, NULL, port); } HT_FREE(str); } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTProxy.html���������������������������������������������������������������������0100644�0000764�0000144�00000013773�07056753367�016244� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Proxies and Gateways</TITLE> </HEAD> <BODY> <H1> Proxy and gateway Manager </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module keeps a list of proxies and gateways to be contacted on a request in stead of requesting it directly from the origin server. The module replaces the old system of environment variables for gateways and proxies. However for backward compatibility there is a function that reads the environment variables at start up. Note that there is a difference between a proxy and a gateway - the difference is the way the URL is set up in the <EM>RequestLine</EM> of the HTTP request. If the original, full URL looks like <CODE>"http://www.w3.org/test.html"</CODE> then the result will for a proxy is <CODE>"http://www.w3.org/test.html"</CODE> and a gateway <CODE>"/www.w3.org/test.html"</CODE> <P> The module is implemented by <A HREF="HTProxy.c">HTProxy.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE>#ifndef HTPROXY_H #define HTPROXY_H #include "HTList.h" </PRE> <H2> Registering a Proxy Server </H2> <P> A proxy server is registered with a corresponding access method, for example <EM>http</EM>, <EM>ftp</EM> etc. The `proxy' parameter should be a fully valid name, like <CODE>http://proxy.w3.org:8001</CODE> but domain name is not required. If an entry exists for this access then delete it and use the new one. <PRE> extern BOOL HTProxy_add (const char * access, const char * proxy); </PRE> <H3> Registering a Proxy Using Regular Expressions </H3> <P> Registers a proxy as the server to contact for any URL matching the regular expression. This requires that you have compiled with the <TT>HT_POSIX_REGEX</TT> flag, see the <A HREF="/">installation instructions</A>. If you call this function without having compiled with the <TT>HT_POSIX_REGEX</TT> flag then you will essentially get the non-regex version.&nbsp;The name of the proxy should be a fully valid URL, like "<TT>http://proxy.w3.org:8001</TT>". Returns YES if OK, else NO <PRE> extern BOOL HTProxy_addRegex (const char * regex, const char * proxy, int regex_flags); </PRE> <H3> Deleting All Registered Proxies </H3> <PRE> extern BOOL HTProxy_deleteAll (void); </PRE> <P> The remove function removes all registered proxies. This is automatically done in <A HREF="HTLib.html"> HTLibTerminate()</A> <A NAME="noproxy"></A> <H2> Registering a No Proxy Location </H2> <P> The <EM>noproxy</EM> list is a list of host names and domain names where we don't contact a proxy even though a proxy is in fact registered for this particular access method . When registering a <EM>noproxy</EM> item, you can specify a specific port for this access method in which case it isvalid only for requests to this port. If `port' is '0' then it applies to all ports and if `access' is NULL then it applies to to all access methods. Examples of host names are <CODE>w3.org</CODE> and <CODE>www.close.com</CODE> <PRE> extern BOOL HTNoProxy_add (const char * host, const char * access, unsigned port); </PRE> <H3> Registering a NoProxy Location Using Regular Expressions </H3> <P> Registers a regular expression where URIs matching this expression should go directly and not via a proxy. Examples: <CODE>http://&lt;star&gt;\.w3\.org</CODE> and <CODE>http://www\.noproxy\.com/&lt;star&gt;</CODE> (I use <TT>&lt;star&gt;</TT> in order not interfere with C comments) This requires that you have compiled with the <TT>HT_POSIX_REGEX</TT> flag, see the <A HREF="/">installation instructions</A>. If you call this function without having compiled with the <TT>HT_POSIX_REGEX</TT> flag then you will essentially get the non-regex version.&nbsp; <PRE> extern BOOL HTNoProxy_addRegex (const char * regex, int regex_flags); </PRE> <H3> Delete all Noproxy Destinations </H3> <PRE> extern BOOL HTNoProxy_deleteAll (void); </PRE> <P> The remove function removes all entries in the list. This is automatically done in <A HREF="HTLib.html"> HTLibTerminate()</A> <H3> Inverse the meaning of the NoProxy list </H3> <P> Allows to change the value of a flag so that the NoProxy list is interpreted as if it were an OnlyProxy list. <PRE> extern int HTProxy_NoProxyIsOnlyProxy (void); extern void HTProxy_setNoProxyIsOnlyProxy (int value); </PRE> <H2> Look for a Proxy server </H2> <P> This function evaluates the lists of registered proxies and if one is found for the actual access method and it is not registered in the `noproxy' list, then a URL containing the host to be contacted is returned to the caller. This string must be freed be the caller. <PRE> extern char * HTProxy_find (const char * url); </PRE> <H2> Registering a gateway </H2> <P> A gateway is registered with a corresponding access method, for example <EM>http</EM>, <EM>ftp</EM> etc. The `gate' parameter should be a fully valid name, like <CODE>http://gateway.w3.org:8001</CODE> but domain name is not required. If an entry exists for this access then delete it and use the new one. <PRE> extern BOOL HTGateway_add (const char * access, const char * gate); extern BOOL HTGateway_deleteAll (void); </PRE> <P> The remove function removes all registered proxies. This is automatically done in <A HREF="HTLib.html"> HTLibTerminate()</A> <H2> Look for a Gateway </H2> <P> This function evaluates the lists of registered gateways and if one is found for the actual access method then it is returned and must be freed by the caller. <PRE> extern char * HTGateway_find (const char * url); </PRE> <H2> Backwards Compability with Environment Variables </H2> <P> This function maintains backwards compatibility with the old environment variables and searches for the most common values: http, ftp, news, wais, and gopher <PRE> extern void HTProxy_getEnvVar (void); </PRE> <PRE> #endif /* HTPROXY_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTProxy.html,v 2.14 2025/02/29 14:25:59 kahan Exp $ </ADDRESS> </BODY></HTML> �����libwww/Library/src/HTRDF.c��������������������������������������������������������������������������0100644�0000764�0000144�00000240561�07153202705�014770� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** RDF PARSER ** ** @(#) $Id: HTRDF.c,v 2.12 2025/08/30 13:01:57 barstow Exp $ ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** This module requires expat ** ** AUTHOR: ** John Punin <puninj@cs.rpi.edu>, ** Henrik */ #include "WWWLib.h" #include "WWWInit.h" #include "WWWXML.h" #include "HTRDF.h" struct _HTStream { const HTStreamClass * isa; int state; HTRequest * request; HTStream * target; HTRDF * rdfparser; }; #define PUTC(t,c) (*(t)->target->isa->put_character)((t)->target, (c)) #define PUTS(t,s) (*(t)->target->isa->put_string)((t)->target, (s)) struct _HTTriple { char * m_sPredicate; char * m_sSubject; char * m_sObject; }; struct _HTElement { char * m_sName; HTAssocList * m_attributes; HTList * m_children; char * m_sID; char * m_sBagID; HTList * m_vTargets; BOOL m_bDone; char * m_sPrefix; char * m_sContent; }; struct _HTRDFParser { HTList * m_namespaceStack; HTList * m_elementStack; HTList * m_literalStack; HTElement * m_root; HTList * m_triples; char * m_sSource; HTList * m_vAllNameSpaces; BOOL m_bCreateBags; BOOL m_bFetchSchemas; HTList * m_parseTypeStack; HTList * m_parseElementStack; char * m_sLiteral; HTList * m_vResources; HTList * m_vResolveQueue; HTHashtable * m_hIDtable; int m_iReificationCounter; HTStream * ostream; HTTripleCallback_new * newTripleInstance; void * tripleContext; }; /* @@@ Should not be global but controlled by name spaces @@@ */ PRIVATE HTRDFCallback_new * RDFInstance = NULL; PRIVATE void * RDFInstanceContext = NULL; PRIVATE char * HTRDF_processContainer (HTRDF *me, HTElement *e); PRIVATE char * HTRDF_processPredicate (HTRDF *me, HTElement *predicate, HTElement *description, char * sTarget, BOOL reificate); PRIVATE void HTRDF_processListItem (HTRDF *me,char * sID, HTElement *listitem, int iCounter); PRIVATE void HTRDF_checkAttributes (HTRDF *me,HTElement *Element); PRIVATE BOOL HTRDF_expandAttributes (HTRDF *me, HTElement *parent, HTElement *ele); PRIVATE char * HTRDF_reificate (HTRDF *me, char * sPredicate, char * sSubject, char * sObject, char * sNodeID); /* ------------------------------------------------------------------------- */ /* ** Append the markup for the given element and its attribute to the ** parser's "Literal" buffer. This buffer is filled in when parseType="Literal". */ PRIVATE void addMarkupStart (HTRDF *rdfp, const char *name, const char **atts) { int i=0; if (!rdfp || !name) return; StrAllocMCat(&rdfp->m_sLiteral, "<", name, NULL); while (atts[i]) { StrAllocMCat(&rdfp->m_sLiteral, " ", atts[i], "=\"", atts[i+1], "\"", NULL); i+=2; } StrAllocCat(rdfp->m_sLiteral, ">"); } /* ** Terminate this element's "Literal" buffer. This buffer is filled in when ** parseType="Literal". */ PRIVATE void addMarkupEnd (HTRDF *rdfp, const char *name) { if (!rdfp || !name) return; StrAllocMCat(&rdfp->m_sLiteral, "</", name, ">", NULL); } /* ------------------------------------------------------------------------- */ /* ** Searches a whole list of Strings and returns true if the String is found. */ PRIVATE BOOL HTList_contains (HTList *list, char * s) { HTList *cur = list; char * cs = NULL; while ((cs = (char *) HTList_nextObject(cur))) { if (!strcmp(cs, s)) return YES; } return NO; } /* ** Useful function that Trims a string ** @@@ Should use HTStrip() @@@ */ PRIVATE char * trim (char *s) { char *p = NULL, *t = NULL; int len = s ? strlen(s) : -1; if (s && len > 0) { StrAllocCopy(t, s); p = &(s[len-1]); while(p!=s) { if (!isspace((int)(*p))) break; p--; } t[(int)(p-s)+1] = '\0'; if (isspace((int) t[(int)(p-s)])) t[(int)(p-s)] = '\0'; } return t; } /* ------------------------------------------------------------------------- */ /* TRIPLE of RDF */ /* ------------------------------------------------------------------------- */ PUBLIC HTTriple * HTTriple_new (char * p, char * s, char * o) { HTTriple * me = NULL; if (p && s && o) { if ((me = (HTTriple *) HT_CALLOC(1, sizeof(HTTriple))) == NULL) HT_OUTOFMEM("HTTriple_new"); StrAllocCopy(me->m_sPredicate, p); StrAllocCopy(me->m_sSubject, s); StrAllocCopy(me->m_sObject, o); } return me; } PUBLIC BOOL HTTriple_delete (HTTriple * me) { if (me) { HT_FREE(me->m_sPredicate); HT_FREE(me->m_sSubject); HT_FREE(me->m_sObject); HT_FREE(me); return YES; } return NO; } PUBLIC void HTTriple_print (HTTriple * me) { if (me) HTPrint("TRIPLE(%s,%s,%s)\n", me->m_sPredicate, me->m_sSubject, me->m_sObject); } PUBLIC char * HTTriple_subject (HTTriple * me) { return me ? me->m_sSubject : NULL; } PUBLIC char * HTTriple_predicate (HTTriple * me) { return me ? me->m_sPredicate : NULL; } PUBLIC char * HTTriple_object (HTTriple * me) { return me ? me->m_sObject : NULL; } /* ------------------------------------------------------------------------- */ /* ELEMENT of RDF */ /* ------------------------------------------------------------------------- */ PUBLIC HTElement * HTElement_new (char * sName, HTAssocList * al) { HTElement * me = NULL; if (sName) { if ((me = (HTElement *) HT_CALLOC(1, sizeof(HTElement))) == NULL) HT_OUTOFMEM("HTElement_new"); StrAllocCopy(me->m_sName, sName); me->m_attributes = al ? al : HTAssocList_new(); me->m_children = HTList_new(); /*me->m_nodes = HTAssocList_new();*/ /* Sirpac does not use nodes list */ me->m_vTargets = HTList_new(); me->m_bDone = FALSE; } return me; } /* ** Creates a Data Element and saves the data in the Content field. ** Data Element does not have attributes */ PUBLIC HTElement * HTElement_new2 (char * sContent) { HTElement * me = NULL; if (sContent) { if ((me = (HTElement *) HT_CALLOC(1, sizeof(HTElement))) == NULL) HT_OUTOFMEM("HTElement_new2"); StrAllocMCopy(&me->m_sName, "[DATA: ", sContent, "]", NULL); me->m_attributes = NULL; me->m_children = HTList_new(); /*me->m_nodes = HTAssocList_new();*/ me->m_vTargets = HTList_new(); me->m_bDone = FALSE; StrAllocCopy(me->m_sContent, sContent); } return me; } PUBLIC BOOL HTElement_addData (HTElement *me, char * sContent) { if (me && sContent) { int l = strlen(me->m_sName); StrAllocCat(me->m_sContent, sContent); me->m_sName[l-1]='\0'; StrAllocMCat(&me->m_sName, sContent, "]", NULL); return YES; } return NO; } PUBLIC BOOL HTElement_delete (HTElement * me) { if (me) { HT_FREE(me->m_sName); if (me->m_attributes) HTAssocList_delete(me->m_attributes); if (me->m_children) HTList_delete(me->m_children); HT_FREE(me->m_sID); HT_FREE(me->m_sBagID); if (me->m_vTargets) HTList_delete(me->m_vTargets); HT_FREE(me->m_sPrefix); HT_FREE(me->m_sContent); HT_FREE(me); return YES; } return NO; } PUBLIC BOOL HTElement_addChild (HTElement * me, HTElement * element) { return (me && element) ? HTList_appendObject(me->m_children, element) : NO; } PUBLIC BOOL HTElement_addAttribute (HTElement * me, char * sName, char * sValue) { return (me && sName && sValue) ? HTAssocList_addObject(me->m_attributes, sName, sValue) : NO; } PUBLIC BOOL HTElement_removeAttribute (HTElement * me, char * sName) { return (me && sName) ? HTAssocList_removeObject(me->m_attributes, sName) : NO; } PUBLIC char * HTElement_getAttribute (HTElement * me, char * sName) { return (me && sName) ? HTAssocList_findObjectCaseSensitiveExact(me->m_attributes, sName) : NULL; } PUBLIC char * HTElement_getAttribute2 (HTElement * me, char * sNamespace, char * sName) { char * fValue = NULL; char * fName = NULL; if (me && sNamespace && sName) { StrAllocMCopy(&fName, sNamespace, sName, NULL); fValue = HTAssocList_findObjectCaseSensitiveExact(me->m_attributes, fName); HT_FREE(fName); } return fValue; } PUBLIC BOOL HTElement_addTarget (HTElement * me, HTElement * element) { return (me && element) ? HTList_addObject(me->m_vTargets, element) : NO; } PUBLIC HTElement * HTElement_target (HTElement * me) { return me ? (HTElement *) HTList_lastObject(me->m_vTargets) : NULL; } PUBLIC BOOL HTElement_instanceOfData (HTElement * me) { return (me && me->m_sContent) ? YES : NO; } /* ------------------------------------------------------------------------- */ /* EXPAT HANDLERS */ /* ------------------------------------------------------------------------- */ /* * Called for each new element. * Build up the document tree using an element stack */ PRIVATE void XML_startElement (void * userData, const XML_Char * name, const XML_Char ** atts) { HTRDF * rdfp = (HTRDF *) userData; HTAssocList * namespaces = HTAssocList_new(); HTAssocList * newAL = HTAssocList_new(); int i = 0; /** * The following loop tries to identify special xmlns prefix * attributes and update the namespace stack accordingly. * While doing all this, it builds another AttributeList instance * which will hold the expanded names of the attributes * (I think this approach is only useful for RDF which uses * attributes as an abbreviated syntax for element names) */ if (atts) { while (atts[i]) { char * aName = (char * ) atts[i]; if (!strcmp(aName, "xmlns")) { char * aValue = (char *) atts[i+1]; int len = aValue ? strlen(aValue) : -1; if (len == 0 && !rdfp->m_sSource) aValue = rdfp->m_sSource; HTAssocList_addObject(namespaces, aName, aValue); /* save all non-RDF schema addresses */ if (!HTList_contains(rdfp->m_vAllNameSpaces, aValue) && strncmp(aValue, RDFMS, strlen(RDFMS)) && strncmp(aValue, RDFSCHEMA, strlen(RDFSCHEMA))) { char * nname = NULL; StrAllocCopy(nname, aValue); HTList_addObject(rdfp->m_vAllNameSpaces, nname); } /* Special case: Don't save document's own address */ if (rdfp->m_sSource && !strncmp(aValue, rdfp->m_sSource, strlen(rdfp->m_sSource))) { char * nname = NULL; StrAllocCopy(nname, aValue); HTList_addObject(rdfp->m_vAllNameSpaces, nname); } } else if (!strncmp(aName, "xmlns:", 6)) { char * aValue = (char *) atts[i+1]; char * nName = NULL; int len = aValue ? strlen(aValue) : -1; if (len == 0 && !rdfp->m_sSource) aValue = rdfp->m_sSource; StrAllocCopy(nName, &(aName[6])); HTAssocList_addObject(namespaces, nName, aValue); HT_FREE(nName); /* Save all non-RDF schema addresses */ if (!HTList_contains(rdfp->m_vAllNameSpaces, aValue) && strncmp(aValue, RDFMS, strlen(RDFMS)) && strncmp(aValue, RDFSCHEMA, strlen(RDFSCHEMA))) { char * nname = NULL; StrAllocCopy(nname, aValue); HTList_addObject(rdfp->m_vAllNameSpaces, nname); } /* Special case: Don't save document's own address */ if (rdfp->m_sSource && !strncmp(aValue, rdfp->m_sSource, strlen(rdfp->m_sSource))) { char * nname = NULL; StrAllocCopy(nname, aValue); HTList_addObject(rdfp->m_vAllNameSpaces, nname); } } i+=2; } /* end of while */ } /* end of if */ /* ** Place new namespace declarations into the stack ** (Yes, I could optimize this a bit, not it wastes space ** if there are no xmlns definitions) */ HTList_addObject(rdfp->m_namespaceStack, namespaces); /* ** Figure out the prefix part if it exists and ** determine the namespace of the element accordingly */ { char * sNamespace = NULL; char * sElementName = NULL; char * sPrefix2 = NULL; HTElement *newElement = NULL; char *pindex = strchr(name, ':'); int ix = pindex ? (int) (pindex - name) : -1 ; if (ix > 0) { if (!(sPrefix2 = HT_MALLOC(ix+1))) HT_OUTOFMEM("XML_startELement"); strncpy(sPrefix2, name, ix); sPrefix2[ix]='\0'; sNamespace = HTRDF_namespace(rdfp, sPrefix2); StrAllocCopy(sElementName, &(name[ix+1])); HT_FREE(sPrefix2); } else { sNamespace = HTRDF_namespace(rdfp, "xmlns"); StrAllocCopy(sElementName, name); } /* * Finally look for attributes other than the special xmlns, * expand them, and place to the new Attribute List */ i = 0; if (atts) { while (atts[i]) { char * aName = (char *) atts[i]; char * sAttributeNamespace = NULL; if (strncmp(aName, "xmlns", 5)) { char * aValue = (char *) atts[i+1]; char * sPrefix = NULL; /* Expat does not have type for attributes */ pindex = strchr(aName, ':'); ix = pindex ? (int) (pindex - aName) : -1; if (ix > 0) { if (!(sPrefix = HT_MALLOC(ix+1))) HT_OUTOFMEM("XML_startELement"); strncpy(sPrefix, aName, ix); sPrefix[ix] = '\0'; sAttributeNamespace = HTRDF_namespace(rdfp, sPrefix); aName = &(aName[ix+1]); HT_FREE(sPrefix); } else { if (!sNamespace) sAttributeNamespace = HTRDF_namespace(rdfp, "xmlns"); else StrAllocCopy(sAttributeNamespace, sNamespace); } if (HTRDF_parseLiteral(rdfp)) { if (!sPrefix) { if (!(sPrefix = HT_MALLOC(8))) HT_OUTOFMEM("XML_startELement"); sprintf(sPrefix, "gen%d\n", i); } { char * fName = NULL; StrAllocMCopy(&fName, sPrefix, ":", aValue, NULL); HTAssocList_addObject(newAL, fName, aValue); HT_FREE(fName); StrAllocMCopy(&fName, "xmlns:", sPrefix, NULL); HTAssocList_addObject(newAL, fName, sAttributeNamespace); HT_FREE(fName); } } else { char * fName = NULL; StrAllocMCopy(&fName, sAttributeNamespace, aName, NULL); HTAssocList_addObject(newAL, fName, aValue); HT_FREE(fName); } HT_FREE(sAttributeNamespace); /* ** This call will try to see if the user is using ** RDF look-alike elements from another namespace ** ** Note: you can remove the call if you wish */ #if 0 HTRDF_likeRDF (rdfp, sAttributeNamespace, aName); #endif } /* end of if */ i+=2; } /* end of while */ } /* end of if atts */ /* * If we have parseType="Literal" set earlier, this element * needs some additional attributes to make it stand-alone * piece of XML */ if (HTRDF_parseLiteral(rdfp)) { char * fName = NULL; if (!sPrefix2) { if (sNamespace) HTAssocList_addObject(newAL, "xmlns:gen", sNamespace); StrAllocMCopy(&fName, "gen", sElementName, NULL); newElement = HTElement_new(fName, newAL); StrAllocCopy(newElement->m_sPrefix, "gen"); HT_FREE(fName); } else { char * sAttributeNamespace = HTRDF_namespace(rdfp, sPrefix2); if (sAttributeNamespace) { StrAllocMCopy(&fName, "xmlns:", sPrefix2, NULL); HTAssocList_addObject(newAL, fName, sAttributeNamespace); HT_FREE(fName); } StrAllocMCopy(&fName, sPrefix2, ":", sElementName, NULL); newElement = HTElement_new(fName, newAL); HT_FREE(fName); } } else { char * fName = NULL; StrAllocMCopy(&fName, sNamespace, sElementName, NULL); newElement = HTElement_new(fName, newAL); HT_FREE(fName); /* HTRDF_likeRDF (rdfp, sNamespace, sElementName); */ } HT_FREE(sElementName); HT_FREE(sNamespace); HTRDF_checkAttributes(rdfp, newElement); /* ** Check parseType */ { char * fName = NULL; char * sLiteralValue = NULL; StrAllocMCopy(&fName, RDFMS, "parseType", NULL); sLiteralValue = HTElement_getAttribute(newElement, fName); HT_FREE(fName); if (sLiteralValue && strcmp(sLiteralValue, "Resource")) { /** * This is the management of the element where * parseType="Literal" appears * * You should notice RDF V1.0 conforming implementations * must treat other values than Literal and Resource as * Literal. This is why the condition is !equals("Resource") */ HTList_addObject(rdfp->m_parseTypeStack, sLiteralValue); if (!HTList_isEmpty(rdfp->m_elementStack)) { HTElement *e = (HTElement *) HTList_lastObject(rdfp->m_elementStack); HTElement_addChild(e, newElement); } HTList_addObject(rdfp->m_elementStack, newElement); HTList_addObject(rdfp->m_parseElementStack, newElement); HT_FREE(rdfp->m_sLiteral); StrAllocCopy(rdfp->m_sLiteral, ""); return; } if (HTRDF_parseLiteral(rdfp)) { /* * This is the management of any element nested within * a parseType="Literal" declaration */ /* Add the element to the parser's literal buffer */ addMarkupStart (rdfp, name, atts); /* Add this literal element to the literal stack */ if (!HTList_isEmpty(rdfp->m_literalStack)) { HTElement *e = (HTElement *) HTList_lastObject(rdfp->m_literalStack); HTElement_addChild(e, newElement); } HTList_addObject(rdfp->m_literalStack, newElement); HTList_addObject(rdfp->m_elementStack, newElement); return; } /* ** Update the containment hierarchy with the stack. */ if (!HTList_isEmpty(rdfp->m_elementStack)) { HTElement *e = (HTElement *) HTList_lastObject(rdfp->m_elementStack); HTElement_addChild(e, newElement); } /* ** Place the new element into the stack */ HTList_addObject(rdfp->m_elementStack, newElement); if (sLiteralValue && !strcmp(sLiteralValue, "Resource")) { HTList_addObject(rdfp->m_parseTypeStack, sLiteralValue); HTList_addObject(rdfp->m_parseElementStack, newElement); HT_FREE(rdfp->m_sLiteral); StrAllocCopy(rdfp->m_sLiteral, ""); /* * Since parseType="Resource" implies the following * production must match Description, let's create * an additional Description node here in the document tree. */ { char * fName = NULL; HTElement *desc = NULL; HTAssocList * al = HTAssocList_new (); StrAllocMCopy(&fName, RDFMS, "Description", NULL); desc = HTElement_new(fName, al); HT_FREE(fName); if (!HTList_isEmpty(rdfp->m_elementStack)) { HTElement *e = (HTElement *) HTList_lastObject(rdfp->m_elementStack); HTElement_addChild(e, desc); } HTList_addObject(rdfp->m_elementStack, desc); } } /* end of if */ } /* end of block */ } /* end of block */ } /* * For each end of an element scope step back in the * element and namespace stack */ PRIVATE void XML_endElement (void * userData, const XML_Char * name) { HTRDF * rdfp = (HTRDF *) userData; BOOL bParseLiteral = rdfp ? HTRDF_parseLiteral(rdfp) : NO; HTAssocList * namespaces = HTList_removeLastObject(rdfp->m_namespaceStack); rdfp->m_root = (HTElement *) HTList_removeLastObject(rdfp->m_elementStack); if (namespaces) HTAssocList_delete(namespaces); if (bParseLiteral) { HTElement *pe = (HTElement *) HTList_lastObject(rdfp->m_parseElementStack); if (pe != rdfp->m_root) { /* Terminate the literal */ addMarkupEnd (rdfp, name); } else { HTElement *de = HTElement_new2(rdfp->m_sLiteral); HTElement_addChild(pe, de); HT_FREE(rdfp->m_sLiteral); StrAllocCopy(rdfp->m_sLiteral, ""); HTList_removeLastObject(rdfp->m_parseElementStack); HTList_removeLastObject(rdfp->m_parseTypeStack); } } else if (HTRDF_parseResource(rdfp)) { /** * If we are doing parseType="Resource" * we need to explore whether the next element in * the stack is the closing element in which case * we remove it as well (remember, there's an * extra Description element to be removed) */ if (!HTList_isEmpty(rdfp->m_elementStack)) { HTElement *pe = (HTElement *) HTList_lastObject(rdfp->m_parseElementStack); HTElement *e = (HTElement *) HTList_lastObject(rdfp->m_elementStack); if (pe == e) { e = (HTElement *) HTList_removeLastObject(rdfp->m_elementStack); HTList_removeLastObject(rdfp->m_parseElementStack); HTList_removeLastObject(rdfp->m_parseTypeStack); } } } } PRIVATE void XML_characterData (void * userData, const XML_Char * s, int len) { /* * Place all characters as Data instance to the containment * hierarchy with the help of the stack. */ HTRDF * rdfp = (HTRDF *) userData; HTElement * e = (HTElement *) HTList_lastObject(rdfp->m_elementStack); char * tstr = NULL; char * str = NULL; if (!(str = (char *) HT_MALLOC(len+1))) HT_OUTOFMEM("XML_characterData"); strncpy(str, s, len); str[len]='\0'; if (HTRDF_parseLiteral(rdfp)) { StrAllocCat(rdfp->m_sLiteral, str); HT_FREE(str); return; } /* JUST FOR EXPAT */ { HTElement *lch = (HTElement *) HTList_lastObject(e->m_children); if (lch && HTElement_instanceOfData(lch)) { HTElement_addData(lch, str); HT_FREE(str); return; } } /* * Warning: this is not correct procedure according to XML spec. * All whitespace matters! */ tstr = trim(str); if (strlen(tstr) > 0) { HTElement * de = HTElement_new2(tstr); HTElement_addChild(e, de); } HT_FREE(str); HT_FREE(tstr); } PRIVATE void XML_processingInstruction (void * userData, const XML_Char * target, const XML_Char * data) { return; } /* ** This is called for any characters in the XML document for ** which there is no applicable handler. This includes both ** characters that are part of markup which is of a kind that is ** not reported (comments, markup declarations), or characters ** that are part of a construct which could be reported but ** for which no handler has been supplied. The characters are passed ** exactly as they were in the XML document except that ** they will be encoded in UTF-8. Line boundaries are not normalized. ** Note that a byte order mark character is not passed to the default handler. ** If a default handler is set, internal entity references ** are not expanded. There are no guarantees about ** how characters are divided between calls to the default handler: ** for example, a comment might be split between multiple calls. */ PRIVATE void XML_default (void * userData, const XML_Char * s, int len) { return; } /* ** This is called for a declaration of an unparsed (NDATA) ** entity. The base argument is whatever was set by XML_SetBase. ** The entityName, systemId and notationName arguments will never be null. ** The other arguments may be. */ PRIVATE void XML_unparsedEntityDecl (void * userData, const XML_Char * entityName, const XML_Char * base, const XML_Char * systemId, const XML_Char * publicId, const XML_Char * notationName) { return; } /* ** This is called for a declaration of notation. ** The base argument is whatever was set by XML_SetBase. ** The notationName will never be null. The other arguments can be. */ PRIVATE void XML_notationDecl (void * userData, const XML_Char * notationName, const XML_Char * base, const XML_Char * systemId, const XML_Char * publicId) { return; } /* ** This is called for a reference to an external parsed general entity. ** The referenced entity is not automatically parsed. ** The application can parse it immediately or later using ** XML_ExternalEntityParserCreate. ** The parser argument is the parser parsing the entity containing the reference; ** it can be passed as the parser argument to XML_ExternalEntityParserCreate. ** The systemId argument is the system identifier as specified in the entity ** declaration; it will not be null. ** The base argument is the system identifier that should be used as the base for ** resolving systemId if systemId was relative; this is set by XML_SetBase; ** it may be null. ** The publicId argument is the public identifier as specified in the entity declaration, ** or null if none was specified; the whitespace in the public identifier ** will have been normalized as required by the XML spec. ** The openEntityNames argument is a space-separated list of the names of the entities ** that are open for the parse of this entity (including the name of the referenced ** entity); this can be passed as the openEntityNames argument to ** XML_ExternalEntityParserCreate; openEntityNames is valid only until the handler ** returns, so if the referenced entity is to be parsed later, it must be copied. ** The handler should return 0 if processing should not continue because of ** a fatal error in the handling of the external entity. ** In this case the calling parser will return an XML_ERROR_EXTERNAL_ENTITY_HANDLING ** error. ** Note that unlike other handlers the first argument is the parser, not userData. */ PRIVATE int XML_externalEntityRef (XML_Parser parser, const XML_Char * openEntityNames, const XML_Char * base, const XML_Char * systemId, const XML_Char * publicId) { return 0; } /* ** This is called for an encoding that is unknown to the parser. ** The encodingHandlerData argument is that which was passed as the ** second argument to XML_SetUnknownEncodingHandler. ** The name argument gives the name of the encoding as specified in ** the encoding declaration. ** If the callback can provide information about the encoding, ** it must fill in the XML_Encoding structure, and return 1. ** Otherwise it must return 0. ** If info does not describe a suitable encoding, ** then the parser will return an XML_UNKNOWN_ENCODING error. */ PRIVATE int XML_unknownEncoding (void * encodingHandlerData, const XML_Char * name, XML_Encoding * info) { return 0; } /* ------------------------------------------------------------------------- */ /* HTXML STREAM HANDLERS */ /* ------------------------------------------------------------------------- */ PRIVATE void rdf_setHandlers (XML_Parser me) { XML_SetElementHandler(me, XML_startElement, XML_endElement); XML_SetCharacterDataHandler(me, XML_characterData); XML_SetProcessingInstructionHandler(me, XML_processingInstruction); XML_SetDefaultHandler(me, XML_default); XML_SetUnparsedEntityDeclHandler(me, XML_unparsedEntityDecl); XML_SetNotationDeclHandler(me, XML_notationDecl); XML_SetExternalEntityRefHandler(me, XML_externalEntityRef); XML_SetUnknownEncodingHandler(me, XML_unknownEncoding, NULL); } PRIVATE void rdf_newInstance (HTStream * me, HTRequest * request, HTFormat target_format, HTStream * target_stream, XML_Parser xmlparser, void * context) { if (me && xmlparser) { rdf_setHandlers(xmlparser); XML_SetUserData(xmlparser, context); /* Call the new RDF instance callback (if any) with this new stream */ if (RDFInstance) (*RDFInstance)(me, request, target_format, target_stream, context, RDFInstanceContext); } } /* ------------------------------------------------------------------------- */ /* RDF PARSER */ /* ------------------------------------------------------------------------- */ PRIVATE void visit_element_children (HTList *children) { HTElement *child = NULL; HTList *cur = children; while ((child = (HTElement *) HTList_nextObject(cur))) { if (!HTList_isEmpty(child->m_children)) visit_element_children(child->m_children); HTElement_delete(child); } } PRIVATE void delete_elements (HTRDF * me) { if (me && me->m_root) { HTElement *r = me->m_root; if (!HTList_isEmpty(r->m_children)) visit_element_children(r->m_children); HTElement_delete(r); } } PRIVATE void delete_literal_elements (HTRDF * me) { if (me && me->m_literalStack) { HTList *cur = me->m_literalStack; HTElement *e = NULL; while ((e = (HTElement *) HTList_nextObject(cur))) { HTElement_delete(e); } HTList_delete(me->m_literalStack); } } PUBLIC HTRDF * HTRDF_new (void) { HTRDF * me; if ((me = (HTRDF *) HT_CALLOC(1, sizeof(HTRDF))) == NULL) HT_OUTOFMEM("HTRDF_new"); me->m_namespaceStack = HTList_new(); me->m_elementStack = HTList_new(); me->m_literalStack = HTList_new(); me->m_triples = HTList_new(); me->m_vAllNameSpaces = HTList_new(); me->m_bCreateBags = FALSE; me->m_bFetchSchemas = FALSE; me->m_parseTypeStack = HTList_new(); me->m_parseElementStack = HTList_new(); me->m_vResources = HTList_new(); me->m_vResolveQueue = HTList_new(); me->m_hIDtable = HTHashtable_new(0); return me; } PUBLIC BOOL HTRDF_delete (HTRDF * me) { if (me) { delete_elements(me); if (me->m_namespaceStack) { HTList *cur = me->m_namespaceStack; HTAssocList *alist = NULL; while ((alist = (HTAssocList *) HTList_nextObject(cur))) { HTAssocList_delete(alist); } HTList_delete(me->m_namespaceStack); } if (me->m_elementStack) HTList_delete(me->m_elementStack); delete_literal_elements(me); me->m_root = NULL; if (me->m_triples) { HTList *cur = me->m_triples; HTTriple *t = NULL; while ((t = (HTTriple *) HTList_nextObject(cur))) { /*HTTriple_print(t);*/ HTTriple_delete(t); } HTList_delete(me->m_triples); } HT_FREE(me->m_sSource); if (me->m_vAllNameSpaces) { HTList *cur = me->m_vAllNameSpaces; char * s = NULL; while ((s = (char *) HTList_nextObject(cur))) { HT_FREE(s); } HTList_delete(me->m_vAllNameSpaces); } if (me->m_parseTypeStack) HTList_delete(me->m_parseTypeStack); if (me->m_parseElementStack) HTList_delete(me->m_parseElementStack); if (me->m_vResources) HTList_delete(me->m_vResources); if (me->m_vResolveQueue) HTList_delete(me->m_vResolveQueue); if (me->m_hIDtable) HTHashtable_delete(me->m_hIDtable); HT_FREE(me->m_sLiteral); HT_FREE(me); return YES; } return NO; } /* * setSource method saves the name of the source document for * later inspection if needed */ PUBLIC BOOL HTRDF_setSource(HTRDF *me, char * source) { if (me && source) { StrAllocCopy (me->m_sSource, source); return YES; } return NO; } /* * Go through the m_vResolveQueue and assign * direct object reference for each symbolic reference */ PUBLIC BOOL HTRDF_resolve (HTRDF * me) { if (me) { HTList * cur = me->m_vResolveQueue; HTElement *e = NULL; HTElement *e2 = NULL; while ((e = (HTElement *) HTList_nextObject(cur))) { char * sAbout = HTElement_getAttribute2(e, RDFMS, "about"); char * sResource = HTElement_getAttribute2(e, RDFMS, "resource"); char * sAboutEach = HTElement_getAttribute2(e, RDFMS, "aboutEach"); char * sAboutEachPrefix = HTElement_getAttribute2(e, RDFMS, "aboutEachPrefix"); if (sAbout) { if (sAbout[0]=='#') sAbout = &(sAbout[1]); e2 = (HTElement *) HTRDF_lookforNode(me, sAbout); if (e2) HTElement_addTarget(e, e2); else HTPrint("Unresolved internal reference %s\n", sAbout); } if (sResource) { if (sResource[0]=='#') sResource = &(sResource[1]); e2 = (HTElement *) HTRDF_lookforNode(me, sResource); if (e2) HTElement_addTarget(e, e2); } if (sAboutEach) { sAboutEach = &(sAboutEach[1]); e2 = (HTElement *) HTRDF_lookforNode(me, sAboutEach); if (e2) HTElement_addTarget(e, e2); } if (sAboutEachPrefix) { HTList * curr = me->m_vResources; HTElement *ele = NULL; while ((ele = (HTElement *) HTList_nextObject(curr))) { char * sA = HTElement_getAttribute2(ele, RDFMS, "about"); if (sA && !strncmp(sA, sAboutEachPrefix, strlen(sAboutEachPrefix))) { HTElement_addTarget(e, ele); } } } } HTList_delete(me->m_vResources); me->m_vResources = HTList_new(); return YES; } return NO; } /** * Check if the element e is from the namespace * of the RDF schema by comparing only the beginning of * the expanded element name with the canonical RDFMS * URI */ PUBLIC BOOL HTRDF_isRDF(HTRDF * me, HTElement *e) { return (me && e && e->m_sName) ? (!strncmp(e->m_sName, RDFMS, strlen(RDFMS))) : NO; } PUBLIC BOOL HTRDF_isRDFroot (HTRDF * me, HTElement *e) { if (me && e && e->m_sName) { int len = strlen(e->m_sName); if (len > 3) return (HTRDF_isRDF(me, e) && !strcmp(&(e->m_sName[len-3]), "RDF")); } return NO; } /** * Is the element a Description */ PUBLIC BOOL HTRDF_isDescription (HTRDF *me, HTElement *e) { if (me && e && e->m_sName) { int len = strlen(e->m_sName); if (len > 11) return (HTRDF_isRDF(me, e) && !strcmp(&(e->m_sName[len-11]), "Description")); } return NO; } /* * Is the element a ListItem */ PUBLIC BOOL HTRDF_isListItem (HTRDF *me, HTElement *e) { if (me && e && e->m_sName) { int len = strlen(e->m_sName); if (len > 2) return (HTRDF_isRDF(me, e) && (!strcmp(&(e->m_sName[len-2]), "li") || strchr(e->m_sName,'_'))); } return NO; } /** * Is the element a Sequence */ PUBLIC BOOL HTRDF_isSequence (HTRDF *me, HTElement *e) { if (me && e && e->m_sName) { int len = strlen(e->m_sName); if (len > 3) return (HTRDF_isRDF(me, e) && !strcmp(&(e->m_sName[len-3]), "Seq")); } return NO; } /* * Is the element an Alternative */ PUBLIC BOOL HTRDF_isAlternative (HTRDF *me, HTElement *e) { if (me && e && e->m_sName) { int len = strlen(e->m_sName); if (len > 3) return (HTRDF_isRDF(me, e) && !strcmp(&(e->m_sName[len-3]), "Alt")); } return NO; } /* * Is the element a Bag */ PUBLIC BOOL HTRDF_isBag (HTRDF *me, HTElement *e) { if (me && e && e->m_sName) { int len = strlen(e->m_sName); if (len > 3) return (HTRDF_isRDF(me, e) && !strcmp(&(e->m_sName[len-3]), "Bag")); } return NO; } /** * Is the element a Container */ PUBLIC BOOL HTRDF_isContainer (HTRDF *me, HTElement *e) { return (HTRDF_isSequence(me, e) || HTRDF_isAlternative(me, e) || HTRDF_isBag(me, e)); } /* * This method matches all properties but those from RDF namespace */ PUBLIC BOOL HTRDF_isTypedPredicate(HTRDF *me, HTElement *e) { if (me && e && e->m_sName) { int len = strlen(e->m_sName); char * tp[] = {"predicate", "subject", "object", "value", "type", "Property", "Statement"}; int i; if (HTRDF_isRDF(me, e)) { for(i = 0; i< 7; i++) { int ntp = strlen(tp[i]); if (len > ntp) { if (!strcmp(&(e->m_sName[len-ntp]), tp[i])) return YES; } } return NO; } if (len > 0) return YES; } return NO; } PRIVATE void HTRDF_processListItem (HTRDF * me, char * sID, HTElement *listitem, int iCounter) { /* * Two different cases for * 1. LI element without content (resource available) * 2. LI element with content (resource unavailable) */ char * cName = NULL; char * sResource = HTRDF_getResource(me, listitem); char sdig[20]; sprintf(sdig, "_%d", iCounter); StrAllocMCopy(&cName, RDFMS, sdig, NULL); if (sResource) { HTRDF_addTriple(me, cName, sID, sResource); /* validity checking */ if (!HTList_isEmpty(listitem->m_children)){ HTPrint("Listitem with resource attribute can not have child nodes"); } StrAllocCopy(listitem->m_sID, sResource); } else { HTList *cur = listitem->m_children; HTElement *n = NULL; while ((n = (HTElement *) HTList_nextObject(cur))) { if (HTElement_instanceOfData(n)) { HTRDF_addTriple(me, cName, sID, n->m_sContent); } else if (HTRDF_isDescription(me, n)) { char * sNodeID = HTRDF_processDescription(me, n, NO, YES, NO); HTRDF_addTriple(me, cName, sID, sNodeID); StrAllocCopy(listitem->m_sID, sNodeID); } else if (HTRDF_isListItem(me, n)) { HTPrint("Can not nest list item inside list item\n"); } else if (HTRDF_isContainer(me, n)) { char * c = HTRDF_processContainer(me, n); HTRDF_addTriple(me, cName, sID, n->m_sID); HT_FREE(c); } else if (HTRDF_isTypedPredicate(me, n)) { char * sNodeID = HTRDF_processTypedNode(me, n); HTRDF_addTriple(me, cName, sID, sNodeID); HT_FREE(sNodeID); } } } HT_FREE(cName); } PRIVATE char * HTRDF_processContainer(HTRDF *me, HTElement *n) { char * sID = NULL; char * tName = NULL; char * aName = NULL; char * sName = NULL; char * bName = NULL; StrAllocMCopy(&tName, RDFMS, "type", NULL); StrAllocMCopy(&aName, RDFMS, "Alt", NULL); StrAllocMCopy(&sName, RDFMS, "Seq", NULL); StrAllocMCopy(&bName, RDFMS, "Bag", NULL); StrAllocCopy(sID, n->m_sID); if (!sID) sID = HTRDF_newReificationID(me); /* * Do the instantiation only once */ if (!n->m_bDone) { if (HTRDF_isSequence(me, n)) { HTRDF_addTriple(me, tName, sID, sName); } else if (HTRDF_isAlternative(me, n)) { HTRDF_addTriple(me, tName, sID, aName); } else if (HTRDF_isBag(me, n)) { HTRDF_addTriple(me, tName, sID, bName); } n->m_bDone = YES; } HTRDF_expandAttributes(me, n, n); { HTList *cur = n->m_children; HTElement *n2 = NULL; int iCounter = 1; if (HTList_isEmpty(cur) && HTRDF_isAlternative(me, n)) HTPrint("An RDF:Alt container must have at least one list item\n"); while ((n2 = (HTElement *) HTList_nextObject(cur))) { if (HTRDF_isListItem(me, n2)) { HTRDF_processListItem(me, sID, n2, iCounter); iCounter++; } else { HTPrint("Can not nest %s, inside container\n", n2->m_sName); } } } /* end of block */ HT_FREE(tName); HT_FREE(sName); HT_FREE(aName); HT_FREE(bName); return sID; } /* * Manage the typedNode production in the RDF grammar. * */ PUBLIC char * HTRDF_processTypedNode(HTRDF *me, HTElement *typedNode) { char * sID = HTElement_getAttribute2(typedNode, RDFMS, "ID"); char * sBagID = HTElement_getAttribute2(typedNode, RDFMS, "bagID"); char * sAbout = HTElement_getAttribute2(typedNode, RDFMS, "about"); char * sAboutEach = HTElement_getAttribute2(typedNode, RDFMS, "aboutEach"); /*char * sAboutEachPrefix = HTElement_getAttribute2(typedNode, RDFMS, "aboutEachPrefix");*/ char * resource = HTElement_getAttribute2(typedNode, RDFMS, "resource"); char * iName = NULL; char * bName = NULL; char * tName = NULL; char * sObject = NULL; StrAllocMCopy(&iName, RDFMS, "ID", NULL); StrAllocMCopy(&bName, RDFMS, "bagID", NULL); StrAllocMCopy(&tName, RDFMS, "type", NULL); if (resource) HTPrint("resource attribute not allowed for a typedNode %s\n", typedNode->m_sName); /* * We are going to manage this typedNode using the processDescription * routine later on. Before that, place all properties encoded as * attributes to separate child nodes. */ { HTAssoc * assoc; HTAssocList *cur = typedNode->m_attributes; char * sAttribute = NULL; char * tValue = NULL; char * sValue = NULL; while((assoc= (HTAssoc *) HTList_nextObject(cur))) { sAttribute = HTAssoc_name(assoc); sValue = HTAssoc_value(assoc); tValue = trim(sValue); if (strncmp(sAttribute, RDFMS, strlen(RDFMS)) && strncmp(sAttribute, XMLSCHEMA, strlen(XMLSCHEMA))) { if (strlen(tValue) > 0) { HTAssocList *newAL = HTAssocList_new(); HTElement *newPredicate = HTElement_new(sAttribute, newAL); HTElement *d = NULL; HTElement_addAttribute(newPredicate, iName, sAbout ? sAbout : sID); HTElement_addAttribute(newPredicate, bName, sBagID); d = HTElement_new2(tValue); HTElement_addChild(newPredicate, d); HTElement_addChild(typedNode, newPredicate); } } HT_FREE(tValue); } /* end of while */ }/* end of block */ { if (sAbout) StrAllocCopy(sObject, sAbout); else if (sID) StrAllocCopy(sObject, sID); else sObject = HTRDF_newReificationID(me); StrAllocCopy(typedNode->m_sID, sObject); /* special case: should the typedNode have aboutEach attribute, ** the type predicate should distribute to pointed ** collection also -> create a child node to the typedNode */ if (sAboutEach && !HTList_isEmpty(typedNode->m_vTargets)) { HTAssocList *newAL = HTAssocList_new(); HTElement *newPredicate = HTElement_new(tName, newAL); HTElement *d = HTElement_new2(typedNode->m_sName); HTElement_addChild(newPredicate, d); HTElement_addChild(typedNode, newPredicate); } else { HTRDF_addTriple(me, tName, sObject, typedNode->m_sName); } HTRDF_processDescription(me, typedNode, NO, NO, YES); }/* end of block */ HT_FREE(iName); HT_FREE(bName); HT_FREE(tName); return sObject; } /* * Start processing an RDF/XML document instance from the * root element rdf. * */ PUBLIC BOOL HTRDF_processRDF (HTRDF *me, HTElement *e) { if (me && e) { HTList *cur = e->m_children; HTElement *ele = NULL; if (HTList_isEmpty(e->m_children)) { HTPrint("Empty RDF Element\n"); return NO; } while ((ele= (HTElement *) HTList_nextObject(cur))) { if (HTRDF_isDescription(me, ele)) { HTRDF_processDescription(me, ele, NO, me->m_bCreateBags, me->m_bCreateBags); } else if (HTRDF_isContainer(me, ele)) { char * c = HTRDF_processContainer(me, ele); HT_FREE(c); } else if (HTRDF_isTypedPredicate(me, ele)) { char * t = HTRDF_processTypedNode(me, ele); HT_FREE(t); } } return YES; } return NO; } /* * processPredicate handles all elements not defined as special * RDF elements. * * predicate The predicate element itself * description Context for the predicate * sTarget The target resource * reificate Should this predicate be reificated * * return the new ID which can be used to identify the predicate * */ PRIVATE char * HTRDF_processPredicate (HTRDF * me, HTElement * predicate, HTElement * description, char * sTarget, BOOL reificate) { char * sStatementID = HTElement_getAttribute2(predicate, RDFMS, "ID"); char * nsStatementID = NULL; char * sBagID = HTElement_getAttribute2(predicate, RDFMS, "bagID"); char * sResource = HTRDF_getResource(me, predicate); /* ** If a predicate has other attributes than rdf:ID, rdf:bagID, ** or xmlns... -> generate new triples according to the spec. ** (See end of Section 6) */ { HTElement * place_holder = NULL; HTAssocList * newAL = HTAssocList_new(); char * fName = NULL; char * aName = NULL; StrAllocMCopy(&fName, RDFMS, "Description", NULL); place_holder = HTElement_new(fName, newAL); HT_FREE(fName); if (HTRDF_expandAttributes(me, place_holder, predicate)) { /* error checking */ if (!HTList_isEmpty(predicate->m_children)) { HTPrint("%s must be an empty element since it uses propAttr grammar production", predicate->m_sName); HTElement_delete(place_holder); return NULL; } StrAllocMCopy(&aName, RDFMS, "about", NULL); /* determine the 'about' part for the new statements */ if (sStatementID) { HTElement *data = HTElement_new2(sStatementID); HTElement_addAttribute(place_holder, aName, sStatementID); /* hack: make rdf:ID the value of the predicate */ HTElement_addChild(predicate, data); } else if (sResource) { HTElement_addAttribute(place_holder, aName, sResource); } else { nsStatementID = HTRDF_newReificationID(me); HTElement_addAttribute(place_holder, aName, nsStatementID); HT_FREE(nsStatementID); } HT_FREE(aName); if (sBagID) { StrAllocMCopy(&fName, RDFMS, "bagID", NULL); HTElement_addAttribute(place_holder, fName, sBagID); HT_FREE(fName); StrAllocCopy(place_holder->m_sBagID, sBagID); } HTRDF_processDescription(me, place_holder, NO, NO, me->m_bCreateBags); } else { /* Nothing but xmlns or RDF stuff, so we don't need new element */ HTElement_delete(place_holder); } } /* ** Tricky part: if the resource attribute is present for a predicate ** AND there are no children, the value of the predicate is either ** 1. the URI in the resource attribute OR ** 2. the node ID of the resolved #resource attribute */ if (sResource && HTList_isEmpty(predicate->m_children)) { if (!HTElement_target(predicate)) { if (reificate) { HT_FREE(nsStatementID); nsStatementID = HTRDF_reificate (me, predicate->m_sName, sTarget, sResource, predicate->m_sID); StrAllocCopy(predicate->m_sID, nsStatementID); } else { HTRDF_addTriple(me, predicate->m_sName, sTarget, sResource); } } else { HTElement *target = HTElement_target(predicate); if (reificate) { nsStatementID = HTRDF_reificate (me, predicate->m_sName, sTarget, target->m_sID, predicate->m_sID); StrAllocCopy(predicate->m_sID, nsStatementID); } else { HTRDF_addTriple(me, predicate->m_sName, sTarget, target->m_sID); } } if (nsStatementID && predicate->m_sID) StrAllocCopy(nsStatementID, predicate->m_sID); return nsStatementID; } /* ** Does this predicate make a reference somewhere using the ** sResource attribute */ if (sResource && HTElement_target(predicate)) { char * dStatementID = HTRDF_processDescription(me, HTElement_target(predicate), YES, NO, NO); if (reificate) { HT_FREE(nsStatementID); nsStatementID = HTRDF_reificate (me, predicate->m_sName, sTarget, dStatementID, predicate->m_sID); StrAllocCopy(predicate->m_sID, nsStatementID); } else { StrAllocCopy(nsStatementID, dStatementID); HTRDF_addTriple(me, predicate->m_sName, sTarget, nsStatementID); } return nsStatementID; } /* ** Before looping through the children, let's check ** if there are any. If not, the value of the predicate is ** an anonymous node */ { HTList *cur = predicate->m_children; BOOL bUsedTypedNodeProduction = NO; HTElement *n2; if (nsStatementID && sStatementID) StrAllocCopy(nsStatementID, sStatementID); if (HTList_isEmpty(cur)) { if (reificate) { char * nr = HTRDF_newReificationID(me); HT_FREE(nsStatementID); nsStatementID = HTRDF_reificate (me, predicate->m_sName, sTarget, nr, predicate->m_sID); HT_FREE(nr); } else { char * nr = HTRDF_newReificationID(me); HTRDF_addTriple(me, predicate->m_sName, sTarget, nr); HT_FREE(nr); } } while ((n2= (HTElement *) HTList_nextObject(cur))) { if (HTRDF_isDescription(me, n2)) { HTElement *d2 = n2; char * dStatementID =HTRDF_processDescription(me, d2, YES, NO, NO); if (d2->m_sID && dStatementID && d2->m_sID != dStatementID) StrAllocCopy(d2->m_sID, dStatementID); if (reificate) { HT_FREE(nsStatementID); nsStatementID = HTRDF_reificate (me, predicate->m_sName, sTarget, dStatementID, predicate->m_sID); } else { StrAllocCopy(nsStatementID, dStatementID); HTRDF_addTriple(me, predicate->m_sName, sTarget, nsStatementID); } } else if (HTElement_instanceOfData(n2)) { char * tValue = NULL; char * sValue = n2->m_sContent; /* we've got real data */ /* * Only if the content is not empty PCDATA (whitespace that is) * print the triple */ tValue = trim(sValue); if (tValue && strlen(tValue) > 0) { if (reificate) { HT_FREE(nsStatementID); nsStatementID = HTRDF_reificate (me, predicate->m_sName, sTarget, tValue, predicate->m_sID); StrAllocCopy(predicate->m_sID, nsStatementID); } else { HTRDF_addTriple(me, predicate->m_sName, sTarget, tValue); } } HT_FREE(tValue); } else if (HTRDF_isContainer(me, n2)) { HTElement *target = HTElement_target(description); char * aboutTarget = target ? HTElement_getAttribute2(target, RDFMS, "about") : NULL; char * sCollectionID = HTRDF_processContainer(me, n2); StrAllocCopy(nsStatementID, sCollectionID); /* Attach the collection to the current predicate */ if (target) { if (reificate) { HT_FREE(nsStatementID); nsStatementID=HTRDF_reificate (me, predicate->m_sName, aboutTarget, sCollectionID, predicate->m_sID); StrAllocCopy(predicate->m_sID, nsStatementID); } else { HTRDF_addTriple(me, predicate->m_sName, aboutTarget, sCollectionID); } } else { if (reificate) { HT_FREE(nsStatementID); nsStatementID=HTRDF_reificate (me, predicate->m_sName, sTarget, sCollectionID, predicate->m_sID); StrAllocCopy(predicate->m_sID, nsStatementID); } else { HTRDF_addTriple(me, predicate->m_sName, sTarget, sCollectionID); } } HT_FREE(sCollectionID); } else if (HTRDF_isTypedPredicate(me, n2)) { if (bUsedTypedNodeProduction) { HTPrint("Only one typedNode allowed inside a predicate (Extra typedNode: %s )\n", n2->m_sName); } else { bUsedTypedNodeProduction = YES; } HT_FREE(nsStatementID); nsStatementID = HTRDF_processTypedNode(me, n2); HTRDF_addTriple(me, predicate->m_sName, sTarget, nsStatementID); } } return nsStatementID; } /* end of block */ return NULL; } /* * processDescription manages Description elements * * description The Description element itself * inPredicate Is this is a nested description * reificate Do we need to reificate * createBag Do we create a bag container * * return An ID for the description * */ PUBLIC char * HTRDF_processDescription (HTRDF * me, HTElement * description, BOOL inPredicate, BOOL reificate, BOOL createBag) { int iChildCount = 1; BOOL bOnce = YES; char * sAbout = HTElement_getAttribute2(description, RDFMS, "about"); char * sAboutEach = HTElement_getAttribute2(description, RDFMS, "aboutEach"); char * sAboutEachPrefix = HTElement_getAttribute2(description, RDFMS, "aboutEachPrefix"); char * sBagid = HTElement_getAttribute2(description, RDFMS, "bagID"); char * sID = HTElement_getAttribute2(description, RDFMS, "ID"); HTElement *target = HTElement_target(description); BOOL hasTarget = HTList_isEmpty(description->m_vTargets) ? NO : YES; BOOL targetIsContainer = NO; char * sTargetAbout = NULL; char * sTargetBagID = NULL; char * sTargetID = NULL; char * dName = NULL; char * aName = NULL; /* ** Return immediately if the description has already been managed */ if (description->m_bDone) return description->m_sID; StrAllocMCopy(&dName, RDFMS, "Description", NULL); StrAllocMCopy(&aName, RDFMS, "about", NULL); /* ** Determine what the target of the Description reference is */ if (hasTarget) { char * sTargetID2 = HTElement_getAttribute2(target, RDFMS, "ID"); sTargetAbout = HTElement_getAttribute2(target, RDFMS, "about"); sTargetBagID = HTElement_getAttribute2(target, RDFMS, "bagID"); if (me->m_sSource && sTargetID2) { StrAllocMCopy(&sTargetID, me->m_sSource, sTargetID2, NULL); } else { StrAllocCopy(sTargetID, sTargetID2); } /* * Target is collection if * 1. it is identified with bagID attribute * 2. it is identified with ID attribute and is a collection */ if (sTargetBagID && sAbout) { targetIsContainer = !strcmp(&(sAbout[1]), sTargetBagID); } else { if (sTargetID && sAbout && !strcmp(&(sAbout[1]), sTargetID) && HTRDF_isContainer(me, target)) targetIsContainer = YES; } HT_FREE(sTargetID); } /* * Check if there are properties encoded using the abbreviated * syntax */ HTRDF_expandAttributes(me, description, description); /* * Manage the aboutEach attribute here */ if (sAboutEach && hasTarget) { if (HTRDF_isContainer(me, target)) { HTList *cur = target->m_children; HTElement *ele = NULL; while ((ele= (HTElement *) HTList_nextObject(cur))) { if (HTRDF_isListItem(me, ele)) { char * sResource = HTRDF_getResource(me, ele); if (sResource) { HTElement * newDescription = NULL; HTElement * ele2; HTList * cur2 = description->m_children; /* * Manage <li resource="..." /> case */ if (sResource) { HTAssocList *newAL = HTAssocList_new(); newDescription = HTElement_new(dName, newAL); HTElement_addAttribute(newDescription, aName, sResource); } while ((ele2 = (HTElement *) HTList_nextObject(cur2))){ if (newDescription) HTElement_addChild(newDescription, ele2); } if (newDescription) HTRDF_processDescription(me, newDescription, NO, NO, NO); /* Not needed anymore */ HTElement_delete(newDescription); } else { /** * Otherwise we have a structured value inside <li> * * loop through the children of <li> * (can be only one) */ HTList *cur2 = ele->m_children; HTElement *ele2 = NULL; while ((ele2 = (HTElement *) HTList_nextObject(cur2))) { HTAssocList *newAL = HTAssocList_new(); HTElement *newNode = HTElement_new(dName, newAL); HTList *cur3 = description->m_children; HTElement *ele3 = NULL; /* loop through the items in the * description with aboutEach * and add them to the target */ while ((ele3 = (HTElement *) HTList_nextObject(cur3))) { HTElement_addChild(newNode, ele3); } HTElement_addTarget(newNode, ele2); HTRDF_processDescription(me, newNode, YES, NO, NO); } } } else if (HTRDF_isTypedPredicate(me, ele)) { HTAssocList *newAL = HTAssocList_new(); HTElement *newNode = HTElement_new(dName, newAL); HTList *cur2 = description->m_children; HTElement *ele2 = NULL; while ((ele2 = (HTElement *) HTList_nextObject(cur2))) { HTElement_addChild(newNode, ele2); } HTElement_addTarget(newNode, ele); HTRDF_processDescription(me, newNode, YES, NO, NO); } } /* end of while */ } else if (HTRDF_isDescription(me, target)) { HTList *cur = target->m_children; HTElement *ele = NULL; while ((ele = (HTElement *) HTList_nextObject(cur))) { HTAssocList *newAL = HTAssocList_new(); HTElement *newNode = HTElement_new(dName, newAL); HTList *cur2 = description->m_children; HTElement *ele2 = NULL; while ((ele2 = (HTElement *) HTList_nextObject(cur2))) { HTElement_addChild(newNode, ele2); } HTElement_addTarget(newNode, ele); HTRDF_processDescription(me, newNode, YES, NO, NO); } /* end of while */ } HT_FREE(dName); HT_FREE(aName); return NULL; } /* * Manage the aboutEachPrefix attribute here */ if (sAboutEachPrefix) { if (hasTarget) { HTList *cur = description->m_vTargets; HTElement *target = NULL; while ((target = (HTElement *) HTList_nextObject(cur))) { HTList *cur2 = description->m_children; HTElement *ele2 = NULL; HTElement *newDescription = NULL; HTAssocList *newAL = HTAssocList_new(); sTargetAbout = HTElement_getAttribute2(target, RDFMS, "about"); newDescription = HTElement_new(dName, newAL); HTElement_addAttribute(newDescription, aName, sTargetAbout); while ((ele2 = (HTElement *) HTList_nextObject(cur2))) { HTElement_addChild(newDescription, ele2); } HTRDF_processDescription(me, newDescription, NO, NO, NO); } } HT_FREE(dName); HT_FREE(aName); return NULL; } /* * Enumerate through the children */ { HTList *cur = description->m_children; HTElement *n = NULL; while ((n = (HTElement *) HTList_nextObject(cur))) { if (HTRDF_isDescription(me, n)) HTPrint("Can not nest Description inside Description\n"); else if (HTRDF_isListItem(me, n)) HTPrint("Can not nest List Item inside Description\n"); else if (HTRDF_isContainer(me, n)) HTPrint("Can not nest Container inside Description\n"); else if (HTRDF_isTypedPredicate(me, n)) { char * sChildID = NULL; if (hasTarget && targetIsContainer) { sChildID = HTRDF_processPredicate(me, n, description, target->m_sBagID ? target->m_sBagID : target->m_sID, NO); StrAllocCopy(description->m_sID, sChildID); createBag = NO; } else if (hasTarget) { sChildID = HTRDF_processPredicate(me, n, description, target->m_sBagID ? target->m_sBagID : target->m_sID, reificate); StrAllocCopy(description->m_sID, sChildID); } else if (!hasTarget && !inPredicate) { if (!description->m_sID) { char * nr = HTRDF_newReificationID(me); StrAllocCopy(description->m_sID, nr); HT_FREE(nr); } if (!sAbout) { if (sID) sAbout = sID; else sAbout = description->m_sID; } sChildID = HTRDF_processPredicate(me, n, description, sAbout, sBagid ? YES : reificate); } else if (!hasTarget && inPredicate) { if (!sAbout) { if (sID) { StrAllocCopy(description->m_sID, sID); sAbout = sID; } else { if (!description->m_sID) { char * nr = HTRDF_newReificationID(me); StrAllocCopy(description->m_sID, nr); HT_FREE(nr); } sAbout = description->m_sID; } } else { if (description->m_sID != sAbout) StrAllocCopy(description->m_sID, sAbout); } sChildID = HTRDF_processPredicate(me, n, description, sAbout, NO); } /* * Each Description block creates also a Bag node which * has links to all properties within the block IF * the m_bCreateBags variable is true */ if (sBagid || (me->m_bCreateBags && createBag)) { char * sNamespace = RDFMS; if (bOnce && sChildID) { char * tName = NULL; char * bName = NULL; bOnce = NO; if (!description->m_sBagID) { char * nr = HTRDF_newReificationID(me); StrAllocCopy(description->m_sBagID, nr); HT_FREE(nr); } if (!description->m_sID) StrAllocCopy(description->m_sID, description->m_sBagID); StrAllocMCopy(&tName, sNamespace, "type", NULL); StrAllocMCopy(&bName, sNamespace, "Bag", NULL); HTRDF_addTriple(me, tName, description->m_sBagID, bName); HT_FREE(tName); HT_FREE(bName); } if (sChildID) { char * tName = NULL; char si[20]; sprintf(si, "%d", iChildCount); StrAllocMCopy(&tName, sNamespace, "_", si, NULL); HTRDF_addTriple(me, tName, description->m_sBagID, sChildID); iChildCount++; HT_FREE(tName); } } HT_FREE(sChildID); } } } /* end of block*/ description->m_bDone = YES; HT_FREE(dName); HT_FREE(aName); return (description->m_sID); } /* * Given an XML document (well-formed HTML, for example), * look for a suitable element to start parsing from * */ PUBLIC BOOL HTRDF_processXML (HTRDF *me, HTElement *ele) { if (me && ele) { if (HTRDF_isRDF(me, ele)) { if (HTRDF_isRDFroot(me, ele)) { HTRDF_processRDF(me, ele); } else if (HTRDF_isDescription(me, ele)) { HTRDF_processDescription(me, ele, NO, me->m_bCreateBags, me->m_bCreateBags); } } else { HTList *cur = ele->m_children; HTElement *child = NULL; while ((child = (HTElement *) HTList_nextObject(cur))) { HTRDF_processXML(me, child); } } /* MISSING RECURSION */ return YES; } return NO; } /* * Return the root element pointer. This requires the parsing * has been already done. */ PUBLIC HTElement * HTRDF_root (HTRDF *me) { return me ? me->m_root : NULL; } /* * Return the full namespace URI for a given prefix sPrefix. * The default namespace is identified with xmlns prefix. * The namespace of xmlns attribute is an empty string. */ PUBLIC char * HTRDF_namespace(HTRDF * me, char * sPrefix) { char * nPrefix = NULL; HTAssocList * calist; HTList * cur = me->m_namespaceStack; if (!sPrefix) StrAllocCopy(nPrefix, "xmlns"); while ((calist = (HTAssocList *) HTList_nextObject(cur))) { char * sValue = HTAssocList_findObjectCaseSensitiveExact(calist, sPrefix); if (sValue) { StrAllocCopy(nPrefix, sValue); return nPrefix; } } /* * Give error only if * 1. the prefix is not from the reserved xml namespace * 2. the prefix is not xmlns which is to look for the default * namespace */ if (!strcmp(sPrefix, XMLSCHEMA)) { StrAllocCopy(nPrefix, sPrefix); return nPrefix; } else if (!strcmp(sPrefix, "xmlns")) { StrAllocCopy(nPrefix, ""); return nPrefix; } else HTPrint("Unresolved Namespace prefix %s\n", sPrefix); StrAllocCopy(nPrefix, ""); return nPrefix; } /* * Methods to determine whether we are parsing * parseType="Literal" or parseType="Resource" */ PUBLIC BOOL HTRDF_parseLiteral(HTRDF *me) { HTElement *e = NULL; HTList *cur = me->m_elementStack; if (!HTList_isEmpty(me->m_elementStack)) { while((e = (HTElement *) HTList_nextObject(cur))) { char * sParseType = NULL; sParseType = HTElement_getAttribute2(e, RDFMS, "parseType"); if (sParseType) { if (strcmp(sParseType, "Resource")) return YES; } } } return NO; } /* * Methods to determine whether we are parsing * parseType="Literal" or parseType="Resource" */ PUBLIC BOOL HTRDF_parseResource(HTRDF *me) { HTElement *e = NULL; HTList *cur = me->m_elementStack; if (!HTList_isEmpty(me->m_elementStack)) { while((e = (HTElement *) HTList_nextObject(cur))) { char * sParseType = NULL; sParseType = HTElement_getAttribute2(e, RDFMS, "parseType"); if (sParseType) { if (!strcmp(sParseType, "Resource")) return YES; } } } return NO; } /* * checkAttributes goes through the attributes of element e< * to see * 1. if there are symbolic references to other nodes in the data model. * in which case they must be stored for later resolving with * resolveLater method. * 2. if there is an identity attribute, it is registered using * registerResource or registerID method. * */ PRIVATE void HTRDF_checkAttributes(HTRDF *me, HTElement *e) { { char * sResource = HTElement_getAttribute2(e, RDFMS, "resource"); if (sResource && sResource[0] == '#') HTRDF_resolveLater(me, e); } { char * sAboutEach = HTElement_getAttribute2(e, RDFMS, "aboutEach"); if (sAboutEach && sAboutEach[0] == '#') HTRDF_resolveLater(me, e); } { char * sAboutEachPrefix = HTElement_getAttribute2(e, RDFMS, "aboutEachPrefix"); if (sAboutEachPrefix && sAboutEachPrefix[0] == '#') HTRDF_resolveLater(me, e); } { char * sAbout = HTElement_getAttribute2(e, RDFMS, "about"); if (sAbout) { if (sAbout[0] == '#') HTRDF_resolveLater(me, e); else HTRDF_registerResource(me, e); } } { char * sBagID = HTElement_getAttribute2(e, RDFMS, "bagID"); if (sBagID) { HTRDF_registerID(me, sBagID, e); StrAllocCopy(e->m_sBagID, sBagID); } } { char * sID = HTElement_getAttribute2(e, RDFMS, "ID"); if (sID) { HTRDF_registerID(me, sID, e); StrAllocCopy(e->m_sID, sID); } } } /* * Add the element e to the m_vResolveQueue * to be resolved later. */ PUBLIC void HTRDF_resolveLater(HTRDF *me, HTElement *e) { HTList_addObject(me->m_vResolveQueue, e); } /* * Add an element e to the Hashtable m_hIDtable * which stores all nodes with an ID */ PUBLIC void HTRDF_registerID(HTRDF *me, char * sID, HTElement *e) { if (HTHashtable_object(me->m_hIDtable, sID)) HTPrint("Node ID %s redefined", sID); HTHashtable_addObject(me->m_hIDtable, sID, e); } /* * Add an element e to the Vector m_vResources * which stores all nodes with an URI */ PUBLIC void HTRDF_registerResource(HTRDF *me, HTElement *e) { HTList_addObject(me->m_vResources, e); } /* * Look for a node by name sID from the Hashtable * m_hIDtable of all registered IDs. */ PUBLIC HTElement *HTRDF_lookforNode(HTRDF *me, char * sID) { if (sID) return (HTElement *) HTHashtable_object(me->m_hIDtable, sID); return NULL; } /* ** Special method to deal with rdf:resource attribute */ PUBLIC char * HTRDF_getResource(HTRDF *me, HTElement *e) { char * sResource = HTElement_getAttribute2(e, RDFMS, "resource"); if (sResource != NULL && sResource[0] == '\0') sResource = me->m_sSource; return sResource; } /* ** Take an element ele with its parent element parent ** and evaluate all its attributes to see if they are non-RDF specific ** and non-XML specific in which case they must become children of ** the ele node. */ PRIVATE BOOL HTRDF_expandAttributes (HTRDF * me, HTElement * parent, HTElement * ele) { BOOL foundAbbreviation = NO; char * sAttribute = NULL; char * sValue = NULL; HTAssoc * assoc; HTAssocList * cur = ele->m_attributes; int lxmlschema = strlen(XMLSCHEMA); int lrdfms = strlen(RDFMS); while ((assoc= (HTAssoc *) HTList_nextObject(cur))) { int latt; sAttribute = HTAssoc_name(assoc); sValue = HTAssoc_value(assoc); latt = strlen(sAttribute); if (!strncmp(sAttribute, XMLSCHEMA, lxmlschema)) continue; if (!strncmp(sAttribute, RDFMS, lrdfms) && (sAttribute[lrdfms]!='_') && latt > 5 && strcmp(&(sAttribute[latt-5]), "value") && strcmp(&(sAttribute[latt-4]), "type")) continue; if (strlen(sValue) > 0) { HTAssocList * newAL = HTAssocList_new(); HTElement * newElement = HTElement_new(sAttribute, newAL); HTElement * newData = HTElement_new2(sValue); HTElement_addChild(newElement, newData); HTElement_addChild(parent, newElement); foundAbbreviation = YES; } } return foundAbbreviation; } /** * Create a new reification ID by using a name part and an * incremental counter m_iReificationCounter. */ PUBLIC char * HTRDF_newReificationID (HTRDF *me) { char * nsid = NULL; char nsrc[20]; me->m_iReificationCounter++; sprintf(nsrc, "%d", me->m_iReificationCounter); if (!me->m_sSource) { StrAllocMCopy(&nsid, "genid", nsrc, NULL); } else { StrAllocMCopy(&nsid, me->m_sSource, "#genid", nsrc, NULL); } return nsid; } /* * reificate creates one new node and four new triples * and returns the ID of the new node */ PRIVATE char * HTRDF_reificate(HTRDF *me, char * sPredicate, char * sSubject, char * sObject, char * sNodeID) { char * sName = NULL; char * pName = NULL; char * oName = NULL; char * tName = NULL; char * stName = NULL; char * tNodeID = NULL; if (!sNodeID) tNodeID = HTRDF_newReificationID(me); else StrAllocCopy(tNodeID, sNodeID); StrAllocMCopy(&sName, RDFMS, "subject", NULL); StrAllocMCopy(&pName, RDFMS, "predicate", NULL); StrAllocMCopy(&oName, RDFMS, "object", NULL); StrAllocMCopy(&tName, RDFMS, "type", NULL); StrAllocMCopy(&stName, RDFMS, "Statement", NULL); /* * The original statement must remain in the data model */ HTRDF_addTriple(me, sPredicate, sSubject, sObject); /* * Do not reificate reificated properties */ if (strcmp(sPredicate, sName) && strcmp(sPredicate, pName) && strcmp(sPredicate, oName) && strcmp(sPredicate, tName)) { /* Reificate by creating 4 new triples */ HTRDF_addTriple(me, pName, tNodeID, sPredicate); HTRDF_addTriple(me, sName, tNodeID, (sSubject[0]=='\0' ? me->m_sSource: sSubject)); HTRDF_addTriple(me, oName, tNodeID, sObject); HTRDF_addTriple(me, tName, tNodeID, stName); } else HT_FREE(tNodeID); HT_FREE(sName); HT_FREE(pName); HT_FREE(oName); HT_FREE(tName); HT_FREE(stName); return tNodeID; } /* * Create a new triple and add it to the m_triples List * Send the triple to the Output stream */ PUBLIC void HTRDF_addTriple (HTRDF *me, char * sPredicate, char * sSubject, char * sObject) { HTTriple *t = NULL; /* * If there is no subject (about=""), then use the URI/filename where * the RDF description came from */ if (!sPredicate || !sSubject || !sObject) { HTPrint("Predicate %s when subject %s and object %s \n", sPredicate ? sPredicate : "null", sSubject ? sSubject : "null", sObject ? sObject : "null"); return; } if (sSubject[0]=='\0') sSubject = me->m_sSource; t = HTTriple_new(sPredicate, sSubject, sObject); /* Call the triple callback handler (if any) with this new triple */ if (me->newTripleInstance && t) (*(me->newTripleInstance))(me, t, me->tripleContext); HTList_addObject(me->m_triples, t); } /* * createBags method allows one to determine whether SiRPAC * produces Bag instances for each Description block. * The default setting is not to generate them. */ PUBLIC void HTRDF_createBags(HTRDF *me, BOOL b) { if (me) me->m_bCreateBags = b; } /* Set output stream for RDF parser */ PUBLIC void HTRDF_setOutputStream(HTRDF *me, HTStream *ostream) { if (me) me->ostream = ostream; } PUBLIC BOOL HTRDF_registerNewTripleCallback (HTRDF * me, HTTripleCallback_new * cbf, void * context) { if (me) { me->newTripleInstance = cbf; me->tripleContext = context; return YES; } return NO; } PUBLIC BOOL HTRDF_registerNewParserCallback (HTRDFCallback_new * me, void * context) { RDFInstance = me; RDFInstanceContext = context; return YES; } /* ------------------------------------------------------------------------- */ /* HTRDFTriples STREAM HANDLERS */ /* ------------------------------------------------------------------------- */ PRIVATE int generate_triples(HTStream *me) { HTRDF *rdfp = me ? me->rdfparser : NULL; if (rdfp) { HTRDF_resolve(rdfp); HTRDF_processXML(rdfp, HTRDF_root(rdfp)); return HT_OK; } return HT_ERROR; } PRIVATE int HTRDFTriples_flush (HTStream * me) { if (me->target) return (*me->target->isa->flush)(me->target); return HT_OK; } PRIVATE int HTRDFTriples_free (HTStream * me) { int status = HT_OK; status = generate_triples(me); HTRDF_delete(me->rdfparser); if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTTRACE(XML_TRACE, "RDF Parser.. FREEING...\n"); HT_FREE(me); return status; } PRIVATE int HTRDFTriples_abort (HTStream * me, HTList * e) { HTTRACE(XML_TRACE, "RDF Parser.. ABORTING...\n"); HTRDF_delete(me->rdfparser); if (me->target) (*me->target->isa->abort)(me->target, NULL); HT_FREE(me); return HT_ERROR; } PRIVATE int HTRDFTriples_write (HTStream * me, const char * buf, int len) { return HT_OK; } PRIVATE int HTRDFTriples_putCharacter (HTStream * me, char c) { return HTRDFTriples_write(me, &c, 1); } PRIVATE int HTRDFTriples_putString (HTStream * me, const char * s) { return HTRDFTriples_write(me, s, (int) strlen(s)); } PRIVATE const HTStreamClass HTRDFTriplesClass = { "rdf", HTRDFTriples_flush, HTRDFTriples_free, HTRDFTriples_abort, HTRDFTriples_putCharacter, HTRDFTriples_putString, HTRDFTriples_write }; PRIVATE HTStream * RDFParser_new (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = NULL; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTRDFTriples_new"); me->isa = &HTRDFTriplesClass; me->state = HT_OK; me->request = request; me->target = output_stream ? output_stream : HTErrorStream(); /* Now create the RDF parser instance */ if ((me->rdfparser = HTRDF_new()) == NULL) { HT_FREE(me); return HTErrorStream(); } /* Set the source (I guess mostly to follow SiRPAC API) */ { char * uri = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); HTRDF_setSource(me->rdfparser, uri); HT_FREE(uri); } /* Where are we putting data? */ HTRDF_setOutputStream(me->rdfparser, me); /* If you want to create Bags, change it to YES */ HTRDF_createBags(me->rdfparser, NO); /* Register our new XML Instance handler */ /* @@@ THIS SHOULD BE DONE USING XML NAMESPACE SO THAT WE DON'T CONFLICT @@@ */ HTXMLCallback_registerNew(rdf_newInstance, me->rdfparser); HTTRACE(XML_TRACE, "RDF Parser.. Stream created\n"); return me; } PUBLIC HTStream * HTRDFParser_new (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { return HTXML_new(request, param, input_format, output_format, RDFParser_new(request, param, input_format, output_format, output_stream)); } PRIVATE void triple_newInstance (HTRDF * rdfp, HTTriple * t, void * context) { if (rdfp && t) { HTStream *ostream = rdfp->ostream; if (ostream) { PUTC(ostream,'('); PUTS(ostream, t->m_sPredicate); PUTC(ostream,','); PUTS(ostream, t->m_sSubject); PUTC(ostream,','); PUTS(ostream, t->m_sObject); PUTC(ostream,')'); PUTC(ostream,'\n'); } } } PUBLIC HTStream * HTRDFToTriples (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = RDFParser_new(request, param, input_format, output_format, output_stream); HTTRACE(XML_TRACE, "RDF Converter. To Triples\n"); /* Register our own tripple instance handler */ HTRDF_registerNewTripleCallback(me->rdfparser, triple_newInstance, NULL); /* Create an XML parser instance and return */ return HTXML_new(request, param, input_format, output_format, me); } /* ** This function initializes the XML parser and RDF parsers ** that are used to synchronously parse a file of RDF or a ** a buffer of RDF. ** ** Parameters: ** xmlparser - MODIFIED the XML parser to create. The caller is ** responsible for free'ing this pointer. ** rdfparser - MODIFIED the RDF parser to create. The caller is ** responsible for free'ing this pointer. ** stream - MODIFIED the HTStream needed by the RDF parser. The ** caller is responsible for free'ing this pointer. ** uri - the URI created from name. It is used by the RDF parser ** when creating anonymous node names. The caller is ** responsible for freeing this pointer. ** new_triple_callback - the callback invoked when a new triple ** is created. If NULL, the default handler will be invoked. ** context - a void pointer to pass to the new_triple_callback. ** Should set NULL if no data needs to be passed to the ** callback. ** name - the file name or buffer name to be used when the RDF ** parser needs a document name ** ** Returns: ** YES if the initialization succeeds; otherwise NO is returned ** and an error message is logged. **/ PRIVATE BOOL initialize_parsers(XML_Parser *xmlparser, HTRDF **rdfparser, HTStream **stream, char **uri, HTTripleCallback_new * new_triple_callback, void *context, const char * name) { /* Create an XML parser */ #ifdef USE_NS *xmlparser = XML_ParserCreateNS (NULL, ':'); #else *xmlparser = XML_ParserCreate (NULL); #endif /* USE_NS */ if (!*xmlparser) { HTTRACE(XML_TRACE, "RDF_Parser. Could not allocate memory for XML parser.\n"); return NO; } /* We need also need RDF parser to create the triples */ *rdfparser = HTRDF_new(); if (!*rdfparser) { XML_ParserFree(*xmlparser); HTTRACE(XML_TRACE, "RDF_Parser. Could not allocate memory for RDF parser.\n"); return NO; } /* Must construct a URI from name for the parser */ *uri = HTLocalToWWW (name, "file:"); HTRDF_setSource(*rdfparser, *uri); HTRDF_createBags(*rdfparser, NO); if (new_triple_callback) HTRDF_registerNewTripleCallback(*rdfparser, new_triple_callback, context); else HTRDF_registerNewTripleCallback(*rdfparser, triple_newInstance, context); rdf_setHandlers(*xmlparser); XML_SetUserData(*xmlparser, *rdfparser); /* Create a stream to be used to process the triple output */ if ((*stream = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) { HT_FREE(*uri); XML_ParserFree(*xmlparser); HTRDF_delete(*rdfparser); HTTRACE(XML_TRACE, "RDF_Parser. Could not allocate memory for HTStream.\n"); return NO; } (*stream)->isa = &HTRDFTriplesClass; (*stream)->state = HT_OK; (*stream)->request = NULL; /* Don't have a request */ (*stream)->target = NULL; /* Don't have another stream */ (*stream)->rdfparser = *rdfparser; return YES; } /* HTRDF_parseFile ** --------------- ** This function parses a file of RDF in a synchronous, non-blocking ** way. In other words, the file is not asynchronously loaded. ** ** Parameters: ** file_name the name of the file to parse ** new_triple_callback the callback that is invoked when a triple ** is created. If NULL, the default triple handler is ** invoked. ** context - a void pointer to pass to the new_triple_callback. ** Should set NULL if no data needs to be passed to the ** callback. ** Returns: ** Returns YES if the file is successfully parsed; otherwise NO is ** returned and an error message is logged. */ PUBLIC BOOL HTRDF_parseFile (const char *file_name, HTTripleCallback_new * new_triple_callback, void *context) { char buff[512]; /* the file input buffer */ FILE *fp; XML_Parser xmlparser; HTRDF *rdfparser; HTStream * stream = NULL; char *uri = NULL; BOOL status; /* Sanity check */ if (!file_name) { HTTRACE(XML_TRACE, "HTRDF_parseFile. file_name is NULL\n"); return NO; } /* If the file does not exist, return now */ fp = fopen (file_name, "r"); if (!fp) { /* annotation index file doesn't exist */ HTTRACE(XML_TRACE, "HTRDF_parseFile. File open failed."); return NO; } /* Initialize the XML and RDF parsers */ status = initialize_parsers(&xmlparser, &rdfparser, &stream, &uri, new_triple_callback, context, file_name); if (!status) { fclose (fp); return NO; } /* * The parsing occurs on one read buffer at a time instead of * reading everything into memory and then parsing */ for (;;) { int done; int buff_len; fgets(buff, sizeof(buff), fp); if (ferror(fp)) { HT_FREE(uri); fclose (fp); XML_ParserFree(xmlparser); HTRDF_delete(rdfparser); HT_FREE(stream); HTTRACE(XML_TRACE, "HTRDF_parseFile. Error reading file."); return NO; } done = feof(fp); if (done) buff_len = 0; else buff_len = strlen (buff); if (! XML_Parse(xmlparser, buff, buff_len, done)) { fprintf (stderr, "Parse error at line %d:\n%s\n", XML_GetCurrentLineNumber(xmlparser), XML_ErrorString(XML_GetErrorCode(xmlparser))); HT_FREE(uri); fclose(fp); XML_ParserFree(xmlparser); HTRDF_delete(rdfparser); HT_FREE(stream); HTTRACE(XML_TRACE, "HTRDF_parseFile. Parse error."); return NO; } if (done) break; } /* The file has been parsed, generate the triples */ generate_triples(stream); /* Cleanup */ HT_FREE(uri); fclose (fp); XML_ParserFree(xmlparser); HTRDF_delete(rdfparser); HT_FREE(stream); return YES; } /* HTRDF_parseBuffer ** --------------- ** This function parses a buffer of RDF in a synchronous, non-blocking ** way. ** ** Parameters: ** buffer the buffer to parse ** buffer_name the buffer's name. This is used by the parser ** when naming "anonymous" subjects ** buffer_len the buffer's length (number of bytes) ** new_triple_callback the callback that is invoked when a triple ** is created. If NULL, the default triple handler is ** invoked. ** context - a void pointer to pass to the new_triple_callback. ** Should set NULL if no data needs to be passed to the ** callback. ** Returns: ** Returns YES if the buffer is successfully parsed; otherwise NO is ** returned and an error message is logged. */ PUBLIC BOOL HTRDF_parseBuffer (const char *buffer, const char *buffer_name, int buffer_len, HTTripleCallback_new * new_triple_callback, void *context) { XML_Parser xmlparser; HTRDF *rdfparser; HTStream * stream = NULL; char *uri; BOOL status; /* Sanity checks */ if (!buffer) { HTTRACE(XML_TRACE, "HTRDF_parseBuffer. buffer is NULL"); return NO; } if (buffer_len <= 0) { HTTRACE(XML_TRACE, "HTRDF_parseBuffer. buffer_len is <=0"); return NO; } if (!buffer_name) { HTTRACE(XML_TRACE, "HTRDF_parseBuffer. buffer_name is NULL"); return NO; } status = initialize_parsers(&xmlparser, &rdfparser, &stream, &uri, new_triple_callback, context, buffer_name); if (!status) return NO; if (! XML_Parse(xmlparser, buffer, buffer_len, 1)) { fprintf(stderr, "Parse error at line %d:\n%s\n", XML_GetCurrentLineNumber(xmlparser), XML_ErrorString(XML_GetErrorCode(xmlparser))); HT_FREE(uri); XML_ParserFree(xmlparser); HTRDF_delete(rdfparser); HT_FREE(stream); HTTRACE(XML_TRACE, "HTRDF_parseBuffer. Parse error."); return NO; } /* The buffer has been parsed, generate the triples */ generate_triples(stream); /* Cleanup */ HT_FREE(uri); XML_ParserFree(xmlparser); HTRDF_delete(rdfparser); HT_FREE(stream); return YES; } �����������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTRDF.html�����������������������������������������������������������������������0100644�0000764�0000144�00000025315�07153202705�015510� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww RDF Parser</TITLE> </HEAD> <BODY> <H1> RDF Parser Based on Expat and SiRPAC </H1> <P> <STRONG>Written and integrated into libwww by John Punin - thanks!</STRONG> <P> This module is implemented by <A HREF="HTRDF.c">HTRDF.c</A>, and is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <P> This RDF parser is based on Janne Saarela's Java based <A href="/RDF/Implementations/SiRPAC/">SiRPAC</A> and <A href="http://www.jclark.com/xml/expat.html">James Clark's expat XML parser</A> which isincluded in the libwww CVS code base where I compile is as two libraries: <CODE>libxmltok.a</CODE> and <CODE>libxmlparse.a</CODE>. See the <A HREF="../External/">external modules that libwww works</A> with for details. <PRE> #ifndef HTRDF_H #define HTRDF_H #include "<A href="HTHash.html">HTHash.h</A>" #define RDFMS "http://www.w3.org/1999/02/22-rdf-syntax-ns#" #define RDFSCHEMA "http://www.w3.org/TR/WD-rdf-schema#" #define XMLSCHEMA "xml" </PRE> <H2> <A NAME="HTTriple">RDF Triple Class</A> </H2> <PRE> typedef struct _HTTriple HTTriple; extern HTTriple * HTTriple_new (char * p, char * s, char * o); extern BOOL HTTriple_delete (HTTriple * me); extern void HTTriple_print (HTTriple * me); extern char * HTTriple_subject (HTTriple * me); extern char * HTTriple_predicate (HTTriple * me); extern char * HTTriple_object (HTTriple * me); </PRE> <H2> <A NAME="HTElement">RDF Element Class</A> </H2> <PRE> typedef struct _HTElement HTElement; extern HTElement * HTElement_new (char * sName, HTAssocList * al); extern HTElement * HTElement_new2 (char * sContent); extern BOOL HTElement_addData (HTElement *me, char * sContent); extern BOOL HTElement_delete (HTElement * me); extern BOOL HTElement_addChild (HTElement * me, HTElement * element); extern BOOL HTElement_addAttribute (HTElement * me, char * sName, char * sValue); extern BOOL HTElement_removeAttribute (HTElement * me, char * sName); extern char * HTElement_getAttribute (HTElement * me, char * sName); extern char * HTElement_getAttribute2 (HTElement * me, char * sNamespace, char * sName); extern BOOL HTElement_addTarget (HTElement * me, HTElement * element); extern HTElement * HTElement_target (HTElement * me); extern BOOL HTElement_instanceOfData (HTElement * me); </PRE> <H2> <A NAME="HTRDF">RDF Parser & Compiler Definition</A> </H2> <P> These methods create and deletes an RDF Parser/Compiler (SIRPAC) <H3> Create and Delete Parser Instance </H3> <PRE> typedef struct _HTRDFParser HTRDF; extern HTRDF * HTRDF_new (void); extern BOOL HTRDF_delete (HTRDF * me); </PRE> <H3> <A NAME="newparser">Callback Handler Announcing a new RDF Parser Object</A> </H3> <P> When a <A HREF="#converter">RDF parser object</A> is created, the stream checks to see if there are any callbacks registered which should be notified about the new stream instance. If that is the case then this callback is called and a pointer to the RDF parser passed along. The output stream is the target that was originally set for the request object before the request was issued. <PRE> typedef void HTRDFCallback_new ( HTStream * me, HTRequest * request, HTFormat target_format, HTStream * target_stream, HTRDF * rdfparser, void * context); </PRE> <H4> Register RDF Parser Creation Notification Callback </H4> <P> <STRONG>@@@Should be handled via XML names spaces@@@</STRONG> <PRE> extern BOOL HTRDF_registerNewParserCallback (HTRDFCallback_new *, void * context); </PRE> <H3> <A NAME="newtriple">Callback Handler Announcing a new RDF Triple</A> </H3> <P> Handler announcing that a new triple has been generated. <PRE> typedef void HTTripleCallback_new ( HTRDF * rdfp, HTTriple * t, void * context); </PRE> <H4> Register RDF Triple Creation Notification Callback </H4> <PRE> extern BOOL HTRDF_registerNewTripleCallback ( HTRDF * me, HTTripleCallback_new * cbf, void * context); </PRE> <H3> Set Address </H3> <P> Saves the name of the source document for later inspection if needed <PRE> extern BOOL HTRDF_setSource (HTRDF * me, char * source); </PRE> <H3> Resolve Symbolic References </H3> <P> Go through the m_vResolveQueue and assign direct object reference for each symbolic reference <PRE> extern BOOL HTRDF_resolve(HTRDF *me); </PRE> <H3> Find Suitable Start Element </H3> <P> Given an XML document (well-formed HTML, for example), look for a suitable element to start parsing from <PRE> extern BOOL HTRDF_processXML(HTRDF *me, HTElement *root); </PRE> <H3> Return the root element pointer. </H3> <P> This requires the parsing has been already done. <PRE> extern HTElement * HTRDF_root(HTRDF *me); </PRE> <H3> Return the full namespace URI for a given prefix sPrefix. </H3> <P> The default namespace is identified with xmlns prefix. The namespace of xmlns attribute is an empty string. <PRE> extern char * HTRDF_namespace (HTRDF * me, char * sPrefix); </PRE> <H3> Parsing Literal or Resource? </H3> <P> Methods to determine whether we are parsing parseType="Literal" or parseType="Resource" <PRE> extern BOOL HTRDF_parseLiteral(HTRDF *me); extern BOOL HTRDF_parseResource(HTRDF *me); </PRE> <H3> Resolve Later </H3> <P> Add the element e to the m_vResolveQueue to be resolved later. <PRE> extern void HTRDF_resolveLater(HTRDF *me,HTElement *e); </PRE> <H3> Register ID </H3> <P> Add an element e to the Hashtable m_hIDtable which stores all nodes with an ID <PRE> extern void HTRDF_registerID(HTRDF *me, char * sID,HTElement *e); </PRE> <H3> Register Resource </H3> <P> Add an element e to the Vector m_vResources which stores all nodes with an URI <PRE> extern void HTRDF_registerResource(HTRDF *me,HTElement *e); </PRE> <H3> Look for Node </H3> <P> Look for a node by name sID from the Hashtable m_hIDtable of all registered IDs. <PRE> extern HTElement *HTRDF_lookforNode(HTRDF *me, char * sID); </PRE> <H3> If Element from RDF Schema? </H3> <P> Check if the element e is from the namespace of the RDF schema by comparing only the beginning of the expanded element name with the canonical RDFMS URI <PRE> extern BOOL HTRDF_isRDF(HTRDF *me, HTElement *ele); extern BOOL HTRDF_isRDFroot(HTRDF *me, HTElement *ele); </PRE> <H3> Is the element a Description? </H3> <PRE> extern BOOL HTRDF_isDescription(HTRDF *me, HTElement *ele); </PRE> <H3> Is the element a Predicate? </H3> <P> This method matches all properties but those from RDF namespace <PRE> extern BOOL HTRDF_isTypedPredicate(HTRDF *me, HTElement *e); </PRE> <H3> Is the element a Container? </H3> <PRE> extern BOOL HTRDF_isContainer(HTRDF *me, HTElement *e); </PRE> <H3> Is the element a Bag? </H3> <PRE> extern BOOL HTRDF_isBag(HTRDF *me, HTElement *e); </PRE> <H3> Is the element an Alternative? </H3> <PRE> extern BOOL HTRDF_isAlternative(HTRDF *me, HTElement *e); </PRE> <H3> Is the element a Sequence? </H3> <PRE> extern BOOL HTRDF_isSequence(HTRDF *me, HTElement *e); </PRE> <H3> Is the element a ListItem? </H3> <PRE> extern BOOL HTRDF_isListItem (HTRDF *me, HTElement *e); </PRE> <H3> Start processing an RDF/XML document instance from the root element rdf. </H3> <PRE> extern BOOL HTRDF_processRDF(HTRDF *me, HTElement *ele); </PRE> <P> processDescription manages Description elements <DL COMPACT> <DT> description <DD> The Description element itself <DT> inPredicate <DD> Is this is a nested description <DT> reificate <DD> Do we need to reificate <DT> createBag <DD> Do we create a bag container <DT> return <DD> An ID for the description </DL> <PRE> extern char * HTRDF_processDescription ( HTRDF * me, HTElement * description, BOOL inPredicate, BOOL reificate, BOOL createBag); </PRE> <H3> Manage the typedNode production in the RDF grammar. </H3> <PRE> extern char * HTRDF_processTypedNode(HTRDF *me, HTElement *e); </PRE> <H3> Special method to deal with rdf:resource attribute </H3> <PRE> extern char * HTRDF_getResource(HTRDF *me,HTElement *e); </PRE> <H3> Create a new reification ID </H3> <P> Using a name part and an incremental counter m_iReificationCounter. <PRE> extern char * HTRDF_newReificationID (HTRDF *me); </PRE> <H3> Create a new triple </H3> <P> and add it to the m_triples List <PRE> extern void HTRDF_addTriple (HTRDF *me, char * sPredicate, char * sSubject, char * sObject); </PRE> <H3> Create New Bag </H3> <P> allows one to determine whether SiRPAC produces Bag instances for each Description block. The default setting is not to generate them. <PRE> extern void HTRDF_createBags (HTRDF *me, BOOL b); </PRE> <H3> Set Output Stream </H3> <P> Set output stream for RDF parser <PRE> extern void HTRDF_setOutputStream (HTRDF *me, HTStream *ostream); </PRE> <H2> <A NAME="converter">RDF Converter Streams</A> </H2> <P> A set of <A HREF="HTFormat.html">converter streams</A> using the <A HREF="#HTRDF">HTRDF Parser object</A> <H3> RDF To Triple Converter </H3> <P> This stream converter converts an RDF stream to triples that are passed to the application using the <A HREF="#newtriple">new triples callback handler</A>. The RDF object itself can be obtained using the <A HREF="#newparser">new RDF parser object callback</A> <PRE> extern HTConverter HTRDFParser_new; </PRE> <H3> Print RDF Triple Converter </H3> <P> This stream converter converts an RDF stream to triples and sends them downstrem as <TT>(predicate, subject, object)</TT>. This can for example be used to print them out to stdout etc. <PRE> extern HTConverter HTRDFToTriples; </PRE> <H3> Parse a file of RDF </H3> <P> This function parses a file of RDF in a synchronous, non-blocking way. In other words, the file is not asynchronously loaded. If new_triple_callback is NULL, the default triple handler is invoked. The context pointer will be available in the triple callback function. Returns YES if the file is successfully parsed; otherwise NO is returned and an error message is logged. <PRE> extern BOOL HTRDF_parseFile (const char *file_name, HTTripleCallback_new * new_triple_callback, void *context); </PRE> <H3> Parse a buffer of RDF </H3> <P> This function parses a buffer of RDF in a synchronous, non-blocking way. If new_triple_callback is NULL, the default triple handler is invoked. The context pointer will be available in the triple callback function. Returns YES if the buffer is successfully parsed; otherwise NO is returned and an error message is logged. <PRE> extern BOOL HTRDF_parseBuffer (const char *buffer, const char *buffer_name, int buffer_len, HTTripleCallback_new * new_triple_callback, void *context); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTRDF.html,v 2.7 2025/08/30 13:01:57 barstow Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTReader.c�����������������������������������������������������������������������0100644�0000764�0000144�00000023217�07132562660�015562� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTReader.c ** READ STREAM FROM THE NETWORK USING TCP ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTReader.c,v 2.31 2025/07/11 09:15:28 kahan Exp $ ** ** HISTORY: ** 6 June 95 HFN Written */ /* Library Include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTNetMan.h" #include "HTReader.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; /* ... */ }; struct _HTInputStream { const HTInputStreamClass * isa; HTChannel * ch; HTHost * host; char * write; /* Last byte written */ char * read; /* Last byte read */ int b_read; char data [INPUT_BUFFER_SIZE]; /* buffer */ }; /* ------------------------------------------------------------------------- */ PRIVATE int HTReader_flush (HTInputStream * me) { HTNet * net = HTHost_getReadNet(me->host); return net && net->readStream ? (*net->readStream->isa->flush)(net->readStream) : HT_OK; } PRIVATE int HTReader_free (HTInputStream * me) { HTNet * net = HTHost_getReadNet(me->host); if (net && net->readStream) { int status = (*net->readStream->isa->_free)(net->readStream); if (status == HT_OK) net->readStream = NULL; return status; } return HT_OK; } PRIVATE int HTReader_abort (HTInputStream * me, HTList * e) { HTNet * net = HTHost_getReadNet(me->host); if (net && net->readStream) { int status = (*net->readStream->isa->abort)(net->readStream, NULL); if (status != HT_IGNORE) net->readStream = NULL; } return HT_ERROR; } #ifdef FIND_SIGNATURES /* Push data from a socket down a stream ** ------------------------------------- ** ** This routine is responsible for creating and PRESENTING any ** graphic (or other) objects described by the file. As this function ** max reads a chunk of data on size INPUT_BUFFER_SIZE, it can be used ** with both blocking or non-blocking sockets. It will always return to ** the event loop, however if we are using blocking I/O then we get a full ** buffer read, otherwise we get what's available. ** ** Returns HT_LOADED if finished reading ** HT_OK if OK, but more to read ** HT_ERROR if error, ** HT_WOULD_BLOCK if read or write would block ** HT_PAUSE if stream is paused */ PRIVATE char * strnstr(char * haystack, int *pLen, char * needle) { int found = 0; int need = strlen(needle); int i, start; for (start = i = 0; i < *pLen; i++) if (haystack[i] == needle[found]) { if (++found == need) { i -= need - 1; /* beginning of string */ *pLen -= i; return haystack+i; } } else { found = 0; } *pLen = 0; return NULL; } #endif /* FIND_SIGNATURES */ PRIVATE int HTReader_read (HTInputStream * me) { HTHost * host = me->host; SOCKET soc = HTChannel_socket(me->ch); HTNet * net = HTHost_getReadNet(host); HTRequest * request = HTNet_request(net); int status; if (!net->readStream) { HTTRACE(STREAM_TRACE, "Read Socket. No read stream for net object %p\n" _ net); return HT_ERROR; } /* Read from socket if we got rid of all the data previously read */ do { /* don't read if we have to push unwritten data from last call */ if (me->write >= me->read) { if ((me->b_read = NETREAD(soc, me->data, INPUT_BUFFER_SIZE)) < 0) { #ifdef EAGAIN if (socerrno==EAGAIN || socerrno==EWOULDBLOCK) /* POSIX */ #else if (socerrno==EWOULDBLOCK) /* BSD */ #endif { HTTRACE(STREAM_TRACE, "Read Socket. WOULD BLOCK fd %d\n" _ soc); HTHost_register(host, net, HTEvent_READ); return HT_WOULD_BLOCK; #ifdef __svr4__ /* ** In Solaris envirnoment, SIGPOLL is used to signal end ** of buffer for /dev/audio. If your process is also doing ** a socket read, it will cause an EINTR error. This ** error will cause the www library request to ** terminate prematurly. */ } else if (socerrno == EINTR) { continue; #endif /* __svr4__ */ #ifdef EPIPE } else if (socerrno == EPIPE) { HTTRACE(STREAM_TRACE, "Read Socket. got EPIPE\n" _ soc); goto socketClosed; #endif /* EPIPE */ #ifdef ECONNRESET } else if (socerrno == ECONNRESET) { HTTRACE(STREAM_TRACE, "Read Socket. got ECONNRESET\n" _ soc); goto socketClosed; #endif /* ECONNRESET */ #ifdef _WINSOCKAPI_ /* windows */ /* ** JK: added new tests here, based on the following text: ** Under BSD Unixes, if the remote peer closes its ** connection and your program is blocking on recv(), you ** will get a 0 back from recv(). Winsock behaves the same ** way, except that it can also return -1, with ** WSAGetLastError() returning WSAECONNRESET, ** WSAECONNABORTED or WSAESHUTDOWN, to signal the ** detectable flavors of abnormal disconnections. ** (from the Winsock Programmer's FAQ, Warren Young) */ } else if (socerrno == ECONNABORTED) { HTTRACE(STREAM_TRACE, "Read Socket. got ECONNABORTED\n" _ soc); goto socketClosed; } else if (socerrno == ESHUTDOWN) { HTTRACE(STREAM_TRACE, "Read Socket. got ESHUTDOWN\n" _ soc); goto socketClosed; #endif /* _WINSOCKAPI */ } else { /* We have a real error */ if (request) HTRequest_addSystemError(request, ERR_FATAL, socerrno, NO, "NETREAD"); return HT_ERROR; } } else if (!me->b_read) { socketClosed: HTTRACE(STREAM_TRACE, "Read Socket. FIN received on socket %d\n" _ soc); HTHost_unregister(host, net, HTEvent_READ); HTHost_register(host, net, HTEvent_CLOSE); return HT_CLOSED; } /* Remember how much we have read from the input socket */ HTTRACEDATA(me->data, me->b_read, "Reading from socket %d" _ soc); me->write = me->data; me->read = me->data + me->b_read; #ifdef FIND_SIGNATURES { char * ptr = me->data; int len = me->b_read; while ((ptr = strnstr(ptr, &len, "HTTP/1.1 200 OK")) != NULL) { HTTRACE(STREAM_TRACE, "Read Socket. Signature found at 0x%x of 0x%x.\n" _ ptr - me->data _ me->b_read); ptr++; len--; } } #endif /* FIND_SIGNATURES */ #ifdef NOT_ASCII { char *p = me->data; while (p < me->read) { *p = FROMASCII(*p); p++; } } #endif /* NOT_ASCII */ HTTRACE(STREAM_TRACE, "Read Socket. %d bytes read from socket %d\n" _ me->b_read _ soc); if (request) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_READ); if (HTNet_rawBytesCount(net)) HTNet_addBytesRead(net, me->b_read); if (cbf) { int tr = HTNet_bytesRead(net); (*cbf)(request, HT_PROG_READ, HT_MSG_NULL, NULL, &tr, NULL); } } } /* Now push the data down the stream */ if ((status = (*net->readStream->isa->put_block) (net->readStream, me->write, me->b_read)) != HT_OK) { if (status == HT_WOULD_BLOCK) { HTTRACE(STREAM_TRACE, "Read Socket. Target WOULD BLOCK\n"); HTHost_unregister(host, net, HTEvent_READ); return HT_WOULD_BLOCK; } else if (status == HT_PAUSE) { HTTRACE(STREAM_TRACE, "Read Socket. Target PAUSED\n"); HTHost_unregister(host, net, HTEvent_READ); return HT_PAUSE; /* CONTINUE code or stream code means data was consumed */ } else if (status == HT_CONTINUE || status > 0) { if (status == HT_CONTINUE) { HTTRACE(STREAM_TRACE, "Read Socket. CONTINUE\n"); } else HTTRACE(STREAM_TRACE, "Read Socket. Target returns %d\n" _ status); /* me->write = me->read; */ return status; } else { /* We have a real error */ HTTRACE(STREAM_TRACE, "Read Socket. Target ERROR %d\n" _ status); return status; } } me->write = me->read; { int remaining = HTHost_remainingRead(host); if (remaining > 0) { HTTRACE(STREAM_TRACE, "Read Socket. DIDN'T CONSUME %d BYTES: `%s\'\n" _ remaining _ me->read); HTHost_setConsumed(host, remaining); } } } while (net->preemptive); HTHost_register(host, net, HTEvent_READ); return HT_WOULD_BLOCK; } /* ** The difference between the close and the free method is that we don't ** close the connection in the free method - we only call the free method ** of the target stream. That way, we can keep the input stream as long ** as the channel itself. */ PRIVATE int HTReader_close (HTInputStream * me) { int status = HT_OK; HTNet * net = HTHost_getReadNet(me->host); if (net && net->readStream) { if ((status = (*net->readStream->isa->_free)(net->readStream))==HT_WOULD_BLOCK) return HT_WOULD_BLOCK; net->readStream = NULL; } HTTRACE(STREAM_TRACE, "Socket read. FREEING....\n"); HT_FREE(me); return status; } PUBLIC int HTReader_consumed (HTInputStream * me, size_t bytes) { me->write += bytes; me->b_read -= bytes; HTHost_setRemainingRead(me->host, me->b_read); return HT_OK; } PRIVATE const HTInputStreamClass HTReader = { "SocketReader", HTReader_flush, HTReader_free, HTReader_abort, HTReader_read, HTReader_close, HTReader_consumed }; /* ** Create a new input read stream. Before we actually create it we check ** to see whether we already have an input stream for this channel and if ** so we just return that. This means that we can reuse input streams ** in persistent connections, for example. */ PUBLIC HTInputStream * HTReader_new (HTHost * host, HTChannel * ch, void * param, int mode) { if (host && ch) { HTInputStream * me = HTChannel_input(ch); if (me == NULL) { if ((me=(HTInputStream *) HT_CALLOC(1, sizeof(HTInputStream))) == NULL) HT_OUTOFMEM("HTReader_new"); me->isa = &HTReader; me->ch = ch; me->host = host; HTTRACE(STREAM_TRACE, "Reader...... Created reader stream %p\n" _ me); } return me; } return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTReader.html��������������������������������������������������������������������0100644�0000764�0000144�00000003446�06526451261�016306� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 12-Apr-1996 --> <NEXTID N="z18"> <TITLE>W3C Sample Code Library Socket Reader Stream</TITLE> </HEAD> <BODY> <H1> Socket Reader Stream </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Socket Reader Stream is an <A HREF="HTIOStream.html">input stream </A>&nbsp;which knows how to read from&nbsp;a BSD type socket. It is part of the <A HREF="WWWTrans.html">Transport interface </A>and may be registered as part of a <A HREF="HTTrans.html">Transport Object</A>. The application can&nbsp;initialize this stream together with the <A HREF="HTWriter.html">HTWriter stream</A>, for example. In the <A HREF="HTInit.html">default initialization module</A>, you can find the <CODE>HTTransportInit()</CODE> function which sets up this stream as a default transport for handling socket read operations. <P> This module is implemented by <A HREF="HTReader.c">HTReader.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTREADER_H #define HTREADER_H #include <A HREF="HTIOStream.html">"HTIOStream.h"</A> </PRE> <H2> Input Buffering </H2> <P> In order to optimize reading a channel, we bind a buffer to each channel object. The size of this buffer is a compromise between speed and memory. Here it is chosen as the default TCP High Water Mark (sb_hiwat) for receiving data. By default, we have chosen a value that equals the normal TCP High Water Mark (sb_hiwat) for receiving data. <PRE> #define INPUT_BUFFER_SIZE 32*1024 </PRE> <H2> Read Stream </H2> <PRE> extern HTInput_new HTReader_new; </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTReader.html,v 2.6 2025/05/14 02:10:57 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTReq.html�����������������������������������������������������������������������0100644�0000764�0000144�00000124307�07133046031�015621� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Request Class</TITLE> </HEAD> <BODY> <H1> The Request Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> Libwww is based on a request/response paradigm and the Request class defines "<I>an operation to be performed on a URL</I>". The request object is the main entry point for an application to issue a request to the Library - all operations on a URL <I>must</I> use a Request object. The request object is application independent in that both servers and clients use the same Request class. Examples of requests passed to the Library are a client application issuing a <B>GET</B> request on a HTTP URL, or a server issuing a load on a local file URL. The only difference is that the client gets the input from a user whereas the server gets the input via the network. <P> A request object is created with a default set of parameters which are applicable for many URL requests but the class defines a huge set of methods that an be used to customize a request for a particular purpose. Example of things that you can define is natural language, media types, what RFC 822 headers to use, whether the request should be refreshed from cache etc. Scroll down and see the set of parameters you can tune. <P> A request object is registered in the library by issuing an operation on a URL - for example <B>PUT</B>, <B>POST</B>, or <B>DELETE</B>. You can find many higher level "request issuing functions" in the <A HREF="HTAccess.html">Access module</A> - the methods defined by the Request class itself are very low level but can of course be used directly if needed. <P> Whereas the lifetime of the URL (in form of an anchor) often is very long (for example as long as the application is running), the lifetime of a request is limited to the time it takes to service the request. The core does not automatically delete any request object created by the application - it is for the application to do. In many cases a request object can be deleted when any of the <A HREF="HTNet.html#callout">termination callback functions</A> are called but the application may keep request objects around longer than that <P> The Library can accept an unlimited number of simultaneous requests passed by the application. One of the main functions of the Library core is to handle any number of ongoing requests in an intelligent manner by limiting the number of active request to the fit the available resources as defined by the application. This is described in more detail in the <A HREF="HTNet.html">HTNet module</A>. <P> This module is implemented by <A HREF="HTReqMan.c">HTReqMan.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTREQ_H #define HTREQ_H typedef long HTRequestID; typedef struct _HTRequest HTRequest; #include "HTEvent.h" #include "HTList.h" #include "HTAssoc.h" #include "HTFormat.h" #include "HTStream.h" #include "HTError.h" #include "HTNet.h" #include "HTUser.h" #include "HTResponse.h" </PRE> <H2> <A NAME="Creation">Creation and Deletion Methods</A> </H2> <P> The request object is intended to live as long as the request is still active, but can be deleted as soon as it has terminated, for example in one of the request termination callback functions as described in the <A HREF="HTNet.html">Net Manager</A>. Only the anchor object stays around after the request itself is terminated. <H3> Create new Object </H3> <P> Creates a new request object with a default set of options -- in most cases it will need some information added which can be done using the methods in this module, but it will work as is for a simple request. <PRE> extern HTRequest * HTRequest_new (void); </PRE> <H3> Clear a Request Object </H3> <P> Clears all protocol specific information so that the request object can be used for another request. It should be used with care as application specific information is <B>not</B> re-initialized. Returns YES if OK, else NO. <PRE> extern BOOL HTRequest_clear (HTRequest * me); </PRE> <H3> Create a duplicate </H3> <P> Creates a new HTRequest object as a duplicate of the src request. Returns YES if OK, else NO <PRE> extern HTRequest * HTRequest_dup (HTRequest * src); </PRE> <H4> Create a duplicate for Internal use </H4> <P> Creates a new HTRequest object as a duplicate of the src request. The difference to the HTRequest_dup function is that we don't copy the error_stack and other information that the application keeps in its copy of the request object. Otherwise it will be freed multiple times. Returns YES if OK, else NO <PRE> extern HTRequest * HTRequest_dupInternal (HTRequest * src); extern BOOL HTRequest_setInternal (HTRequest * request, BOOL mode); extern BOOL HTRequest_internal (HTRequest * request); </PRE> <H3> Delete Object </H3> <P> This function deletes the object and cleans up the memory. <PRE> extern void HTRequest_delete (HTRequest * request); </PRE> <H2> <A NAME="Issuing">Issuing a Request</A> </H2> <P> These are the "<I>basic request methods</I>" provided directly by the Request class. This is a very low level API as the caller must have set up the request object before passing it to libwww. There are two versions: one for issuing client requests and one for issuing server requests. You will probably most often use the client version, but, in fact, libwww can also deal with incoming connections. You can find many higher level issuing functions in the <A HREF="HTAccess.html">HTAccess module</A>. If you like, you can of course use this directly! <PRE> extern BOOL HTLoad (HTRequest * request, BOOL recursive); extern BOOL HTServe(HTRequest * request, BOOL recursive); </PRE> <H2> <A NAME="Killing">Killing a Request</A> </H2> <P> This function kills this particular request, see <A HREF="HTNet.html">HTNet module</A> for a function that kills them all. If you know that you are pipelining requests (typically the case for GUI browsers, robots etc.) then it is often not enough to just kill a single request as the whole pipeline gets affected. Therefore, in that case you MUST call the <TT><A HREF="HTHost.html#Pipeline">HTHost_killPipe</A></TT> function instead, <PRE> extern BOOL HTRequest_kill(HTRequest * request); </PRE> <P> Note that you can get to the HTHost object via the <A HREF="HTNet.html">HTNet object</A> which you can <A HREF="#HTNet">get by calling HTRequest_net(...)</A>. <H2> <A NAME="Relations">Relations to Other Libwww Objects</A> </H2> <P> The Request object is linked to a set of other libwww objects - here's how to get to these objects... <H3> <A NAME="Anchor">Binding to an Anchor Object</A> </H3> <P> Every request object has an <A HREF="HTAnchor.html">anchor</A> associated with it. The anchor normally lives until the application terminates but a request object only lives as long as the request is being serviced. If the anchor that we have requested is a child anchor then we always load the parent anchor; after the load jump to the location. A child anchor is a an anchor which points to a subpart of the document (has a "#" in the URL). <PRE> extern void HTRequest_setAnchor (HTRequest *request, HTAnchor *anchor); extern HTParentAnchor * HTRequest_anchor (HTRequest *request); extern HTChildAnchor * HTRequest_childAnchor (HTRequest * request); </PRE> <H3> <A NAME="User">Binding to a User Profile</A> </H3> <P> Each request is associated with a <A HREF="HTUser.html">User profile</A> which contains information about the local host name, email address of the user, news server etc. A request object is created with a default "generic user" but can be assigned a specific user at any time. <PRE> extern BOOL HTRequest_setUserProfile (HTRequest * request, HTUserProfile * up); extern HTUserProfile * HTRequest_userProfile (HTRequest * request); </PRE> <H3> <A NAME="HTNet">Binding to a Net Object</A> </H3> <P> If a request is actually going on the net then the <A HREF="HTNet.html">Net Manager</A> is contacted to handle the request. The Net manager creates a HTNEt object and links it to the Request object. You can get to the HTNet object using the following functions. <PRE> extern HTNet * HTRequest_net (HTRequest * request); extern BOOL HTRequest_setNet (HTRequest * request, HTNet * net); </PRE> <P> Note that you can go from the HTNet object to the <A HREF="HTHost.html">HTHost</A> object by calling <TT>HTNet_host(...)</TT>. <H3> <A NAME="Response">Binding to a Response Object</A> </H3> <P> If a request is actually going on the net and we are getting a response back then we also create a <A HREF="HTResponse.html">HTResponse object</A> and bind it to the request object. Once we know what to do with the response, we may transfer the information to the anchor object. <PRE> extern HTResponse * HTRequest_response (HTRequest * request); extern BOOL HTRequest_setResponse (HTRequest * request, HTResponse * response); </PRE> <H2> <A NAME="Method">Set the Method for the Request</A> </H2> <P> The Method is the operation to be executed on the requested object. The default set if the set of operations defined by the HTTP protocol, that is "GET", "HEAD", "PUT", "POST", "LINK", "UNLINK", and "DELETE" but many of these can be used in other protocols as well. The important thing is to think of the requested element as an object on which you want to perform an operation. Then it is for the specific protocol implementation to try and carry this operation out. However, not all operations can be implemented (or make sense) in all protocols. <P> Methods are handled by the <A HREF="HTMethod.html">Method Module</A>, and the default value is "GET". <PRE> extern void HTRequest_setMethod (HTRequest *request, HTMethod method); extern HTMethod HTRequest_method (HTRequest *request); </PRE> <H2> <A NAME="Priority">Priority Management</A> </H2> <P> The request can be assigned an initial priority which then gets inherited by all <A HREF="HTNet.html">HTNet objects</A> and other requests objects created as a result of this one. You can also assign a separate priority to an indicidual HTNet object by using the methods in the <A HREF="HTNet.html">Net manager</A>. <PRE> extern HTPriority HTRequest_priority (HTRequest * request); extern BOOL HTRequest_setPriority (HTRequest * request, HTPriority priority); </PRE> <H2> <A NAME="Pipelining">Pipelining Managament</A> </H2> <P> Libwww supports HTTP/1.1 pipelining which greatly optimizes HTTP's behavior over TCP. libwww also tries very hard to minimize the number of TCP packets sent over the network. This is done by buffering outgoing requests until either a minimum amount of data has been collected or a timeout causes a flush to happen. The application can override the output buffering by explicit request a request object to be flushed. <PRE> extern BOOL HTRequest_setFlush (HTRequest * me, BOOL mode); extern BOOL HTRequest_flush (HTRequest * me); </PRE> <H3> Force the Pipeline to be Flushed Immediately </H3> <P> Forcing a fluch immediatly is slightly different as this can be done in "retrospect". That is, if suddenly the application decides on performing a flush after the request was initiated then it can use this function to flush at a later time. <PRE> extern int HTRequest_forceFlush (HTRequest * request); </PRE> <H2> <A NAME="Error">Dealing with Request Error Messages</A> </H2> <P> Errors are, like almost anything, kept in lists. An error list can be associated with a request using the following functions. In order to make life easier, there are also some easy mapping functions to the <A HREF="HTError.html">HTError object</A>, so that you can add an error directly to a request object. <PRE> extern HTList * HTRequest_error (HTRequest * request); extern void HTRequest_setError (HTRequest * request, HTList * list); extern void HTRequest_deleteAllErrors (HTRequest * request); </PRE> <P> These are the cover functions that go directly to the <A HREF="HTError.html">Error Object</A> <PRE> extern BOOL HTRequest_addError (HTRequest * request, HTSeverity severity, BOOL ignore, int element, void * par, unsigned int length, char * where); extern BOOL HTRequest_addSystemError (HTRequest * request, HTSeverity severity, int errornumber, BOOL ignore, char * syscall); </PRE> <H2> <A NAME="MaxRetry">Max number of Retrys for a Down Load</A> </H2> <P> Automatic reload can happen in two situations: <UL> <LI> The server sends a redirection response <LI> The document has expired </UL> <P> In order to avoid the Library going into an infinite loop, it is necessary to keep track of the number of automatic reloads. Loops can occur if the server has a reload to the same document or if the server sends back a Expires header which has already expired. The default maximum number of automatic reloads is 6. <PRE> extern BOOL HTRequest_setMaxRetry (int newmax); extern int HTRequest_maxRetry (void); extern int HTRequest_retrys (HTRequest * request); extern BOOL HTRequest_doRetry (HTRequest *request); extern BOOL HTRequest_addRetry (HTRequest * request); extern int HTRequest_AAretrys (HTRequest * request); extern BOOL HTRequest_addAARetry (HTRequest * request); </PRE> <H2> <A NAME="MaxForward">Set Max Forwards for TRACE methods</A> </H2> <P> The <CODE>TRACE</CODE> method is used to invoke a remote, application-layer loop-back of the request message. The final recipient of the request SHOULD reflect the message received back to the client as the entity-body of a 200 (OK) response. The final recipient is either the origin server or the first proxy or gateway to receive a Max-Forwards value of zero (0) in the request. A <CODE>TRACE</CODE> request <I>MUST NOT</I> include an entity. <PRE>extern BOOL HTRequest_setMaxForwards (HTRequest * request, int maxforwards); extern int HTRequest_maxForwards (HTRequest * request); </PRE> <H2> <A NAME="preemptive">Preemptive or Non-preemptive Access</A> </H2> <P> An access scheme is defined with a default for using either preemptive (blocking I/O) or non-preemptive (non-blocking I/O). This is basically a result of the implementation of the protocol module itself. However, if non-blocking I/O is the default then some times it is nice to be able to set the mode to blocking instead. For example, when loading the first document (the home page), blocking mode can be used instead of non-blocking. <PRE> extern void HTRequest_setPreemptive (HTRequest *request, BOOL mode); extern BOOL HTRequest_preemptive (HTRequest *request); </PRE> <H2> <A NAME="conneg">Content Negotiation</A> </H2> <P> When accessing the local file system, the Library is capable of performing content negotioation as described by the HTTP protocol. This is mainly for server applications, but some client applications might also want to use content negotiation when accessing the local file system. This method enables or disables content negotiation - the default value is <EM>ON</EM>. <PRE> extern void HTRequest_setNegotiation (HTRequest *request, BOOL mode); extern BOOL HTRequest_negotiation (HTRequest *request); </PRE> <H2> <A NAME="Preconditions">Request Preconditions (HTTP If-* Headers)</A> </H2> <P> Should this request use preconditions when doing a <TT>PUT</TT> or a <TT>POST</TT>? These are the "<TT>if-*</TT>" header fields that can be used to avoid version conflicts etc. The default is not to use any preconsitions (<TT>HT_NO_MATCH</TT>). The <TT>_THIS</TT> versions use etags and/or time stamps and the <TT>_ANY</TT> versions use the "<TT>*</TT>" header field value of the <TT>if-match</TT> and <TT>if-non-match</TT> header fields. <PRE>typedef enum _HTPreconditions { HT_NO_MATCH = 0, HT_MATCH_THIS, HT_MATCH_ANY, HT_DONT_MATCH_THIS, HT_DONT_MATCH_ANY } HTPreconditions; extern void HTRequest_setPreconditions (HTRequest * me, HTPreconditions mode); extern HTPreconditions HTRequest_preconditions (HTRequest * me); </PRE> <H2> <A NAME="Parsers">Local MIME header Parsers</A> </H2> <P> MIMEParsers get their own type which is optimized for static and regex parser strings. <PRE> typedef struct _HTMIMEParseSet HTMIMEParseSet; extern void HTRequest_setMIMEParseSet (HTRequest *request, HTMIMEParseSet * parseSet, BOOL local); extern HTMIMEParseSet * HTRequest_MIMEParseSet (HTRequest *request, BOOL * pLocal); </PRE> <H2> <A NAME="default">Which Default Protocol Header Fields To Use?</A> </H2> <P> Libwww supports a large set of headers that can be sent along with a request (or a response for that matter). All headers can be either disabled or enabled using bit flags that are defined in the following. See also the <A HREF="#extra">section on how to extend the default set of supported header fields</A>. <H3> <A NAME="gnhd">General HTTP Header Mask</A> </H3> <P> There are a few header fields which have general applicability for both request and response mesages, but which do not apply to the communication parties or theentity being transferred. This mask enables and disables these headers. If the bit is not turned on they are not sent. <PRE> typedef enum _HTGnHd { HT_G_CC = 0x1, HT_G_CONNECTION = 0x2, HT_G_DATE = 0x4, HT_G_PRAGMA_NO_CACHE= 0x8, HT_G_FORWARDED = 0x10, HT_G_MESSAGE_ID = 0x20, HT_G_MIME = 0x40, HT_G_TRAILER = 0x80, HT_G_TRANSFER = 0x100, HT_G_EXTRA_HEADERS = 0x200 } HTGnHd; #define DEFAULT_GENERAL_HEADERS \ HT_G_CONNECTION + HT_G_CC + HT_G_TRANSFER + HT_G_TRAILER + \ HT_G_EXTRA_HEADERS extern void HTRequest_setGnHd (HTRequest *request, HTGnHd gnhd); extern void HTRequest_addGnHd (HTRequest *request, HTGnHd gnhd); extern HTGnHd HTRequest_gnHd (HTRequest *request); </PRE> <H3> <A NAME="rqhd">Request Headers</A> </H3> <P> The request header fields allow the client to pass additional information about the request (and about the client itself) to the server. All headers are optional but the default value is all request headers if present <EM>except</EM> <CODE>From</CODE> and <CODE>Pragma</CODE>. <PRE> typedef enum _HTRqHd { HT_C_ACCEPT_TYPE = 0x1, HT_C_ACCEPT_CHAR = 0x2, HT_C_ACCEPT_ENC = 0x4, HT_C_ACCEPT_TE = 0x8, HT_C_ACCEPT_LAN = 0x10, HT_C_AUTH = 0x20, /* Includes proxy authentication */ HT_C_EXPECT = 0x40, HT_C_FROM = 0x80, HT_C_HOST = 0x100, HT_C_IMS = 0x200, HT_C_IF_MATCH = 0x400, HT_C_IF_MATCH_ANY = 0x800, HT_C_IF_NONE_MATCH = 0x1000, HT_C_IF_NONE_MATCH_ANY=0x2000, HT_C_IF_RANGE = 0x4000, HT_C_IF_UNMOD_SINCE = 0x8000, HT_C_MAX_FORWARDS = 0x10000, HT_C_RANGE = 0x20000, HT_C_REFERER = 0x40000, HT_C_USER_AGENT = 0x80000 } HTRqHd; #define DEFAULT_REQUEST_HEADERS \ HT_C_ACCEPT_TYPE + HT_C_ACCEPT_CHAR + \ HT_C_ACCEPT_ENC + HT_C_ACCEPT_TE + HT_C_ACCEPT_LAN + HT_C_AUTH + \ HT_C_EXPECT + HT_C_HOST + HT_C_REFERER + HT_C_USER_AGENT extern void HTRequest_setRqHd (HTRequest *request, HTRqHd rqhd); extern void HTRequest_addRqHd (HTRequest *request, HTRqHd rqhd); extern HTRqHd HTRequest_rqHd (HTRequest *request); </PRE> <H3> <A NAME="rshd">Response Headers</A> </H3> <P> The response header fields allow the server to pass additional information about the response (and about the server itself) to the client. All headers are optional. <PRE> typedef enum _HTRsHd { HT_S_AGE = 0x1, HT_S_LOCATION = 0x2, HT_S_PROXY_AUTH = 0x4, HT_S_PUBLIC = 0x8, HT_S_RETRY_AFTER = 0x10, HT_S_SERVER = 0x20, HT_S_VARY = 0x40, HT_S_WARNING = 0x80, HT_S_WWW_AUTH = 0x100, HT_S_TRAILER = 0x200 } HTRsHd; #define DEFAULT_RESPONSE_HEADERS HT_S_SERVER extern void HTRequest_setRsHd (HTRequest * request, HTRsHd rshd); extern void HTRequest_addRsHd (HTRequest * request, HTRsHd rshd); extern HTRsHd HTRequest_rsHd (HTRequest * request); </PRE> <H3> <A NAME="enhd">Entity Header Mask</A> </H3> <P> The entity headers contain information about the object sent in the HTTP transaction. See the <A HREF="HTAnchor.html">Anchor module</A>, for the storage of entity headers. This flag defines which headers are to be sent in a request together with an entity body. All headers are optional but the default value is <EM>ALL ENTITY HEADERS IF PRESENT</EM> <PRE> typedef enum _HTEnHd { HT_E_ALLOW = 0x1, HT_E_CONTENT_BASE = 0x2, HT_E_CONTENT_ENCODING = 0x4, HT_E_CONTENT_LANGUAGE = 0x8, HT_E_CONTENT_LENGTH = 0x10, HT_E_CONTENT_LOCATION = 0x20, HT_E_CONTENT_MD5 = 0x40, HT_E_CONTENT_RANGE = 0x80, HT_E_CTE = 0x100, /* Content-Transfer-Encoding */ HT_E_CONTENT_TYPE = 0x200, HT_E_DERIVED_FROM = 0x400, HT_E_ETAG = 0x800, HT_E_EXPIRES = 0x1000, HT_E_LAST_MODIFIED = 0x2000, HT_E_LINK = 0x4000, HT_E_TITLE = 0x8000, HT_E_URI = 0x10000, HT_E_VERSION = 0x20000 } HTEnHd; #define DEFAULT_ENTITY_HEADERS 0xFFFFFFFF /* all */ extern void HTRequest_setEnHd (HTRequest *request, HTEnHd enhd); extern void HTRequest_addEnHd (HTRequest *request, HTEnHd enhd); extern HTEnHd HTRequest_enHd (HTRequest *request); </PRE> <H2> <A NAME="extra">Extending The Default Set Of Header Fields</A> </H2> <P> See also how to <A HREF="#default">set up default header fields</A>. There are three ways to extend the set of headers that are sent in a request: <OL> <LI> A simple <A HREF="HTAssoc.html">association list</A> <LI> A <A HREF="HTHeader.html">stream oriented approach where the stream (called a generator)</A> has direct access to the outgoing stream. That is, it can add any header it likes. <LI> <A HREF="/Protocols/HTTP/ietf-http-ext/">HTTP extension mechanism</A> which is a much better way for handling extensions. </OL> <H3> 1) Simple Association List </H3> <P> Add the (name, value) and it will be converted into MIME header format as name: value. Do NOT add <TT>CRLF</TT> line termination - this is done by the HTTP header generator stream <PRE> extern BOOL HTRequest_addExtraHeader (HTRequest * request, char * token, char * value); extern HTAssocList * HTRequest_extraHeader (HTRequest * request); extern BOOL HTRequest_deleteExtraHeaderAll (HTRequest * request); </PRE> <H3> 2) Stream Oriented Header Generators </H3> <P> Extra header information can be send along with a request using <A HREF="HTHeader.html">header generators</A>. The text is sent as is so it must be preformatted with <TT>CRLF</TT> line terminators. You can also register <A HREF="HTHeader.html">MIME header parsers</A> using the HTHeader module. <PRE> extern void HTRequest_setGenerator (HTRequest *request, HTList *gens, BOOL override); extern HTList * HTRequest_generator (HTRequest *request, BOOL *override); </PRE> <H3> 3) HTTP Extension Framework </H3> <P> These association lists contain the information that we are to send as HTTP Extension Framework. This is not done yet but you can find some hints in the PEP module <PRE> /* TBD */ </PRE> <H2> <A NAME="Accept">User And Application Preferences Using Accept Headers</A> </H2> <P> The Accept family of headers is an important part of HTTP handling the format negotiation. The Library supports both a global set of accept headers that are used in <EM>all</EM> HTTP requests and a local set of accept headers that are used in specific requests only. The global ones are defined in the <A HREF="HTFormat.html">Format Manager</A>. <P> Each request can have its local set of accept headers that either are added to the global set or replaces the global set of accept headers. Non of the headers <EM>have</EM> to be set. If the global set is sufficient for all requests then this us perfectly fine. If the parameter "override" is set then only local accept headers are used, else <EM>both</EM> local and global headers are used. <H3> Content Types </H3> <P> The <EM>local</EM> list of specific conversions which the format manager can do in order to fulfill the request. It typically points to a list set up on initialisation time for example by <A HREF="HTInit.html">HTInit()</A>. There is also a <A HREF="HTFormat.html#z17"><EM>global</EM></A> list of conversions which contains a generic set of possible conversions. <PRE> extern void HTRequest_setConversion (HTRequest *request, HTList *type, BOOL override); extern HTList * HTRequest_conversion (HTRequest *request); </PRE> <H3> Content Encodings </H3> <P> The list of encodings acceptable in the output stream. <PRE> extern void HTRequest_setEncoding (HTRequest *request, HTList *enc, BOOL override); extern HTList * HTRequest_encoding (HTRequest *request); </PRE> <H3> Transfer Encodings </H3> <P> The list of transfer encodings acceptable in the output stream. <PRE> extern void HTRequest_setTransfer (HTRequest *request, HTList *te, BOOL override); extern HTList * HTRequest_transfer (HTRequest *request); </PRE> <H3> Content Languages </H3> <P> The list of (human) language values acceptable in the response. The default is all languages. <PRE> extern void HTRequest_setLanguage (HTRequest *request, HTList *lang, BOOL override); extern HTList * HTRequest_language (HTRequest *request); </PRE> <H3> Content Charsets </H3> <P> The list of charsets accepted by the application <PRE> extern void HTRequest_setCharset (HTRequest *request, HTList *charset, BOOL override); extern HTList * HTRequest_charset (HTRequest *request); </PRE> <H2> <A NAME="Cache">HTTP Cache Validation and Cache Control</A> </H2> <P> The Library has two concepts of caching: in memory and on file. When loading a document, this flag can be set in order to define who can give a response to the request. The memory buffer is considered to be equivalent to a history buffer. That is, it doesn't not follow the same expiration mechanism that is characteristic for a persistent file cache. <P> You can also set the cache to run in disconnected mode - see the <A HREF="HTCache.html">Cache manager</A> for more details on how to do this. <PRE> typedef enum _HTReload { HT_CACHE_OK = 0x0, /* Use any version available */ HT_CACHE_FLUSH_MEM = 0x1, /* Reload from file cache or network */ HT_CACHE_VALIDATE = 0x2, /* Validate cache entry */ HT_CACHE_END_VALIDATE = 0x4, /* End to end validation */ HT_CACHE_RANGE_VALIDATE = 0x8, HT_CACHE_FLUSH = 0x10, /* Force full reload */ HT_CACHE_ERROR = 0x20 /* An error occurred in the cache */ } HTReload; extern void HTRequest_setReloadMode (HTRequest *request, HTReload mode); extern HTReload HTRequest_reloadMode (HTRequest *request); </PRE> <H2> Default PUT name </H2> <P> When publishing to a server which doesn't accept a URL ending in "/", e.g, the default Overview, index page, you can use <CODE>HTRequest_setAltPutName</CODE> to setup the intended URL. If this variable is defined, it'll be used during the cache lookup and update operationsm, so that cache-wise, it will look as if we had published only to "/". <PRE> extern char * HTRequest_defaultPutName (HTRequest * me); extern BOOL HTRequest_setDefaultPutName (HTRequest * me, char * name); extern BOOL HTRequest_deleteDefaultPutName (HTRequest * me); </PRE> <H3> HTTP Cache Control Directives </H3> <P> The cache control directives are all part of the cache control header and control the behavior of any intermediate cache between the user agent and the origin server. This association list is a list of the connection control directives that are to be sent as part of the <CODE>Cache-Control</CODE> header. <PRE> extern BOOL HTRequest_addCacheControl (HTRequest * request, char * token, char *value); extern BOOL HTRequest_deleteCacheControlAll (HTRequest * request); extern HTAssocList * HTRequest_cacheControl (HTRequest * request); </PRE> <H2> <A NAME="Date">Date and Time Stamp when Request was Issued</A> </H2> <P> The start time when the request was issued may be of value to the cache validation mechanism as described by the HTTP/1.1 specification. The value is automatically set when creating the request headers and sending off the request. The time is a local time. <PRE> extern time_t HTRequest_date (HTRequest * request); extern BOOL HTRequest_setDate (HTRequest * request, time_t date); </PRE> <H2> <A NAME="Expect">HTTP Expect Directives</A> </H2> <P> The Expect request-header field is used to indicate that particular server behaviors are required by the client. A server that does not understand or is unable to comply with any of the expectation values in the Expect field of a request MUST respond with appropriate error status. <PRE> extern BOOL HTRequest_addExpect (HTRequest * me, char * token, char * value); extern BOOL HTRequest_deleteExpect (HTRequest * me); extern HTAssocList * HTRequest_expect (HTRequest * me); </PRE> <H2> <A NAME="Partial">Partial Requests and Range Retrievals</A> </H2> <P> Libwww can issue range requests in case we have already obtained a part of the entity body. Since all HTTP entities are represented in HTTP messages as sequences of bytes, the concept of a byte range is meaningful for any HTTP entity. (However, not all clients and servers need to support byte-range operations.) Byte range specifications in HTTP apply to the sequence of bytes in the entity-body (not necessarily the same as the message-body). A byte range operation may specify a single range of bytes, or a set of ranges within a single entity. <PRE> extern BOOL HTRequest_addRange (HTRequest * request, char * unit, char * range); extern BOOL HTRequest_deleteRangeAll (HTRequest * request); extern HTAssocList * HTRequest_range (HTRequest * request); </PRE> <H2> <A NAME="Connection">HTTP Connection Control Request Directives</A> </H2> <P> The connection control directives are all part of the connection header and control the behavior of this connection. This association list is a list of the connection control directives that are to be sent as part of the <CODE>Connection</CODE> header. <PRE> extern BOOL HTRequest_addConnection (HTRequest * request, char * token, char * value); extern BOOL HTRequest_deleteConnection (HTRequest * request); extern HTAssocList * HTRequest_connection (HTRequest * request); </PRE> <H2> <A NAME="Access">HTTP Access Authentication Credentials</A> </H2> <P> When a access denied response is returned to the Library, for example from a remote HTTP server, this code is passed back to the application. The application can then decide whether a new request should be established or not. These two methods return the authentication information required to issue a new request, that is the new anchor and any list of keywords associated with this anchor. <PRE> extern BOOL HTRequest_addCredentials (HTRequest * request, char * token, char * value); extern BOOL HTRequest_deleteCredentialsAll (HTRequest * request); extern HTAssocList * HTRequest_credentials (HTRequest * request); </PRE> <H3> Realms </H3> <P> The realm is normally set and used by the authentication filters. <PRE> extern BOOL HTRequest_setRealm (HTRequest * request, char * realm); extern const char * HTRequest_realm (HTRequest * request); extern BOOL HTRequest_deleteRealm (HTRequest * me); </PRE> <H2> <A NAME="Referer">HTTP Referer Field</A> </H2> <P> If this parameter is set then a `Referer: &lt;parent address&gt; can be generated in the request to the server, see <A HREF="http://www.w3.org/Protocols/">Referer field in a HTTP Request</A> <PRE> extern void HTRequest_setParent (HTRequest *request, HTParentAnchor *parent); extern HTParentAnchor * HTRequest_parent (HTRequest *request); </PRE> <H2> <A NAME="before">Local BEFORE and AFTER Filters</A> </H2> <P> The request object may have it's own before and after <A HREF="HTFilter.html">filters</A>. These may override or suplement the global set in <A HREF="HTNet.html">HTNet</A>. The request object itself handles the list element, that is this should not be freed bu the caller. <H3> BEFORE Filters </H3> <P> The BEFORE <A HREF="HTFilter.html">filters</A> are called just after the request has been passed to the Library but before any request is issued over the network. A BEFORE can infact stop a request completely from being processed. <H4> Add a local BEFORE Filter </H4> <P> You can add a local <I>BEFORE</I> filter for a single request so that the both the local and global <I>BEFORE</I> filters are called or you can replace the global filters with a local set. Note that the local set can be NULL. This can be used to effectively disable all <I>BEFORE</I> filters without unregistering the global ones. <PRE> extern BOOL HTRequest_addBefore (HTRequest * request, HTNetBefore * filter, const char * tmplate, void * param, HTFilterOrder order, BOOL override); extern HTList * HTRequest_before (HTRequest * request, BOOL * override); </PRE> <H4> Delete a Local BEFORE Filter </H4> <P> You can delete a local BEFORE filter explicitly by passing the filter itself or you can delete all filters which are registered for a certain status code. <PRE>extern BOOL HTRequest_deleteBefore (HTRequest * request, HTNetBefore * filter); extern BOOL HTRequest_deleteBeforeAll (HTRequest * request); </PRE> <H3> AFTER Filters </H3> <P> You can add a local AFTER filter for a single request so that the both the local and global AFTER filters are called or you can replace the global filters with a local set. Note that the local set can be NULL. This can be used to effectively disable all AFTER filters without unregistering the global ones. <P> AFTER filters can be registered to handle a certain set of return values from the protocol modules, for example explicitly to handle redirection, authentication, etc. You can find all the available codes in the HTNet object description. <H4> Add a local AFTER Filter </H4> <PRE> extern BOOL HTRequest_addAfter (HTRequest * request, HTNetAfter * filter, const char * tmplate, void * param, int status, HTFilterOrder order, BOOL override); extern HTList * HTRequest_after (HTRequest * request, BOOL * override); </PRE> <H4> Delete an AFTER Filter </H4> <P> You can delete a local AFTER filter explicitly by passing the filter itself or you can delete all filters which are registered for a certain status code. <PRE> extern BOOL HTRequest_deleteAfter (HTRequest * request, HTNetAfter * filter); extern BOOL HTRequest_deleteAfterStatus (HTRequest * request, int status); extern BOOL HTRequest_deleteAfterAll (HTRequest * request); </PRE> <H2> <A NAME="App2Net">Sending data from App to Network</A> </H2> <P> Multiple Request objects can be connected in order to create a <A HREF="../User/Architecture/PostWeb.html">PostWeb</A> for sending data from one location (source) to another (destination). Request objects are bound together by connecting the output stream of the source with the input stream of the destination requst. The connection can be done directly so that the output from the source is exactly what is sent to the destination or there can be a conversion between the two streams so that we can do conversions on the fly while copying data. This is in fact the way we use for building a proxy server. <P> The Library supports two ways of posting a data object to a remote destination: Input comes from a socket descriptor or from memory. In the case where you want to <EM>copy</EM> a URL, for example from local file system <EM>or</EM> from a remote HTTP server then you must use the <A HREF="../User/Architecture/PostWeb.html">PostWeb design</A>. This model operates by using at least two request objects which gets linked to eachother as part of the PostWeb model. However, if you are posting from memory, we only use <EM>one</EM> request object to perform the operation. In order to do this, the application must register a callback function that can be called when the <A HREF="HTTP.c">HTTP client module</A> is ready for accepting data. be included as part of the body and/or as extra metainformation. In the latter case you need to register a callback function of the following type using the methods provided in the next section. <PRE> typedef int HTPostCallback (HTRequest * request, HTStream * target); extern void HTRequest_setPostCallback (HTRequest * request, HTPostCallback * cbf); extern HTPostCallback * HTRequest_postCallback (HTRequest * request); </PRE> <P> The Entity Anchor is either the anchor directly associated with the Request object or the post anchor associated with the object. The purpose of the entity anchor is if we are to send data to a remote server then we get the metainformation using the entity anchor. <PRE> extern BOOL HTRequest_setEntityAnchor (HTRequest * request, HTParentAnchor * anchor); extern HTParentAnchor * HTRequest_entityAnchor (HTRequest * request); </PRE> <H3> Input Stream </H3> <P> The input stream is to be used to put data <EM>to</EM> the network. Normally each protocol sets the input stream in order to generate the protocol headers while making a request. <PRE> extern void HTRequest_setInputStream (HTRequest * request, HTStream * input); extern HTStream *HTRequest_inputStream (HTRequest * request); </PRE> <H3> Is This Request part of a Post Web? (Deprecated) </H3> <P> Check to see if this request object is part of a Post Web. <PRE> extern BOOL HTRequest_isPostWeb (HTRequest * request); </PRE> <H3> Source of a Request </H3> <P> A request may have a source in which is another request object that as output stream has the input stream of this request object. <PRE> extern BOOL HTRequest_setSource (HTRequest * request, HTRequest * source); extern HTRequest * HTRequest_source (HTRequest * request); </PRE> <H2> <A NAME="Net2App">Streams From Network to Application</A> </H2> <H3> Default Output Stream </H3> <P> The output stream is to be used to put data down to as they come in <B>from</B> the network and back to the application. The default value is <CODE>NULL</CODE> which means that the stream goes to the user (display). <PRE> extern void HTRequest_setOutputStream (HTRequest *request, HTStream *output); extern HTStream *HTRequest_outputStream (HTRequest *request); </PRE> <H3> Default Output Stream Format </H3> <P> The desired format of the output stream. This is used in the <A HREF="HTFormat.html">stream stack builder</A> to determine which stream to plug in to deal with the data. If <CODE>NULL</CODE>, then <A HREF="HTFormat.html#FormatTypes">WWW_PRESENT</A> is default value. <PRE> extern void HTRequest_setOutputFormat (HTRequest *request, HTFormat format); extern HTFormat HTRequest_outputFormat (HTRequest *request); </PRE> <H3> Has Output Stream been Connected to Channel? (Deprecated) </H3> <P> Has output stream been connected to the channel? If not then we must free it explicitly when deleting the request object <PRE>extern void HTRequest_setOutputConnected (HTRequest * request, BOOL mode); extern BOOL HTRequest_outputConnected (HTRequest * request); </PRE> <H3> Default Debug Stream </H3> <P> All object bodies sent from the server with status codes different from <CODE>200 OK</CODE> will be put down this stream. This can be used for redirecting body information in status codes different from "200 OK" to for example a debug window. If the value is NULL (default) then the stream is not set up. <PRE> extern void HTRequest_setDebugStream (HTRequest *request, HTStream *debug); extern HTStream *HTRequest_debugStream (HTRequest *request); </PRE> <H3> Default Debug Stream Format </H3> <P> The desired format of the error stream. This can be used to get unconverted data etc. from the library. The default value if <CODE>WWW_HTML</CODE> as a character based only has one WWW_PRESENT. <PRE> extern void HTRequest_setDebugFormat (HTRequest *request, HTFormat format); extern HTFormat HTRequest_debugFormat (HTRequest *request); </PRE> <H2> <A NAME="context">Context Swapping</A> </H2> <P> In multi threaded applications it is often required to keep track of the context of a request so that when the Library returns a result of a request, it can be put into the context it was in before the request was first passed to the Library. This call back function allows the application to do this. <PRE> typedef int HTRequestCallback (HTRequest * request, void *param); extern void HTRequest_setCallback (HTRequest *request, HTRequestCallback *cb); extern HTRequestCallback *HTRequest_callback (HTRequest *request); </PRE> <P> The callback function can be passed an arbitrary pointer (the void part) which can describe the context of the current request structure. If such context information is required then it can be set using the following methods: <PRE> extern void HTRequest_setContext (HTRequest *request, void *context); extern void *HTRequest_context (HTRequest *request); </PRE> <H2> <A NAME="FullURI">Should we Issue a full HTTP Request-URI?</A> </H2> <P> In early versions of HTTP, the request sent to the remote server varies whether we use a proxy or go directly to the origin server. The default value is <EM>OFF</EM> but we use a full request if we are talking to a proxy server. <PRE> extern void HTRequest_setFullURI (HTRequest *request, BOOL mode); extern BOOL HTRequest_fullURI (HTRequest *request); </PRE> <H2> <A NAME="Proxies">Handling Proxies</A> </H2> <P> In case we are using a proxy for this requst then we can register it together with the request object. That way we can find the proxy and look for authentication information, for example in the <A HREF="HTAAUtil.html">Authentication filter</A>. The string is freed by the Request object on deletion. This is normally handled automatically by the <A HREF="HTProxy.html">proxy and gateway module</A> <PRE> extern BOOL HTRequest_setProxy (HTRequest * request, const char * proxy); extern char * HTRequest_proxy (HTRequest * request); extern BOOL HTRequest_deleteProxy (HTRequest * request); </PRE> <H2> <A NAME="Count">Bytes Read or Written in a Request</A> </H2> <P> This function returns the bytes read in the current request. For a deeper description of what the current request is, please read the user's guide. This function can be used in for example the <A HREF="HTAlert.html">HTAlert module</A> to give the number of bytes read or written in a progress message. <PRE> extern long HTRequest_bodyRead (HTRequest * request); extern long HTRequest_bodyWritten (HTRequest * request); </PRE> <P> You can also get the total number of bytes read or written including the headers <PRE> extern long HTRequest_bytesRead (HTRequest * request); extern long HTRequest_bytesWritten (HTRequest * request); </PRE> <PRE> #endif /* HTREQ_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTReq.html,v 2.68 2025/07/12 10:44:41 kahan Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTReqMan.c�����������������������������������������������������������������������0100644�0000764�0000144�00000114217�07141775017�015546� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTReqMan.c ** REQUEST MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTReqMan.c,v 2.81 2025/08/02 10:38:07 kahan Exp $ ** ** Authors ** TBL Tim Berners-Lee timbl@w3.org ** JFG Jean-Francois Groff jfg@dxcern.cern.ch ** DD Denis DeLaRoca (310) 825-4580 <CSP1DWD@mvs.oac.ucla.edu> ** HFN Henrik Frystyk, frystyk@w3.org ** History ** 8 Jun 92 Telnet hopping prohibited as telnet is not secure TBL ** 26 Jun 92 When over DECnet, suppressed FTP, Gopher and News. JFG ** 6 Oct 92 Moved HTClientHost and HTlogfile into here. TBL ** 17 Dec 92 Tn3270 added, bug fix. DD ** 4 Feb 93 Access registration, Search escapes bad chars TBL ** PARAMETERS TO HTSEARCH AND HTLOADRELATIVE CHANGED ** 28 May 93 WAIS gateway explicit if no WAIS library linked in. ** Dec 93 Bug change around, more reentrant, etc ** 09 May 94 logfile renamed to HTlogfile to avoid clash with WAIS ** 8 Jul 94 Insulate free() from _free structure element. ** 02 Sep 95 Rewritten and spawned from HTAccess.c, HFN */ #if !defined(HT_DIRECT_WAIS) && !defined(HT_DEFAULT_WAIS_GATEWAY) #define HT_DEFAULT_WAIS_GATEWAY "http://www.w3.org:8001/" #endif /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTParse.h" #include "HTNoFree.h" #include "HTAlert.h" #include "HTError.h" #include "HTNetMan.h" #include "HTEvent.h" #include "HTProt.h" #include "HTHeader.h" #include "HTLib.h" #include "HTReqMan.h" /* Implemented here */ #ifndef HT_MAX_RELOADS #define HT_MAX_RELOADS 6 #endif PRIVATE int HTMaxRetry = HT_MAX_RELOADS; struct _HTStream { HTStreamClass * isa; /* ... */ }; /* --------------------------------------------------------------------------*/ /* Create and delete the HTRequest Object */ /* --------------------------------------------------------------------------*/ PUBLIC HTRequest * HTRequest_new (void) { HTRequest * me; if ((me = (HTRequest *) HT_CALLOC(1, sizeof(HTRequest))) == NULL) HT_OUTOFMEM("HTRequest_new()"); /* Force Reload */ me->reload = HT_CACHE_OK; /* no default PUT name */ me->default_put_name = NULL; /* Set the default user profile */ me->userprofile = HTLib_userProfile(); /* Format of output */ me->output_format = WWW_PRESENT; /* default it to present to user */ me->debug_format = WWW_DEBUG; /* default format of error messages */ /* HTTP headers */ me->GenMask = DEFAULT_GENERAL_HEADERS; me->RequestMask = DEFAULT_REQUEST_HEADERS; me->ResponseMask = DEFAULT_RESPONSE_HEADERS; me->EntityMask = DEFAULT_ENTITY_HEADERS; /* Default retry after value */ me->priority = HT_PRIORITY_MAX; /* Default max forward value */ me->max_forwards = -1; /* Content negotiation */ me->ContentNegotiation = YES; /* Do this by default */ HTTRACE(CORE_TRACE, "Request..... Created %p\n" _ me); return me; } /* HTRequest_clear ** --------------- ** Clears all protocol specific information so that the request object ** can be used for another request. ** Returns YES if OK, else NO */ PUBLIC BOOL HTRequest_clear (HTRequest * me) { if (me) { me->error_stack = NULL; me->net = NULL; me->realm = NULL; me->credentials = NULL; me->connected = NO; if (me->default_put_name) HTRequest_deleteDefaultPutName (me); if (me->response) { HTResponse_delete(me->response); me->response = NULL; } return YES; } return NO; } /* HTRequest_dup ** ------------- ** Creates a new HTRequest object as a duplicate of the src request. ** Returns YES if OK, else NO */ PUBLIC HTRequest * HTRequest_dup (HTRequest * src) { HTRequest * me; if (!src) return NULL; if ((me = (HTRequest *) HT_MALLOC(sizeof(HTRequest))) == NULL) HT_OUTOFMEM("HTRequest_dup"); memcpy(me, src, sizeof(HTRequest)); HTTRACE(CORE_TRACE, "Request..... Duplicated %p to %p\n" _ src _ me); return me; } /* HTRequest_dupInternal ** --------------------- ** Creates a new HTRequest object as a duplicate of the src request. ** The difference to the HTRequest_dup function is that we don't copy the ** error_stack and other information that the application keeps in its ** copy of the request object. Otherwise it will be freed multiple times ** Returns YES if OK, else NO */ PUBLIC HTRequest * HTRequest_dupInternal (HTRequest * src) { HTRequest * me; if (!src) return 0; if ((me = (HTRequest *) HT_MALLOC(sizeof(HTRequest))) == NULL) HT_OUTOFMEM("HTRequest_dup"); memcpy(me, src, sizeof(HTRequest)); HTRequest_clear(me); return me; } PUBLIC void HTRequest_delete (HTRequest * me) { if (me) { HTTRACE(CORE_TRACE, "Request..... Delete %p\n" _ me); if (me->net) HTNet_setRequest(me->net, NULL); /* ** Make sure we don't delete the same stream twice, when the output ** stream and the debug stream are the same. */ if (me->orig_output_stream == me->orig_debug_stream) { me->orig_debug_stream = NULL; } /* Should we delete the output stream? */ if (me->orig_output_stream) { HTTRACE(CORE_TRACE, "Request..... Deleting dangling output stream\n"); (*me->orig_output_stream->isa->_free)(me->orig_output_stream); me->orig_output_stream = NULL; HTNoFreeStream_delete(me->output_stream); me->output_stream = NULL; } /* Should we delete the debug stream? */ if (me->orig_debug_stream) { HTTRACE(CORE_TRACE, "Request..... Deleting dangling debug stream\n"); (*me->orig_debug_stream->isa->_free)(me->orig_debug_stream); me->orig_debug_stream = NULL; HTNoFreeStream_delete(me->debug_stream); me->debug_stream = NULL; } /* Clean up the error stack */ if (me->error_stack) HTError_deleteAll(me->error_stack); /* Before and After Filters */ if (me->afters) HTNetCall_deleteAfterAll(me->afters); if (me->befores) HTNetCall_deleteBeforeAll(me->befores); /* default PUT name */ if (me->default_put_name) HTRequest_deleteDefaultPutName (me); /* Access Authentication */ HT_FREE(me->realm); if (me->credentials) HTAssocList_delete(me->credentials); /* Cache control headers */ if (me->cache_control) HTAssocList_delete(me->cache_control); /* Byte ranges */ if (me->byte_ranges) HTAssocList_delete(me->byte_ranges); /* Connection headers */ if (me->connection) HTAssocList_delete(me->connection); /* Connection headers */ if (me->expect) HTAssocList_delete(me->expect); /* Proxy information */ HT_FREE(me->proxy); /* Extra header fields */ if (me->extra_headers) HTAssocList_delete(me->extra_headers); /* HTTP Extension Information */ if (me->optional) HTAssocList_delete(me->optional); if (me->mandatory) HTAssocList_delete(me->mandatory); /* Any response object */ if (me->response) HTResponse_delete(me->response); HT_FREE(me); } } /* ** Kill this request */ PUBLIC BOOL HTRequest_kill(HTRequest * me) { return me ? HTNet_kill(me->net) : NO; } /* --------------------------------------------------------------------------*/ /* Methods on the HTRequest Object */ /* --------------------------------------------------------------------------*/ /* ** Internal request object */ PUBLIC BOOL HTRequest_setInternal (HTRequest * me, BOOL mode) { if (me) { me->internal = mode; return YES; } return NO; } PUBLIC BOOL HTRequest_internal (HTRequest * me) { return (me ? me->internal : NO); } /* ** Should we flush immediately? */ PUBLIC BOOL HTRequest_setFlush (HTRequest * me, BOOL mode) { if (me) { me->flush = mode; return YES; } return NO; } PUBLIC BOOL HTRequest_flush (HTRequest * me) { return (me ? me->flush : NO); } /* ** Date/time stamp when then request was issued ** This is normally set when generating the request headers. */ PUBLIC time_t HTRequest_date (HTRequest * me) { return me ? me->date : -1; } PUBLIC BOOL HTRequest_setDate (HTRequest * me, time_t date) { if (me) { me->date = date; return YES; } return NO; } /* ** Method */ PUBLIC void HTRequest_setMethod (HTRequest * me, HTMethod method) { if (me) me->method = method; } PUBLIC HTMethod HTRequest_method (HTRequest * me) { return me ? me->method : METHOD_INVALID; } /* ** Priority to be inherited by all HTNet object hanging off this request ** The priority can later be chaned by calling the HTNet object directly */ PUBLIC BOOL HTRequest_setPriority (HTRequest * me, HTPriority priority) { if (me) { me->priority = priority; return YES; } return NO; } PUBLIC HTPriority HTRequest_priority (HTRequest * me) { return (me ? me->priority : HT_PRIORITY_INV); } /* ** User Profile */ PUBLIC BOOL HTRequest_setUserProfile (HTRequest * me, HTUserProfile * up) { if (me) { me->userprofile = up; return YES; } return NO; } PUBLIC HTUserProfile * HTRequest_userProfile (HTRequest * me) { return me ? me->userprofile : NULL; } /* ** Net Object */ PUBLIC BOOL HTRequest_setNet (HTRequest * me, HTNet * net) { if (me) { me->net = net; return YES; } return NO; } PUBLIC HTNet * HTRequest_net (HTRequest * me) { return me ? me->net : NULL; } /* ** Response Object. If the object does not exist then create it at the ** same time it is asked for. */ PUBLIC HTResponse * HTRequest_response (HTRequest * me) { if (me) { if (!me->response) me->response = HTResponse_new(); return me->response; } return NULL; } PUBLIC BOOL HTRequest_setResponse (HTRequest * me, HTResponse * response) { if (me) { if (me->response) HTResponse_delete(me->response); me->response = response; return YES; } return NO; } /* Error Management ** ---------------- ** Returns the error stack if a stream is */ PUBLIC HTList * HTRequest_error (HTRequest * me) { return me ? me->error_stack : NULL; } PUBLIC void HTRequest_setError (HTRequest * me, HTList * list) { if (me) me->error_stack = list; } /* begin _GM_ */ /* Note: libwww bug ID: GM11 */ PUBLIC void HTRequest_deleteAllErrors (HTRequest * request) { HTError_deleteAll(request->error_stack); HTRequest_setError(request, NULL); } /* end _GM_ */ PUBLIC BOOL HTRequest_addError (HTRequest * me, HTSeverity severity, BOOL ignore, int element, void * par, unsigned int length, char * where) { if (me) { if (!me->error_stack) me->error_stack = HTList_new(); return HTError_add(me->error_stack, severity, ignore, element, par, length, where); } return NO; } PUBLIC BOOL HTRequest_addSystemError (HTRequest * me, HTSeverity severity, int errornumber, BOOL ignore, char * syscall) { if (me) { if (!me->error_stack) me->error_stack = HTList_new(); return HTError_addSystem(me->error_stack, severity, errornumber, ignore, syscall); } return NO; } /* ** Set max number of automatic reload. Default is HT_MAX_RELOADS */ PUBLIC BOOL HTRequest_setMaxRetry (int newmax) { if (newmax > 0) { HTMaxRetry = newmax; return YES; } return NO; } PUBLIC int HTRequest_maxRetry (void) { return HTMaxRetry; } PUBLIC int HTRequest_retrys (HTRequest * me) { return me ? me->retrys : 0; } PUBLIC BOOL HTRequest_addRetry (HTRequest * me) { return (me && me->retrys++); } PUBLIC int HTRequest_AAretrys (HTRequest * me) { return me ? me->AAretrys : 0; } PUBLIC BOOL HTRequest_addAARetry (HTRequest * me) { return (me && me->AAretrys++); } /* ** Should we try again? ** -------------------- ** Returns YES if we are to retry the load, NO otherwise. We check ** this so that we don't go into an infinte loop */ PUBLIC BOOL HTRequest_doRetry (HTRequest * me) { return (me && me->retrys < HTMaxRetry-1); } /* ** Socket mode: preemptive or non-preemptive (blocking or non-blocking) */ PUBLIC void HTRequest_setPreemptive (HTRequest * me, BOOL mode) { if (me) me->preemptive = mode; } PUBLIC BOOL HTRequest_preemptive (HTRequest * me) { return me ? me->preemptive : NO; } /* ** Should we use content negotiation? */ PUBLIC void HTRequest_setNegotiation (HTRequest * me, BOOL mode) { if (me) me->ContentNegotiation = mode; } PUBLIC BOOL HTRequest_negotiation (HTRequest * me) { return me ? me->ContentNegotiation : NO; } /* ** Use preconditions when doing a PUT or a POST. These are the ** if-* header fields that can be used to avoid version conflicts ** etc. */ PUBLIC void HTRequest_setPreconditions (HTRequest * me, HTPreconditions mode) { if (me) me->preconditions = mode; } PUBLIC HTPreconditions HTRequest_preconditions (HTRequest * me) { return me ? me->preconditions : NO; } /* ** Set General Headers */ PUBLIC void HTRequest_setGnHd (HTRequest * me, HTGnHd gnhd) { if (me) me->GenMask = gnhd; } PUBLIC void HTRequest_addGnHd (HTRequest * me, HTGnHd gnhd) { if (me) me->GenMask |= gnhd; } PUBLIC HTGnHd HTRequest_gnHd (HTRequest * me) { return me ? me->GenMask : 0; } /* ** Set Request Headers */ PUBLIC void HTRequest_setRqHd (HTRequest * me, HTRqHd rqhd) { if (me) me->RequestMask = rqhd; } PUBLIC void HTRequest_addRqHd (HTRequest * me, HTRqHd rqhd) { if (me) me->RequestMask |= rqhd; } PUBLIC HTRqHd HTRequest_rqHd (HTRequest * me) { return me ? me->RequestMask : 0; } /* ** Set Response Headers */ PUBLIC void HTRequest_setRsHd (HTRequest * me, HTRsHd rshd) { if (me) me->ResponseMask = rshd; } PUBLIC void HTRequest_addRsHd (HTRequest * me, HTRsHd rshd) { if (me) me->ResponseMask |= rshd; } PUBLIC HTRsHd HTRequest_rsHd (HTRequest * me) { return me ? me->ResponseMask : 0; } /* ** Set Entity Headers (for the object) */ PUBLIC void HTRequest_setEnHd (HTRequest * me, HTEnHd enhd) { if (me) me->EntityMask = enhd; } PUBLIC void HTRequest_addEnHd (HTRequest * me, HTEnHd enhd) { if (me) me->EntityMask |= enhd; } PUBLIC HTEnHd HTRequest_enHd (HTRequest * me) { return me ? me->EntityMask : 0; } /* ** Extra Header Generators. list can be NULL */ PUBLIC void HTRequest_setGenerator (HTRequest * me, HTList *generator, BOOL override) { if (me) { me->generators = generator; me->gens_local = override; } } PUBLIC HTList * HTRequest_generator (HTRequest * me, BOOL *override) { if (me) { *override = me->gens_local; return me->generators; } return NULL; } /* ** Extra Header Parsers. list can be NULL */ PUBLIC void HTRequest_setMIMEParseSet (HTRequest * me, HTMIMEParseSet * parseSet, BOOL local) { if (me) { me->parseSet = parseSet; me->pars_local = local; } } PUBLIC HTMIMEParseSet * HTRequest_MIMEParseSet (HTRequest * me, BOOL * pLocal) { if (me) { if (pLocal) *pLocal = me->pars_local; return me->parseSet; } return NULL; } /* ** Accept Format Types ** list can be NULL */ PUBLIC void HTRequest_setConversion (HTRequest * me, HTList *type, BOOL override) { if (me) { me->conversions = type; me->conv_local = override; } } PUBLIC HTList * HTRequest_conversion (HTRequest * me) { return me ? me->conversions : NULL; } /* ** Accept Encoding ** list can be NULL */ PUBLIC void HTRequest_setEncoding (HTRequest * me, HTList *enc, BOOL override) { if (me) { me->encodings = enc; me->enc_local = override; } } PUBLIC HTList * HTRequest_encoding (HTRequest * me) { return me ? me->encodings : NULL; } /* ** Accept Transfer Encoding ** list can be NULL */ PUBLIC void HTRequest_setTransfer (HTRequest * me, HTList * te, BOOL override) { if (me) { me->tes = te; me->te_local = override; } } PUBLIC HTList * HTRequest_transfer (HTRequest * me) { return me ? me->tes : NULL; } /* ** Accept Language ** list can be NULL */ PUBLIC void HTRequest_setLanguage (HTRequest * me, HTList *lang, BOOL override) { if (me) { me->languages = lang; me->lang_local = override; } } PUBLIC HTList * HTRequest_language (HTRequest * me) { return me ? me->languages : NULL; } /* ** Accept Charset ** list can be NULL */ PUBLIC void HTRequest_setCharset (HTRequest * me, HTList *charset, BOOL override) { if (me) { me->charsets = charset; me->char_local = override; } } PUBLIC HTList * HTRequest_charset (HTRequest * me) { return me ? me->charsets : NULL; } /* ** Are we using the full URL in the request or not? */ PUBLIC void HTRequest_setFullURI (HTRequest * me, BOOL mode) { if (me) me->full_uri = mode; } PUBLIC BOOL HTRequest_fullURI (HTRequest * me) { return me ? me->full_uri : NO; } /* ** Are we using a proxy or not and in that case, which one? */ PUBLIC BOOL HTRequest_setProxy (HTRequest * me, const char * proxy) { if (me && proxy) { StrAllocCopy(me->proxy, proxy); return YES; } return NO; } PUBLIC char * HTRequest_proxy (HTRequest * me) { return me ? me->proxy : NULL; } PUBLIC BOOL HTRequest_deleteProxy (HTRequest * me) { if (me) { HT_FREE(me->proxy); return YES; } return NO; } /* ** Reload Mode */ PUBLIC void HTRequest_setReloadMode (HTRequest * me, HTReload mode) { if (me) me->reload = mode; } PUBLIC HTReload HTRequest_reloadMode (HTRequest * me) { return me ? me->reload : HT_CACHE_OK; } /* Default name to use when publishing to a "/" URL ** ---------------------------- */ PUBLIC char * HTRequest_defaultPutName (HTRequest * me) { if (me) return (me->default_put_name); return NULL; } PUBLIC BOOL HTRequest_setDefaultPutName (HTRequest * me, char * name) { if (me && name) { if (me->default_put_name) HTRequest_deleteDefaultPutName (me); StrAllocCopy (me->default_put_name, name); return YES; } return NO; } PUBLIC BOOL HTRequest_deleteDefaultPutName (HTRequest * me) { if (me && me->default_put_name) { HT_FREE (me->default_put_name); me->default_put_name = NULL; return YES; } return NO; } /* ** Cache control directives. The cache control can be initiated by both ** the server and the client which is the reason for keeping two lists */ PUBLIC BOOL HTRequest_addCacheControl (HTRequest * me, char * token, char * value) { if (me) { if (!me->cache_control) me->cache_control = HTAssocList_new(); return HTAssocList_replaceObject(me->cache_control, token, value); } return NO; } PUBLIC BOOL HTRequest_deleteCacheControl (HTRequest * me) { if (me && me->cache_control) { HTAssocList_delete(me->cache_control); me->cache_control = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTRequest_cacheControl (HTRequest * me) { return (me ? me->cache_control : NULL); } /* ** Byte ranges */ PUBLIC BOOL HTRequest_deleteRange (HTRequest * me) { if (me && me->byte_ranges) { HTAssocList_delete(me->byte_ranges); me->byte_ranges = NULL; return YES; } return NO; } PUBLIC BOOL HTRequest_addRange (HTRequest * me, char * unit, char * range) { if (me) { if (!me->byte_ranges) { me->byte_ranges = HTAssocList_new(); HTRequest_addRqHd(me, HT_C_RANGE); } return HTAssocList_replaceObject(me->byte_ranges, unit, range); } return NO; } PUBLIC HTAssocList * HTRequest_range (HTRequest * me) { return (me ? me->byte_ranges : NULL); } /* ** Connection directives. The connection directives can be initiated by ** both the server and the client which is the reason for keeping two ** lists */ PUBLIC BOOL HTRequest_addConnection (HTRequest * me, char * token, char * value) { if (me) { if (!me->connection) me->connection = HTAssocList_new(); return HTAssocList_replaceObject(me->connection, token, value); } return NO; } PUBLIC BOOL HTRequest_deleteConnection (HTRequest * me) { if (me && me->connection) { HTAssocList_delete(me->connection); me->connection = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTRequest_connection (HTRequest * me) { return (me ? me->connection : NULL); } /* ** Expect directives. */ PUBLIC BOOL HTRequest_addExpect (HTRequest * me, char * token, char * value) { if (me) { if (!me->expect) me->expect = HTAssocList_new(); return HTAssocList_replaceObject(me->expect, token, value); } return NO; } PUBLIC BOOL HTRequest_deleteExpect (HTRequest * me) { if (me && me->expect) { HTAssocList_delete(me->expect); me->expect = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTRequest_expect (HTRequest * me) { return (me ? me->expect : NULL); } /* ** Access Authentication Credentials */ PUBLIC BOOL HTRequest_deleteCredentialsAll (HTRequest * me) { if (me && me->credentials) { HTAssocList_delete(me->credentials); me->credentials = NULL; return YES; } return NO; } PUBLIC BOOL HTRequest_addCredentials (HTRequest * me, char * token, char * value) { if (me) { if (!me->credentials) me->credentials = HTAssocList_new(); return HTAssocList_addObject(me->credentials, token, value); } return NO; } PUBLIC HTAssocList * HTRequest_credentials (HTRequest * me) { return (me ? me->credentials : NULL); } /* ** Access Authentication Realms */ PUBLIC BOOL HTRequest_setRealm (HTRequest * me, char * realm) { if (me && realm && realm != me->realm) { StrAllocCopy(me->realm, realm); return YES; } return NO; } PUBLIC const char * HTRequest_realm (HTRequest * me) { return (me ? me->realm : NULL); } PUBLIC BOOL HTRequest_deleteRealm (HTRequest * me) { if (me) { HT_FREE(me->realm); return YES; } return NO; } /* ** New header fields as association list */ PUBLIC BOOL HTRequest_addExtraHeader (HTRequest * me, char * token, char * value) { if (me && token) { if (!me->extra_headers) me->extra_headers = HTAssocList_new(); return HTAssocList_addObject(me->extra_headers, token, value); } return NO; } PUBLIC HTAssocList * HTRequest_extraHeader (HTRequest * me) { return (me ? me->extra_headers : NULL); } PUBLIC BOOL HTRequest_deleteExtraHeaderAll (HTRequest * me) { if (me && me->extra_headers) { HTAssocList_delete(me->extra_headers); me->extra_headers = NULL; return YES; } return NO; } /* ** HTTP Extension Framework */ PUBLIC BOOL HTRequest_addOptional (HTRequest * me, char * token, char * value) { if (me) { if (!me->optional) me->optional = HTAssocList_new(); return HTAssocList_addObject(me->optional, token,value); } return NO; } PUBLIC HTAssocList * HTRequest_optional (HTRequest * me) { return (me ? me->optional : NULL); } PUBLIC BOOL HTRequest_deleteOptionalAll (HTRequest * me) { if (me && me->optional) { HTAssocList_delete(me->optional); me->optional = NULL; return YES; } return NO; } PUBLIC BOOL HTRequest_addMandatory (HTRequest * me, char * token, char * value) { if (me) { if (!me->mandatory) me->mandatory = HTAssocList_new(); return HTAssocList_addObject(me->mandatory, token,value); } return NO; } PUBLIC HTAssocList * HTRequest_mandatory (HTRequest * me) { return (me ? me->mandatory : NULL); } PUBLIC BOOL HTRequest_deleteMandatoryAll (HTRequest * me) { if (me && me->mandatory) { HTAssocList_delete(me->mandatory); me->mandatory = NULL; return YES; } return NO; } /* ** Anchor */ PUBLIC void HTRequest_setAnchor (HTRequest * me, HTAnchor *anchor) { if (me) { me->anchor = HTAnchor_parent(anchor); me->childAnchor = ((HTAnchor *) me->anchor != anchor) ? (HTChildAnchor *) anchor : NULL; } } PUBLIC HTParentAnchor * HTRequest_anchor (HTRequest * me) { return me ? me->anchor : NULL; } PUBLIC HTChildAnchor * HTRequest_childAnchor (HTRequest * me) { return me ? me->childAnchor : NULL; } /* ** Parent anchor for Referer field */ PUBLIC void HTRequest_setParent (HTRequest * me, HTParentAnchor *parent) { if (me) me->parentAnchor = parent; } PUBLIC HTParentAnchor * HTRequest_parent (HTRequest * me) { return me ? me->parentAnchor : NULL; } /* ** Output stream */ PUBLIC void HTRequest_setOutputStream (HTRequest * me, HTStream *output) { if (me) { if (output) { me->output_stream = HTNoFreeStream_new(output); me->orig_output_stream = output; } else { me->output_stream = output; } } } PUBLIC HTStream *HTRequest_outputStream (HTRequest * me) { return me ? me->output_stream : NULL; } /* ** Output format */ PUBLIC void HTRequest_setOutputFormat (HTRequest * me, HTFormat format) { if (me) me->output_format = format; } PUBLIC HTFormat HTRequest_outputFormat (HTRequest * me) { return me ? me->output_format : NULL; } /* ** Debug stream */ PUBLIC void HTRequest_setDebugStream (HTRequest * me, HTStream *debug) { if (debug) { me->debug_stream = HTNoFreeStream_new(debug); me->orig_debug_stream = debug; } else { me->debug_stream = debug; } } PUBLIC HTStream *HTRequest_debugStream (HTRequest * me) { return me ? me->debug_stream : NULL; } /* ** Debug Format */ PUBLIC void HTRequest_setDebugFormat (HTRequest * me, HTFormat format) { if (me) me->debug_format = format; } PUBLIC HTFormat HTRequest_debugFormat (HTRequest * me) { return me ? me->debug_format : NULL; } /* ** Input stream */ PUBLIC void HTRequest_setInputStream (HTRequest * me, HTStream *input) { if (me) me->input_stream = input; } PUBLIC HTStream *HTRequest_inputStream (HTRequest * me) { return me ? me->input_stream : NULL; } /* ** Net before and after callbacks */ PUBLIC BOOL HTRequest_addBefore (HTRequest * me, HTNetBefore * filter, const char * tmplate, void * param, HTFilterOrder order, BOOL override) { if (me) { me->befores_local = override; if (filter) { if (!me->befores) me->befores = HTList_new(); return HTNetCall_addBefore(me->befores, filter, tmplate, param, order); } return YES; /* It's OK to register a NULL filter */ } return NO; } PUBLIC BOOL HTRequest_deleteBefore (HTRequest * me, HTNetBefore * filter) { if (me && me->befores) return HTNetCall_deleteBefore(me->befores, filter); return NO; } PUBLIC BOOL HTRequest_deleteBeforeAll (HTRequest * me) { if (me && me->befores) { HTNetCall_deleteBeforeAll(me->befores); me->befores = NULL; me->befores_local = NO; return YES; } return NO; } PUBLIC HTList * HTRequest_before (HTRequest * me, BOOL *override) { if (me) { *override = me->befores_local; return me->befores; } return NULL; } PUBLIC BOOL HTRequest_addAfter (HTRequest * me, HTNetAfter * filter, const char * tmplate, void * param, int status, HTFilterOrder order, BOOL override) { if (me) { me->afters_local = override; if (filter) { if (!me->afters) me->afters = HTList_new(); return HTNetCall_addAfter(me->afters, filter, tmplate, param, status, order); } return YES; /* It's OK to register a NULL filter */ } return NO; } PUBLIC BOOL HTRequest_deleteAfter (HTRequest * me, HTNetAfter * filter) { return (me && me->afters) ? HTNetCall_deleteAfter(me->afters, filter) : NO; } PUBLIC BOOL HTRequest_deleteAfterStatus (HTRequest * me, int status) { return (me && me->afters) ? HTNetCall_deleteAfterStatus(me->afters, status) : NO; } PUBLIC BOOL HTRequest_deleteAfterAll (HTRequest * me) { if (me && me->afters) { HTNetCall_deleteAfterAll(me->afters); me->afters = NULL; me->afters_local = NO; return YES; } return NO; } PUBLIC HTList * HTRequest_after (HTRequest * me, BOOL *override) { if (me) { *override = me->afters_local; return me->afters; } return NULL; } /* ** Call back function for context swapping */ PUBLIC void HTRequest_setCallback (HTRequest * me, HTRequestCallback *cbf) { if (me) me->callback = cbf; } PUBLIC HTRequestCallback *HTRequest_callback (HTRequest * me) { return me ? me->callback : NULL; } /* ** Context pointer to be used in context call back function */ PUBLIC void HTRequest_setContext (HTRequest * me, void *context) { if (me) me->context = context; } PUBLIC void *HTRequest_context (HTRequest * me) { return me ? me->context : NULL; } /* ** Has output stream been connected to the channel? If not then we ** must free it explicitly when deleting the request object */ PUBLIC void HTRequest_setOutputConnected (HTRequest * me, BOOL mode) { if (me) me->connected = mode; } PUBLIC BOOL HTRequest_outputConnected (HTRequest * me) { return me ? me->connected : NO; } /* ** Bytes read in this request */ PUBLIC long HTRequest_bodyRead(HTRequest * me) { return me ? HTNet_bytesRead(me->net) - HTNet_headerBytesRead(me->net) : -1; } /* ** Bytes written in this request */ PUBLIC long HTRequest_bodyWritten(HTRequest * me) { return me ? HTNet_bytesWritten(me->net) - HTNet_headerBytesWritten(me->net) : -1; } /* ** Total Bytes read in this request */ PUBLIC long HTRequest_bytesRead (HTRequest * me) { return me ? HTNet_bytesRead(me->net) : -1; } /* ** Bytes written in this request */ PUBLIC long HTRequest_bytesWritten (HTRequest * me) { return me ? HTNet_bytesWritten(me->net) : -1; } /* ** Handle the max forward header value */ PUBLIC BOOL HTRequest_setMaxForwards (HTRequest * me, int maxforwards) { if (me && maxforwards >= 0) { me->max_forwards = maxforwards; HTRequest_addRqHd(me, HT_C_MAX_FORWARDS); /* Turn it on */ return YES; } return NO; } PUBLIC int HTRequest_maxForwards (HTRequest * me) { return me ? me->max_forwards : -1; } /* ** Source request */ PUBLIC BOOL HTRequest_setSource (HTRequest * me, HTRequest * source) { if (me) { me->source = source; return YES; } return NO; } PUBLIC HTRequest * HTRequest_source (HTRequest * me) { return (me ? me->source : NULL); } PUBLIC BOOL HTRequest_isPostWeb (HTRequest * me) { return (me ? me->source != NULL: NO); } /* ** POST Call back function for sending data to the destination */ PUBLIC void HTRequest_setPostCallback (HTRequest * me, HTPostCallback *cbf) { if (me) me->PostCallback = cbf; } PUBLIC HTPostCallback * HTRequest_postCallback (HTRequest * me) { return me ? me->PostCallback : NULL; } /* ** Entity Anchor */ PUBLIC BOOL HTRequest_setEntityAnchor (HTRequest * me, HTParentAnchor * anchor) { if (me) { me->source_anchor = anchor; return YES; } return NO; } PUBLIC HTParentAnchor * HTRequest_entityAnchor (HTRequest * me) { return me ? me->source_anchor ? me->source_anchor : me->anchor : NULL; } /* ------------------------------------------------------------------------- */ /* POST WEB METHODS */ /* ------------------------------------------------------------------------- */ /* ** Add a destination request to this source request structure so that we ** build the internal request representation of the POST web ** Returns YES if OK, else NO */ PUBLIC BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest) { if (src && dest) { dest->source = src->source = src; if (!src->mainDestination) { src->mainDestination = dest; src->destRequests = 1; HTTRACE(CORE_TRACE, "POSTWeb..... Adding dest %p to src %p\n" _ dest _ src); return YES; } else { if (!src->destinations) src->destinations = HTList_new(); if (HTList_addObject(src->destinations, (void *) dest)==YES) { src->destRequests++; HTTRACE(CORE_TRACE, "POSTWeb..... Adding dest %p to src %p\n" _ dest _ src); return YES; } } } return NO; } /* ** Remove a destination request from this source request structure ** Remember only to delete the internal request objects as the other ** comes from the application! ** Returns YES if OK, else NO */ PUBLIC BOOL HTRequest_removeDestination (HTRequest * dest) { BOOL found=NO; if (dest && dest->source) { HTRequest *src = dest->source; if (src->mainDestination == dest) { dest->source = NULL; src->mainDestination = NULL; src->destRequests--; found = YES; } else if (src->destinations) { if (HTList_removeObject(src->destinations, (void *) dest)) { src->destRequests--; found = YES; } } if (found) { if (dest->internal) HTRequest_delete(dest); HTTRACE(CORE_TRACE, "POSTWeb..... Deleting dest %p from src %p\n" _ dest _ src); } if (src->destRequests <= 0) { HTTRACE(CORE_TRACE, "POSTWeb..... terminated\n"); if (src->internal) HTRequest_delete(src); } } return found; } /* ** Check to see whether all destinations are ready. If so then enable the ** source as ready for reading. ** Returns YES if all dests are ready, NO otherwise */ PUBLIC BOOL HTRequest_destinationsReady (HTRequest * me) { HTRequest * source = me ? me->source : NULL; if (source) { if (source->destStreams == source->destRequests) { HTNet * net = source->net; HTTRACE(CORE_TRACE, "POSTWeb..... All destinations are ready!\n"); if (net) /* Might already have finished */ HTEvent_register(HTNet_socket(net), HTEvent_READ, &net->event); return YES; } } return NO; } /* ** Find the source request object and make the link between the ** source output stream and the destination input stream. There can be ** a conversion between the two streams! ** Returns YES if link is made, NO otherwise */ PUBLIC BOOL HTRequest_linkDestination (HTRequest *dest) { if (dest && dest->input_stream && dest->source && dest!=dest->source) { HTRequest *source = dest->source; HTStream *pipe = HTStreamStack(source->output_format, dest->input_format, dest->input_stream, dest, YES); /* Check if we are the only one - else spawn off T streams */ /* @@@ We don't do this yet @@@ */ /* Now set up output stream of the source */ if (source->output_stream) (*source->output_stream->isa->_free)(source->output_stream); source->output_stream = pipe ? pipe : dest->input_stream; HTTRACE(CORE_TRACE, "POSTWeb..... Linking dest %p to src %p\n" _ dest _ source); if (++source->destStreams == source->destRequests) { HTNet *net = source->net; HTTRACE(CORE_TRACE, "POSTWeb..... All destinations ready!\n"); if (net) /* Might already have finished */ HTEvent_register(HTNet_socket(net), HTEvent_READ, &net->event); return YES; } } return NO; } /* ** Remove a feed stream to a destination request from this source ** request structure. When all feeds are removed the request tree is ** ready to take down and the operation can be terminated. ** Returns YES if removed, else NO */ PUBLIC BOOL HTRequest_unlinkDestination (HTRequest *dest) { BOOL found = NO; if (dest && dest->source && dest != dest->source) { HTRequest *src = dest->source; if (src->mainDestination == dest) { src->output_stream = NULL; if (dest->input_stream) (*dest->input_stream->isa->_free)(dest->input_stream); found = YES; } else if (src->destinations) { /* LOOK THROUGH THE LIST AND FIND THE RIGHT ONE */ } if (found) { src->destStreams--; HTTRACE(CORE_TRACE, "POSTWeb..... Unlinking dest %p from src %p\n" _ dest _ src); return YES; } } return NO; } /* ** Removes all request structures in this PostWeb. */ PUBLIC BOOL HTRequest_removePostWeb (HTRequest *me) { if (me && me->source) { HTRequest *source = me->source; /* Kill main destination */ if (source->mainDestination) HTRequest_removeDestination(source->mainDestination); /* Kill all other destinations */ if (source->destinations) { HTList *cur = source->destinations; HTRequest *pres; while ((pres = (HTRequest *) HTList_nextObject(cur)) != NULL) HTRequest_removeDestination(pres); } /* Remove source request */ HTRequest_removeDestination(source); return YES; } return NO; } /* ** Kills all threads in a POST WEB connected to this request but ** NOT this request itself. We also keep the request structures. ** Some requests might be preemptive, for example a SMTP request (when ** that has been implemented). However, this will be handled internally ** in the load function. */ PUBLIC BOOL HTRequest_killPostWeb (HTRequest *me) { if (me && me->source) { HTRequest *source = me->source; HTTRACE(CORE_TRACE, "POSTWeb..... Killing\n"); /* ** Kill source. The stream tree is now freed so we have to build ** that again. This is done in HTRequest_linkDestination() */ if (me != source) { HTNet_kill(source->net); source->output_stream = NULL; } /* Kill all other destinations */ if (source->destinations) { HTList *cur = source->destinations; HTRequest *pres; while ((pres = (HTRequest *) HTList_nextObject(cur)) != NULL) if (me != pres) HTNet_kill(pres->net); } /* Kill main destination */ if (source->mainDestination && me != source->mainDestination) HTNet_kill(source->mainDestination->net); return YES; } return NO; } PUBLIC int HTRequest_forceFlush (HTRequest * request) { HTHost * host = HTNet_host(request->net); if (host == NULL) return HT_ERROR; return HTHost_forceFlush(host); } /* --------------------------------------------------------------------------*/ /* Document Loader */ /* --------------------------------------------------------------------------*/ /* Request a resource ** ------------------ ** This is an internal routine, which has an address AND a matching ** anchor. (The public routines are called with one OR the other.) ** Returns: ** YES if request has been registered (success) ** NO an error occured */ PUBLIC BOOL HTLoad (HTRequest * me, BOOL recursive) { if (!me || !me->anchor) { HTTRACE(CORE_TRACE, "Load Start.. Bad argument\n"); return NO; } /* Make sure that we don't carry over any old physical address */ if (!recursive) HTAnchor_clearPhysical(me->anchor); /* Set the default method if not already done */ if (me->method == METHOD_INVALID) me->method = METHOD_GET; /* Should we keep the error stack or not? */ if (!recursive && me->error_stack) { HTError_deleteAll(me->error_stack); me->error_stack = NULL; } /* Delete any old Response Object */ if (me->response) { HTResponse_delete(me->response); me->response = NULL; } /* ** We set the start point of handling a request to here. ** This time will be used by the cache */ HTRequest_setDate(me, time(NULL)); /* Now start the Net Manager */ return HTNet_newClient(me); } PUBLIC BOOL HTServe (HTRequest * me, BOOL recursive) { if (!me || !me->anchor) { HTTRACE(CORE_TRACE, "Serve Start. Bad argument\n"); return NO; } /* Make sure that we don't carry over any old physical address */ if (!recursive) HTAnchor_clearPhysical(me->anchor); /* Should we keep the error stack or not? */ if (!recursive && me->error_stack) { HTError_deleteAll(me->error_stack); me->error_stack = NULL; } /* Delete any old Response Object */ if (me->response) { HTResponse_delete(me->response); me->response = NULL; } /* Now start the Net Manager */ return HTNet_newServer(me); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTReqMan.html��������������������������������������������������������������������0100644�0000764�0000144�00000022330�07056753125�016263� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Private Request Definition</TITLE> </HEAD> <BODY> <H1> Private Request Definition </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module is the private part of the request object. It has the functions declarations that are private to the Library and that shouldn't be used by applications. The module has been separated from the old HTAccess module. See also the public part of the declarition in the <A HREF="HTReq.html">HTReq Module</A>. <P> This module is implemented by <A HREF="HTReqMan.c">HTReqMan.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTREQMAN_H #define HTREQMAN_H #include "<A HREF="HTReq.html">HTReq.h</A>" #include "<A HREF="HTList.html">HTList.h</A>" #include "<A HREF="HTFormat.html">HTFormat.h</A>" #include "<A HREF="HTAnchor.html">HTAnchor.h</A>" #include "<A HREF="HTMethod.html">HTMethod.h</A>" #include "<A HREF="HTAABrow.html">HTAABrow.h</A>" #include "<A HREF="HTStream.html">HTStream.h</A>" #include "<A HREF="HTNet.html">HTNet.h</A>" #include "<A HREF="HTMIMPrs.html">HTMIMPrs.h</A>" </PRE> <P> When a request is handled, all kinds of things about it need to be passed along together with a request. It is intended to live as long as the request is still active, but can be deleted as soon as it has terminated. Only the anchor object stays around after the request itself is terminated. <PRE> struct _HTRequest { BOOL internal; /* Does the app knows about this one? */ time_t date; /* Time stamp when the request was issued */ HTMethod method; BOOL flush; /* Should we flush immediately */ HTPriority priority; /* Priority for this request */ </PRE> <H3> User Profile </H3> <P> Each request can be assigned a <A HREF="HTUser.html">user profile</A> containing information about this host and the user issuing the request. <PRE> HTUserProfile * userprofile; </PRE> <H3> Net Object </H3> <P> Each request is assigned a Net object which contains pointers to other objects handling the request. <PRE> HTNet * net; /* Information about socket etc. */ </PRE> <H3> Response Object </H3> <P> When we start getting MIME headers in as a response we keep it in this object until we know what to do with it. <PRE> HTResponse * response; </PRE> <H3> Error Manager </H3> <PRE> HTList * error_stack; /* List of errors */ </PRE> <H3> Have many times do We Want to Try? </H3> <PRE> int retrys; /* Number of automatic reloads */ int max_forwards; int AAretrys; /* Number of authentication retries */ </PRE> <H3> Preemptive or Non-Preemptive load? </H3> <P> Each protocol module is registered with a default behavior but if you have registered a protocol module for non-preemtive load you can override this by using the following flag. <PRE> BOOL preemptive; </PRE> <H3> Content Negotiation </H3> <P> Normally, when we access the local file system we do content negotiation in order to find the most suited representation. However, you can turn this off by using the following flag. <PRE> BOOL ContentNegotiation; </PRE> <H3> Should we use preconditions? </H3> <PRE> HTPreconditions preconditions; </PRE> <H3> Headers and header information </H3> <P> These are the masks that decides what headers to send. <PRE> HTGnHd GenMask; HTRsHd ResponseMask; HTRqHd RequestMask; HTEnHd EntityMask; </PRE> <H3> Local MIME Header Parsers </H3> <P> Each request can be assigned its own MIME header parsers. <PRE> HTMIMEParseSet * parseSet; BOOL pars_local; </PRE> <H3> Accept headers </H3> <P> These are the accept headers that we want to send out. <PRE> HTList * conversions; BOOL conv_local; HTList * encodings; BOOL enc_local; HTList * tes; BOOL te_local; HTList * languages; BOOL lang_local; HTList * charsets; BOOL char_local; HTList * befores; BOOL befores_local; HTList * afters; BOOL afters_local; </PRE> <H3> Are we using a Proxy? </H3> <P> If so then we keep the name in this variable <PRE> char * proxy; BOOL full_uri; </PRE> <H3> Cache Control Directives </H3> <P> This association list is a list of the cache control directives that are to be sent as part of the <CODE>Cache-Control</CODE> header. <PRE> HTReload reload; HTAssocList * cache_control; </PRE> <H3> Default PUT name </H3> <P> Stores the default name when publishing to a "/" URL. <PRE> char * default_put_name; </PRE> <H3> Byte Ranges </H3> <P> This association list is a list of the cache control directives that are to be sent as part of the <CODE>Range</CODE> header. <PRE> HTAssocList * byte_ranges; </PRE> <H3> Connection Control Directives </H3> <P> This association list is a list of the connection control directives that are to be sent as part of the <CODE>Connection</CODE> header. <PRE> HTAssocList * connection; </PRE> <H3> Expect Directives </H3> <P> The Expect request-header field is used to indicate that particular server behaviors are required by the client. A server that does not understand or is unable to comply with any of the expectation values in the Expect field of a request MUST respond with appropriate error status. <PRE> HTAssocList * expect; </PRE> <H3> Access Authentication Information </H3> <P> The <CODE>credentials</CODE> list contains the information that we are to send as part of the <CODE>Authorization</CODE> header. The realm is if we already know that we need to generate credentials for a specific realm. <PRE> char * realm; /* Current realm */ HTAssocList * credentials; /* Credentials received by server */ </PRE> <H3> Request Header Extensibility </H3> <P> <HR> <H4> 1) Simple Association List </H4> <P> Add the (name, value) and it will be converted into MIME header format as <CODE>name: value</CODE>. DO NOT ADD CRLF line termination - this is done by the <A HREF="HTTPReq.html">HTTP header generator stream</A> <PRE> HTAssocList * extra_headers; </PRE> <H4> 2) Stream Oriented Header Generators </H4> <P> A generator is a stream with direct access to the output stream <PRE> HTList * generators; BOOL gens_local; </PRE> <H4> 4) HTTP Extension Framework </H4> <P> These association lists contain the information that we are to send as <A HREF="/Protocols/HTTP/ietf-http-ext/">HTTP Extension Framework</A>. <PRE> HTAssocList * mandatory; HTAssocList * optional; </PRE> <H3> Anchors </H3> <PRE> HTParentAnchor * anchor; /* The Client anchor for this request */ HTChildAnchor * childAnchor; /* For element within the object */ HTParentAnchor * parentAnchor; /* For referer field */ </PRE> <H3> Streams From Network to Application </H3> <PRE> HTStream * output_stream; HTStream * orig_output_stream; HTFormat output_format; BOOL connected; HTStream * debug_stream; HTStream * orig_debug_stream; HTFormat debug_format; </PRE> <H3> Streams From Application to Network </H3> <PRE> HTStream * input_stream; HTFormat input_format; </PRE> <H3> Callback Function for getting data down the Input Stream </H3> <PRE> HTPostCallback * PostCallback; </PRE> <H3> Context Swapping </H3> <PRE> HTRequestCallback * callback; void * context; </PRE> <H3> PostWeb Information (Not used anymore - don't use!) </H3> <PRE> HTRequest * source; /* Source for request or itself */ HTParentAnchor * source_anchor; /* Source anchor or itself */ HTRequest * mainDestination; /* For the typical case */ HTList * destinations; /* List of related requests */ int destRequests; /* Number of destination requests */ int destStreams; /* Number of destination streams */ </PRE> <PRE> }; </PRE> <H2> Post Web Management </H2> <P> These functions are mainly used internally in the Library but there is no reason for them not to be public. <PRE> extern BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest); extern BOOL HTRequest_removeDestination (HTRequest * dest); extern BOOL HTRequest_destinationsReady (HTRequest * me); extern BOOL HTRequest_linkDestination (HTRequest * dest); extern BOOL HTRequest_unlinkDestination (HTRequest * dest); extern BOOL HTRequest_removePostWeb (HTRequest * me); extern BOOL HTRequest_killPostWeb (HTRequest * me); #define HTRequest_mainDestination(me) \ ((me) && (me)-&gt;source ? (me)-&gt;source-&gt;mainDestination : NULL) #define HTRequest_isDestination(me) \ ((me) && (me)-&gt;source && (me) != (me)-&gt;source) #define HTRequest_isMainDestination(me) \ ((me) && (me)-&gt;source && \ (me) == (me)-&gt;source-&gt;mainDestination) #define HTRequest_isSource(me) \ ((me) && (me)-&gt;source && (me) == (me)-&gt;source) </PRE> <P> End of Declaration <PRE> #endif /* HTREQMAN_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTReqMan.html,v 2.45 2025/02/29 14:23:17 kahan Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTResMan.html��������������������������������������������������������������������0100644�0000764�0000144�00000012575�07177243647�016306� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Private Request Definition</TITLE> </HEAD> <BODY> <H1> Private Response Definition </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module is the private part of the response object. It has the functions declarations that are private to the Library and that shouldn't be used by applications. See also the public part of the declarition in the <A HREF="HTResponse.html">HTResponse Module</A>. <P> This module is implemented by <A HREF="HTResMan.c">HTResMan.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTRESMAN_H #define HTRESMAN_H #include "<A HREF="HTResponse.html">HTResponse.h</A>" #include "<A HREF="HTList.html">HTList.h</A>" #include "<A HREF="HTFormat.html">HTFormat.h</A>" #include "<A HREF="HTAnchor.html">HTAnchor.h</A>" #include "<A HREF="HTMethod.html">HTMethod.h</A>" #include "<A HREF="HTAABrow.html">HTAABrow.h</A>" #include "<A HREF="HTStream.html">HTStream.h</A>" #include "<A HREF="HTNet.html">HTNet.h</A>" #include "<A HREF="HTMIMPrs.html">HTMIMPrs.h</A>" </PRE> <P> When a request is handled, all kinds of things about it need to be passed along together with a request. It is intended to live as long as the request is still active, but can be deleted as soon as it has terminated. Only the anchor object stays around after the request itself is terminated. <PRE> struct _HTResponse { int hash; </PRE> <H3> Redirection </H3> <P> If we get a redirection back then we return the new destination for this request to the application using this anchor. <PRE> HTAnchor * redirectionAnchor; /* Redirection URL */ </PRE> <H3> Retry Request After </H3> <P> If we get a response back saying that we have to retry the request after a certain amount of time then add this information here. Libwww does not retry the request automatically - this is for the application to do. <PRE> time_t retry_after; /* Absolut time for a retry */ </PRE> <H3> Access Authentication Information </H3> <P> The <CODE>challenge</CODE> and the <CODE>credentials</CODE> entries are use by the authentication parsers and generators respectively. <PRE> char * realm; /* Current realm */ char * scheme; /* Current scheme */ HTAssocList * challenge; /* Challenge received in response */ </PRE> <H3> Connection Control Directives </H3> <P> This association list is a list of the connection control directives that have been received in the response. <PRE> HTAssocList * connection; </PRE> <H3> Protocol Extension Protocol (PEP) Information </H3> <P> These association lists contain the information that we have received in PEP headers in the response. <PRE> HTAssocList * protocol; HTAssocList * protocol_info; HTAssocList * protocol_request; </PRE> <P> <H3> Cache Control Directives </H3> <P> This association list is a list of the cache control directives that have been received as part of the response. We also keep track of whether the response si cachable or not. <PRE> HTCachable cachable; BOOL cached; /* If anchor has inherited lists */ HTAssocList * cache_control; </PRE> <H3> Range Requests </H3> <P> We may get a partial response in which case we register the received ranges of the resource. <PRE> HTAssocList * byte_ranges; </PRE> <H3> Variants </H3> <P> The response may be a negotiated response in which case we wanna know. This has significance for whether the object is cachable or not. <PRE> HTAssocList * variants; </PRE> <H3> Content Length </H3> <P> We register the content length as thjis is of importance to all responses. The content length is&nbsp;a common way to figure out how many bytes we can expect. <PRE> long int content_length; </PRE> <H3> Content Type </H3> <P> The Content type is important to know as we set of the stream pipe and do the format conversion. <PRE> HTFormat content_type; HTAssocList * type_parameters; /* Type parameters (charset etc.) */ </PRE> <H3> Content Encoding </H3> <P> We register the content-encoding as it may affect the stream pipe as we set it up. <PRE> HTList * content_encoding; </PRE> <H3> Transfer Encoding </H3> <P> The transfer encoding is likewise important when we set up the stream pipe. <PRE> HTList * transfer_encoding; </PRE> <H3> Content Transfer Encoding </H3> <P> The content transfer encoding is likewise important when we set up the stream pipe. <PRE> HTEncoding cte; </PRE> <H3> Trailer </H3> <P> The tailers are headers that come at the end <PRE> HTAssocList * trailer; </PRE> <H3> Original Reponse Header Values </H3> <P> We store the&nbsp;original headers as they may become useful in many ways - for example in lazy parsing. <PRE> HTAssocList * headers; </PRE> <P> The reason string furnished by the server, as some servers may send useful custom information in it <PRE> char * reason; /* JK: HTTP reason string */ </PRE> <PRE> }; /* End of definition of HTResponse */ </PRE> <P> End of Declaration <PRE> #endif /* HTRESMAN_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTResMan.html,v 2.7 2025/10/30 10:04:23 kahan Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTResponse.c���������������������������������������������������������������������0100644�0000764�0000144�00000035335�07177243647�016174� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** RESPONSE MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTResponse.c,v 2.12 2025/10/30 10:04:23 kahan Exp $ ** ** Authors ** HFN Henrik Frystyk, frystyk@w3.org */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTHeader.h" #include "HTLib.h" #include "HTWWWStr.h" #include "HTResMan.h" /* Implemented here */ /* --------------------------------------------------------------------------*/ /* Create and delete the HTResponse Object */ /* --------------------------------------------------------------------------*/ PUBLIC HTResponse * HTResponse_new (void) { HTResponse * me; if ((me = (HTResponse *) HT_CALLOC(1, sizeof(HTResponse))) == NULL) HT_OUTOFMEM("HTResponse_new()"); /* Default content-* values */ me->content_type = WWW_UNKNOWN; me->content_length = -1; /* Default retry after value */ me->retry_after = -1; /* By default a response is not cachable */ me->cachable = NO; HTTRACE(CORE_TRACE, "Response.... Created %p\n" _ me); return me; } PUBLIC BOOL HTResponse_delete (HTResponse * me) { if (me) { HTTRACE(CORE_TRACE, "Response.... Delete %p\n" _ me); /* Access Authentication */ HT_FREE(me->realm); HT_FREE(me->scheme); if (me->challenge) HTAssocList_delete(me->challenge); /* Connection headers */ if (me->connection) HTAssocList_delete(me->connection); /* PEP Information */ if (me->protocol) HTAssocList_delete(me->protocol); if (me->protocol_request) HTAssocList_delete(me->protocol_request); if (me->protocol_info) HTAssocList_delete(me->protocol_info); /* Cache control headers */ if (me->cache_control) HTAssocList_delete(me->cache_control); /* Byte ranges */ if (me->byte_ranges) HTAssocList_delete(me->byte_ranges); /* Transfer Encodings */ if (me->transfer_encoding) HTList_delete(me->transfer_encoding); /* Trailers */ if (me->trailer) HTAssocList_delete(me->trailer); /* Variants */ if (me->variants) HTAssocList_delete(me->variants); /* ** Only delete Content Type parameters and original headers if the ** information is not used elsewhere, for example by the anchor ** object. */ if (!me->cached) { /* Content type parameters */ if (me->type_parameters) HTAssocList_delete(me->type_parameters); /* Content Encodings */ if (me->content_encoding) HTList_delete(me->content_encoding); /* List of all headers */ if (me->headers) HTAssocList_delete(me->headers); } /* HTTP reason string */ if (me->reason) HT_FREE (me->reason); HT_FREE(me); return YES; } return NO; } /* --------------------------------------------------------------------------*/ /* Methods on the HTResponse Object */ /* --------------------------------------------------------------------------*/ /* ** Redirection information */ PUBLIC HTAnchor * HTResponse_redirection (HTResponse * me) { return (me ? me->redirectionAnchor : NULL); } PUBLIC BOOL HTResponse_setRedirection (HTResponse * me, HTAnchor * anchor) { if (me && anchor) { me->redirectionAnchor = (HTAnchor *) HTAnchor_parent(anchor); return YES; } return NO; } /* ** When to retry a response if HT_RETRY ** Returns -1 if not available */ PUBLIC time_t HTResponse_retryTime (HTResponse * me) { return me ? me->retry_after : -1; } PUBLIC BOOL HTResponse_setRetryTime (HTResponse * me, time_t retry) { if (me) { me->retry_after = retry; return YES; } return NO; } /* ** Access Authentication Challenges */ PUBLIC BOOL HTResponse_addChallenge (HTResponse * me, char * token, char * value) { if (me) { if (!me->challenge) me->challenge = HTAssocList_new(); return HTAssocList_addObject(me->challenge, token, value); } return NO; } PUBLIC BOOL HTResponse_deleteChallengeAll (HTResponse * me) { if (me && me->challenge) { HTAssocList_delete(me->challenge); me->challenge = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_challenge (HTResponse * me) { return (me ? me->challenge : NULL); } /* ** Access Authentication Realms */ PUBLIC BOOL HTResponse_setRealm (HTResponse * me, char * realm) { if (me && realm) { StrAllocCopy(me->realm, realm); return YES; } return NO; } PUBLIC const char * HTResponse_realm (HTResponse * me) { return (me ? me->realm : NULL); } /* ** Access Authentication Schemes */ PUBLIC BOOL HTResponse_setScheme (HTResponse * me, char * scheme) { if (me && scheme) { StrAllocCopy(me->scheme, scheme); return YES; } return NO; } PUBLIC const char * HTResponse_scheme (HTResponse * me) { return (me ? me->scheme : NULL); } /* ** Connection Directives */ PUBLIC BOOL HTResponse_addConnection (HTResponse * me, char * token, char * value) { if (me) { if (!me->connection) me->connection = HTAssocList_new(); return HTAssocList_replaceObject(me->connection, token, value); } return NO; } PUBLIC BOOL HTResponse_deleteConnectionAll (HTResponse * me) { if (me && me->connection) { HTAssocList_delete(me->connection); me->connection = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_connection (HTResponse * me) { return (me ? me->connection : NULL); } /* ** PEP Protocol header */ PUBLIC BOOL HTResponse_addProtocol (HTResponse * me, char * token, char * value) { if (me) { if (!me->protocol) me->protocol = HTAssocList_new(); return HTAssocList_addObject(me->protocol, token,value); } return NO; } PUBLIC BOOL HTResponse_deleteProtocolAll (HTResponse * me) { if (me && me->protocol) { HTAssocList_delete(me->protocol); me->protocol = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_protocol (HTResponse * me) { return (me ? me->protocol : NULL); } /* ** PEP Protocol Info header */ PUBLIC BOOL HTResponse_addProtocolInfo (HTResponse * me, char * token, char * value) { if (me) { if (!me->protocol_info) me->protocol_info = HTAssocList_new(); return HTAssocList_addObject(me->protocol_info, token,value); } return NO; } PUBLIC BOOL HTResponse_deleteProtocolInfoAll (HTResponse * me) { if (me && me->protocol_info) { HTAssocList_delete(me->protocol_info); me->protocol_info = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_protocolInfo (HTResponse * me) { return (me ? me->protocol_info : NULL); } /* ** PEP Protocol request header */ PUBLIC BOOL HTResponse_addProtocolRequest (HTResponse * me, char * token, char * value) { if (me) { if (!me->protocol_request) me->protocol_request = HTAssocList_new(); return HTAssocList_addObject(me->protocol_request, token,value); } return NO; } PUBLIC BOOL HTResponse_deleteProtocolRequestAll (HTResponse * me) { if (me && me->protocol_request) { HTAssocList_delete(me->protocol_request); me->protocol_request = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_protocolRequest (HTResponse * me) { return (me ? me->protocol_request : NULL); } /* ** Cache control directives received in the response */ PUBLIC BOOL HTResponse_deleteCacheControlAll (HTResponse * me) { if (me && me->cache_control) { HTAssocList_delete(me->cache_control); me->cache_control = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_cacheControl (HTResponse * me) { return (me ? me->cache_control : NULL); } PUBLIC BOOL HTResponse_addCacheControl (HTResponse * me, char * token, char * value) { if (me) { if (!me->cache_control) me->cache_control=HTAssocList_new(); return HTAssocList_replaceObject(me->cache_control, token, value); } return NO; } /* ** Check whether we can cache this object or not. */ PUBLIC HTCachable HTResponse_isCachable (HTResponse * me) { if (me) { /* We may already have decided that this object is not cachable */ if (me->cachable == HT_NO_CACHE) return HT_NO_CACHE; #if 0 /* We don't cache negotiated resources for the moment */ if (me->variants) return HT_NO_CACHE; #endif /* ** Check if we should cache this object or not. We are very liberale ** in that we cache everything except if we explicit are told not to ** cache (no-store, no-cache). In all other cases we can get around ** it by forcing revalidation */ if (me->cache_control) { char * token; if ((token=HTAssocList_findObject(me->cache_control, "no-store"))) return HT_NO_CACHE; if ((token=HTAssocList_findObject(me->cache_control, "no-cache"))) if (!*token) return HT_NO_CACHE; } /* Cache everything else */ return me->cachable; } return HT_NO_CACHE; } PUBLIC BOOL HTResponse_setCachable (HTResponse * me, HTCachable mode) { if (me) { me->cachable = mode; return YES; } return NO; } PUBLIC BOOL HTResponse_isCached (HTResponse * me, BOOL mode) { if (me) { me->cached = mode; return YES; } return NO; } PUBLIC time_t HTResponse_maxAge (HTResponse * me) { if (me && me->cache_control) { char * token = HTAssocList_findObject(me->cache_control, "max-age"); if (token) return atol(token); } return (time_t) -1; } PUBLIC BOOL HTResponse_mustRevalidate (HTResponse * me) { return me && me->cache_control && (HTAssocList_findObject(me->cache_control, "must-revalidate") != NULL); } PUBLIC char * HTResponse_noCache (HTResponse * me) { return (me && me->cache_control) ? HTAssocList_findObject(me->cache_control, "no-cache") : NULL; } PUBLIC char * HTResponse_etag (HTResponse * me) { if (me && me->headers) { char * value = HTAssocList_findObject(me->headers, "etag"); char * etag = HTNextField(&value); return etag; } return NULL; } /* ** Byte ranges */ PUBLIC BOOL HTResponse_deleteRangeAll (HTResponse * me) { if (me && me->byte_ranges) { HTAssocList_delete(me->byte_ranges); me->byte_ranges = NULL; return YES; } return NO; } PUBLIC BOOL HTResponse_addRange (HTResponse * me, char * unit, char * range) { if (me) { if (!me->byte_ranges) me->byte_ranges = HTAssocList_new(); return HTAssocList_addObject(me->byte_ranges, unit, range); } return NO; } PUBLIC HTAssocList * HTResponse_range (HTResponse * me) { return (me ? me->byte_ranges : NULL); } /* ** Content Length */ PUBLIC long int HTResponse_length (HTResponse * me) { return me ? me->content_length : -1; } PUBLIC void HTResponse_setLength (HTResponse * me, long int length) { if (me) me->content_length = length; } PUBLIC void HTResponse_addLength (HTResponse * me, long int delta_length) { if (me) { if (me->content_length < 0) me->content_length = delta_length; else me->content_length += delta_length; } } /* ** Content-Type */ PUBLIC HTFormat HTResponse_format (HTResponse * me) { return me ? me->content_type : NULL; } PUBLIC void HTResponse_setFormat (HTResponse * me, HTFormat form) { if (me) me->content_type = form; } PUBLIC HTAssocList * HTResponse_formatParam (HTResponse * me) { return me ? me->type_parameters : NULL; } PUBLIC BOOL HTResponse_addFormatParam (HTResponse * me, const char * name, const char * value) { if (me) { if (!me->type_parameters) me->type_parameters = HTAssocList_new(); return HTAssocList_replaceObject(me->type_parameters, name, value); } return NO; } /* ** Charset parameter to Content-Type */ PUBLIC HTCharset HTResponse_charset (HTResponse * me) { if (me && me->type_parameters) { char * charset = HTAssocList_findObject(me->type_parameters,"charset"); return HTAtom_for(charset); } return NULL; } PUBLIC BOOL HTResponse_setCharset (HTResponse * me, HTCharset charset) { return HTResponse_addFormatParam(me, "charset", HTAtom_name(charset)); } /* ** Content Encoding */ PUBLIC BOOL HTResponse_addEncoding (HTResponse * me, HTEncoding encoding) { if (me && encoding) { if (!me->content_encoding) me->content_encoding = HTList_new(); return HTList_addObject(me->content_encoding, encoding); } return NO; } PUBLIC HTList * HTResponse_encoding (HTResponse * me) { return me ? me->content_encoding : NULL; } /* ** Transfer Encoding */ PUBLIC BOOL HTResponse_addTransfer (HTResponse * me, HTEncoding transfer) { if (me && transfer) { if (!me->transfer_encoding) me->transfer_encoding = HTList_new(); return HTList_addObject(me->transfer_encoding, transfer); } return NO; } PUBLIC HTList * HTResponse_transfer (HTResponse * me) { return me ? me->transfer_encoding : NULL; } /* ** Content Transfer Encoding */ PUBLIC HTEncoding HTResponse_contentTransferEncoding (HTResponse * me) { return me ? me->cte : NULL; } PUBLIC BOOL HTResponse_setContentTransferEncoding (HTResponse * me, HTEncoding transfer) { if (me) { me->cte = transfer; return YES; } return NO; } PUBLIC BOOL HTResponse_addVariant (HTResponse * me, char * token, char * value) { if (me) { if (!me->variants) me->variants =HTAssocList_new(); return HTAssocList_replaceObject (me->variants, token, value); } return NO; } PUBLIC BOOL HTResponse_deleteVariantAll (HTResponse * me) { if (me && me->variants) { HTAssocList_delete(me->variants); me->variants = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_variant (HTResponse * me) { return (me ? me->variants : NULL); } /* ** Trailers */ PUBLIC BOOL HTResponse_addTrailer (HTResponse * me, char * token, char * value) { if (me) { if (!me->trailer) me->trailer = HTAssocList_new(); return HTAssocList_addObject(me->trailer, token, value); } return NO; } PUBLIC BOOL HTResponse_deleteTrailerAll (HTResponse * me) { if (me && me->trailer) { HTAssocList_delete(me->trailer); me->trailer = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_trailer (HTResponse * me) { return (me ? me->trailer : NULL); } /* ** Original header information */ PUBLIC BOOL HTResponse_addHeader (HTResponse * me, char * token, char * value) { if (me) { if (!me->headers) me->headers = HTAssocList_new(); return HTAssocList_addObject(me->headers, token, value); } return NO; } PUBLIC BOOL HTResponse_deleteHeaderAll (HTResponse * me) { if (me && me->headers) { HTAssocList_delete(me->headers); me->headers = NULL; return YES; } return NO; } PUBLIC HTAssocList * HTResponse_header (HTResponse * me) { return (me ? me->headers : NULL); } PUBLIC HTAssocList * HTResponse_handOverHeader (HTResponse * me) { HTAssocList * headers = NULL; if (me) { headers = me->headers; me->headers = NULL; me->type_parameters = NULL; /* @@@ */ } return headers; } /* ** HTTP reason string */ PUBLIC char * HTResponse_reason (HTResponse * me) { if (me) { return me->reason; } return NULL; } PUBLIC BOOL HTResponse_setReason (HTResponse * me, char * reason) { if (me && reason && *reason) { StrAllocCopy(me->reason, reason); return YES; } return NO; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTResponse.html������������������������������������������������������������������0100644�0000764�0000144�00000032000�07217642271�016667� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Response Class</TITLE> </HEAD> <BODY> <H1> The Response Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The response object is created as a placeholder for the response received by the remote server. All filters can then use the information passed in the response and act appropriately. The response object is deleted automatically when the corresponding request object is deleted. We try and do some fancy tricks in order to do lazy parsing and reusing parsed values so that we can optimize the code. <p>The Response object is created automatically when we start to receive metainformation (for example <a href="HTMIME.html">MIME headers</a>) and is linked to the <a href="../User/Using/Request.html">Request</a> object. The Response object is also deleted automatically when the corresponding request object is deleted but it can of course be deleted before if this is desired.</p> <p>Note that if you are using <em>non-blocking</em> sockets then libwww behaves asynchronously as you may issue multiple requests and get back the responses in the order they appear on the net interface.</p> <P> This module is implemented by <A HREF="HTResponse.c">HTResponse.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTRESPONSE_H #define HTRESPONSE_H typedef struct _HTResponse HTResponse; #include "HTEvent.h" #include "HTList.h" #include "HTAssoc.h" #include "HTFormat.h" #include "HTUser.h" </PRE> <H2> Creating and Deleting Response Objects </H2> <P> The response obejct gets created when we start receiving a response from a remote server. <H3> Create Response Object </H3> <P> Creates a new response object with a corresponding User Profile object. <PRE> extern HTResponse * HTResponse_new (void); </PRE> <H3> Delete Response Object </H3> <P> This function deletes the object and cleans up the memory. <PRE> extern BOOL HTResponse_delete (HTResponse * response); </PRE> <H2> Redirections </H2> <P> When a redirection response is returned to the Library, for example from a remote HTTP server, this code is passed back to the application. The application can then decide whether a new request should be established or not. These two methods return the redirection information required to issue a new request, that is the new anchor and any list of keywords associated with this anchor. <PRE> extern HTAnchor * HTResponse_redirection (HTResponse * response); extern BOOL HTResponse_setRedirection (HTResponse * response, HTAnchor * anchor); </PRE> <H2> Retry Request After </H2> <P> Some services, for example HTTP, can in case they are unavailable at the time the request is issued send back a time and date stamp to the client telling when they are expected to back online. In case a request results in a HT_RETRY status, the application can use any time indicated in this field to retry the request at a later time. The Library does not initiate any request on its own - it's for the application to do. The time returned by this function is in calendar time or -1 if not available. <PRE> extern time_t HTResponse_retryTime (HTResponse * response); extern BOOL HTResponse_setRetryTime (HTResponse * response, time_t retry); </PRE> <H2> <A NAME="Access">HTTP Access Authentication Challanges</A> </H2> <P> When a access denied response is returned to the Library, for example from a remote HTTP server, this code is passed back to the application. The application can then decide whether a new request should be established or not. These two methods return the authentication information required to issue a new request, that is the new anchor and any list of keywords associated with this anchor. <PRE> extern BOOL HTResponse_addChallenge (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteChallengeAll (HTResponse * response); extern HTAssocList * HTResponse_challenge (HTResponse * response); </PRE> <H3> Realms </H3> <PRE> extern BOOL HTResponse_setRealm (HTResponse * response, char * realm); extern const char * HTResponse_realm (HTResponse * response); </PRE> <H3> Access Authentication Schemes </H3> <PRE> extern BOOL HTResponse_setScheme (HTResponse * response, char * scheme); extern const char * HTResponse_scheme (HTResponse * response); </PRE> <H2> HTTP Connection Control Directives </H2> <P> The connection control directives are all part of the connection header and control the behavior of this connection. The respose object contains the connection information that we have received in the response. <PRE> extern BOOL HTResponse_addConnection (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteConnectionAll (HTResponse * response); extern HTAssocList * HTResponse_connection (HTResponse * response); </PRE> <H2> HTTP Extensions (PEP) </H2> <P> HTTP can be extended in several ways but traditionally it has been by using new headers. Here we present a new idea which provides a framework for describing extensions and their scope. This is only an idea an may be modified later! The implementation of the extensions can be found in the <A HREF="HTPEP.html">PEP module</A> <H3> Protocol </H3> <P> This association list is a list of the extension directives that were received as part of the response. <PRE> extern BOOL HTResponse_addProtocol (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteProtocolAll (HTResponse * response); extern HTAssocList * HTResponse_protocol (HTResponse * response); </PRE> <H3> Protocol Info </H3> <P> This association list is a list of the extension directives that were received as part of the response. <PRE> extern BOOL HTResponse_addProtocolInfo (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteProtocolInfoAll (HTResponse * response); extern HTAssocList * HTResponse_protocolInfo (HTResponse * response); </PRE> <H3> Protocol Request </H3> <P> This association list is a list of the extension directives that were received as part of the response. <PRE> extern BOOL HTResponse_addProtocolRequest (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteProtocolRequestAll (HTResponse * response); extern HTAssocList * HTResponse_protocolRequest (HTResponse * response); </PRE> <H2> HTTP Cache Control Directives </H2> <P> This association list is a list of the cache control directives that have been received as part of the response. We also keep track of whether the response is cachable or not. <PRE> extern BOOL HTResponse_addCacheControl (HTResponse * response, char * token, char *value); extern BOOL HTResponse_deleteCacheControlAll (HTResponse * response); extern HTAssocList * HTResponse_cacheControl (HTResponse * response); </PRE> <H3> Is the response Cachable? </H3> <P> The various <CODE>cache-control</CODE> headers and directives decides whether an object is cachable or not. Check these methods before starting caching! <PRE> typedef enum _HTCachable { HT_NO_CACHE = 0, HT_CACHE_ALL = 1, HT_CACHE_ETAG = 2, HT_CACHE_NOT_MODIFIED = 3 } HTCachable; extern HTCachable HTResponse_isCachable (HTResponse * me); extern BOOL HTResponse_setCachable (HTResponse * me, HTCachable mode); </PRE> <H3> The Response Enity Tag (etag) </H3> Return the etag if any <PRE> extern char * HTResponse_etag (HTResponse * me); </PRE> <H3> Has the Response been Cached? </H3> <P> When we gc the response object we need to know whether the header lists have been inherited by other objects (the <A HREF="HTAnchor.html">anchor</A> object, for example) and hence shouldn't be deleted. We can tell the response object this by using the following method call <PRE> extern BOOL HTResponse_isCached (HTResponse * me, BOOL mode); </PRE> <H3> Some Cache-Control helper Methods </H3> <P> Some useful helper functions for handling specific response cache directives <PRE> extern time_t HTResponse_maxAge (HTResponse * response); extern BOOL HTResponse_mustRevalidate (HTResponse * response); extern char * HTResponse_noCache (HTResponse * response); </PRE> <H3> Partial responses and Range Retrievals </H3> <P> Libwww can issue range requests in case we have already obtained a part of the entity body. Since all HTTP entities are represented in HTTP messages as sequences of bytes, the concept of a byte range is meaningful for any HTTP entity. (However, not all clients and servers need to support byte-range operations.) Byte range specifications in HTTP apply to the sequence of bytes in the entity-body (not necessarily the same as the message-body). A byte range operation may specify a single range of bytes, or a set of ranges within a single entity. <PRE> extern BOOL HTResponse_addRange (HTResponse * response, char * unit, char * range); extern BOOL HTResponse_deleteRangeAll (HTResponse * response); extern HTAssocList * HTResponse_range (HTResponse * response); </PRE> <H3> Content Length </H3> <P> We store the content length so that we have an idea of how many bytes to expect. <PRE> extern long int HTResponse_length (HTResponse * response); extern void HTResponse_setLength (HTResponse * response, long int length); extern void HTResponse_addLength (HTResponse * response, long int deltalength); </PRE> <H3> Content Type (Media type) </H3> <P> We store the content-type of the response along with the charset, level and all other paramaters that may follow the content-type itself. <PRE> extern HTFormat HTResponse_format (HTResponse * response); extern void HTResponse_setFormat (HTResponse * response, HTFormat format); </PRE> <P> The Response object stores all content type parameters (charset, level, etc.) in an Association list so here you will always be able to find them. We also have a few methods for the special cases: <CODE>charset</CODE> and <CODE>level</CODE> as they are often needed. <PRE> extern HTAssocList * HTResponse_formatParam (HTResponse * response); extern BOOL HTResponse_addFormatParam (HTResponse * response, const char * name, const char * value); </PRE> <H4> Charset parameter to Content-Type </H4> <PRE> extern HTCharset HTResponse_charset (HTResponse * response); extern BOOL HTResponse_setCharset (HTResponse * response, HTCharset charset); </PRE> <H4> Level parameter to Content-Type </H4> <PRE> extern HTLevel HTResponse_level (HTResponse * response); extern BOOL HTResponse_setLevel (HTResponse * response, HTLevel level); </PRE> <H3> Content Encodings </H3> <P> The list of encodings that we have received in the response. <PRE> extern HTList * HTResponse_encoding (HTResponse * response); extern BOOL HTResponse_addEncoding (HTResponse * response, HTEncoding enc); </PRE> <H3> Transfer Encodings </H3> <P> The list of encodings that we have received in the response. <PRE> extern HTList * HTResponse_transfer (HTResponse * response); extern BOOL HTResponse_addTransfer (HTResponse * response, HTEncoding te); </PRE> <H3> Content Transfer Encodings </H3> <P> Any transfer encoding that we have received in the response. <PRE> extern HTEncoding HTResponse_contentTransferEncoding (HTResponse * response); extern BOOL HTResponse_setContentTransferEncoding (HTResponse * response, HTEncoding cte); </PRE> <H3> Vary Headers </H3> <P> Any Vary header fields <PRE> extern BOOL HTResponse_addVariant (HTResponse * me, char * token, char * value); extern BOOL HTResponse_deleteVariantAll (HTResponse * me); extern HTAssocList * HTResponse_variant (HTResponse * me); </PRE> <H3> Trailers </H3> <P> Any trailer header fields <PRE> extern BOOL HTResponse_addTrailer (HTResponse * me, char * token, char * value); extern BOOL HTResponse_deleteTrailerAll (HTResponse * me); extern HTAssocList * HTResponse_trailer (HTResponse * me); </PRE> <H3> Original Response Headers </H3> <P> The <A HREF="HTMIME.html">MIME parser</A> may add the original response headers as (name,value) pairs. The information may be picked up by the <A HREF="WWWCache.html">persistent cache manager</A>. <PRE> extern BOOL HTResponse_addHeader (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteHeaderAll (HTResponse * response); extern HTAssocList * HTResponse_header (HTResponse * response); extern HTAssocList * HTResponse_handOverHeader (HTResponse * me); </PRE> <H3> The HTTP reason string </H3> <P>The string returned in the HTTP status line. Some servers send custom info in this string and applications may want to show it. <PRE> extern char * HTResponse_reason (HTResponse * me); extern BOOL HTResponse_setReason (HTResponse * me, char * reason); </PRE> <PRE> #endif /* HTRESPONSE_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTResponse.html,v 2.14 2025/12/19 11:21:29 kahan Exp $ </ADDRESS> </BODY></HTML> libwww/Library/src/HTRules.c������������������������������������������������������������������������0100644�0000764�0000144�00000030341�06664352704�015453� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTRules.c ** CONFIGURATION MANAGER FOR CLIENTS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTRules.c,v 2.61 2025/02/22 22:10:12 frystyk Exp $ ** ** This module manages rule files in the Library ** ** History: ** 3 Jun 91 Written TBL ** 10 Aug 91 Authorisation added after Daniel Martin (pass, fail) ** Rule order in file changed ** Comments allowed with # on 1st char of rule line ** 17 Jun 92 Bug fix: pass and fail failed if didn't contain '*' TBL ** 1 Sep 93 Bug fix: no memory check - Nathan Torkington ** BYTE_ADDRESSING removed - Arthur Secret ** 11 Sep 93 MD Changed %i into %d in debug printf. ** VMS does not recognize %i. ** Bug Fix: in case of PASS, only one parameter to printf. ** 19 Sep 93 AL Added Access Authorization stuff. ** 1 Nov 93 AL Added htbin. ** 30 Nov 93 AL Added HTTranslateReq(). ** 4 Feb 94 AL Took away all the daemon-specific stuff. ** 28 Sep 94 HWL Added field to HTPresentation_add call ** 15 Nov 95 HFN Made a stream, fixed interface and made new translater ** ** BUGS: We only have one wildcard match pr rule! */ /* Library include files */ #include "WWWLib.h" #include "WWWFile.h" #include "HTProxy.h" #include "HTRules.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; HTRequest * request; HTChunk * buffer; HTEOLState EOLstate; }; struct _HTRule { HTRuleOp op; char * pattern; char * replace; int insert; /* Index into any wildcard in replace */ }; PRIVATE HTList * rules = NULL; /* ------------------------------------------------------------------------- */ /* ** Rules are handled as list as everything else that has to do with ** preferences. We provide two functions for getting and setting the ** global rules */ PUBLIC HTList * HTRule_global (void) { if (!rules) rules = HTList_new(); return rules; } PUBLIC BOOL HTRule_setGlobal(HTList * list) { if (rules) HTRule_deleteAll(rules); rules = list; return YES; } PUBLIC BOOL HTRule_addGlobal(HTRuleOp op, const char * pattern, const char * replace) { if (!rules) rules = HTList_new(); return HTRule_add(rules, op, pattern, replace); } /* Add rule to the list ** -------------------- ** This function adds a rule to the list of rules. The ** pattern is a 0-terminated string containing a single ** "*". <CODE>equiv</CODE> points to the equivalent string with * for the ** place where the text matched by * goes. ** On entry, ** pattern points to 0-terminated string containing a single "*" ** replace points to the equivalent string with * for the ** place where the text matched by * goes. ** On exit, ** returns YES if OK, else NO */ PUBLIC BOOL HTRule_add (HTList * list, HTRuleOp op, const char * pattern, const char * replace) { if (list && pattern) { HTRule * me; if ((me = (HTRule *) HT_CALLOC(1, sizeof(HTRule))) == NULL) HT_OUTOFMEM("HTRule_add"); me->op = op; StrAllocCopy(me->pattern, pattern); if (replace) { char *ptr = strchr(replace, '*'); StrAllocCopy(me->replace, replace); me->insert = ptr ? ptr-replace : -1; HTTRACE(APP_TRACE, "Rule Add.... For `%s\' op %d `%s\'\n" _ pattern _ op _ replace); } else { HTTRACE(APP_TRACE, "Rule Add.... For `%s\' op %d\n" _ pattern _ op); } return HTList_appendObject(list, (void *) me); } return NO; } /* Delete all rules ** ---------------- ** Deletes all the rules registered by this module */ PUBLIC BOOL HTRule_deleteAll (HTList * list) { if (list) { HTList *cur = list; HTRule *pres; while ((pres = (HTRule *) HTList_nextObject(cur))) { HT_FREE(pres->pattern); HT_FREE(pres->replace); HT_FREE(pres); } return HTList_delete(list); } return NO; } /* Translate by rules ** ------------------ ** The most recently defined rules are applied last. ** This function walks through the list of rules and translates the ** reference when matches are found. The list is traversed in order ** starting from the head of the list. It returns the address of the ** equivalent string allocated from the heap which the CALLER MUST ** FREE. */ PUBLIC char * HTRule_translate (HTList * list, const char * token, BOOL ignore_case) { HTRule * pres; char * replace = NULL; if (!token || !list) return NULL; HTTRACE(APP_TRACE, "Check rules. for `%s\'\n" _ token); while ((pres = (HTRule *) HTList_nextObject(list))) { char * rest = ignore_case ? HTStrCaseMatch(pres->pattern, token) : HTStrMatch(pres->pattern, token); if (!rest) continue; /* No match at all */ /* We found a match for this entry, now do operation */ switch (pres->op) { case HT_Pass: case HT_Map: if (!pres->replace) { /* No replace */ StrAllocCopy(replace, token); } else if (*rest && pres->insert >= 0) { if ((replace = (char *) HT_MALLOC(strlen(pres->replace)+strlen(rest))) == NULL) HT_OUTOFMEM("HTRule_translate"); strcpy(replace, pres->replace); strcpy(replace+pres->insert, rest); } else { /* Perfect match or no insetion point */ StrAllocCopy(replace, pres->replace); } if (pres->op == HT_Pass) { HTTRACE(APP_TRACE, "............ map into `%s'\n" _ replace); return replace; } break; case HT_Fail: default: HTTRACE(APP_TRACE, "............ FAIL `%s'\n" _ token); return NULL; } } if (!replace) StrAllocCopy(replace, token); return replace; } /* Load one line of configuration ** ------------------------------ ** Call this, for example, to load a X resource with config info. ** Returns YES if line OK, else NO */ PUBLIC BOOL HTRule_parseLine (HTList * list, const char * config) { HTRuleOp op; char * line = NULL; char * ptr; char * word1, * word2, * word3; int status; if (!config) return NO; if ((ptr = strchr(config, '#'))) *ptr = '\0'; StrAllocCopy(line, config); /* Get our own copy */ ptr = line; HTTRACE(APP_TRACE, "Rule Parse.. `%s\'\n" _ config ? config : "<null>"); if ((word1 = HTNextField(&ptr)) == NULL) { /* Empty line */ HT_FREE(line); return YES; } if ((word2 = HTNextField(&ptr)) == NULL) { HTTRACE(APP_TRACE, "Rule Parse.. Insufficient operands: `%s\'\n" _ line); HT_FREE(line); return NO; } word3 = HTNextField(&ptr); /* Look for things we recognize */ if (!strcasecomp(word1, "addtype")) { double quality; char * encoding = HTNextField(&ptr); status = ptr ? sscanf(ptr, "%lf", &quality) : 0; HTBind_add(word2, /* suffix */ word3, /* type */ encoding ? encoding : "binary", /* encoding */ NULL, /* cte */ NULL, /* language */ status >= 1? quality : 1.0); /* quality */ } else if (!strcasecomp(word1, "addencoding")) { double quality; status = ptr ? sscanf(ptr, "%lf", &quality) : 0; HTBind_addEncoding(word2, word3, status >= 1 ? quality : 1.0); } else if (!strcasecomp(word1, "addlanguage")) { double quality; status = ptr ? sscanf(ptr, "%lf", &quality) : 0; HTBind_addLanguage(word2, word3, status >= 1 ? quality : 1.0); } else if (!strcasecomp(word1, "presentation")) { HTList * converters = HTFormat_conversion(); double quality, secs, secs_per_byte; status = ptr ? sscanf(ptr,"%lf%lf%lf",&quality,&secs,&secs_per_byte):0; HTPresentation_add(converters, word2, word3, NULL, status >= 1 ? quality : 1.0, status >= 2 ? secs : 0.0, status >= 3 ? secs_per_byte : 0.0); } else if (!strcasecomp(word1, "proxy")) { HTProxy_add(word2, word3); } else if (!strcasecomp(word1, "noproxy")) { int port = 0; status = ptr ? sscanf(ptr, "%d", &port) : 0; HTNoProxy_add(word2, word3, port); } else if (!strcasecomp(word1, "gateway")) { HTGateway_add(word2, word3); } else { op = 0==strcasecomp(word1, "map") ? HT_Map : 0==strcasecomp(word1, "pass") ? HT_Pass : 0==strcasecomp(word1, "fail") ? HT_Fail : HT_Invalid; if (op == HT_Invalid) { HTTRACE(APP_TRACE, "Rule Parse.. Bad or unknown: `%s'\n" _ config); } else HTRule_add(list, op, word2, word3); } HT_FREE(line); return YES; } /* ** Folding is either of CF LWS, LF LWS, CRLF LWS */ PRIVATE int HTRule_put_block (HTStream * me, const char * b, int l) { while (l > 0) { if (me->EOLstate == EOL_FCR) { if (*b == LF) /* CRLF */ me->EOLstate = EOL_FLF; else if (isspace((int) *b)) /* Folding: CR SP */ me->EOLstate = EOL_DOT; else { /* New line */ HTRule_parseLine(rules, HTChunk_data(me->buffer)); me->EOLstate = EOL_BEGIN; HTChunk_clear(me->buffer); continue; } } else if (me->EOLstate == EOL_FLF) { if (isspace((int) *b)) /* Folding: LF SP or CR LF SP */ me->EOLstate = EOL_DOT; else { /* New line */ HTRule_parseLine(rules, HTChunk_data(me->buffer)); me->EOLstate = EOL_BEGIN; HTChunk_clear(me->buffer); continue; } } else if (me->EOLstate == EOL_DOT) { if (isspace((int) *b)) { me->EOLstate = EOL_BEGIN; HTChunk_putc(me->buffer, ' '); } else { HTRule_parseLine(rules, HTChunk_data(me->buffer)); me->EOLstate = EOL_BEGIN; HTChunk_clear(me->buffer); continue; } } else if (*b == CR) { me->EOLstate = EOL_FCR; } else if (*b == LF) { me->EOLstate = EOL_FLF; /* Line found */ } else HTChunk_putc(me->buffer, *b); l--; b++; } return HT_OK; } PRIVATE int HTRule_put_character (HTStream * me, char c) { return HTRule_put_block(me, &c, 1); } PRIVATE int HTRule_put_string (HTStream * me, const char * s) { return HTRule_put_block(me, s, (int) strlen(s)); } PRIVATE int HTRule_flush (HTStream * me) { if (me) { char * flush = HTChunk_data(me->buffer); if (flush) HTRule_parseLine(rules, flush); HTChunk_clear(me->buffer); } return HT_OK; } PRIVATE int HTRule_free (HTStream * me) { if (me) { int status = HTRule_flush(me); HTTRACE(APP_TRACE, "Rules....... FREEING....\n"); HTChunk_delete(me->buffer); HT_FREE(me); return status; } return HT_ERROR; } PRIVATE int HTRule_abort (HTStream * me, HTList * e) { if (me) { int status = HT_ERROR; HTTRACE(APP_TRACE, "Rules....... ABORTING...\n"); HTChunk_delete(me->buffer); HT_FREE(me); return status; } return HT_ERROR; } /* Structured Object Class ** ----------------------- */ PRIVATE const HTStreamClass HTRuleClass = { "RuleParser", HTRule_flush, HTRule_free, HTRule_abort, HTRule_put_character, HTRule_put_string, HTRule_put_block }; PUBLIC HTStream * HTRules (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM); /* ** If the library has been compiled so that we automatically accept ** rule files then it's OK not to ask the user. */ #ifdef HT_AUTOMATIC_RULES if (!cbf || (cbf && (*cbf)(request,HT_A_CONFIRM, HT_MSG_RULES, NULL,NULL,NULL))) { #else if ((cbf && (*cbf)(request,HT_A_CONFIRM, HT_MSG_RULES, NULL,NULL,NULL))) { #endif HTStream * me; HTTRACE(APP_TRACE, "Rule file... Parser object created\n"); if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTRules"); me->isa = &HTRuleClass; me->request = request; me->buffer = HTChunk_new(512); me->EOLstate = EOL_BEGIN; if (!rules) rules = HTList_new(); return me; } else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_NO_AUTO_RULES, NULL, 0, "HTRules"); return HTErrorStream(); } } /* ** Parse a rule file - don't ask don't tell - be carefull with this one! */ PUBLIC HTStream * HTRules_parseAutomatically (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { if (request) { HTStream * me; HTTRACE(APP_TRACE, "Rule file... Automatic parser object created\n"); if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTRules"); me->isa = &HTRuleClass; me->request = request; me->buffer = HTChunk_new(512); me->EOLstate = EOL_BEGIN; if (!rules) rules = HTList_new(); return me; } else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_NO_AUTO_RULES, NULL, 0, "HTRules"); return HTErrorStream(); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTRules.html���������������������������������������������������������������������0100644�0000764�0000144�00000007521�06563624116�016176� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Rule File Configuration manager</TITLE> </HEAD> <BODY> <H1> Rule File Configuration Manager </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The W3C Library provides this module for handling configuration files (a.k.a. rule files). Rule files can be used to initialize as much as the application desires including setting up new protocol modules etc. Also the rules file do not have to be a fil - it can be a database or any other way of storage information. This implementation is not used by the Library at all and is part of the <A HREF="WWWApp.html">Application interface</A>. <P> This module is implemented by <A HREF="HTRules.c">HTRules.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTRULE_H #define HTRULE_H #include "HTList.h" #include "HTReq.h" #include "HTFormat.h" </PRE> <H2> Parse a Rule File </H2> <P> Parsing a whole rule file is done using a converter stream. This means that a rule file can come from anywhere, even accross the network. We have defined a special content type for rule files called <CODE>WWW_RULES</CODE> in <A HREF="HTFormat.html">HTFormat</A> and made a file suffix binding for all files ending in <CODE>".conf"</CODE> in the <A HREF="HTBInit.html">default initialization</A> of the <A HREF="HTBind.html">file suffix bindings module</A>. <P> The rule file parser comes in two variants: one that asks the user and one that doesn't. Needless to say that you have to be carefull with the latter one. You can also define <CODE>HT_AUTOMATIC_RULES</CODE> when <A HREF="/">compiling libwww</A> to determine whether it is OK to parse a rule file without asking the user. <PRE> extern HTConverter HTRules, HTRules_parseAutomatically; </PRE> <H2> Parse a single line from a Rule File </H2> <P> This routine may be used for loading configuration information from sources other than the rule file, for example INI files for X resources. <CODE>config</CODE> is a string in the syntax of a rule file line. <PRE> extern BOOL HTRule_parseLine (HTList * list, const char * config); </PRE> <H2> Add a Rule to the List </H2> <P> This function adds a rule to the list of rules. The <CODE>pattern</CODE> is a 0-terminated string containing a single "*". <CODE>equiv</CODE> points to the equivalent string with * for the place where the text matched by * goes. <PRE> typedef struct _HTRule HTRule; typedef enum _HTRuleOp { HT_Invalid, HT_Map, HT_Pass, HT_Fail, HT_DefProt, HT_Protect, HT_Exec, HT_Redirect, HT_UseProxy } HTRuleOp; extern BOOL HTRule_add (HTList * list, HTRuleOp op, const char * pattern, const char * replace); </PRE> <H2> Delete all Registered Rules </H2> <P> This function clears all rules registered <PRE> extern BOOL HTRule_deleteAll (HTList *list); </PRE> <H2> Global Rules </H2> <P> Rules are handled as list as everything else that has to do with preferences. We provide two functions for getting and setting the global rules: <PRE> extern HTList * HTRule_global(void); extern BOOL HTRule_setGlobal (HTList * list); extern BOOL HTRule_addGlobal (HTRuleOp op, const char * pattern, const char * replace); </PRE> <H2> Translate by rules </H2> <P> This function walks through the list of rules and translates the reference when matches are found. The list is traversed in order starting from the head of the list. It returns the address of the equivalent string allocated from the heap which the CALLER MUST FREE. If no translation occured, then it is a copy of the original. <PRE> extern char * HTRule_translate (HTList * list, const char * token, BOOL ignore_case); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTRules.html,v 2.37 2025/08/10 17:05:18 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTSChunk.c�����������������������������������������������������������������������0100644�0000764�0000144�00000006514�06664352704�015561� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** STREAM TO CHUNK CONVERTER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTSChunk.c,v 2.7 2025/02/22 22:10:12 frystyk Exp $ ** ** This stream converts a stream to a chunk object. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTSChunk.h" /* Implemented here */ #define HT_MAXSIZE 0x10000 /* Max size of allocated chunk */ #define HT_MAXGROWSIZE 0x4000 /* Increment buffer by no more than */ struct _HTStream { HTStreamClass * isa; HTRequest * request; HTChunk * chunk; int cur_size; int max_size; BOOL give_up; BOOL ignore; BOOL ensure; }; /* ------------------------------------------------------------------------- */ PRIVATE int HTSC_flush (HTStream * me) { return HT_OK; /* Nothing to flush */ } /* ** We don't free the chunk as this is for the caller to do */ PRIVATE int HTSC_free (HTStream * me) { HTTRACE(STREAM_TRACE, "Chunkstream. FREEING...\n"); HT_FREE(me); return HT_OK; } /* ** We don't free the chunk as this is for the caller to do */ PRIVATE int HTSC_abort (HTStream * me, HTList * errorlist) { HTTRACE(STREAM_TRACE, "Chunkstream. ABORTING...\n"); HT_FREE(me); return HT_ERROR; } PRIVATE int HTSC_putBlock (HTStream * me, const char * b, int l) { me->cur_size += l; /* ** If we get a buffer overflow and we are going to PUT or POST the document ** then ask the user whether it is OK to proceed buffering. Otherwise we ** must give up the request. In all other cases we stop if the buffer fills ** up. */ if (!me->ignore && me->max_size > 0 && me->cur_size > me->max_size) { HTMethod method = HTRequest_method(me->request); if (HTMethod_hasEntity(method)) { HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM); if ((cbf && (*cbf)(me->request, HT_A_CONFIRM, HT_MSG_BIG_PUT, NULL, NULL, NULL))) me->ignore = YES; else me->give_up = YES; } else { me->give_up = YES; } } else if (!me->ensure) { HTParentAnchor * anchor = HTRequest_anchor(me->request); int cl = HTAnchor_length(anchor); if (cl > 0) HTChunk_ensure(me->chunk, cl); me->ensure = YES; } if (!me->give_up) { HTChunk_putb(me->chunk, b, l); return HT_OK; } return HT_ERROR; } PRIVATE int HTSC_putCharacter (HTStream * me, char c) { return HTSC_putBlock(me, &c, 1); } PRIVATE int HTSC_putString (HTStream * me, const char * s) { return HTSC_putBlock(me, s, (int) strlen(s)); } HTStreamClass HTStreamToChunkClass = { "StreamToChunk", HTSC_flush, HTSC_free, HTSC_abort, HTSC_putCharacter, HTSC_putString, HTSC_putBlock }; PUBLIC HTStream * HTStreamToChunk (HTRequest * request, HTChunk ** chunk, int max_size) { if (request) { HTStream * me; *chunk = NULL; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTStreamToChunk"); me->isa = &HTStreamToChunkClass; me->request = request; me->max_size = (!max_size) ? max_size : HT_MAXSIZE; me->chunk = *chunk = HTChunk_new(me->max_size > 0 ? HTMIN(me->max_size, HT_MAXGROWSIZE) : HT_MAXGROWSIZE); HTTRACE(STREAM_TRACE, "ChunkStream. Chunk %p created with max size %d\n" _ me->chunk _ me->max_size); return me; } return HTErrorStream(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTSChunk.html��������������������������������������������������������������������0100644�0000764�0000144�00000002364�06526451267�016303� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 27-Jun-1996 --> <TITLE>W3C Sample Code Library libwww Stream to Chunk Converter</TITLE> </HEAD> <BODY> <H1> Stream to Chunk Converter </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This stream converts a <A HREF="HTStream.html">Stream obejct</A> into a <A HREF="HTChunk.html">Chunk object</A>. Chunks are dynamic streams so this is in other words a conversion from a stream based model to a dynamic data buffer model for handling a downloaded object. It is for the caller of this stream to free the chunk.<P> If max_size is 0 then we use a default size, if -1 then there is no limit. <P> This module is implemented by <A HREF="HTSChunk.c">HTSChunk.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTSCHUNK_H #define HTSCHUNK_H #include "HTChunk.h" #include "HTStream.h" extern HTStream * HTStreamToChunk (HTRequest * request, HTChunk ** chunk, int max_size); </PRE> <P> End of definition module <PRE> #endif /* HTSCHUNK_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTSChunk.html,v 2.4 2025/05/14 02:11:03 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTSQL.c��������������������������������������������������������������������������0100644�0000764�0000144�00000016767�06664352704�015040� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTSQL.c ** MYSQL INTERFACE MODULE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTSQL.c,v 2.2 2025/02/22 22:10:12 frystyk Exp $ ** ** This module interacts with the MYSQL C client library to perform ** SQL operations. It is not intended as a complete SQL API but handles ** most of the typical error situations talking to an SQL server so that ** the caller doesn't have to think about it. ** ** History: ** 23 Apr 98 Henrik Frystyk, frystyk@w3.org */ /* Library include files */ #include "WWWLib.h" #include "HTSQL.h" /* Implemented here */ #include <mysql/mysql.h> #include <mysql/errmsg.h> struct _HTSQL { MYSQL server; MYSQL * psvr; const char * host; const char * user; const char * password; /* @@@ Should be scambled! @@@ */ const char * db; }; /* ------------------------------------------------------------------------- */ PRIVATE int sql_datetimestr (char ** ptr, time_t t) { int length = -1; if (t > 0 && *ptr) { #if defined(HT_REENTRANT) || defined(SOLARIS) struct tm gmt; struct * pgmt = gmtime_r(&t, &gmt); #else struct tm *pgmt = gmtime(&t); #endif /* SOLARIS || HT_REENTRANT */ #ifdef HAVE_STRFTIME length = strftime(*ptr, 40, "\'%Y-%m-%d %H:%M:%S\'", pgmt); #else length = sprintf(*ptr, "\'%04d-%02d-%02d %02d:%02d:%02d\'", pgmt->tm_year + 1900, pgmt->tm_mon + 1, pgmt->tm_wday + 1, pgmt->tm_hour, pgmt->tm_min, pgmt->tm_sec); #endif /* HAVE_STRFTIME */ /* Remove the trailing zero */ *ptr = *ptr + strlen(*ptr); **ptr++ = ' '; } return length; } PUBLIC char * HTSQL_printf (char * buf, int length, char * fmt, ...) { va_list pArgs; char * p=fmt; char * q=buf; char * cpar; unsigned upar; long lpar; time_t tpar; va_start(pArgs, fmt); while (*p && length>0) { if (*p == '%') { switch (*++p) { case 's': if ((cpar = va_arg(pArgs, char *)) != NULL) { char * cp = cpar; while ((*q++ = *cp++) && length-->0); q--; } else { *q++='n'; *q++='u'; *q++='l'; *q++='l'; length -= 4; } break; case 'S': if ((cpar = va_arg(pArgs, char *)) != NULL) { char * cp = cpar; *q++='\''; mysql_escape_string(q, cp, strlen(cp)); while (*q) q++, length--; *q++='\''; } else { *q++='n'; *q++='u'; *q++='l'; *q++='l'; length -= 4; } break; case 'T': if ((tpar = va_arg(pArgs, time_t)) > 0) { length -= sql_datetimestr(&q, tpar); } else { *q++='n'; *q++='u'; *q++='l'; *q++='l'; length -= 4; } break; case 'u': if ((upar = va_arg(pArgs, unsigned int)) >= 0) { char num[32]; char * nptr = num; int i; do { i = upar % 10; *nptr++ = i+'0'; upar /= 10; } while (upar > 0); while (nptr > num && length>0) *q++=*--nptr, length--; } else { *q++='0'; length--; } break; case 'l': if ((lpar = va_arg(pArgs, unsigned long)) >= 0) { char num[32]; char * nptr = num; int i; do { i = lpar % 10; *nptr++ = i+'0'; lpar /= 10; } while (lpar > 0); while (nptr > num && length>0) *q++=*--nptr, length--; } else { *q++='0'; length--; } break; default: *q++=*p++; length--; } p++; } else { *q++=*p++; length--; } } *q = '\0'; va_end(pArgs); return buf; } PUBLIC HTSQL * HTSQL_new (const char * host, const char * user, const char * pw, int flags) { HTSQL * me = NULL; if (!host || !user || !pw) { HTTRACE(SQL_TRACE, "SQL new..... Missing host, user, or password\n"); return NULL; } if ((me = (HTSQL *) HT_CALLOC(1, sizeof(HTSQL))) == NULL) HT_OUTOFMEM("HTSQL_new"); me->host = host; me->user = user; me->password = pw; /* @@@ scramble!!! @@@ */ return me; } PUBLIC BOOL HTSQL_delete (HTSQL * me) { if (me) { if (me->psvr) HTSQL_close(me); HT_FREE(me); return YES; } return NO; } PUBLIC BOOL HTSQL_connect (HTSQL * me) { if (me && me->host) { HTTRACE(SQL_TRACE, "SQL connect. Open a link to server `%s\'\n" _ me->host); if ((me->psvr = mysql_connect(&(me->server), me->host, me->user ? me->user : "", me->password ? me->password : "")) == NULL) { HTTRACE(SQL_TRACE, "SQL connect. `%s\' errno %d\n" _ mysql_error(&me->server) _ mysql_errno(&me->server)); return NO; } return YES; } return NO; } PUBLIC MYSQL * HTSQL_getMysql (HTSQL * me) { return me ? me->psvr : NULL; } PUBLIC BOOL HTSQL_close (HTSQL * me) { if (me && me->psvr) { HTTRACE(SQL_TRACE, "SQL close... Link to host `%s\'\n" _ me->host); mysql_close(me->psvr); me->psvr = NULL; me->db = NULL; return YES; } return NO; } PUBLIC BOOL HTSQL_version (HTSQL * me, char ** server, unsigned int * protocol_version, char ** server_version, char ** client_version) { if (me && me->psvr) { if (*server) *server = mysql_get_server_info(me->psvr); if (protocol_version) *protocol_version = mysql_get_proto_info(me->psvr); if (*server_version) *server_version = mysql_get_server_info(me->psvr); if (*client_version) *client_version = mysql_get_client_info(); return YES; } return NO; } PUBLIC BOOL HTSQL_selectDB (HTSQL * me, const char * db) { BOOL created = NO; if (me && me->psvr && db) { HTTRACE(SQL_TRACE, "SQL select.. Database `%s\'\n" _ db); me->db = NULL; if (mysql_select_db(me->psvr, db) < 0) { int err = mysql_errno(me->psvr); HTTRACE(SQL_TRACE, "SQL select.. `%s\', errno %d\n" _ mysql_error(me->psvr) _ err); /* If the database couldn't be found then create a new one */ if (err == 1049) { if (mysql_create_db(me->psvr, db) < 0) { HTTRACE(SQL_TRACE, "SQL error... `%s\', errno %d\n" _ mysql_error(me->psvr) _ err); return NO; } created = YES; } else return NO; } if (created) { if (mysql_select_db(me->psvr, db) < 0) { int err = mysql_errno(me->psvr); HTTRACE(SQL_TRACE, "SQL select.. `%s\', errno %d\n" _ mysql_error(me->psvr) _ err); return NO; } } /* The database is now up and running */ me->db = db; return YES; } return NO; } PUBLIC BOOL HTSQL_query (HTSQL * me, const char * query) { HTTRACE(SQL_TRACE, "SQL query... `%s\'\n" _ query ? query : "<null>"); if (me && me->psvr && query) { if (mysql_query(me->psvr, query) < 0) { int status = mysql_errno(me->psvr); HTTRACE(SQL_TRACE, "SQL query... `%s\' on query `%s\' with errno %d\n" _ mysql_error(me->psvr) _ query _ status); /* Check to see if we should try and reconnect */ if (status==CR_SERVER_GONE_ERROR || status==CR_SERVER_LOST) { if (HTSQL_connect(me)==NO || HTSQL_selectDB(me, me->db)==NO) return NO; return (mysql_query(me->psvr, query) == 0); } return NO; } return YES; } return NO; } PUBLIC int HTSQL_getLastInsertId (HTSQL * me) { return (me && me->psvr) ? mysql_insert_id(me->psvr) : -1; } PUBLIC int HTSQL_GetAffectedRows (HTSQL * me) { return (me && me->psvr) ? mysql_affected_rows(me->psvr) : -1; } PUBLIC MYSQL_RES * HTSQL_storeResult (HTSQL * me) { MYSQL_RES * result = NULL; if (me && me->psvr) { if ((result = mysql_store_result(me->psvr)) == NULL) { int status = mysql_errno(me->psvr); HTTRACE(SQL_TRACE, "SQL store... `%s\' with errno %d\n" _ mysql_error(me->psvr) _ status); } } return result; } PUBLIC BOOL HTSQL_freeResult (MYSQL_RES * me) { if (me) { mysql_free_result(me); return YES; } return NO; } ���������libwww/Library/src/HTSQL.html�����������������������������������������������������������������������0100644�0000764�0000144�00000007405�06530334042�015532� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww SQL API</TITLE> </HEAD> <BODY> <H1> Simple SQL API </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module interacts with the MYSQL C client library to perform SQL operations. It is not intended as a complete SQL API but handles most of the typical error situations talking to an SQL server so that the caller doesn't have to think about it. <P> This requires that you have linked against a <A href="http://www.tcx.se/">MySQL library</A>. See the <A href="/">installation instructions</A> for details. <P> This module is implemented by <A HREF="HTSQL.c">HTSQL.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTSQL_H #define HTSQL_H #include &lt;mysql/mysql.h&gt; </PRE> <H2> The HTSQL Object </H2> <PRE> typedef struct _HTSQL HTSQL; extern HTSQL * HTSQL_new (const char * host, const char * user, const char * pw, int flags); extern BOOL HTSQL_delete (HTSQL * me); </PRE> <H2> Handling the link to the Server </H2> <H3> Open a connection to the SQL server </H3> <PRE> extern BOOL HTSQL_connect (HTSQL * me); </PRE> <H3> Close the link to the database </H3> <PRE> extern BOOL HTSQL_close (HTSQL * me); </PRE> <H3> You can get information about whom we are talking to by calling this function: </H3> <PRE> extern BOOL HTSQL_version (HTSQL * me, char ** server, unsigned int * protocol_version, char ** server_version, char ** client_version); </PRE> <H3> Selecting the current database </H3> <PRE> extern BOOL HTSQL_selectDB (HTSQL * me, const char * db); </PRE> <H3> Getting the raw MYSQL object </H3> <P> After you have connected you can get the raw <CODE>MYSQL</CODE> object by calling this function <PRE> extern MYSQL * HTSQL_getMysql (HTSQL * me); </PRE> <H2> SQL printf </H2> <P> When creating queries to send to the SQL server you need to generate a lot of SQL specific strings. This function knows most of the commonly used SQL ways of handling date and time string, escaping and quoting strings and how to write integers as strings. The function works pretty much as fprintf with the following possible format arguments: <DL COMPACT> <DT> <B>%s</B> <DD> Writes a string as is. No quotation or escaping is performed. NULL is written as "<CODE>null</CODE>". <DT> <B>%S</B> <DD> Writes a string in quotes and escapes any special SQL characters. NULL is written as "<CODE>null</CODE>". <DT> <B>%T</B> <DD> Creates an SQL datetime stamp from a <CODE>time_t</CODE> variable looking like this <CODE>YYYY-MM-DD HH:MM:SS</CODE>. -1 is written as "<CODE>null</CODE>" <DT> <B>%u</B> <DD> Unsigned integer <DT> <B>%l</B> <DD> Unsigned long integer </DL> <PRE> extern char * HTSQL_printf (char * buf, int length, char * fmt, ...); </PRE> <H2> Issuing a Query </H2> <P> You can issue a query using this function. If the connection to the server was dropped then it automatically tries to reconnect <PRE> extern BOOL HTSQL_query (HTSQL * me, const char * query); </PRE> <P> Get information about the last inserted row's unique ID or how many rows were affected by the last query: <PRE> extern int HTSQL_getLastInsertId (HTSQL * me); extern int HTSQL_GetAffectedRows (HTSQL * me); </PRE> <H2> Handle Query Results </H2> <P> Call this funciton to store the SQL query result <PRE> extern MYSQL_RES * HTSQL_storeResult (HTSQL * me); </PRE> <P> When you are done with a query result then call this to clean up <PRE> extern BOOL HTSQL_freeResult (MYSQL_RES * me); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTSQL.html,v 2.1 2025/05/19 16:49:38 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTSQLLog.c�����������������������������������������������������������������������0100644�0000764�0000144�00000022732�06664352704�015467� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTSQL.c ** SQL LOGGING MODULE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTSQLLog.c,v 2.3 2025/02/22 22:10:12 frystyk Exp $ ** ** This module contains a simple SQL based logging mechanism for requests ** and anything else you want to log ** ** History: ** 23 Apr 98 Henrik Frystyk, frystyk@w3.org */ /* Library include files */ #include "WWWLib.h" #include "HTSQL.h" #include "HTSQLLog.h" /* Implemented here */ #include <mysql/mysql.h> struct _HTSQLLog { HTSQL * sql; char * relative; /* Make URIs relative to */ int accesses; HTSQLLogFlags flags; }; #define DEFAULT_SQL_URIS_TABLE "uris" #define DEFAULT_SQL_REQUESTS_TABLE "requests" #define DEFAULT_SQL_RESOURCES_TABLE "resources" #define DEFAULT_SQL_LINKS_TABLE "links" #define DEFAULT_SQL_KEY_TYPE "int unsigned not null" #define MAX_URI_LENGTH 255 /* ------------------------------------------------------------------------- */ PRIVATE int find_uri(HTSQLLog * me, const char * uri) { int index = -1; if (me && me->sql && uri) { char buf[1024]; char * query = NULL; MYSQL_RES * result = NULL; query = HTSQL_printf(buf, 1024, "select * from %s where uri=%S", DEFAULT_SQL_URIS_TABLE, uri); if (HTSQL_query(me->sql, query) && (result = HTSQL_storeResult(me->sql)) != NULL) { MYSQL_ROW row; if ((row = mysql_fetch_row(result)) && row[0]) index = atoi(row[0]); HTSQL_freeResult(result); } } return index; } PRIVATE int add_uri (HTSQLLog * me, const char * uri) { if (me && me->sql && uri) { int index = -1; char * rel = me->relative ? HTRelative(uri, me->relative) : NULL; /* If we can't find the URI then add it */ if ((index = find_uri(me, rel ? rel : uri)) < 0) { char buf[1024]; char * query = HTSQL_printf(buf, 1024, "insert into %s (uri) values (%S)", DEFAULT_SQL_URIS_TABLE, rel ? rel : uri); if (HTSQL_query(me->sql, query) != YES) { HT_FREE(rel); return -1; } index = HTSQL_getLastInsertId(me->sql); } HT_FREE(rel); return index; } return -1; } PRIVATE BOOL add_linktype (HTSQLLog * me, int srcidx, int dstidx, const char * type, const char * comment) { if (me && me->sql && srcidx>=0 && dstidx>=0 && type) { char buf[1024]; char * query = HTSQL_printf(buf, 1024, "insert into %s values (%u,%u,%S,%S)", DEFAULT_SQL_LINKS_TABLE, srcidx, dstidx, type, comment); return HTSQL_query(me->sql, query); } return NO; } PRIVATE BOOL clear_table (HTSQLLog * me, const char * table) { if (me && me->sql && table) { char buf[1024]; char * query = HTSQL_printf(buf, 1024, "delete from %s", table); return HTSQL_query(me->sql, query); } return NO; } PRIVATE BOOL drop_table (HTSQLLog * me, const char * table) { if (me && me->sql && table) { char buf[1024]; char * query = HTSQL_printf(buf, 1024, "drop table %s", table); return HTSQL_query(me->sql, query); } return NO; } PRIVATE BOOL createTables (HTSQLLog * me, HTSQLLogFlags flags) { if (me && me->sql) { char buf[1024]; char * query = NULL; /* If we have to delete it first */ if (flags & HTSQLLOG_DROP_URIS_TABLE) drop_table(me, DEFAULT_SQL_URIS_TABLE); /* Create URI table (which is the index) */ query = HTSQL_printf(buf, 1024, "create table %s (id %s auto_increment, uri varchar(%u) binary not null, primary key(id), unique (uri), index uri_idx (uri(32)))", DEFAULT_SQL_URIS_TABLE, DEFAULT_SQL_KEY_TYPE, MAX_URI_LENGTH); HTSQL_query(me->sql, query); /* If we have to clear it out */ if (flags & HTSQLLOG_CLEAR_URIS_TABLE) clear_table(me, DEFAULT_SQL_URIS_TABLE); /* If we have to delete it first */ if (flags & HTSQLLOG_DROP_REQUESTS_TABLE) drop_table(me, DEFAULT_SQL_REQUESTS_TABLE); /* Create Request table */ query = HTSQL_printf(buf, 1024, "create table %s (uri %s primary key, method char(16) not null, status int unsigned not null, request_time datetime, response_time datetime)", DEFAULT_SQL_REQUESTS_TABLE, DEFAULT_SQL_KEY_TYPE); HTSQL_query(me->sql, query); /* If we have to clear it out */ if (flags & HTSQLLOG_CLEAR_REQUESTS_TABLE) clear_table(me, DEFAULT_SQL_REQUESTS_TABLE); /* If we have to delete it first */ if (flags & HTSQLLOG_DROP_RESOURCES_TABLE) drop_table(me, DEFAULT_SQL_RESOURCES_TABLE); /* Create Resource table */ query = HTSQL_printf(buf, 1024, "create table %s (uri %s primary key, length bigint unsigned not null, last_modified datetime, expires datetime, content_type char(32), charset char(32), content_encoding char(32), content_language char(32), title char(128))", DEFAULT_SQL_RESOURCES_TABLE, DEFAULT_SQL_KEY_TYPE); HTSQL_query(me->sql, query); /* If we have to clear it out */ if (flags & HTSQLLOG_CLEAR_RESOURCES_TABLE) clear_table(me, DEFAULT_SQL_RESOURCES_TABLE); /* If we have to delete it first */ if (flags & HTSQLLOG_DROP_LINKS_TABLE) drop_table(me, DEFAULT_SQL_LINKS_TABLE); /* Create Link Relations table */ query = HTSQL_printf(buf, 1024, "create table %s (source %s, destination %s, link_type char(32) not null, comment char(128), unique(source,destination,link_type))", DEFAULT_SQL_LINKS_TABLE, DEFAULT_SQL_KEY_TYPE, DEFAULT_SQL_KEY_TYPE); HTSQL_query(me->sql, query); /* If we have to clear it out */ if (flags & HTSQLLOG_CLEAR_LINKS_TABLE) clear_table(me, DEFAULT_SQL_LINKS_TABLE); /* All done */ return YES; } return NO; } /* Open a connection ** ----------------- ** Returns YES if OK, NO on error */ PUBLIC HTSQLLog * HTSQLLog_open (const char * host, const char * user, const char * pw, const char * db, HTSQLLogFlags flags) { HTSQLLog * me = NULL; if (!host || !user || !pw || !db) { HTTRACE(SQL_TRACE, "SQLLog...... Missing SQLLog host, user, password, or db\n"); return NULL; } if ((me = (HTSQLLog *) HT_CALLOC(1, sizeof(HTSQLLog))) == NULL) HT_OUTOFMEM("HTSQLLog_open"); if ((me->sql = HTSQL_new(host, user, pw, 0)) != NULL && HTSQL_connect(me->sql) == YES && HTSQL_selectDB(me->sql, db) == YES) { /* Make sure we have the right set of tables */ createTables(me, flags); me->flags = flags; } else { HTSQL_delete(me->sql); HT_FREE(me); } return me; } /* Close connection ** ---------------- ** Returns YES if OK, NO on error */ PUBLIC BOOL HTSQLLog_close (HTSQLLog * me) { if (me) { if (me->sql) HTSQL_close(me->sql); HT_FREE(me->relative); HT_FREE(me); return YES; } return NO; } PUBLIC BOOL HTSQLLog_clearTables (HTSQLLog * me) { if (me && me->sql) { /* ... */ return YES; } return NO; } PUBLIC BOOL HTSQLLog_makeRelativeTo (HTSQLLog * me, const char * relative) { if (me) { StrAllocCopy(me->relative, relative); return YES; } return NO; } PUBLIC int HTSQLLog_accessCount (HTSQLLog * me) { return me ? me->accesses : -1; } PUBLIC BOOL HTSQLLog_addURI (HTSQLLog * me, const char * uri) { return (me && me->sql && (add_uri(me, uri)>=0)); } PUBLIC BOOL HTSQLLog_addLinkRelationship (HTSQLLog * me, const char * src_uri, const char * dst_uri, const char * link_type, const char * comment) { if (src_uri && dst_uri) { int srcidx = add_uri(me, src_uri); int dstidx = add_uri(me, dst_uri); return add_linktype(me, srcidx, dstidx, link_type, comment); } return NO; } PUBLIC BOOL HTSQLLog_addEntry (HTSQLLog * me, HTRequest * request, int status) { if (me && me->sql) { HTParentAnchor * anchor = HTRequest_anchor(request); HTParentAnchor * parent_anchor = HTRequest_parent(request); char * uri = HTAnchor_address((HTAnchor *) anchor); int index = 0; char buf[512]; char * query = NULL; /* Insert into the URI table */ if ((index = add_uri(me, uri)) < 0) { HT_FREE(uri); return NO; } /* Insert into the request table */ query = HTSQL_printf(buf, 512, "replace into %s values (%u,%S,%u,%T,%T)", DEFAULT_SQL_REQUESTS_TABLE, index, HTMethod_name(HTRequest_method(request)), abs(status), HTRequest_date(request), HTAnchor_date(anchor)); if (HTSQL_query(me->sql, query) != YES) { HT_FREE(uri); return NO; } /* Insert into the resource table */ { HTList * encodings = HTAnchor_encoding(anchor); HTList * languages = HTAnchor_language(anchor); HTFormat format = HTAnchor_format(anchor); HTCharset charset = HTAnchor_charset(anchor); HTEncoding encoding = encodings ? HTList_firstObject(encodings) : NULL; HTLanguage language = languages ? HTList_firstObject(languages) : NULL; query = HTSQL_printf(buf, 512, "replace into %s values (%u,%l,%T,%T,%S,%S,%S,%S,%S)", DEFAULT_SQL_RESOURCES_TABLE, index, HTAnchor_length(anchor), HTAnchor_lastModified(anchor), HTAnchor_expires(anchor), format != WWW_UNKNOWN ? HTAtom_name(format) : NULL, charset ? HTAtom_name(charset) : NULL, encoding ? HTAtom_name(encoding) : NULL, language ? HTAtom_name(language) : NULL, HTAnchor_title(anchor)); if (HTSQL_query(me->sql, query) != YES) { HT_FREE(uri); return NO; } } /* Insert into the relationship table */ if (parent_anchor) { char * parent = HTAnchor_address((HTAnchor *) parent_anchor); if (uri && parent && *parent) { int srcidx = add_uri(me, parent); add_linktype(me, srcidx, index, "referer", NULL); } HT_FREE(parent); } /* Count one more access */ me->accesses++; HT_FREE(uri); return YES; } return NO; } ��������������������������������������libwww/Library/src/HTSQLLog.html��������������������������������������������������������������������0100644�0000764�0000144�00000005525�06530334044�016177� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww SQL Log Class</TITLE> </HEAD> <BODY> <H1> SQL Log Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This SQL based log class generates a SQL database and a set of tables storing the results of a request. The result is stored in different tables depending on whether it is information about the request or the resource returned. The module uses the simple <A HREF="HTSQL.html">libwww SQL interface</A> <P> This requires that you have linked against a <A href="http://www.tcx.se/">MySQL library</A>. See the <A href="/">installation instructions</A> for details. <P> This module is implemented by <A HREF="HTSQLLog.c">HTSQLLog.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTSQLLOG_H #define HTSQLLOG_H #include "HTReq.h" </PRE> <H2> Open and Close the Logs </H2> <P> Create a new SQLLog object and connect to the SQL server. <PRE> typedef struct _HTSQLLog HTSQLLog; typedef enum _HTSQLLogFlags { HTSQLLOG_CLEAR_URIS_TABLE = 0x1, HTSQLLOG_CLEAR_LINKS_TABLE = 0x2, HTSQLLOG_CLEAR_REQUESTS_TABLE = 0x4, HTSQLLOG_CLEAR_RESOURCES_TABLE = 0x8, HTSQLLOG_DROP_URIS_TABLE = 0x10, HTSQLLOG_DROP_LINKS_TABLE = 0x20, HTSQLLOG_DROP_REQUESTS_TABLE = 0x40, HTSQLLOG_DROP_RESOURCES_TABLE = 0x80 } HTSQLLogFlags; extern HTSQLLog * HTSQLLog_open (const char * host, const char * user, const char * pw, const char * db, HTSQLLogFlags flags); </PRE> <H2> Close Connection to the SQL Server </H2> <P> Close the log file and delete the log object <PRE> extern BOOL HTSQLLog_close (HTSQLLog * me); </PRE> <H2> Write Logdata to the Database </H2> <H3> Add a Log Entry </H3> <PRE> extern BOOL HTSQLLog_addEntry (HTSQLLog * me, HTRequest * request, int status); </PRE> <H3> Add a Link Relationship Entry </H3> <PRE> extern BOOL HTSQLLog_addLinkRelationship (HTSQLLog * me, const char * src_uri, const char * dst_uri, const char * link_type, const char * comment); </PRE> <H2> Options and Flags </H2> <H3> Make URIs Relative to this Base </H3> <P> Instead of inserting the absolute URI then you can log relative URIs instead which often saves a lot of space. Set the base URI using this function <PRE> extern BOOL HTSQLLog_makeRelativeTo (HTSQLLog * me, const char * relative); </PRE> <H3> How many times has this Log Object Been Accessed? </H3> <P> This has nothing to do with the SQL database but merely returns the access count number to the log or -1 if error. <PRE> extern int HTSQLLog_accessCount (HTSQLLog * me); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTSQLLog.html,v 2.4 2025/05/19 16:49:40 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTSocket.c�����������������������������������������������������������������������0100644�0000764�0000144�00000011717�06740672640�015616� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTSocket.c ** LOAD A SOCKET ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTSocket.c,v 2.35 2025/07/07 15:43:28 frystyk Exp $ ** ** ** HISTORY: ** 6 June 95 HFN Written */ /* Library Include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWTrans.h" #include "HTNetMan.h" #include "HTSocket.h" /* Implemented here */ #ifndef RAW_PORT #define RAW_PORT 1024 #endif /* Final states have negative value */ typedef enum _RAWState { RAW_ERROR = -2, RAW_OK = -1, RAW_BEGIN = 0, RAW_NEED_STREAM, RAW_READ } RawState; /* This is the context structure for the this module */ typedef struct _raw_info { RawState state; /* Current State of the connection */ HTNet * net; HTRequest * request; } raw_info; struct _HTStream { const HTStreamClass * isa; }; struct _HTInputStream { const HTInputStreamClass * isa; }; /* ------------------------------------------------------------------------- */ PRIVATE int RawCleanup (HTRequest * request, int status) { HTNet * net = HTRequest_net(request); raw_info * raw = (raw_info *) HTNet_context(net); HTTRACE(PROT_TRACE, "Raw clean... Called with status %d, net %p\n" _ status _ net); if (status == HT_INTERRUPTED) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_INTERRUPT); if (cbf) (*cbf)(request, HT_PROG_INTERRUPT, HT_MSG_NULL, NULL, NULL, NULL); } else if (status == HT_TIMEOUT) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_TIMEOUT); if (cbf) (*cbf)(request, HT_PROG_TIMEOUT, HT_MSG_NULL, NULL, NULL, NULL); } /* Delete the Net object */ HTNet_delete(net, HT_ERROR); HT_FREE(raw); return YES; } /* HTLoadSocket ** ------------ ** Given an open socket, this routine loads what ever is on the socket ** ** On entry, ** request This is the request structure ** On Exit ** returns HT_ERROR Error has occured in call back ** HT_OK Call back was OK */ PRIVATE int SocketEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadSocket (SOCKET soc, HTRequest * request) { raw_info * raw; /* Specific protocol information */ HTNet * net = HTRequest_net(request); HTTRACE(PROT_TRACE, "Load socket. Setting up socket for accept\n"); if ((raw = (raw_info *) HT_CALLOC(1, sizeof(raw_info))) == NULL) HT_OUTOFMEM("HTLoadSocket"); raw->state = RAW_BEGIN; raw->net = net; raw->request = request; HTNet_setContext(net, raw); HTNet_setEventCallback(net, SocketEvent); HTNet_setEventParam(net, raw); /* Start listening on a socket */ if (HTHost_listen(NULL, net, HTAnchor_physical(HTRequest_anchor(request))) == HT_ERROR) return SocketEvent(soc, raw, HTEvent_CLOSE); /* Get it started - ops is ignored */ return SocketEvent(soc, raw, HTEvent_BEGIN); } PRIVATE int SocketEvent (SOCKET soc, void * pVoid, HTEventType type) { raw_info * raw = (raw_info *) pVoid; int status = HT_ERROR; HTNet * net = raw->net; HTRequest * request = raw->request; HTHost * host = HTNet_host(net); /* ** Check whether we have been interrupted or timed out */ if (type == HTEvent_BEGIN) { raw->state = RAW_BEGIN; } else if (type == HTEvent_CLOSE) { /* Interrupted */ RawCleanup(request, HT_INTERRUPTED); return HT_OK; } else if (type == HTEvent_TIMEOUT) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_TIME_OUT, NULL, 0, "HTLoadSocket"); RawCleanup(request, HT_TIMEOUT); return HT_OK; } else if (type == HTEvent_END) { RawCleanup(request, HT_OK); return HT_OK; } /* Now jump into the state machine */ while (1) { switch(raw->state) { case RAW_BEGIN: status = HTHost_accept(host, net, NULL); host = HTNet_host(net); if (status == HT_OK) { raw->state = RAW_NEED_STREAM; } else if (status == HT_WOULD_BLOCK || status == HT_PENDING) { return HT_OK; } else raw->state = RAW_ERROR; /* Error or interrupt */ break; case RAW_NEED_STREAM: { /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ HTStream * in_stream = HTStreamStack(WWW_RAW, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, YES); HTNet_setReadStream(net, in_stream); HTRequest_setOutputConnected(request, YES); raw->state = RAW_READ; break; } case RAW_READ: status = HTHost_read(host, net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status==HT_CLOSED) raw->state = RAW_OK; else raw->state = RAW_ERROR; break; case RAW_OK: RawCleanup(request, HT_OK); return HT_OK; break; case RAW_ERROR: RawCleanup(request, HT_ERROR); return HT_OK; break; default: HTDEBUGBREAK("Bad raw state %d\n" _ raw->state); } } return HT_OK; } �������������������������������������������������libwww/Library/src/HTSocket.html��������������������������������������������������������������������0100644�0000764�0000144�00000002420�06526451271�016324� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Identity Socket Read</TITLE> </HEAD> <BODY> <H1> Identity Socket Read Method </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This function is an "<I>identity</I>" application protocol in that it reads data from the transport and passes it down stream without doing anything with it. It simply reads data and is a wrapper around a registered <A HREF="HTTrans.html">transport mechanism</A> for reading from a socket. It provides a callback function for the <A HREF="HTEvent.html">event loop</A> so that a socket can be loaded using non-blocking I/O. The function requires an <B>open</B> socket. It will typically be used in server applications or in a client application that can read directly from <CODE>stdin</CODE>. <P> This module is implemented by <A HREF="HTSocket.c">HTSocket.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTSOCKET_H #define HTSOCKET_H #include <A HREF="HTProt.html">"HTProt.h"</A> extern HTProtCallback HTLoadSocket; </PRE> <PRE> </PRE> <PRE>#endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTSocket.html,v 2.26 2025/05/14 02:11:05 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTStream.c�����������������������������������������������������������������������0100644�0000764�0000144�00000005471�06600454272�015613� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTStream.c ** BASIC STREAMS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTStream.c,v 2.4 2025/09/18 12:57:30 frystyk Exp $ ** ** This version of the stream object just writes to a C file. ** The file is assumed open and left open. ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTStream.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; }; PRIVATE HTStream HTBlackHoleStreamInstance; /* Made static */ PRIVATE HTStream HTErrorStreamInstance; /* ------------------------------------------------------------------------- */ /* ** ** B L A C K H O L E C L A S S ** ** There is only one black hole instance shared by anyone ** who wants a black hole. These black holes don't radiate, ** they just absorb data. */ PRIVATE int HTBlackHole_put_character (HTStream * me, char c) { return HT_OK; } PRIVATE int HTBlackHole_put_string (HTStream * me, const char * s) { return HT_OK; } PRIVATE int HTBlackHole_write (HTStream * me, const char * s, int l) { return HT_OK; } PRIVATE int HTBlackHole_flush (HTStream * me) { return HT_OK; } PRIVATE int HTBlackHole_free (HTStream * me) { return HT_OK; } PRIVATE int HTBlackHole_abort (HTStream * me, HTList * e) { return HT_ERROR; } /* Black Hole stream ** ----------------- */ PRIVATE const HTStreamClass HTBlackHoleClass = { "BlackHole", HTBlackHole_flush, HTBlackHole_free, HTBlackHole_abort, HTBlackHole_put_character, HTBlackHole_put_string, HTBlackHole_write }; PUBLIC HTStream * HTBlackHole (void) { HTBlackHoleStreamInstance.isa = &HTBlackHoleClass; /* The rest is random */ return &HTBlackHoleStreamInstance; } /* ** ERROR STREAM ** ------------ ** There is only one error stream shared by anyone who wants a ** generic error returned from all stream methods. */ PRIVATE int HTErrorStream_put_character (HTStream * me, char c) { return HT_ERROR; } PRIVATE int HTErrorStream_put_string (HTStream * me, const char * s) { return HT_ERROR; } PRIVATE int HTErrorStream_write (HTStream * me, const char * s, int l) { return HT_ERROR; } PRIVATE int HTErrorStream_flush (HTStream * me) { return HT_ERROR; } PRIVATE int HTErrorStream_free (HTStream * me) { return HT_OK; } PRIVATE int HTErrorStream_abort (HTStream * me, HTList * e) { return HT_ERROR; } PRIVATE const HTStreamClass HTErrorStreamClass = { "ErrorStream", HTErrorStream_flush, HTErrorStream_free, HTErrorStream_abort, HTErrorStream_put_character, HTErrorStream_put_string, HTErrorStream_write }; PUBLIC HTStream * HTErrorStream (void) { HTErrorStreamInstance.isa = &HTErrorStreamClass; /* The rest is random */ return &HTErrorStreamInstance; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTStream.html��������������������������������������������������������������������0100644�0000764�0000144�00000011145�06526451271�016333� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 25-Mar-1996 --> <TITLE>W3C Sample Code Library libwww Generic Stream Class</TITLE> </HEAD> <BODY> <H1> Generic Stream Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Stream class defines objects which accepts a sequence of characters. Streams may also have an output in which case multiple stream objects can be cascaded to build a stream pipe where the output of a stream is directed into the input of the next stream object "down the line". Of course, one of the main features of streams is that they can perform a <I>data conversion </I>on the data before piping it to the output. As multiple streams may be cascaded, the complete data conversion is then the sum of each individual data conversion performed by the stream objects being part of the stream pipe. <P> It is not <I>required</I> that a stream has a target, it might as well be a black hole that just accepts data without ever giving it out again. The generic stream class is subclassed multiple places in the Library and a good example is the <A HREF="HTStruct.html">structured stream definition</A> which creates a SGML object. <P> All stream class methods return an integer status code telling whether the operation succeeded or not.. This is the way for a stream to pass control information upstream to the caller which may also be a stream. The general return codes from the methods are: <P> <UL> <LI> <B>HT_WOULD_BLOCK</B> <LI> <B>HT_ERROR</B> <LI> <B>HT_OK</B> <LI> <B>&gt;0</B> - any return greater than 0 will result in that the return code will be parsed through all stream objects. This can be used to pass back information to the <A HREF="HTProt.html">protocol modules</A>, for example </UL> <P> It is in general not relevant to return how much data has been written in the stream, as there often will be a relationship other than 1:1 between indata and outdata. However, it is important that a stream keeps state (either on the incoming data or the outgoing data stream) so that it can accept a <CODE>HT_WOULD_BLOCK</CODE> and continue at a later time when the blocking situation has stopped. <P> This module is implemented by <A HREF="HTStream.c">HTStream.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTSTREAM_H #define HTSTREAM_H #include "HTList.h" typedef struct _HTStream HTStream; typedef struct _HTStreamClass { char * name; </PRE> <P> This field is for diagnostics only <PRE> int (*flush) (HTStream * me); </PRE> <P> The <B>flush</B> method is introduced in order to allow the stream to put any buffered data down the stream pipe but without taking the stream pipe down. It is for the stream to decide whether it has buffered data or not. In some situations, the stream might not want to send buffered data down the target as the date might be relevant for this stream only. <PRE> int (*_free) (HTStream * me); </PRE> <P> The <B>free</B> method is like the <CODE>flush</CODE> method but it also frees the current stream object and all stream objects down stream. When the <CODE>free</CODE> method has been called, the <EM>whole</EM> stream pipe (not only this obejct) should not accept any more data. <PRE> int (*abort) (HTStream * me, HTList * errorlist); </PRE> <P> The <B>abort</B> method should only be used if a stream is interrupted, for example by the user, or an error occurs. <PRE> int (*put_character)(HTStream * me, char ch); int (*put_string) (HTStream * me, const char * str); int (*put_block) (HTStream * me, const char * str, int len); </PRE> <P> These methods are for actually putting data down the stream. It is important that the most efficient method is chosen (often put_block). There is no guarantee that a stream won't change method, for example from <CODE>put_character</CODE> to <CODE>put_block</CODE> <PRE> } HTStreamClass; </PRE> <P> <A NAME="utils"></A> <H2> Basic Utility Streams </H2> <P> These streams can be plugged in everywhere in a stream pipe. <H3> Black Hole Stream </H3> <P> This stream simply absorbs data without doing anything what so ever. <PRE> extern HTStream * HTBlackHole (void); </PRE> <H3> Generic Error Stream </H3> <P> The Error stream simply returns <CODE>HT_ERROR</CODE> on all methods. This can be used to stop a stream as soon as data arrives, for example from the network. <PRE> extern HTStream * HTErrorStream (void); </PRE> <PRE> #endif /* HTSTREAM_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTStream.html,v 2.24 2025/05/14 02:11:05 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTString.c�����������������������������������������������������������������������0100644�0000764�0000144�00000014175�06766052157�015640� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTString.c ** DYNAMIC STRING UTILITIES ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTString.c,v 2.46 2025/09/10 00:44:31 raff Exp $ ** ** Original version came with listserv implementation. ** Version TBL Oct 91 replaces one which modified the strings. ** 02-Dec-91 (JFG) Added stralloccopy and stralloccat ** 23 Jan 92 (TBL) Changed strallocc* to 8 char HTSAC* for VM and suchlike ** 6 Oct 92 (TBL) Moved WWW_TraceFlag in here to be in library ** 9 Oct 95 (KR) fixed problem with double quotes in HTNextField ** 26 Nov 96 (EGP) moved HTTrace stuff to HTTrace.c */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" /* Implemented here */ /* ------------------------------------------------------------------------- */ /* Strings of any length ** --------------------- */ PUBLIC int strcasecomp (const char * a, const char * b) { int diff; for( ; *a && *b; a++, b++) { if ((diff = TOLOWER(*a) - TOLOWER(*b))) return diff; } if (*a) return 1; /* a was longer than b */ if (*b) return -1; /* a was shorter than b */ return 0; /* Exact match */ } /* With count limit ** ---------------- */ PUBLIC int strncasecomp (const char * a, const char * b, int n) { const char *p =a; const char *q =b; for(p=a, q=b;; p++, q++) { int diff; if (p == a+n) return 0; /* Match up to n characters */ if (!(*p && *q)) return *p - *q; diff = TOLOWER(*p) - TOLOWER(*q); if (diff) return diff; } /*NOTREACHED*/ } /* ** strcasestr(s1,s2) -- like strstr(s1,s2) but case-insensitive. */ PUBLIC char * HTStrCaseStr (char * s1, char * s2) { char * ptr = s1; if (!s1 || !s2 || !*s2) return s1; while (*ptr) { if (TOUPPER(*ptr) == TOUPPER(*s2)) { char * cur1 = ptr + 1; char * cur2 = s2 + 1; while (*cur1 && *cur2 && TOUPPER(*cur1) == TOUPPER(*cur2)) { cur1++; cur2++; } if (!*cur2) return ptr; } ptr++; } return NULL; } /* ** tailcomp(s1,s2) -- like strcmp(s1,s2) but match s1 with the tail of s2 ** (used for cookie domain comparison) */ PUBLIC int tailcomp(const char * s1, const char * s2) { int l1 = strlen(s1); int l2 = strlen(s2); if (l1 < l2) s2 += (l2 - l1); return strcmp(s1, s2); } PUBLIC int tailcasecomp(const char * s1, const char * s2) { int l1 = strlen(s1); int l2 = strlen(s2); if (l1 < l2) s2 += (l2 - l1); return strcasecomp(s1, s2); } /* Allocate a new copy of a string, and returns it */ PUBLIC char * HTSACopy (char ** dest, const char * src) { if (*dest) HT_FREE(*dest); if (! src) *dest = NULL; else { if ((*dest = (char *) HT_MALLOC(strlen(src) + 1)) == NULL) HT_OUTOFMEM("HTSACopy"); strcpy (*dest, src); } return *dest; } /* String Allocate and Concatenate */ PUBLIC char * HTSACat (char ** dest, const char * src) { if (src && *src) { if (*dest) { int length = strlen (*dest); if ((*dest = (char *) HT_REALLOC(*dest, length + strlen(src) + 1)) == NULL) HT_OUTOFMEM("HTSACat"); strcpy (*dest + length, src); } else { if ((*dest = (char *) HT_MALLOC(strlen(src) + 1)) == NULL) HT_OUTOFMEM("HTSACat"); strcpy (*dest, src); } } return *dest; } PUBLIC char * StrAllocMCopy (char ** dest, ...) { va_list pArgs; char * p, * argp; /* How much space do we need? */ int needed = 0; va_start(pArgs, dest); while ((p = va_arg(pArgs, char *)) != NULL) needed += strlen(p); va_end(pArgs); if (*dest) HT_FREE(*dest); if (needed) { /* Allocate that amount of memory */ if ((*dest = (char *) HT_MALLOC(needed + 1)) == NULL) HT_OUTOFMEM("HTStrCpy"); p = *dest; /* Fill the string */ va_start(pArgs, dest); while ((argp = va_arg (pArgs, char *)) != NULL) { strcpy(p, argp); p += strlen(argp); } va_end (pArgs); } return *dest; } PUBLIC char * StrAllocMCat (char ** dest, ...) { va_list pArgs; char * p, * argp; /* How much space do we need? */ int needed = 0; va_start(pArgs, dest); while ((p = va_arg(pArgs, char *)) != NULL) needed += strlen(p); va_end(pArgs); if (needed) { /* (Re) Allocate the amount of memory needed */ if (*dest) { int dest_len = strlen(*dest); if ((*dest = (char *) HT_REALLOC(*dest, dest_len + needed + 1)) == NULL) HT_OUTOFMEM("HTStrCat"); p = *dest + dest_len; } else { if ((*dest = (char *) HT_MALLOC(needed + 1)) == NULL) HT_OUTOFMEM("HTStrCat"); p = *dest; } /* Fill the string */ va_start(pArgs, dest); while ((argp = va_arg (pArgs, char *)) != NULL) { strcpy(p, argp); p += strlen(argp); } va_end (pArgs); } return *dest; } /* String Matching ** --------------- ** String comparison function for file names with one wildcard * in the ** template. Arguments are: ** ** tmpl is a template string to match the name against. ** agaist, may contain a single wildcard character * which ** matches zero or more arbitrary characters. ** name is the name to be matched agaist the template. ** ** return: - Empty string if perfect match ** - pointer to part matched by wildcard if any ** - NULL if no match */ PUBLIC char * HTStrMatch (const char * tmpl, const char * name) { while (*tmpl && *name && *tmpl==*name) tmpl++, name++; return ((!*tmpl && !*name) || *tmpl=='*') ? (char *) name : (char *) NULL; } PUBLIC char * HTStrCaseMatch (const char * tmpl, const char * name) { while (*tmpl && *name && TOUPPER(*tmpl)==TOUPPER(*name)) tmpl++, name++; return ((!*tmpl && !*name) || *tmpl=='*') ? (char *) name : (char *) NULL; } /* Strip white space off a string ** ------------------------------ ** Return value points to first non-white character, or to 0 if none. ** All trailing white space is OVERWRITTEN with zero. */ PUBLIC char * HTStrip (char * s) { if (s) { char * p=s; for(p=s;*p;p++); /* Find end of string */ for(p--;p>=s;p--) { if (isspace((int) *p)) *p=0; /* Zap trailing blanks */ else break; } while (isspace((int) *s)) s++; /* Strip leading blanks */ } return s; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTString.html��������������������������������������������������������������������0100644�0000764�0000144�00000007207�06750450433�016350� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 6-Apr-1996 --> <TITLE>W3C Sample Code Library libwww Generic String Management</TITLE> </HEAD> <BODY> <H1> Generic String Management </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> These functions provide functionality for case-independent string comparison and allocations with copies etc. <P> This module is implemented by <A HREF="HTString.c">HTString.c</A>, and it is a part of the <A NAME="z10" HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTSTRING_H #define HTSTRING_H </PRE> <H2> <A NAME="dyn">Dynamic String Manipulation</A> </H2> <P> These two functions are dynamic versions of <CODE>strcpy</CODE> and <CODE>strcat</CODE>. They use <CODE>malloc</CODE> for allocating space for the string. If <CODE>StrAllocCopy</CODE> is called with a non-NULL dest, then this is freed before the new value is assigned so that only the <EM>last</EM> string created has to be freed by the user. If <CODE>StrAllocCat</CODE> is called with a NULL pointer as destination then it is equivalent to <CODE>StrAllocCopy</CODE>. <A NAME="HTSACopy"></A> <PRE> #define StrAllocCopy(dest, src) HTSACopy (&(dest), src) #define StrAllocCat(dest, src) HTSACat (&(dest), src) extern char * HTSACopy (char **dest, const char *src); extern char * HTSACat (char **dest, const char *src); </PRE> <P> The next two functions take a variable number of strings and cats them together using dynamic memory. This is basically like a simple form for sprintf where the only argument is <CODE>char *</CODE>. One day we should turn this into a real dynamic <CODE>sprintf()</CODE>. <PRE> extern char * StrAllocMCopy (char ** dest, ...); extern char * StrAllocMCat (char ** dest, ...); </PRE> <P> The last argument MUST be NULL as we otherwise don't know when the argument list stops. <H2> <A NAME="utils">Case-insensitive String Comparison</A> </H2> <P> The usual routines (comp instead of cmp) had some problem. <PRE> extern int strcasecomp (const char *a, const char *b); extern int strncasecomp (const char *a, const char *b, int n); </PRE> <H2> <A NAME="cookies">Tail String Comparison</A> </H2> <P> Like strcmp, but match the tail of s2 (used for cookie domain comparison) <PRE> extern int tailcomp(const char * s1, const char * s2); extern int tailcasecomp(const char * s1, const char * s2); </PRE> <H2> String Comparison with Wild Card Match </H2> <P> String comparison function for file names with one wildcard * in the template. Arguments are: <DL> <DT> tmpl <DD> is a template string to match the name against. agaist, may contain a single wildcard character * which matches zero or more arbitrary characters. <DT> name <DD> is the name to be matched agaist the template. </DL> <P> Returns empty string ("") if perfect match, pointer to part matched by wildcard if any, or NULL if no match. This is basically the same as YES if match, else NO. <PRE> extern char * HTStrMatch (const char * tmpl, const char * name); extern char * HTStrCaseMatch (const char * tmpl, const char * name); </PRE> <H2> Case-insensitive strstr </H2> <P> This works like <CODE>strstr()</CODE> but is not case-sensitive. <PRE> extern char * HTStrCaseStr (char * s1, char * s2); </PRE> <H2> Strip white space off a string </H2> <P> Return value points to first non-white character, or to '/0' if none. All trailing white space is OVERWRITTEN with zero. <PRE> extern char * HTStrip (char * s); </PRE> <PRE> #endif /* !HTSTRING_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTString.html,v 2.38 2025/07/31 01:27:55 raff Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTStruct.html��������������������������������������������������������������������0100644�0000764�0000144�00000005130�06644701607�016363� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> <TITLE>W3C Sample Code Library libwww Structured Stream Class</TITLE> </HEAD> <BODY> <H1> Structured Stream Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Structured stream class defines objects which accepts a <I>structured</I> sequence of characters for eaxmple a SGML document. I'll rephrase that. A structured object is am ordered tree-structured arrangement of data which is representable as text. An example is the <A HREF="SGML.html">SGML parser</A> which outputs to a Structured Object. A Structured object can output its contents to another <CODE>Structured Object</CODE>. It's a kind of typed stream. The architecure is largely Dan Conolly's. Elements and entities are passed to the sob by number, implying a knowledge of the DTD. <P> The <CODE>Structured Stream</CODE> is a subclass of a <A HREF="HTStream.html">Generic Stream Object</A>. As always, we don't have classes in basic C so we have to do this by hand! <P> This module is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE>#ifndef HTSTRUCT_H #define HTSTRUCT_H #include "HTStream.h" #include "HTList.h" </PRE> <PRE>typedef struct _HTStructured HTStructured; typedef struct _HTStructuredClass { char * name; int (*flush) (HTStructured * me); int (*_free) (HTStructured * me); int (*abort) (HTStructured * me, HTList * errorlist); int (*put_character)(HTStructured * me, char ch); int (*put_string) (HTStructured * me, const char * str); int (*put_block) (HTStructured * me, const char * str, int len); </PRE> <P> See the <A HREF="HTStream.html">Generic Stream Definition</A> for an explanation of these methods. Note that they all have a <CODE>HTStructured</CODE> object a the parameter, not a generic stream. This is to avoid <EM>incompatible pointer</EM> warnings <PRE> void (*start_element)(HTStructured *me, int element_number, const BOOL * attribute_present, const char ** attribute_value); void (*end_element) (HTStructured * me, int element_number); void (*put_entity) (HTStructured * me, int entity_number); int (*unparsed_begin_element)(HTStructured * me, const char * str, int len); int (*unparsed_end_element)(HTStructured * me, const char * str, int len); int (*unparsed_entity)(HTStructured * me, const char * str, int len); } HTStructuredClass; #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTStruct.html,v 2.13 2025/01/06 15:38:47 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTStyle.c������������������������������������������������������������������������0100644�0000764�0000144�00000006522�06664352704�015465� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** GENERIC STYLE IMPLEMENTATION FOR HYPERTEXT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTStyle.c,v 2.26 2025/02/22 22:10:12 frystyk Exp $ ** ** Styles allow the translation between a logical property ** of a piece of text and its physical representation. ** ** A stylesheet is a collection of styles that can be applied ** to the layout engine, for example provided by the HText ** implementation. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTStyle.h" struct _HTStyle { char * name; /* Style name */ int element; /* Element (if any) that this style applies to */ void * context; /* Implementation specific style context */ }; struct _HTStyleSheet { char * name; HTList * styles; }; /* ------------------------------------------------------------------------- */ /* INDIVIDUAL STYLES */ /* ------------------------------------------------------------------------- */ PUBLIC HTStyle * HTStyle_new (const char * name, int element, void * context) { HTStyle * style = NULL; if ((style = (HTStyle *) HT_CALLOC(1, sizeof(HTStyle))) == NULL) HT_OUTOFMEM("HTStyleNew"); StrAllocCopy(style->name, name ? name : "unknown"); style->element = element; style->context = context; return style; } PUBLIC BOOL HTStyle_delete (HTStyle * me) { if (me) { HT_FREE(me->name); HT_FREE(me); return YES; } return NO; } /* ------------------------------------------------------------------------- */ /* STYLE SHEETS */ /* ------------------------------------------------------------------------- */ PUBLIC HTStyleSheet * HTStyleSheet_new (const char * name) { HTStyleSheet * ss; if ((ss = (HTStyleSheet *) HT_CALLOC(1, sizeof(HTStyleSheet))) == NULL) HT_OUTOFMEM("HTStyleSheet_new"); StrAllocCopy(ss->name, name ? name : "unknown"); ss->styles = HTList_new(); return ss; } PUBLIC BOOL HTStyleSheet_delete (HTStyleSheet * me) { if (me) { HTList * cur = me->styles; HTStyle * pres; while ((pres = (HTStyle *) HTList_nextObject(cur))) HTStyle_delete(pres); HTList_delete(me->styles); HT_FREE(me); return YES; } return NO; } PUBLIC BOOL HTStyleSheet_addStyle (HTStyleSheet * me, HTStyle * style) { return (me && style) ? HTList_addObject(me->styles, style) : NO; } PUBLIC BOOL HTStyleSheet_deleteStyle (HTStyleSheet * me, HTStyle * style) { if (me && style) { HTList_removeObject(me->styles, style); HTStyle_delete(style); return YES; } return NO; } PUBLIC HTStyle * HTStyleSheet_findStyleWithName (HTStyleSheet * me, const char * name) { if (me && name) { HTList * cur = me->styles; HTStyle * pres; while ((pres = (HTStyle *) HTList_nextObject(cur))) { if (!strcasecomp(pres->name, name)) return pres; } HTTRACE(SGML_TRACE, "StyleSheet.. No style named `%s' in stylesheet `%s'\n" _ name _ me->name); } return NULL; } PUBLIC HTStyle * HTStyleSheet_findStyleForElement (HTStyleSheet * me, int element) { if (me) { HTList * cur = me->styles; HTStyle * pres; while ((pres = (HTStyle *) HTList_nextObject(cur))) { if (pres->element==element) return pres; } HTTRACE(SGML_TRACE, "StyleSheet.. No style for element %d in stylesheet `%s'\n" _ element _ me->name); } return NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTStyle.html���������������������������������������������������������������������0100644�0000764�0000144�00000004462�06644701610�016200� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Stylesheet Manager</TITLE> </HEAD> <BODY> <H1> Stylesheet Manager </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> Styles allow the translation between a logical property of a piece of text and its physical representation. A StyleSheet is a collection of styles, defining the translation necessary to represent a document. It is a linked list of styles. <P> A stylesheet is a collection of styles - these styles can either come from over the net or they can be provided by the application as needed. <P> The manager doesn't contain any styles - it only provides a mechanism for registering styles, looking them up and deleting them. That is, it doesn't have any idea of what a style actually looks like - as this is highly application dependent, it is not a good idea to provide this as common library code. <P> This module is implemented by <A HREF="HTStyle.c">HTStyle.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTSTYLE_H #define HTSTYLE_H </PRE> <H2> Creating and Deleting a StyleSheet </H2> <P> A Stylesheet is a container containing multiple individual styles. You must therefore first create a stylesheet before you can create individual styles. <PRE> typedef struct _HTStyleSheet HTStyleSheet; extern HTStyleSheet * HTStyleSheet_new (const char * name); extern BOOL HTStyleSheet_delete (HTStyleSheet * me); </PRE> <H2> Creating and Deleting Individual Styles </H2> <PRE> typedef struct _HTStyle HTStyle; extern HTStyle * HTStyle_new (const char * name, int element, void * context); extern BOOL HTStyle_delete (HTStyle * me); </PRE> <H2> Adding and Deleting Individual styles from Stylesheet </H2> <PRE> extern BOOL HTStyleSheet_addStyle (HTStyleSheet * me, HTStyle * style); extern BOOL HTStyleSheet_deleteStyle (HTStyleSheet * me, HTStyle * style); </PRE> <H2> Searching for a Specific Style </H2> <PRE> extern HTStyle * HTStyleSheet_findStyleWithName (HTStyleSheet * me, const char * name); extern HTStyle * HTStyleSheet_findStyleForElement (HTStyleSheet * me, int element); </PRE> <PRE> #endif /* HTSTYLE_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTStyle.html,v 2.29 2025/01/06 15:38:48 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTCP.c��������������������������������������������������������������������������0100644�0000764�0000144�00000054114�07141776154�015013� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTCP.c ** TCP SPECIFIC CODE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTCP.c,v 2.119 2025/08/02 10:48:12 kahan Exp $ ** ** This code is in common between client and server sides. ** ** 16 Jan 92 TBL Fix strtol() undefined on CMU Mach. ** 25 Jun 92 JFG Added DECNET option through TCP socket emulation. ** 13 Sep 93 MD Added correct return of vmserrorno for HTInetStatus. ** Added decoding of vms error message for MULTINET. ** 31 May 94 HF Added cache on host id's; now use inet_ntoa() to ** HTInetString and some other fixes. Added HTDoConnect ** and HTDoAccept */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTReqMan.h" #include "HTNetMan.h" #include "HTTCP.h" /* Implemented here */ #include "HTHstMan.h" /* VMS stuff */ #ifdef VMS #ifndef MULTINET #define FD_SETSIZE 32 #else /* Multinet */ #define FD_SETSIZE 256 #endif /* Multinet */ #endif /* VMS */ /* Macros and other defines */ /* x ms penalty on a multi-homed host if IP-address is unreachable */ #define TCP_DELAY 30000 /* x ms penalty on a multi-homed host if IP-address is down for unknown reason */ #define TCP_PENALTY 60000 /* empirical study in socket call error codes yovavm@contact.com : added handling for WSAEINVAL error code (Windows) "When calling connect() in the second time, after the first call to connect() returned WSAEWOULDBLOCK, an error of WSAEINVAL is returned. It happens often on WinNT & Win95, and rarely on Win2K & Win98, where in most cases the second call to connect() returns WSAEISCON (10056). jose@w3.org : didn't add that test for Unix, as the connect() doc (Linux and Solaris) says it's not needed. */ #ifdef _WINSOCKAPI_ /* windows */ #define NETCALL_ERROR(ret) (ret == SOCKET_ERROR) #define NETCALL_DEADSOCKET(err) (err == WSAEBADF) #define NETCALL_WOULDBLOCK(err) (err == WSAEWOULDBLOCK) #define NETCALL_INVAL(err) (err == WSAEINVAL) #else /* _WINSOCKAPI_ unix */ #define NETCALL_ERROR(ret) (ret < 0) #define NETCALL_DEADSOCKET(err) (err == EBADF) #if defined(EAGAIN) && defined(EALREADY) #define NETCALL_WOULDBLOCK(err) (err == EINPROGRESS || \ err == EALREADY || \ err == EAGAIN) #else /* (EAGAIN && EALREADY) */ #ifdef EALREADY #define NETCALL_WOULDBLOCK(err) (err == EINPROGRESS || err == EALREADY) #else /* EALREADY */ #ifdef EAGAIN #define NETCALL_WOULDBLOCK(err) (err == EINPROGRESS || err == EAGAIN) #else /* EAGAIN */ #define NETCALL_WOULDBLOCK(err) (err == EINPROGRESS) #endif /* !EAGAIN */ #endif /* !EALREADY */ #endif /* !(EAGAIN && EALREADY) */ #endif /* !_WINSOCKAPI_ done */ #if defined(__svr4__) || defined (_WINSOCKAPI_) #define HT_HOSTUNREACHABLE(e) ((e)==ECONNREFUSED || (e)==ETIMEDOUT || \ (e)==ENETUNREACH || (e)==EHOSTUNREACH || \ (e)==EHOSTDOWN) #else #define HT_HOSTUNREACHABLE(e) ((e)==ECONNREFUSED || (e)==ETIMEDOUT || \ (e)==ENETUNREACH || (e)==EHOSTUNREACH || \ (e)==EHOSTDOWN || (e)==EINVAL) #endif /* ------------------------------------------------------------------------- */ /* CONNECTION ESTABLISHMENT MANAGEMENT */ /* ------------------------------------------------------------------------- */ /* _makeSocket - create a socket, if !preemptive, set FIONBIO ** returns sockfd or INVSOC if error */ PRIVATE int _makeSocket (HTHost * host, HTRequest * request, int preemptive) { int status = 1; SOCKET sockfd = INVSOC; #ifdef DECNET if ((sockfd=socket(AF_DECnet, SOCK_STREAM, 0))==INVSOC) #else if ((sockfd=socket(AF_INET, SOCK_STREAM,IPPROTO_TCP))==INVSOC) #endif { HTRequest_addSystemError(request, ERR_FATAL, socerrno, NO, "socket"); return INVSOC; } HTTRACE(PROT_TRACE, "Socket...... Created %d\n" _ sockfd); /* Increase the number of sockets by one */ HTNet_increaseSocket(); /* ** If we have compiled without Nagle's algorithm then try and turn ** it off now */ #if defined(HT_NO_NAGLE) && defined(HAVE_SETSOCKOPT) && defined(TCP_NODELAY) { int disable = 1; status = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *) &disable, sizeof(int)); if (status == -1) { HTTRACE(PROT_TRACE, "Socket...... Could not disable Nagle's algorithm - error %d\n" _ sockfd); } else { HTTRACE(PROT_TRACE, "Socket...... Turned off Nagle's algorithm\n"); } } #endif /* If non-blocking protocol then change socket status ** I use fcntl() so that I can ask the status before I set it. ** See W. Richard Stevens (Advan. Prog. in UNIX environment, p.364) ** Be CAREFULL with the old `O_NDELAY' - it will not work as read() ** returns 0 when blocking and NOT -1. FNDELAY is ONLY for BSD and ** does NOT work on SVR4 systems. O_NONBLOCK is POSIX. */ if (!preemptive) { #ifdef _WINSOCKAPI_ { /* begin windows scope */ long levents = FD_READ | FD_WRITE | FD_ACCEPT | FD_CONNECT | FD_CLOSE ; int rv = 0 ; u_long one = 1; status = ioctlsocket(sockfd, FIONBIO, &one) == SOCKET_ERROR ? -1 : 0; } /* end scope */ #else /* _WINSOCKAPI_ */ #if defined(VMS) { int enable = 1; status = IOCTL(sockfd, FIONBIO, &enable); } #else /* VMS */ if((status = fcntl(sockfd, F_GETFL, 0)) != -1) { #ifdef O_NONBLOCK status |= O_NONBLOCK; /* POSIX */ #else /* O_NONBLOCK */ #ifdef F_NDELAY status |= F_NDELAY; /* BSD */ #endif /* F_NDELAY */ #endif /* !O_NONBLOCK */ status = fcntl(sockfd, F_SETFL, status); } #endif /* !VMS */ #endif /* !_WINSOCKAPI_ */ HTTRACE(PROT_TRACE, "Socket...... %slocking socket\n" _ status == -1 ? "B" : "Non-b"); } else HTTRACE(PROT_TRACE, "Socket...... Blocking socket\n"); return sockfd; } /* ** Associate the channel with the host and create an input and and output stream ** for this host/channel */ PRIVATE BOOL createChannelAndTransportStreams (HTHost * host, SOCKET sockfd, HTTransport * trans) { if (host && sockfd!=INVSOC && trans) { HTHost_setChannel(host, HTChannel_new(sockfd, NULL, YES)); HTHost_getInput(host, trans, NULL, 0); HTHost_getOutput(host, trans, NULL, 0); return YES; } return NO; } /* HTDoConnect() ** ** Note: Any port indication in URL, e.g., as `host:port' overwrites ** the default port value. ** ** returns HT_ERROR Error has occured or interrupted ** HT_OK if connected ** HT_WOULD_BLOCK if operation would have blocked */ PUBLIC int HTDoConnect (HTNet * net) { HTHost * host = HTNet_host(net); HTRequest * request = HTNet_request(net); char * hostname = HTHost_name(host); int preemptive = net->preemptive; int status = HT_OK; /* Jump into the state machine */ while (1) { switch (host->tcpstate) { case TCP_BEGIN: { /* ** Add the net object to the host object found above. If the ** host is idle then we can start the request right away, ** otherwise we must wait until it is free. */ if ((status = HTHost_addNet(host, net)) == HT_PENDING) HTTRACE(PROT_TRACE, "HTDoConnect. Pending...\n"); /* ** If we are pending then return here, otherwise go to next state ** which is setting up a channel */ host->tcpstate = TCP_CHANNEL; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_CHANNEL.\n" _ host); if (status == HT_PENDING) return HT_PENDING; } break; case TCP_CHANNEL: /* ** The next state depends on whether we have a connection ** or not - if so then we can jump directly to connect() to ** test it - otherwise we must around DNS to get the name ** Resolved */ if (HTHost_channel(host) == NULL) { host->tcpstate = TCP_DNS; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_DNS.\n" _ host); } else { /* ** There is now one more using the channel */ HTChannel_upSemaphore(host->channel); /* ** We are now all set and can jump to connected mode */ host->tcpstate = TCP_CONNECTED; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_CONNECTED.\n" _ host); } hostname = HTHost_name(host); break; case TCP_DNS: if ((status = HTParseInet(host, hostname, request)) < 0) { HTTRACE(PROT_TRACE, "HTDoConnect. Can't locate `%s\'\n" _ hostname); HTRequest_addError(request, ERR_FATAL, NO, HTERR_NO_REMOTE_HOST, (void *) hostname, strlen(hostname), "HTDoConnect"); host->tcpstate = TCP_DNS_ERROR; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_ERROR.\n" _ host); break; } if (!HTHost_retry(host) && status > 1) /* If multiple homes */ HTHost_setRetry(host, status); host->tcpstate = TCP_NEED_SOCKET; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_NEED_SOCKET.\n" _ host); break; case TCP_NEED_SOCKET: { SOCKET sockfd; /* Create a new socket */ if ((sockfd = _makeSocket(host, request, preemptive)) == INVSOC) { host->tcpstate = TCP_ERROR; break; } /* Create channnel and streams */ createChannelAndTransportStreams (host, sockfd, net->transport); /* If multi-homed host then start timer on connection */ if (HTHost_retry(host)) host->connecttime = HTGetTimeInMillis(); /* Progress notification */ { HTAlertCallback *cbf = HTAlert_find(HT_PROG_CONNECT); if (cbf) (*cbf)(request, HT_PROG_CONNECT, HT_MSG_NULL, NULL, hostname, NULL); } host->tcpstate = TCP_NEED_CONNECT; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_NEED_CONNECT.\n" _ host); break; } case TCP_NEED_CONNECT: #ifdef _WINSOCKAPI_ /* 2025/08/02 Jens Meggers (jens@meggers.com): ** In HTDoConnect(), the connect command is done before the ** WSAAsyncSelect() that is called when ** HTHost_register(host, net, HTEvent_CONNECT); is executed. ** Although that is in line with the WinSock2 and Microsoft ** documentation, it does _not_ work all the time. I have done ** extensive tests on Win2000 and Win 4.0 SP5. In very rare cases, ** the connect is finished between the connect() command itself and ** the WSAAsyncSelect(). In this unlikely case, WinSock does not ** (always) send the FD_CONNECT message. As a result, when using ** the Async mode, the event loop hangs because there is no ** timeout procedure registered for FD_CONNECT. ** JK: what happens if status returns an error? Do we have to ** unregister the HTEvent_CONNECT event then? */ HTHost_register(host, net, HTEvent_CONNECT); #endif /* _WINSOCKAPI_ */ status = connect(HTChannel_socket(host->channel), (struct sockaddr *) &host->sock_addr, sizeof(host->sock_addr)); /* * According to the Sun man page for connect: * EINPROGRESS The socket is non-blocking and the con- * nection cannot be completed immediately. * It is possible to select(2) for comple- * tion by selecting the socket for writ- * ing. * According to the Motorola SVR4 man page for connect: * EAGAIN The socket is non-blocking and the con- * nection cannot be completed immediately. * It is possible to select for completion * by selecting the socket for writing. * However, this is only possible if the * socket STREAMS module is the topmost * module on the protocol stack with a * write service procedure. This will be * the normal case. */ if (NETCALL_ERROR(status)) { if (NETCALL_WOULDBLOCK(socerrno)) { HTTRACE(PROT_TRACE, "HTDoConnect. WOULD BLOCK `%s'\n" _ hostname); #ifndef _WINSOCKAPI_ HTHost_register(host, net, HTEvent_CONNECT); #endif /* _WINSOCKAPI_ */ return HT_WOULD_BLOCK; } #ifdef _WINSOCKAPI_ /* * yovavm@contact.com * * According to Microsoft docs, the error code WSAEALREADY is * described as: * "A nonblocking connect call is in progress on the specified * socket. Note In order to preserve backward compatibility, * this error is reported as WSAEINVAL to Windows Sockets 1.1 * applications that link to either Winsock.dll or * Wsock32.dll." */ if (NETCALL_INVAL(socerrno)) { host->tcpstate = TCP_CONNECTED; HTTRACE(PROT_TRACE, "Connection to HTHost %p is already in progress.\n" _ host); break; } #endif /* _WINSOCKAPI_ */ if (socerrno == EISCONN) { host->tcpstate = TCP_CONNECTED; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_CONNECTED.\n" _ host); break; } if (NETCALL_DEADSOCKET(socerrno)) /* We lost the socket */ { host->tcpstate = TCP_NEED_SOCKET; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_NEED_SOCKET.\n" _ host); break; } if (HTHost_retry(host)) { host->connecttime = HTGetTimeInMillis() - host->connecttime; /* Added EINVAL `invalid argument' as this is what I get back from a non-blocking connect where I should get `connection refused' on BSD. SVR4 gives SIG_PIPE */ if (HT_HOSTUNREACHABLE(socerrno)) host->connecttime += TCP_DELAY; else host->connecttime += TCP_PENALTY; HTDNS_updateWeigths(host->dns, HTHost_home(host), host->connecttime); } host->tcpstate = TCP_ERROR; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_ERROR.\n" _ host); } else { host->tcpstate = TCP_CONNECTED; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_CONNECTED.\n" _ host); } break; case TCP_CONNECTED: HTHost_unregister(host, net, HTEvent_CONNECT); if (HTHost_retry(host)) { host->connecttime = HTGetTimeInMillis() - host->connecttime; HTDNS_updateWeigths(host->dns, HTHost_home(host), host->connecttime); } HTHost_setRetry(host, 0); host->tcpstate = TCP_IN_USE; HTTRACE(PROT_TRACE, "HTHost %p connected.\n" _ host); return HT_OK; break; /* Once a host is connected, subsequent connections are immediately OK */ case TCP_IN_USE: if ((status = HTHost_addNet(host, net)) == HT_PENDING) { HTTRACE(PROT_TRACE, "HTDoConnect. Pending...\n"); return HT_PENDING; } HTChannel_upSemaphore(host->channel); return HT_OK; case TCP_DNS_ERROR: HTHost_setRetry(host, 0); host->tcpstate = TCP_BEGIN; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_BEGIN.\n" _ host); return HT_NO_HOST; break; case TCP_NEED_BIND: case TCP_NEED_LISTEN: case TCP_ERROR: if (HTChannel_socket(host->channel) != INVSOC) { NETCLOSE(HTChannel_socket(host->channel)); if (HTHost_isPersistent(host)) { /* Inherited socket */ HTHost_setPersistent(host, NO, HT_TP_SINGLE); host->tcpstate = TCP_NEED_SOCKET; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_NEED_SOCKET.\n" _ host); break; } } /* Do we have more homes to try? */ HTHost_decreaseRetry(host); if (HT_HOSTUNREACHABLE(socerrno) && HTHost_retry(host) > 0) { HTRequest_addSystemError(request, ERR_NON_FATAL, socerrno, NO,"connect"); host->tcpstate = TCP_DNS; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_DNS.\n" _ host); break; } HTRequest_addSystemError(request, ERR_FATAL, socerrno, NO, "connect"); HTDNS_delete(hostname); HTHost_setRetry(host, 0); host->tcpstate = TCP_BEGIN; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_BEGIN.\n" _ host); return HT_ERROR; break; } } } /* HTDoAccept() ** ------------ ** This function makes a non-blocking accept which will turn up as ready ** read in the select. ** Returns ** HT_ERROR Error has occured or interrupted ** HT_OK if connected ** HT_WOULD_BLOCK if operation would have blocked */ PUBLIC int HTDoAccept (HTNet * listening, HTNet * accepting) { HTHost * host = HTNet_host(listening); HTRequest * request = HTNet_request(accepting); int size = sizeof(host->sock_addr); int status; if (!request || HTNet_socket(listening)==INVSOC) { HTTRACE(PROT_TRACE, "HTDoAccept.. Invalid socket\n"); return HT_ERROR; } status = accept(HTNet_socket(listening), (struct sockaddr *) &host->sock_addr, &size); if (NETCALL_ERROR(status)) { if (NETCALL_WOULDBLOCK(socerrno)) { HTTRACE(PROT_TRACE, "HTDoAccept.. WOULD BLOCK %d\n" _ HTNet_socket(listening)); HTHost_register(host, listening, HTEvent_ACCEPT); return HT_WOULD_BLOCK; } HTRequest_addSystemError(request, ERR_WARN, socerrno, YES, "accept"); HTTRACE(PROT_TRACE, "HTDoAccept.. Accept failed\n"); return HT_ERROR; } HTTRACE(PROT_TRACE, "Accepted.... socket %d\n" _ status); /* Remember the new socket we got and close the old one */ NETCLOSE(HTNet_socket(accepting)); HTNet_setSocket(accepting, status); return HT_OK; } /* HTDoListen ** ---------- ** Listens on the specified port. ** returns HT_ERROR Error has occured or interrupted ** HT_OK if connected */ PUBLIC int HTDoListen (HTNet * listening, HTNet * accepting, int backlog) { HTHost * host = HTNet_host(listening); HTRequest * request = HTNet_request(listening); int preemptive = listening->preemptive; int status = HT_OK; char * hostname = HTHost_name(host); /* Jump into the state machine */ while (1) { switch (host->tcpstate) { case TCP_BEGIN: { /* ** Add the net object to the host object found above. If the ** host is idle then we can start the request right away, ** otherwise we must wait until it is free. */ if ((status = HTHost_addNet(host, accepting)) == HT_PENDING) HTTRACE(PROT_TRACE, "HTDoListen.. Pending...\n"); /* ** If we are pending then return here, otherwise go to next state ** which is setting up a channel */ host->tcpstate = TCP_CHANNEL; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_CHANNEL.\n" _ host); if (status == HT_PENDING) return HT_PENDING; } break; case TCP_CHANNEL: /* ** The next state depends on whether we have a connection or not. */ if (HTHost_channel(host) == NULL) { host->tcpstate = TCP_NEED_SOCKET; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_SOCKET.\n" _ host); } else { /* ** There is now one more using the channel */ HTChannel_upSemaphore(host->channel); /* ** We are now all set and can jump to connected mode */ host->tcpstate = TCP_CONNECTED; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_CONNECTED.\n" _ host); } hostname = HTHost_name(host); break; case TCP_NEED_SOCKET: { SOCKET sockfd; /* Create a new socket */ if ((sockfd = _makeSocket(host, request, preemptive)) == INVSOC) { host->tcpstate = TCP_ERROR; break; } /* Create channnel and streams */ createChannelAndTransportStreams (host, sockfd, accepting->transport); /* Progress nofitication */ { HTAlertCallback *cbf = HTAlert_find(HT_PROG_ACCEPT); if (cbf) (*cbf)(request, HT_PROG_ACCEPT, HT_MSG_NULL, NULL, hostname, NULL); } host->tcpstate = TCP_NEED_BIND; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_NEED_BIND\n" _ host); break; } case TCP_NEED_BIND: HTTRACE(PROT_TRACE, "Socket...... Binding socket %d\n" _ HTNet_socket(listening)); status = bind(HTNet_socket(listening), (struct sockaddr *) &host->sock_addr, sizeof(host->sock_addr)); if (NETCALL_ERROR(status)) { HTTRACE(PROT_TRACE, "Socket...... Bind failed %d\n" _ socerrno); host->tcpstate = TCP_ERROR; } else { HTTRACE(PROT_TRACE, "Socket...... Starting listening on socket %d\n" _ HTNet_socket(listening)); host->tcpstate = TCP_NEED_LISTEN; } break; case TCP_NEED_LISTEN: status = listen(HTNet_socket(listening), backlog); if (NETCALL_ERROR(status)) host->tcpstate = TCP_ERROR; else host->tcpstate = TCP_CONNECTED; break; case TCP_CONNECTED: HTHost_unregister(host, listening, HTEvent_ACCEPT); HTHost_setRetry(host, 0); host->tcpstate = TCP_IN_USE; HTTRACE(PROT_TRACE, "HTHost %p listening.\n" _ host); return HT_OK; break; /* once a host is connected, subsequent connections are immediately OK */ case TCP_IN_USE: if ((status = HTHost_addNet(host, accepting)) == HT_PENDING) { HTTRACE(PROT_TRACE, "HTDoListen.. Pending...\n"); return HT_PENDING; } HTChannel_upSemaphore(host->channel); return HT_OK; case TCP_NEED_CONNECT: case TCP_DNS: case TCP_DNS_ERROR: case TCP_ERROR: if (HTChannel_socket(host->channel) != INVSOC) { NETCLOSE(HTChannel_socket(host->channel)); if (HTHost_isPersistent(host)) { /* Inherited socket */ HTHost_setPersistent(host, NO, HT_TP_SINGLE); host->tcpstate = TCP_NEED_SOCKET; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_NEED_SOCKET.\n" _ host); break; } } HTRequest_addSystemError(request, ERR_FATAL, socerrno, NO, "accept"); HTHost_setRetry(host, 0); host->tcpstate = TCP_BEGIN; HTTRACE(PROT_TRACE, "HTHost %p going to state TCP_BEGIN.\n" _ host); return HT_ERROR; break; } } } /* HTDoClose ** --------- ** Closes a file descriptor whatever means are available on the current ** platform. If we have unix file descriptors then use this otherwise use ** the ANSI C file descriptors ** ** returns HT_ERROR Error has occured or interrupted ** HT_OK if connected ** HT_WOULD_BLOCK if operation would have blocked */ PUBLIC int HTDoClose (HTNet * net) { int status = -1; if (net && HTNet_socket(net) != INVSOC) { HTTRACE(PROT_TRACE, "HTDoClose... Close %d\n" _ HTNet_socket(net)); status = NETCLOSE(HTNet_socket(net)); /* HTEvent_unregister(HTNet_socket(net), (SockOps) FD_ALL); */ HTNet_decreaseSocket(); HTNet_setSocket(net, INVSOC); /* ** As we have a socket available we check for whether ** we can start any pending requests. We do this by asking for ** pending Host objects. If none then use the current object */ HTHost_launchPending(net->host); } else HTTRACE(PROT_TRACE, "HTDoClose... No pending requests\n"); return status < 0 ? HT_ERROR : HT_OK; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTCP.html�����������������������������������������������������������������������0100644�0000764�0000144�00000005566�06740672640�015543� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 1-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Socket Open and Close</TITLE> </HEAD> <BODY> <H1> Socket Open and Close </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Socket Open and Close methods knows how to establish a BSD socket TCP connection and is part of the <A HREF="WWWTrans.html">Transport interface</A>. <P> This module is implemented by <A HREF="HTTCP.c">HTTCP.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTTCP_H #define HTTCP_H #include "HTReq.h" #include "HTNet.h" </PRE> <H2> Active Connection Establishment </H2> <P> This makes an active <CODE>connect</CODE> to the specified host. An <A HREF="HTNet.html">HTNet Object</A> is parsed in order to handle errors and other stuff. The default port might be overwritten by any port indication in the <A HREF="http://www.w3.org/Addressing/">URL</A> specified as <CODE>&lt;host&gt;:&lt;port&gt;</CODE> If it is a <I>multihomed host </I>(a host having multiple IP-addresses with the same host name) &nbsp;then <CODE>HTDoConnect()</CODE> measures the time it takes to connect and updates the calculated weights in the <A HREF="HTDNS.html">DNS object</A>. <PRE> extern int HTDoConnect (HTNet * net); </PRE> <H2> Passive Connection Establishment </H2> <P> This function makes an <CODE>accept</CODE> on a port. The net must contain a valid socket to accept on. If accept is OK then we <I>duplicate</I> the net object and assign the accepted socket to the newly created net object. The original <A HREF="HTNet.html">Net object</A> will keep accepting connections on the original socket, for example port 80 in the case of <A HREF="HTTP.html">HTTP</A>. The newly created Net object will be freed when the <A HREF="HTProt.html">protocol module</A> has finished. If the <I>accepted</I> net object pointer points to the net object itself, that is - the same object all along - then we reuse the same Net obejct; closes the original socket and replaces it wik the accepted one. This is a quick way of accepting a single connection. <PRE> extern int HTDoAccept (HTNet * listen, HTNet * accept); </PRE> <H2> Listen on a Socket </H2> <P> Listens on the specified port described in the Net object. <CODE>backlog</CODE> is the number of connections that can be queued on the socket - you can use <CODE>HT_BACKLOG</CODE> for a platform dependent value (typically 5 on BSD and 32 on SVR4). Returns <CODE>HT_ERROR</CODE> or <CODE>HT_OK</CODE>. <PRE> extern int HTDoListen (HTNet * net, HTNet * accept, int backlog); </PRE> <H2> Closing a socket </H2> <P> Closes a socket <PRE> extern int HTDoClose (HTNet * net); </PRE> <PRE> #endif /* HTTCP_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTTCP.html,v 2.44 2025/07/07 15:43:28 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTChunk.c�����������������������������������������������������������������������0100644�0000764�0000144�00000020544�06664352704�015561� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** CHUNKED TRANSFER CODING ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTChunk.c,v 2.16 2025/02/22 22:10:12 frystyk Exp $ ** ** This stream parses a chunked transfer encoding using multiple chunks. ** ** Authors ** HF Henrik Frystyk <frystyk@w3.org> ** ** History: ** Apr 96 Written from scratch ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTTChunk.h" /* Implemented here */ #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) #define PUTC(c) (*me->target->isa->put_character)(me->target, c) struct _HTStream { const HTStreamClass * isa; HTEncoding coding; HTStream * target; HTRequest * request; char * param; /* Extra parameters for encoding */ long left; /* Remaining bytes in this chunk */ long total; /* Full length */ BOOL lastchunk; /* Is this the last chunk? */ BOOL trailer; /* Do we have a trailer? */ HTEOLState state; HTChunk * buf; int status; /* return code from down stream */ }; /* ------------------------------------------------------------------------- */ /* ** Chunked Decoder stream */ PRIVATE BOOL HTChunkDecode_header (HTStream * me) { char * line = HTChunk_data(me->buf); if (line) { char *errstr = NULL; me->left = strtol(line, &errstr, 16); /* hex! */ HTTRACE(STREAM_TRACE, "Chunked..... `%s\' chunk size: %X\n" _ line _ me->left); if (errstr == line) HTDEBUGBREAK("Chunk decoder received illigal chunk size: `%s\'\n" _ line); if (me->left > 0) { me->total += me->left; /* Look for arguments */ HTChunk_clear(me->buf); } else if (me->left == 0) /* Last chunk */ me->lastchunk = YES; else if (me->left < 0) return NO; return YES; } return NO; } PRIVATE int HTChunkDecode_block (HTStream * me, const char * b, int l) { while (l > 0) { int length = l; if (me->left <= 0 && !me->trailer) { while (l > 0) { if (me->state == EOL_FLF) { if (HTChunkDecode_header(me) == NO) return HT_ERROR; if (me->lastchunk) if (*b != CR && *b != LF) me->trailer = YES; me->state = EOL_DOT; break; } else if (me->state == EOL_SLF) { if (me->lastchunk) break; me->state = EOL_BEGIN; HTChunk_putc(me->buf, *b); } else if (*b == CR) { me->state = me->state == EOL_DOT ? EOL_SCR : EOL_FCR; } else if (*b == LF) { me->state = me->state == EOL_SCR ? EOL_SLF : EOL_FLF; } else HTChunk_putc(me->buf, *b); b++, l--; } } /* ** Account for the parts we read in the chunk header + ** the chunk that we are reading. */ if (length != l) HTHost_setConsumed(HTNet_host(HTRequest_net(me->request)), length - l); /* ** If we have to read trailers. Otherwise we are done. */ if (me->trailer) { me->target = HTStreamStack(WWW_MIME_FOOT, WWW_SOURCE, me->target, me->request, NO); } else if (me->state == EOL_SLF) { if (me->lastchunk) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_DONE); if (cbf) (*cbf)(me->request, HT_PROG_DONE, HT_MSG_NULL, NULL, NULL, NULL); return HT_LOADED; } me->state = EOL_BEGIN; } /* ** Handle the rest of the data including trailers */ if (l > 0 && me->left) { int bytes = HTMIN(l, me->left); int status = (*me->target->isa->put_block)(me->target, b, bytes); if (status != HT_OK) return status; HTHost_setConsumed(HTNet_host(HTRequest_net(me->request)), bytes); me->left -= bytes; l -= bytes, b+= bytes; } } return HT_OK; } PRIVATE int HTChunkDecode_string (HTStream * me, const char * s) { return HTChunkDecode_block(me, s, (int) strlen(s)); } PRIVATE int HTChunkDecode_character (HTStream * me, char c) { return HTChunkDecode_block(me, &c, 1); } PRIVATE int HTChunkDecode_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int HTChunkDecode_free (HTStream * me) { int status = HT_OK; HTParentAnchor * anchor = HTRequest_anchor(me->request); /* ** Update the amount of data that we read in all. */ HTAnchor_setLength(anchor, me->total); if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTTRACE(PROT_TRACE, "Chunked..... FREEING....\n"); HTChunk_delete(me->buf); HT_FREE(me); return status; } PRIVATE int HTChunkDecode_abort (HTStream * me, HTList * e) { int status = HT_ERROR; if (me->target) status = (*me->target->isa->abort)(me->target, e); HTTRACE(PROT_TRACE, "Chunked..... ABORTING...\n"); HTChunk_delete(me->buf); HT_FREE(me); return status; } PRIVATE const HTStreamClass HTChunkDecodeClass = { "ChunkDecoder", HTChunkDecode_flush, HTChunkDecode_free, HTChunkDecode_abort, HTChunkDecode_character, HTChunkDecode_string, HTChunkDecode_block }; PUBLIC HTStream * HTChunkedDecoder (HTRequest * request, void * param, HTEncoding coding, HTStream * target) { HTStream * me; HTParentAnchor * anchor = HTRequest_anchor(request); if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTChunkDecoder"); me->isa = &HTChunkDecodeClass; me->coding = coding; me->target = target; me->request = request; me->state = EOL_BEGIN; me->buf = HTChunk_new(64); me->status = HT_ERROR; /* Adjust information in anchor */ HTAnchor_setLength(anchor, -1); HTTRACE(STREAM_TRACE, "Chunked..... Decoder stream created\n"); return me; } /* ** Chunked Encoder Stream */ PRIVATE int HTChunkEncode_block (HTStream * me, const char * b, int l) { char * chunky = HTChunk_data(me->buf); if (me->lastchunk) return HT_LOADED; if (me->param) { if (me->total) sprintf(chunky, "%c%c%x %s %c%c", CR, LF, l, me->param, CR, LF); else sprintf(chunky, "%x %s %c%c", l, me->param, CR, LF); } else { if (me->total) sprintf(chunky, "%c%c%x%c%c", CR, LF, l, CR, LF); else sprintf(chunky, "%x%c%c", l, CR, LF); } me->total += l; PUTBLOCK(chunky, (int) strlen(chunky)); HTTRACE(STREAM_TRACE, "Chunked..... chunk size 0x%X\n" _ l); if (l > 0) return PUTBLOCK(b, l); /* Here we should provide a footer */ PUTC(CR); PUTC(LF); me->lastchunk = YES; (*me->target->isa->flush)(me->target); return HT_LOADED; } PRIVATE int HTChunkEncode_string (HTStream * me, const char * s) { return HTChunkEncode_block(me, s, (int) strlen(s)); } PRIVATE int HTChunkEncode_character (HTStream * me, char c) { return HTChunkEncode_block(me, &c, 1); } PRIVATE int HTChunkEncode_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int HTChunkEncode_free (HTStream * me) { #if 0 int status = HTChunkEncode_block(me, NULL, 0); if (status != HT_WOULD_BLOCK) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; HT_FREE(me); } return status; #else int status = me->target ? (*me->target->isa->_free)(me->target) : HT_OK; HT_FREE(me); return status; #endif } PRIVATE int HTChunkEncode_abort (HTStream * me, HTList * e) { int status = HT_ERROR; if (me->target) status = (*me->target->isa->_free)(me->target); HTTRACE(PROT_TRACE, "Chunked..... ABORTING...\n"); HT_FREE(me); return status; } PRIVATE const HTStreamClass HTChunkEncoderClass = { "ChunkEncoder", HTChunkEncode_flush, HTChunkEncode_free, HTChunkEncode_abort, HTChunkEncode_character, HTChunkEncode_string, HTChunkEncode_block }; PUBLIC HTStream * HTChunkedEncoder (HTRequest * request, void * param, HTEncoding coding, HTStream * target) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTChunkEncoder"); me->isa = &HTChunkEncoderClass; me->coding = coding; me->target = target; me->request = request; me->param = (char *) param; me->state = EOL_BEGIN; me->status = HT_ERROR; { int length = me->param ? strlen(me->param)+20 : 20; me->buf = HTChunk_new(length); HTChunk_ensure(me->buf, length); } HTTRACE(STREAM_TRACE, "Chunked..... Encoder stream created\n"); return me; } ������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTChunk.html��������������������������������������������������������������������0100644�0000764�0000144�00000002716�06526451275�016304� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Chunked Transfer Encoding and Decoding</TITLE> </HEAD> <BODY> <H1> Chunked Transfer Encoding and Decoding </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> Chunked transfer encoding and decoding is new in HTTP/1.1. It allows applications to use persistent connections while not knowing the content length a priori to the response header is generated. <P> Both the encoder and the decoder are of type <A HREF="HTFormat.html#encoding">HTCoder</A> which is defined in the <A HREF="HTFormat.html">Stream Pipe Builder</A>. This means that bot the encoder and the decoder are registered dynamically and called by the Stream Pipe Builder if required. <P> <B>Note</B>: These streams are <I>not</I> set up by default. They must be registered by the application. You can use the default initialization function <CODE>HTEncoderInit()</CODE> function in the <A HREF="WWWInit.html">initialization interface</A>. <P> This module is implemented by <A HREF="HTTChunk.c">HTTChunk.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <P> <PRE>#ifndef HTTCHUNK_H #define HTTCHUNK_H #include "HTFormat.h" </PRE> <PRE> extern HTCoder HTChunkedDecoder, HTChunkedEncoder; </PRE> <PRE> #endif /* HTTCHUNK_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTTChunk.html,v 2.4 2025/05/14 02:11:09 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������libwww/Library/src/HTTP.c���������������������������������������������������������������������������0100644�0000764�0000144�00000122557�07177243647�014724� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTP.c ** MULTITHREADED IMPLEMENTATION OF HTTP CLIENT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTP.c,v 1.190 2025/10/30 10:04:23 kahan Exp $ ** ** This module implements the HTTP protocol as a state machine ** ** History: ** < May 24 94 ?? Unknown - but obviously written ** May 24 94 HF Made reentrent and cleaned up a bit. Implemented ** Forward, redirection, error handling and referer field ** 8 Jul 94 FM Insulate free() from _free structure element. ** Jul 94 HFN Written on top of HTTP.c, Henrik Frystyk ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTHeader.h" #include "HTMIMERq.h" #include "HTReqMan.h" #include "HTNetMan.h" #include "HTTPUtil.h" #include "HTTPReq.h" #include "HTTP.h" /* Implements */ /* Macros and other defines */ #ifndef HTTP_PORT #define HTTP_PORT 80 /* Allocated to http by Jon Postel/ISI 24-Jan-92 */ #endif #define PUTC(c) (*me->target->isa->put_character)(me->target, c) #define PUTS(s) (*me->target->isa->put_string)(me->target, s) #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) #define FREE_TARGET (*me->target->isa->_free)(me->target) #define ABORT_TARGET (*me->target->isa->abort)(me->target, e) #ifdef HTDEBUG #include "WWWStream.h" #define HTTP_OUTPUT "w3chttp.out" PRIVATE FILE * htfp = NULL; #endif /* Type definitions and global variables etc. local to this module */ /* Final states have negative value */ typedef enum _HTTPState { HTTP_KILL_PIPE = -4, HTTP_RECOVER_PIPE = -3, HTTP_ERROR = -2, HTTP_OK = -1, HTTP_BEGIN = 0, HTTP_NEED_STREAM, HTTP_CONNECTED } HTTPState; /* This is the context structure for the this module */ typedef struct _http_info { HTTPState state; /* Current State of the connection */ HTTPState next; /* Next state */ int result; /* Result to report to the after filter */ BOOL lock; /* Block for writing */ HTNet * net; HTRequest * request; HTTimer * timer; BOOL usedTimer; BOOL repetitive_writing; } http_info; #define MAX_STATUS_LEN 100 /* Max nb of chars to check StatusLine */ struct _HTStream { const HTStreamClass * isa; HTStream * target; HTStream * info_target; /* For 100 codes */ HTRequest * request; http_info * http; HTEOLState state; BOOL transparent; BOOL cont; char * version; /* Should we save this? */ int status; char * reason; char buffer[MAX_STATUS_LEN+1]; int buflen; int startLen;/* buflen when put_block was called */ }; struct _HTInputStream { const HTInputStreamClass * isa; }; /* How long to wait before writing the body in PUT and POST requests */ #define DEFAULT_FIRST_WRITE_DELAY 2000 #define DEFAULT_SECOND_WRITE_DELAY 3000 #define DEFAULT_REPEAT_WRITE 30 PRIVATE ms_t HTFirstWriteDelay = DEFAULT_FIRST_WRITE_DELAY; PRIVATE ms_t HTSecondWriteDelay = DEFAULT_SECOND_WRITE_DELAY; PRIVATE ms_t HTRepeatWrite = DEFAULT_REPEAT_WRITE; #ifdef HT_NO_PIPELINING PRIVATE HTTPConnectionMode ConnectionMode = HTTP_11_NO_PIPELINING; #else #ifdef HT_MUX PRIVATE HTTPConnectionMode ConnectionMode = HTTP_11_MUX; #else #ifdef HT_FORCE_10 PRIVATE HTTPConnectionMode ConnectionMode = HTTP_FORCE_10; #else PRIVATE HTTPConnectionMode ConnectionMode = HTTP_11_PIPELINING; #endif #endif #endif /* ------------------------------------------------------------------------- */ /* Help Functions */ /* ------------------------------------------------------------------------- */ /* HTTPCleanup ** ----------- ** This function closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE int HTTPCleanup (HTRequest *req, int status) { HTNet * net = HTRequest_net(req); http_info * http = (http_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(req); HTTRACE(PROT_TRACE, "HTTP Clean.. Called with status %d, net %p\n" _ status _ net); if (status == HT_INTERRUPTED) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_INTERRUPT); if (cbf) (*cbf)(req, HT_PROG_INTERRUPT, HT_MSG_NULL, NULL, NULL, NULL); } else if (status == HT_TIMEOUT) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_TIMEOUT); if (cbf) (*cbf)(req, HT_PROG_TIMEOUT, HT_MSG_NULL, NULL, NULL, NULL); } /* Free stream with data TO network */ if (input) { if (input->isa) { if (status==HT_INTERRUPTED || status==HT_RECOVER_PIPE || status==HT_TIMEOUT) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); } HTRequest_setInputStream(req, NULL); } /* ** Remove if we have registered an upload function as a callback */ if (http && http->timer) { HTTimer_delete(http->timer); http->timer = NULL; http->lock = NO; } /* ** Remove the request object and our own context structure for http. */ if (status != HT_RECOVER_PIPE) { HTNet_delete(net, status); HT_FREE(http); } return YES; } /* ** Informational 1xx codes are handled separately ** Returns YES if we should continue, NO if we should stop */ PRIVATE BOOL HTTPInformation (HTStream * me) { http_info * http = me->http; switch (me->status) { case 100: #if 0 HTRequest_addError(me->request, ERR_INFO, NO, HTERR_CONTINUE, me->reason, (int) strlen(me->reason), "HTTPInformation"); #endif http->result = HT_CONTINUE; return YES; break; case 101: /* ** We consider 101 Switching as a final state and exit this request */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_SWITCHING, me->reason, (int) strlen(me->reason), "HTTPInformation"); http->next = HTTP_OK; http->result = HT_UPGRADE; return YES; break; default: HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_BAD_REPLY, (void *) me->buffer, me->buflen, "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_ERROR; break; } return NO; } /* ** This is a big switch handling all HTTP return codes. It puts in any ** appropiate error message and decides whether we should expect data ** or not. */ PRIVATE void HTTPNextState (HTStream * me) { http_info * http = me->http; int error_class = me->status / 100; switch (error_class) { case 0: /* 0.9 response */ case 2: switch (me->status) { case 201: /* Created */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_CREATED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_CREATED; break; case 202: /* Accepted */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_ACCEPTED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_ACCEPTED; break; case 203: /* Non-authoritative information */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_NON_AUTHORITATIVE, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_LOADED; break; case 204: /* No Response */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_NO_CONTENT, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_NO_DATA; break; case 205: /* Reset Content */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_RESET, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_RESET_CONTENT; break; case 206: /* Partial Content */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_PARTIAL, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_PARTIAL_CONTENT; break; case 207: /* Partial Update OK */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_PARTIAL_OK, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_PARTIAL_CONTENT; break; default: HTRequest_addError(me->request, ERR_INFO, NO, HTERR_OK, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_LOADED; break; } break; case 3: switch (me->status) { case 301: /* Moved */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_MOVED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_PERM_REDIRECT; break; case 302: /* Found */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_FOUND, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_FOUND; break; case 303: /* Method */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_METHOD, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_SEE_OTHER; break; case 304: /* Not Modified */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_NOT_MODIFIED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_NOT_MODIFIED; break; case 305: /* Use proxy */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_USE_PROXY, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_USE_PROXY; break; #if 0 case 306: /* Use proxy */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_PROXY_REDIRECT, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_USE_PROXY; break; #endif case 307: /* Use proxy */ HTRequest_addError(me->request, ERR_INFO, NO, HTERR_TEMP_REDIRECT, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_TEMP_REDIRECT; break; default: HTRequest_addError(me->request, ERR_INFO, NO, HTERR_MULTIPLE, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_OK; http->result = HT_LOADED; break; } break; case 4: switch (me->status) { case 401: HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_UNAUTHORIZED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_NO_ACCESS; break; case 402: /* Payment required */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_PAYMENT_REQUIRED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -402; break; case 403: /* Forbidden */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_FORBIDDEN, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_FORBIDDEN; break; case 404: /* Not Found */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_NOT_FOUND, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -404; break; case 405: /* Not Allowed */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_NOT_ALLOWED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -405; break; case 406: /* None Acceptable */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_NONE_ACCEPTABLE, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_NOT_ACCEPTABLE; break; case 407: /* Proxy Authentication Required */ HTRequest_addError(me->request, ERR_FATAL, NO,HTERR_PROXY_UNAUTHORIZED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_NO_PROXY_ACCESS; break; case 408: /* Request Timeout */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_TIMEOUT, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -408; break; case 409: /* Conflict */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_CONFLICT, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_CONFLICT; break; case 410: /* Gone */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_GONE, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -410; break; case 411: /* Length Required */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_LENGTH_REQUIRED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_LENGTH_REQUIRED; break; case 412: /* Precondition failed */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_PRECON_FAILED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -412; break; case 413: /* Request entity too large */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_TOO_BIG, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -413; break; case 414: /* Request-URI too long */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_URI_TOO_BIG, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -414; break; case 415: /* Unsupported */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_UNSUPPORTED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -415; break; case 416: /* Request Range not satisfiable */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_BAD_RANGE, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -416; break; case 417: /* Expectation Failed */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_EXPECTATION_FAILED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -417; break; case 418: /* Reauthentication required */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_REAUTH, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -418; break; case 419: /* Proxy Reauthentication required */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_PROXY_REAUTH, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -419; break; default: HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_BAD_REQUEST, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -400; break; } break; case 5: switch (me->status) { case 501: HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_NOT_IMPLEMENTED, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -501; break; case 502: HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_BAD_GATE, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -502; break; case 503: HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_DOWN, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; /* ** If Retry-After header is found then return HT_RETRY else HT_ERROR. ** The caller may want to reissue the request at a later point in time. */ { HTResponse * response = HTRequest_response(me->request); if (HTResponse_retryTime(response)) http->result = HT_RETRY; else http->result = -500; } break; case 504: HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_GATE_TIMEOUT, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -504; break; case 505: /* Unsupported protocol version */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_BAD_VERSION, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_BAD_VERSION; break; case 506: /* Partial update Not Implemented */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_NO_PARTIAL_UPDATE, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = HT_BAD_VERSION; break; default: /* bad number */ HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_INTERNAL, me->reason, (int) strlen(me->reason), "HTTPNextState"); http->next = HTTP_ERROR; http->result = -500; break; } break; default: HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_BAD_REPLY, (void *) me->buffer, me->buflen, "HTTPNextState"); http->next = HTTP_ERROR; http->result = -(me->status); break; } } /* ------------------------------------------------------------------------- */ /* HTTP Status Line Stream */ /* ------------------------------------------------------------------------- */ /* ** Analyze the stream we have read. If it is a HTTP 1.0 or higher ** then create a MIME-stream, else create a Guess stream to find out ** what the 0.9 server is sending. We need to copy the buffer as we don't ** know if we can modify the contents or not. ** ** Stream handling is a function of the status code returned from the ** server: ** 200: Use `output_stream' in HTRequest structure ** else: Use `debug_stream' in HTRequest structure ** ** Return: YES if buffer should be written out. NO otherwise */ PRIVATE int stream_pipe (HTStream * me, int length) { HTRequest * request = me->request; HTNet * net = HTRequest_net(request); HTHost * host = HTNet_host(net); #if 0 { char * uri = HTAnchor_address((HTAnchor *) HTRequest_anchor(request)); fprintf(stderr, "HTTP header: %s for '%s'\n", me->buffer, uri); HT_FREE(uri); } #endif /* ** Just check for HTTP and not HTTP/ as NCSA server chokes on 1.1 replies ** Thanks to Markku Savela <msa@msa.tte.vtt.fi> */ if (strncasecomp(me->buffer, "http", 4)) { int status; HTRequest_addError(request, ERR_INFO, NO, HTERR_HTTP09, (void *) me->buffer, me->buflen, "HTTPStatusStream"); me->target = HTStreamStack(WWW_UNKNOWN, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, NO); me->http->next = HTTP_OK; if ((status = PUTBLOCK(me->buffer, me->buflen)) == HT_OK) me->transparent = YES; /* JK: in 2000, we don't expect many HTTP/0.9 servers to remain. I removed this line which made the backward change as most of the time we fall here more due to a network or server problem, rather than because we are accessing an old server. */ /* HTHost_setVersion(host, HTTP_09); */ if (length > 0) HTHost_setConsumed(host, length); HTTRACE(PROT_TRACE, "HTTP Status. `%s\' is probably a broken 1.0 server that doesn't understand HEAD\n" _ HTHost_name(host)); return HT_ERROR; } else { HTResponse * response = HTRequest_response(request); char * ptr = me->buffer+5; /* Skip the HTTP part */ char * vptr = NULL; int major = 0; int minor = 0; me->version = vptr = HTNextField(&ptr); if (vptr) { major = (int) strtol(me->version, &vptr, 10); if (vptr++) minor = strtol(vptr, NULL, 10); } /* Here we want to find out when to use persistent connection */ if (major > 1 && major < 100) { HTTRACE(PROT_TRACE, "HTTP Status. Major version number is %d\n" _ major); me->target = HTErrorStream(); me->status = 9999; HTTPNextState(me); /* Get next state */ return HT_ERROR; } else if (minor <= 0) { if (major > 100) { HTTRACE(PROT_TRACE, "HTTP Status. This is a *BROKEN* HTTP/1.0 server\n"); me->status = 200; } else { HTTRACE(PROT_TRACE, "HTTP Status. This is an HTTP/1.0 server\n"); me->status = atoi(HTNextField(&ptr)); } HTHost_setVersion(host, HTTP_10); } else { /* 1.x, x>0 family */ HTHost_setVersion(host, HTTP_11); /* Best we can do */ if (ConnectionMode & HTTP_11_NO_PIPELINING) { HTTRACE(PROT_TRACE, "HTTP........ Mode is HTTP/1.1 with NO PIPELINING\n"); HTNet_setPersistent(net, YES, HT_TP_SINGLE); } else if (ConnectionMode & HTTP_11_MUX) { HTTRACE(PROT_TRACE, "HTTP........ Mode is HTTP/1.1 with MUXING\n"); HTNet_setPersistent(net, YES, HT_TP_INTERLEAVE); } else if (ConnectionMode & HTTP_FORCE_10) { HTTRACE(PROT_TRACE, "HTTP........ Mode is FORCE HTTP/1.0\n"); HTHost_setVersion(host, HTTP_10); HTNet_setPersistent(net, NO, HT_TP_SINGLE); } else HTNet_setPersistent(net, YES, HT_TP_PIPELINE); me->status = atoi(HTNextField(&ptr)); } me->reason = ptr; if ((ptr = strchr(me->reason, '\r')) != NULL) /* Strip \r and \n */ *ptr = '\0'; else if ((ptr = strchr(me->reason, '\n')) != NULL) *ptr = '\0'; /* ** If it is a 1xx code then find out what to do and return until we ** get the next code. In the case of Upgrade we may not get back here ** at all. If we are uploading an entity then continue doing that */ if (me->status/100 == 1) { if (HTTPInformation(me) == YES) { if (me->status==100) { me->buflen = 0; me->state = EOL_BEGIN; if (me->info_target) (*me->info_target->isa->_free)(me->info_target); me->info_target = HTStreamStack(WWW_MIME_CONT, HTRequest_debugFormat(request), HTRequest_debugStream(request), request, NO); if (length > 0) HTHost_setConsumed(host, length); return HT_OK; } else if (me->status==101) { if (me->info_target) (*me->info_target->isa->_free)(me->info_target); me->target = HTStreamStack(WWW_MIME_UPGRADE, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, NO); if (length > 0) HTHost_setConsumed(host, length); me->transparent = YES; return HT_OK; } } } /* 2000/Oct/27 JK: copying the current reason info into the response object. */ HTResponse_setReason (response, me->reason); /* ** As we are getting fresh metainformation in the HTTP response, ** we clear the old metainfomation in order not to mix it with the new ** one. This is particularly important for the content-length and the ** like. The TRACE and OPTIONS method just adds to the current ** metainformation so in that case we don't clear the anchor. */ if (me->status==200 || me->status==203 || me->status==300) { /* ** 200, 203 and 300 are all fully cacheable responses. No byte ** ranges or anything else make life hard in this case. */ HTAnchor_clearHeader(HTRequest_anchor(request)); HTResponse_setCachable(response, HT_CACHE_ALL); me->target = HTStreamStack(WWW_MIME, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, NO); } else if (me->status==204) { HTResponse_setCachable(response, HT_CACHE_ALL); me->target = HTStreamStack(WWW_MIME_HEAD, HTRequest_debugFormat(request), HTRequest_debugStream(request), request, NO); } else if (me->status==206) { /* ** We got a partial response and now we must check whether ** we issued a cache If-Range request or it was a new ** partial response which we don't have in cache. In the latter ** case, we don't cache the object and in the former we append ** the result to the already existing cache entry. */ HTReload reload = HTRequest_reloadMode(request); if (reload == HT_CACHE_RANGE_VALIDATE) { HTResponse_setCachable(response, HT_CACHE_ALL); me->target = HTStreamStack(WWW_MIME_PART, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, NO); } else { HTAnchor_clearHeader(HTRequest_anchor(request)); me->target = HTStreamStack(WWW_MIME, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, NO); } } else if (me->status==304) { HTResponse_setCachable(response, HT_CACHE_NOT_MODIFIED); me->target = HTStreamStack(WWW_MIME_HEAD, HTRequest_debugFormat(request), HTRequest_debugStream(request), request, NO); } else if (HTRequest_debugStream(request)) { HTResponse_setCachable(response, (me->status == 201) ? HT_CACHE_ETAG : HT_NO_CACHE); me->target = HTStreamStack(WWW_MIME, HTRequest_debugFormat(request), HTRequest_debugStream(request), request, NO); } else { /* ** We still need to parse the MIME part in order to find any ** valuable meta information which is needed from the response. */ HTResponse_setCachable(response, (me->status == 201) ? HT_CACHE_ETAG : HT_NO_CACHE); me->target = HTStreamStack(WWW_MIME, HTRequest_debugFormat(request), HTRequest_debugStream(request), request, NO); } } if (!me->target) me->target = HTErrorStream(); HTTPNextState(me); /* Get next state */ me->transparent = YES; if (length > 0) HTHost_setConsumed(HTNet_host(HTRequest_net(me->request)), length); return HT_OK; } /* ** Searches for HTTP header line until buffer fills up or a CRLF or LF ** is found */ PRIVATE int HTTPStatus_put_block (HTStream * me, const char * b, int l) { int status = HT_OK; int length = l; me->startLen = me->buflen; while (!me->transparent && l-- > 0) { if (me->info_target) { /* Put data down the 1xx return code parser until we are done. */ status = (*me->info_target->isa->put_block)(me->info_target, b, l+1); if (status != HT_CONTINUE) return status; /* Now free the info stream */ (*me->info_target->isa->_free)(me->info_target); me->info_target = NULL; /* Update where we are in the stream */ l = HTHost_remainingRead(HTNet_host(HTRequest_net(me->request))); b += (length-l); length = l; if (l <= 0) break; } else { *(me->buffer+me->buflen++) = *b; if (me->state == EOL_FCR) { if (*b == LF) { /* Line found */ if ((status = stream_pipe(me, length-l)) != HT_OK) return status; } else { me->state = EOL_BEGIN; } } else if (*b == CR) { me->state = EOL_FCR; } else if (*b == LF) { if ((status = stream_pipe(me, length-l)) != HT_OK) return status; } else { if (me->buflen >= MAX_STATUS_LEN) { if ((status = stream_pipe(me, length-l)) != HT_OK) return status; } } b++; } } if (!me->transparent && length != l) HTHost_setConsumed(HTNet_host(HTRequest_net(me->request)), length-l); if (l > 0) return PUTBLOCK(b, l); return status; } PRIVATE int HTTPStatus_put_string (HTStream * me, const char * s) { return HTTPStatus_put_block(me, s, (int) strlen(s)); } PRIVATE int HTTPStatus_put_character (HTStream * me, char c) { return HTTPStatus_put_block(me, &c, 1); } PRIVATE int HTTPStatus_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int HTTPStatus_free (HTStream * me) { int status = HT_OK; if (me->target) { if ((status = (*me->target->isa->_free)(me->target))==HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HT_FREE(me); return status; } PRIVATE int HTTPStatus_abort (HTStream * me, HTList * e) { if (me->target) ABORT_TARGET; HT_FREE(me); HTTRACE(PROT_TRACE, "HTTPStatus.. ABORTING...\n"); return HT_ERROR; } /* HTTPStatus Stream ** ----------------- */ PRIVATE const HTStreamClass HTTPStatusClass = { "HTTPStatus", HTTPStatus_flush, HTTPStatus_free, HTTPStatus_abort, HTTPStatus_put_character, HTTPStatus_put_string, HTTPStatus_put_block }; PUBLIC HTStream * HTTPStatus_new (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTTPStatus_new"); me->isa = &HTTPStatusClass; if (request) { HTNet * net = HTRequest_net(request); /* Get existing copy */ http_info * http = (http_info *) HTNet_context(net); me->request = request; me->http = http; http->next = HTTP_ERROR; me->state = EOL_BEGIN; return me; } else return HTErrorStream(); } /* ------------------------------------------------------------------------- */ /* Load Document from HTTP Server HTLoadHTTP ** ============================== ** ** Given a hypertext address, this routine loads a document. ** ** On entry, ** request This is the request structure ** returns HT_ERROR Error has occured in call back ** HT_OK Call back was OK */ PRIVATE int HTTPEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadHTTP (SOCKET soc, HTRequest * request) { http_info *http; /* Specific protocol information */ HTParentAnchor *anchor = HTRequest_anchor(request); HTNet * net = HTRequest_net(request); /* ** Initiate a new http structure and bind to request structure ** This is actually state HTTP_BEGIN, but it can't be in the state ** machine as we need the structure first. */ HTTRACE(PROT_TRACE, "HTTP........ Looking for `%s\'\n" _ HTAnchor_physical(anchor)); if ((http = (http_info *) HT_CALLOC(1, sizeof(http_info))) == NULL) HT_OUTOFMEM("HTLoadHTTP"); http->net = net; http->request = request; HTNet_setContext(net, http); HTNet_setEventCallback(net, HTTPEvent); HTNet_setEventParam(net, http); /* callbacks get http* */ return HTTPEvent(soc, http, HTEvent_BEGIN); /* get it started - ops is ignored */ } PRIVATE int FlushPutEvent (HTTimer * timer, void * param, HTEventType type) { http_info * http = (http_info *) param; HTStream * input = HTRequest_inputStream(http->request); HTPostCallback * pcbf = HTRequest_postCallback(http->request); int status = HT_ERROR; http->usedTimer = YES; if (timer != http->timer) HTDEBUGBREAK("HTTP timer %p not in sync\n" _ timer); HTTRACE(PROT_TRACE, "Uploading... Flushing %p with timer %p\n" _ http _ timer); /* ** Call the callback that will provide the data to save ** If the callback returns HT_OK then call it again until ** it returns something else than HT_OK. */ if (http && input && pcbf) { status = (*pcbf)(http->request, input); HTTRACE(PROT_TRACE, "Uploading... Callback returned %d\n" _ status); } /* ** If the callback returned something else than HT_OK then delete ** the timer, otherwise update it to a much shorter expiration ** time so that we can write some more data to the net. */ if (status != HT_OK) { HTTimer_delete(http->timer); http->timer = NULL; } else if (!http->repetitive_writing) { http->timer = HTTimer_new(NULL, FlushPutEvent, http, HTRepeatWrite, YES, YES); http->repetitive_writing = YES; } return HT_OK; } PRIVATE int HTTPEvent (SOCKET soc, void * pVoid, HTEventType type) { http_info * http = (http_info *)pVoid; int status = HT_ERROR; HTNet * net = http->net; HTRequest * request = HTNet_request(net); HTParentAnchor * anchor = HTRequest_anchor(request); HTHost * host = HTNet_host(net); /* ** Check whether we have been interrupted or timed out */ if (type == HTEvent_BEGIN) { http->next = HTTP_OK; http->result = HT_ERROR; } else if (type == HTEvent_CLOSE) { long read_len = HTNet_bytesRead(net); long doc_len = HTAnchor_length(anchor); /* ** It is OK to get a close if a) we don't pipeline and b) ** we have the expected amount of data, and c) we haven't ** recieved a 100 Continue code. In case we don't ** know how much data to expect, we must accept it asis. */ if (HTHost_numberOfOutstandingNetObjects(host) == 1 && http->result != HT_CONTINUE && (doc_len<0 || doc_len==read_len)) { HTTPCleanup(request, http->result); /* Raffaele Sena: was HT_LOADED */ } else { HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED, NULL, 0, "HTLoadHTTP"); HTTPCleanup(request, HT_INTERRUPTED); } return HT_OK; } else if (type == HTEvent_TIMEOUT) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_TIME_OUT, NULL, 0, "HTLoadHTTP"); HTTPCleanup(request, HT_TIMEOUT); return HT_OK; } else if (type == HTEvent_END) { HTTPCleanup(request, http->result); return HT_OK; } else if (type == HTEvent_RESET) { HTTPCleanup(request, HT_RECOVER_PIPE); http->state = HTTP_BEGIN; return HT_OK; } /* Now jump into the machine. We know the state from the previous run */ while (1) { switch (http->state) { case HTTP_BEGIN: status = HTHost_connect(host, net, HTAnchor_physical(anchor)); host = HTNet_host(net); if (status == HT_OK) { /* ** Check the protocol class to see if we have connected to a ** the right class of server, in this case HTTP. If we don't ** know the server then assume a HTTP/1.0 */ { char * s_class = HTHost_class(host); if (!s_class) { if (HTRequest_proxy(request) == NULL) { HTAssocList * alist = HTRequest_connection(request); if (!(alist && HTAssocList_findObject(alist, "close"))) HTRequest_addConnection(request, "Keep-Alive", ""); } HTHost_setClass(host, "http"); } else if (strcasecomp(s_class, "http")) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, NULL, 0, "HTLoadHTTP"); http->state = HTTP_ERROR; break; } } if (ConnectionMode & HTTP_11_NO_PIPELINING) { HTTRACE(PROT_TRACE, "HTTP........ Mode is HTTP/1.1 WITH NO PIPELINING\n"); HTRequest_setFlush(request, YES); } else if (ConnectionMode & HTTP_FORCE_10) { HTTRACE(PROT_TRACE, "HTTP........ Mode is FORCE HTTP/1.0\n"); HTHost_setVersion(host, HTTP_10); } if (HTNet_preemptive(net)) { HTTRACE(PROT_TRACE, "HTTP........ Force flush on preemptive load\n"); HTRequest_setFlush(request, YES); } /* Jump to next state */ http->state = HTTP_NEED_STREAM; } else if (status == HT_WOULD_BLOCK || status == HT_PENDING) { return HT_OK; } else if (status == HT_NO_HOST) { http->result = HT_NO_HOST; http->state = HTTP_ERROR; } else http->state = HTTP_ERROR; /* Error or interrupt */ break; case HTTP_NEED_STREAM: /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ { /* ** during a recovery, we might keep the same HTNet object. ** if so, reuse it's read stream */ HTStream * me = HTNet_readStream( net ); if ( me == NULL ) { me = HTStreamStack(WWW_HTTP, HTRequest_outputFormat(request), HTRequest_outputStream(request), request, YES); #ifdef HTDEBUG if (PROT_TRACE) { if (!htfp) htfp = fopen(HTTP_OUTPUT, "ab"); if (htfp) { me = HTTee(me, HTFWriter_new(request, htfp, YES), NULL); HTTRACE(PROT_TRACE, "HTTP........ Dumping response to `%s\'\n" _ HTTP_OUTPUT); } } #endif /* HTDEBUG */ HTNet_setReadStream(net, me); } HTRequest_setOutputConnected(request, YES); } /* ** Create the stream pipe TO the channel from the application ** and hook it up to the request object */ { HTChannel * channel = HTHost_channel(host); HTOutputStream * output = HTChannel_getChannelOStream(channel); int version = HTHost_version(host); HTStream * app = NULL; #ifdef HTDEBUG if (PROT_TRACE) { if (!htfp) htfp = fopen(HTTP_OUTPUT, "ab"); if (htfp) { output = (HTOutputStream *) HTTee((HTStream *) output, HTFWriter_new(request, htfp, YES), NULL); HTTRACE(PROT_TRACE, "HTTP........ Dumping request to `%s\'\n" _ HTTP_OUTPUT); } } #endif /* HTDEBUG */ app = HTMethod_hasEntity(HTRequest_method(request)) ? HTMIMERequest_new(request, HTTPRequest_new(request, (HTStream *) output, NO, version), YES) : HTTPRequest_new(request, (HTStream *) output, YES, version); HTRequest_setInputStream(request, app); } /* ** Set up concurrent read/write if this request isn't the ** source for a PUT or POST. As source we don't start reading ** before all destinations are ready. If destination then ** register the input stream and get ready for read */ if (HTRequest_isDestination(request)) { HTHost_register(host, net, HTEvent_READ); HTRequest_linkDestination(request); } http->state = HTTP_CONNECTED; type = HTEvent_WRITE; /* fresh, so try a write */ break; /* As we can do simultanous read and write this is now one state */ case HTTP_CONNECTED: if (type == HTEvent_WRITE) { HTStream * input = HTRequest_inputStream(request); HTPostCallback * pcbf = HTRequest_postCallback(request); status = HTRequest_flush(request) ? HTHost_forceFlush(host) : (*input->isa->flush)(input); /* ** Check to see if we are uploading something or just a normal ** GET kind of thing. */ /* ** JK: don't continue sending things thru the network ** if the flush resulted in an error or if the connection ** is closed */ if ((status != HT_ERROR) && status != HT_CLOSED) { if (pcbf) { if (http->lock == NO) { int retrys = HTRequest_retrys(request); ms_t delay = retrys > 3 ? HTSecondWriteDelay : HTFirstWriteDelay; if (!http->timer && !http->usedTimer) { http->timer = HTTimer_new(NULL, FlushPutEvent, http, delay, YES, NO); HTTRACE(PROT_TRACE, "Uploading... Holding %p for %lu ms using time %p\n" _ http _ delay _ http->timer); HTHost_register(host, net, HTEvent_READ); } http->lock = YES; } type = HTEvent_READ; } else { /* ** Check to see if we can start a new request ** pending in the host object. */ HTHost_launchPending(host); type = HTEvent_READ; } } /* Now check the status code */ if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_PAUSE || status == HT_LOADED) { type = HTEvent_READ; } else if (status==HT_ERROR) http->state = HTTP_RECOVER_PIPE; } else if (type == HTEvent_FLUSH) { HTStream * input = HTRequest_inputStream(request); if (input == NULL) return HT_ERROR; return (*input->isa->flush)(input); } else if (type == HTEvent_READ) { status = HTHost_read(host, net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_CONTINUE) { HTTRACE(PROT_TRACE, "HTTP........ Continuing\n"); http->lock = NO; continue; } else if (status==HT_LOADED) http->state = http->next; /* Jump to next state (OK or ERROR) */ else if (status==HT_CLOSED) http->state = HTTP_RECOVER_PIPE; else if (status == HT_ERROR) http->state = HTTP_KILL_PIPE; else http->state = HTTP_ERROR; } else { http->state = HTTP_ERROR; /* don't know how to handle OOB */ } break; case HTTP_OK: HTTPCleanup(request, http->result); return HT_OK; break; case HTTP_RECOVER_PIPE: { /* ** If this is a persistent connection and we get a close ** then it is an error and we should recover from it by ** restarting the pipe line of requests if any */ if (HTHost_isPersistent(host) && !HTHost_closeNotification(host)) { if (host == NULL) return HT_ERROR; HTRequest_setFlush(request, YES); /* ** If we already have recovered more than we want and ** this call returns NO then simply kill the pipe. ** Otherwise we may loop forever. */ if (HTHost_recoverPipe(host) != YES) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_BAD_REPLY, NULL, 0, "HTTPEvent"); http->state = HTTP_KILL_PIPE; break; } return HT_OK; } else http->state = HTTP_OK; } break; case HTTP_KILL_PIPE: if (host == NULL) return HT_ERROR; HTHost_killPipe(host); return HT_OK; break; case HTTP_ERROR: HTTPCleanup(request, http->result); return HT_OK; break; default: HTDEBUGBREAK("Bad http state %d\n" _ http->state); } } /* End of while(1) */ } PUBLIC void HTTP_setConnectionMode (HTTPConnectionMode mode) { ConnectionMode = mode; } PUBLIC HTTPConnectionMode HTTP_connectionMode (void) { return ConnectionMode; } PUBLIC BOOL HTTP_setBodyWriteDelay (ms_t first_try, ms_t second_try) { if (first_try > 20 && second_try >= first_try) { HTFirstWriteDelay = first_try; HTSecondWriteDelay = second_try; return YES; } return NO; } PUBLIC void HTTP_bodyWriteDelay (ms_t * first_try, ms_t * second_try) { *first_try = HTFirstWriteDelay; *second_try = HTSecondWriteDelay; } �������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTP.html������������������������������������������������������������������������0100644�0000764�0000144�00000005064�07056772407�015434� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 17-May-1996 --> <TITLE>W3C Sample Code Library libwww HTTP Client</TITLE> </HEAD> <BODY> <H1> Multi Threaded HyperText Tranfer Protocol Client Module </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the HTTP client module. This is actually a very small definition file as almost everything is set up elsewhere. <P> This module is implemented by <A HREF="HTTP.c">HTTP.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTTP_H #define HTTP_H #include "HTProt.h" #include "HTStream.h" </PRE> <H3> HTTP Client Connection Mode </H3> <P> The HTTP client module supports various modes for communicating with HTTP servers. The mode are defined by the enumeration below. <PRE> typedef enum _HTTPConnectionMode { HTTP_11_PIPELINING = 0x1, HTTP_11_NO_PIPELINING = 0x2, HTTP_11_MUX = 0x4, HTTP_FORCE_10 = 0x8 } HTTPConnectionMode; extern void HTTP_setConnectionMode (HTTPConnectionMode mode); extern HTTPConnectionMode HTTP_connectionMode (void); </PRE> <H3> HTTP Write Delay of Content Bodies </H3> <P> Because of the differences between HTTP/1.0 and HTTP/1.1, HTTP <TT>PUT</TT> and <TT>POST</TT> requests can not be dealt with in non-preemptive mode - they have to use timers and hence must be in preemptive mode. <P> The default write mechanism used is first to write the headers and then wait for a period of time before writing the body. This often allows the server to respond before we start sending data accross the wire. If the write for some reason fails in a bad way then we try again, waiting a little bit longer this time as this may give the server enough time to think. <P> The default wait periods are 2000ms for the first wait and 3000ms if that fails. These are rather conservative values but can be changed by using these functions. The second try value must be larger (or equal) to the first try value and the first try value must be larger than 20 ms. <PRE>extern BOOL HTTP_setBodyWriteDelay (ms_t first_try, ms_t second_try); extern void HTTP_bodyWriteDelay (ms_t * first_try, ms_t * second_try); </PRE> <H3> HTTP Event Handler </H3> <P> The event handler is the actual HTTP client state machine taking care of the communication. <PRE> extern HTProtCallback HTLoadHTTP; extern HTConverter HTTPStatus_new; #endif /* HTTP_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTTP.html,v 2.40 2025/02/29 16:34:15 kahan Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPGen.c������������������������������������������������������������������������0100644�0000764�0000144�00000016472�06674457045�015354� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTPGen.c ** HTTP GENERAL HEADER GENERATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTPGen.c,v 2.17 2025/03/19 14:24:37 frystyk Exp $ ** ** This module implements the output stream for General HTTP headers ** ** History: ** Jan 96 HFN Written */ /* Library Includes */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTHeader.h" #include "HTTPUtil.h" #include "HTTPReq.h" /* Implements */ #define MIME_VERSION "MIME/1.0" #define PUTC(c) (*me->target->isa->put_character)(me->target, c) #define PUTS(s) (*me->target->isa->put_string)(me->target, s) #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) struct _HTStream { const HTStreamClass * isa; HTStream * target; HTRequest * request; int version; BOOL endHeader; BOOL transparent; }; /* ------------------------------------------------------------------------- */ /* HTTP General Header Stream */ /* ------------------------------------------------------------------------- */ /* HTTPGenMake ** ------------ ** Makes a MIME/1.0 request header. */ PRIVATE int HTTPGenMake (HTStream * me, HTRequest * request) { char linebuf[256]; /* @@@ */ char crlf[3]; HTGnHd gen_mask = HTRequest_gnHd(request); *crlf = CR; *(crlf+1) = LF; *(crlf+2) = '\0'; if (gen_mask & HT_G_CC) { /* Cache control */ HTAssocList * cur = HTRequest_cacheControl(request); if (cur) { BOOL first=YES; HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { char * value = HTAssoc_value(pres); if (first) { PUTS("Cache-Control: "); first = NO; } else PUTC(','); /* Output the name */ PUTS(HTAssoc_name(pres)); /* Only output the value if not empty string */ if (*value) { PUTS("="); PUTS(value); } } PUTBLOCK(crlf, 2); } } if (gen_mask & HT_G_CONNECTION) { HTAssocList * cur = HTRequest_connection(request); if (cur) { BOOL first=YES; HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { char * value = HTAssoc_value(pres); if (first) { PUTS("Connection: "); first = NO; } else PUTC(','); /* Output the name */ PUTS(HTAssoc_name(pres)); /* Only output the value if not empty string */ if (*value) { PUTS("="); PUTS(value); } } PUTBLOCK(crlf, 2); } } if (gen_mask & HT_G_DATE) { time_t local = HTRequest_date(request); sprintf(linebuf, "Date: %s%c%c", HTDateTimeStr(&local, NO), CR,LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } if (gen_mask & HT_G_FORWARDED) { /* @@@@@@ */ } if (gen_mask & HT_G_PRAGMA_NO_CACHE) { sprintf(linebuf, "Pragma: %s%c%c", "no-cache", CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } if (gen_mask & HT_G_MESSAGE_ID) { const char *msgid = HTMessageIdStr(HTRequest_userProfile(request)); if (msgid) { sprintf(linebuf, "Message-ID: %s%c%c", msgid, CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } } if (gen_mask & HT_G_MIME) { sprintf(linebuf, "MIME-Version: %s%c%c", MIME_VERSION, CR, LF); PUTBLOCK(linebuf, (int) strlen(linebuf)); } /* Put out any extra association values as headers (if any) */ if (gen_mask & HT_G_EXTRA_HEADERS) { HTAssocList * cur = HTRequest_extraHeader(request); if (cur) { HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { char * name = HTAssoc_name(pres); char * value = HTAssoc_value(pres); if (name && *name) { char * ptr = name; while (*ptr) { if (isspace(*ptr)) *ptr='_'; ptr++; } PUTS(name); PUTS(": "); if (value) { ptr = value; while (*ptr) { if (isspace(*ptr)) *ptr=' '; ptr++; } PUTS(value); } PUTBLOCK(crlf, 2); } } } } /* Put out extra information based on streams (if any) */ { HTList * list; BOOL override; if ((list = HTRequest_generator(request, &override))) { HTList *local = list; HTPostCallback *pres; HTTRACE(STREAM_TRACE, "HTTPGen..... Extra local\n"); while ((pres = (HTPostCallback *) HTList_nextObject(local))) (*pres)(request, me->target); } else if (!override && (list = HTHeader_generator())) { HTList *global = list; HTPostCallback *pres; HTTRACE(STREAM_TRACE, "HTTPGen..... Extra global\n"); while ((pres = (HTPostCallback *) HTList_nextObject(global))) (*pres)(request, me->target); } } /* Check to see if we are done */ if (me->endHeader) { sprintf(linebuf, "%c%c", CR, LF); /* Blank line means "end" */ PUTBLOCK(linebuf, (int) strlen(linebuf)); } HTTRACE(PROT_TRACE, "HTTP........ Generating General Headers\n"); return HT_OK; } PRIVATE int HTTPGen_put_block (HTStream * me, const char * b, int l) { if (me->transparent) return b ? PUTBLOCK(b, l) : HT_OK; else { HTTPGenMake(me, me->request); me->transparent = YES; return b ? PUTBLOCK(b, l) : HT_OK; } } PRIVATE int HTTPGen_put_character (HTStream * me, char c) { return HTTPGen_put_block(me, &c, 1); } PRIVATE int HTTPGen_put_string (HTStream * me, const char * s) { return HTTPGen_put_block(me, s, strlen(s)); } /* ** Flushes header but doesn't free stream object */ PRIVATE int HTTPGen_flush (HTStream * me) { int status = HTTPGen_put_block(me, NULL, 0); return status==HT_OK ? (*me->target->isa->flush)(me->target) : status; } /* ** Flushes data and frees stream object */ PRIVATE int HTTPGen_free (HTStream * me) { int status = HTTPGen_flush(me); if (status != HT_WOULD_BLOCK) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; HT_FREE(me); } return status; } PRIVATE int HTTPGen_abort (HTStream * me, HTList * e) { HTTRACE(PROT_TRACE, "HTTPGen..... ABORTING...\n"); if (me) { if (me->target) (*me->target->isa->abort)(me->target, e); HT_FREE(me); } return HT_ERROR; } /* HTTPGen Stream ** ----------------- */ PRIVATE const HTStreamClass HTTPGenClass = { "HTTPGen", HTTPGen_flush, HTTPGen_free, HTTPGen_abort, HTTPGen_put_character, HTTPGen_put_string, HTTPGen_put_block }; PUBLIC HTStream * HTTPGen_new (HTRequest * request, HTStream * target, BOOL endHeader, int version) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTTPGen_new"); me->isa = &HTTPGenClass; me->target = target; me->request = request; me->endHeader = endHeader; me->transparent = NO; /* ** For backwards compatibility with HTTP applications that understand ** Connection: Keep-Alive, we send it along. However, we do NOT send ** it to a proxy as it may confuse HTTP/1.0 proxies. Also we do not ** send it if the app has set Connection: close */ me->version = version; if (me->version == HTTP_10 && HTRequest_proxy(request) == NULL) { HTAssocList * alist = HTRequest_connection(request); if (!(alist && HTAssocList_findObject(alist, "close"))) HTRequest_addConnection(request, "Keep-Alive", ""); } /* ** Check for any TE headers that are also hop-by-hop */ if (HTFormat_transferCoding() != NULL || HTRequest_transfer(request) != NULL) HTRequest_addConnection(request, "TE", ""); return me; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPGen.html���������������������������������������������������������������������0100644�0000764�0000144�00000002323�06526451276�016060� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> <TITLE>W3C Sample Code Library libwww HTTP General Header Stream</TITLE> </HEAD> <BODY> <H1> HTTP General Header Stream </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The HTTP General Header stream generates the general headers of a HTTP request or response and writes it to the target which is normally either a HTTP response stream or a HTTP request stream. <P> This module is implemented by <A HREF="HTTPGen.c">HTTPGen.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTTPGEN_H #define HTTPGEN_H #include "HTStream.h" #include "HTReq.h" </PRE> <H3> Streams Definition </H3> <P> This stream makes a general HTTP header before it goes into transparent mode. If <CODE>endHeader</CODE> is YES then we send an empty <CODE>CRLF</CODE> in order to end the header. <PRE> extern HTStream * HTTPGen_new (HTRequest * request, HTStream * target, BOOL endHeader, int version); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTTPGen.html,v 2.7 2025/05/14 02:11:10 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPReq.c������������������������������������������������������������������������0100644�0000764�0000144�00000042443�07343441157�015356� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTPReq.c ** HTTP REQUEST GENERATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTPReq.c,v 2.62 2025/08/30 13:41:03 kahan Exp $ ** ** This module implements the output stream for HTTP used for sending ** requests with or without a entity body. ** ** History: ** Jan 95 HFN Written from scratch */ /* Library Includes */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTTPGen.h" #include "HTTPUtil.h" #include "HTTPReq.h" /* Implements */ #define PUTC(c) (*me->target->isa->put_character)(me->target, c) #define PUTS(s) (*me->target->isa->put_string)(me->target, s) #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) struct _HTStream { const HTStreamClass * isa; HTStream * target; HTRequest * request; SOCKET sockfd; int version; int state; char * url; BOOL transparent; }; /* ------------------------------------------------------------------------- */ /* HTTP Output Request Stream */ /* ------------------------------------------------------------------------- */ /* HTTP09Request ** ------------- ** Makes a HTTP/0.9 request */ PRIVATE int HTTP09Request (HTStream * me, HTRequest * request) { HTParentAnchor * anchor = HTRequest_anchor(request); char * addr = HTAnchor_physical(anchor); if (!me->url) me->url = HTParse(addr, "", PARSE_PATH|PARSE_PUNCTUATION); if (me->state == 0) { int status = PUTS("GET "); if (status != HT_OK) return status; me->state++; } if (me->state == 1) { int status = PUTS(me->url); if (status != HT_OK) return status; me->state++; } PUTC(CR); PUTC(LF); HTTRACE(PROT_TRACE, "HTTP........ Generating HTTP/0.9 Request\n"); return HT_OK; } /* HTTPMakeRequest ** --------------- ** Makes a HTTP/1.0-1.1 request header. */ PRIVATE int HTTPMakeRequest (HTStream * me, HTRequest * request) { HTMethod method = HTRequest_method(request); HTRqHd request_mask = HTRequest_rqHd(request); HTParentAnchor * anchor = HTRequest_anchor(request); char * etag = HTAnchor_etag(anchor); char crlf[3]; char qstr[10]; *crlf = CR; *(crlf+1) = LF; *(crlf+2) = '\0'; /* Generate the HTTP/1.x RequestLine */ if (me->state == 0) { if (method != METHOD_INVALID) { PUTS(HTMethod_name(method)); PUTC(' '); } else PUTS("GET "); me->state++; } /* ** Generate the Request URI. If we are using full request URI then it's ** easy. Otherwise we must filter out the path part of the URI. ** In case it's a OPTIONS request then if there is no pathinfo then use ** a * instead. If we use a method different from GET or HEAD then use ** the content-location if available. */ if (me->state == 1) { char * abs_location = NULL; char * addr = HTAnchor_physical(anchor); char * location; /* JK: If the application specified a content-location (which is stored in the request in default put-name!), we use it instead of the URL that's being saved to. This is like having a user defined Content-Location */ location = HTRequest_defaultPutName (request); if (location) { if (HTURL_isAbsolute (location)) { char * relative; relative = HTRelative (location, location); abs_location = HTParse (relative + 2, addr, PARSE_ALL); HT_FREE (relative); } else abs_location = HTParse (location, addr, PARSE_ALL); addr = abs_location; } #if 0 /* ** We don't use the content-location any more as it is superseeded ** by etags and the combination of the two might do more harm than ** good (The etag is not guaranteed to be unique over multiple URIs) */ /* ** If we are using a method different from HEAD and GET then use ** the Content-Location if available, else the Request-URI. */ if (!HTMethod_isSafe(method)) { char * location = HTAnchor_location(anchor); if (location) { if (HTURL_isAbsolute(location)) addr = location; else { /* ** We have a content-location but it is relative and ** must expand it either to the content-base or to ** the Request-URI itself. */ char * base = HTAnchor_base(anchor); abs_location = HTParse(location, base, PARSE_ALL); addr = abs_location; } } } #endif /* ** If we are using a proxy or newer versions of HTTP then we can ** send the full URL. Otherwise we only send the path. */ if (HTRequest_fullURI(request)) StrAllocCopy(me->url, addr); else { me->url = HTParse(addr, "", PARSE_PATH | PARSE_PUNCTUATION); if (method == METHOD_OPTIONS) { /* ** We don't preserve the final slash or lack of same through ** out the code. This is mainly for optimization reasons ** but it gives a problem OPTIONS. We can either send a "*" ** or a "/" but not both. For now we send a "*". */ if (!strcmp(me->url, "/")) *me->url = '*'; } } HT_FREE(abs_location); me->state++; } /* ** Now send the URL that we have put together */ if (me->state == 2) { int status = HT_OK; if ((status = PUTS(me->url)) != HT_OK) return status; me->state++; #if 0 fprintf(stderr, "Requesting '%s'\n", me->url); #endif } PUTC(' '); /* ** Send out the version number. If we know it is a HTTP/1.0 server we ** are talking to then use HTTP/1.0, else use HTTP/1.1 as default version ** number */ if (me->version == HTTP_10) PUTS(HTTP_VERSION_10); else PUTS(HTTP_VERSION); PUTBLOCK(crlf, 2); /* Request Headers */ if (request_mask & HT_C_ACCEPT_TYPE) { HTFormat format = HTRequest_outputFormat(request); /* ** If caller has specified a specific output format then use this. ** Otherwise use all the registered converters to generate the ** accept header */ if (format == WWW_PRESENT) { int list; HTList *cur; BOOL first=YES; for (list=0; list<2; list++) { if ((!list && ((cur = HTFormat_conversion()) != NULL)) || (list && ((cur = HTRequest_conversion(request))!=NULL))) { HTPresentation * pres; while ((pres=(HTPresentation *) HTList_nextObject(cur))) { if (pres->rep_out==WWW_PRESENT && pres->quality<=1.0) { if (first) { PUTS("Accept: "); first=NO; } else PUTC(','); PUTS(HTAtom_name(pres->rep)); if (pres->quality < 1.0 && pres->quality >= 0.0) { sprintf(qstr, ";q=%1.1f", pres->quality); PUTS(qstr); } } } } } if (!first) PUTBLOCK(crlf, 2); } else { /* ** If we have an explicit output format then only send ** this one if not this is an internal libwww format ** of type www/<star> */ if (!HTMIMEMatch(WWW_INTERNAL, format)) { PUTS("Accept: "); PUTS(HTAtom_name(format)); PUTBLOCK(crlf, 2); } } } if (request_mask & HT_C_ACCEPT_CHAR) { int list; HTList *cur; BOOL first=YES; for (list=0; list<2; list++) { if ((!list && ((cur = HTFormat_charset()) != NULL)) || (list && ((cur = HTRequest_charset(request)) != NULL))) { HTAcceptNode *pres; while ((pres = (HTAcceptNode *) HTList_nextObject(cur))) { if (first) { PUTS("Accept-Charset: "); first=NO; } else PUTC(','); PUTS(HTAtom_name(pres->atom)); if (pres->quality < 1.0 && pres->quality >= 0.0) { sprintf(qstr, ";q=%1.1f", pres->quality); PUTS(qstr); } } } } if (!first) PUTBLOCK(crlf, 2); } if (request_mask & HT_C_ACCEPT_ENC) { int list; HTList *cur; BOOL first=YES; for (list=0; list<2; list++) { if ((!list && ((cur = HTFormat_contentCoding()) != NULL)) || (list && ((cur = HTRequest_encoding(request)) != NULL))) { HTCoding * pres; while ((pres = (HTCoding *) HTList_nextObject(cur))) { double quality = HTCoding_quality(pres); if (first) { PUTS("Accept-Encoding: "); first = NO; } else PUTC(','); PUTS(HTCoding_name(pres)); if (quality < 1.0 && quality >= 0.0) { sprintf(qstr, ";q=%1.1f", quality); PUTS(qstr); } } } } if (!first) PUTBLOCK(crlf, 2); } if (request_mask & HT_C_ACCEPT_TE) { int list; HTList *cur; BOOL first=YES; for (list=0; list<2; list++) { if ((!list && ((cur = HTFormat_transferCoding()) != NULL)) || (list && ((cur = HTRequest_transfer(request)) != NULL))) { HTCoding * pres; while ((pres = (HTCoding *) HTList_nextObject(cur))) { double quality = HTCoding_quality(pres); const char * coding = HTCoding_name(pres); if (first) { PUTS("TE: "); first = NO; } else PUTC(','); /* Special check for "chunked" which is translated to "trailers" */ if (!strcasecomp(coding, "chunked")) PUTS("trailers"); else PUTS(coding); if (quality < 1.0 && quality >= 0.0) { sprintf(qstr, ";q=%1.1f", quality); PUTS(qstr); } } } } if (!first) PUTBLOCK(crlf, 2); } if (request_mask & HT_C_ACCEPT_LAN) { int list; HTList *cur; BOOL first=YES; for (list=0; list<2; list++) { if ((!list && ((cur = HTFormat_language()) != NULL)) || (list && ((cur = HTRequest_language(request)) != NULL))) { HTAcceptNode *pres; while ((pres = (HTAcceptNode *) HTList_nextObject(cur))) { if (first) { PUTS("Accept-Language: "); first=NO; } else PUTC(','); PUTS(HTAtom_name(pres->atom)); if (pres->quality < 1.0 && pres->quality >= 0.0) { sprintf(qstr, ";q=%1.1f", pres->quality); PUTS(qstr); } } } } if (!first) PUTBLOCK(crlf, 2); } if (request_mask & HT_C_AUTH) { HTAssocList * cur = HTRequest_credentials(request); if (cur) { /* Access authentication */ HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { PUTS(HTAssoc_name(pres)); PUTS(": "); PUTS(HTAssoc_value(pres)); PUTBLOCK(crlf, 2); } } } if (request_mask & HT_C_EXPECT) { HTAssocList * cur = HTRequest_expect(request); if (cur) { BOOL first=YES; HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { char * value = HTAssoc_value(pres); if (first) { PUTS("Expect: "); first = NO; } else PUTC(','); /* Output the name */ PUTS(HTAssoc_name(pres)); /* Only output the value if not empty string */ if (*value) { PUTS("="); PUTS(value); } } PUTBLOCK(crlf, 2); } } if (request_mask & HT_C_FROM) { HTUserProfile * up = HTRequest_userProfile(request); const char * mailaddress = HTUserProfile_email(up); if (mailaddress) { PUTS("From: "); PUTS(mailaddress); PUTBLOCK(crlf, 2); } } if (request_mask & HT_C_HOST) { char *orig = HTAnchor_address((HTAnchor *) anchor); char *host = HTParse(orig, "", PARSE_HOST); #if 0 /* Keep the port number for HTTP/1.1 compliance */ char *ptr = strchr(host, ':'); /* Chop off port number */ if (ptr) *ptr = '\0'; #endif PUTS("Host: "); PUTS(host); PUTBLOCK(crlf, 2); HT_FREE(orig); HT_FREE(host); } /* ** In the "If-*" series of headers, the ones related to etags have higher ** priority than the date relates ones. That is, if we have a etag then ** use that, otherwise use the date. First we check for range, match, and ** unmodified-since. */ if (request_mask & HT_C_IF_RANGE && etag) { PUTS("If-Range: \""); PUTS(etag); PUTC('"'); PUTBLOCK(crlf, 2); HTTRACE(PROT_TRACE, "HTTP........ If-Range using etag `%s\'\n" _ etag); } else if (request_mask & HT_C_IF_MATCH_ANY) { PUTS("If-Match: *"); PUTBLOCK(crlf, 2); HTTRACE(PROT_TRACE, "HTTP........ If-Match using `*\'\n"); } else if (request_mask & HT_C_IF_MATCH && etag) { PUTS("If-Match: \""); PUTS(etag); PUTC('"'); PUTBLOCK(crlf, 2); HTTRACE(PROT_TRACE, "HTTP........ If-Match using etag `%s\'\n" _ etag); } else if (request_mask & HT_C_IF_UNMOD_SINCE) { time_t lm = HTAnchor_lastModified(anchor); if (lm > 0) { PUTS("If-Unmodified-Since: "); PUTS(HTDateTimeStr(&lm, NO)); PUTBLOCK(crlf, 2); HTTRACE(PROT_TRACE, "HTTP........ If-Unmodified-Since `%s\'\n" _ HTDateTimeStr(&lm, NO)); } } /* ** If-None-Match and If-Modified-Since are equivalent except that the ** first uses etags and the second uses dates. Etags have precedence over ** dates. */ if (request_mask & HT_C_IF_NONE_MATCH_ANY) { PUTS("If-None-Match: *"); PUTBLOCK(crlf, 2); HTTRACE(PROT_TRACE, "HTTP........ If-None-Match using `*\'\n"); } else if (request_mask & HT_C_IF_NONE_MATCH && etag) { PUTS("If-None-Match: \""); PUTS(etag); PUTC('"'); PUTBLOCK(crlf, 2); HTTRACE(PROT_TRACE, "HTTP........ If-None-Match `%s\'\n" _ etag); } if (request_mask & HT_C_IMS) { time_t lm = HTAnchor_lastModified(anchor); if (lm > 0) { PUTS("If-Modified-Since: "); PUTS(HTDateTimeStr(&lm, NO)); PUTBLOCK(crlf, 2); HTTRACE(PROT_TRACE, "HTTP........ If-Modified-Since `%s\'\n" _ HTDateTimeStr(&lm, NO)); } } /* ** Max forwards is mainly for TRACE where we want to be able to stop the ** TRACE at a specific location un the message path. */ if (request_mask & HT_C_MAX_FORWARDS) { int hops = HTRequest_maxForwards(request); if (hops >= 0) { sprintf(qstr, "%d", hops); PUTS("Max-Forwards: "); PUTS(qstr); PUTBLOCK(crlf, 2); } } /* ** Range requests. For now, we only take the first entry registered for ** this request. This means that you can only send a single "unit" and ** then a set of range within this unit. This is in accordance with ** HTTP/1.1. Multiple units will go on multiple lines. */ if (request_mask & HT_C_RANGE) { HTAssocList * cur = HTRequest_range(request); if (cur) { /* Range requests */ HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { PUTS("Range: "); PUTS(HTAssoc_name(pres)); /* Unit */ PUTS("="); PUTS(HTAssoc_value(pres)); /* Ranges within this unit */ PUTBLOCK(crlf, 2); } } } if (request_mask & HT_C_REFERER) { HTParentAnchor * parent_anchor = HTRequest_parent(request); if (parent_anchor) { char * act = HTAnchor_address((HTAnchor *) anchor); char * parent = HTAnchor_address((HTAnchor *) parent_anchor); #if 1 char * relative = HTRelative(parent, act); #else char * relative = HTParse(parent, act, PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION); #endif if (relative && *relative) { PUTS("Referer: "); PUTS(relative); PUTBLOCK(crlf, 2); } HT_FREE(act); HT_FREE(parent); HT_FREE(relative); } } if (request_mask & HT_C_USER_AGENT) { PUTS("User-Agent: "); PUTS(HTLib_appName()); PUTC('/'); PUTS(HTLib_appVersion()); PUTC(' '); PUTS(HTLib_name()); PUTC('/'); PUTS(HTLib_version()); PUTBLOCK(crlf, 2); } HTTRACE(PROT_TRACE, "HTTP........ Generating HTTP/1.x Request Headers\n"); return HT_OK; } PRIVATE int HTTPRequest_put_block (HTStream * me, const char * b, int l) { if (!me->target) { return HT_WOULD_BLOCK; } else if (me->transparent) return b ? PUTBLOCK(b, l) : HT_OK; else { int status = HT_OK; if (me->version == HTTP_09) { status = HTTP09Request(me, me->request); if (status != HT_OK) return status; } else { status = HTTPMakeRequest(me, me->request); if (status != HT_OK) return status; me->transparent = YES; return b ? PUTBLOCK(b, l) : HT_OK; } return status; } } PRIVATE int HTTPRequest_put_character (HTStream * me, char c) { return HTTPRequest_put_block(me, &c, 1); } PRIVATE int HTTPRequest_put_string (HTStream * me, const char * s) { return HTTPRequest_put_block(me, s, strlen(s)); } /* ** Flushes data but doesn't free stream object */ PRIVATE int HTTPRequest_flush (HTStream * me) { int status = HTTPRequest_put_block(me, NULL, 0); return status==HT_OK ? (*me->target->isa->flush)(me->target) : status; } /* ** Flushes data and frees stream object */ PRIVATE int HTTPRequest_free (HTStream * me) { int status = HTTPRequest_flush(me); if (status != HT_WOULD_BLOCK) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; HT_FREE(me->url); HT_FREE(me); } return status; } PRIVATE int HTTPRequest_abort (HTStream * me, HTList * e) { HTTRACE(PROT_TRACE, "HTTPRequest. ABORTING...\n"); /* JK: Added protection against NULL pointers */ if (me) { if (me->target && me->target->isa) (*me->target->isa->abort)(me->target, e); if (me->url) HT_FREE(me->url); HT_FREE(me); } return HT_ERROR; } /* HTTPRequest Stream ** ----------------- */ PRIVATE const HTStreamClass HTTPRequestClass = { "HTTPRequest", HTTPRequest_flush, HTTPRequest_free, HTTPRequest_abort, HTTPRequest_put_character, HTTPRequest_put_string, HTTPRequest_put_block }; PUBLIC HTStream * HTTPRequest_new (HTRequest * request, HTStream * target, BOOL endHeader, int version) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTTPRequest_new"); me->isa = &HTTPRequestClass; me->target = target; me->request = request; me->version = version; me->transparent = NO; /* ** If sending a body in the request then we want a 100 code! */ if (HTMethod_hasEntity(HTRequest_method(request))) HTRequest_addExpect(request, "100-continue", ""); /* Return general HTTP header stream */ return HTTPGen_new(request, me, endHeader, version); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPReq.html���������������������������������������������������������������������0100644�0000764�0000144�00000002162�06526451277�016100� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTTP REQUEST STREAM</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>HTTP Request Stream</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> The HTTP Request stream generates a HTTP request header and writes it to the target which is normally a HTWriter stream.<P> This module is implemented by <A HREF="HTTPReq.c">HTTPReq.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTTPREQ_H #define HTTPREQ_H #include "HTStream.h" #include "HTReq.h" </PRE> <H3>Streams Definition</H3> This stream makes a HTTP request header before it goes into transparent mode. If <CODE>endHeader</CODE> is YES then we send an empty <CODE>CRLF</CODE> in order to end the header. <PRE> extern HTStream * HTTPRequest_new (HTRequest * request, HTStream * target, BOOL endHeader, int version); </PRE> <PRE> #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTTPReq.html,v 2.13 2025/05/14 02:11:11 frystyk Exp $ </ADDRESS> </BODY> </HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPRes.c������������������������������������������������������������������������0100644�0000764�0000144�00000010156�06664352704�015360� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTPRes.c ** HTTP RESPONSE GENERATION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTPRes.c,v 2.14 2025/02/22 22:10:12 frystyk Exp $ ** ** This module implements the output stream for HTTP used for sending ** responces with or without a entity body. It is the server equivalent ** to the HTTPReq module ** ** History: ** Dec 95 HFN Written from scratch */ /* Library Includes */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTNetMan.h" #include "HTTPGen.h" #include "HTTPUtil.h" #include "HTTPRes.h" /* Implements */ #define PUTC(c) (*me->target->isa->put_character)(me->target, c) #define PUTS(s) (*me->target->isa->put_string)(me->target, s) #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) struct _HTStream { const HTStreamClass * isa; HTStream * target; HTRequest * request; BOOL transparent; }; /* ------------------------------------------------------------------------- */ /* HTTP Output Request Stream */ /* ------------------------------------------------------------------------- */ /* HTTPMakeResponse ** ---------------- ** Makes a HTTP/1.0-1.1 response header. */ PRIVATE int HTTPMakeResponse (HTStream * me, HTRequest * request) { char crlf[3]; HTRsHd response_mask = HTRequest_rsHd(request); *crlf = CR; *(crlf+1) = LF; *(crlf+2) = '\0'; if (response_mask & HT_S_LOCATION) { /* @@@ */ } if (response_mask & HT_S_PROXY_AUTH) { /* @@@ */ } if (response_mask & HT_S_PUBLIC) { /* @@@ */ } if (response_mask & HT_S_RETRY_AFTER) { /* @@@ */ } if (response_mask & HT_S_SERVER) { PUTS("Server: "); PUTS(HTLib_appName()); PUTC('/'); PUTS(HTLib_appVersion()); PUTC(' '); PUTS(HTLib_name()); PUTC('/'); PUTS(HTLib_version()); PUTBLOCK(crlf, 2); } if (response_mask & HT_S_WWW_AUTH) { /* @@@ */ } HTTRACE(PROT_TRACE, "HTTP........ Generating Response Headers\n"); return HT_OK; } PRIVATE int HTTPResponse_put_block (HTStream * me, const char * b, int l) { if (me->target) { if (me->transparent) return PUTBLOCK(b, l); else { HTTPMakeResponse(me, me->request); /* Generate header */ me->transparent = YES; return b ? PUTBLOCK(b, l) : HT_OK; } } return HT_WOULD_BLOCK; } PRIVATE int HTTPResponse_put_character (HTStream * me, char c) { return HTTPResponse_put_block(me, &c, 1); } PRIVATE int HTTPResponse_put_string (HTStream * me, const char * s) { return HTTPResponse_put_block(me, s, strlen(s)); } /* ** Flushes data but doesn't free stream object */ PRIVATE int HTTPResponse_flush (HTStream * me) { if (!me->transparent) { int status = HTTPMakeResponse(me, me->request); if (status != HT_OK) return status; } return (*me->target->isa->flush)(me->target); } /* ** Flushes data and frees stream object */ PRIVATE int HTTPResponse_free (HTStream * me) { if (me->target) { int status; if (!me->transparent) if ((status = HTTPMakeResponse(me, me->request)) != HT_OK) return status; if ((status = (*me->target->isa->_free)(me->target)) != HT_OK) return status; } return HT_OK; } PRIVATE int HTTPResponse_abort (HTStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target, e); HTTRACE(PROT_TRACE, "HTTPResponse ABORTING...\n"); return HT_ERROR; } /* HTTPResponse Stream ** ----------------- */ PRIVATE const HTStreamClass HTTPResponseClass = { "HTTPResponse", HTTPResponse_flush, HTTPResponse_free, HTTPResponse_abort, HTTPResponse_put_character, HTTPResponse_put_string, HTTPResponse_put_block }; /* ** This stream generates server specific headers */ PUBLIC HTStream * HTTPResponse_new (HTRequest * request, HTStream * target, BOOL endHeader, int version) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTTPResponse_new"); me->isa = &HTTPResponseClass; me->target = target; me->request = request; me->transparent = NO; return HTTPGen_new(request, me, endHeader, version); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPRes.html���������������������������������������������������������������������0100644�0000764�0000144�00000002177�06526451300�016073� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTTP RESPONSE STREAM</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>HTTP Response Stream</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> The HTTP response stream generates a HTTP response header and writes it to the target which is normally a HTWriter stream.<P> This module is implemented by <A HREF="HTTPRes.c">HTTPRes.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTTPRES_H #define HTTPRES_H #include "HTStream.h" #include "HTReq.h" </PRE> <H3>Streams Definition</H3> This stream makes a server specific HTTP header before it goes into transparent mode. If <CODE>endHeader</CODE> is YES then we send an empty <CODE>CRLF</CODE> in order to end the header. <PRE> extern HTStream * HTTPResponse_new (HTRequest * request, HTStream * target, BOOL endHeader, int version); </PRE> <PRE> #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTTPRes.html,v 2.8 2025/05/14 02:11:12 frystyk Exp $ </ADDRESS> </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPServ.c�����������������������������������������������������������������������0100644�0000764�0000144�00000032541�06664352704�015550� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTPServ.c ** HTTP SERVER MODULE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTPServ.c,v 2.26 2025/02/22 22:10:12 frystyk Exp $ ** ** This module implments the HTTP protocol as a state machine ** ** History: ** Dec 95 HFN Written with Christmas in my eyes ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTHeader.h" #include "HTMIMERq.h" #include "HTNetMan.h" #include "HTTPUtil.h" #include "HTTPRes.h" #include "HTTPServ.h" /* Implements */ /* Macros and other defines */ #define PUTC(c) (*me->target->isa->put_character)(me->target, c) #define PUTS(s) (*me->target->isa->put_string)(me->target, s) #define PUTBLOCK(b, l) (*me->target->isa->put_block)(me->target, b, l) /* Final states have negative value */ typedef enum _HTTPState { HTTPS_ERROR = -2, HTTPS_OK = -1, HTTPS_BEGIN = 0, HTTPS_NEED_REQUEST, HTTPS_LOAD_CLIENT } HTTPState; /* This is the context object for the this module */ typedef struct _https_info { HTRequest * server; /* The server request */ HTList * clients; /* List of client requests */ HTTPState state; /* Current State of the connection */ HTNet * net; } https_info; /* The HTTP Receive Stream */ struct _HTStream { const HTStreamClass * isa; HTStream * target; HTRequest * request; https_info * http; HTEOLState state; HTChunk * buffer; BOOL transparent; }; struct _HTInputStream { const HTInputStreamClass * isa; }; /* ------------------------------------------------------------------------- */ /* ServerCleanup ** ------------- ** This function cleans up after the request ** Returns YES on OK, else NO */ PRIVATE int ServerCleanup (HTRequest * req, HTNet * net, int status) { https_info * http = (https_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(req); HTChannel * channel = HTNet_channel(net); /* Free stream with data TO network */ if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); HTRequest_setInputStream(req, NULL); } /* Kill all remaining requests */ if (http->clients) { HTList * cur = http->clients; HTRequest * pres; while ((pres = HTList_nextObject(cur)) != NULL) HTRequest_kill(pres); HTList_delete(http->clients); } /* ** Remove the net object and our own context structure for http. ** Also unregister all pending requests and close the connection */ HTChannel_setSemaphore(channel, 0); HTNet_delete(net, HT_IGNORE); HT_FREE(http); return YES; } /* ------------------------------------------------------------------------- */ /* REPLY STREAM */ /* ------------------------------------------------------------------------- */ /* ** This is our handle to the server reply stream when data is coming ** back from our "client" request. It is responsible for setting up the ** remaining streams in order to produce a complete HTTP output. ** If we have a HTTP 1.x response then forward untouched. */ PRIVATE int MakeReplyPipe (HTStream * me, HTRequest * client) { char * response_line = NULL; /* Generate the Response line */ { HTAlertCallback *cbf = HTAlert_find(HT_A_MESSAGE); if (cbf) { HTAlertPar * reply = HTAlert_newReply(); if ((*cbf)(client, HT_A_MESSAGE, HT_MSG_NULL, NULL, HTRequest_error(client), reply)) response_line = HTAlert_replyMessage(reply); HTAlert_deleteReply(reply); } if (response_line) { PUTS(response_line); HT_FREE(response_line); } else { PUTS(HTTP_VERSION); PUTS(" 500 Internal"); PUTC(CR); PUTC(LF); } } /* ** We now have to create the rest of the response stream. We see whether ** there is a data object or not by looking at the Content Type of the ** client anchor. */ { HTParentAnchor * anchor = HTRequest_anchor(client); HTFormat format = HTAnchor_format(anchor); me->target = (format == WWW_UNKNOWN) ? HTTPResponse_new(client, me->target, YES, HTTP_11) : HTMIMERequest_new(client, HTTPResponse_new(client,me->target, NO, HTTP_11), YES); } return HT_OK; } PRIVATE int HTTPReply_put_block (HTStream * me, const char * b, int l) { if (me->transparent) return b ? PUTBLOCK(b, l) : HT_OK; else { MakeReplyPipe(me, me->request); me->transparent = YES; return b ? PUTBLOCK(b, l) : HT_OK; } } PRIVATE int HTTPReply_put_string (HTStream * me, const char * s) { return HTTPReply_put_block(me, s, strlen(s)); } PRIVATE int HTTPReply_put_character (HTStream * me, char c) { return HTTPReply_put_block(me, &c, 1); } PRIVATE int HTTPReply_flush (HTStream * me) { int status = HTTPReply_put_block(me, NULL, 0); return status==HT_OK ? (*me->target->isa->flush)(me->target) : status; } PRIVATE int HTTPReply_free (HTStream * me) { int status = HTTPReply_put_block(me, NULL, 0); HTTRACE(STREAM_TRACE, "HTTPReply... Freeing server stream\n"); return status==HT_OK ? (*me->target->isa->_free)(me->target) : status; } PRIVATE int HTTPReply_abort (HTStream * me, HTList * e) { HTTRACE(STREAM_TRACE, "HTTPReply... ABORTING\n"); if (me->target) (*me->target->isa->abort)(me->target, e); HT_FREE(me); return HT_ERROR; } /* HTTPReply Stream ** ----------------- */ PRIVATE const HTStreamClass HTTPReplyClass = { "HTTPReply", HTTPReply_flush, HTTPReply_free, HTTPReply_abort, HTTPReply_put_character, HTTPReply_put_string, HTTPReply_put_block }; PRIVATE HTStream * HTTPReply_new (HTRequest * request, https_info * http, HTStream * target) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTTPReply_new"); me->isa = &HTTPReplyClass; me->request = request; me->http = http; me->target = target; HTTRACE(STREAM_TRACE, "HTTP Reply.. Stream %p created\n" _ me); return me; } /* ------------------------------------------------------------------------- */ /* RECEIVE STREAM */ /* ------------------------------------------------------------------------- */ /* ** Scan the request line for METHOD, URI and VERSION ** Returns: HT_OK if 1.x request and OK ** HT_LOADED if 0.9 request and OK ** HT_ERROR if invalid request line */ PRIVATE int ParseRequest (HTStream * me) { HTRequest * client = HTList_firstObject(me->http->clients); char * line = HTChunk_data(me->buffer); char * method_str = HTNextField(&line); char * request_uri = HTNextField(&line); char * version_str = HTNextField(&line); HTMethod method; /* Check if method is allowed */ if (!method_str || (method = HTMethod_enum(method_str))==METHOD_INVALID) { HTRequest_addError(client, ERR_FATAL, NO, HTERR_NOT_ALLOWED, NULL, 0, "ParseRequest"); return HT_ERROR; } HTRequest_setMethod(client, method); /* Find an anchor for the request URI */ if (request_uri) { char * uri = HTParse(request_uri, "file:", PARSE_ALL); HTRequest_setAnchor(client, HTAnchor_findAddress(uri)); HT_FREE(uri); } else { HTRequest_addError(client, ERR_FATAL, NO, HTERR_BAD_REQUEST, NULL, 0, "ParseRequest"); return HT_ERROR; } /* Get ready to get the rest of the request */ if (version_str) { me->target = HTStreamStack(WWW_MIME_HEAD, HTRequest_debugFormat(client), HTRequest_debugStream(client), client, NO); return HT_OK; } else { HTRequest_addError(client, ERR_FATAL, NO, HTERR_BAD_VERSION, NULL, 0, "ParseRequest"); return HT_ERROR; } } /* ** Searches for HTTP Request Line before going into transparent mode */ PRIVATE int HTTPReceive_put_block (HTStream * me, const char * b, int l) { if (!me->transparent) { const char *p=b; while (l>0 && *p!=CR && *p!=LF) l--, p++; HTChunk_putb(me->buffer, b, p-b); if (*p==CR || *p==LF) { int status = ParseRequest(me); HTChunk_clear(me->buffer); if (status != HT_OK) return status; me->transparent = YES; b=p; } } if (l > 0) { int status = PUTBLOCK(b, l); if (status == HT_LOADED) me->transparent = NO; return status; } return HT_OK; } PRIVATE int HTTPReceive_put_string (HTStream * me, const char * s) { return HTTPReceive_put_block(me, s, (int) strlen(s)); } PRIVATE int HTTPReceive_put_character (HTStream * me, char c) { return HTTPReceive_put_block(me, &c, 1); } PRIVATE int HTTPReceive_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int HTTPReceive_free (HTStream * me) { int status = HT_OK; if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTChunk_delete(me->buffer); HT_FREE(me); return status; } PRIVATE int HTTPReceive_abort (HTStream * me, HTList * e) { if (me->target) (*me->target->isa->abort)(me->target, e); HTChunk_delete(me->buffer); HT_FREE(me); HTTRACE(PROT_TRACE, "HTTPReceive. ABORTING...\n"); return HT_ERROR; } /* HTTPReceive Stream ** ----------------- */ PRIVATE const HTStreamClass HTTPReceiveClass = { "HTTPReceive", HTTPReceive_flush, HTTPReceive_free, HTTPReceive_abort, HTTPReceive_put_character, HTTPReceive_put_string, HTTPReceive_put_block }; PRIVATE HTStream * HTTPReceive_new (HTRequest * request, https_info * http) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTTPReceive_new"); me->isa = &HTTPReceiveClass; me->request = request; me->http = http; me->state = EOL_BEGIN; me->buffer = HTChunk_new(128); /* Sufficiant for most URLs */ HTTRACE(STREAM_TRACE, "HTTP Request Stream %p created\n" _ me); return me; } /* ------------------------------------------------------------------------- */ /* HTServHTTP ** ---------- ** Serv Document using HTTP. ** returns HT_ERROR or HT_OK */ PRIVATE int ServEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTServHTTP (SOCKET soc, HTRequest * request) { HTNet * net = HTRequest_net(request); https_info * http; /* Specific protocol information */ /* ** Initiate a new https object and bind to request object ** This is actually state HTTPS_BEGIN, but it can't be in the state ** machine as we need the object first (chicken and egg problem). */ HTTRACE(PROT_TRACE, "Serv HTTP... on socket %d\n" _ soc); if ((http = (https_info *) HT_CALLOC(1, sizeof(https_info))) == NULL) HT_OUTOFMEM("HTServHTTP"); http->server = request; http->state = HTTPS_BEGIN; http->clients = HTList_new(); HTNet_setContext(net, http); /* ** Create the stream pipe FROM the channel to the server request. */ net->readStream = HTTPReceive_new(request, http); HTRequest_setOutputConnected(request, YES); http->state = HTTPS_BEGIN; HTNet_setEventCallback(net, ServEvent); HTNet_setEventParam(net, http); /* callbacks get http* */ return ServEvent(soc, http, HTEvent_BEGIN); /* get it started - ops is ignored */ } PRIVATE int ServEvent (SOCKET soc, void * pVoid, HTEventType type) { https_info * http = (https_info *)pVoid; int status = HT_ERROR; HTNet * net = http->net; HTRequest * request = HTNet_request(net); if (!net || !request) { HTTRACE(PROT_TRACE, "Serv HTTP... Invalid argument\n"); return HT_ERROR; } if (type == HTEvent_CLOSE) { /* Interrupted */ ServerCleanup(request, net, HT_INTERRUPTED); return HT_OK; } else http = (https_info *) HTNet_context(net); /* Get existing copy */ /* Now jump into the machine. We know the state from the previous run */ while (1) { switch (http->state) { case HTTPS_BEGIN: { /* ** Create the request to handle the request and inherit the old ** context */ HTRequest * client = HTRequest_new(); void * context = HTRequest_context(request); if (context) HTRequest_setContext(client, context); HTRequest_setOutputConnected(client, NO); HTRequest_setGnHd(client, HTRequest_gnHd(request)); HTRequest_setRsHd(client, HTRequest_rsHd(request)); HTRequest_setEnHd(client, HTRequest_enHd(request)); HTList_addObject(http->clients, client); /* ** Create the HTTP output stream for generating the reply ** FROM the client request to the channel */ { HTOutputStream * output = HTNet_getOutput(net, NULL, 0); HTStream * app = HTTPReply_new(client, http,(HTStream*)output); HTRequest_setOutputStream(client, app); HTRequest_setOutputFormat(client, WWW_SOURCE); } http->state = HTTPS_NEED_REQUEST; } break; case HTTPS_NEED_REQUEST: if (type == HTEvent_READ || type == HTEvent_BEGIN) { status = HTHost_read(net->host, net); if (status == HT_WOULD_BLOCK) return HT_OK; else if (status == HT_CLOSED) http->state = HTTPS_OK; else if (status==HT_LOADED || status==HT_PAUSE) { http->state = HTTPS_LOAD_CLIENT; } else http->state = HTTPS_ERROR; } else http->state = HTTPS_ERROR; break; case HTTPS_LOAD_CLIENT: { HTRequest * client = HTList_removeFirstObject(http->clients); HTLoad(client, NO); http->state = HTTPS_BEGIN; break; } case HTTPS_OK: ServerCleanup(request, net, HT_IGNORE); return HT_OK; case HTTPS_ERROR: ServerCleanup(request, net, HT_ERROR); return HT_OK; } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPServ.html��������������������������������������������������������������������0100644�0000764�0000144�00000001423�06526451300�016252� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTTP SERVER</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>HTTP Server Module</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This is actually a very small definition file as almost everything is set up elsewhere. <P> This module is implemented by <A HREF="HTTPServ.c">HTTPServ.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <P> <PRE> #ifndef HTTPSERV_H #define HTTPSERV_H #include "HTProt.h" extern HTProtCallback HTServHTTP; #endif /* HTTPSERV_H */ </PRE> <HR> <ADDRESS> @(#) $Id: HTTPServ.html,v 2.7 2025/05/14 02:11:12 frystyk Exp $ </ADDRESS> </BODY> </HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPUtil.html��������������������������������������������������������������������0100644�0000764�0000144�00000001666�06301652473�016266� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 17-Apr-1996 --> <TITLE>W3C Sample Code Library libwww HTTP COMMON</TITLE> </HEAD> <BODY> <H1> HTTP Communalities between Server and Client Module </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The HTTP <A HREF="HTTP.html">client module</A> and the <A HREF="HTTPServ.html">server module</A> has a few things in common which we keep in this file. <PRE>#ifndef HTTPUTIL_H #define HTTPUTIL_H </PRE> <H3> HTTP Version Management </H3> <PRE> typedef enum _HTTPVersion { HTTP = 0, HTTP_09, HTTP_10, HTTP_11, HTTP_12 } HTTPVersion; </PRE> <H3> Versions supported by HTTP </H3> <PRE> #define HTTP_VERSION_10 "HTTP/1.0" #define HTTP_VERSION "HTTP/1.1" </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTTPUtil.html,v 2.7 2025/02/16 18:43:07 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������libwww/Library/src/HTTeXGen.c�����������������������������������������������������������������������0100644�0000764�0000144�00000041344�06701165774�015521� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTeXGen.c ** HTML -> LaTeX CONVERTER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTeXGen.c,v 2.28 2025/04/02 16:10:36 frystyk Exp $ ** ** This version of the HTML object sends LaTeX to the output stream. ** No attributes are considered in the translation! ** The module uses simple 1:1 table-conversions, but this COULD be ** expanded to a stack-machine. This would then be in start_element and ** end_element... ** Henrik 07/03-94 ** ** HISTORY: ** 8 Jul 94 FM Insulate free() from _free structure element. ** */ #define BUFFER_SIZE 80 /* Line buffer attempts to make neat breaks */ #define WORD_DELIMITERS ",;:[]()" /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTTeXGen.h" #include "HTMLPDTD.h" #include "HTStruct.h" #include "HTFormat.h" /* HTML Object ** ----------- */ struct _HTStream { const HTStreamClass * isa; HTStream * target; HTStreamClass targetClass; /* COPY for speed */ }; struct _HTStructured { const HTStructuredClass * isa; HTStream * target; HTStreamClass targetClass; /* COPY for speed */ const SGML_dtd * dtd; char buffer[2*BUFFER_SIZE]; /* See note */ char * write_pointer; char * line_break; BOOL sensitive; /* Can we put \n */ BOOL preformatted; /* Is it verbatim? */ BOOL markup; /* If doing LaTeX markup */ BOOL startup; /* To skip MIME header */ }; /* The buffer has to be bigger than 80 as latex markup might make the line longer before we get to flush it. */ PRIVATE char *TeX_names[HTML_ELEMENTS][2] = { { "", "" }, /* HTML_A */ { "", "" }, /* HTML_ABBR */ { "", "" }, /* HTML_ACRONYM */ { "{\\it ", "}" }, /* HTML_ADDRESS */ { "", "" }, /* HTML_APPLET */ { "", "" }, /* HTML_AREA */ { "{\\bf ", "}" }, /* HTML_B */ { "", "" }, /* HTML_BASE */ { "", "" }, /* HTML_BASEFONT */ { "", "" }, /* HTML_BDO */ { "", "" }, /* HTML_BIG */ { "{\\sf ", "}" }, /* HTML_BLOCKQUOTE */ { "", "" }, /* HTML_BODY */ { "", "" }, /* HTML_BR */ { "", "" }, /* HTML_BUTTON */ { "", "" }, /* HTML_CAPTION */ { "", "" }, /* HTML_CENTER */ { "\\cite{", "}" }, /* HTML_CITE */ { "{\\tt ", "}" }, /* HTML_CODE */ { "", "" }, /* HTML_COL */ { "", "" }, /* HTML_COLGROUP */ { "]", "" }, /* HTML_DD */ { "", "" }, /* HTML_DEL */ { "", "" }, /* HTML_DFN */ { "", "" }, /* HTML_DIR */ { "", "" }, /* HTML_DIV */ { "\n\\begin{description}","\n\\end{description}\n"}, /* HTML_DL */ { "\n\\item[", "" }, /* HTML_DT */ { "{\\em ", "}" }, /* HTML_EM */ { "", "" }, /* HTML_FIELDSET */ { "", "" }, /* HTML_FONT */ { "", "" }, /* HTML_FORM */ { "", "" }, /* HTML_FRAME */ { "", "" }, /* HTML_FRAMESET */ { "\n\\chapter{", "}\n" }, /* HTML_H1 */ { "\n\\section{", "}\n" }, /* HTML_H2 */ { "\n\\subsection{","}\n" }, /* HTML_H3 */ { "\n\\subsubsection{","}\n" }, /* HTML_H4 */ { "\n\\paragraph{", "}\n" }, /* HTML_H5 */ { "\n\\subparagraph{","}\n" }, /* HTML_H6 */ { "", "" }, /* HTML_HEAD */ { "", "" }, /* HTML_HR */ { "", "" }, /* HTML_HTML */ { "{\\it ", "}" }, /* HTML_I */ { "", "" }, /* HTML_IFRAME */ { "_FIGUR_", "" }, /* HTML_IMG */ { "", "" }, /* HTML_INPUT */ { "", "" }, /* HTML_INS */ { "", "" }, /* HTML_ISINDEX */ { "{\\tt ", "}" }, /* HTML_KBD */ { "", "" }, /* HTML_LABEL */ { "", "" }, /* HTML_LEGEND */ { "\n\\item ", "" }, /* HTML_LI */ { "", "" }, /* HTML_LINK */ { "", "" }, /* HTML_MAP */ { "", "" }, /* HTML_MENU */ { "", "" }, /* HTML_META */ { "", "" }, /* HTML_NEXTID */ { "", "" }, /* HTML_NOFRAME */ { "", "" }, /* HTML_NOSCRIPT */ { "", "" }, /* HTML_OBJECT */ { "\n\\begin{enumerate}\n","\n\\end{enumerate}\n"}, /* HTML_OL */ { "", "" }, /* HTML_OPTGROUP */ { "", "" }, /* HTML_OPTION */ { "\n\n", "" }, /* HTML_P */ { "", "" }, /* HTML_PARAM */ { "\n\\begin{verbatim}"," \\end{verbatim}\n"}, /* HTML_PRE */ { "", "" }, /* HTML_Q */ { "", "" }, /* HTML_S */ { "", "" }, /* HTML_SAMP */ { "", "" }, /* HTML_SCRIPT */ { "", "" }, /* HTML_SELECT */ { "", "" }, /* HTML_SMALL */ { "", "" }, /* HTML_SPAN */ { "", "" }, /* HTML_STRIKE */ { "{\\bf ", "}" }, /* HTML_STRONG */ { "", "" }, /* HTML_STYLE */ { "", "" }, /* HTML_SUB */ { "", "" }, /* HTML_SUP */ { "", "" }, /* HTML_TABLE */ { "", "" }, /* HTML_TBODY */ { "", "" }, /* HTML_TD */ { "", "" }, /* HTML_TEXTAREA */ { "", "" }, /* HTML_TFOOT */ { "", "" }, /* HTML_TH */ { "", "" }, /* HTML_THEAD */ { "\n\\title{", "}\n\\author{}\n\\maketitle\n"}, /* HTML_TITLE */ { "", "" }, /* HTML_TR */ { "", "" }, /* HTML_TT */ { "", "" }, /* HTML_U */ { "\n\\begin{itemize}","\n\\end{itemize}\n"}, /* HTML_UL */ { "", "" } /* HTML_VAR */ }; PRIVATE char *TeX_entities[HTML_ENTITIES] = { "\\AE ", /*"AElig", capital AE diphthong (ligature) */ "\\\'{A}", /*"Aacute", capital A, acute accent */ "\\^{A}", /*"Acirc", capital A, circumflex accent */ "\\`{A}", /*"Agrave", capital A, grave accent */ "\\AA", /*"Aring", capital A, ring */ "\\~{A}", /*"Atilde", capital A, tilde */ "\\\"{A}", /*"Auml", capital A, dieresis or umlaut mark */ "\\c{C}", /*"Ccedil", capital C, cedilla */ "\\OE ", /*"ETH", capital Eth, Icelandic */ "\\\'{E}", /*"Eacute", capital E, acute accent */ "\\^{E}", /*"Ecirc", capital E, circumflex accent */ "\\`{E}", /*"Egrave", capital E, grave accent */ "\\\"{E}", /*"Euml", capital E, dieresis or umlaut mark */ "\\\'{I}", /*"Iacute", capital I, acute accent */ "\\^{I}", /*"Icirc", capital I, circumflex accent */ "\\`{I}", /*"Igrave", capital I, grave accent */ "\\\"{I}", /*"Iuml", capital I, dieresis or umlaut mark */ "\\~{N}", /*"Ntilde", capital N, tilde */ "\\\'{O}", /*"Oacute", capital O, acute accent */ "\\^{O}", /*"Ocirc", capital O, circumflex accent */ "\\`{O}", /*"Ograve", capital O, grave accent */ "\\O ", /*"Oslash", capital O, slash */ "\\~{O}", /*"Otilde", capital O, tilde */ "\\\"{O}", /*"Ouml", capital O, dieresis or umlaut mark */ " ", /*"THORN", capital THORN, Icelandic */ "\\\'{U}", /*"Uacute", capital U, acute accent */ "\\^{U}", /*"Ucirc", capital U, circumflex accent */ "\\`{U}", /*"Ugrave", capital U, grave accent */ "\\\"{U}", /*"Uuml", capital U, dieresis or umlaut mark */ "\\\'{Y}", /*"Yacute", capital Y, acute accent */ "\\\'{a}", /*"aacute", small a, acute accent */ "\\^{a}", /*"acirc", small a, circumflex accent */ "\\ae ", /*"aelig", small ae diphthong (ligature) */ "\\`{a}", /*"agrave", small a, grave accent */ "&", /*"amp", ampersand */ "\\aa ", /*"aring", small a, ring */ "\\~{a}", /*"atilde", small a, tilde */ "\\\"{a}", /*"auml", small a, dieresis or umlaut mark */ "\\c{c}", /*"ccedil", small c, cedilla */ "\\\'{e}", /*"eacute", small e, acute accent */ "\\^{c}", /*"ecirc", small e, circumflex accent */ "\\`{c}", /*"egrave", small e, grave accent */ "\\oe ", /*"eth", small eth, Icelandic */ "\\\"{e}", /*"euml", small e, dieresis or umlaut mark */ ">", /*"gt", greater than */ "\\\'{\\i}", /*"iacute", small i, acute accent */ "\\^{\\i}", /*"icirc", small i, circumflex accent */ "\\`{\\i}", /*"igrave", small i, grave accent */ "\\\"{\\i}", /*"iuml", small i, dieresis or umlaut mark */ "<", /*"lt", less than */ "\\~{n}", /*"ntilde", small n, tilde */ "\\\'{o}", /*"oacute", small o, acute accent */ "\\~{o}", /*"ocirc", small o, circumflex accent */ "\\`{o}", /*"ograve", small o, grave accent */ "\\o ", /*"oslash", small o, slash */ "\\~{o}", /*"otilde", small o, tilde */ "\\\"{o}", /*"ouml", small o, dieresis or umlaut mark */ "\"", /*"quot", double quote sign - June 1994 */ "\\ss ", /*"szlig", small sharp s, German (sz ligature)*/ " ", /*"thorn", small thorn, Icelandic */ "\\\'{u}", /*"uacute", small u, acute accent */ "\\^{u}", /*"ucirc", small u, circumflex accent */ "\\`{u}", /*"ugrave", small u, grave accent */ "\\\"{u}", /*"uuml", small u, dieresis or umlaut mark */ "\\\'{y}", /*"yacute", small y, acute accent */ "\\\"{y}" /*"yuml", small y, dieresis or umlaut mark */ }; /* Flush Buffer ** ------------ */ PRIVATE int HTTeXGen_flush (HTStructured * me) { int status; if ((status = (*me->targetClass.put_block)(me->target, me->buffer, me->write_pointer-me->buffer)) != HT_OK) return status; me->write_pointer = me->buffer; me->line_break = me->buffer; return (*me->targetClass.flush)(me->target); } /* Character handling ** ------------------ ** */ PRIVATE int HTTeXGen_put_character (HTStructured * me, char c) { if (!me->startup) /* To skip MIME header */ return HT_OK; if (c=='\n') { if (me->markup || me->preformatted) { /* Put out as is and flush */ *me->write_pointer++ = c; HTTeXGen_flush(me); return HT_OK; } else if (me->sensitive || *(me->write_pointer-1)==' ') { return HT_OK; } else *me->write_pointer++ = ' '; /* Try to pretty print */ } else if (me->markup || me->preformatted) { *me->write_pointer++ = c; } else if (c==' ' || c=='\t') { /* Skip space and tabs */ if (*(me->write_pointer-1) != ' ') *me->write_pointer++ = ' '; else return HT_OK; } else { if (c=='$' || c=='&' || c=='%' || c=='#' || /* Special chars */ c=='{' || c=='}' || c=='_') { *me->write_pointer++ = '\\'; *me->write_pointer++ = c; } else if (c=='\\') { /* Special names */ char *temp = "$\\backslash$"; strcpy(me->write_pointer, temp); me->write_pointer += strlen(temp); } else if (c=='^') { char *temp = "$\\hat{ }$"; strcpy(me->write_pointer, temp); me->write_pointer += strlen(temp); } else if (c=='~') { char *temp = "$\\tilde{ }$"; strcpy(me->write_pointer, temp); me->write_pointer += strlen(temp); } else if (c=='|' || c=='<' || c=='>') { /* Math mode */ *me->write_pointer++ = '$'; *me->write_pointer++ = c; *me->write_pointer++ = '$'; } else *me->write_pointer++ = c; /* Char seems normal */ } if (c==' ') /* Find delimiter */ me->line_break = me->write_pointer; else if (strchr(WORD_DELIMITERS, c)) me->line_break = me->write_pointer-1; /* Flush buffer out when full */ if (me->write_pointer >= me->buffer+BUFFER_SIZE-3) { #ifdef OLD_CODE if (me->markup || me->preformatted) { #endif /* OLD_CODE */ if (me->preformatted) { *me->write_pointer = '\n'; (*me->targetClass.put_block)(me->target, me->buffer, me->write_pointer-me->buffer+1); me->write_pointer = me->buffer; } else { /* Use break-point */ char line_break_char = *me->line_break; char *saved = me->line_break; *me->line_break = '\n'; (*me->targetClass.put_block)(me->target, me->buffer, me->line_break-me->buffer+1); *me->line_break = line_break_char; { /* move next line in */ char *p = saved; char *q; for(q=me->buffer; p<me->write_pointer; ) *q++ = *p++; } me->write_pointer = me->buffer + (me->write_pointer-saved); } me->line_break = me->buffer; } return HT_OK; } /* String handling ** --------------- */ PRIVATE int HTTeXGen_put_string (HTStructured * me, const char* s) { while (*s) HTTeXGen_put_character(me, *s++); return HT_OK; } PRIVATE int HTTeXGen_write (HTStructured * me, const char* b, int l) { while (l-- > 0) HTTeXGen_put_character(me, *b++); return HT_OK; } /* Start Element ** ------------- ** ** No attributes are put to the output Henrik 07/03-94 ** Does no assumptions of WHAT element is started... */ PRIVATE void HTTeXGen_start_element (HTStructured * me, int element_number, const BOOL * present, const char ** value) { me->startup = YES; /* Now, let's get down to it */ if (me->preformatted == YES) { /* Don't start markup in here */ HTTRACE(SGML_TRACE, "LaTeX....... No Markup in verbatim mode\n"); return; } if (element_number == HTML_PRE) me->preformatted = YES; if (element_number == HTML_CITE || /* No \n here, please! */ element_number == HTML_DT || element_number == HTML_H1 || element_number == HTML_H2 || element_number == HTML_H3 || element_number == HTML_H4 || element_number == HTML_H5 || element_number == HTML_H6 || element_number == HTML_TITLE) me->sensitive = YES; else if (element_number == HTML_DD) /* Only way to turn <DT> off */ me->sensitive = NO; me->markup = element_number == HTML_A ? NO : YES; HTTeXGen_put_string(me, *TeX_names[element_number]); me->markup = NO; } /* End Element ** ----------- ** ** Ends an markup element Henrik 07/03-94 ** Does no assumptions of WHAT element is ended... */ PRIVATE void HTTeXGen_end_element (HTStructured * me, int element_number) { if (me->preformatted && element_number != HTML_PRE) { HTTRACE(SGML_TRACE, "LaTeX....... No markup in verbatim mode\n"); return; } me->preformatted = NO; me->markup = YES; HTTeXGen_put_string(me, *(TeX_names[element_number]+1)); me->markup = NO; if (element_number == HTML_CITE || element_number == HTML_DL || element_number == HTML_H1 || element_number == HTML_H2 || element_number == HTML_H3 || element_number == HTML_H4 || element_number == HTML_H5 || element_number == HTML_H6 || element_number == HTML_TITLE) me->sensitive = NO; } /* Expanding entities ** ------------------ ** */ PRIVATE void HTTeXGen_put_entity (HTStructured * me, int entity_number) { BOOL mark = me->markup; if (*TeX_entities[entity_number] != '&' && /* Theese are converted later */ *TeX_entities[entity_number] != '<' && *TeX_entities[entity_number] != '>') me->markup = YES; HTTeXGen_put_string(me, TeX_entities[entity_number]); me->markup = mark; } PRIVATE int HTTeXGen_unparsedBeginElement (HTStructured * me, const char * b, int l) { return (*me->targetClass.put_block)(me->target, b, l); } PRIVATE int HTTeXGen_unparsedEndElement (HTStructured * me, const char * b, int l) { return (*me->targetClass.put_block)(me->target, b, l); } PRIVATE int HTTeXGen_unparsedEntity (HTStructured * me, const char * b, int l) { return (*me->targetClass.put_block)(me->target, b, l); } /* Free an HTML object ** ------------------- ** */ PRIVATE int HTTeXGen_free (HTStructured * me) { HTTeXGen_flush(me); (*me->targetClass.put_string)(me->target, "\n\\end{document}\n"); HTTeXGen_flush(me); (*me->targetClass._free)(me->target); /* ripple through */ HT_FREE(me); return HT_OK; } PRIVATE int HTTeXGen_abort (HTStructured * me, HTList * e) { HTTeXGen_free(me); return HT_ERROR; } /* Structured Object Class ** ----------------------- */ PRIVATE const HTStructuredClass HTTeXGeneration = /* As opposed to print etc */ { "HTMLToTeX", HTTeXGen_flush, HTTeXGen_free, HTTeXGen_abort, HTTeXGen_put_character, HTTeXGen_put_string, HTTeXGen_write, HTTeXGen_start_element, HTTeXGen_end_element, HTTeXGen_put_entity, HTTeXGen_unparsedBeginElement, HTTeXGen_unparsedEndElement, HTTeXGen_unparsedEntity }; /* HTConverter from HTML to TeX Stream ** ------------------------------------------ ** */ PUBLIC HTStream* HTMLToTeX (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStructured* me; if ((me = (HTStructured *) HT_CALLOC(1, sizeof(*me))) == NULL) HT_OUTOFMEM("HTMLToTeX"); me->isa = (HTStructuredClass*) &HTTeXGeneration; me->dtd = HTML_dtd(); me->target = output_stream; me->targetClass = *me->target->isa;/* Copy pointers to routines for speed*/ me->write_pointer = me->buffer; me->line_break = me->buffer; (*me->targetClass.put_string)(me->target, "\\documentstyle[11pt]{report}\n\\begin{document}\n"); return SGML_new(HTML_dtd(), me); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTeXGen.html��������������������������������������������������������������������0100644�0000764�0000144�00000002107�06526451301�016222� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTML TO LATEX CONVERTER STREAM</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>LaTeX generator</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module converts a structured stream from HTML into LaTeX format. The conversion is mostly a 1:1 translation, but as the LaTeX compiler is much more strict than a typical HTML converter some typographical constraints are put on the translation. Only text is translated for the moment. <P> This module is implemented by <A HREF="HTTeXGen.c">HTTeXGen.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTTEXGEN_H #define HTTEXGEN_H #include "HTStruct.h" #include "HTFormat.h" </PRE> <H2>Conversion Module</H2> The conversion module is defined as <PRE> extern HTConverter HTMLToTeX; </PRE> <PRE> #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTTeXGen.html,v 2.19 2025/05/14 02:11:13 frystyk Exp $ </ADDRESS> </BODY> </HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTee.c��������������������������������������������������������������������������0100644�0000764�0000144�00000007012�06664352704�015075� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTee.c ** TEE CLASS STREAM DEFINITION ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTee.c,v 2.20 2025/02/22 22:10:12 frystyk Exp $ ** ** The Tee class just writes to two streams. Easy. ** See also the Black Hole stream which is even easier. ** ** HISTORY: ** 8 Jul 94 FM Insulate free() from _free structure element. ** */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTTee.h" /* Stream Object ** ------------ */ struct _HTStream { const HTStreamClass * isa; HTStream * s1; HTStream * s2; HTComparer * resolver; }; /* ** Algorithm produced by H&kon */ PRIVATE int default_resolver (const void *a, const void *b) { if (*(int *) a < 0) return *(int *) a; if (*(int *) b < 0) return *(int *) b; if (*(int *) a == 0) return *(int *) b; return *(int *) a; } PRIVATE int HTTee_put_character (HTStream * me, char c) { int ret1 = (*me->s1->isa->put_character)(me->s1, c); int ret2 = (*me->s2->isa->put_character)(me->s2, c); return me->resolver(&ret1, &ret2); } PRIVATE int HTTee_put_string (HTStream * me, const char* s) { int ret1 = (*me->s1->isa->put_string)(me->s1, s); int ret2 = (*me->s2->isa->put_string)(me->s2, s); return me->resolver(&ret1, &ret2); } PRIVATE int HTTee_write (HTStream * me, const char* s, int l) { int ret1 = (*me->s1->isa->put_block)(me->s1, s, l); int ret2 = (*me->s2->isa->put_block)(me->s2, s, l); return me->resolver(&ret1, &ret2); } PRIVATE int HTTee_flush (HTStream * me) { int ret1 = (*me->s1->isa->flush)(me->s1); int ret2 = (*me->s2->isa->flush)(me->s2); return me->resolver(&ret1, &ret2); } /* ** BUGS: We do not handle WOULD_BLOCK here. This is tricky as we don't ** know which one actually blocked. */ PRIVATE int HTTee_free (HTStream * me) { if (me) { int ret1 = me->s1 ? (*me->s1->isa->_free)(me->s1) : HT_OK; int ret2 = me->s2 ? (*me->s2->isa->_free)(me->s2) : HT_OK; int ret = me->resolver(&ret1, &ret2); me->s1 = me->s2 = NULL; HT_FREE(me); return ret; } return HT_OK; } PRIVATE int HTTee_abort (HTStream * me, HTList * e) { if (me) { if (me->s1) (*me->s1->isa->abort)(me->s1, e); if (me->s2) (*me->s2->isa->abort)(me->s2, e); me->s1 = me->s2 = NULL; HT_FREE(me); } return HT_ERROR; } /* Tee stream ** ---------- */ PRIVATE const HTStreamClass HTTeeClass = { "Tee", HTTee_flush, HTTee_free, HTTee_abort, HTTee_put_character, HTTee_put_string, HTTee_write }; /* Tee Stream creation ** ------------------- ** You can create a T stream using this method. Each stream returns a ** return value and in order to resolve conflicts in the return code ** you can specify a resolver callback function. Each time any of the ** data methods are called the resolver function is then called with ** the return codes from the two streams. The return code of the T stream ** itself will be the result of the resolver function. If you pass NULL ** as the resolver routine then a default resolver is used. */ PUBLIC HTStream * HTTee(HTStream * s1, HTStream * s2, HTComparer * resolver) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(*me))) == NULL) HT_OUTOFMEM("HTTee"); me->isa = &HTTeeClass; me->s1 = s1 ? s1 : HTBlackHole(); me->s2 = s2 ? s2 : HTBlackHole(); me->resolver = resolver ? resolver : default_resolver; HTTRACE(STREAM_TRACE, "Tee......... Created stream %p with resolver %p\n" _ me _ me->resolver); return me; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTee.html�����������������������������������������������������������������������0100644�0000764�0000144�00000002645�06526451301�015614� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww T Stream</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 31-May-1996 --> </HEAD> <BODY> <H1>Tee stream</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> The Tee stream just writes everything you put into it into two other streams. One use (the only use?!) is for taking a cached copey on disk while loading the main copy, without having to wait for the disk copy to be finished and reread it. <P> You can create a T stream using this method. Each stream returns a return value and in order to resolve conflicts in the return code you can specify a resolver callback function. Each time any of the data methods are called the resolver function is then called with the return codes from the two streams. The return code of the T stream itself will be the result of the resolver function. If you pass NULL as the resolver routine then a default resolver is used.<P> This module is implemented by <A HREF="HTTee.c">HTTee.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef _HTTEE_H #define _HTTEE_H #include "HTStream.h" #include "HTArray.h" extern HTStream * HTTee (HTStream * s1, HTStream * s2, HTComparer * resolver); #endif /* HTTEE_H */ </PRE> <HR> <ADDRESS> @(#) $Id: HTTee.html,v 2.16 2025/05/14 02:11:13 frystyk Exp $ </ADDRESS> </BODY> </HTML> �������������������������������������������������������������������������������������������libwww/Library/src/HTTelnet.c�����������������������������������������������������������������������0100644�0000764�0000144�00000016560�06664352704�015623� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTelnet.c ** TELNET ACCESS, ROLIGIN, etc. ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTelnet.c,v 2.41 2025/02/22 22:10:12 frystyk Exp $ ** ** Authors ** TBL Tim Berners-Lee timbl@w3.org ** JFG Jean-Francois Groff jgh@next.com ** DD Denis DeLaRoca (310) 825-4580 <CSP1DWD@mvs.oac.ucla.edu> ** HFN Henrik Frystyk ** History ** 8 Jun 92 Telnet hopping prohibited as telnet is not secure (TBL) ** 26 Jun 92 When over DECnet, suppressed FTP, Gopher and News. (JFG) ** 6 Oct 92 Moved HTClientHost and logfile into here. (TBL) ** 17 Dec 92 Tn3270 added, bug fix. (DD) ** 2 Feb 93 Split from HTAccess.c. Registration.(TBL) ** 2 May 94 Fixed security hole with illegal characters in host ** and user names (code from Mosaic/Eric Bina). */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTTelnet.h" /* Implemented here */ #include "HTNetMan.h" /* ------------------------------------------------------------------------- */ /* make a string secure for passage to the ** system() command. Make it contain only alphanumneric ** characters, or the characters '.', '-', '_', '+'. ** Also remove leading '-' or '+'. ** ----------------------------------------------------- ** Function taken from Mosaic's HTTelnet.c. */ PRIVATE void make_system_secure (char * str) { char *ptr1, *ptr2; if ((str == NULL)||(*str == '\0')) return; /* * remove leading '-' or '+' by making it into whitespace that * will be stripped later. */ if (*str=='-' || *str=='+') *str = ' '; ptr1 = ptr2 = str; while (*ptr1) { if ((!isalpha((int)*ptr1))&&(!isdigit((int)*ptr1))&& (*ptr1 != '.')&&(*ptr1 != '_')&& (*ptr1 != '+')&&(*ptr1 != '-')) { ptr1++; } else { *ptr2 = *ptr1; ptr2++; ptr1++; } } *ptr2 = *ptr1; } /* Telnet or "rlogin" access ** ------------------------- ** Returns HT_NO_DATA OK ** HT_ERROR Error */ PRIVATE int remote_session (HTRequest * request, char * url) { int status = HT_NO_DATA; HTChunk *cmd = HTChunk_new(64); char *access = HTParse(url, "", PARSE_ACCESS); char *host = HTParse(url, "", PARSE_HOST); char *hostname = strchr(host, '@'); char *user = NULL; char *passwd = NULL; char *port = NULL; /* We must be in interactive mode */ if (!HTAlert_interactive()) { HTTRACE(PROT_TRACE, "Telnet...... Not interactive\n"); HT_FREE(access); HT_FREE(host); HTChunk_delete(cmd); return HT_ERROR; } /* Look for user name, password, and port number */ if (hostname) { *hostname++ = '\0'; user = host; if ((passwd = strchr(host, ':')) != NULL) { *passwd++ = '\0'; HTUnEscape(passwd); } HTUnEscape(user); /* Might have a funny userid */ } else { hostname = host; } if ((port = strchr(hostname, ':')) != NULL) *port++ = '\0'; /* If the person is already telnetting etc, forbid hopping */ if (HTLib_secure()) { HTRequest_addError(request, ERR_FATAL, NO, HTERR_ACCESS, NULL, 0, "HTLoadTelnet"); HT_FREE(access); HT_FREE(host); HTChunk_delete(cmd); return HT_NO_DATA; } /* ** Make user and hostname secure by removing leading '-' or '+'. ** and allowing only alphanumeric, '.', '_', '+', and '-'. */ make_system_secure(user); make_system_secure(passwd); make_system_secure(hostname); make_system_secure(port); if (!strcasecomp(access, "telnet")) { #ifdef SIMPLE_TELNET HTChunk_puts(cmd, "TELNET "); HTChunk_puts(cmd, hostname); /* Port is ignored */ #else #ifdef FULL_TELNET /* User and port */ HTChunk_puts(cmd, "telnet "); HTChunk_puts(cmd, hostname); if (user) { HTChunk_puts(cmd, " -l "); HTChunk_puts(cmd, user); } if (port) { HTChunk_putc(cmd, ' '); HTChunk_puts(cmd, port); } #else #ifdef MULTINET HTChunk_puts(cmd, "TELNET "); if (port) { HTChunk_puts(cmd, "/PORT="); HTChunk_puts(cmd, port); HTChunk_putc(cmd, ' '); } HTChunk_puts(cmd, hostname); #else /* User is ignored */ HTChunk_puts(cmd, "telnet "); HTChunk_puts(cmd, hostname); if (port) { HTChunk_putc(cmd, ' '); HTChunk_puts(cmd, port); } #endif /* MULTINET */ #endif /* FULL_TELNET */ #endif /* SIMPLE_TELNET */ } else if (!strcasecomp(access, "rlogin")) { #ifdef MULTINET HTChunk_puts(cmd, "RLOGIN "); if (user) { HTChunk_puts(cmd, "/USERNAME="); HTChunk_puts(cmd, user); HTChunk_putc(cmd, ' '); } if (port) { HTChunk_puts(cmd, "/PORT="); HTChunk_puts(cmd, port); HTChunk_putc(cmd, ' '); } HTChunk_puts(cmd, hostname); #else #ifdef RLOGIN_USER /* format: "hostname -l user" */ HTChunk_puts(cmd, "rlogin "); HTChunk_puts(cmd, hostname); if (user) { HTChunk_puts(cmd, " -l "); HTChunk_puts(cmd, user); } #else /* format: "-l user hostname" */ HTChunk_puts(cmd, "rlogin "); if (user) { HTChunk_puts(cmd, "-l "); HTChunk_puts(cmd, user); HTChunk_putc(cmd, ' '); } HTChunk_puts(cmd, hostname); #endif /* RLOGIN_AFTER */ #endif /* MULTINET */ } else if (!strcasecomp(access, "tn3270")) { #ifdef MULTINET HTChunk_puts(cmd, "TELNET/TN3270 "); if (port) { HTChunk_puts(cmd, "/PORT="); HTChunk_puts(cmd, port); HTChunk_putc(cmd, ' '); } HTChunk_puts(cmd, hostname); #else HTChunk_puts(cmd, "tn3270 "); HTChunk_puts(cmd, hostname); /* Port is ignored */ #endif /* MULTINET */ } else { HTTRACE(PROT_TRACE, "Telnet...... Unknown access method: `%s\'\n" _ access); status = HT_ERROR; } /* Now we are ready to execute the command */ HTTRACE(PROT_TRACE, "Telnet...... Command is `%s\'\n" _ HTChunk_data(cmd)); if (user) { HTChunk *msg = HTChunk_new(128); if (strcasecomp(access, "rlogin")) { HTChunk_puts(msg, "user <"); HTChunk_puts(msg, user); HTChunk_putc(msg, '>'); } if (passwd) { HTChunk_puts(msg, " and password <"); HTChunk_puts(msg, passwd); HTChunk_putc(msg, '>'); } HTRequest_addError(request, ERR_INFO, NO, HTERR_LOGIN, HTChunk_data(msg), HTChunk_size(msg), "HTLoadTelnet"); HTChunk_delete(msg); } #ifdef HAVE_SYSTEM system(cmd->data); #endif HT_FREE(access); HT_FREE(host); HTChunk_delete(cmd); return status; } /* "Load a document" -- establishes a session ** ========================================== ** ** On entry, ** request This is the request structure ** On exit, ** returns HT_ERROR Error has occured or interrupted ** HT_NO_DATA if return status 204 No Response */ PRIVATE int TelnetEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadTelnet (SOCKET soc, HTRequest * request) { HTNet * net = HTRequest_net(request); HTParentAnchor * anchor = HTRequest_anchor(request); char * url = HTAnchor_physical(anchor); HTTRACE(PROT_TRACE, "Telnet...... Looking for `%s\'\n" _ url); HTNet_setEventCallback(net, TelnetEvent); HTNet_setEventParam(net, net); /* callbacks get http* */ HTCleanTelnetString(url); { int status = remote_session(request, url); HTNet_delete(net, status); } return HT_OK; } PRIVATE int TelnetEvent (SOCKET soc, void * pVoid, HTEventType type) { HTNet * net = (HTNet *)pVoid; /* This is a trick as we don't have any socket! */ if (type == HTEvent_CLOSE) /* Interrupted */ HTNet_delete(net, HT_INTERRUPTED); else HTNet_delete(net, HT_ERROR); return HT_OK; } ������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTelnet.html��������������������������������������������������������������������0100644�0000764�0000144�00000001274�06526451302�016330� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww TELNET, RLOGIN ETC.</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>Telnet and similar access methods</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module is implemented by <A HREF="HTTelnet.c">HTTelnet.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTTELNET_H #define HTTELNET_H #include "HTProt.h" extern HTProtCallback HTLoadTelnet; #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTTelnet.html,v 2.24 2025/05/14 02:11:14 frystyk Exp $ </ADDRESS> </BODY> </HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTimer.c������������������������������������������������������������������������0100644�0000764�0000144�00000021421�07251127414�015427� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** TIMER MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTimer.c,v 2.28 2025/03/06 09:34:04 kahan Exp $ ** ** Timers based on the X server timers ** ** Authors: ** EGP Eric Prud'hommeaux (eric@w3.org) ** HFN Henrik Frystyk Nielsen ** Bugs ** */ /* Implementation dependent include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTReqMan.h" #include "HTTimer.h" /* Implemented here */ struct _HTTimer { ms_t millis; /* Relative value in millis */ ms_t expires; /* Absolute value in millis */ BOOL relative; BOOL repetitive; void * param; /* Client supplied context */ HTTimerCallback * cbf; }; PRIVATE HTList * Timers = NULL; /* List of timers */ PRIVATE HTTimerSetCallback * SetPlatformTimer = NULL; PRIVATE HTTimerSetCallback * DeletePlatformTimer = NULL; #ifdef WATCH_RECURSION PRIVATE HTTimer * InTimer = NULL; #define CHECKME(timer) if (InTimer != NULL) HTDEBUGBREAK("check timer\n"); InTimer = timer; #define CLEARME(timer) if (InTimer != timer) HTDEBUGBREAK("clear timer\n"); InTimer = NULL; #define SETME(timer) InTimer = timer; #else /* WATCH_RECURSION */ #define CHECKME(timer) #define CLEARME(timer) #define SETME(timer) #endif /* !WATCH_RECURSION */ /* JK: used by Amaya */ PUBLIC BOOL HTTimer_expireAll (void) { HTList * cur; HTTimer * timer; if (Timers) { /* ** first delete all plattform specific timers to ** avoid having a concurrent callback */ cur = Timers; while ((timer = (HTTimer *) HTList_nextObject(cur))) { if (DeletePlatformTimer) DeletePlatformTimer(timer); } /* ** simulate a timer timeout thru timer_dispatch ** to kill its context */ cur = Timers; while ((timer = (HTTimer *) HTList_nextObject(cur))) { /* avoid having it being refreshed */ timer->repetitive = NO; HTTimer_dispatch (timer); /* as the timer is erased, we start again from the top of the list */ cur = Timers; } return YES; } return NO; } /* ------------------------------------------------------------------------- */ /* ** When a timer has expired, we dispatch the event handler and re-register the ** timer with the next expiration time if repetitive. Otherwise we just leave ** it */ PRIVATE int Timer_dispatch (HTList * cur, HTList * last) { HTTimer * timer; int ret = HT_ERROR; timer = (HTTimer *)HTList_objectOf(cur); if (timer == NULL) { #if 0 HTDEBUGBREAK("Timer dispatch couldn't find a timer\n"); #endif CLEARME(timer); return HT_ERROR; } #ifdef WWW_WIN_ASYNC /* 2025/07/31 Jens Meggers (meggers@firepad.com): On Windows, timers are always repetitive, so we have to delete the timer */ if (DeletePlatformTimer) DeletePlatformTimer(timer); #endif /* WWW_WIN_ASYNC */ if (timer->repetitive) HTTimer_new(timer, timer->cbf, timer->param, timer->millis, YES, YES); else HTList_quickRemoveElement(cur, last); HTTRACE(THD_TRACE, "Timer....... Dispatch timer %p\n" _ timer); ret = (*timer->cbf) (timer, timer->param, HTEvent_TIMEOUT); return ret; } PUBLIC BOOL HTTimer_registerSetTimerCallback (HTTimerSetCallback * cbf) { HTTRACE(CORE_TRACE, "Timer....... registering %p as timer set cbf\n" _ cbf); if (cbf) { SetPlatformTimer = cbf; return YES; } return NO; } PUBLIC BOOL HTTimer_registerDeleteTimerCallback (HTTimerSetCallback * cbf) { HTTRACE(CORE_TRACE, "Timer....... registering %p as timer delete cbf\n" _ cbf); if (cbf) { DeletePlatformTimer = cbf; return YES; } return NO; } PUBLIC ms_t HTTimer_expiresRelative (HTTimer * timer) { return timer ? timer->millis : 0; } PUBLIC ms_t HTTimer_expiresAbsolute (HTTimer * timer) { return timer ? timer->expires : 0; } PUBLIC HTTimerCallback * HTTimer_callback (HTTimer * timer) { return timer ? timer->cbf : NULL; } PUBLIC BOOL HTTimer_isRelative (HTTimer * timer) { return timer ? timer->relative : NO; } PUBLIC BOOL HTTimer_delete (HTTimer * timer) { HTList * last; HTList * cur; CHECKME(timer); if ((cur = HTList_elementOf(Timers, (void *)timer, &last)) == NULL) CLEARME(timer); if (HTList_quickRemoveElement(cur, last)) { HTTRACE(THD_TRACE, "Timer....... Deleted active timer %p\n" _ timer); } else { HTTRACE(THD_TRACE, "Timer....... Deleted expired timer %p\n" _ timer); } /* ** Call any platform specific timer handler */ if (DeletePlatformTimer) DeletePlatformTimer(timer); CLEARME(timer); HT_FREE(timer); return YES; } PUBLIC HTTimer * HTTimer_new (HTTimer * timer, HTTimerCallback * cbf, void * param, ms_t millis, BOOL relative, BOOL repetitive) { HTList * last; HTList * cur; ms_t now = HTGetTimeInMillis(); ms_t expires; HTTimer * pres; CHECKME(timer); expires = millis; if (relative) expires += now; else millis = expires-now; if (Timers == NULL) Timers = HTList_new(); if (timer) { /* if a timer is specified, it should already exist */ if ((cur = HTList_elementOf(Timers, (void *)timer, &last)) == NULL) { HTDEBUGBREAK("Timer %p not found\n" _ timer); CLEARME(timer); return NULL; } HTList_quickRemoveElement(cur, last); HTTRACE(THD_TRACE, "Timer....... Found timer %p with callback %p, context %p, and %s timeout %d\n" _ timer _ cbf _ param _ relative ? "relative" : "absolute" _ millis); /* could optimize by sorting from last when ((HTList *)(last->object))->expires < expires (most common case) */ } else { /* create a new timer */ if ((timer = (HTTimer *) HT_CALLOC(1, sizeof(HTTimer))) == NULL) HT_OUTOFMEM("HTTimer_new"); last = Timers; HTTRACE(THD_TRACE, "Timer....... Created %s timer %p with callback %p, context %p, and %s timeout %d\n" _ repetitive ? "repetitive" : "one shot" _ timer _ cbf _ param _ relative ? "relative" : "absolute" _ millis); } /* ** Sort new element into list */ for (cur = last; (pres = (HTTimer *) HTList_nextObject(cur)) != NULL && pres->expires < expires; last = cur); /* ** If the expiration is 0 then we still register it but dispatch it immediately. */ if (!millis) HTTRACE(THD_TRACE, "Timer....... Timeout is 0 - expires NOW\n"); timer->expires = expires; timer->cbf = cbf; timer->param = param; timer->millis = millis; timer->relative = relative; timer->repetitive = repetitive; SETME(timer); /* ** add to list if timer is new */ cur = HTList_addList(last, (void *)timer); /* ** Call any platform specific timer handler */ if (SetPlatformTimer) SetPlatformTimer(timer); /* Check if the timer object has already expired. If so then dispatch */ if (timer->expires <= now) Timer_dispatch(cur, last); CLEARME(timer); return timer; } PUBLIC BOOL HTTimer_refresh (HTTimer * timer, ms_t now) { if (timer == NULL || timer->repetitive == NO) return NO; if (HTTimer_new(timer, timer->cbf, timer->param, timer->millis, YES, YES) == NULL) return NO; return YES; } PUBLIC BOOL HTTimer_deleteAll (void) { HTList * cur = Timers; HTTimer * pres; if (Timers) { while ((pres = (HTTimer *) HTList_nextObject(cur))) { /* ** Call any platform specific timer handler */ if (DeletePlatformTimer) DeletePlatformTimer(pres); HT_FREE(pres); } HTList_delete(Timers); Timers = NULL; return YES; } return NO; } PUBLIC int HTTimer_dispatch (HTTimer * timer) { HTList * cur; HTList * last = Timers; cur = HTList_elementOf(Timers, (void *)timer, &last); return Timer_dispatch(cur, last); } /* ** Check if the timer object has already expired */ PUBLIC BOOL HTTimer_hasTimerExpired (HTTimer * timer) { return (timer && timer->expires <= HTGetTimeInMillis()); } PUBLIC int HTTimer_next (ms_t * pSoonest) { HTList * cur = Timers; HTList * last = Timers; HTTimer * pres; ms_t now = HTGetTimeInMillis(); int ret = HT_OK; /* ** Dispatch all timers that have expired */ while (Timers && (pres = (HTTimer *) HTList_nextObject(cur))) { if (pres->expires <= now) { if ((ret = Timer_dispatch(cur, last)) != HT_OK) break; cur = last = Timers; } else { last = cur; } } if (pSoonest) { /* ** First element in Timers is the next to expire. */ HTList * cur = Timers; /* for now */ pres = (HTTimer *) HTList_nextObject(cur); *pSoonest = pres ? pres->expires - now : 0; } return ret; } #ifdef WATCH_RECURSION extern void CheckSockEvent(HTTimer * timer, HTTimerCallback * cbf, void * param); PRIVATE void CheckTimers(void) { HTList * cur = Timers; HTTimer * pres; while ((pres = (HTTimer *) HTList_nextObject(cur))) { CheckSockEvent(pres, pres->cbf, pres->param); } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTimer.html���������������������������������������������������������������������0100644�0000764�0000144�00000010151�06736503211�016147� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Timer Class</TITLE> </HEAD> <BODY> <H1> The Timer Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Timer class handles timers for libwww and the application. This works exactly as in X where you create a timer object with a callback function and a timeout. The callback will be called every time the timer expires. There are several timeouts that can be set in libwww: <OL> <LI> The time we keep an idle persistent connection open. Here there are in fact two mechanisms depending on whether you use blocking or non-blocking sockets. The default is 60 secs. The timers can be accessed using the functions defined in the <A HREF="HTHost.html#Persistent">HTHost object</A> <LI> The idle time we want to wait when receiving a response from a server, that is, if it doesn't send anything in a number of secs. The default here is no timeout. It can be accessed in the <A HREF="HTHost.html#RequestTimeout">HTHost object</A> as well. <LI> The timeout before we flush pending requests in a pipeline, the default here is 30 ms. It is also accessed in the <A HREF="HTHost.html#Delayed">HTHost object</A> <LI> The timeout before we start sending the body of a <TT>PUT</TT> or <TT>POST</TT> request. Normally we send the <TT>Expect: 100-continue</TT> header field but if the server doesn't send back a <TT>100 Continue</TT> code then we upload the body anyway. The default is 2 secs and can be accessed in the <A HREF="HTTP.html">HTTP module</A>. </OL> <PRE> #ifndef HTTIMER_H #define HTTIMER_H #include "wwwsys.h" #include "HTReq.h" typedef struct _HTTimer HTTimer; typedef int HTTimerCallback (HTTimer *, void *, HTEventType type); </PRE> <H2> Create and Delete Timers </H2> <P> The callback function is the function that is to be called when timer expires. <PRE> extern HTTimer * HTTimer_new (HTTimer *, HTTimerCallback *, void *, ms_t millis, BOOL relative, BOOL repetitive); extern BOOL HTTimer_delete (HTTimer * timer); extern BOOL HTTimer_deleteAll (void); extern BOOL HTTimer_expireAll (void); </PRE> <H2> Dispatch Timer </H2> <P> Just do it <PRE> extern int HTTimer_dispatch (HTTimer * timer); </PRE> <H3> Get the next timer in line </H3> <P> Dispatches all expired timers and optionally returns the time till the next one. <PRE> extern int HTTimer_next (ms_t * pSoonest); </PRE> <H3> Reset an already existing Repetitive Timer </H3> <PRE> extern BOOL HTTimer_refresh(HTTimer * timer, ms_t now); </PRE> <H2> Get Information about a Timer Object </H2> <H3> Absolute Time when This Timer Expires </H3> <P> Absolute time in millies when this timer will expire <PRE> extern ms_t HTTimer_expiresAbsolute (HTTimer * timer); </PRE> <H3> Relative Time this Timer is running </H3> <P> Gived the relative time in millies that this timer was registered with. For example, a relative timer set to expire in 20ms will return 20. <PRE> #define HTTimer_getTime(t) HTTimer_expiresRelative(t) extern ms_t HTTimer_expiresRelative (HTTimer * timer); </PRE> <H3> Has this Timer Expired? </H3> <P> If so then it's time to call the dispatcher! <PRE> extern BOOL HTTimer_hasTimerExpired (HTTimer * timer); </PRE> <H3> What callback is this Timer Registered with? </H3> <PRE> extern HTTimerCallback * HTTimer_callback (HTTimer * timer); </PRE> <H3> Is this Time relative or Absolute? </H3> <PRE> extern BOOL HTTimer_isRelative (HTTimer * timer); </PRE> <H2> Platform Specific Timers </H2> <P> On some platform, timers are supported via events or other OS specific mechanisms. You can make libwww can support these by registering a platform specific timer add and timer delete method. <PRE> typedef BOOL HTTimerSetCallback (HTTimer * timer); extern BOOL HTTimer_registerSetTimerCallback (HTTimerSetCallback * cbf); extern BOOL HTTimer_registerDeleteTimerCallback (HTTimerSetCallback * cbf); </PRE> <PRE> #endif /* HTTIMER_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTTimer.html,v 2.11 2025/06/30 21:05:13 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTrace.c������������������������������������������������������������������������0100644�0000764�0000144�00000004746�06664352704�015431� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTrace.c ** TRACE AND DATA LOGGING UTILITIES ** ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTrace.c,v 2.8 2025/02/22 22:10:12 frystyk Exp $ ** ** 26 Nov 96 (EGP) moved HTTrace stuff here from HTString.c and ** added HTTrace_data */ /* Library include files */ #include "wwwsys.h" /* ** All the tracing facilities are prototyped in ** HTUtils.h because they are needed everywhere. */ #include "HTUtils.h" #if WWWTRACE_MODE == WWWTRACE_FILE PUBLIC FILE *WWWTrace = NULL; #endif #ifndef WWW_WIN_DLL PUBLIC unsigned int WWW_TraceFlag = 0; /* Global trace flag for ALL W3 code */ #endif PRIVATE HTTraceCallback * PHTTraceCallback = NULL; PRIVATE HTPrintCallback * PHTPrintCallback = NULL; PRIVATE HTTraceDataCallback * PHTTraceDataCallback = NULL; /* ------------------------------------------------------------------------- */ PUBLIC void HTTrace_setCallback (HTTraceCallback * pCall) { PHTTraceCallback = pCall; } PUBLIC HTTraceCallback * HTTrace_getCallback (void) { return PHTTraceCallback; } PUBLIC int HTTrace (const char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); if (PHTTraceCallback) return (*PHTTraceCallback)(fmt, pArgs); #ifdef WWW_WIN_WINDOW return (0); #else return (vfprintf(stderr, fmt, pArgs)); #endif } PUBLIC void HTTraceData_setCallback (HTTraceDataCallback * pCall) { PHTTraceDataCallback = pCall; } PUBLIC HTTraceDataCallback * HTTraceData_getCallback (void) { return PHTTraceDataCallback; } PUBLIC int HTTraceData (char * data, size_t len, char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); if (PHTTraceDataCallback) return (*PHTTraceDataCallback)(data, len, fmt, pArgs); return (0); } PUBLIC void HTPrint_setCallback (HTPrintCallback * pCall) { PHTPrintCallback = pCall; } PUBLIC HTPrintCallback * HTPrint_getCallback (void) { return PHTPrintCallback; } PUBLIC int HTPrint (const char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); if (PHTPrintCallback) return (*PHTPrintCallback)(fmt, pArgs); #ifdef WWW_WIN_WINDOW return (0); #else return (vfprintf(stdout, fmt, pArgs)); #endif } PUBLIC void HTDebugBreak (char * file, unsigned long line, const char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); HTTrace("%s:%ld ", file ? file : "", line); HTTrace(fmt, pArgs); #ifdef WWW_MSWINDOWS DebugBreak(); #else /* WWW_MSWINDOWS */ abort(); #endif /* !WWW_MSWINDOWS */ return; } ��������������������������libwww/Library/src/HTTrans.c������������������������������������������������������������������������0100644�0000764�0000144�00000005717�06701526652�015456� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTTrans.c ** TRANSPORT LAYER MANAGER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTTrans.c,v 2.8 2025/04/04 00:09:14 frystyk Exp $ ** ** HISTORY: ** Marts 96 HFN Written */ /* Library Include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTParse.h" #include "HTReq.h" #include "HTIOStream.h" #include "HTTrans.h" /* Implemented here */ PRIVATE HTList * transports = NULL; /* List of registered transports */ /* --------------------------------------------------------------------------*/ /* ** Register a Transport module */ PUBLIC BOOL HTTransport_add (const char * name, HTTransportMode mode, HTInput_new * get_input, HTOutput_new * get_output) { if (name && (get_input || get_output)) { HTTransport * tp; if ((tp = (HTTransport *) HT_CALLOC(1, sizeof(HTTransport))) == NULL) HT_OUTOFMEM("HTTransport_add"); StrAllocCopy(tp->name, name); { char *ptr = tp->name; while ((*ptr = TOLOWER(*ptr))) ptr++; } tp->mode = mode; tp->input_new = get_input; tp->output_new = get_output; if (!transports) transports = HTList_new(); HTTRACE(CORE_TRACE, "Transport... Adding `%s'\n" _ name); return HTList_addObject(transports, (void *) tp); } else HTTRACE(CORE_TRACE, "Transport... Can't add this...\n"); return NO; } /* ** Deletes a Transport module */ PUBLIC BOOL HTTransport_delete (const char * name) { if (transports) { HTList *cur = transports; HTTransport *pres; while ((pres = (HTTransport *) HTList_nextObject(cur))) { if (!strcmp(pres->name, name)) { BOOL status = HTList_removeObject(transports, (void *) pres); HT_FREE(pres->name); HT_FREE(pres); return status; } } } return NO; } /* ** Delete the list of registered transports. This is called from ** within HTLibTerminate. */ PUBLIC BOOL HTTransport_deleteAll (void) { if (transports) { HTList * cur = transports; HTTransport * pres; while ((pres = (HTTransport *) HTList_nextObject(cur))) { HT_FREE(pres->name); HT_FREE(pres); } HTList_delete(transports); transports = NULL; return YES; } return NO; } /* ** Search registered transports to find a suitable transport object. ** Return transport object or NULL */ PUBLIC HTTransport * HTTransport_find (HTRequest * request, const char * name) { if (name) { HTList * cur = transports; HTTransport * pres; if (cur) { while ((pres = (HTTransport *) HTList_nextObject(cur))) { if (!strcmp(pres->name, name)) return pres; } } if (request) HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, (char *) name, (int) strlen(name), "HTTransport_find"); } return NULL; } PUBLIC HTTransportMode HTTransport_mode (HTTransport * tp) { return (tp ? tp->mode : HT_TP_SINGLE); } PUBLIC BOOL HTTransport_setMode (HTTransport * tp, HTTransportMode mode) { if (tp) { tp->mode = mode; return YES; } return NO; } �������������������������������������������������libwww/Library/src/HTTrans.html���������������������������������������������������������������������0100644�0000764�0000144�00000007775�07130377247�016207� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Transport Class</TITLE> </HEAD> <BODY> <H1> The Transport Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Transport Class defines a transport as used by the <A HREF="HTChannl.html">HTChannel class</A> to communicate with the network, the local file system etc. New transport objects may be registered at any time. This allows the application to easily hook in its own transport layers. The purpose of the HTTransport object is to contain transport dependent methods for opening and closing a connection to the transport and also to get an input stream and an output strean for reading and writing to the transport respectively. <P> <B>Note</B>: The library <B>core</B> does not &nbsp;define any default transport objects - they are all considered part of the application. The library comes with a default set of transports which can be initiated using the function <CODE>HTTransportInit()</CODE> in <A HREF="HTInit.html">HTInit module</A> <P> This module is implemented by <A HREF="HTTrans.c">HTTrans.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTTRANS_H #define HTTRANS_H </PRE> <H2> Creation and Deletion Methods </H2> <P> All transport interfaces are registered dynamically in libwww. This means that libwww is independent of the transport being used (TCP, for example), and you can therefore use libwww in any context you like. You have to specify a set of parameters in order for libwww to be able to use it. The transport class is defined as follows: <PRE> typedef struct _HTTransport HTTransport; typedef enum _HTTransportMode { HT_TP_SINGLE = 0, /* One single request at a time */ HT_TP_PIPELINE = 1, /* Use pipelined requests */ HT_TP_INTERLEAVE = 2 /* Can we interleave requests? */ } HTTransportMode; #include "HTIOStream.h" #include "HTReq.h" </PRE> <H3> Add a Transport </H3> <P> A new transport can be registered at any time in the Library. You must specify a name ad the supported channel mode that the transport supports. Then you must also register two creation methods of an input and an output stream respectively. You can find the definition of the I/O streams in the <A HREF="HTIOStream.html">HTIOStream module</A>. <PRE> extern BOOL HTTransport_add (const char * name, HTTransportMode mode, HTInput_new * get_input, HTOutput_new * get_output); </PRE> <H3> Delete a Transport </H3> <P> This functions deletes a registered protocol module so that it can not be used for accessing a resource anymore. <PRE> extern BOOL HTTransport_delete (const char * name); </PRE> <H3> Remove ALL Registered Transports </H3> <P> This is the garbage collection function. It is called by <A HREF="HTLib.html">HTLibTerminate()</A> <PRE> extern BOOL HTTransport_deleteAll (void); </PRE> <H2> Transport Class Methods </H2> <H3> Find a Transport Protocol Object </H3> <P> You can search the list of registered protocol objects as a function of the access acheme. If an access scheme is found then the protocol object is returned. <PRE> extern HTTransport * HTTransport_find (HTRequest * request, const char * name); </PRE> <H3> Supported Transort Modes </H3> <P> A transport object is registered with the flow control mode that it supports. This mode describes whether we can issue multiple requests at the same time. <PRE> extern HTTransportMode HTTransport_mode (HTTransport * tp); extern BOOL HTTransport_setMode (HTTransport * tp, HTTransportMode mode); </PRE> <H3> Input and Output Stream Creation Methods </H3> <PRE> struct _HTTransport { char * name; HTTransportMode mode; /* Flow mode supported */ HTInput_new * input_new; /* Input stream creation method */ HTOutput_new * output_new; /* Output stream creation method */ }; </PRE> <PRE> #endif /* HTTRANS_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTTrans.html,v 2.8 2025/07/04 15:11:35 kahan Exp $ </ADDRESS> </BODY></HTML> ���libwww/Library/src/HTUTree.c������������������������������������������������������������������������0100644�0000764�0000144�00000025125�06664352704�015411� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** URL DATA TREE STRUCTURE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTUTree.c,v 2.6 2025/02/22 22:10:12 frystyk Exp $ ** ** AUTHORS: ** HFN Henrik Frystyk Nielsen <frystyk@w3.org> ** ** An infobase is a tree structure where we can store all the information ** we know about a remote server. Typically, each remote server will ** have its own infobase which gets richer as we get to know more about ** the remote web site. ** ** This module maintains an URL information database ** which can contain information stored by filters. This can for ** example be used to store challenges received from remote server. ** A infobase has the advantage that it can be searched using URLs _or_ ** using realms. The letter is most useful to "guess" information ** about a remote URL that we haven't seen before */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTUTree.h" /* Implemented here */ #define TREE_TIMEOUT 43200L /* Default tree timeout is 12 h */ struct _HTUTree { /* Server URL info base */ char * name; char * host; int port; HTList * templates; /* List of templates for this tres */ HTList * realms; /* List of realms for this tree */ time_t created; /* Creation time of this object */ HTUTree_gc * gc; /* Contect garbage collector */ }; struct _HTURealm { /* Realm specifics */ char * realm; void * context; HTUTemplate * tm_ptr; }; struct _HTUTemplate { /* Hierarchical information */ char * tmplate; HTURealm * rm_ptr; }; PRIVATE HTList ** InfoTable = NULL; /* List of information bases */ PRIVATE time_t UTreeTimeout = TREE_TIMEOUT; /* ------------------------------------------------------------------------- */ /* ** Create a new realm ** Returns new object or NULL if error */ PRIVATE HTURealm * HTUTree_newRealm (HTUTree * tree, const char * realm, void * context) { if (tree) { HTURealm * me; if ((me = (HTURealm *) HT_CALLOC(1, sizeof(HTURealm))) == NULL) HT_OUTOFMEM("HTURealm_new"); if (realm) StrAllocCopy(me->realm, realm); me->context = context; HTList_addObject(tree->realms, (void *) me); return me; } return NULL; } /* ** Delete a realm. We call the scheme gc callback to free the opaque ** context object. */ PRIVATE BOOL HTUTree_deleteRealm (HTUTree * tree, HTURealm * me) { if (tree && me) { if (tree->gc && me->context) (*tree->gc)(me->context); HTList_removeObject(tree->realms, (void *) me); HT_FREE(me->realm); HT_FREE(me); return YES; } return NO; } /* ** Find a realm */ PRIVATE HTURealm * HTUTree_findRealm (HTUTree * tree, const char * realm) { if (tree && tree->realms && realm) { HTList * cur = tree->realms; HTURealm * pres; while ((pres = (HTURealm *) HTList_nextObject(cur))) { if (!strcmp(pres->realm, realm)) { HTTRACE(CORE_TRACE, "URL Node.... Realm `%s\' found\n" _ realm); return pres; } } } return NULL; } /* ** Create a new template and add to URL tree ** Returns new object or NULL if error */ PRIVATE HTUTemplate * HTUTree_newTemplate (HTUTree * tree,const char * tmplate) { if (tree && tmplate) { HTUTemplate * me; if ((me = (HTUTemplate *) HT_CALLOC(1, sizeof(HTUTemplate))) == NULL) HT_OUTOFMEM("HTUTemplate_new"); StrAllocCopy(me->tmplate, tmplate); HTList_addObject(tree->templates, (void *) me); return me; } return NULL; } /* ** Delete a template */ PRIVATE BOOL HTUTree_deleteTemplate (HTUTree * tree, HTUTemplate * me) { if (tree && me) { HTList_removeObject(tree->templates, (void *) me); HT_FREE(me->tmplate); HT_FREE(me); return YES; } return NO; } /* ** Find a template */ PRIVATE HTUTemplate * HTUTree_findTemplate (HTUTree * tree, const char * path) { if (tree && tree->templates && path) { HTUTemplate * pres; HTList * cur = tree->templates; while ((pres = (HTUTemplate *) HTList_nextObject(cur))) { if (HTStrMatch(pres->tmplate, path)) { HTTRACE(CORE_TRACE, "URL Node.... Found template `%s\' for for `%s\'\n" _ pres->tmplate _ path); return pres; } } } return NULL; } /* ** Search a URL Tree for a matching template or realm ** Return the opaque context object found or NULL if none ** Please regard this as a first simple attempt - it can be done ** much more efficient! */ PUBLIC void * HTUTree_findNode (HTUTree * tree, const char * realm, const char * path) { HTURealm * rm = HTUTree_findRealm(tree, realm); if (rm) return rm->context; else { HTUTemplate * tm = HTUTree_findTemplate(tree, path); if (tm) return tm->rm_ptr ? tm->rm_ptr->context : NULL; } HTTRACE(CORE_TRACE, "URL Node.... Not found\n"); return NULL; } /* ** Add a new node (a template and a realm) to the tree */ PUBLIC BOOL HTUTree_addNode (HTUTree * tree, const char * realm, const char * path, void * context) { if (tree) { if (realm && path) { /* If both a path and a realm */ HTUTemplate * new_template = HTUTree_newTemplate(tree, path); HTURealm * new_realm = HTUTree_newRealm(tree, realm, context); new_realm->tm_ptr = new_template; new_template->rm_ptr = new_realm; return YES; } else if (realm) { /* If only a realm */ HTUTree_newRealm(tree, realm, context); return YES; } HTTRACE(CORE_TRACE, "URL Node.... At least realm must be present\n"); } return NO; } /* ** Replace node (insert a new context at the same node) */ PUBLIC BOOL HTUTree_replaceNode (HTUTree * tree, const char * realm, const char * path, void * context) { HTURealm * rm = HTUTree_findRealm(tree, realm); if (!rm) { HTUTemplate * tm = HTUTree_findTemplate(tree, path); if (tm) rm = tm->rm_ptr; } if (rm) { if (tree->gc && rm->context) (*tree->gc)(rm->context); rm->context = context; return YES; } HTTRACE(CORE_TRACE, "URL Node.... Not found\n"); return NO; } /* ** Remove a node (a template and a realm) from the tree */ PUBLIC BOOL HTUTree_deleteNode (HTUTree * tree, const char * realm, const char * path) { if (tree) { HTURealm * rm = HTUTree_findRealm(tree, realm); HTUTemplate * tm = rm ? rm->tm_ptr : HTUTree_findTemplate(tree, path); if (!rm) rm = tm ? tm->rm_ptr : NULL; HTUTree_deleteRealm(tree, rm); HTUTree_deleteTemplate(tree, tm); return YES; } return NO; } PRIVATE BOOL delete_tree (HTUTree * tree) { if (tree) { HTList * cur; /* Free all templates */ if ((cur = tree->templates)) { HTUTemplate * pres; while ((pres = (HTUTemplate *) HTList_lastObject(cur))) HTUTree_deleteTemplate(tree, pres); HTList_delete(tree->templates); } /* Free all nodes */ if ((cur = tree->realms)) { HTURealm * pres; while ((pres = (HTURealm *) HTList_lastObject(cur))) HTUTree_deleteRealm(tree, pres); HTList_delete(tree->realms); } HT_FREE(tree->name); HT_FREE(tree->host); HT_FREE(tree); return YES; } return NO; } /* ** Find an existing URL Tree ** Returns tree or NULL if error */ PRIVATE HTUTree * find_tree (const char * name, const char * host, int port, HTList ** hashlist) { HTUTree * pres = NULL; *hashlist = NULL; if (!name || !host) { HTTRACE(CORE_TRACE, "URL Tree.... Bad argument\n"); return NULL; } /* Find a hash for this host */ { int hash; const unsigned char * p; for (p=host, hash=0; *p; p++) { hash = (hash * 3 + *p) % HT_L_HASH_SIZE; } if (!InfoTable) { if ((InfoTable = (HTList **) HT_CALLOC(HT_L_HASH_SIZE, sizeof(HTList *))) == NULL) HT_OUTOFMEM("HTUTree_find"); } if (!InfoTable[hash]) InfoTable[hash] = *hashlist = HTList_new(); else *hashlist = InfoTable[hash]; } /* Search the existing list to see if we already have this entry */ { HTList * cur = *hashlist; while ((pres = (HTUTree *) HTList_nextObject(cur))) { if (!strcmp(pres->name, name) && !strcmp(pres->host, host) && pres->port==port) { if (time(NULL) > pres->created + UTreeTimeout) { HTTRACE(CORE_TRACE, "URL Tree.... Collecting URL Tree %p\n" _ pres); HTList_removeObject(*hashlist, pres); delete_tree(pres); pres = NULL; } return pres; } } } return NULL; } /* ** Create a new URL Tree (or return an aready existing one) ** Returns new object (or the one found) or NULL if error */ PUBLIC HTUTree * HTUTree_new (const char * name, const char * host, int port, HTUTree_gc * gc) { if (name && host) { HTList * hashlist = NULL; HTUTree * pres = find_tree(name, host, port, &hashlist); /* If not found (or gc'ed) then create a new URL tree */ if (!pres) { if ((pres = (HTUTree *) HT_CALLOC(1, sizeof(HTUTree))) == NULL) HT_OUTOFMEM("HTUTree_new"); StrAllocCopy(pres->name, name); StrAllocCopy(pres->host, host); pres->port = (port > 0 ? port : 80); pres->templates = HTList_new(); pres->realms = HTList_new(); pres->created = time(NULL); pres->gc = gc; /* Add the new URL tree to the hash table */ HTList_addObject(hashlist, (void *) pres); HTTRACE(CORE_TRACE, "URL Tree.... Created %p with name `%s\'\n" _ pres _ pres->name); } else { HTTRACE(CORE_TRACE, "URL Tree.... Found %p with name `%s\'\n" _ pres _ pres->name); } return pres; } else { HTTRACE(CORE_TRACE, "URL Tree.... Bad argument\n"); return NULL; } } /* ** Find a URL tree */ PUBLIC HTUTree * HTUTree_find (const char * name, const char * host, int port) { if (name && host) { HTList * hashlist = NULL; HTUTree * pres = find_tree(name, host, port, &hashlist); HTTRACE(CORE_TRACE, "URL Tree.... did %sfind `%s\'\n" _ pres ? "" : "NOT " _ name); return pres; } else { HTTRACE(CORE_TRACE, "URL Tree.... Bad augument\n"); } return NULL; } /* ** Delete a complete server tree and everything within it. */ PUBLIC BOOL HTUTree_delete (const char * name, const char * host, int port) { if (name && host) { HTList * hashlist = NULL; HTUTree * pres = find_tree(name, host, port, &hashlist); if (pres) { HTList_removeObject(hashlist, pres); delete_tree(pres); HTTRACE(CORE_TRACE, "URL Tree.... deleted %p\n" _ pres); return YES; } } return NO; } /* ** Delete all URL Trees */ PUBLIC BOOL HTUTree_deleteAll (void) { if (InfoTable) { int cnt; HTList * cur; for (cnt=0; cnt<HT_L_HASH_SIZE; cnt++) { if ((cur = InfoTable[cnt])) { HTUTree * pres; while ((pres = (HTUTree *) HTList_nextObject(cur))) delete_tree(pres); } HTList_delete(InfoTable[cnt]); } HT_FREE(InfoTable); return YES; } return NO; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUTree.html���������������������������������������������������������������������0100644�0000764�0000144�00000010110�06526451303�016107� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 7-Jul-1996 --> <TITLE>W3C Sample Code Library libwww URL Tress</TITLE> </HEAD> <BODY> <H1> URL Trees </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> A <I>URL tree</I> is a hierarchical container class that is well suited for storing information about a URL hierarchy. The <I>root</I> of a URL tree is the <I>hostname</I> part of the URL, for example <CODE>www.w3.org:8000</CODE>.&nbsp;Client application can use URL trees to store what they know about remote servers, for example the access authentication, PICS labels and PEP modules required to access a specific URL from a remote server. However, URL trees can also be used on server side to contain information about the server tree, for example what parts of the tree is protected etc. <P> There are three components of the URL tree which all can be searched for using the methods declared in this module. <UL> <LI> The Tree itself <LI> A URL Node which represents a hierarchy level in a URL <LI> A URL Template which can span multiple nodes and are very similar to the realms known from for example Basic Access Authentication in HTTP. </UL> <P> Typically, a URL tree will be empty when the application starts and as time goes by and we get to know more about the remote servers that we have access, the URL trees will contain more and more information. A nice feature about URL trees is that the application can interpolate information based on realms and templates. This gives the application a good chance of guessing what information (for example a set of credentials) should be appended to a new request. <P> We do not currently distinguish between multiple access mechanisms, for example <B>HTTP</B> and <B>FTP</B>, however, URL trees are mostly used within the HTTP domain. <P> <I>URL Trees</I> are often used by <A HREF="HTFilter.html">filters</A> which stores information about remote services, Each filter can have its own URL tree&nbsp;<I>or</I> a URL tree can be shared among multiple filters. <P> This module is implemented by <A HREF="HTUTree.c">HTUTree.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTUTREE_H #define HTUTREE_H #include "HTReq.h" </PRE> <H2> URL Trees </H2> <P> The three parts of a URL tree are called <PRE> typedef struct _HTUTree HTUTree; typedef struct _HTURealm HTURealm; typedef struct _HTUTemplate HTUTemplate; </PRE> <H3> Create a URL Tree </H3> <P> Create a new authentication base Returns new object or NULL if error <PRE> typedef int HTUTree_gc (void * context); extern HTUTree * HTUTree_new (const char * root, const char * host, int port, HTUTree_gc * gc); </PRE> <H3> Delete a URL Tree </H3> <P> Delete a complete server tree and everything within it. <PRE> extern BOOL HTUTree_delete (const char * root, const char * host, int port); </PRE> <H3> Delete ALL URL Trees </H3> <P> Delete all information bases <PRE> extern BOOL HTUTree_deleteAll (void); </PRE> <H3> Find a URL Tree </H3> <P> Find a authentication base. Return NULL if not found <PRE> extern HTUTree * HTUTree_find (const char * root, const char * host, int port); </PRE> <H2> URL Nodes </H2> <PRE> extern void * HTUTree_findNode (HTUTree * tree, const char * realm, const char * path); </PRE> <PRE> extern BOOL HTUTree_addNode (HTUTree * tree, const char * realm, const char * path, void * context); </PRE> <PRE> extern BOOL HTUTree_replaceNode (HTUTree * tree, const char * realm, const char * path, void * context); </PRE> <PRE> extern BOOL HTUTree_deleteNode (HTUTree * tree, const char * realm, const char * path); </PRE> <PRE> #endif /* HTUTREE_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTUTree.html,v 2.3 2025/05/14 02:11:15 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUU.c���������������������������������������������������������������������������0100644�0000764�0000144�00000017032�07122360073�014700� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTUU.c ** UUENCODE AND UUDECODE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTUU.c,v 2.14 2025/06/16 08:07:23 kahan Exp $ ** ** ACKNOWLEDGEMENT: ** This code is taken from rpem distribution, and was originally ** written by Mark Riordan. ** ** AUTHORS: ** MR Mark Riordan riordanmr@clvax1.cl.msu.edu ** AL Ari Luotonen luotonen@dxcern.cern.ch ** ** HISTORY: ** Added as part of the WWW library and edited to conform ** with the WWW project coding standards by: AL 5 Aug 2025 ** Originally written by: MR 12 Aug 2025 ** Original header text: ** ** 06 Jun 2025 Heiner KallWeit changed the proposed size of the ** of the buffer for HTUU_Encode to avoid SIGSEV problems. ** ** ------------------------------------------------------------- ** File containing routines to convert a buffer ** of bytes to/from RFC 1113 printable encoding format. ** ** This technique is similar to the familiar Unix uuencode ** format in that it maps 6 binary bits to one ASCII ** character (or more aptly, 3 binary bytes to 4 ASCII ** characters). However, RFC 1113 does not use the same ** mapping to printable characters as uuencode. ** ** Mark Riordan 12 August 2025 and 17 Feb 1991. ** This code is hereby placed in the public domain. ** ------------------------------------------------------------- ** ** BUGS: ** ** */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTUU.h" PRIVATE char six2pr[64] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m', 'n','o','p','q','r','s','t','u','v','w','x','y','z', '0','1','2','3','4','5','6','7','8','9','+','/' }; PRIVATE unsigned char pr2six[256]; /*--- function HTUU_encode ----------------------------------------------- * * Encode a single line of binary data to a standard format that * uses only printing ASCII characters (but takes up 33% more bytes). * * Entry bufin points to a buffer of bytes. If nbytes is not * a multiple of three, then the byte just beyond * the last byte in the buffer must be 0. * nbytes is the number of bytes in that buffer. * This cannot be more than 48. * bufcoded points to an output buffer. Be sure that this * can hold at least 5 + 4 * (nbytes/3) characters. * * Exit bufcoded contains the coded line. The first 4*nbytes/3 bytes * contain printing ASCII characters representing * those binary bytes. This may include one or * two '=' characters used as padding at the end. * The last byte is a zero byte. * Returns the number of ASCII characters in "bufcoded". */ PUBLIC int HTUU_encode (unsigned char * bufin, unsigned int nbytes, char * bufcoded) { /* ENC is the basic 1 character encoding function to make a char printing */ #define ENC(c) six2pr[c] register char *outptr = bufcoded; unsigned int i; for (i=0; i<nbytes; i += 3) { *(outptr++) = ENC(*bufin >> 2); /* c1 */ *(outptr++) = ENC(((*bufin << 4) & 060) | ((bufin[1] >> 4) & 017)); /*c2*/ *(outptr++) = ENC(((bufin[1] << 2) & 074) | ((bufin[2] >> 6) & 03));/*c3*/ *(outptr++) = ENC(bufin[2] & 077); /* c4 */ bufin += 3; } /* If nbytes was not a multiple of 3, then we have encoded too * many characters. Adjust appropriately. */ if(i == nbytes+1) { /* There were only 2 bytes in that last group */ outptr[-1] = '='; } else if(i == nbytes+2) { /* There was only 1 byte in that last group */ outptr[-1] = '='; outptr[-2] = '='; } *outptr = '\0'; return(outptr - bufcoded); } /*--- function HTUU_decode ------------------------------------------------ * * Decode an ASCII-encoded buffer back to its original binary form. * * Entry bufcoded points to a uuencoded string. It is * terminated by any character not in * the printable character table six2pr, but * leading whitespace is stripped. * bufplain points to the output buffer; must be big * enough to hold the decoded string (generally * shorter than the encoded string) plus * as many as two extra bytes used during * the decoding process. * outbufsize is the maximum number of bytes that * can fit in bufplain. * * Exit Returns the number of binary bytes decoded. * bufplain contains these bytes. */ PUBLIC int HTUU_decode (char * bufcoded, unsigned char * bufplain, int outbufsize) { /* single character decode */ #define DEC(c) pr2six[(int)c] #define MAXVAL 63 static int first = 1; int nbytesdecoded, j; register char *bufin = bufcoded; register unsigned char *bufout = bufplain; register int nprbytes; /* If this is the first call, initialize the mapping table. * This code should work even on non-ASCII machines. */ if(first) { first = 0; for(j=0; j<256; j++) pr2six[j] = MAXVAL+1; for(j=0; j<64; j++) pr2six[(int)six2pr[j]] = (unsigned char) j; #if 0 pr2six['A']= 0; pr2six['B']= 1; pr2six['C']= 2; pr2six['D']= 3; pr2six['E']= 4; pr2six['F']= 5; pr2six['G']= 6; pr2six['H']= 7; pr2six['I']= 8; pr2six['J']= 9; pr2six['K']=10; pr2six['L']=11; pr2six['M']=12; pr2six['N']=13; pr2six['O']=14; pr2six['P']=15; pr2six['Q']=16; pr2six['R']=17; pr2six['S']=18; pr2six['T']=19; pr2six['U']=20; pr2six['V']=21; pr2six['W']=22; pr2six['X']=23; pr2six['Y']=24; pr2six['Z']=25; pr2six['a']=26; pr2six['b']=27; pr2six['c']=28; pr2six['d']=29; pr2six['e']=30; pr2six['f']=31; pr2six['g']=32; pr2six['h']=33; pr2six['i']=34; pr2six['j']=35; pr2six['k']=36; pr2six['l']=37; pr2six['m']=38; pr2six['n']=39; pr2six['o']=40; pr2six['p']=41; pr2six['q']=42; pr2six['r']=43; pr2six['s']=44; pr2six['t']=45; pr2six['u']=46; pr2six['v']=47; pr2six['w']=48; pr2six['x']=49; pr2six['y']=50; pr2six['z']=51; pr2six['0']=52; pr2six['1']=53; pr2six['2']=54; pr2six['3']=55; pr2six['4']=56; pr2six['5']=57; pr2six['6']=58; pr2six['7']=59; pr2six['8']=60; pr2six['9']=61; pr2six['+']=62; pr2six['/']=63; #endif } /* Strip leading whitespace. */ while(*bufcoded==' ' || *bufcoded == '\t') bufcoded++; /* Figure out how many characters are in the input buffer. * If this would decode into more bytes than would fit into * the output buffer, adjust the number of input bytes downwards. */ bufin = bufcoded; while(pr2six[(int)*(bufin++)] <= MAXVAL); nprbytes = bufin - bufcoded - 1; nbytesdecoded = ((nprbytes+3)/4) * 3; if(nbytesdecoded > outbufsize) { nprbytes = (outbufsize*4)/3; } bufin = bufcoded; while (nprbytes > 0) { *(bufout++) = (unsigned char) (DEC(*bufin) << 2 | DEC(bufin[1]) >> 4); *(bufout++) = (unsigned char) (DEC(bufin[1]) << 4 | DEC(bufin[2]) >> 2); *(bufout++) = (unsigned char) (DEC(bufin[2]) << 6 | DEC(bufin[3])); bufin += 4; nprbytes -= 4; } if(nprbytes & 03) { if(pr2six[(int)bufin[-2]] > MAXVAL) { nbytesdecoded -= 2; } else { nbytesdecoded -= 1; } } return(nbytesdecoded); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUU.html������������������������������������������������������������������������0100644�0000764�0000144�00000002321�06526451303�015421� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww UU ENCODING AND DECODING</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>Encoding to Printable Characters</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> File module provides functions <CODE>HTUU_encode()</CODE> and <CODE>HTUU_decode()</CODE> which convert a buffer of bytes to/from RFC 1113 printable encoding format. This technique is similar to the familiar Unix uuencode format in that it maps 6 binary bits to one ASCII character (or more aptly, 3 binary bytes to 4 ASCII characters). However, RFC 1113 does not use the same mapping to printable characters as uuencode. <P> This module is implemented by <A HREF="HTUU.c">HTUU.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTUU_H #define HTUU_H extern int HTUU_encode (unsigned char * bufin, unsigned int nbytes, char * bufcoded); extern int HTUU_decode (char * bufcoded, unsigned char * bufplain, int outbufsize); #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTUU.html,v 2.14 2025/05/14 02:11:15 frystyk Exp $ </ADDRESS> </BODY> </HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUser.c�������������������������������������������������������������������������0100644�0000764�0000144�00000010244�06710455647�015301� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** USER PROFILE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTUser.c,v 2.6 2025/04/25 00:02:47 frystyk Exp $ ** ** Contains information about local host, email, etc. ** ** May 96 HFN Written */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTInet.h" #include "HTUser.h" /* Implemented here */ /* The default directory for "save locally" and "save and execute" files: */ #ifndef HT_TMP_ROOT #ifdef WWW_MSWINDOWS #define HT_TMP_ROOT "C:\\Temp\\" #else #define HT_TMP_ROOT "/tmp/" #endif /* WWW_MSWINDOWS */ #endif struct _HTUserProfile { char * user; char * fqdn; /* Fully qualified domain name */ char * email; /* Email address of current user */ char * news; /* The news server to use */ char * tmp; /* Location for temporary files */ time_t timezone; /* Time zone in seconds */ void * context; /* Application specific */ }; /* ------------------------------------------------------------------------- */ /* ** Create a new host profile object and initialize it with what we can ** find on this host. */ PUBLIC HTUserProfile * HTUserProfile_new (const char * name, void * context) { HTUserProfile * me = NULL; if (name) { if ((me = (HTUserProfile *) HT_CALLOC(1, sizeof(HTUserProfile)))==NULL) HT_OUTOFMEM("HTUserProfile_new"); HTTRACE(CORE_TRACE, "User Profile Adding `%s\'\n" _ name); StrAllocCopy(me->user, name); /* Set the context */ me->context = context; } return me; } /* ** Localize a user profile by filling in all the information that we ** can figure out automatically, for example the email address, news ** server etc. */ PUBLIC BOOL HTUserProfile_localize (HTUserProfile * up) { if (up) { HTTRACE(CORE_TRACE, "User Profile Localizing %p\n" _ up); /* Find the FQDN */ up->fqdn = HTGetHostName(); /* Find the user email address */ up->email = HTGetMailAddress(); /* Find the news server */ up->news = HTGetNewsServer(); /* Find the timezone offset */ up->timezone = HTGetTimeZoneOffset(); /* Find the default location for temporary files */ StrAllocCopy(up->tmp, HT_TMP_ROOT); if (*(up->tmp+strlen(up->tmp)-1) != DIR_SEPARATOR_CHAR) StrAllocCat(up->tmp, DIR_SEPARATOR_STR); return YES; } return NO; } /* ** Delete a user profile */ PUBLIC BOOL HTUserProfile_delete (HTUserProfile * up) { if (up) { HT_FREE(up->user); HT_FREE(up->fqdn); HT_FREE(up->email); HT_FREE(up->news); HT_FREE(up->tmp); HT_FREE(up); return YES; } return NO; } PUBLIC char * HTUserProfile_fqdn (HTUserProfile * up) { return up ? up->fqdn : NULL; } PUBLIC BOOL HTUserProfile_setFqdn (HTUserProfile * up, const char * fqdn) { if (up && fqdn) { StrAllocCopy(up->fqdn, fqdn); return YES; } return NO; } PUBLIC char * HTUserProfile_email (HTUserProfile * up) { return up ? up->email : NULL; } PUBLIC BOOL HTUserProfile_setEmail (HTUserProfile * up, const char * email) { if (up && email) { StrAllocCopy(up->email, email); return YES; } return NO; } PUBLIC char * HTUserProfile_news (HTUserProfile * up) { return up ? up->news : NULL; } PUBLIC BOOL HTUserProfile_setNews (HTUserProfile * up, const char * news) { if (up && news) { StrAllocCopy(up->news, news); return YES; } return NO; } PUBLIC char * HTUserProfile_tmp (HTUserProfile * up) { return up ? up->tmp : NULL; } PUBLIC BOOL HTUserProfile_setTmp (HTUserProfile * up, const char * tmp) { if (up && tmp) { StrAllocCopy(up->tmp, tmp); if (*(up->tmp+strlen(up->tmp)-1) != DIR_SEPARATOR_CHAR) StrAllocCat(up->tmp, DIR_SEPARATOR_STR); return YES; } return NO; } PUBLIC time_t HTUserProfile_timezone (HTUserProfile * up) { return up ? up->timezone : 0; } PUBLIC BOOL HTUserProfile_setTimezone (HTUserProfile * up, time_t timezone) { if (up) { up->timezone = timezone; return YES; } return NO; } PUBLIC void * HTUserProfile_context (HTUserProfile * up) { return up ? up->context : NULL; } PUBLIC BOOL HTUserProfile_setContext (HTUserProfile * up, void * context) { if (up) { up->context = context; return YES; } return NO; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUser.html����������������������������������������������������������������������0100644�0000764�0000144�00000010565�06526451304�016020� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 1-Jul-1996 --> <TITLE>W3C Sample Code Library libwww User Profile Class</TITLE> </HEAD> <BODY> <H1> The User Profile Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The User profile&nbsp;class manages what we know about a <I>user on this host</I>. This can for example be the FQDN of the host, the user's email address, the time zone, the news server etc. Note that this information does not correspond to the actual information for the host but instead represents "the information that the user wants to show the world". The user may use an arbitrary email address to be used in a <A HREF="HTTPGen.html">HTTP request</A>, for example. The application may assign a context to each use which gives the application to extend the use of this class. <P> This module is implemented by <A HREF="HTUser.c">HTUser.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTUSER_H #define HTUSER_H typedef struct _HTUserProfile HTUserProfile; </PRE> <H2> Creation and Deletion Methods </H2> <P> The application may create any number of user profile objects. By default the Library creates a generic user which is the default value used to initialize a <A HREF="HTReq.html">Request object</A>. This can be replaced by other user profiles at any point in time. <H3> Create a User Profile </H3> <PRE>extern HTUserProfile * HTUserProfile_new (const char * name, void * context); </PRE> <H3> Localize a User Profile </H3> <P> Localize a user profile by filling in all the information that we can figure out automatically, for example the email address, news server etc. <PRE>extern BOOL HTUserProfile_localize (HTUserProfile * up); </PRE> <H3> Delete a User Profile </H3> <PRE>extern BOOL HTUserProfile_delete (HTUserProfile * up); </PRE> <H2> User Profile Class Methods </H2> <H3> Fully Qualified Domain Name (FQDN) </H3> <P> The FQDN is a fully qualified domain name in that it contains both a local host name and the domain name. It turns out that this is in fact very difficult to obtain a FQDN on a variety of platforms. <PRE> extern char * HTUserProfile_fqdn (HTUserProfile * up); extern BOOL HTUserProfile_setFqdn (HTUserProfile * up, const char * fqdn); </PRE> <H3> User Email Address </H3> <P> This is the email address that the user wants to send out for example as a "password" when using anonymous <A HREF="HTFTP.html">FTP access</A> and as a "From" field in a <A HREF="HTTPGen.html">HTTP request</A>. <PRE> extern char * HTUserProfile_email (HTUserProfile * up); extern BOOL HTUserProfile_setEmail (HTUserProfile * up, const char * email); </PRE> <H3> News Server </H3> <P> Control the news server that this user wishes to use <PRE> extern char * HTUserProfile_news (HTUserProfile * host); extern BOOL HTUserProfile_setNews (HTUserProfile * host, const char * news); </PRE> <H3> Location of Temporary Files </H3> <P> Control the location for temporary files for this profile. The format <B>must</B> be in URL format which is different from local file syntax as URL syntaz <I>always</I> uses '/' as delimiters and also encoding of special characters. See the <A HREF="http://www.w3.org/Addressing/">documentation on URLs</A> for more information about URL syntax. <PRE> extern char * HTUserProfile_tmp (HTUserProfile * host); extern BOOL HTUserProfile_setTmp (HTUserProfile * host, const char * tmp); </PRE> <H3> Local Time Zone (in seconds) </H3> <P> Another widely used piece information that is very hard toobtain is the local time zone. As we often must convert to and from GMT (Universal Time) we must have the correct time zone. If we for some reason guesses wrong then the user must change it manually. <PRE> extern time_t HTUserProfile_timezone (HTUserProfile * up); extern BOOL HTUserProfile_setTimezone (HTUserProfile * up, time_t timezone); </PRE> <H3> User Profile Context </H3> <P> The applicatoin may have additional information that it wishes to assign to a user profile. It can do this using the user context which is handled as follows: <PRE> extern void * HTUserProfile_context (HTUserProfile * up); extern BOOL HTUserProfile_setContext (HTUserProfile * up, void * context); </PRE> <PRE> #endif /* HTUser_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTUser.html,v 2.4 2025/05/14 02:11:16 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUtils.html���������������������������������������������������������������������0100644�0000764�0000144�00000027417�07035071422�016201� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Debug Information and General Purpose Macros</TITLE> </HEAD> <BODY> <H1> Debug Information and General Purpose Macros </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. See also the system dependent file <A HREF="wwwsys.html">sysdep module</A> for system specific information. <PRE> #ifndef HTUTILS_H #define HTUTILS_H </PRE> <H2> Destination for User Print Messages </H2> <P> You can send print messages to the user to various destinations depending on the type of your application. By default, on Unix the messages are sent to <CODE>stdout</CODE> using <CODE>fprintf</CODE>. If we are on MSWindows and have a windows applications then register a <CODE>HTPrintCallback</CODE> function. This is done with <CODE>HTPrint_setCallback</CODE>. It tells <CODE>HTPrint</CODE> to call a <CODE>HTPrintCallback</CODE>. If <CODE>HTDEBUG</CODE> is not defined then don't do any of the above. <PRE> typedef int HTPrintCallback(const char * fmt, va_list pArgs); extern void HTPrint_setCallback(HTPrintCallback * pCall); extern HTPrintCallback * HTPrint_getCallback(void); extern int HTPrint(const char * fmt, ...); </PRE> <H2> <A NAME="Debug">Debug Message Control</A> </H2> <P> This is the global flag for setting the <CODE><EM>WWWTRACE</EM></CODE> options. The verbose mode is no longer a simple boolean but a bit field so that it is possible to see parts of the output messages. <PRE> #if defined(NODEBUG) || defined(NDEBUG) || defined(_NDEBUG) #undef HTDEBUG #else #ifndef HTDEBUG #define HTDEBUG 1 #endif /* HTDEBUG */ #endif </PRE> <H3> C Preprocessor defines </H3> <P> Make sure that the following macros are defined <PRE> #ifndef __FILE__ #define __FILE__ "" #endif #ifndef __LINE__ #define __LINE__ 0L #endif </PRE> <H3> Definition of the Global Trace Flag </H3> <P> The global trace flag variable is available everywhere. <PRE> #ifdef HTDEBUG #ifdef WWW_WIN_DLL extern int * WWW_TraceFlag; /* In DLLs, we need the indirection */ #define WWWTRACE (*WWW_TraceFlag) #else extern unsigned int WWW_TraceFlag; /* Global flag for all W3 trace */ #define WWWTRACE (WWW_TraceFlag) #endif /* WWW_WIN_DLL */ #else #define WWWTRACE 0 #endif /* HTDEBUG */ </PRE> <H3> Select which Trace Messages to show </H3> <P> Libwww has a huge set of trace messages and it is therefor a good idea to be able to select which ones to see for any particular trace. An easy way to set this is using the funtion <A HREF="HTHome.html#Trace">HTSetTraceMessageMask</A>. The <EM>WWWTRACE</EM> define outputs messages if verbose mode is active according to the following rules: <PRE> typedef enum _HTTraceFlags { SHOW_UTIL_TRACE = 0x1, SHOW_APP_TRACE = 0x2, SHOW_CACHE_TRACE = 0x4, SHOW_SGML_TRACE = 0x8, SHOW_BIND_TRACE = 0x10, SHOW_THREAD_TRACE = 0x20, SHOW_STREAM_TRACE = 0x40, SHOW_PROTOCOL_TRACE = 0x80, SHOW_MEM_TRACE = 0x100, SHOW_URI_TRACE = 0x200, SHOW_AUTH_TRACE = 0x400, SHOW_ANCHOR_TRACE = 0x800, SHOW_PICS_TRACE = 0x1000, SHOW_CORE_TRACE = 0x2000, SHOW_MUX_TRACE = 0x4000, SHOW_SQL_TRACE = 0x8000, SHOW_XML_TRACE = 0x10000, SHOW_ALL_TRACE = (int) 0xFFFFFFFF } HTTraceFlags; </PRE> <P> The flags are made so that they can serve as a group flag for correlated trace messages, e.g. showing messages for SGML and HTML at the same time. <PRE> #define UTIL_TRACE (WWWTRACE & SHOW_UTIL_TRACE) #define APP_TRACE (WWWTRACE & SHOW_APP_TRACE) #define CACHE_TRACE (WWWTRACE & SHOW_CACHE_TRACE) #define SGML_TRACE (WWWTRACE & SHOW_SGML_TRACE) #define BIND_TRACE (WWWTRACE & SHOW_BIND_TRACE) #define THD_TRACE (WWWTRACE & SHOW_THREAD_TRACE) #define STREAM_TRACE (WWWTRACE & SHOW_STREAM_TRACE) #define PROT_TRACE (WWWTRACE & SHOW_PROTOCOL_TRACE) #define MEM_TRACE (WWWTRACE & SHOW_MEM_TRACE) #define URI_TRACE (WWWTRACE & SHOW_URI_TRACE) #define AUTH_TRACE (WWWTRACE & SHOW_AUTH_TRACE) #define ANCH_TRACE (WWWTRACE & SHOW_ANCHOR_TRACE) #define PICS_TRACE (WWWTRACE & SHOW_PICS_TRACE) #define CORE_TRACE (WWWTRACE & SHOW_CORE_TRACE) #define MUX_TRACE (WWWTRACE & SHOW_MUX_TRACE) #define SQL_TRACE (WWWTRACE & SHOW_SQL_TRACE) #define XML_TRACE (WWWTRACE & SHOW_XML_TRACE) #define ALL_TRACE (WWWTRACE & SHOW_ALL_TRACE) </PRE> <H3> Destination for Trace Messages </H3> <P> You can send trace messages to various destinations depending on the type of your application. By default, on Unix the messages are sent to <CODE>stderr</CODE> using <CODE>fprintf</CODE>. If we are on MSWindows and have a windows applications then register a <CODE>HTTraceCallback</CODE> function. This is done with <CODE>HTTrace_setCallback</CODE>. It tells <CODE>HTTrace</CODE> to call a <CODE>HTTraceCallback</CODE>. If <CODE>HTDEBUG</CODE> is not defined then don't do any of the above. <PRE> typedef int HTTraceCallback(const char * fmt, va_list pArgs); extern void HTTrace_setCallback(HTTraceCallback * pCall); extern HTTraceCallback * HTTrace_getCallback(void); </PRE> <P> The <CODE>HTTRACE</CODE> macro uses "<CODE>_</CODE>" as parameter separater instead of "<CODE>,</CODE>". This enables us to use a single macro instead of a macro for each number of arguments which we consider a more elegant and flexible solution. The implication is, however, that we can't have variables that start or end with an "<CODE>_</CODE>" if they are to be used in a trace message. <PRE> #ifdef HTDEBUG #undef _ #define _ , #define HTTRACE(TYPE, FMT) \ do { if (TYPE) HTTrace(FMT); } while (0); extern int HTTrace(const char * fmt, ...); #else #define HTTRACE(TYPE, FMT) /* empty */ #endif /* HTDEBUG */ </PRE> <H3> Data Trace Logging </H3> <P> A similar mechanism exists for logging data, except that is adds a data and length argument to the trace call. Again, you can register your own callbacks if need be. <PRE> typedef int HTTraceDataCallback(char * data, size_t len, char * fmt, va_list pArgs); extern void HTTraceData_setCallback(HTTraceDataCallback * pCall); extern HTTraceDataCallback * HTTraceData_getCallback(void); </PRE> <P> Again we use the same macro expansion mechanism as for <CODE>HTTrace</CODE> <PRE> #ifdef HTDEBUG #define HTTRACEDATA(DATA, LEN, FMT) HTTraceData((DATA), (LEN), FMT) extern int HTTraceData(char * data, size_t len, char * fmt, ...); #else #define HTTRACEDATA(DATA, LEN, FMT) /* empty */ #endif /* HTDEBUG */ </PRE> <H3> Debug Breaks </H3> <P> Call this function and the program halts. We use the same macro expansion mechanism as for <CODE>HTTrace</CODE> <PRE> extern void HTDebugBreak(char * file, unsigned long line, const char * fmt, ...); #ifdef HTDEBUG #define HTDEBUGBREAK(FMT) HTDebugBreak(__FILE__, __LINE__, FMT) #else #define HTDEBUGBREAK(FMT) /* empty */ #endif /* HTDEBUG */ </PRE> <H2> Macros for Function Declarations </H2> <P> These function prefixes are used by scripts and other tools and helps figuring out which functions are exported and which are not. See also the <A HREF="../User/Style/Macros.html">libwww style guide</A>. <PRE> #define PUBLIC /* Accessible outside this module */ #define PRIVATE static /* Accessible only within this module */ </PRE> <H2> Often used Interger Macros </H2> <H3> Min and Max functions </H3> <PRE> #ifndef HTMIN #define HTMIN(a,b) ((a) &lt;= (b) ? (a) : (b)) #define HTMAX(a,b) ((a) &gt;= (b) ? (a) : (b)) #endif </PRE> <H3> Double abs function </H3> <PRE> #ifndef HTDABS #define HTDABS(a) ((a) &lt; 0.0 ? (-(a)) : (a)) #endif </PRE> <P> <A NAME="ReturnCodes"></A> <H2> <A NAME="return">Return Codes for Protocol Modules and Streams</A> </H2> <P> Theese are the codes returned from the protocol modules, and the stream modules. Success are (&gt;=0) and failure are (&lt;0) <PRE> #define HT_OK 0 /* Generic success */ #define HT_ALL 1 /* Used by Net Manager */ #define HT_CONTINUE 100 /* Continue an operation */ #define HT_UPGRADE 101 /* Switching protocols */ #define HT_LOADED 200 /* Everything's OK */ #define HT_CREATED 201 /* New object is created */ #define HT_ACCEPTED 202 /* Accepted */ #define HT_NO_DATA 204 /* OK but no data was loaded */ #define HT_RESET_CONTENT 205 /* Reset content */ #define HT_PARTIAL_CONTENT 206 /* Partial Content */ #define HT_MULTIPLE_CHOICES 300 /* Multiple choices */ #define HT_PERM_REDIRECT 301 /* Permanent redirection */ #define HT_FOUND 302 /* Found */ #define HT_SEE_OTHER 303 /* See other */ #define HT_NOT_MODIFIED 304 /* Not Modified */ #define HT_USE_PROXY 305 /* Use Proxy */ #define HT_PROXY_REDIRECT 306 /* Proxy Redirect */ #define HT_TEMP_REDIRECT 307 /* Temporary redirect */ #define HT_IGNORE 900 /* Ignore this in the Net manager */ #define HT_CLOSED 901 /* The socket was closed */ #define HT_PENDING 902 /* Wait for connection */ #define HT_RELOAD 903 /* If we must reload the document */ #define HT_ERROR -1 /* Generic failure */ #define HT_NO_ACCESS -401 /* Unauthorized */ #define HT_FORBIDDEN -403 /* Access forbidden */ #define HT_NOT_FOUND -404 /* Not found */ #define HT_NOT_ACCEPTABLE -406 /* Not Acceptable */ #define HT_NO_PROXY_ACCESS -407 /* Proxy Authentication Failed */ #define HT_CONFLICT -409 /* Conflict */ #define HT_LENGTH_REQUIRED -411 /* Length required */ #define HT_PRECONDITION_FAILED -412 /* Precondition failed */ #define HT_TOO_BIG -413 /* Request entity too large */ #define HT_URI_TOO_BIG -414 /* Request-URI too long */ #define HT_UNSUPPORTED -415 /* Unsupported */ #define HT_BAD_RANGE -416 /* Request Range not satisfiable */ #define HT_EXPECTATION_FAILED -417 /* Expectation Failed */ #define HT_REAUTH -418 /* Reauthentication required */ #define HT_PROXY_REAUTH -419 /* Proxy Reauthentication required */ #define HT_RETRY -503 /* If service isn't available */ #define HT_BAD_VERSION -505 /* Bad protocol version */ #define HT_INTERNAL -900 /* Weird -- should never happen. */ #define HT_WOULD_BLOCK -901 /* If we are in a select */ #define HT_INTERRUPTED -902 /* Note the negative value! */ #define HT_PAUSE -903 /* If we want to pause a stream */ #define HT_RECOVER_PIPE -904 /* Recover pipe line */ #define HT_TIMEOUT -905 /* Connection timeout */ #define HT_NO_HOST -906 /* Can't locate host */ </PRE> <H2> Upper- and Lowercase macros </H2> <P> The problem here is that toupper(x) is not defined officially unless isupper(x) is. These macros are CERTAINLY needed on #if defined(pyr) || define(mips) or BDSI platforms. For safefy, we make them mandatory. <PRE> #ifndef TOLOWER #define TOLOWER(c) tolower((int) (c)) #define TOUPPER(c) toupper((int) (c)) #endif </PRE> <H2> Max and Min values for Integers and Floating Point </H2> <PRE> #ifdef FLT_EPSILON /* The ANSI C way define */ #define HT_EPSILON FLT_EPSILON #else #define HT_EPSILON 0.00000001 #endif </PRE> <H2> The local equivalents of CR and LF </H2> <P> We can check for these after net ascii text has been converted to the local representation. Similarly, we include them in strings to be sent as net ascii after translation. <PRE> #define LF FROMASCII('\012') /* ASCII line feed LOCAL EQUIVALENT */ #define CR FROMASCII('\015') /* Will be converted to ^M for transmission */ </PRE> <H2> Library Dynamic Memory Magement </H2> <P> The Library has it's own dynamic memory API which is declared in <A HREF="HTMemory.html">memory management module</A>. <PRE> #include "HTMemory.h" </PRE> <PRE> #endif /* HT_UTILS.h */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTUtils.html,v 2.92 2025/01/06 10:48:50 kahan Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTWAIS.c�������������������������������������������������������������������������0100644�0000764�0000144�00000107711�06664352704�015132� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTWAIS.c ** WORLDWIDEWEB - WIDE AREA INFORMAION SERVER ACCESS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTWAIS.c,v 2.58 2025/02/22 22:10:12 frystyk Exp $ ** ** This module allows a WWW server or client to read data from a ** remote WAIS server, and provide that data to a WWW client in ** hypertext form. Source files, once retrieved, are stored and used ** to provide information about the index when that is acessed. ** ** Authors ** BK Brewster Kahle, Thinking Machines, <Brewster@think.com> ** TBL Tim Berners-Lee, CERN <timbl@w3.org> ** ** Contributors ** QL QingLong, Yggdrasil Inc., <qinglong@Yggdrasil.com> ** ** History ** Sep 91 TBL adapted shell-ui.c (BK) with HTRetrieve.c from WWW. ** Feb 91 TBL Generated HTML cleaned up a bit (quotes, escaping) ** Refers to lists of sources. ** Mar 93 TBL Lib 2.0 compatible module made. ** May 95 CHJ modified for freeWAIS-0.5 ** Jun 97 QL modified for w3c-libwww-5.0a. ** Mar 98 QL modified for w3c-libwww-5.1i. ** ** Bugs ** Uses C stream i/o to read and write sockets, which won't work ** on VMS TCP systems. ** ** Should cache connections. ** ** ANSI C only as written ** ** Bugs fixed ** NT Nathan Torkington (Nathan.Torkington@vuw.ac.nz) ** ** WAIS comments: ** ** 1. Separate directories for different system's .o would help ** 2. Document ids are rather long! ** ** WWW Address mapping convention: ** ** /servername/database/type/length/document-id ** ** /servername/database?word+word+word */ /* WIDE AREA INFORMATION SERVER SOFTWARE: No guarantees or restrictions. See the readme file for the full standard disclaimer. Brewster@think.com */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWHTML.h" #include "HTReqMan.h" #ifndef HT_DIRECT_WAIS PUBLIC int HTLoadWAIS (SOCKET soc, HTRequest* request) { return HT_ERROR; } #else #ifdef HAVE_WAIS_WAIS_H #include "wais/wais.h" #else #ifdef HAVE_WAIS_H #include "wais.h" #else #ifdef WAIS_INCLUDE #include WAIS_INCLUDE #else #include "wais/wais.h" #endif #endif #endif #define DIRECTORY "/cnidr.org:210/directory-of-servers" #define BIG 1024 /* identifier size limit @@@@@ */ /* From WAIS ** --------- */ #undef MAX_MESSAGE_LEN #define MAX_MESSAGE_LEN 100000 #undef CHARS_PER_PAGE #define CHARS_PER_PAGE 10000 /* number of chars retrieved in each request */ #undef WAISSEARCH_DATE #define WAISSEARCH_DATE "Fri Jul 19 1991" /* FROM WWW ** -------- */ #define BUFFER_SIZE 4096 /* Arbitrary size for efficiency */ #define LINE_BUFFER_SIZE 2048 #define HEX_ESCAPE '%' extern FILE * logfile; /* Log file output */ PRIVATE int HTMaxWAISLines = 200; /* Max number of entries from a search */ /* Hypertext object building machinery */ #define PUTC(c) (*target->isa->put_character)(target, c) #define PUTS(s) (*target->isa->put_string)(target, s) #define START(e) (*target->isa->start_element)(target, e, 0, 0) #define END(e) (*target->isa->end_element)(target, e) #define FREE_TARGET (*target->isa->_free)(target) /* * Type definitions and global variables etc. local to this module */ /* Final states have negative value */ typedef enum _HTWAISState { HTWAIS_ERROR = -2, HTWAIS_OK = -1, HTWAIS_BEGIN = 0, HTWAIS_PARSING_URL = 1, HTWAIS_NEED_CONNECTION = 2, HTWAIS_NEED_REQUEST = 3, HTWAIS_NEED_RESPONSE = 4, HTWAIS_PARSING_RESPONSE = 5, HTWAIS_FETCH_DOCUMENT = 6, HTWAIS_CLEANUP = 7 } HTWAISState; /* * This is the context structure for this module */ typedef struct _wais_info { BOOL as_gate; /* Client is using us as gateway */ HTWAISState state; /* Current State */ int result; /* Result to report to the after filter */ HTNet* net; /* Net object */ FILE* connection; char* names; /* Copy of arg to be hacked up */ char* basetitle; char* wais_database; /* name of current database */ char* www_database; /* Same name escaped */ char* request_message; /* arbitrary message limit */ char* response_message; /* arbitrary message limit */ } wais_info; struct _HTStream { const HTStreamClass* isa; HTStream* target; HTRequest* request; wais_info* wais; int status; /* ... */ }; struct _HTInputStream { const HTInputStreamClass * isa; }; struct _HTStructured { const HTStructuredClass * isa; /* ... */ }; /* ------------------------------------------------------------------------- */ /* Auxilliary Functions */ /* ------------------------------------------------------------------------- */ /* HTshowDiags */ /* modified from Jonny G's version in ui/question.c */ void HTshowDiags ( HTStream * target, diagnosticRecord ** d) { long i; for (i = 0; d[i] != NULL; i++) { if (d[i]->ADDINFO != NULL) { PUTS("Diagnostic code is "); PUTS(d[i]->DIAG); PUTC(' '); PUTS(d[i]->ADDINFO); PUTC('\n'); ; } } } /* Matrix of allowed characters in filenames ** ----------------------------------------- */ PRIVATE BOOL acceptable[256]; PRIVATE BOOL acceptable_inited = NO; PRIVATE void init_acceptable (void) { unsigned int i; char * good = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./-_$"; if (acceptable_inited == YES) return; for(i=256; i--; ) acceptable[i] = NO; for(;*good; good++) acceptable[(unsigned int)*good] = YES; acceptable_inited = YES; } /* Transform file identifier into WWW address ** ------------------------------------------ ** ** ** On exit, ** returns nil if error ** pointer to malloced string (must be freed) if ok */ char * WWW_from_archie (char * file) { char * end; char * result; char * colon; for(end=file; *end > ' '; end++); /* assumes ASCII encoding*/ if ((result = (char *) HT_MALLOC(10 + (end-file))) == NULL) HT_OUTOFMEM("result "); if (!result) return result; /* Malloc error */ strcpy(result, "file://"); strncat(result, file, end-file); colon = strchr(result+7, ':'); /* Expect colon after host */ if (colon) { for(; colon[0]; colon[0]=colon[1], colon++); /* move down */ } return result; } /* WWW_from_archie */ /* Transform document identifier into URL ** -------------------------------------- ** ** Bugs: A static buffer of finite size is used! ** The format of the docid MUST be good! ** ** On exit, ** returns nil if error ** pointer to malloced string (must be freed) if ok */ PRIVATE char hex [17] = "0123456789ABCDEF"; PRIVATE char * WWW_from_WAIS (any * docid) { static unsigned char buf[BIG]; char num[10]; unsigned char * q = buf; char * p = (docid->bytes); int i, l; #ifdef HTDEBUG if (PROT_TRACE) { char *p; HTTRACE(PROT_TRACE, "HTLoadWAIS.. id (%d bytes) is " _ (int)docid->size); for(p=docid->bytes; p<docid->bytes+docid->size; p++) { if ((*p >= ' ') && (*p<= '~')) /* Assume ASCII! */ HTTRACE(PROT_TRACE, "%c" _ *p); else HTTRACE(PROT_TRACE, "<%x>" _ (unsigned)*p); } HTTRACE(PROT_TRACE, "\n"); } #endif /* HTDEBUG */ for (p=docid->bytes; (p<docid->bytes+docid->size) && (q<&buf[BIG]);) { HTTRACE(PROT_TRACE, "............ Record type %d, length %d\n" _ (unsigned char) p[0] _ (unsigned char) p[1]); sprintf(num, "%d", (int)*p); memcpy(q, num, strlen(num)); q += strlen(num); p++; *q++ = '='; /* Separate */ l = (int)((unsigned char)*p); p++; if (l > 127) { l = (l - 128) * 128; l = l + (int)((unsigned char)*p); p++; } for (i = 0; i < l; i++, p++) { if (!acceptable[(unsigned char)*p]) { *q++ = HEX_ESCAPE; *q++ = hex[((unsigned char)*p) >> 4]; *q++ = hex[((unsigned char)*p) & 15]; } else *q++ = (unsigned char)*p; } *q++= ';'; /* Terminate field */ #ifdef OLD_CODE if (*p>10) { HTTRACE(PROT_TRACE, "WAIS........ DOCID record type of %d!\n" _ *p); return 0; } { /* Bug fix -- allow any byte value 15 Apr 93 */ unsigned int i = (unsigned) *p++; if (i > 99) { *q++ = (i/100) + '0'; i = i % 100; } if (i > 9) { *q++ = (i/10) + '0'; i = i % 10; } *q++ = i + '0'; /* Record type */ } *q++ = '='; /* Separate */ l = *p++; /* Length */ for(i=0; i<l; i++, p++){ if (!acceptable[(int)*p]) { *q++ = HEX_ESCAPE; /* Means hex commming */ *q++ = hex[(*p) >> 4]; *q++ = hex[(*p) & 15]; } else *q++ = *p; } *q++= ';'; /* Terminate field */ #endif /* OLD_CODE */ } *q++ = 0; /* Terminate string */ HTTRACE(PROT_TRACE, "HTLoadWAIS.. WWW form of id: %s\n" _ buf); { char *result; if ((result = (char *) HT_MALLOC((int) strlen((char *) buf)+1))==NULL) HT_OUTOFMEM("WWW_from_WAIS"); strcpy(result, (char *) buf); return result; } } /* WWW_from_WAIS */ /* Transform URL into WAIS document identifier ** ------------------------------------------- ** ** On entry, ** docname points to valid name produced originally by ** WWW_from_WAIS ** On exit, ** docid->size is valid ** docid->bytes is malloced and must later be freed. */ PRIVATE any * WAIS_from_WWW (any * docid, char * docname) { char *z; /* Output pointer */ char *sor; /* Start of record - points to size field. */ char *p; /* Input pointer */ char *q; /* Poisition of "=" */ char *s; /* Position of semicolon */ int n; /* size */ HTTRACE(PROT_TRACE, "HTLoadWAIS.. WWW id (to become WAIS id): %s\n" _ docname); for(n=0, p = docname; *p; p++) { /* Count sizes of strings */ n++; if (*p == ';') n--; /* Not converted */ else if (*p == HEX_ESCAPE) n=n-2; /* Save two bytes */ docid->size = n; } /* result record */ if ((docid->bytes = (char *) HT_MALLOC(docid->size+32)) == NULL) HT_OUTOFMEM("docid->bytes"); z = docid->bytes; for(p = docname; *p; ) { q = strchr(p, '='); if (!q) return 0; *q = '\0'; *z++ = atoi(p); *q = '='; s = strchr(q, ';'); /* (Check only) */ if (!s) return 0; /* Bad! No ';'; */ sor = z; /* Remember where the size field was */ z++; /* Skip record size for now */ { int len; int tmp; for(p=q+1; *p!=';' ; ) { if (*p == HEX_ESCAPE) { char c; unsigned int b; p++; c = *p++; b = HTAsciiHexToChar(c); c = *p++; if (!c) break; /* Odd number of chars! */ *z++ = (b<<4) + HTAsciiHexToChar(c); } else { *z++ = *p++; /* Record */ } } len = (z-sor-1); z = sor; if (len > 127) { tmp = (len / 128); len = len - (tmp * 128); tmp = tmp + 128; *z++ = (char)tmp; *z = (char)len; } else { *z = (char)len; } z++; } for(p=q+1; *p!=';' ; ) { if (*p == HEX_ESCAPE) { char c; unsigned int b; p++; c = *p++; b = HTAsciiHexToChar(c); c = *p++; if (!c) break; /* Odd number of chars! */ *z++ = (b<<4) + HTAsciiHexToChar(c); } else { *z++ = *p++; /* Record */ } } p++; /* After semicolon: start of next record */ } #ifdef OLD_CODE for(p = docname; *p; ) { /* Convert of strings */ /* Record type */ *z = 0; /* Initialize record type */ while (*p >= '0' && *p <= '9') { *z = *z*10 + (*p++ - '0'); /* Decode decimal record type */ } z++; if (*p != '=') return 0; q = p; /* *z++ = *p++ - '0'; q = strchr(p , '='); if (!q) return 0; */ s = strchr(q, ';'); /* (Check only) */ if (!s) return 0; /* Bad! No ';'; */ sor = z; /* Remember where the size field was */ z++; /* Skip record size for now */ for(p=q+1; *p!=';' ; ) { if (*p == HEX_ESCAPE) { char c; unsigned int b; p++; c = *p++; b = HTAsciiHexToChar(c); c = *p++; if (!c) break; /* Odd number of chars! */ *z++ = (b<<4) + HTAsciiHexToChar(c); } else { *z++ = *p++; /* Record */ } } *sor = (z-sor-1); /* Fill in size -- not counting size itself */ p++; /* After semicolon: start of next record */ } #endif /* OLD_CODE */ #ifdef HTDEBUG if (PROT_TRACE) { char *p; HTTRACE(PROT_TRACE, "WAIS........ id (%d bytes) is " _ (int)docid->size); for(p=docid->bytes; p<docid->bytes+docid->size; p++) { if ((*p >= ' ') && (*p<= '~')) /* Assume ASCII! */ HTTRACE(PROT_TRACE, "%c" _ *p); else HTTRACE(PROT_TRACE, "<%x>" _ (unsigned)*p); } HTTRACE(PROT_TRACE, "\n"); } #endif /* HTDEBUG */ return docid; /* Ok */ } /* WAIS_from_WWW */ /* Send a plain text record to the client output_text_record() ** -------------------------------------- */ PRIVATE void output_text_record ( HTStream * target, WAISDocumentText * record, boolean quote_string_quotes, boolean binary) { long count; if (binary) { (*target->isa->put_block)(target, record->DocumentText->bytes, record->DocumentText->size); return; } for(count = 0; count < record->DocumentText->size; count++){ long ch = (unsigned char)record->DocumentText->bytes[count]; if (ch == 27) { /* What is this in for? Tim */ /* then we have an escape code */ /* if the next letter is '(' or ')', then ignore two letters */ if('(' == record->DocumentText->bytes[count + 1] || ')' == record->DocumentText->bytes[count + 1]) count += 1; /* it is a term marker */ else count += 4; /* it is a paragraph marker */ } else if (ch == '\n' || ch == '\r') { PUTC('\n'); } else if ((ch=='\t') || isprint(ch)){ PUTC(ch); } } } /* output text record */ /* Format A Search response for the client display_search_response ** --------------------------------------- ** modified from tracy shen's version in wutil.c ** displays either a text record or a set of headlines. */ void display_search_response (HTStructured * target, SearchResponseAPDU * response, char * database, char * keywords) { WAISSearchResponse *info; long i, k; char line[LINE_BUFFER_SIZE]; /* For building strings to display */ BOOL archie = strstr(database, "archie")!=0; /* Specical handling */ HTTRACE(PROT_TRACE, "WAIS........ Displaying search response\n"); sprintf(line, "Index %s contains the following %d item%s relevant to '%s'.\n", database, (int)(response->NumberOfRecordsReturned), response->NumberOfRecordsReturned ==1 ? "" : "s", keywords); PUTS(line); PUTS("The first figure for each entry is its relative score, "); PUTS("the second the number of lines in the item."); START(HTML_MENU); if ( response->DatabaseDiagnosticRecords != 0 ) { info = (WAISSearchResponse *)response->DatabaseDiagnosticRecords; i =0; if (info->Diagnostics != NULL) HTshowDiags((HTStream*)target, info->Diagnostics); if ( info->DocHeaders != 0 ) { for (k=0; info->DocHeaders[k] != 0; k++ ) { WAISDocumentHeader* head = info->DocHeaders[k]; char * headline = trim_junk(head->Headline); any * docid = head->DocumentID; char * docname; /* printable version of docid */ i++; /* Make a printable string out of the document id. */ HTTRACE(PROT_TRACE, "HTWAIS: %2ld: Score: %4ld, lines:%4ld '%s'\n" _ i _ (long int)(info->DocHeaders[k]->Score) _ (long int)(info->DocHeaders[k]->Lines) _ headline); START(HTML_LI); sprintf(line, "%4ld %4ld ", head->Score, head->Lines); PUTS(line); if (archie) { char * www_name = WWW_from_archie(headline); if (www_name) { HTStartAnchor(target, NULL, www_name); PUTS(headline); END(HTML_A); HT_FREE(www_name); } else { PUTS(headline); PUTS(" (bad file name)"); } } else { /* Not archie */ docname = WWW_from_WAIS(docid); if (docname) { char * dbname = HTEscape(database, URL_XPALPHAS); char types_array[1000]; /* bad */ char *type_escaped; types_array[0] = 0; if (head->Types) { int i; for (i = 0; head->Types[i]; i++) { if (i) strcat (types_array, ","); type_escaped = HTEscape (head->Types[i], URL_XALPHAS); strcat (types_array, type_escaped); HT_FREE(type_escaped); } HTTRACE(PROT_TRACE, "WAIS........ Types_array `%s\'\n" _ types_array); } else { strcat (types_array, "TEXT"); } sprintf(line, "%s/%s/%d/%s", dbname, types_array, (int)(head->DocumentLength), docname); #ifdef OLD_CODE sprintf(line, "%s/%s/%d/%s", /* W3 address */ dbname, head->Types ? head->Types[0] : "TEXT", (int)(head->DocumentLength), docname); #endif /* OLD_CODE */ HTStartAnchor(target, NULL, ( (head->Types) && (!strcmp(head->Types[0], "URL"))) ? headline : line); /* NT, Sep 93 */ PUTS(headline); END(HTML_A); HT_FREE(dbname); HT_FREE(docname); } else { PUTS("(bad doc id)"); } } } /* next document header */ } /* if there were any document headers */ if ( info->ShortHeaders != 0 ) { k =0; while (info->ShortHeaders[k] != 0 ) { i++; PUTS( "(Short Header record, can't display)"); } } if ( info->LongHeaders != 0 ) { k =0; while (info->LongHeaders[k] != 0) { i++; PUTS( "\nLong Header record, can't display\n"); } } if ( info->Text != 0 ) { k =0; while (info->Text[k] != 0) { i++; PUTS( "\nText record\n"); output_text_record((HTStream*)target, info->Text[k++], false, false); } } if ( info->Headlines != 0 ) { k =0; while (info->Headlines[k] != 0) { i++; PUTS( "\nHeadline record, can't display\n"); /* dsply_headline_record( info->Headlines[k++]); */ } } if ( info->Codes != 0 ) { k =0; while (info->Codes[k] != 0) { i++; PUTS( "\nCode record, can't display\n"); /* dsply_code_record( info->Codes[k++]); */ } } } /* Loop: display user info */ END(HTML_MENU); PUTC('\n'); ; } /* HTWAISCleanup ** ----------- ** This function closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE int HTWAISCleanup (HTRequest *req, int status) { HTNet* net; HTStream* input; wais_info* theWAISinfo = NULL; if (req) { net = HTRequest_net(req); input = HTRequest_inputStream(req); /* Free stream with data TO network */ if (HTRequest_isDestination(req)) HTRequest_removeDestination(req); else if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); HTRequest_setInputStream(req, NULL); } if (net) { if ((theWAISinfo = (wais_info*)HTNet_context(net))) { theWAISinfo->state = HTWAIS_CLEANUP; if (theWAISinfo->connection) close_connection_to_server(theWAISinfo->connection); if (theWAISinfo->wais_database) HT_FREE(theWAISinfo->wais_database); if (theWAISinfo->request_message) s_free(theWAISinfo->request_message); if (theWAISinfo->response_message) s_free(theWAISinfo->response_message); HT_FREE(theWAISinfo->names); HT_FREE(theWAISinfo->basetitle); if (status < 0) { HTParentAnchor* anchor; char* unescaped = NULL; void* err_par; unsigned int err_par_length; if ((anchor = HTRequest_anchor(req))) /* Be robust */ { char* arg; if ((arg = HTAnchor_physical(anchor))) { StrAllocCopy(unescaped, arg); HTUnEscape(unescaped); } } if (unescaped) { err_par = (void*)unescaped; err_par_length = (unsigned int)(strlen(unescaped)); } else { err_par = (void*)"???"; err_par_length = 3; } HTRequest_addError(req, ERR_FATAL, NO, HTERR_INTERNAL, err_par, err_par_length, "HTLoadWAIS"); if (unescaped) HT_FREE(unescaped); } /* Free and remove our own context structure for wais */ HT_FREE(theWAISinfo); HTNet_setContext(net, NULL); } /* End ``if (theWAISinfo)'' */ /* Remove the request object */ HTNet_delete(net, status); } return YES; } else return NO; } /* Load Document from WAIS Server HTLoadWAIS() ** ------------------------------ ** ** On entry, ** request This is the request structure ** On exit, ** returns <0 Error has occured ** HT_LOADED OK */ #define MAX_KEYWORDS_LENGTH 4000 #define MAX_SERVER_LENGTH 1000 #define MAX_DATABASE_LENGTH 1000 #define MAX_SERVICE_LENGTH 1000 PRIVATE int HTWAISEvent(SOCKET soc, void * pVoid, HTEventType type) { wais_info* theWAISinfo; /* Specific protocol information */ HTNet* net; /* Generic protocol information */ HTRequest* request; HTParentAnchor* anchor; const char * arg; HTStream* sink; HTFormat format_out; #if 0 static const char * error_header = "<h1>Access error</h1>\n<p>The following error occured in accesing a WAIS server:\n</p>\n"; #endif char* key; /* pointer to keywords in URL */ long request_buffer_length; /* how of the request is left */ SearchResponseAPDU* retrieval_response = 0; char keywords[MAX_KEYWORDS_LENGTH + 1]; char* server_name = NULL; char* service; char* docname = NULL; char* doctype = NULL; long document_length = -1; BOOL ok = NO; int status = HT_ERROR; #if 0 FILE* connection = 0; char* names; /* Copy of arg to be hacked up */ char* basetitle = NULL; char* wais_database = NULL; /* name of current database */ char* www_database = NULL; /* Same name escaped */ char* request_message = NULL; /* arbitrary message limit */ char* response_message = NULL; /* arbitrary message limit */ #endif #if 0 extern FILE * connect_to_server(); #endif if ((theWAISinfo = (wais_info*)pVoid)) /* Be robust */ { if ((net = theWAISinfo->net) == NULL) return HT_ERROR; if ((request = HTNet_request(net)) == NULL) return HT_ERROR; if ((anchor = HTRequest_anchor(request))) arg = HTAnchor_physical(anchor); else return HT_ERROR; sink = HTRequest_outputStream(request); format_out = HTRequest_outputFormat(request); } else return HT_ERROR; if (type == HTEvent_BEGIN) { theWAISinfo->state = HTWAIS_BEGIN; theWAISinfo->result = HT_ERROR; } else if (type == HTEvent_CLOSE) { /* Interrupted */ char interrupted[] = "request interruption"; HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED, (void*)interrupted, (unsigned int)strlen(interrupted), "HTLoadWAIS"); HTWAISCleanup(request, HT_INTERRUPTED); return HT_OK; } else if (type == HTEvent_END) { HTWAISCleanup(request, (theWAISinfo ? theWAISinfo->result : HT_ERROR)); return HT_OK; } /* Decipher and check syntax of WWW address: ** ---------------------------------------- ** ** First we remove the "wais:" if it was spcified. 920110 */ if (!acceptable_inited) init_acceptable(); theWAISinfo->state = HTWAIS_PARSING_URL; HTTRACE(PROT_TRACE, "HTLoadWAIS.. Looking for \"%s\"\n" _ arg); theWAISinfo->names = HTParse(arg, "", PARSE_HOST | PARSE_PATH | PARSE_PUNCTUATION); key = strchr(theWAISinfo->names, '?'); if (key) { char* p; *key++ = 0; /* Split off keywords */ for (p=key; *p; p++) if (*p == '+') *p = ' '; HTUnEscape(key); } if (theWAISinfo->names[0] == '/') { server_name = theWAISinfo->names+1; /* Accept one or two */ if ((theWAISinfo->as_gate = (*server_name == '/'))) server_name++; if ((theWAISinfo->www_database = strchr(server_name, '/'))) { *(theWAISinfo->www_database)++ = 0; /* Separate database name */ doctype = strchr(theWAISinfo->www_database, '/'); if (key) ok = YES; /* Don't need doc details */ else if (doctype) { /* If not search parse doc details */ char* doclength; *doctype++ = 0; /* Separate rest of doc address */ doclength = strchr(doctype, '/'); if (doclength) { *doclength++ = 0; document_length = atol(doclength); if (document_length) { docname = strchr(doclength, '/'); if (docname) { *docname++ = 0; ok = YES; /* To avoid a goto! */ } /* if docname */ } /* if document_length valid */ } /* if doclength */ } else { /* no doctype? Assume index required */ if (!key) key = ""; ok = YES; } /* if doctype */ } /* if database */ } if (!ok) { char *unescaped = NULL; StrAllocCopy(unescaped, arg); HTUnEscape(unescaped); HTRequest_addError(request, ERR_FATAL, NO, HTERR_BAD_REQUEST, (void *) unescaped, (int) strlen(unescaped), "HTLoadWAIS"); HT_FREE(unescaped); HT_FREE(theWAISinfo->names); return -1; } HTTRACE(PROT_TRACE, "HTLoadWAIS.. URL Parsed OK\n"); theWAISinfo->state = HTWAIS_NEED_CONNECTION; if ((service = strchr(theWAISinfo->names, ':'))) *service++ = 0; else service = "210"; if ((server_name ? server_name[0] : 0)) { boolean do_need_to_connect_to_server = true; if (key) if ((*key) == 0) do_need_to_connect_to_server = false; if (do_need_to_connect_to_server) { if ((theWAISinfo->connection = connect_to_server(server_name, atoi(service))) == NULL) { char* host = HTParse(arg, "", PARSE_HOST); HTTRACE(PROT_TRACE, "HTLoadWAIS.." " Can't open connection to %s via service %s.\n" _ server_name _ service); HTRequest_addError(request, ERR_FATAL, NO, HTERR_WAIS_NO_CONNECT, (void *) host, (int) strlen(host), "HTLoadWAIS"); theWAISinfo->result = HT_ERROR; HTWAISCleanup(request, status); return status; } } } else theWAISinfo->connection = NULL; StrAllocCopy(theWAISinfo->wais_database, theWAISinfo->www_database); HTUnEscape(theWAISinfo->wais_database); /* Make title name without the .src */ { char *srcstr; StrAllocCopy(theWAISinfo->basetitle, theWAISinfo->wais_database); if ((srcstr = strstr(theWAISinfo->basetitle, ".src")) != NULL) *srcstr = '\0'; } /* This below fixed size stuff is terrible */ if ((theWAISinfo->request_message = (char*)s_malloc((size_t)MAX_MESSAGE_LEN * sizeof(char))) == NULL) HT_OUTOFMEM("WAIS request message"); if ((theWAISinfo->response_message = (char*)s_malloc((size_t)MAX_MESSAGE_LEN * sizeof(char))) == NULL) HT_OUTOFMEM("WAIS response message"); /* If keyword search is performed but there are no keywords, ** the user has followed a link to the index itself. ** It would be appropriate at this point to send him the .SRC file - how? */ if (key) { if (*key) { /* * S E A R C H (nonempty key (*key != 0)) */ char *p; HTStructured* target; theWAISinfo->state = HTWAIS_NEED_RESPONSE; strncpy(keywords, key, MAX_KEYWORDS_LENGTH); while ((p = strchr(keywords,'+'))) *p = ' '; /* Send advance title to get something fast to the other end */ target = HTMLGenerator(request, NULL, WWW_HTML, format_out, sink); START(HTML_HTML); START(HTML_HEAD); START(HTML_TITLE); PUTS(keywords); PUTS(" in "); PUTS(theWAISinfo->basetitle); END(HTML_TITLE); END(HTML_HEAD); START(HTML_BODY); START(HTML_H1); PUTS("WAIS Search of \""); PUTS(keywords); PUTS("\" in "); PUTS(theWAISinfo->basetitle); END(HTML_H1); START(HTML_ISINDEX); request_buffer_length = MAX_MESSAGE_LEN; /* Amount left */ HTTRACE(PROT_TRACE, "HTLoadWAIS.. Search for `%s' in `%s'\n" _ keywords _ theWAISinfo->wais_database); if (generate_search_apdu(theWAISinfo->request_message + HEADER_LENGTH, &request_buffer_length, keywords, theWAISinfo->wais_database, NULL, HTMaxWAISLines) == NULL) { HTTRACE(PROT_TRACE, "WAIS Search. Too many lines in response\n"); HTRequest_addError(request, ERR_WARN, NO, HTERR_WAIS_OVERFLOW, NULL, 0, "HTLoadWAIS"); } if (!interpret_message(theWAISinfo->request_message, MAX_MESSAGE_LEN - request_buffer_length, theWAISinfo->response_message, MAX_MESSAGE_LEN, theWAISinfo->connection, false /* true verbose */ )) { HTTRACE(PROT_TRACE, "WAIS Search. Too many lines in response\n"); HTRequest_addError(request, ERR_WARN, NO, HTERR_WAIS_OVERFLOW, NULL, 0, "HTLoadWAIS"); } else { /* returned message ok */ SearchResponseAPDU *query_response = 0; readSearchResponseAPDU(&query_response, theWAISinfo->response_message + HEADER_LENGTH); display_search_response(target, query_response, theWAISinfo->wais_database, keywords); if (query_response->DatabaseDiagnosticRecords) freeWAISSearchResponse(query_response->DatabaseDiagnosticRecords); freeSearchResponseAPDU(query_response); } /* returned message not too large */ END(HTML_BODY); END(HTML_HTML); FREE_TARGET; HTAnchor_setFormat(anchor, WWW_HTML); theWAISinfo->result = status = HT_LOADED; } else { /* * I N D E X (key is empty (*key = 0)) */ #ifdef CACHE_FILE_PREFIX char filename[256]; FILE * fp; #endif HTStructured* target = HTMLGenerator(request, NULL, WWW_HTML, format_out, sink); theWAISinfo->state = HTWAIS_NEED_REQUEST; { START(HTML_HTML); START(HTML_HEAD); START(HTML_TITLE); PUTS(theWAISinfo->basetitle); PUTS(" Index"); END(HTML_TITLE); END(HTML_HEAD); START(HTML_BODY); START(HTML_H1); PUTS("WAIS Index: "); PUTS(theWAISinfo->basetitle); END(HTML_H1); } START(HTML_ISINDEX); /* If we have seen a source file for this database, use that: */ #ifdef CACHE_FILE_PREFIX sprintf(filename, "%sWSRC-%s:%s:%.100s.txt", CACHE_FILE_PREFIX, server_name, service, theWAISinfo->www_database); fp = fopen(filename, "r"); /* Have we found this already? */ HTTRACE(PROT_TRACE, "HTLoadWAIS.. Description of server %s %s.\n" _ filename _ fp ? "exists already" : "does NOT exist!"); if (fp) { int c; START(HTML_PRE); /* Preformatted description */ while((c=getc(fp)) != EOF) PUTC(c); /* Transfer file */ END(HTML_PRE); fclose(fp); } #endif END(HTML_BODY); END(HTML_HTML); FREE_TARGET; } HTAnchor_setFormat(anchor, WWW_HTML); theWAISinfo->result = status = HT_LOADED; } else {/* document rather than search */ /* * D O C U M E N T F E T C H (no key (key == NULL)) */ boolean binary = true; /* how to transfer stuff coming over */ HTStream* target; HTAtom* document_type_atom = HTAtom_for("application/octet-stream"); long count; any doc_chunk; any * docid = &doc_chunk; theWAISinfo->state = HTWAIS_FETCH_DOCUMENT; HTTRACE(PROT_TRACE, "HTLoadWAIS.. Retrieve document `%s'\n" "............ type `%s' length %ld\n" _ (docname ? docname : "unknown") _ (doctype ? doctype : "unknown") _ document_length); if (doctype) { if (strcmp(doctype, "WSRC") == 0) { document_type_atom = HTAtom_for("application/x-wais-source"); binary = false; } else if (strcmp(doctype, "TEXT") == 0) { document_type_atom = WWW_UNKNOWN; binary = false; } else if (strcmp(doctype, "HTML") == 0) { document_type_atom = WWW_HTML; binary = false; } else if (strcmp(doctype, "GIF") == 0) document_type_atom = WWW_GIF; } HTAnchor_setFormat(anchor, document_type_atom); /* Guess on TEXT format as it might be HTML */ if ((target = HTStreamStack(HTAnchor_format(anchor), HTRequest_outputFormat(request), HTRequest_outputStream(request), request, YES)) == NULL) { theWAISinfo->result = HT_ERROR; status = -1; HTWAISCleanup(request, status); return status; } /* Decode hex or litteral format for document ID */ WAIS_from_WWW(docid, docname); /* Loop over slices of the document */ for (count = 0; count * CHARS_PER_PAGE < document_length; count++) { char *type = s_strdup(doctype); request_buffer_length = MAX_MESSAGE_LEN; /* Amount left */ HTTRACE(PROT_TRACE, "HTLoadWAIS.. Slice number %ld\n" _ count); if (generate_retrieval_apdu(theWAISinfo->request_message + HEADER_LENGTH, &request_buffer_length, docid, CT_byte, count * CHARS_PER_PAGE, HTMIN((count + 1) * CHARS_PER_PAGE, document_length), type, theWAISinfo->wais_database) == 0) { HTRequest_addError(request, ERR_WARN, NO, HTERR_WAIS_OVERFLOW, NULL, 0, "HTLoadWAIS"); } HT_FREE(type); /* Actually do the transaction given by request_message */ if (interpret_message(theWAISinfo->request_message, MAX_MESSAGE_LEN - request_buffer_length, theWAISinfo->response_message, MAX_MESSAGE_LEN, theWAISinfo->connection, false /* true verbose */ ) == 0) { HTRequest_addError(request, ERR_WARN, NO, HTERR_WAIS_OVERFLOW, NULL, 0, "HTLoadWAIS"); } /* Parse the result which came back into memory. */ readSearchResponseAPDU(&retrieval_response, theWAISinfo->response_message + HEADER_LENGTH); { WAISSearchResponse* searchres = (WAISSearchResponse*)retrieval_response->DatabaseDiagnosticRecords; if (!searchres->Text) { if (searchres->Diagnostics && *searchres->Diagnostics && (*searchres->Diagnostics)->ADDINFO) { char *errmsg = (*searchres->Diagnostics)->ADDINFO; HTRequest_addError(request, ERR_WARN, NO, HTERR_WAIS_MODULE, (void *) errmsg, (int) strlen(errmsg), "HTLoadWAIS"); } else { HTRequest_addError(request, ERR_WARN, NO, HTERR_WAIS_MODULE, NULL, 0, "HTLoadWAIS"); } (*target->isa->_free)(target); HTRequest_setOutputStream(request, NULL); HT_FREE(docid->bytes); freeWAISSearchResponse(retrieval_response->DatabaseDiagnosticRecords); freeSearchResponseAPDU(retrieval_response); theWAISinfo->result = HT_OK; HTWAISCleanup(request, status); } else { output_text_record(target, *searchres->Text, false, binary); freeWAISSearchResponse(retrieval_response->DatabaseDiagnosticRecords); freeSearchResponseAPDU(retrieval_response); } /* If text existed */ } } /* Loop over slices */ (*target->isa->_free)(target); HTRequest_setOutputStream(request, NULL); HT_FREE(docid->bytes); theWAISinfo->result = status = HT_LOADED; } /* End ``if (key)'' */ HTWAISCleanup(request, status); return status; } PUBLIC int HTLoadWAIS (SOCKET soc, HTRequest* request) { wais_info* theWAISinfo; /* Specific protocol information */ HTNet* net; /* Generic protocol information */ HTParentAnchor* anchor; /* * Initiate a new wais structure and bind to request structure. * This is actually state HTWAIS_BEGIN, * but it can't be in the state machine, * as we need the structure first. */ if (request) { if ((anchor = HTRequest_anchor(request)) == NULL) return HT_ERROR; if ((net = HTRequest_net(request)) == NULL) return HT_ERROR; } else return HT_ERROR; HTTRACE(PROT_TRACE, "HTWAIS...... Looking for `%s\'\n" _ HTAnchor_physical(anchor)); /* Get existing copy */ if ((theWAISinfo = (wais_info*)HTNet_context(net)) == NULL) { if ((theWAISinfo = (wais_info*)HT_CALLOC(1, sizeof(wais_info))) == NULL) HT_OUTOFMEM("HTLoadWAIS"); HTNet_setEventCallback(net, HTWAISEvent); HTNet_setEventParam(net, theWAISinfo); /* callbacks get theWAISinfo* */ HTNet_setContext(net, theWAISinfo); theWAISinfo->state = HTWAIS_BEGIN; theWAISinfo->result = HT_ERROR; theWAISinfo->net = net; } /* get it started - ops is ignored */ return HTWAISEvent(soc, theWAISinfo, HTEvent_BEGIN); } #endif /* HT_DIRECT_WAIS */ �������������������������������������������������������libwww/Library/src/HTWAIS.html����������������������������������������������������������������������0100644�0000764�0000144�00000003502�06526451305�015637� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww WAIS Gateway</TITLE> </HEAD> <BODY> <H1> WAIS Gateway Interface </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module does not actually perform the WAIS protocol directly, but it does using one or more libraries of the freeWAIS distribution. The ui.a library came with the old free WAIS from TMC, the client.a and wais.a libraries are needed from the freeWAIS from <A HREF="http://www.cnidr.org">CNIDR</A>. <P> If you include this module in the library, you must also <UL> <LI> Compile the Library by including the <CODE>--with-wais </CODE>directive in the <A HREF="/">configure script</A>. <LI> Have the WAIS Library available </UL> <P> The wais source files are parsed by a separate and independent module, <A NAME="z1" HREF="HTWSRC.html">HTWSRC</A>. You can include HTWSRC without including direct wais using this module, and your WWW code will be able to read source files, and access WAIS indexes through a gateway. <P> A <A HREF="../User/WAIS.html" NAME="z2">WAIS-WWW gateway</A> is just a normal Web server with a libwww compiled with this module. <P> This module is implemented by <A HREF="HTWAIS.c">HTWAIS.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTWAIS_H #define HTWAIS_H #include "<A HREF="HTEvent.html">HTEvent.h</A>" </PRE> <H2> Control Flags </H2> <P> The number of lines handled from a WAIS search is determined by this variable. The default value is 100 (this is defined in the module) <PRE> extern int HTMaxWAISLines; extern HTProtCallback HTLoadWAIS; </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTWAIS.html,v 2.27 2025/05/14 02:11:17 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTWSRC.c�������������������������������������������������������������������������0100644�0000764�0000144�00000025212�06664352704�015140� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTWSRC.c ** PARSE WAIS SOURCE FILE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTWSRC.c,v 2.37 2025/02/22 22:10:12 frystyk Exp $ ** ** This module parses a stream with WAIS source file ** format information on it and creates a structured stream. ** That structured stream is then converted into whatever. ** ** 3 Jun 93 Bug fix: Won't crash if no description ** 8 Jul 94 FM Insulate free() from _free structure element. */ /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTMLPDTD.h" #include "HTMLGen.h" #include "HTParse.h" #include "HTReqMan.h" #include "HTProxy.h" #include "HTWSRC.h" /* Implemented here */ #define BIG 10000 /* Arbitrary limit to value length */ #define PARAM_MAX BIG #define CACHE_PERIOD (7*86400) /* Time to keep .src file in seconds */ #define HEX_ESCAPE '%' struct _HTStructured { const HTStructuredClass * isa; /* ... */ }; #define PUTC(c) (*me->target->isa->put_character)(me->target, c) #define PUTS(s) (*me->target->isa->put_string)(me->target, s) #define START(e) (*me->target->isa->start_element)(me->target, e, 0, 0) #define END(e) (*me->target->isa->end_element)(me->target, e) /* Here are the parameters which can be specified in a source file */ PRIVATE const char* par_name[] = { "version", "ip-address", #define PAR_IP_NAME 2 "ip-name", #define PAR_TCP_PORT 3 "tcp-port", #define PAR_DATABASE_NAME 4 "database-name", #define PAR_COST 5 "cost", #define PAR_COST_UNIT 6 "cost-unit", #define PAR_FREE 7 "free", #define PAR_MAINTAINER 8 "maintainer", #define PAR_DESCRIPTION 9 "description", "keyword-list", "source", #define PAR_UNKNOWN 12 "unknown", 0, /* Terminate list */ #define PAR_COUNT 13 } ; #if 0 PRIVATE const char * hex = "0123456789ABCDEF"; #endif enum tokenstate { beginning, before_tag, colon, before_value, value, bracketed_value, quoted_value, escape_in_quoted, done }; /* Stream Object ** ------------ ** ** The target is the structured stream down which the ** parsed results will go. ** ** all the static stuff below should go in here to make it reentrant */ struct _HTStream { const HTStreamClass * isa; HTStructured * target; HTRequest * request; char * par_value[PAR_COUNT]; enum tokenstate state; char param[BIG+1]; int param_number; int param_count; }; #if 0 /* Decode one hex character */ PRIVATE char from_hex (char c) { return (c>='0')&&(c<='9') ? c-'0' : (c>='A')&&(c<='F') ? c-'A'+10 : (c>='a')&&(c<='f') ? c-'a'+10 : 0; } #endif /* State machine ** ------------- ** ** On entry, ** me->state is a valid state (see WSRC_init) ** c is the next character ** On exit, ** returns 1 Done with file ** 0 Continue. me->state is updated if necessary. ** -1 Syntax error error */ /* Treat One Character ** ------------------- */ PRIVATE int WSRCParser_put_character (HTStream* me, char c) { switch (me->state) { case beginning: if (c=='(') me->state = before_tag; break; case before_tag: if (c==')') { me->state = done; return HT_OK; /* Done with input file */ } else if (c==':') { me->param_count = 0; me->state = colon; } /* Ignore other text */ break; case colon: if (isspace((int) c)) { me->param[me->param_count++] = 0; /* Terminate */ for(me->param_number = 0; par_name[me->param_number]; me->param_number++) { if (0==strcmp(par_name[me->param_number], me->param)) { break; } } if (!par_name[me->param_number]) { /* Unknown field */ HTTRACE(PROT_TRACE, "HTWSRC: Unknown field `%s' in source file\n" _ me->param); me->param_number = PAR_UNKNOWN; me->state = before_value; /* Could be better ignore */ return HT_OK; } me->state = before_value; } else { if (me->param_count < PARAM_MAX) me->param[me->param_count++] = c; } break; case before_value: if (c==')') { me->state = done; return HT_OK; /* Done with input file */ } if (isspace((int) c)) return HT_OK; /* Skip white space */ me->param_count = 0; if (c=='"') { me->state = quoted_value; break; } me->state = (c=='"') ? quoted_value : (c=='(') ? bracketed_value : value; me->param[me->param_count++] = c; /* Don't miss first character */ break; case value: if (isspace((int) c)) { me->param[me->param_count] = 0; StrAllocCopy(me->par_value[me->param_number], me->param); me->state = before_tag; } else { if (me->param_count < PARAM_MAX) me->param[me->param_count++] = c; } break; case bracketed_value: if (c==')') { me->param[me->param_count] = 0; StrAllocCopy(me->par_value[me->param_number], me->param); me->state = before_tag; break; } if (me->param_count < PARAM_MAX) me->param[me->param_count++] = c; break; case quoted_value: if (c=='"') { me->param[me->param_count] = 0; StrAllocCopy(me->par_value[me->param_number], me->param); me->state = before_tag; break; } if (c=='\\') { /* Ignore escape but switch state */ me->state = escape_in_quoted; break; } /* Fall through! */ case escape_in_quoted: if (me->param_count < PARAM_MAX) me->param[me->param_count++] = c; break; case done: /* Ignore anything after EOF */ return HT_OK; } /* switch me->state */ return HT_OK; } /* Open Cache file ** =============== ** ** Bugs: Maybe for filesystem-challenged platforms (MSDOS for example) we ** should make a hash code for the filename. */ #ifdef CACHE_FILE_PREFIX PRIVATE BOOL write_cache (HTStream * me) { FILE * fp; char cache_file_name[256]; char * www_database; if (!me->par_value[PAR_DATABASE_NAME] || !me->par_value[PAR_IP_NAME] ) return NO; www_database = HTEscape(me->par_value[PAR_DATABASE_NAME], URL_XALPHAS); sprintf(cache_file_name, "%sWSRC-%s:%s:%.100s.txt", CACHE_FILE_PREFIX, me->par_value[PAR_IP_NAME], me->par_value[PAR_TCP_PORT] ? me->par_value[PAR_TCP_PORT] : "210", www_database); HT_FREE(www_database); fp = fopen(cache_file_name, "wb"); if (!fp) return NO; if (me->par_value[PAR_DESCRIPTION]) fputs(me->par_value[PAR_DESCRIPTION], fp); else fputs("Description not available\n", fp); fclose(fp); return YES; } #endif /* Output equivalent HTML ** ---------------------- ** */ void give_parameter (HTStream * me, int p) { PUTS(par_name[p]); if (me->par_value[p]) { PUTS(": "); PUTS(me->par_value[p]); PUTS("; "); } else { PUTS(" NOT GIVEN in source file; "); } } /* Generate Outout ** =============== */ PRIVATE void WSRC_gen_html (HTStream * me, BOOL source_file) { if (me->par_value[PAR_DATABASE_NAME]) { char * shortname = NULL; int l; StrAllocCopy(shortname, me->par_value[PAR_DATABASE_NAME]); l = strlen(shortname); if ( l > 4 && !strcasecomp(shortname + l -4, ".src")) { shortname[l-4] = 0; /* Chop of .src -- boring! */ } START(HTML_TITLE); PUTS(shortname); PUTS(source_file ? " WAIS source file" : " index"); END(HTML_TITLE); START(HTML_H1); PUTS(shortname); PUTS(source_file ? " description" : " index"); END(HTML_H1); HT_FREE(shortname); /* memleak, henrik */ } START(HTML_DL); /* Definition list of details */ if (source_file) { START(HTML_DT); PUTS("Access link"); START(HTML_DD); if (me->par_value[PAR_IP_NAME] && me->par_value[PAR_DATABASE_NAME]) { char WSRC_address[256]; char *addr = HTAnchor_address((HTAnchor*) me->request->anchor); char *gate = HTGateway_find(addr); char *www_database = HTEscape(me->par_value[PAR_DATABASE_NAME], URL_XALPHAS); if (!gate) { sprintf(WSRC_address, "wais://%s%s%s/%s", me->par_value[PAR_IP_NAME], me->par_value[PAR_TCP_PORT] ? ":" : "", me->par_value[PAR_TCP_PORT] ? me->par_value[PAR_TCP_PORT] :"", www_database); HTStartAnchor(me->target, NULL, WSRC_address); PUTS("Direct access"); END(HTML_A); } else { sprintf(WSRC_address, "%s%s%s%s/%s", gate, me->par_value[PAR_IP_NAME], me->par_value[PAR_TCP_PORT] ? ":" : "", me->par_value[PAR_TCP_PORT] ? me->par_value[PAR_TCP_PORT] : "", www_database); HTStartAnchor(me->target, NULL, WSRC_address); PUTS("Through a gateway"); END(HTML_A); } HT_FREE(gate); HT_FREE(addr); HT_FREE(www_database); } else { give_parameter(me, PAR_IP_NAME); give_parameter(me, PAR_DATABASE_NAME); } } /* end if source_file */ if (me->par_value[PAR_MAINTAINER]) { START(HTML_DT); PUTS("Maintainer"); START(HTML_DD); PUTS(me->par_value[PAR_MAINTAINER]); } if (me->par_value[PAR_IP_NAME]) { START(HTML_DT); PUTS("Host"); START(HTML_DD); PUTS(me->par_value[PAR_IP_NAME]); } END(HTML_DL); if (me->par_value[PAR_DESCRIPTION]) { START(HTML_PRE); /* Preformatted description */ PUTS(me->par_value[PAR_DESCRIPTION]); END(HTML_PRE); } (*me->target->isa->_free)(me->target); return; } /* generate html */ PRIVATE int WSRCParser_put_string (HTStream * context, const char* s) { while (*s) WSRCParser_put_character(context, *s++); return HT_OK; } PRIVATE int WSRCParser_write (HTStream * context, const char* b, int l) { while (l-- > 0) WSRCParser_put_character(context, *b++); return HT_OK; } PRIVATE int WSRCParser_flush (HTStream * me) { return HT_OK; } PRIVATE int WSRCParser_free (HTStream * me) { WSRC_gen_html(me, YES); #ifdef CACHE_FILE_PREFIX write_cache(me); #endif { int p; for(p=0; par_name[p]; p++) { /* Clear out old values */ if (me->par_value[p]) { HT_FREE(me->par_value[p]); } } } HT_FREE(me); return HT_OK; } PRIVATE int WSRCParser_abort (HTStream * me, HTList * e) { WSRCParser_free(me); return HT_ERROR; } /* Stream subclass -- method routines ** --------------- */ HTStreamClass WSRCParserClass = { "WSRCParser", WSRCParser_flush, WSRCParser_free, WSRCParser_abort, WSRCParser_put_character, WSRCParser_put_string, WSRCParser_write }; /* Converter from WAIS Source to whatever ** -------------------------------------- */ PUBLIC HTStream* HTWSRCConvert (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTWSRCConvert"); me->isa = &WSRCParserClass; me->target = HTMLGenerator(request, param, input_format, output_format, output_stream); me->request = request; me->state = beginning; return me; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTWSRC.html����������������������������������������������������������������������0100644�0000764�0000144�00000002627�06526451305�015661� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww WAIS</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> </HEAD> <BODY> <H1>WAIS Source file parser</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This converter returns a <A HREF="HTStream.html">stream object</A> into which a <A HREF="http://www.w3.org/pub/Products/WAIS/Overview.html">WAIS</A> source file can be written. The result is put via a <A HREF="HTStruct.html">structured stream</A> into whatever format was required for the output stream.<P> See also: <A NAME="z4" HREF="HTWAIS.html">HTWAIS</A> protocol interface module.<P> This module is implemented by <A HREF="HTWSRC.c">HTWSRC.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTWSRC_H #define HTWSRC_H #include "HTFormat.h" extern HTConverter HTWSRCConvert; </PRE> <H2>Escaping Strings</H2> HTDeSlash takes out the invlaid characters in a URL path ELEMENT by converting them into hex-escaped characters. HTEnSlash does the reverse.<P> Each returns a pointer to a newly allocated string which must eventually be freed by the caller. <PRE> extern char * HTDeSlash (const char * str); extern char * HTEnSlash (const char * str); #endif </PRE> <HR> <ADDRESS> @(#) $Id: HTWSRC.html,v 2.18 2025/05/14 02:11:17 frystyk Exp $ </ADDRESS> </BODY> </HTML> ���������������������������������������������������������������������������������������������������������libwww/Library/src/HTWWWStr.c�����������������������������������������������������������������������0100644�0000764�0000144�00000057625�07035071422�015540� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTWWWStr.c ** WWW RELATED STRING UTILITIES ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTWWWStr.c,v 2.36 2025/01/06 10:48:50 kahan Exp $ ** ** Now 13 95 Spwaned from HTString.c */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "HTParse.h" #include "HTInet.h" #include "HTUser.h" #include "HTWWWStr.h" /* Implemented here */ PRIVATE char * months[12] = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; #ifndef HAVE_STRFTIME PRIVATE char * wkdays[7] = { "Sun","Mon","Tue","Wed","Thu","Fri","Sat" }; #endif /* ------------------------------------------------------------------------- */ /* Find next Field ** --------------- ** Finds the next RFC822 token in a string ** On entry, ** *pstr points to a string containing a word separated ** by white white space "," ";" or "=". The word ** can optionally be quoted using <"> or "<" ">" ** Comments surrrounded by '(' ')' are filtered out ** ** On exit, ** *pstr has been moved to the first delimiter past the ** field ** THE STRING HAS BEEN MUTILATED by a 0 terminator ** ** Returns a pointer to the first word or NULL on error */ PUBLIC char * HTNextField (char ** pstr) { char * p = *pstr; char * start = NULL; if (!pstr || !*pstr) return NULL; while (1) { /* Strip white space and other delimiters */ while (*p && (isspace((int) *p) || *p==',' || *p==';' || *p=='=')) p++; if (!*p) { *pstr = p; return NULL; /* No field */ } if (*p == '"') { /* quoted field */ start = ++p; for(;*p && *p!='"'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ break; /* kr95-10-9: needs to stop here */ } else if (*p == '<') { /* quoted field */ start = ++p; for(;*p && *p!='>'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ break; /* kr95-10-9: needs to stop here */ } else if (*p == '(') { /* Comment */ for(;*p && *p!=')'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ p++; } else { /* Spool field */ start = p; while(*p && !isspace((int) *p) && *p!=',' && *p!=';' && *p!='=') p++; break; /* Got it */ } } if (*p) *p++ = '\0'; *pstr = p; return start; } /* Find next LWS delimited token ** ----------------------------- ** On entry, ** *pstr points to a string containing a word separated ** by white white space "," ";" or "=". The word ** can optionally be quoted using <"> or "<" ">" ** Comments surrrounded by '(' ')' are filtered out ** ** On exit, ** *pstr has been moved to the first delimiter past the ** field ** THE STRING HAS BEEN MUTILATED by a 0 terminator ** ** Returns a pointer to the first word or NULL on error */ PUBLIC char * HTNextLWSToken (char ** pstr) { char * p = *pstr; char * start = NULL; if (!pstr || !*pstr) return NULL; /* Strip initial white space */ while (*p && (isspace((int) *p))) p++; if (!*p) { *pstr = p; return NULL; /* No field */ } /* Now search for the next white space */ start = p; while(*p && !isspace((int) *p)) p++; if (*p) *p++ = '\0'; *pstr = p; return start; } /* Find next Name-value pair ** ------------------------- ** This is the same as HTNextField but it does not look for '=' as a ** separator so if there is a name-value pair then both parts are ** returned. ** Returns a pointer to the first word or NULL on error */ PUBLIC char * HTNextPair (char ** pstr) { char * p = *pstr; char * start = NULL; if (!pstr || !*pstr) return NULL; while (1) { /* Strip white space and other delimiters */ while (*p && (*p==',' || *p==';')) p++; if (!*p) { *pstr = p; return NULL; /* No field */ } if (*p == '"') { /* quoted field */ start = ++p; for(;*p && *p!='"'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ break; /* kr95-10-9: needs to stop here */ } else if (*p == '<') { /* quoted field */ start = ++p; for(;*p && *p!='>'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ break; /* kr95-10-9: needs to stop here */ } else if (*p == '(') { /* Comment */ for(;*p && *p!=')'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ p++; } else { /* Spool field */ start = p; while(*p && *p!=',' && *p!=';') p++; break; /* Got it */ } } if (*p) *p++ = '\0'; *pstr = p; return start; } /* Find next Name-value param ** -------------------------- ** This is the same as HTNextPair but doesn't look for ',' ** Returns a pointer to the first word or NULL on error */ PUBLIC char * HTNextParam (char ** pstr) { char * p = *pstr; char * start = NULL; if (!pstr || !*pstr) return NULL; while (1) { /* Strip white space and other delimiters */ while (*p && *p==';') p++; if (!*p) { *pstr = p; return NULL; /* No field */ } if (*p == '"') { /* quoted field */ start = ++p; for(;*p && *p!='"'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ break; /* kr95-10-9: needs to stop here */ } else if (*p == '<') { /* quoted field */ start = ++p; for(;*p && *p!='>'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ break; /* kr95-10-9: needs to stop here */ } else if (*p == '(') { /* Comment */ for(;*p && *p!=')'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ p++; } else { /* Spool field */ start = p; while (*p && *p!=';') p++; break; /* Got it */ } } if (*p) *p++ = '\0'; *pstr = p; return start; } /* Find next element in a comma separated string ** --------------------------------------------- ** This is the same as HTNextPair but it does not look for anything ** else than ',' as separator ** Returns a pointer to the first word or NULL on error */ PUBLIC char * HTNextElement (char ** pstr) { char * p = *pstr; char * start = NULL; if (!pstr || !*pstr) return NULL; /* Strip white space and other delimiters */ while (*p && ((isspace((int) *p)) || *p==',')) p++; if (!*p) { *pstr = p; return NULL; /* No field */ } start = p; while (1) { if (*p == '"') { /* quoted field */ for(;*p && *p!='"'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ p++; } else if (*p == '<') { /* quoted field */ for(;*p && *p!='>'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ p++; } else if (*p == '(') { /* Comment */ for(;*p && *p!=')'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ p++; } else { /* Spool field */ while (*p && *p!=',') p++; break; /* Got it */ } } if (*p) *p++ = '\0'; *pstr = p; return start; } /* Find next "/" delimied segment ** ------------------------------ ** This is the same as HTNextField but it includes "/" as a delimiter. ** Returns a pointer to the first segment or NULL on error */ PUBLIC char * HTNextSegment (char ** pstr) { char * p = *pstr; char * start = NULL; if (!pstr || !*pstr) return NULL; while (1) { /* Strip white space and other delimiters */ while (*p && (isspace((int) *p) || *p==',' || *p==';' || *p=='=' || *p=='/')) p++; if (!*p) { *pstr = p; return NULL; /* No field */ } if (*p == '"') { /* quoted field */ start = ++p; for(;*p && *p!='"'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ break; /* kr95-10-9: needs to stop here */ } else if (*p == '<') { /* quoted field */ start = ++p; for(;*p && *p!='>'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ break; /* kr95-10-9: needs to stop here */ } else if (*p == '(') { /* Comment */ for(;*p && *p!=')'; p++) if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */ p++; } else { /* Spool field */ start = p; while(*p && !isspace((int) *p) && *p!=',' && *p!=';' && *p!='=' && *p!='/') p++; break; /* Got it */ } } if (*p) *p++ = '\0'; *pstr = p; return start; } /* ** Find the next s-expression token from a string of characters. ** We return the name of this expression and the param points to the ** parameters. ** ** NOTE: The string has been mutilated by '/0's */ PUBLIC char * HTNextSExp (char ** exp, char ** param) { char * p = *exp; char * name = NULL; if (!exp || !*exp) return NULL; while (*p && isspace((int) *p)) p++; /* Strip leading white space */ if (!*p) { *exp = p; return NULL; /* No field */ } if (*p == '{') { /* Open bracket */ int cnt = 1; /* ** Look for name of this expression. If we find a token then search ** for the rest of the expression and remove the end '}' */ p++; if ((name = HTNextField(&p)) == NULL) return NULL; while (*p && isspace((int) *p)) p++; *param = p; while (*p) { if (*p == '{') cnt++; if (*p == '}') cnt--; if (!cnt) { *p = '\0'; break; } p++; } } return name; } /* ** Returns a Message-ID string including the open '<' and the closing '>'. ** The format of the string is: ** ** "<" time-in-sec "Z" process-id "@" FQDN ">" ** ** or on systems that doesn't have process-id: ** ** "<" time-in-sec "Z" user "@" FQDN ">" ** ** Returns a pointer to the MessageID */ PUBLIC const char * HTMessageIdStr (HTUserProfile * up) { static char buf[80]; time_t sectime = time(NULL); #ifdef HAVE_GETPID const char * address = HTUserProfile_fqdn(up); #else const char * address = HTUserProfile_email(up); #endif /* HAVE_GETPID */ if (!address) address = tmpnam(NULL); if ((!address || !*address) && sectime < 0) { HTTRACE(CORE_TRACE, "MessageID... Can't make a unique MessageID\n"); return ""; } #ifdef HAVE_GETPID sprintf(buf, "<%ldZ%ld@%s>", (long)sectime, (long)getpid(), address ? address : "@@@"); #else sprintf(buf, "<%ldZ%s>", sectime, address ? address : "@@@"); #endif /* HAVE_GETPID */ *(buf+79) = '\0'; return buf; } /* Date and Time Parser ** -------------------- ** These functions are taken from the server written by Ari Luotonen */ #if 0 PRIVATE int make_num (const char * s) { if (*s >= '0' && *s <= '9') return 10 * (*s - '0') + *(s+1) - '0'; else return *(s+1) - '0'; } #endif PRIVATE int make_month (char * s, char ** ends) { char * ptr = s; while (!isalpha((int) *ptr)) ptr++; if (*ptr) { int i; *ends = ptr+3; for (i=0; i<12; i++) if (!strncasecomp(months[i], ptr, 3)) return i; } return 0; } /* ** Parse a str in GMT format to a local time time_t representation ** Four formats are accepted: ** ** Wkd, 00 Mon 0000 00:00:00 GMT (rfc1123) ** Weekday, 00-Mon-00 00:00:00 GMT (rfc850) ** Wkd Mon 00 00:00:00 0000 GMT (ctime) ** 1*DIGIT (delta-seconds) */ PUBLIC time_t HTParseTime (const char * str, HTUserProfile * up, BOOL expand) { char * s; struct tm tm; time_t t; if (!str) return 0; if ((s = strchr(str, ','))) { /* Thursday, 10-Jun-93 01:29:59 GMT */ s++; /* or: Thu, 10 Jan 2025 01:29:59 GMT */ while (*s && *s==' ') s++; if (strchr(s,'-')) { /* First format */ HTTRACE(CORE_TRACE, "Format...... Weekday, 00-Mon-00 00:00:00 GMT\n"); if ((int)strlen(s) < 18) { HTTRACE(CORE_TRACE, "ERROR....... Not a valid time format \"%s\"\n" _ s); return 0; } tm.tm_mday = strtol(s, &s, 10); tm.tm_mon = make_month(s, &s); tm.tm_year = strtol(++s, &s, 10); tm.tm_hour = strtol(s, &s, 10); tm.tm_min = strtol(++s, &s, 10); tm.tm_sec = strtol(++s, &s, 10); } else { /* Second format */ HTTRACE(CORE_TRACE, "Format...... Wkd, 00 Mon 0000 00:00:00 GMT\n"); if ((int)strlen(s) < 20) { HTTRACE(CORE_TRACE, "ERROR....... Not a valid time format \"%s\"\n" _ s); return 0; } tm.tm_mday = strtol(s, &s, 10); tm.tm_mon = make_month(s, &s); tm.tm_year = strtol(s, &s, 10) - 1900; tm.tm_hour = strtol(s, &s, 10); tm.tm_min = strtol(++s, &s, 10); tm.tm_sec = strtol(++s, &s, 10); } } else if (isdigit((int) *str)) { if (strchr(str, 'T')) { /* ISO (limited format) date string */ HTTRACE(CORE_TRACE, "Format...... YYYY.MM.DDThh:mmStzWkd\n"); s = (char *) str; while (*s && *s==' ') s++; if ((int)strlen(s) < 21) { HTTRACE(CORE_TRACE, "ERROR....... Not a valid time format `%s\'\n" _ s); return 0; } tm.tm_year = strtol(s, &s, 10) - 1900; tm.tm_mon = strtol(++s, &s, 10); tm.tm_mday = strtol(++s, &s, 10); tm.tm_hour = strtol(++s, &s, 10); tm.tm_min = strtol(++s, &s, 10); tm.tm_sec = strtol(++s, &s, 10); } else { /* delta seconds */ t = expand ? time(NULL) + atol(str) : atol(str); #ifdef HTDEBUG if (CORE_TRACE) { if (expand) { #if defined (HAVE_CTIME_R_2) char buffer[CTIME_MAX]; HTTRACE(CORE_TRACE, "Time string. Delta-time %s parsed to %ld seconds, or in local time: %s" _ str _ (long) t _ (char *) ctime_r(&t, buffer)); #elif defined(HAVE_CTIME_R_3) char buffer[CTIME_MAX]; HTTRACE(CORE_TRACE, "Time string. Delta-time %s parsed to %ld seconds, or in local time: %s" _ str _ (long) t _ (char *) ctime_r(&t, buffer, CTIME_MAX)); #else HTTRACE(CORE_TRACE, "Time string. Delta-time %s parsed to %ld seconds, or in local time: %s" _ str _ (long) t _ ctime(&t)); #endif /* HT_REENTRANT */ } else { HTTRACE(CORE_TRACE, "Time string. Delta-time %s parsed to %ld seconds\n" _ str _ (long) t); } } #endif /* HT_DEBUG */ return t; } } else { /* Try the other format: Wed Jun 9 01:29:59 1993 GMT */ HTTRACE(CORE_TRACE, "Format...... Wkd Mon 00 00:00:00 0000 GMT\n"); s = (char *) str; while (*s && *s==' ') s++; HTTRACE(CORE_TRACE, "Trying...... The Wrong time format: %s\n" _ s); if ((int)strlen(s) < 24) { HTTRACE(CORE_TRACE, "ERROR....... Not a valid time format \"%s\"\n" _ s); return 0; } tm.tm_mon = make_month(s, &s); tm.tm_mday = strtol(s, &s, 10); tm.tm_hour = strtol(s, &s, 10); tm.tm_min = strtol(++s, &s, 10); tm.tm_sec = strtol(++s, &s, 10); tm.tm_year = strtol(s, &s, 10) - 1900; } if (tm.tm_sec < 0 || tm.tm_sec > 59 || tm.tm_min < 0 || tm.tm_min > 59 || tm.tm_hour < 0 || tm.tm_hour > 23 || tm.tm_mday < 1 || tm.tm_mday > 31 || tm.tm_mon < 0 || tm.tm_mon > 11 || tm.tm_year <70 || tm.tm_year >120) { HTTRACE(CORE_TRACE, "ERROR....... Parsed illegal time: %02d.%02d.%02d %02d:%02d:%02d\n" _ tm.tm_mday _ tm.tm_mon+1 _ tm.tm_year _ tm.tm_hour _ tm.tm_min _ tm.tm_sec); return 0; } #if 0 #if defined(HAVE_TIMEZONE) && defined(HAVE_ALTZONE) tm.tm_isdst = daylight; /* Already taken into account */ HTTRACE(CORE_TRACE, "Time string. Daylight is %s\n" _ daylight>0 ? "on" : daylight==0 ? "off" : "unknown"); #endif #else /* Let mktime decide whether we have DST or not */ tm.tm_isdst = -1; #endif #ifdef HAVE_MKTIME t = mktime(&tm); t += (up ? HTUserProfile_timezone(up) : HTGetTimeZoneOffset()); #else #ifdef HAVE_TIMEGM t = timegm(&tm); #else #error "Neither mktime nor timegm defined" #endif /* HAVE_TIMEGM */ #endif /* HAVE_MKTIME */ HTTRACE(CORE_TRACE, "Time string. %s parsed to %ld calendar time or `%s' in local time\n" _ str _ (long) t _ ctime(&t)); return t; } /* ** Returns a string pointer to a static area of the current calendar ** time in RFC 1123 format, for example ** ** Sun, 06 Nov 2025 08:49:37 GMT ** ** The result can be given in both local and GMT dependent on the flag */ PUBLIC const char *HTDateTimeStr (time_t * calendar, BOOL local) { static char buf[40]; #ifdef HAVE_STRFTIME if (local) { /* ** Solaris 2.3 has a bug so we _must_ use reentrant version ** Thomas Maslen <tmaslen@verity.com> */ #if defined(HT_REENTRANT) || defined(SOLARIS) struct tm loctime; localtime_r(calendar, &loctime); strftime(buf, 40, "%a, %d %b %Y %H:%M:%S", &loctime); #else struct tm *loctime = localtime(calendar); strftime(buf, 40, "%a, %d %b %Y %H:%M:%S", loctime); #endif /* SOLARIS || HT_REENTRANT */ } else { #if defined(HT_REENTRANT) || defined(SOLARIS) struct tm gmt; gmtime_r(calendar, &gmt); strftime(buf, 40, "%a, %d %b %Y %H:%M:%S GMT", &gmt); #else struct tm *gmt = gmtime(calendar); strftime(buf, 40, "%a, %d %b %Y %H:%M:%S GMT", gmt); #endif /* SOLARIS || HT_REENTRANT */ } #else if (local) { #if defined(HT_REENTRANT) struct tm loctime; localtime_r(calendar, &loctime); #else struct tm *loctime = localtime(calendar); #endif /* HT_REENTRANT */ sprintf(buf,"%s, %02d %s %04d %02d:%02d:%02d", wkdays[loctime->tm_wday], loctime->tm_mday, months[loctime->tm_mon], loctime->tm_year + 1900, loctime->tm_hour, loctime->tm_min, loctime->tm_sec); } else { #if defined(HT_REENTRANT) || defined(SOLARIS) struct tm gmt; gmtime_r(calendar, &gmt); #else struct tm *gmt = gmtime(calendar); #endif sprintf(buf,"%s, %02d %s %04d %02d:%02d:%02d GMT", wkdays[gmt->tm_wday], gmt->tm_mday, months[gmt->tm_mon], gmt->tm_year + 1900, gmt->tm_hour, gmt->tm_min, gmt->tm_sec); } #endif return buf; } /* HTDateDirStr ** ------------ ** Generates a date string used in directory listings */ PUBLIC BOOL HTDateDirStr (time_t * time, char * str, int len) { #ifdef HAVE_STRFTIME #if defined(HT_REENTRANT) || defined(SOLARIS) struct tm loctime; localtime_r(time, &loctime); strftime(str, len, "%d-%b-%Y %H:%M", &loctime); return YES; #else strftime(str, len, "%d-%b-%Y %H:%M", localtime(time)); return YES; #endif /* HT_REENTRANT || SOLARIS */ #else if (len >= 16) { struct tm *loctime = localtime(time); sprintf(str,"%02d-%s-%02d %02d:%02d", loctime->tm_mday, months[loctime->tm_mon], loctime->tm_year % 100, loctime->tm_hour, loctime->tm_min); return YES; } return NO; #endif /* HAVE_STRFTIME */ } /* HTNumToStr ** Converts a long (byte count) to a string ** ---------------------------------------- ** This function was a PAIN! In computer-world 1K is 1024 bytes ** and 1M is 1024K -- however, sprintf() still formats in base-10. ** Therefore I output only until 999, and then start using the ** next unit. This doesn't work wrong, it's just a feature. ** The "str" must be large enough to contain the result. */ PUBLIC void HTNumToStr (unsigned long n, char * str, int len) { double size = n/1024.0; if (len < 6) { *str = '\0'; return; } if (n < 1000) sprintf(str, "%dK", n>0 ? 1 : 0); else if (size + 0.999 < 1000) sprintf(str, "%dK", (int)(size + 0.5)); else if ((size /= 1024) < 9.9) sprintf(str, "%.1fM", (size + 0.05)); else if (size < 1000) sprintf(str, "%dM", (int)(size + 0.5)); else if ((size /= 1024) < 9.9) sprintf(str, "%.1fG", (size + 0.05)); else sprintf(str, "%dG", (int)(size + 0.5)); } /* ** Matches MIME constructions for content-types and others like ** them, for example "text/html", "text/plain". It can also match ** wild cards like "text/<star>" and "<star>/<star>. We use <star> ** instead of * in order note to make C like comments :-) */ PUBLIC BOOL HTMIMEMatch (HTAtom * tmplate, HTAtom * actual) { const char *t, *a; char *st, *sa; BOOL match = NO; if (tmplate && actual && (t = HTAtom_name(tmplate))) { if (!strcmp(t, "*")) return YES; if (strchr(t, '*') && (a = HTAtom_name(actual)) && (st = strchr(t, '/')) && (sa = strchr(a,'/'))) { *sa = 0; *st = 0; if ((*(st-1)=='*' && (*(st+1)=='*' || !strcasecomp(st+1, sa+1))) || (*(st+1)=='*' && !strcasecomp(t,a))) match = YES; *sa = '/'; *st = '/'; } } return match; } /* Convert file URLs into a local representation ** --------------------------------------------- ** The URL has already been translated through the rules in get_physical ** in HTAccess.c and all we need to do now is to map the path to a local ** representation, for example if must translate '/' to the ones that ** turn the wrong way ;-) ** Returns: ** OK: local file (that must be freed by caller) ** Error: NULL */ PUBLIC char * HTWWWToLocal (const char * url, const char * base, HTUserProfile * up) { if (url) { char * access = HTParse(url, base, PARSE_ACCESS); char * host = HTParse(url, base, PARSE_HOST); char * path = HTParse(url, base, PARSE_PATH+PARSE_PUNCTUATION); const char * myhost = HTUserProfile_fqdn(up); /* Find out if this is a reference to the local file system */ if ((*access && strcmp(access, "file") && strcmp(access, "cache")) || (*host && strcasecomp(host, "localhost") && myhost && strcmp(host, myhost))) { HTTRACE(CORE_TRACE, "LocalName... Not on local file system\n"); HT_FREE(access); HT_FREE(host); HT_FREE(path); return NULL; } else { char *ptr; if ((ptr = strchr(path, ';')) || (ptr = strchr(path, '?'))) *ptr = '\0'; /* ** Do whatever translation is required here in order to fit your ** platform _before_ the path is unescaped. */ #ifdef VMS HTVMS_checkDecnet(path); #endif #ifdef WWW_MSWINDOWS /* An absolute pathname with logical drive */ if (*path == '/' && path[2] == ':') { char *orig=path, *dest=path+1; while((*orig++ = *dest++)); /* A network host */ } else if (*host && strcasecomp(host, "localhost")) { char * newpath = NULL; StrAllocMCopy(&newpath, "//", host, path, NULL); HT_FREE(path); path = newpath; } /* Convert '/' to '\' */ { char *p = path; while (*p) { if (*p=='/') *p='\\'; p++; } } #endif HTUnEscape(path); /* Take out the escaped characters */ HTTRACE(CORE_TRACE, "Node........ `%s' means path `%s'\n" _ url _ path); HT_FREE(access); HT_FREE(host); return path; } } return NULL; } /* Convert a local file name into a URL ** ------------------------------------ ** Generates a WWW URL name from a local file name or NULL if error. ** Returns: ** OK: local file (that must be freed by caller) ** Error: NULL */ PUBLIC char * HTLocalToWWW (const char * local, const char * access) { char * escaped = NULL; const char * scheme = (access && *access) ? access : "file:"; if (local && *local) { #ifdef VMS char * unescaped = NULL; if ((unescaped = (char *) HT_MALLOC(strlen(local) + 10)) == NULL) HT_OUTOFMEM("HTLocalToWWW"); strcpy(unescaped, scheme); /* We get an absolute file name */ /* convert directory name to Unix-style syntax */ { char * disk = strchr (local, ':'); char * dir = strchr (local, '['); if (disk) { *disk = '\0'; strcat(unescaped, "/"); strcat(unescaped, local); } if (dir) { char *p; *dir = '/'; /* Convert leading '[' */ for (p = dir ; *p != ']'; ++p) if (*p == '.') *p = '/'; *p = '\0'; /* Cut on final ']' */ strcat(unescaped, dir); } } escaped = HTEscape(unescaped, URL_DOSFILE); HT_FREE(unescaped); #else /* not VMS */ #ifdef WIN32 char * unescaped = NULL; if ((unescaped = (char *) HT_MALLOC(strlen(local) + 10)) == NULL) HT_OUTOFMEM("HTLocalToWWW"); strcpy(unescaped, scheme); /* We get an absolute file name */ if (strchr(local, ':')) strcat(unescaped, "/"); { const char *p = local; char *q = unescaped+strlen(unescaped); while (*p) { if (*p=='\\') { *q++='/'; } else *q++=*p; p++; } *q = '\0'; } escaped = HTEscape(unescaped, URL_DOSFILE); HT_FREE(unescaped); #else /* Unix */ char * escaped_path = HTEscape(local, URL_PATH); escaped = StrAllocMCopy(&escaped, scheme, escaped_path, NULL); HT_FREE(escaped_path); #endif /* not WIN32 */ #endif /* not VMS */ } return escaped; } �����������������������������������������������������������������������������������������������������������libwww/Library/src/HTWWWStr.html��������������������������������������������������������������������0100644�0000764�0000144�00000016045�06676211121�016253� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 18-May-1996 --> <!-- Changed by: Eric Prud'hommeaux, 28-May-1996 --> <TITLE>W3C Sample Code Library libwww WWW String Utilities</TITLE> </HEAD> <BODY> <H1> WWW Related String Management </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module is like the <A HREF="HTString.html">generic string utility module</A> but it contains more Web related string utility functions. Examples are functions that return a <I>date string</I>, a <I>Message ID string</I> etc. <P> This module is implemented by <A HREF="HTWWWStr.c">HTWWWStr.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTWWWSTR_H #define HTWWWSTR_H #include "HTUser.h" #include "HTAtom.h" </PRE> <H2> MIME Parsing and other String Based Utilities </H2> <P> A bunch of "finding the next whatever" functions. <H3> Next word or quoted string </H3> <P> This function returns a RFC822 word separated by space, comma, or semi-colons. <CODE>pstr</CODE> points to a string containing a word separated by white white space "," ";" or "=". The word can optionally be quoted using <"> or "<" ">" Comments surrrounded by '(' ')' are filtered out. On exit, <CODE>pstr</CODE> has been moved to the first delimiter past the field THE STRING HAS BEEN MUTILATED by a 0 terminator. The function returns a pointer to the first word or NULL on error <PRE> extern char * HTNextField (char** pstr); </PRE> <H3> Next Name-value Pair </H3> <P> This is the same as <CODE>HTNextField</CODE> but it does not look for '=' as a separator so if there is a name-value pair then both parts are returned. Returns a pointer to the first word or NULL on error <PRE> extern char * HTNextPair (char ** pstr); </PRE> <H3> Next Name-value Parameter </H3> <P> This is the same as <CODE>HTNextPair</CODE> but it does not look for ',' as a separator so if there is a name-value pair then both parts are returned. Returns a pointer to the first word or NULL on error <PRE> extern char * HTNextParam (char ** pstr); </PRE> <H3> Next LWS Delimited Token </H3> <P> A simpler version of the above that only looks for linear white space as the delimiter. <PRE> extern char * HTNextLWSToken (char ** pstr); </PRE> <H3> Find next "/" Delimited Segment </H3> <P> This is the same as HTNextField but it includes "/" as a delimiter. Returns a pointer to the first segment or NULL on error <PRE> extern char * HTNextSegment (char ** pstr); </PRE> <H3> Next Comma Separated String (or Element) </H3> <P> This is the same as HTNextPair but it does not look for anything else than ',' as separator Returns a pointer to the first word or NULL on error <PRE> extern char * HTNextElement (char ** pstr); </PRE> <H3> Next S-expression </H3> <P> Find the next s-expression token from a string of characters. We return the <CODE>name</CODE> of this expression and the <CODE>param</CODE> points to the parameters. Note, that the string has been mutilated by a 0 terminator! <PRE> extern char * HTNextSExp (char ** exp, char ** param); </PRE> <H2> Reading CRLF </H2> <P> The Library provides a default set of read routines that can handle the most common situations. However, before we start we make following definition is to make life easier when having a state machine looking for a <CODE>&lt;CRLF&gt;</CODE> sequence. <PRE> typedef enum _HTEOLState { EOL_ERR = -1, EOL_BEGIN = 0, EOL_FCR, EOL_FLF, EOL_DOT, EOL_SCR, EOL_SLF, /* intermediate states */ EOL_END, EOL_FOLD, EOL_LINE } HTEOLState; </PRE> <H2> RFC1123 Date/Time Stamp String </H2> <P> Returns a string containing a date/time stamp string in RFC-1123 format. The string is in static memory so be aware! <PRE> extern const char * HTDateTimeStr (time_t *calendar, BOOL local); </PRE> <H2> Date used for directory listings </H2> <P> Generates a date/time stamp string used in directory listings. There is nothing special about this format, it is just to make directory listings look alike. <PRE> extern BOOL HTDateDirStr (time_t * time, char * str, int len); </PRE> <H2> Parse a Date/Time String </H2> <P> Converts a variety of different string representations of date time stamps in GMT to a local representation of localtime <CODE>time_t</CODE>. The local <I>time zone</I> is taken from the <A HREF="HTUser.html">user profile</A> information or directly from the system if <CODE>NULL</CODE> is passed as user profile . If the time is relative (for example in the <CODE>Age</CODE> header) then you can indicate whether it should be expanded to local time or not by using the <CODE>expand</CODE> argument. <PRE> extern time_t HTParseTime (const char * str, HTUserProfile * up, BOOL expand); </PRE> <H2> Unique Message-ID String </H2> <P> The message ID string can for example be use as a RFC 822 header. The content is based on the information taken from the <A HREF="HTUser.html">user profile</A> which can be supplied by the application. <PRE>extern const char * HTMessageIdStr (HTUserProfile * up); </PRE> <H2> Matching MIME Content-Types </H2> <P> Matches MIME constructions for <I>content-types</I> and others like them, for example "text/html", "text/plain". It can also match wild cards like "text/<star>" and "<star>/<star>. We use <star> instead of * in order note to make C like comments :-) <PRE> extern BOOL HTMIMEMatch (HTAtom * tmplate, HTAtom * actual); </PRE> <H2> Converts an Integer to a String using Prefix </H2> <P> In computer-world 1K is 1024 bytes and 1M is 1024K -- however, sprintf() still formats in base-10. Therefore I output only until 999, and then start using the next unit. This doesn't work wrong, it's just a feature. The conversion is done in "str" which must be large enough to contain the result. <PRE> extern void HTNumToStr (unsigned long n, char *str, int len); </PRE> <H2> Conversion between URLs and Local File Names </H2> <P> These are two functions that separate the URL naming syntax from platform dependent file naming schemes. If you are porting the code to a new platform, you probably have to do some translation here. <H3> Convert file URLs into a local representation </H3> <P> The URL has already been translated through the rules in get_physical in HTAccess.c and all we need to do now is to map the path to a local representation, for example if must translate '/' to the ones that turn the wrong way ;-) Returns local file (that must be freed by caller) if OK, else NULL. <PRE> extern char * HTWWWToLocal (const char * url, const char * base, HTUserProfile * up); </PRE> <H3> Convert a local file name into a URL </H3> <P> Generates a WWW URL name from a local file name or NULL if error. Returns URL (that must be freed by caller) if OK, else NULL. The access parameter can be used to indicate any special scheme used for local file access. If NULL then "<CODE>file:</CODE>" is used. <PRE> extern char * HTLocalToWWW (const char * local, const char * access); </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTWWWStr.html,v 2.17 2025/03/24 16:26:57 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTWriter.c�����������������������������������������������������������������������0100644�0000764�0000144�00000015510�07124671263�015632� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTWrite.c ** FILE WRITER BASED ON A SOCKET ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTWriter.c,v 2.56 2025/06/23 14:22:43 kahan Exp $ ** ** This is a try with a non-buffered output stream which remembers ** state using the write_pointer. As normally we have a big buffer ** somewhere else in the stream chain an extra output buffer will often ** not be needed. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTNet.h" #include "HTNetMan.h" #include "HTWriter.h" /* Implemented here */ #include "HTHstMan.h" struct _HTStream { const HTStreamClass * isa; /* ... */ }; struct _HTOutputStream { const HTOutputStreamClass * isa; HTChannel * ch; HTHost * host; int offset; #ifdef NOT_ASCII char * ascbuf; /* Buffer for TOASCII conversion */ #endif }; /* ------------------------------------------------------------------------- */ PRIVATE int HTWriter_flush (HTOutputStream * me) { return HT_OK; /* As we don't have any output buffer */ } PRIVATE int HTWriter_free (HTOutputStream * me) { return HT_OK; } PRIVATE int HTWriter_abort (HTOutputStream * me, HTList * e) { return HT_ERROR; } /* Write to the socket ** ** According to Solaris 2.3 man on write: ** ** o If O_NONBLOCK and O_NDELAY are clear, write() blocks ** until the data can be accepted. ** ** o If O_NONBLOCK or O_NDELAY is set, write() does not ** block the process. If some data can be written ** without blocking the process, write() writes what it ** can and returns the number of bytes written. Other- ** wise, if O_NONBLOCK is set, it returns - 1 and sets ** errno to EAGAIN or if O_NDELAY is set, it returns 0. ** ** According to SunOS 4.1.1 man on write: ** ** + If the descriptor is marked for non-blocking I/O ** using fcntl() to set the FNONBLOCK or O_NONBLOCK ** flag (defined in <sys/fcntl.h>), write() requests ** for {PIPE_BUF} (see pathconf(2V)) or fewer bytes ** either succeed completely and return nbyte, or ** return -1 and set errno to EAGAIN. A write() request ** for greater than {PIPE_BUF} bytes either transfers ** what it can and returns the number of bytes written, ** or transfers no data and returns -1 and sets errno ** to EAGAIN. If a write() request is greater than ** {PIPE_BUF} bytes and all data previously written to ** the pipe has been read, write() transfers at least ** {PIPE_BUF} bytes. */ PRIVATE int HTWriter_write (HTOutputStream * me, const char * buf, int len) { HTHost * host = me->host; SOCKET soc = HTChannel_socket(HTHost_channel(host)); HTNet * net = HTHost_getWriteNet(host); int b_write; char * wrtp; const char *limit = buf+len; /* If we don't have a Net object then return right away */ if (!net) { HTTRACE(STREAM_TRACE, "Write Socket No Net object %d (offset %d)\n" _ soc _ me->offset); return HT_ERROR; } #ifdef NOT_ASCII if (len && !me->ascbuf) { /* Generate new buffer */ const char *orig = buf; char *dest; int cnt; if ((me->ascbuf = (char *) HT_MALLOC(len)) == NULL) HT_OUTOFMEM("HTWriter_write"); dest = me->ascbuf; for (cnt=0; cnt<len; cnt++) { *dest = TOASCII(*orig); dest++, orig++; } wrtp = me->ascbuf; limit = me->ascbuf+len; } #else if (!me->offset) wrtp = (char *) buf; else { wrtp = (char *) buf + me->offset; len -= me->offset; me->offset = 0; } #endif /* Write data to the network */ while (wrtp < limit) { if ((b_write = NETWRITE(soc, wrtp, len)) < 0) { #ifdef EAGAIN if (socerrno == EAGAIN || socerrno == EWOULDBLOCK)/* POSIX, SVR4 */ #else if (socerrno == EWOULDBLOCK) /* BSD */ #endif { HTHost_register(host, net, HTEvent_WRITE); me->offset = wrtp - buf; HTTRACE(STREAM_TRACE, "Write Socket WOULD BLOCK %d (offset %d)\n" _ soc _ me->offset); return HT_WOULD_BLOCK; #ifdef EINTR } else if (socerrno == EINTR) { /* ** EINTR A signal was caught during the write opera- ** tion and no data was transferred. */ HTTRACE(STREAM_TRACE, "Write Socket call interrupted - try again\n"); continue; #endif } else { host->broken_pipe = YES; #ifdef EPIPE if (socerrno == EPIPE) { /* JK: an experimental bug solution proposed by Olga and Mikhael */ HTTRACE(STREAM_TRACE, "Write Socket got EPIPE\n"); HTHost_unregister(host, net, HTEvent_WRITE); HTHost_register(host, net, HTEvent_CLOSE); /* @@ JK: seems that some functions check the errors as part of the flow control */ HTRequest_addSystemError(net->request, ERR_FATAL, socerrno, NO, "NETWRITE"); return HT_CLOSED; } #endif /* EPIPE */ /* all errors that aren't EPIPE */ HTRequest_addSystemError(net->request, ERR_FATAL, socerrno, NO, "NETWRITE"); return HT_ERROR; } } /* We do this unconditionally, should we check to see if we ever blocked? */ HTTRACEDATA(wrtp, b_write, "Writing to socket %d" _ soc); HTNet_addBytesWritten(net, b_write); wrtp += b_write; len -= b_write; HTTRACE(STREAM_TRACE, "Write Socket %d bytes written to %d\n" _ b_write _ soc); { HTAlertCallback *cbf = HTAlert_find(HT_PROG_WRITE); if (cbf) { int tw = HTNet_bytesWritten(net); (*cbf)(net->request, HT_PROG_WRITE, HT_MSG_NULL, NULL, &tw, NULL); } } } #ifdef NOT_ASCII HT_FREE(me->ascbuf); #endif return HT_OK; } /* Character handling ** ------------------ */ PRIVATE int HTWriter_put_character (HTOutputStream * me, char c) { return HTWriter_write(me, &c, 1); } /* String handling ** --------------- ** ** Strings must be smaller than this buffer size. */ PRIVATE int HTWriter_put_string (HTOutputStream * me, const char * s) { return HTWriter_write(me, s, (int) strlen(s)); } /* ** The difference between the close and the free method is that we don't ** close the connection in the free method - we only call the free method ** of the target stream. That way, we can keep the output stream as long ** as the channel itself. */ PRIVATE int HTWriter_close (HTOutputStream * me) { HTTRACE(STREAM_TRACE, "Socket write FREEING....\n"); HT_FREE(me); return HT_OK; } PRIVATE const HTOutputStreamClass HTWriter = { "SocketWriter", HTWriter_flush, HTWriter_free, HTWriter_abort, HTWriter_put_character, HTWriter_put_string, HTWriter_write, HTWriter_close }; PUBLIC HTOutputStream * HTWriter_new (HTHost * host, HTChannel * ch, void * param, int mode) { if (host && ch) { HTOutputStream * me = HTChannel_output(ch); if (!me) { if ((me=(HTOutputStream *) HT_CALLOC(1, sizeof(HTOutputStream)))==NULL) HT_OUTOFMEM("HTWriter_new"); me->isa = &HTWriter; me->ch = ch; me->host = host; } return me; } return NULL; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTWriter.html��������������������������������������������������������������������0100644�0000764�0000144�00000003066�06526451306�016356� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 12-Apr-1996 --> <TITLE>W3C Sample Code Library libwww Unbuffered Socket Writer Stream</TITLE> </HEAD> <BODY> <H1> Unbuffered Socket Writer Stream </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Socket Writer Stream is an <A HREF="HTIOStream.html">output stream </A>&nbsp;which knows how to write to a BSD type socket. It is part of the <A HREF="WWWTrans.html">Transport interface </A>and may be registered as part of a <A HREF="HTTrans.html">Transport Object</A>. The application can&nbsp;initialize this stream together with the <A HREF="HTReader.html">HTReader stream</A>, for example. In the <A HREF="HTInit.html">default initialization module</A>, you can find the <CODE>HTTransportInit()</CODE> function which sets up this stream as a default transport for handling unbuffered socket write operations. See also the <A HREF="HTBufWrt.html">buffered writer stream</A>. <P> This module is implemented by <A HREF="HTWriter.c">HTWriter.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef HTWRITE_H #define HTWRITE_H #include <A HREF="HTIOStream.html">"HTIOStream.h"</A> </PRE> <PRE>extern HTOutput_new HTWriter_new; extern BOOL HTWriter_set (HTOutputStream * me, HTNet * net, HTChannel * ch, void * param, int mode); </PRE> <PRE>#endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTWriter.html,v 2.23 2025/05/14 02:11:18 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTXML.c��������������������������������������������������������������������������0100644�0000764�0000144�00000017725�07217621027�015024� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** LIBWWW STREAM WRAPPER FOR EXPAT XML PARSER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTXML.c,v 2.9 2025/12/19 08:53:43 kahan Exp $ ** ** This module requires expat in order to compile/link */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" /* 2000-29-08 JK : pre-pruning code out of libwww */ #ifdef HT_STRUCT_XML_STREAM #undef HT_STRUCT_XML_STREAM #endif #ifdef HT_STRUCT_XML_STREAM #include "SGML.h" #endif /* HT_STRUCT_XML_STREAM */ #include "HTXML.h" /* Implemented here */ #define XML_MAX_ATTRIBUTES 50 struct _HTStream { const HTStreamClass * isa; int state; HTRequest * request; HTStream * target; HTStructuredClass * actions; HTStructured * starget; XML_Parser xmlstream; #ifdef HT_STRUCT_XML_STREAM SGML_dtd * dtd; #endif /* HT_STRUCT_XML_STREAM */ XML_StartElementHandler xml_start_element; XML_EndElementHandler xml_end_element; XML_CharacterDataHandler xml_character_data; XML_DefaultHandler xml_default_handler; void * xml_user_data; }; /* @@@ SHould not be global but controlled by name spaces @@@ */ PRIVATE HTXMLCallback_new * XMLInstance = NULL; PRIVATE void * XMLInstanceContext = NULL; /* ------------------------------------------------------------------------- */ PRIVATE int HTXML_flush (HTStream * me) { if(me->target) return (*me->target->isa->flush)(me->target); else if (me->starget) return (*me->actions->flush)(me->starget); return HT_OK; } PRIVATE int HTXML_free (HTStream * me) { int status = HT_OK; XML_ParserFree(me->xmlstream); if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } else if(me->starget) { if ((status = (*me->actions->_free)(me->starget)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTTRACE(XML_TRACE, "XML Parser.. FREEING...\n"); HT_FREE(me); return status; } PRIVATE int HTXML_abort (HTStream * me, HTList * e) { HTTRACE(XML_TRACE, "XML Parser.. ABORTING...\n"); XML_ParserFree(me->xmlstream); if (me->target) (*me->target->isa->abort)(me->target, NULL); else if (me->starget) (*me->actions->abort)(me->starget, e); HT_FREE(me); return HT_ERROR; } PRIVATE int HTXML_write (HTStream * me, const char * buf, int len) { if (me->state == HT_OK) { int status = XML_Parse(me->xmlstream, buf, len, 0); if (!status) { HTTRACE(XML_TRACE, "XML Parser.. `%s\'\n" _ (char *)XML_ErrorString(XML_GetErrorCode(me->xmlstream))); me->state = HT_ERROR; } } /* ** We don't want to return an error here as this kills ** a potential pipeline of requests we might have */ return HT_OK; } PRIVATE int HTXML_putCharacter (HTStream * me, char c) { return HTXML_write(me, &c, 1); } PRIVATE int HTXML_putString (HTStream * me, const char * s) { return HTXML_write(me, s, (int) strlen(s)); } #ifdef HT_STRUCT_XML_STREAM PRIVATE BOOL set_attributes_values(HTTag *tag,BOOL *present,char **value, const char *nameatt,const char *valueatt) { if(tag && nameatt && valueatt) { int i; HTAttr *attributes= tag->attributes; for(i = 0; i< tag->number_of_attributes ; i++) { if(!strcasecomp(attributes[i].name,nameatt)) { present[i] = TRUE; value[i] = (char *)valueatt; return TRUE; } } } return FALSE; } PRIVATE void start_element(HTStream * me, const XML_Char *name, const XML_Char **atts) { int element_number = SGML_findElementNumber((SGML_dtd *)me->dtd,(char *)name); if(element_number >= 0) { HTTag *tag = SGML_findTag (me->dtd,element_number); int i = 0; BOOL present[XML_MAX_ATTRIBUTES]; const char *value[XML_MAX_ATTRIBUTES]; memset((void *) present, '\0', XML_MAX_ATTRIBUTES); memset((void *) value, '\0', XML_MAX_ATTRIBUTES*sizeof(char *)); while(atts[i]) { set_attributes_values(tag,present,(char **)value,atts[i],atts[i+1]); i+=2; /* attributes that are not in the dtd will be lost */ } (*me->actions->start_element) (me->starget,element_number,present,value); } else { /* elements that are not in the dtd will be lost */ } } PRIVATE void end_element(HTStream * me, const XML_Char *name) { int element_number = SGML_findElementNumber(me->dtd,(char *)name); if(element_number > 0) { (*me->actions->end_element)(me->starget, element_number); } else { /* elements that are not in the dtd will be lost */ } } PRIVATE void character_data(HTStream *me, const XML_Char *s, int len) { (*me->actions->put_block)(me->starget, s, len); } PRIVATE void default_handler(HTStream *me, const XML_Char *s, int len) { if(s[0] == '&' && s[len-1]==';') { (*me->actions->unparsed_entity)(me->starget, s,len); } else { /* characters that can not be parsed are lost */ } } #endif /* HT_STRUCT_XML_STREAM */ PRIVATE const HTStreamClass HTXMLClass = { "xml", HTXML_flush, HTXML_free, HTXML_abort, HTXML_putCharacter, HTXML_putString, HTXML_write }; PUBLIC HTStream * HTXML_new (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = NULL; HTCharset charset = HTResponse_charset (HTRequest_response(request)); if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTXML_new"); me->isa = &HTXMLClass; me->state = HT_OK; me->request = request; me->target = output_stream ? output_stream : HTErrorStream(); /* Now create the XML parser instance */ if ((me->xmlstream = XML_ParserCreate(HTAtom_name(charset))) == NULL) { HT_FREE(me); return HTErrorStream(); } HTTRACE(XML_TRACE, "XML Parser.. Stream created\n"); /* Call the stream callback handler (if any) with this new stream */ if (XMLInstance) (*XMLInstance)(me, request, output_format, output_stream, me->xmlstream, XMLInstanceContext); return me; } PUBLIC BOOL HTXMLCallback_registerNew (HTXMLCallback_new * me, void * context) { XMLInstance = me; XMLInstanceContext = context; return YES; } #ifdef HT_STRUCT_XML_STREAM PRIVATE HTStream * HTXMLStructured_new (const SGML_dtd * dtd, HTStructured * starget) { HTStream * me = NULL; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("HTXML_new"); me->isa = &HTXMLClass; me->state = HT_OK; me->starget = starget; me->dtd = (SGML_dtd *)dtd; me->actions = (HTStructuredClass*)(((HTStream*)starget)->isa); /* Now create the XML parser instance */ if ((me->xmlstream = XML_ParserCreate(NULL)) == NULL) { HT_FREE(me); return HTErrorStream(); } XML_SetUserData(me->xmlstream,me); XML_SetElementHandler(me->xmlstream, (XML_StartElementHandler)start_element, (XML_EndElementHandler)end_element); XML_SetCharacterDataHandler(me->xmlstream, (XML_CharacterDataHandler)character_data); XML_SetDefaultHandler(me->xmlstream, (XML_DefaultHandler)default_handler); HTTRACE(XML_TRACE, "XML Parser.. Stream created\n"); return me; } PRIVATE BOOL HTXMLStructured_setHandlers (HTStream * me, XML_StartElementHandler start, XML_EndElementHandler end, XML_CharacterDataHandler char_data, XML_DefaultHandler def_handler) { if(me) { me->xml_start_element = start; me->xml_end_element = end; me->xml_character_data = char_data; me->xml_default_handler = def_handler; XML_SetElementHandler(me->xmlstream,start,end); XML_SetCharacterDataHandler(me->xmlstream,char_data); XML_SetDefaultHandler(me->xmlstream,def_handler); return YES; } return NO; } PRIVATE BOOL HTXMLStructured_setUserData(HTStream *me, void *user_data) { if(me) { me->xml_user_data = user_data; XML_SetUserData(me->xmlstream,me->xml_user_data); return YES; } return NO; } #endif /* HT_STRUCT_XML_STREAM */ �������������������������������������������libwww/Library/src/HTXML.html�����������������������������������������������������������������������0100644�0000764�0000144�00000006103�07343422511�015527� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Expat XML Parser Wrapper</TITLE> </HEAD> <BODY> <H1> Expat XML Parser Wrapper </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module is implemented by <A HREF="HTXML.c">HTXML.c</A>, and is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <P> We use <A href="http://www.jclark.com/xml/expat.html">James Clark's expat XML parser</A> which is very neat indeed. As the code doesn't come as a separate library, I included it in the libwww CVS code base where I compile is as two libraries: <CODE>libxmltok.a</CODE> and <CODE>libxmlparse.a</CODE>. See the <A HREF="../External/">external modules that libwww works</A> with for details. Thanks so much to John Punin for writing this code! <PRE> #ifndef HTXML_H #define HTXML_H #include "<A HREF="HTFormat.html">HTFormat.h</A>" #include "<A HREF="HTStream.html">HTStream.h</A>" #ifdef HT_STRUCT_XML_STREAM #include "<A HREF="HTStruct.html">HTStruct.h</A>" #include "<A HREF="SGML.html">SGML.h</A>" #endif /* HT_STRUCT_XML_STREAM */ #include &lt;xmlparse.h&gt; </PRE> <H2> <A NAME="converter">Libwww Stream Converter</A> </H2> <P> This stream is a <A HREF="HTFormat.html#type">libwww converter</A> which calls and creates a expat stream instance. In order to tell the application that a new stream instance has been created. <PRE> extern HTConverter HTXML_new; </PRE> <H2> <A NAME="new">Callback Handler Announcing a new Expat Stream object</A> </H2> <P> When a <A HREF="#converter">libwww to expat XML stream converter instance </A>is created, the stream checks to see if there are any callbacks registered which should be notified about the new stream instance. If that is the case then this callback is called and a pointer to the XML parser passed along. The output stream is the target that was originally set for the request object before the request was issued. <PRE> typedef void HTXMLCallback_new ( HTStream * me, HTRequest * request, HTFormat target_format, HTStream * target_stream, XML_Parser xmlparser, void * context); </PRE> <H3> Register Creation notification Callback </H3> <STRONG>@@@Should be handled via XML names spaces@@@</STRONG> <PRE> extern BOOL HTXMLCallback_registerNew (HTXMLCallback_new *, void * context); </PRE> <H2> XML Expat Stream to Libwww Structured Stream </H2> <P> This is a stream that converts from the expat stream to a <A HREF="HTStruct.html">libwww structured stream</A>. Again, the application can <PRE> #ifdef HT_STRUCT_XML_STREAM extern BOOL HTXMLStructured_setHandlers( HTStream * me, XML_StartElementHandler start, XML_EndElementHandler end, XML_CharacterDataHandler char_data, XML_DefaultHandler def_handler); extern BOOL HTXMLStructured_setUserData (HTStream * me, void * user_data); extern HTStream * HTXMLStructured_new (const SGML_dtd * dtd, HTStructured * starget); #endif </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTXML.html,v 2.6 2025/08/30 11:36:41 kahan Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTXParse.c�����������������������������������������������������������������������0100644�0000764�0000144�00000010274�06664352704�015566� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTXParse.c ** EXTPARSE CLASS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTXParse.c,v 2.21 2025/02/22 22:10:12 frystyk Exp $ ** ** AUTHORS: ** HWL 23/8/94 ** ** HISTORY: ** HWL 5/12/95: Added NUL-terminatio, changed name from Ext to X */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTXParse.h" /* defines HTStreamClass */ #include "HTEPtoCl.h" /* defines dummy routine for talking to client */ struct _HTStream { const HTStreamClass * isa; HTXParseStruct * eps; }; PRIVATE int HTXParse_put_character (HTStream * me, char c) { while ((me->eps->used + 1) > (me->eps->length + 1)) { me->eps->length += INPUT_BUFFER_SIZE; } if ((me->eps->buffer = (char *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL) HT_OUTOFMEM("me->eps->buffer "); *(me->eps->buffer + me->eps->used) = c; me->eps->used++; me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */ return HT_OK; } PRIVATE int HTXParse_put_string (HTStream * me, const char * s) { int l = strlen(s); HTTRACE(STREAM_TRACE, "HTXParse_put_string, %s\n" _ s); while ((me->eps->used + l) > (me->eps->length + 1)) { me->eps->length += INPUT_BUFFER_SIZE; } if ((me->eps->buffer = (char *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL) HT_OUTOFMEM("me->eps->buffer "); memcpy( (me->eps->buffer + me->eps->used), s, l); me->eps->used += l; me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */ return HT_OK; } PRIVATE int HTXParse_write (HTStream * me, const char * s, int l) { while ((me->eps->used + l) > (me->eps->length + 1)) { me->eps->length += INPUT_BUFFER_SIZE; } if ((me->eps->buffer = (char *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL) HT_OUTOFMEM("me->eps->buffer "); memcpy( (me->eps->buffer + me->eps->used), s, l); me->eps->used += l; me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */ (*(me->eps->call_client))(me->eps); /* client can give status info */ HTTRACE(STREAM_TRACE, "HTXParse_write, l=%d, used = %d\n" _ l _ me->eps->used); return HT_OK; } PRIVATE int HTXParse_flush (HTStream * me) { HTTRACE(STREAM_TRACE, "HTXParse_flush\n"); return HT_OK; } PRIVATE int HTXParse_free (HTStream * me) { HTTRACE(STREAM_TRACE, "HTXParse_free\n"); me->eps->finished = YES; (*(me->eps->call_client))(me->eps); /* client will free buffer */ HT_FREE(me->eps); HT_FREE(me); return HT_OK; } PRIVATE int HTXParse_abort (HTStream * me, HTList * e) { HTTRACE(STREAM_TRACE, "HTXParse_abort\n"); HTXParse_free(me); /* Henrik Nov 2 94 */ return HT_ERROR; } /* XParse stream ** ----------------- */ PRIVATE const HTStreamClass HTXParseClass = { "XParse", HTXParse_flush, HTXParse_free, HTXParse_abort, HTXParse_put_character, HTXParse_put_string, HTXParse_write }; PUBLIC HTStream* HTXParse (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream* me; #ifdef HTDEBUG if (STREAM_TRACE) { HTTRACE(STREAM_TRACE, "HTXConvert.."); if (input_format && input_format->name) HTTRACE(STREAM_TRACE, ".. input format is %s" _ input_format->name); if (output_format && output_format->name) HTTRACE(STREAM_TRACE, ".. output format is %s" _ output_format->name); HTTRACE(STREAM_TRACE, "\n"); } #endif /* HTDEBUG */ if ((me = (HTStream *) HT_CALLOC(1, sizeof(*me))) == NULL) HT_OUTOFMEM("HTXConvert"); me->isa = &HTXParseClass; if ((me->eps = (HTXParseStruct *) HT_CALLOC(1, sizeof(HTXParseStruct))) == NULL) HT_OUTOFMEM("HTXConvert"); if (input_format) me->eps->content_type = input_format->name; me->eps->call_client = HTCallClient; if ((me->eps->buffer = (char *) HT_CALLOC(INPUT_BUFFER_SIZE,1)) == NULL) HT_OUTOFMEM("HTXParse"); me->eps->used = 0; me->eps->finished = NO; me->eps->length = INPUT_BUFFER_SIZE; me->eps->request = request; return me; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTXParse.html��������������������������������������������������������������������0100644�0000764�0000144�00000003160�06661445112�016275� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 5-Apr-1996 --> <TITLE>W3C Sample Code Library libwww Callback Stream</TITLE> </HEAD> <BODY> <H1> XParse: Module to get Unparsed Stream from libwww </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This version of the stream object is a hook for clients that want an unparsed stream from libwww. The HTXParse_put_* and HTXParse_write routines copy the content of the incoming buffer into a buffer that is realloced whenever necessary. This buffer is handed over to the client in HTXParse_free. See also <A HREF="HTFWrite.html">HTFWriter</A> for writing to C files. <H3> Bugs: </H3> <UL> <LI> strings written must be less than buffer size. </UL> <P> This module is implemented by <A HREF="HTXParse.c">HTXParse.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTXPARSE_H #define HTXPARSE_H #include "HTStream.h" #include "HTReader.h" #include "HTReq.h" typedef struct _HTXParseStruct HTXParseStruct; typedef void CallClient (HTXParseStruct * me); struct _HTXParseStruct { CallClient *call_client; int used; /* how much of the buffer is being used*/ BOOL finished; /* document loaded? */ int length; /* how long the buffer is */ char * buffer; /* storage in until client takes over */ char * content_type; HTRequest * request; /* the request structure */ }; extern HTConverter HTXParse; #endif </PRE> <P> End of declaration </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTZip.c��������������������������������������������������������������������������0100644�0000764�0000144�00000013464�06664352704�015132� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** ZIP ENCODING / DECODING MODULE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTZip.c,v 2.8 2025/02/22 22:10:12 frystyk Exp $ ** ** This module requires zlib in order to compile/link */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HTZip.h" /* Implemented here */ #ifdef WWW_MSWINDOWS #define ZLIB_DLL #endif #include <zlib.h> #define OUTBUF_SIZE 32768 struct _HTStream { const HTStreamClass * isa; int state; HTRequest * request; HTStream * target; /* Our output target */ z_stream * zstream; /* Zlib stream */ char outbuf [OUTBUF_SIZE]; /* Inflated data */ }; PRIVATE int CompressionLevel = Z_DEFAULT_COMPRESSION; /* ------------------------------------------------------------------------- */ PRIVATE BOOL Zlib_init (HTStream * me, int level) { if (me && me->zstream && (level == Z_DEFAULT_COMPRESSION || (level >= Z_BEST_SPEED && level <= Z_BEST_COMPRESSION))) { int status; HTTRACE(STREAM_TRACE, "Zlib Inflate Init stream %p with compression level %d\n" _ me _ level); if ((status = inflateInit(me->zstream)) != Z_OK) { HTTRACE(STREAM_TRACE, "Zlib........ Failed with status %d\n" _ status); return NO; } return YES; } return NO; } PRIVATE BOOL ZLib_terminate (HTStream * me) { HTTRACE(STREAM_TRACE, "Zlib Inflate Terminating stream %p\n" _ me); if (me) { int status; HTTRACE(STREAM_TRACE, "Results..... Inflated incoming data: deflated %lu, inflated %lu, factor %.2f\n" _ me->zstream->total_in _ me->zstream->total_out _ me->zstream->total_in == 0 ? 0.0 : (double) me->zstream->total_out / me->zstream->total_in); if ((status = inflateEnd(me->zstream)) != Z_OK) { HTTRACE(STREAM_TRACE, "Zlib........ Failed with status %d\n" _ status); return NO; } return YES; } return NO; } PRIVATE int HTZLibInflate_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int HTZLibInflate_free (HTStream * me) { int status = HT_OK; ZLib_terminate(me); if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; HTTRACE(STREAM_TRACE, "Zlib Inflate FREEING...\n"); HT_FREE(me->zstream); HT_FREE(me); return status; } PRIVATE int HTZLibInflate_abort (HTStream * me, HTList * e) { HTTRACE(STREAM_TRACE, "Zlib Inflate ABORTING...\n"); ZLib_terminate(me); (*me->target->isa->abort)(me->target, NULL); HT_FREE(me->zstream); HT_FREE(me); return HT_ERROR; } PRIVATE int HTZLibInflate_write (HTStream * me, const char * buf, int len) { if (me->state != HT_OK) { me->state = (*me->target->isa->put_block)(me->target, me->outbuf, OUTBUF_SIZE - me->zstream->avail_out); if (me->state != HT_OK) return me->state; } /* ** Setup the zstream buffers to handle the new data */ me->zstream->next_in = (unsigned char *) buf; me->zstream->avail_in = len; me->zstream->next_out = (unsigned char *) me->outbuf; me->zstream->avail_out = OUTBUF_SIZE; /* ** Now run through the data and inflate it. We use Z_PARTIAL_FLUSH ** in order to put as much data in the output buffer as quick as ** possible. */ for (;;) { int status = inflate(me->zstream, Z_PARTIAL_FLUSH); switch (status) { case Z_OK: me->state = (*me->target->isa->put_block)(me->target, me->outbuf, OUTBUF_SIZE - me->zstream->avail_out); if (me->state != HT_OK) return me->state; /* ** All data was consumed and we are ready to handle the ** next data. */ me->zstream->next_out = (unsigned char *) me->outbuf; me->zstream->avail_out = OUTBUF_SIZE; break; case Z_MEM_ERROR: HT_OUTOFMEM("HTZLibInflate_write"); return HT_ERROR; case Z_BUF_ERROR: /* ** No action was taken anf we can take this as a sign ot it ** having finished all data in the input buffer. */ return HT_OK; case Z_STREAM_END: me->state = (*me->target->isa->put_block)(me->target, me->outbuf, OUTBUF_SIZE - me->zstream->avail_out); if (me->state != HT_OK) return me->state; HTTRACE(STREAM_TRACE, "Zlib Inflate End of Stream\n"); return HT_OK; default: HTTRACE(STREAM_TRACE, "Zlib Inflate Inflate returned %d\n" _ status); return HT_ERROR; } } return HT_OK; } PRIVATE int HTZLibInflate_put_character (HTStream * me, char c) { return HTZLibInflate_write(me, &c, 1); } PRIVATE int HTZLibInflate_put_string (HTStream * me, const char * s) { return HTZLibInflate_write(me, s, (int) strlen(s)); } PRIVATE const HTStreamClass HTInflate = { "ZlibInflate", HTZLibInflate_flush, HTZLibInflate_free, HTZLibInflate_abort, HTZLibInflate_put_character, HTZLibInflate_put_string, HTZLibInflate_write }; PUBLIC BOOL HTZLib_setCompressionLevel (int level) { if (level >= Z_BEST_SPEED && level <= Z_BEST_COMPRESSION) { CompressionLevel = level; HTTRACE(STREAM_TRACE, "Zlib........ Compression level set to %d\n" _ level); } return NO; } PUBLIC int HTZLib_compressionLevel (void) { return CompressionLevel; } PUBLIC HTStream * HTZLib_inflate (HTRequest * request, void * param, HTEncoding coding, HTStream * target) { HTStream * me = NULL; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL || (me->zstream = (z_stream *) HT_CALLOC(1, sizeof(z_stream))) == NULL) HT_OUTOFMEM("HTZLib_inflate"); me->isa = &HTInflate; me->state = HT_OK; me->request = request; me->target = target ? target : HTErrorStream(); if (Zlib_init(me, CompressionLevel) != YES) { HT_FREE(me); return HTErrorStream(); } HTTRACE(STREAM_TRACE, "Zlib Inflate Stream created\n"); return me; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTZip.html�����������������������������������������������������������������������0100644�0000764�0000144�00000001750�06526451310�015635� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 23-Mar-1996 --> <TITLE>W3C Sample Code Library libwww ZLib Compress and Decompress Stream</TITLE> </HEAD> <BODY> <H1> ZLib Compress and Decompress Stream </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module provides an interface to the zlib compress and decompress functions. It can be hooked inas as content encoding coder/decoder in libwww which allows for on-the-fly encoding/decoding. <P> This module is implemented by <A HREF="HTZip.c">HTZip.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <PRE> #ifndef HTZIP_H #define HTZIP_H #include "HTFormat.h" </PRE> <PRE> #ifdef HT_ZLIB extern HTCoder HTZLib_inflate; #endif </PRE> <P> End of definition module <PRE> #endif /* HTZIP_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTZip.html,v 2.5 2025/05/14 02:11:20 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������libwww/Library/src/HText.c��������������������������������������������������������������������������0100644�0000764�0000144�00000013725�06657353327�015174� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** HYPERTEXT OBJECT BUILDER ** ** (c) COPYRIGHT MIT 1999. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HText.c,v 2.4 2025/02/07 18:09:27 frystyk Exp $ ** ** This generates of a hypertext object and calls the application ** via callbacks. */ /* Library include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "HText.h" #include "HTextImp.h" /* Default callbacks that the application can register */ PRIVATE HText_new * text_new; PRIVATE HText_delete * text_delete; PRIVATE HText_build * text_build; PRIVATE HText_addText * text_addText; PRIVATE HText_foundLink * text_foundLink; PRIVATE HText_beginElement * text_beginElement; PRIVATE HText_endElement * text_endElement; PRIVATE HText_unparsedBeginElement * text_unparsedBeginElement; PRIVATE HText_unparsedEndElement * text_unparsedEndElement; PRIVATE HText_unparsedEntity * text_unparsedEntity; /* HText handler instance */ struct _HTextImp { HText * app; HText_new * text_new; HText_delete * text_delete; HText_build * text_build; HText_addText * text_addText; HText_foundLink * text_foundLink; HText_beginElement * text_beginElement; HText_endElement * text_endElement; HText_unparsedBeginElement *text_unparsedBeginElement; HText_unparsedEndElement * text_unparsedEndElement; HText_unparsedEntity * text_unparsedEntity; }; /* --------------------------------------------------------------------------- */ PUBLIC HTextImp * HTextImp_new (HTRequest * request, HTParentAnchor * anchor, HTStream * output_stream) { HTextImp * me = NULL; if ((me = (HTextImp *) HT_CALLOC(1, sizeof (HTextImp))) == NULL) HT_OUTOFMEM("HTextImp_new"); me->text_new = text_new; me->text_delete = text_delete; me->text_build = text_build; me->text_addText = text_addText; me->text_foundLink = text_foundLink; me->text_beginElement = text_beginElement; me->text_endElement = text_endElement; me->text_unparsedBeginElement = text_unparsedBeginElement; me->text_unparsedEndElement = text_unparsedEndElement; me->text_unparsedEntity = text_unparsedEntity; if (me->text_new) me->app = (*me->text_new)(request, anchor, output_stream); return me; } PUBLIC BOOL HTextImp_delete (HTextImp * me) { if (me) { /* ** Note that we do not call the delete method on the app ** HText object as this normally stays around after the ** request has been deleted and certainly it should be ** deleted by the app and not libwww */ HT_FREE(me); return YES; } return NO; } PUBLIC void HTextImp_build (HTextImp * me, HTextStatus status) { if (me && me->text_build) (*me->text_build)(me->app, status); } PUBLIC void HTextImp_addText (HTextImp * me, const char * buffer, int length) { if (me && me->text_addText) (*me->text_addText)(me->app, buffer, length); } PUBLIC void HTextImp_foundLink (HTextImp * me, int element_number, int attribute_number, HTChildAnchor *anchor, const BOOL * present, const char ** value) { if (me && me->text_foundLink) (*me->text_foundLink)(me->app, element_number, attribute_number, anchor, present, value); } PUBLIC void HTextImp_beginElement (HTextImp * me, int element_number, const BOOL * present, const char **value) { if (me && me->text_beginElement) (*me->text_beginElement)(me->app, element_number, present, value); } PUBLIC void HTextImp_endElement (HTextImp * me, int element_number) { if (me && me->text_endElement) (*me->text_endElement)(me->app, element_number); } PUBLIC void HTextImp_unparsedBeginElement (HTextImp * me, const char * buffer, int length) { if (me && me->text_unparsedBeginElement) (*me->text_unparsedBeginElement)(me->app, buffer, length); } PUBLIC void HTextImp_unparsedEndElement (HTextImp * me, const char * buffer, int length) { if (me && me->text_unparsedEndElement) (*me->text_unparsedEndElement)(me->app, buffer, length); } PUBLIC void HTextImp_unparsedEntity (HTextImp * me, const char * buffer, int length) { if (me && me->text_unparsedEntity) (*me->text_unparsedEntity)(me->app, buffer, length); } /* --------------------------------------------------------------------------- */ PUBLIC BOOL HText_registerCDCallback (HText_new * ncb, HText_delete * dcb) { if (ncb && dcb) { text_new = ncb; text_delete = dcb; return YES; } return NO; } PUBLIC BOOL HText_unregisterCDCallback (void) { text_new = NULL; text_delete = NULL; return YES; } PUBLIC BOOL HText_registerBuildCallback (HText_build * bcb) { text_build = bcb; return YES; } PUBLIC BOOL HText_registerTextCallback (HText_addText * tcb) { text_addText = tcb; return YES; } PUBLIC BOOL HText_unregisterTextCallback (void) { text_addText = NULL; return YES; } PUBLIC BOOL HText_registerLinkCallback (HText_foundLink * lcb) { text_foundLink = lcb; return YES; } PUBLIC BOOL HText_unregisterLinkCallback (void) { text_foundLink = NULL; return YES; } PUBLIC BOOL HText_registerElementCallback (HText_beginElement * bcb, HText_endElement * ecb) { text_beginElement = bcb; text_endElement = ecb; return YES; } PUBLIC BOOL HText_unregisterElementCallback (void) { text_beginElement = NULL; return YES; } PUBLIC BOOL HText_registerUnparsedElementCallback (HText_unparsedBeginElement * ubcb, HText_unparsedBeginElement * uecb) { text_unparsedBeginElement = ubcb; text_unparsedEndElement = uecb; return YES; } PUBLIC BOOL HText_unregisterUnparsedElementCallback (void) { text_unparsedBeginElement = NULL; text_unparsedEndElement = NULL; return YES; } PUBLIC BOOL HText_registerUnparsedEntityCallback (HText_unparsedEntity * tcb) { text_unparsedEntity = tcb; return YES; } PUBLIC BOOL HText_unregisterUnparsedEntityCallback (void) { text_unparsedEntity = NULL; return YES; } �������������������������������������������libwww/Library/src/HText.html�����������������������������������������������������������������������0100644�0000764�0000144�00000020167�06644701610�015700� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Rich Hypertext Object</TITLE> </HEAD> <BODY> <H1> HyperText Object Builder </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the interface that &nbsp;you can use to build a parsed HTML object (called an hypertext object) as output of the <A HREF="HTML.html">libwww HTML parser</A>. It is based on callback functions that the application can register as needed in order to get the various events out of the HTML parser. These are the different events that can be registered: <A NAME="HyperText"></A> <UL> <LI> <A HREF="#ss">When parsing is about to start or terminate</A> <LI> <A HREF="#text">When a chunk of plain text has been found</A> <LI> <A HREF="#links">When a link has been found in some HTML element</A> <LI> <A HREF="#elements">When an HTML element is about to start or end</A> <LI> <A HREF="#unparsedElement">Handler for unparsed elements</A> <LI> <A HREF="#unparsedEntity">Handler for unparsed entities</A> </UL> <P> Building an hypertext object can contain references to stylesheets. Libwww doesn't come with a stylesheet implementation but it does have a <A HREF="HTStyle.html">generic stylesheet manager</A> which can be used for registering and looking up styles. As an example, you can see how the libwww <A HREF="../../Robot/src/HTRobot.c">robot</A> uses the link callout whereas the <A HREF="http://www.w3.org/LineMode/">Line Mode Browser</A> has a complete implementation in the <A HREF="http://www.w3.org/LineMode/src/GridText.html"> GridText</A> module. <PRE> #ifndef HTEXT_H #define HTEXT_H #include "<A HREF="HTAnchor.html">HTAnchor.h</A>" #include "<A HREF="HTStream.html">HTStream.h</A>" </PRE> <H2> <A NAME="htext">The HText Object</A> </H2> <P> The <TT>HText</TT> object is only known as a name to libwww - it isn't defined or used anywhere as an actual structure. The application can use the HText object to contain the information needed to build a parsed object - a hypertext object - as data arrives from the <A HREF="HTML.html">libwww HTML parser</A>. When a HText object is to be created, this module calls out to any registered creation method and in turn uses the newly created HText object in every subsequent call to any registered callback routine as the HTML stream is parsed. <PRE> typedef struct _HText HText; </PRE> <H2> <A NAME="cd">Callback for Creating and Deleting an HText Object</A> </H2> <P> When an <A HREF="HTML.html">HTML stream</A> is created, the <A HREF="HTML.html">HTML parser</A> checks to see if there are any callbacks registered for handling the <A HREF="#htext">HText object</A>. If this is the case then the creation callback is called so that the application can create a new <A HREF="#htext">HText object</A>. After that the various callbacks are called (<A HREF="#HyperText">if registered</A>) as text comes in and gets parsed. <PRE> typedef HText * HText_new ( HTRequest * request, HTParentAnchor * anchor, HTStream * output_stream); typedef BOOL HText_delete (HText * me); </PRE> <H3> Register Creation/Deletion Callbacks </H3> <PRE> extern BOOL HText_registerCDCallback (HText_new *, HText_delete *); extern BOOL HText_unregisterCDCallback (void); </PRE> <H2> <A NAME="ss">Callback for Start and Terminate Parsing</A> </H2> <P> The call sequence is the following: First <TT>HText_build</TT> is called with the status of <TT>HTEXT_BEGIN</TT>, then any combination of other append calls, and at the end <TT>HText_build</TT> is called with the termination status - if it terminated normally then the status is <TT>HTEXT_END</TT>, if the download was aborted the status is <TT>HTEXT_ABORT</TT>. <PRE> typedef enum _HTextStatus { HTEXT_BEGIN, HTEXT_END, HTEXT_ABORT } HTextStatus; typedef void HText_build (HText * text, HTextStatus status); </PRE> <H3> Register Start/End Callback </H3> <PRE> extern BOOL HText_registerBuildCallback (HText_build *); extern BOOL HText_unregisterBuildCallback (void); </PRE> <H2> <A NAME="text">Callback for Handling Chunks of Text</A> </H2> <P> <STRONG>THE STRING IS NOT ZERO-TERMINATED!!!</STRONG> When plain text is found then it can be passed to the application via this function. HTML text is already stripped for unneeded white space whereas literal text isn't. The text is of course to be taken "relative" to which element is is found within - this is not checked by the HTML parser but can be checked by the application by using the <A HREF="#elements">Element callback function</A>. <PRE> typedef void HText_addText ( HText * text, const char * buffer, int length); </PRE> <H3> Register Text Callback </H3> <PRE> extern BOOL HText_registerTextCallback (HText_addText *); extern BOOL HText_unregisterTextCallback (void); </PRE> <H2> <A NAME="links">Callback for Handling Hypertext Links</A> </H2> <P> Whenever a link is found in the HTML stream, be it from an anchor element, an inlined image, etc. then it is picked up and this called out to this function with the parameters necessary to be able to see what type of link it is (the element and the name of the attribute where it was found). The element number and attribute number are integers that are defined by the <A HREF="HTMLPDTD.html">HTML DTD used by the HTMl parser</A>. The <TT>present</TT> and <TT>value</TT> arrays contains all the <A HREF="HTMLPDTD.html">SGML attributes and values</A> found in the element untouched. Again, the array is defined by the <A HREF="HTMLPDTD.html">HTML DTD used by the HTML parser</A>. <PRE> typedef void HText_foundLink ( HText * text, int element_number, int attribute_number, HTChildAnchor * anchor, const BOOL * present, const char ** value); </PRE> <H3> Register Link Callback </H3> <PRE> extern BOOL HText_registerLinkCallback (HText_foundLink *); extern BOOL HText_unregisterLinkCallback (void); </PRE> <H2> <A NAME="elements">Callback for Handling HTML Elements</A> </H2> <P> Whenever an element is found in the HTML stream, be it an IMG element, a BODY element, etc. then it is picked up and this called out to this function with the parameters necessary to be able to see what type of element it is. The element number and attribute number are integers that are defined by the <A HREF="HTMLPDTD.html">HTML DTD used by the HTMl parser</A>. The <TT>present</TT> and <TT>value</TT> arrays contains all the <A HREF="HTMLPDTD.html">SGML attributes and values</A> found in the element untouched. Again, the array is defined by the <A HREF="HTMLPDTD.html">HTML DTD used by the HTML parser</A>. <PRE> typedef void HText_beginElement ( HText * text, int element_number, const BOOL * present, const char ** value); typedef void HText_endElement ( HText * text, int element_number); </PRE> <H3> Register HTML Element Callback </H3> <PRE> extern BOOL HText_registerElementCallback (HText_beginElement *, HText_endElement *); extern BOOL HText_unregisterElementCallback (void); </PRE> <H2> <A NAME="unparsedElement">Callback for Unparsed Elements</A> </H2> <P> Whenever an element is found which is not known by the HTML DTD, then the information is passed to the unparsed element handlers. <PRE> typedef void HText_unparsedBeginElement ( HText * HText, const char * buffer, int length); typedef void HText_unparsedEndElement ( HText * HText, const char * buffer, int length); </PRE> <H3> Register Unparsed Element Callback </H3> <PRE> extern BOOL HText_registerUnparsedElementCallback ( HText_unparsedBeginElement *, HText_unparsedEndElement *); extern BOOL HText_unregisterUnparsedElementCallback (void); </PRE> <H2> <A NAME="unparsedEntity">Callback for Unparsed Entity</A> </H2> <P> Whenever an entity is found which is not known by the HTML DTD, then the information is passed to the default handler. <PRE> typedef void HText_unparsedEntity ( HText * HText, const char * buffer, int length); </PRE> <H3> Register Unparsed Entity Callback </H3> <PRE> extern BOOL HText_registerUnparsedEntityCallback (HText_unparsedEntity *); extern BOOL HText_unregisterUnparsedEntityCallback (void); </PRE> <PRE> #endif /* HTEXT_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HText.html,v 2.32 2025/01/06 15:38:48 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTextImp.html��������������������������������������������������������������������0100644�0000764�0000144�00000003051�06644701610�016337� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Internal Hypertext Object</TITLE> </HEAD> <BODY> <H1> Internal implementation of Hypertext Object Builder </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> <PRE> #ifndef HTEXTIMP_H #define HTEXTIMP_H #include "HTReq.h" #include "HTAnchor.h" #include "HText.h" </PRE> <PRE> typedef struct _HTextImp HTextImp; extern HTextImp * HTextImp_new ( HTRequest * request, HTParentAnchor *anchor, HTStream * output_stream); extern BOOL HTextImp_delete ( HTextImp * me); extern void HTextImp_build ( HTextImp * text, HTextStatus status); extern void HTextImp_addText ( HTextImp * me, const char * buffer, int length); extern void HTextImp_foundLink ( HTextImp * me, int element_number, int attribute_number, HTChildAnchor * anchor, const BOOL * present, const char ** value); extern void HTextImp_beginElement ( HTextImp * me, int element_number, const BOOL * present, const char ** value); extern void HTextImp_endElement ( HTextImp * me, int element_number); extern void HTextImp_unparsedBeginElement ( HTextImp * me, const char * buffer, int length); extern void HTextImp_unparsedEndElement ( HTextImp * me, const char * buffer, int length); extern void HTextImp_unparsedEntity ( HTextImp * me, const char * buffer, int length); </PRE> <PRE> #endif /* HTEXTIMP_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTextImp.html,v 2.3 2025/01/06 15:38:48 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/Makefile.am����������������������������������������������������������������������0100644�0000764�0000144�00000017136�07123647416�016022� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. LDFLAGS = -version-info "1:0:1" lib_LTLIBRARIES = \ libwwwutils.la \ libwwwcore.la \ libwwwtrans.la \ libwwwstream.la \ libwwwcache.la \ libwwwdir.la \ libwwwfile.la \ libwwwftp.la \ libwwwgopher.la \ libwwwmime.la \ libwwwhttp.la \ libwwwnews.la \ libwwwtelnet.la \ libwwwhtml.la \ libwwwapp.la \ libwwwinit.la \ libwwwmux.la \ @WWWXML@ \ @WWWZIP@ \ @WWWWAIS@ \ @WWWSQL@ EXTRA_LTLIBRARIES = \ libwwwxml.la \ libwwwzip.la \ libwwwwais.la \ libwwwsql.la SUBDIRS = SSL windows vms # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .txt .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Generating the .h files using the " @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif icondir = @icondir@ CPPFLAGS := $(CPPFLAGS) -DW3C_ICONS=\"$(icondir)\" inc: $(BUILT_SOURCES) @echo Generated built sources libwwwutils_la_SOURCES = \ WWWUtil.h \ HTArray.h \ HTArray.c \ HTAssoc.h \ HTAssoc.c \ HTAtom.h \ HTAtom.c \ HTBTree.h \ HTBTree.c \ HTChunk.h \ HTChunk.c \ HTHash.h \ HTHash.c \ HTList.h \ HTList.c \ HTMemory.h \ HTMemory.c \ HTString.h \ HTString.c \ HTTrace.c \ HTUtils.h \ HTUU.h \ HTUU.c libwwwcore_la_SOURCES = \ WWWCore.h \ HTAlert.h \ HTAlert.c \ HTAncMan.h \ HTAnchor.c \ HTAnchor.h \ HTChannl.h \ HTChannl.c \ HTDNS.h \ HTDNS.c \ HTError.h \ HTError.c \ HTEscape.h \ HTEscape.c \ HTEvent.h \ HTEvent.c \ HTFormat.c \ HTFormat.h \ HTHost.h \ HTHstMan.h \ HTHost.c \ HTInet.h \ HTInet.c \ HTLib.h \ HTLib.c \ HTLink.h \ HTLink.c \ HTMemLog.h \ HTMemLog.c \ HTMethod.h \ HTMethod.c \ HTNet.h \ HTNetMan.h \ HTNet.c \ HTNoFree.h \ HTNoFree.c \ HTParse.h \ HTParse.c \ HTProt.h \ HTProt.c \ HTReq.h \ HTReqMan.h \ HTReqMan.c \ HTResponse.h \ HTResMan.h \ HTResponse.c \ HTStream.h \ HTIOStream.h \ HTStream.c \ HTStruct.h \ HTTCP.h \ HTTCP.c \ HTTimer.h \ HTTimer.c \ HTTrans.h \ HTTrans.c \ HTUTree.h \ HTUTree.c \ HTUser.h \ HTUser.c \ HTWWWStr.h \ HTWWWStr.c libwwwtrans_la_SOURCES = \ WWWTrans.h \ HTANSI.h \ HTANSI.c \ HTBufWrt.h \ HTBufWrt.c \ HTLocal.h \ HTLocal.c \ HTReader.h \ HTReader.c \ HTSocket.h \ HTSocket.c \ HTWriter.h \ HTWriter.c libwwwstream_la_SOURCES = \ WWWStream.h \ HTConLen.h \ HTConLen.c \ HTEPtoCl.h \ HTEPtoCl.c \ HTFSave.h \ HTFSave.c \ HTFWrite.h \ HTFWrite.c \ HTGuess.h \ HTGuess.c \ HTMerge.h \ HTMerge.c \ HTNetTxt.h \ HTNetTxt.c \ HTSChunk.h \ HTSChunk.c \ HTTee.h \ HTTee.c \ HTXParse.h \ HTXParse.c libwwwcache_la_SOURCES = \ WWWCache.h \ HTCache.h \ HTCache.c libwwwfile_la_SOURCES = \ WWWFile.h \ HTBInit.h \ HTBInit.c \ HTBind.h \ HTBind.c \ HTFile.h \ HTFile.c \ HTMulti.h \ HTMulti.c libwwwftp_la_SOURCES = \ WWWFTP.h \ HTFTP.h \ HTFTP.c \ HTFTPDir.h \ HTFTPDir.c libwwwgopher_la_SOURCES = \ WWWGophe.h \ HTGopher.h \ HTGopher.c libwwwmime_la_SOURCES = \ WWWMIME.h \ HTBound.h \ HTBound.c \ HTHeader.h \ HTHeader.c \ HTMIME.h \ HTMIME.c \ HTMIMPrs.h \ HTMIMPrs.c \ HTMIMERq.h \ HTMIMERq.c \ HTMIMImp.h \ HTMIMImp.c \ HTMulpar.h libwwwhttp_la_SOURCES = \ WWWHTTP.h \ HTTPUtil.h \ HTAABrow.h \ HTAABrow.c \ HTAAUtil.h \ HTAAUtil.c \ HTCookie.h \ HTCookie.c \ HTDigest.h \ HTDigest.c \ HTTChunk.h \ HTTChunk.c \ HTTP.h \ HTTP.c \ HTTPGen.h \ HTTPGen.c \ HTTPReq.h \ HTTPReq.c \ HTTPRes.h \ HTTPRes.c \ HTTPServ.h \ HTTPServ.c \ HTPEP.h \ HTPEP.c libwwwhttp_la_DEPENDENCIES = \ ../../modules/md5/libmd5.la libwwwnews_la_SOURCES = \ WWWNews.h \ HTNDir.h \ HTNDir.c \ HTNews.h \ HTNews.c \ HTNewsLs.h \ HTNewsLs.c \ HTNewsRq.h \ HTNewsRq.c libwwwtelnet_la_SOURCES = \ WWWTelnt.h \ HTTelnet.h \ HTTelnet.c libwwwwais_la_SOURCES = \ WWWWAIS.h \ HTWAIS.h \ HTWAIS.c \ HTWSRC.h \ HTWSRC.c libwwwwais_la_LDFLAGS = -rpath $(libdir) libwwwhtml_la_SOURCES = \ WWWHTML.h \ HTMLPDTD.h \ HTMLPDTD.c \ SGML.h \ SGML.c \ HTMLGen.h \ HTMLGen.c \ HTTeXGen.h \ HTTeXGen.c \ HTPlain.h \ HTPlain.c \ HTML.h \ HTML.c \ HText.h \ HTextImp.h \ HText.c \ HTHInit.h \ HTHInit.c \ HTStyle.h \ HTStyle.c libwwwdir_la_SOURCES = \ WWWDir.h \ HTIcons.h \ HTIcons.c \ HTDescpt.h \ HTDescpt.c \ HTDir.h \ HTDir.c libwwwapp_la_SOURCES = \ WWWApp.h \ HTAccess.h \ HTAccess.c \ HTDialog.h \ HTDialog.c \ HTEvtLst.h \ HTEvtLst.c \ HTFilter.h \ HTFilter.c \ HTHist.h \ HTHist.c \ HTInit.h \ HTInit.c \ HTHome.h \ HTHome.c \ HTLog.h \ HTLog.c \ HTProxy.h \ HTProxy.c \ HTRules.h \ HTRules.c libwwwinit_la_SOURCES = \ WWWInit.h \ HTProfil.h \ HTProfil.c libwwwmux_la_SOURCES = \ WWWMux.h \ HTDemux.h \ HTDemux.c \ HTMuxCh.h \ HTMuxCh.c \ HTMuxHeader.h \ HTMuxTx.h \ HTMuxTx.c libwwwxml_la_SOURCES = \ WWWXML.h \ HTRDF.h \ HTRDF.c \ HTXML.h \ HTXML.c libwwwxml_la_DEPENDENCIES = \ ../../modules/expat/xmltok/libxmltok.la \ ../../modules/expat/xmlparse/libxmlparse.la libwwwxml_la_LDFLAGS = -rpath $(libdir) libwwwzip_la_SOURCES = \ WWWZip.h \ HTZip.h \ HTZip.h \ HTZip.c libwwwzip_la_LDFLAGS = -rpath $(libdir) libwwwsql_la_SOURCES = \ WWWSQL.h \ HTSQL.h \ HTSQL.c \ HTSQLLog.h \ HTSQLLog.h \ HTSQLLog.c libwwwsql_la_LDFLAGS = -rpath $(libdir) INCLUDES = \ -I/usr/local/include \ -I${top_srcdir}/modules/md5 \ -I${top_srcdir}/modules/expat/xmlparse BUILT_SOURCES = \ wwwsys.h \ HTAABrow.h \ HTAAUtil.h \ HTANSI.h \ HTAccess.h \ HTAlert.h \ HTAncMan.h \ HTAnchor.h \ HTArray.h \ HTAssoc.h \ HTAtom.h \ HTBInit.h \ HTBTree.h \ HTBind.h \ HTBind.h \ HTBound.h \ HTBufWrt.h \ HTCache.h \ HTChannl.h \ HTChunk.h \ HTConLen.h \ HTCookie.h \ HTDNS.h \ HTDemux.h \ HTDescpt.h \ HTDialog.h \ HTDigest.h \ HTDir.h \ HTEPtoCl.h \ HTError.h \ HTEscape.h \ HTEvent.h \ HTEvtLst.h \ HTFSave.h \ HTFTP.h \ HTFTPDir.h \ HTFWrite.h \ HTFile.h \ HTFilter.h \ HTFormat.h \ HTGopher.h \ HTGuess.h \ HTHInit.h \ HTHash.h \ HTHeader.h \ HTHist.h \ HTHome.h \ HTHost.h \ HTHstMan.h \ HTIOStream.h \ HTIcons.h \ HTInet.h \ HTInit.h \ HTLib.h \ HTLink.h \ HTList.h \ HTLocal.h \ HTLog.h \ HTMIME.h \ HTMIMERq.h \ HTMIMImp.h \ HTMIMPrs.h \ HTML.h \ HTMLGen.h \ HTMLPDTD.h \ HTMemLog.h \ HTMemory.h \ HTMerge.h \ HTMethod.h \ HTMulpar.h \ HTMulti.h \ HTMuxCh.h \ HTMuxHeader.h \ HTMuxTx.h \ HTNDir.h \ HTNet.h \ HTNetMan.h \ HTNetTxt.h \ HTNews.h \ HTNewsLs.h \ HTNewsRq.h \ HTNoFree.h \ HTPEP.h \ HTParse.h \ HTPlain.h \ HTProfil.h \ HTProt.h \ HTProxy.h \ HTRDF.h \ HTReader.h \ HTReq.h \ HTReqMan.h \ HTResMan.h \ HTResponse.h \ HTRules.h \ HTSChunk.h \ HTSQL.h \ HTSQLLog.h \ HTSocket.h \ HTStream.h \ HTString.h \ HTStruct.h \ HTStyle.h \ HTTCP.h \ HTTChunk.h \ HTTP.h \ HTTPGen.h \ HTTPReq.h \ HTTPRes.h \ HTTPServ.h \ HTTPUtil.h \ HTTeXGen.h \ HTTee.h \ HTTelnet.h \ HTTimer.h \ HTTrans.h \ HTUTree.h \ HTUU.h \ HTUser.h \ HTUtils.h \ HTWAIS.h \ HTWSRC.h \ HTWWWStr.h \ HTWriter.h \ HTXML.h \ HTXParse.h \ HTZip.h \ HText.h \ HTextImp.h \ SGML.h \ WWWApp.h \ WWWCache.h \ WWWCore.h \ WWWDir.h \ WWWFTP.h \ WWWFile.h \ WWWGophe.h \ WWWHTML.h \ WWWHTTP.h \ WWWInit.h \ WWWLib.h \ WWWMIME.h \ WWWMux.h \ WWWNews.h \ WWWSQL.h \ WWWStream.h \ WWWTelnt.h \ WWWTrans.h \ WWWUtil.h \ WWWWAIS.h \ WWWXML.h \ WWWZip.h pkginclude_HEADERS = $(BUILT_SOURCES) DOCS := $(wildcard *.html) EXTRA_DIST = \ $(BUILT_SOURCES) \ $(DOCS) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/SGML.c���������������������������������������������������������������������������0100644�0000764�0000144�00000051522�06720356761�014673� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* SGML.c ** GENERAL SGML PARSER CODE ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: SGML.c,v 1.53 2025/05/18 21:38:57 frystyk Exp $ ** ** This module implements an HTStream object. To parse an ** SGML file, create this object which is a parser. The object ** is (currently) created by being passed a DTD structure, ** and a target HTStructured oject at which to throw the parsed stuff. ** ** 6 Feb 93 Binary seraches used. Intreface modified. ** 8 Jul 94 FM Insulate free() from _free structure element. ** Nov 1996 msa Strip down the parser to minimal HTML tokenizer, ** Stop allocating space for the attribute values, ** use pointers to the string chunk instead. */ #include <assert.h> /* Library include files */ #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTChunk.h" #include "SGML.h" #define INVALID (-1) /* The State (context) of the parser ** ** This is passed with each call to make the parser reentrant ** */ typedef enum _sgml_state { S_text, S_literal, S_tag, S_tag_gap, S_attr, S_attr_gap, S_equals, S_value, S_after_open, S_nl, S_nl_tago, S_ero, S_cro, #ifdef ISO_2022_JP S_esc, S_dollar, S_paren, S_nonascii_text, #endif S_squoted, S_dquoted, S_end, S_entity, S_junk_tag, S_md, S_md_sqs, S_md_dqs, S_com_1, S_com, S_com_2, S_com_2a } sgml_state; /* Internal Context Data Structure ** ------------------------------- */ struct _HTStream { const HTStreamClass *isa; /* inherited from HTStream */ const SGML_dtd *dtd; HTStructuredClass *actions; /* target class */ HTStructured *target; /* target object */ HTTag *current_tag; int current_attribute_number; SGMLContent contents; /* current content mode */ HTChunk *string; int token; /* ptr into string buffer */ sgml_state state; BOOL present[MAX_ATTRIBUTES]; /* Flags: attribute is present? */ int value[MAX_ATTRIBUTES]; /* Offset pointers to the string */ }; #define PUTC(ch) ((*context->actions->put_character)(context->target, ch)) #define PUTB(b,l) ((*context->actions->put_block)(context->target, b, l)) /* Find Attribute Number ** --------------------- */ PRIVATE int SGMLFindAttribute (HTTag* tag, const char * s) { HTAttr* attributes = tag->attributes; int high, low, i, diff; /* Binary search for attribute name */ assert(tag->number_of_attributes <= MAX_ATTRIBUTES); for(low=0, high=tag->number_of_attributes; high > low ; diff < 0 ? (low = i+1) : (high = i) ) { i = (low + (high-low)/2); diff = strcasecomp(attributes[i].name, s); if (diff==0) return i; /* success: found it */ } return -1; } /* Handle Attribute ** ---------------- */ /* PUBLIC const char * SGML_default = ""; ?? */ PRIVATE void handle_attribute_name (HTStream * context, const char * s) { HTTag * tag = context->current_tag; /* Note: if tag==NULL, we are skipping unknown tag... */ if (tag) { int i = SGMLFindAttribute(tag, s); if (i >= 0) { context->current_attribute_number = i; context->present[i] = YES; return; } HTTRACE(SGML_TRACE, "Unknown attribute %s for tag %s\n" _ s _ context->current_tag->name); } context->current_attribute_number = INVALID; /* Invalid */ } /* Handle attribute value ** ---------------------- */ PRIVATE void handle_attribute_value (HTStream * context) { /* Deal with attributes only if tag is known, ignore silently otherwise */ if (context->current_tag) { if (context->current_attribute_number != INVALID) context->value[context->current_attribute_number] = context->token; else { char * data = HTChunk_data(context->string); HTTRACE(SGML_TRACE, "Attribute value %s ignored\n" _ data ? data+context->token : "<null>"); } } context->current_attribute_number = INVALID; /* can't have two assignments! */ } /* Handle entity ** ------------- ** ** On entry, ** s contains the entity name zero terminated */ PRIVATE void handle_entity (HTStream * context) { const char ** entities = context->dtd->entity_names; const char *s = HTChunk_data(context->string); int high, low, i, diff; for(low=0, high = context->dtd->number_of_entities; high > low ; diff < 0 ? (low = i+1) : (high = i)) { i = (low + (high-low)/2); diff = strcmp(entities[i], s); /* Case sensitive! */ if (diff==0) { /* success: found it */ (*context->actions->put_entity)(context->target, i); return; } } /* If entity string not found */ HTTRACE(SGML_TRACE, "Unknown entity %s\n" _ s); (*context->actions->unparsed_entity) (context->target, HTChunk_data(context->string), HTChunk_size(context->string)); } /* End element ** ----------- */ PRIVATE void end_element (HTStream * context, HTTag *tag) { HTTRACE(SGML_TRACE, "End </%s>\n" _ tag->name); (*context->actions->end_element) (context->target, tag - context->dtd->tags); } /* Start an element ** ---------------- */ PRIVATE void start_element (HTStream * context) { int i; char *value[MAX_ATTRIBUTES]; HTTag *tag = context->current_tag; HTTRACE(SGML_TRACE, "Start <%s>\n" _ tag->name); context->contents = tag->contents; /* ** Build the actual pointers to the value strings stored in the ** chunk buffer. (Must use offsets while collecting the values, ** because the string chunk may get resized during the collection ** and potentially relocated). */ for (i = 0; i < MAX_ATTRIBUTES; ++i) value[i] = context->value[i] < 0 ? NULL : HTChunk_data(context->string) + context->value[i]; (*context->actions->start_element) (context->target, tag - context->dtd->tags, context->present, (const char**)value); /* coerce type for think c */ } /* Find Tag in DTD tag list ** ------------------------ ** ** On entry, ** dtd points to dtd structire including valid tag list ** string points to name of tag in question ** ** On exit, ** returns: ** NULL tag not found ** else address of tag structure in dtd */ PRIVATE HTTag * SGMLFindTag (const SGML_dtd* dtd, const char * string) { int high, low, i, diff; for(low=0, high=dtd->number_of_tags; high > low ; diff < 0 ? (low = i+1) : (high = i)) { /* Binary serach */ i = (low + (high-low)/2); diff = strcasecomp(dtd->tags[i].name, string); /* Case insensitive */ if (diff==0) /* success: found it */ return &dtd->tags[i]; } return NULL; } /*________________________________________________________________________ ** Public Methods */ /* Could check that we are back to bottom of stack! @@ */ PRIVATE int SGML_flush (HTStream * context) { return (*context->actions->flush)(context->target); } PRIVATE int SGML_free (HTStream * context) { int status; if ((status = (*context->actions->_free)(context->target)) != HT_OK) return status; HTChunk_delete(context->string); HT_FREE(context); return HT_OK; } PRIVATE int SGML_abort (HTStream * context, HTList * e) { (*context->actions->abort)(context->target, e); HTChunk_delete(context->string); HT_FREE(context); return HT_ERROR; } PRIVATE int SGML_write (HTStream * context, const char * b, int l) { const SGML_dtd *dtd = context->dtd; HTChunk *string = context->string; const char *text = b; int count = 0; while (l-- > 0) { char c = *b++; switch(context->state) { got_element_open: /* ** The label is jumped when the '>' of a the element ** start tag has been detected. This DOES NOT FALL TO ** THE CODE S_after_open, only processes the tag and ** sets the state (c should still contain the ** terminating character of the tag ('>')) */ if (context->current_tag && context->current_tag->name) start_element(context); context->state = S_after_open; break; case S_after_open: /* ** State S_after_open is entered only for single ** character after the element opening tag to test ** against newline. Strip one trainling newline only ** after opening nonempty element. - SGML: Ugh! */ text = b; count = 0; if (c == '\n' && (context->contents != SGML_EMPTY)) { context->state = S_text; break; } --text; goto S_text; S_text: context->state = S_text; case S_text: #ifdef ISO_2022_JP if (c == '\033') { context->state = S_esc; ++count; break; } #endif /* ISO_2022_JP */ if (c == '&') { if (count > 0) PUTB(text, count); count = 0; HTChunk_clear(string); context->state = S_ero; } else if (c == '<') { if (count > 0) PUTB(text, count); count = 0; HTChunk_clear(string); /* should scrap LITERAL, and use CDATA and RCDATA -- msa */ context->state = (context->contents == SGML_LITERAL) ? S_literal : S_tag; } else if (c == '\n') /* Newline - ignore if before end tag! */ context->state = S_nl; else ++count; break; case S_nl: if (c == '<') { if (count > 0) PUTB(text, count); count = 0; HTChunk_clear(string); context->state = (context->contents == SGML_LITERAL) ? S_literal : S_nl_tago; } else { ++count; goto S_text; } break; case S_nl_tago: /* Had newline and tag opener */ if (c != '/') PUTC('\n'); /* Only ignore newline before </ */ context->state = S_tag; goto handle_S_tag; #ifdef ISO_2022_JP case S_esc: if (c=='$') context->state = S_dollar; else if (c=='(') context->state = S_paren; else context->state = S_text; ++count; break; case S_dollar: if (c=='@' || c=='B') context->state = S_nonascii_text; else context->state = S_text; ++count; break; case S_paren: if (c=='B' || c=='J') context->state = S_text; else context->state = S_text; ++count; break; case S_nonascii_text: if (c == '\033') context->state = S_esc; ++count; break; #endif /* ISO_2022_JP */ /* In literal mode, waits only for specific end tag! ** Only foir compatibility with old servers. */ case S_literal: HTChunk_putc(string, c); if ( TOUPPER(c) != ((HTChunk_size(string) == 1) ? '/' : context->current_tag->name[HTChunk_size(string)-2])) { /* If complete match, end literal */ if ((c == '>') && (!context->current_tag->name[HTChunk_size(string)-2])) { end_element (context,context->current_tag); /* ...setting SGML_MIXED below is a bit of kludge, but a good guess that currently works, anything other than SGML_LITERAL would work... -- msa */ context->contents = SGML_MIXED; } else { /* If Mismatch: recover string. */ PUTC( '<'); PUTB(HTChunk_data(string), HTChunk_size(string)); } context->state = S_text; text = b; count = 0; } break; /* ** Character reference or Entity */ case S_ero: if (c == '#') { /* &# is Char Ref Open */ context->state = S_cro; break; } context->state = S_entity; /** FALL THROUGH TO S_entity !! ***/ /* ** Handle Entities */ case S_entity: if (isalnum((int) c)) HTChunk_putc(string, c); else { HTChunk_terminate(string); handle_entity(context); text = b; count = 0; if (c != ';') { --text; goto S_text; } context->state = S_text; } break; /* Character reference */ case S_cro: if (isalnum((int)c)) /* accumulate a character NUMBER */ HTChunk_putc(string, c); else { int value; HTChunk_terminate(string); if (sscanf(HTChunk_data(string), "%d", &value)==1) PUTC((char)value); else { PUTB("&#", 2); PUTB(HTChunk_data(string), HTChunk_size(string)-1); } text = b; count = 0; if (c != ';') { --text; goto S_text; } context->state = S_text; } break; case S_tag: /* new tag */ handle_S_tag: if (isalnum((int)c)) HTChunk_putc(string, c); else { /* End of tag name */ int i; if (c == '/') { if (HTChunk_size(string) > 0) HTTRACE(SGML_TRACE, "`<%s/' found!\n" _ HTChunk_data(string)); context->state = S_end; break; } else if (c == '!') { if (HTChunk_size(string) > 0) HTTRACE(SGML_TRACE, " `<%s!' found!\n" _ HTChunk_data(string)); context->state = S_md; break; } HTChunk_terminate(string); context->current_tag = SGMLFindTag(dtd, HTChunk_data(string)); if (context->current_tag == NULL) { HTTRACE(SGML_TRACE, "*** Unknown element %s\n" _ HTChunk_data(string)); (*context->actions->unparsed_begin_element) (context->target, HTChunk_data(string), HTChunk_size(string)); } else { for (i=0; i<context->current_tag->number_of_attributes; i++) { context->present[i] = NO; context->value[i] = -1; } } context->token = 0; HTChunk_clear(string); context->current_attribute_number = INVALID; goto S_tag_gap; } break; S_tag_gap: context->state = S_tag_gap; case S_tag_gap: /* Expecting attribute or > */ if (isspace((int) c)) break; /* Gap between attributes */ if (c == '>') goto got_element_open; else goto S_attr; S_attr: /* ** Start collecting the attribute name and collect ** it in S_attr. */ context->state = S_attr; HTChunk_truncate(string, context->token); case S_attr: if (isspace((int) c) || c == '>' || c == '=') goto got_attribute_name; else HTChunk_putc(string, c); break; got_attribute_name: /* ** This label is entered when attribute name has been ** collected. Process it and enter S_attr_gap for ** potential value or start of the next attribute. */ HTChunk_terminate(string) ; handle_attribute_name (context, HTChunk_data(string) + context->token); HTChunk_truncate(string, context->token); context->state = S_attr_gap; case S_attr_gap: /* Expecting attribute or = or > */ if (isspace((int) c)) break; /* Gap after attribute */ if (c == '>') goto got_element_open; else if (c == '=') context->state = S_equals; else goto S_attr; /* Get next attribute */ break; case S_equals: /* After attr = */ if (isspace((int) c)) break; /* Before attribute value */ if (c == '>') { /* End of tag */ HTTRACE(SGML_TRACE, "found = but no value\n"); goto got_element_open; } else if (c == '\'') context->state = S_squoted; else if (c == '"') context->state = S_dquoted; else goto S_value; break; S_value: context->state = S_value; HTChunk_truncate(string, context->token); case S_value: if (isspace((int) c) || c == '>') { HTChunk_terminate(string); handle_attribute_value(context); context->token = HTChunk_size(string); goto S_tag_gap; } else HTChunk_putc(string, c); break; case S_squoted: /* Quoted attribute value */ if (c == '\'') { HTChunk_terminate(string); handle_attribute_value(context); context->token = HTChunk_size(string); context->state = S_tag_gap; } else if (c && c != '\n' && c != '\r') HTChunk_putc(string, c); break; case S_dquoted: /* Quoted attribute value */ if (c == '"') { HTChunk_terminate(string); handle_attribute_value(context); context->token = HTChunk_size(string); context->state = S_tag_gap; } else if (c && c != '\n' && c != '\r') HTChunk_putc(string, c); break; case S_end: /* </ */ if (isalnum((int) c)) HTChunk_putc(string, c); else { /* End of end tag name */ HTTag *t; char * first; HTChunk_terminate(string); if ((first=HTChunk_data(string))!=NULL && *first != '\0') t = SGMLFindTag(dtd, HTChunk_data(string)); else /* Empty end tag */ /* Original code popped here one from the stack. If this feature is required, I have to put the stack back... -- msa */ t = NULL; if (!t) { HTTRACE(SGML_TRACE, "Unknown end tag </%s>\n" _ HTChunk_data(string)); (*context->actions->unparsed_end_element) (context->target, HTChunk_data(string), HTChunk_size(string)); } else { context->current_tag = NULL; end_element(context, t); } HTChunk_clear(string); context->current_attribute_number = INVALID; if (c != '>') { if (!isspace((int) c)) HTTRACE(SGML_TRACE, "`</%s%c' found!\n" _ HTChunk_data(string) _ c); context->state = S_junk_tag; } else { text = b; count = 0; context->state = S_text; } } break; case S_junk_tag: if (c == '>') { text = b; count = 0; context->state = S_text; } break; /* ** Scanning (actually skipping) declarations */ case S_md: if (c == '-') context->state = S_com_1; else if (c == '"') context->state = S_md_dqs; else if (c == '\'') context->state = S_md_sqs; else if (c == '>') { text = b; count = 0; context->state = S_text; } break; case S_md_dqs: /* Skip double quoted string */ if (c == '"') context->state = S_md; else if (c == '>') { text = b; count = 0; context->state = S_text; } break; case S_md_sqs: /* Skip single quoted string */ if (c == '\'') context->state = S_md; else if (c == '>') { text = b; count = 0; context->state = S_text; } break; case S_com_1: /* Starting a comment? */ context->state = (c == '-') ? S_com : S_md; if (c == '>') { text = b; count = 0; context->state = S_text; } break; case S_com: /* ..within comment */ if (c == '-') context->state = S_com_2; break; case S_com_2: /* Ending a comment ? */ context->state = (c == '-') ? S_com_2a : S_com; break; case S_com_2a: if (c == '>') { text = b; count = 0; context->state = S_text; } else if (c == '-') { context->state = S_com_2a; } else context->state = S_com; break; } } if (count > 0) PUTB(text, count); return HT_OK; } PRIVATE int SGML_string (HTStream * context, const char* s) { return SGML_write(context, s, (int) strlen(s)); } PRIVATE int SGML_character (HTStream * context, char c) { return SGML_write(context, &c, 1); } /*_______________________________________________________________________ */ /* Structured Object Class ** ----------------------- */ PRIVATE const HTStreamClass SGMLParser = { "SGML", SGML_flush, SGML_free, SGML_abort, SGML_character, SGML_string, SGML_write }; /* Create SGML Engine ** ------------------ ** ** On entry, ** dtd represents the DTD, along with ** actions is the sink for the data as a set of routines. ** */ PUBLIC HTStream *SGML_new(const SGML_dtd * dtd, HTStructured * target) { int i; HTStream* context; if ((context = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("SGML_begin"); context->isa = &SGMLParser; context->string = HTChunk_new(128); /* Grow by this much */ context->dtd = dtd; context->target = target; context->actions = (HTStructuredClass*)(((HTStream*)target)->isa); /* Ugh: no OO */ context->state = S_text; for(i=0; i<MAX_ATTRIBUTES; i++) context->value[i] = 0; return context; } PUBLIC HTTag * SGML_findTag (SGML_dtd * dtd, int element_number) { return (dtd && element_number>=0 && element_number<dtd->number_of_tags) ? (dtd->tags+element_number) : NULL; } PUBLIC char * SGML_findTagName (SGML_dtd * dtd, int element_number) { return (dtd && element_number>=0 && element_number<dtd->number_of_tags) ? (dtd->tags+element_number)->name : NULL; } PUBLIC SGMLContent SGML_findTagContents (SGML_dtd * dtd, int element_number) { return (dtd && element_number>=0 && element_number<dtd->number_of_tags) ? (dtd->tags+element_number)->contents : SGML_ELEMENT; } PUBLIC int SGML_findElementNumber (SGML_dtd * dtd, char * name_element) { if (dtd && name_element) { int i; HTTag *ct; for (i = 0; i< dtd->number_of_tags; i++) { ct = &(dtd->tags[i]); if (!strcasecomp(ct->name,name_element)) return i; } } return -1; } PUBLIC char * HTTag_name (HTTag * tag) { return tag ? tag->name : NULL; } PUBLIC SGMLContent HTTag_content (HTTag * tag) { return tag ? tag->contents : SGML_EMPTY; } PUBLIC int HTTag_attributes (HTTag * tag) { return tag ? tag->number_of_attributes : -1; } PUBLIC char * HTTag_attributeName (HTTag * tag, int attribute_number) { return (tag && attribute_number>=0 && attribute_number<tag->number_of_attributes) ? (tag->attributes+attribute_number)->name : NULL; } PUBLIC char * HTAttr_name (HTAttr * attr) { return attr ? attr->name : NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/SGML.html������������������������������������������������������������������������0100644�0000764�0000144�00000007571�06701165774�015423� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 1-Jun-1996 --> <TITLE>W3C Sample Code Library libwww SGML Parser</TITLE> </HEAD> <BODY> <H1> SGML Parser </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The SGML parser is a state machine. It is called for every character of the input stream. The DTD data structure contains pointers to functions which are called to implement the actual effect of the text read. When these functions are called, the attribute structures pointed to by the DTD are valid, and the function is parsed a pointer to the curent tag structure, and an "element stack" which represents the state of nesting within SGML elements. See also the <A HREF="HTStream.html">the generic Stream definition</A> <P> The following aspects are from Dan Connolly's suggestions: Binary search, Strcutured object scheme basically, SGML content enum type. <P> This module is implemented by <A HREF="SGML.c">SGML.c</A>, and it is a part of the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #ifndef SGML_H #define SGML_H #include "HTStream.h" #include "HTStruct.h" </PRE> <H2> SGML Content Types </H2> <PRE> typedef enum _SGMLContent{ SGML_EMPTY, /* no content */ SGML_LITERAL, /* character data. Recognized exact close tag only. Old www server compatibility only! Not SGML */ SGML_CDATA, /* character data. recognize &lt;/ only */ SGML_RCDATA, /* replaceable character data. recognize &lt;/ and &ref; */ SGML_MIXED, /* elements and parsed character data. recognize all markup */ SGML_ELEMENT /* any data found will be returned as an error*/ } SGMLContent; </PRE> <H2> Attribute Types </H2> <P> Describes the SGML tag attribute <PRE> typedef struct _HTAttr { char * name; /* The (constant) name of the attribute */ /* Could put type info in here */ } HTAttr; extern char * HTAttr_name (HTAttr * attr); </PRE> <H2> Tag Structure Describing SGML Elements </H2> <DL> <DT> name <DD> is the string which comes after the tag opener "&lt;". <DT> attributes <DD> points to a zero-terminated array of attribute names. <DT> litteral <DD> determines how the SGML engine parses the charaters within the element. If set, tag openers are ignored except for that which opens a matching closing tag. </DL> <PRE> typedef struct _HTTag { char * name; /* The name of the tag */ HTAttr * attributes; /* The list of acceptable attributes */ int number_of_attributes; /* Number of possible attributes */ SGMLContent contents; /* End only on end tag @@ */ } HTTag; extern char * HTTag_name (HTTag * tag); extern SGMLContent HTTag_content (HTTag * tag); extern int HTTag_attributes (HTTag * tag); extern char * HTTag_attributeName (HTTag * tag, int attribute_number); </PRE> <H2> DTD Information </H2> <P> Not the whole DTD, but all this parser uses of it. <PRE> #define MAX_ATTRIBUTES 32 /* Max number of attributes per element */ typedef struct { HTTag * tags; /* Must be in strcmp order by name */ int number_of_tags; const char ** entity_names; /* Must be in strcmp order by name */ int number_of_entities; } SGML_dtd; extern HTTag * SGML_findTag (SGML_dtd * dtd, int element_number); extern char * SGML_findTagName (SGML_dtd * dtd, int element_number); extern SGMLContent SGML_findTagContents (SGML_dtd * dtd, int element_number); extern int SGML_findElementNumber(SGML_dtd *dtd, char *name_element); </PRE> <H2> Create an SGML Parser Instance </H2> <P> Create an SGML parser instance which converts a stream to a structured stream. <PRE> extern HTStream * SGML_new (const SGML_dtd * dtd, HTStructured * target); </PRE> <PRE> #endif /* SGML_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: SGML.html,v 2.30 2025/04/02 16:10:36 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWApp.html����������������������������������������������������������������������0100644�0000764�0000144�00000013647�06532073574�016005� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 5-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Application Interface</TITLE> </HEAD> <BODY> <H1> Application Interface </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> In addition top the basic W3C Sample Code Library <A HREF="WWWLib.html">WWWLib interface</A> you <EM>may</EM> include the other <A HREF="/">interfaces</A>&nbsp;depending on the needs of your application. However, it is not required and none of the files included below are ever used in the core part of the Library itself. Only if this file is included, the extra modules will get included in the linked object code. It is also possible to include only a subset of the files below if the functionality you are after is covered by them. This interface contains many application specific features including a set of default <A HREF="HTFilter.html">BEFORE and AFTER filters</A>. <PRE> #ifndef WWWAPP_H #define WWWAPP_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE>#include "<A HREF="wwwsys.html">wwwsys.h</A>" </PRE> <H3> Event Manager </H3> <P> The core part of libwww only provides the hooks for the event manager. There is no event loop internal to the core part. Instead the application must provide the event loop in order to use either pseudo threads or real threads. If the application only uses blocking sockets without threads then it is not required to register any event loop at all. We provide a default implementation of an event loop which you can either take or get some ideas from. <PRE>#include "<A HREF="HTEvtLst.html">HTEvtLst.h</A>" </PRE> <H3> Managing the Home Page </H3> <P> This module provides some "make life easier" functions in order to get the application going. They help you generate the first anchor, also called the <EM>home anchor</EM>. It also contains a nice set of default WWW addresses. <PRE>#include "<A HREF="HTHome.html">HTHome.h</A>" </PRE> <H3> User Dialogs and Messages </H3> <P> You can register a set of callback functions to handle user prompting, error messages, confimations etc. Here we give a set of functions that can be used on almost anu thinkable platform. If you want to provide your own platform dependent implementation then fine :-) <PRE>#include "<A HREF="HTDialog.html">HTDialog.h</A>" </PRE> <H3> Load, Upload, and Search URLs </H3> <P> Even though you may use the API for the HTRequest object directly in order to issue a request, you will probably find that in real life it is easier to use a higher level abstraction API. This API is provided by the <A HREF="HTAccess.html">HTAccess module</A> where you will find all kind of functions for down loading a URL etc. <PRE>#include "<A HREF="HTAccess.html">HTAccess.h</A>" </PRE> <H3> Rule File Management </H3> <P> Another way to initialize applications is to use a rule file, also known as a <A HREF="../User/Using/Rules.html">configuration file</A>. This is for example the case with the W3C httpd and the W3C Line Mode Browser. This module provides basic support for configuration file management and the application can use this is desired. The module is not referred to by the Library. Reading a rule file is implemented as a stream converter so that a rule file can come from anywhere, even across the network! <PRE>#include "<A HREF="HTRules.html">HTRules.h</A>" </PRE> <H3> Proxies and Gateways </H3> <P> Applications do not have to provide native support for all protocols, they can in many situations rely on the support of proxies and gateways to help doing the job. Proxy servers are often used to carry client requests through a firewall where they can provide services like corporate caching and other network optimizations. Both Proxy servers and gateways can serve as "protocol translators" which can convert a request in the main Web protocol, HTTP, to an equivalent request in another protocol, for example NNTP, FTP, or Gopher. In case a proxy server or a gateway is available to the application, it can therefore by use of HTTP forward all requests to for example a proxy server which then handle the communications with the remote server, for example using FTP about the document and return it to the application (proxy client) using HTTP. <PRE>#include "<A HREF="HTProxy.html">HTProxy.h</A>" </PRE> <H3> BEFORE and AFTER Filters </H3> <P> <I>Before</I> a request has been issued and <I>after</I> it has terminated the application often has to do some action as a result of the request (and of the result of the request). The Client Profile Interface Library provides a set of standard BEFORE and AFTER filters to handle <I>caching</I>, <I>redirection</I>, <I>authentication</I>, <I>logging</I> etc. <PRE>#include "<A HREF="HTFilter.html">HTFilter.h</A>" </PRE> <H3> Logging </H3> <P> Often it is required to log the requests issued to the Library. This can either be the case if the application is a server or it can also be useful in a client application. This module provides a simple logging mechanism which can be enabled if needed. See also the <A HREF="HTSQLLog.html">SQL based logging module</A>. <PRE>#include "<A HREF="HTLog.html">HTLog.h</A>" </PRE> <H3> History Management </H3> <P> Another type of logging is keeping track of which documents a user has visited when browsing along on the Web. The Library history manager provides a basic set of functionality to keep track of a linear history list. <PRE>#include "<A HREF="HTHist.html">HTHist.h</A>" </PRE> <P> End of application specific modules <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWApp.html,v 2.21 2025/05/24 19:39:40 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������libwww/Library/src/WWWCache.html��������������������������������������������������������������������0100644�0000764�0000144�00000003646�06523414413�016255� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Persistent Cache Manager</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code Persistent Cache Manager </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> Caching is a required part of any efficient Internet access applications as it saves bandwidth and improves access performance significantly in almost all types of accesses. The Library supports two different types of cache: The memory cache and the file cache. The two types differ in several ways which reflects their two main purposes: The memory cache is for short term storage of graphic objects whereas the file cache is for intermediate term storage of data objects. Often it is desirable to have both a memory and a file version of a cached document, so the two types do not exclude each other. <P> The cache contains details of persietent files which contain the contents of remote documents. The existing cache manager is somewhat naive - especially in its garbage collection but it is just an example of how it can be done. More advanced implementations are welcome! <PRE> #ifndef WWWCACHE_H #define WWWCACHE_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "<A HREF="wwwsys.html">wwwsys.h</A>" </PRE> <H3> Caching Manager </H3> <P> The cache interface defines a persistent cache manager based on accessing files. <PRE>#include "<A HREF="HTCache.html">HTCache.h</A>" </PRE> <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWCache.html,v 2.8 2025/05/04 19:37:47 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������libwww/Library/src/WWWCore.html���������������������������������������������������������������������0100644�0000764�0000144�00000023742�06657355774�016167� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 30-Jun-1996 --> <TITLE>W3C Sample Code Library libwww Core Interface</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code Library Core Interface </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the basic include file for the core of the W3C Sample Code Library. The core part of the Library is designed as a set of registration modules with no real functionality in itself. Instead all the functionality comes when the application registeres the modules that provides a desired functionaly, for example accessing HTTP servers or the local file system. The Library has a special include file called <A HREF="WWWApp.html">WWWApp.h</A> which contains all converters, protocol modules, and a lot of other "sugar" modules that can make the core a very powerful Web interface. You can include this one if the application is to use all the functionality of the Library. <PRE> #ifndef WWWCORE_H #define WWWCORE_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE>#include "wwwsys.h" </PRE> <H3> Generic Libwww Information </H3> <P> This module contains some generic functions for getting the name and version of libwww. It also contains some global configuration options like if you can access the local file system, for example. <PRE>#include "<A HREF="HTLib.html">HTLib.h</A>" </PRE> <H3> The Request Class </H3> <P> Libwww is based on a request/response paradigm and the Request class defines "<I>an operation to be performed on a URL</I>". The request object is the main entry point for an application to issue a request to the Library - all operations on a URL <I>must</I> use a Request object. <PRE> #include "<A HREF="HTReq.html">HTReq.h</A>" </PRE> <H3> Request Methods </H3> <P> This module defines the set of methods that you can perform on a request, for example <B>GET</B>, <B>HEAD</B>, <B>PUT</B>, <B>POST</B>, <B>DELETE</B>, etc. <PRE> #include "<A HREF="HTMethod.html">HTMethod.h</A>" </PRE> <H3> The Anchor (URL) Class </H3> <P> An <A HREF="HTAnchor.html">anchor</A> represents a region of a hypertext document which is linked to another anchor in the same or a different document. Another name for anchors would be URLs as an anchor represents all we know about a URL - including where it points to and who points to it. <PRE>#include "<A HREF="HTAnchor.html">HTAnchor.h</A>" </PRE> <H3> The Link Class </H3> <P> A <A HREF="HTLink.html">Link</A> represents the link between anchor objects. By keeping the link as a object and not as part of the anchor we are capable of handling link semantics in a much more organized way. For example, we can then search for link types among all the link objects that we have created. <PRE>#include "<A HREF="HTLink.html">HTLink.h</A>" </PRE> <H3> Parsing URLs </H3> <P> This module contains code to parse URIs for the various components according to the <A HREF="http://www.w3.org/Addressing/">URI syntax</A> <PRE> #include "<A HREF="HTParse.html">HTParse.h</A>" </PRE> <H3> Escaping and Unescaping URLs </H3> <P> URLs are written only with the graphic printable characters of the US-ASCII coded character set. All other characters must be escaped before they can be used in URLs. This module defines the methods required for escaping and unescaping the URLs. <PRE> #include "<A HREF="HTEscape.html">HTEscape.h</A>" </PRE> <H3> URL Trees and Hierarchies </H3> <P> A <A HREF="HTUTree.html">URL tree</A> is a data class that can store all the information we know about a URL hierarchy. Typically, a URL hierarchy is what a client sees of a Web server but it can also be the view a server has of itself. A URL tree has the advantage that it can be searched using URLs <I>or</I> using realms. The letter is most useful to "guess" information about a remote URL that we haven't seen before. <PRE> #include "<A HREF="HTUTree.html">HTUTree.h</A>" </PRE> <H3> Web Related String Functions </H3> <P> This module is like the <A HREF="HTString.html">generic string utility module</A> but it contains more Web related string utility functions. Examples are functions that return a <I>date string</I>, a <I>Message ID string</I> etc. <PRE> #include "<A HREF="HTWWWStr.html">HTWWWStr.h</A>" </PRE> <H3> The User Profile Class </H3> <P> The User profile&nbsp;class manages what we know about a <I>user on this host</I>. This can for example be the FQDN of the host, the user's email address, the time zone, the news server etc. <PRE> #include "<A HREF="HTUser.html">HTUser.h</A>" </PRE> <H3> The Event Class </H3> <P> The Event Class defines any event manager to be used by libwww for handling events. <PRE> #include "<A HREF="HTEvent.html">HTEvent.h</A>" </PRE> <H3> The Network Trace Handler </H3> <P> The <A HREF="HTMemLog.html">Network Trace Handler</A> provides an easy mechanism for tracing memory problems. It gives a complete dump of all read and written information to and from the network <PRE> #include "<A HREF="HTMemLog.html">HTMemLog.h</A>" </PRE> <H3> The Error Class </H3> <P> The <A HREF="HTError.html">Error class</A> provides an easy API for registering errors ocurring while the Library serves a request. All errors are registered in an "error stack"&nbsp;in the <A HREF="HTReq.html">Request object</A> which allows for nested errors. <PRE> #include "<A HREF="HTError.html">HTError.h</A>" </PRE> <H3> The Alert Class </H3> <P> The <A HREF="HTAlert.html">Alert class</A> defines a set of methods to be used by libwww to be used for passing prompts and message to a user. <PRE> #include "<A HREF="HTAlert.html">HTAlert.h</A>" </PRE> <H3> The Format Manager </H3> <P> The Format Manager is responsible for setting up the stream pipe from the <A HREF="HTChannl.html">Channel Object</A> to the <A HREF="HTReq.html">Request Object</A> when data is arriving, for example as a response to s <A HREF="HTTP.html">HTTP</A> <B>Get</B> request. The Format Manager is also responsible for keeping track of the "<I>preferences</I>" of the application and/or user. It is an integral part of the Web and HTTP, that the client application can express its preferences as a set of "accept" headers in a HTTP request. <PRE> #include "<A HREF="HTFormat.html">HTFormat.h</A>" </PRE> <H3> The Generic Stream Class </H3> <P> The <A HREF="HTStream.html">Stream class</A> defines objects which accepts a sequence of characters. Streams may also have an output in which case multiple stream objects can be cascaded to build a stream pipe where the output of a stream is directed into the input of the next stream object "down the line". <PRE> #include "<A HREF="HTStream.html">HTStream.h</A>" </PRE> <H3> The Structured Stream Class </H3> <P> The <A HREF="HTStruct.html">Structured stream class</A> defines objects which accepts a <I>structured</I> sequence of characters for eaxmple a SGML document. I'll rephrase that. A structured object is am ordered tree-structured arrangement of data which is representable as text. An example is the <A HREF="SGML.html">SGML parser</A> which outputs to a Structured Object. <PRE> #include "<A HREF="HTStruct.html">HTStruct.h</A>" </PRE> <H3> No Free Stream </H3> <P> This stream is a throughline for all methods except FREE and ABORT. This means that it can be use to put ahead of streams that you don't want to be freed or aborted until you are redy to do it yourself. <PRE> #include "<A HREF="HTNoFree.html">HTNoFree.h</A>" </PRE> <H3> The Input/output Stream Classes </H3> <P> The <A HREF="HTIOStream.html">I/O Stream</A> class defines objects which accepts a sequence of characters to and from a <A HREF="HTTrans.html">transport</A> <PRE> #include "<A HREF="HTIOStream.html">HTIOStream.h</A>" </PRE> <H3> The DNS Class </H3> <P> The DNS Class defines generic access to &nbsp;the DNS system. It maintains a cache of all visited hosts so that subsequent connects to the same host doesn't imply a new request to the DNS every time. <PRE> #include "<A HREF="HTDNS.html">HTDNS.h</A>" </PRE> <H3> The Host Class </H3> <P> The <A HREF="HTHost.html">Host class</A> manages what we know about a remote host. This can for example be what type of host it is, and what version it is using. <PRE> #include "<A HREF="HTHost.html">HTHost.h</A>" </PRE> <H3> The Net Class </H3> <P> The <A HREF="HTNet.html">Net class </A>manages information related to a "thread" in libwww. As libwww threads are not really threads but a notion of using interleaved, non-blocking I/O for accessing data objects from the network (or local file system), they can be used on any platform with or without support for native threads. <PRE> #include "<A HREF="HTNet.html">HTNet.h</A>" </PRE> <H3> Internet Functions </H3> <P> This module has the common code for handling typical Internet functions like getting the name of the local host, getting the domain name and email address of user etc. <PRE> #include "<A HREF="HTInet.html">HTInet.h</A>" </PRE> <H3> The Transport Class </H3> <P> The Transport Class defines a transport as used by the <A HREF="HTChannl.html">HTChannel class</A> to communicate with the network, the local file system etc. New transport objects may be registered at any time. This allows the application to easily hook in its own transport layers. <PRE> #include "<A HREF="HTTrans.html">HTTrans.h</A>" </PRE> <H3> The Protocol Class </H3> <P> The Protocol class defines an application level protocol (HTTP, FTP, Gopher, etc.) to be used by libwww. Please note that access to the local file system also is considered to be an appliaction level protocol treated identically to for example the HTTP protocol. <PRE> #include "<A HREF="HTProt.html">HTProt.h</A>" </PRE> <P> End of Core modules <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWCore.html,v 2.21 2025/02/07 18:31:24 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������������libwww/Library/src/WWWDir.html����������������������������������������������������������������������0100644�0000764�0000144�00000005314�06523414414�015763� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Directory Listings</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code Directory Listings </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the include file for the directory handling modules for parsing and presenting directory listings - often in the form of a HTML document. <PRE> #ifndef WWWDIR_H #define WWWDIR_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "<A HREF="wwwsys.html">wwwsys.h</A>" </PRE> <H3> Directory listings </H3> <P> The directory manager generates directory listings for FTP and HTTP requests. This module contains the protocol independent code and it produces the HTML object. It is only included if either the <A HREF="HTFTP.html">FTP</A> or the <A HREF="HTFile.html">File</A> module is included. <PRE> #include "<A HREF="HTDir.html">HTDir.h</A>" </PRE> <H3> Icons </H3> <P> No directory listings without icons! The WWWDir interface contains support for including references (URLs and ALT text tags) to icons in directory listings. The icons are selected as a function of the media type and the content encoding of the file in question. That is - you can set up icons for compressed files, postscript files etc. There is also a small set of specific icons representing directories etc. <P> <B>Note</B>: Icons are not set up by default! You must enable them yourself. The Library distribution contains a <A HREF="../../Icons/internal/">small set of default icons</A> which you can find at <CODE>$(datadir)/www-icons</CODE>, and they can be set up using the <A HREF="HTInit.html#icons">HTIconInit() initialization</A> function in the <A HREF="WWWInit.html">WWWInit startup interface</A> <PRE>#include "<A HREF="HTIcons.html">HTIcons.h</A>" </PRE> <H3> File Descriptions </H3> <P> Descriptions appearing in <A HREF="HTDir.html">directory listings</A> are produced by this module. This may be overridden by another module for those who which descriptions to come from somewhere else. It's only HTTP directory listings that contain a description field (if enabled by the <A HREF="HTDir.html">Directory browsing module</A>. <PRE> #include "<A HREF="HTDescpt.html">HTDescpt</A>.h" </PRE> <P> End of DIR module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWDir.html,v 2.10 2025/05/04 19:37:48 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWFTP.html����������������������������������������������������������������������0100644�0000764�0000144�00000002613�06523414415�015676� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww FTP CLIENT</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code FTP MODULE </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the include file for the basic FTP module that can be used together with the <A HREF="WWWCore.html">core of the W3C Sample Code Library</A>. It contains all FTP specific modules which are required to compile and build the FTP DLL. <PRE> #ifndef WWWFTP_H #define WWWFTP_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2> System dependencies </H2> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <H2> Library Includes </H2> <H3> The main FTP state machine </H3> <PRE> #include "<A HREF="HTFTP.html">HTFTP.h</A>" /* FTP client state machine */ </PRE> <H3> The FTP Directory listing Management </H3> <PRE> #include "<A HREF="HTFTPDir.html">HTFTPDir.h</A>" /* Streams for parsing FTP output */ </PRE> <P> End of FTP module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWFTP.html,v 2.7 2025/05/04 19:37:49 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWFile.html���������������������������������������������������������������������0100644�0000764�0000144�00000006156�07130376736�016142� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Local File Access</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code Local File Access </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the module for accessing local files and directories. The module contans <PRE> #ifndef WWWFILE_H #define WWWFILE_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <H3> Access the Local File System </H3> <P> The WWWFile interface provides a platform independent access scheme for local files. The local file access works exactly like any other access scheme, for example HTTP, in that the "file protocol" is independent of the underlying transport. This can be used to for example slide in a CVS transport layser underneath the file module without making any modifications to the file module itself. You can read more about the transport managament in the <A HREF="WWWTrans.html">Transport Interface</A>. <PRE>#include "<A HREF="HTFile.html">HTFile.h</A>" </PRE> <H3> Content Negotiation </H3> <P> When accessing the local file system, you can enable <I>content negotiation</I> as described in the <A HREF="http://www.w3.org/Protocols/">HTTP specification</A>. &nbsp;The content negotiation algorithm is based on file suffixes as defined by the <A HREF="HTBind.html">Bind manager</A>. When looking for a file you do <B>not</B> have to specify a suffix. Instead this module looks for all alternatives with the same main name. For example, looking for the file <I>Overview</I> can result in any of the files (or directories) <I>Overview.txt</I>, <I>Overview.html</I>, <I>Overview.ps</I> etc. The selection algorithm is based on the values of the preferences for language, media type, encoding, etc. - exactly like a server would do with the <CODE>accept</CODE> headers. <PRE> #include "<A HREF="HTMulti.html">HTMulti.h</A>" </PRE> <H3> File Suffix Binding </H3> <P> This module sets up the binding between a file suffix and a media type, language, encoding etc. In a client application the suffixes are used in protocols that does not directly support media types etc., like FTP, and in server applications they are used to make the bindings between the server and the local file store that the server can serve to the rest of the world (well almost) <PRE> #include "<A HREF="HTBind.html">HTBind.h</A>" </PRE> <H2> Default File Suffix Bindings </H2> <P> Register the default set of bindings between file suffixes and media types. This is used for example to guess the media type of a FTP URL of a local file URL. <PRE> #include "<A HREF="HTBInit.html">HTBInit.h</A>" </PRE> <P> End of FILE module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWFile.html,v 2.11 2025/07/04 15:08:14 kahan Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWGophe.html��������������������������������������������������������������������0100644�0000764�0000144�00000002367�06523414416�016316� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww GOPHER CLIENT</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 16-Apr-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>Declaration of W3C Sample Code GOPHER MODULE</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This is the include file for the basic GOPHER module that can be used together with the core of the W3C Sample Code Library. It contains all GOPHER specific modules which are required to compile and build the GOPHER DLL.<P> <PRE> #ifndef WWWGOPHER_H #define WWWGOPHER_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2>System dependencies</H2> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <H2>Library Includes</H2> <PRE> #include "HTGopher.h" /* GOPHER client state machine */ </PRE> End of GOPHER module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <HR> <ADDRESS> @(#) $Id: WWWGophe.html,v 2.6 2025/05/04 19:37:50 frystyk Exp $ </ADDRESS> </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWHTML.html���������������������������������������������������������������������0100644�0000764�0000144�00000002452�06664364151�016021� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTML PARSER</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code HTML MODULE </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the include file for the basic HTML module that can be used together with libwww. It contains all HTML specific modules which are required to compile and use the <A HREF="HTML.html">default libwww HTML parser</A> <PRE> #ifndef WWWHTML_H #define WWWHTML_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2> System dependencies </H2> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <H2> Library Includes </H2> <PRE> #include "HTMLPDTD.h" #include "SGML.h" #include "HTMLGen.h" #include "HTTeXGen.h" #include "HTPlain.h" #include "HTML.h" #include "HText.h" #include "HTHInit.h" #include "HTStyle.h" </PRE> <P> End of HTML module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWHTML.html,v 2.11 2025/02/22 23:29:45 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWHTTP.html���������������������������������������������������������������������0100644�0000764�0000144�00000011315�06676211240�016023� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww HTTP Client/Server Module</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code HTTP Module </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the include file for all HTTP access including the <A HREF="HTTPServ.html">server side</A> and the <A HREF="HTTP.html">client side</A>. It can be used together with the <A HREF="WWWCore.html">core of the W3C Sample Code Library</A>. It contains all HTTP specific modules which are required to compile and build the HTTP DLL. <PRE> #ifndef WWWHTTP_H #define WWWHTTP_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE>#include "<A HREF="wwwsys.html">wwwsys.h</A>" </PRE> <H3> Basic HTTP definitions and utilities </H3> <P> A small set of very basic HTTP stuff <PRE> #include "<A HREF="HTTPUtil.html">HTTPUtil.h</A>" </PRE> <H3> HTTP Client State Machine </H3> <P> The client statue machine handles the client side of HTTP generating requests and parsing responses. <PRE>#include "<A HREF="HTTP.html">HTTP.h</A>" </PRE> <H3> HTTP Server State Machine </H3> <P> The HTTP module also contains a very simple server module which can be used for experimenting but which is not a full blown server. <PRE>#include "<A HREF="HTTPServ.html">HTTPServ.h</A>" /* HTTP server state machine */ </PRE> <H3> General HTTP Header Stream </H3> <P> The HTTP Request stream generates a HTTP request header and writes it to the target which is normally a HTWriter stream. <PRE>#include "<A HREF="HTTPGen.html">HTTPGen.h</A>" </PRE> <H3> Client-side Request Generator Stream </H3> <P> The HTTP Request stream generates a HTTP request header and writes it to the target which is normally a HTWriter stream. <PRE>#include "<A HREF="HTTPReq.html">HTTPReq.h</A>" </PRE> <H3> Server-side Response Generator Stream </H3> <P> The HTTP response stream generates a HTTP response header and writes it to the target which is normally a HTWriter stream. <PRE>#include "<A HREF="HTTPRes.html">HTTPRes.h</A>" </PRE> <H3> Chunked Encoding and Decoding </H3> <P> Chunked transfer encoding and decoding is new in HTTP/1.1. It allows applications to use persistent connections while not knowing the content length a priori to the response header is generated. <PRE>#include "<A HREF="HTTChunk.html">HTTChunk.h</A>" </PRE> <H3> HTTP Extensions </H3> <P> The <A HREF="HTPEP.html">PEP Manager</A> is a registry for <I>PEP Protocols</I> that follow the generic syntax defined by the <A HREF="/">HTTP</A> <I>PEP protocol</I> headers. All <I>PEP Protocols</I> are registered at run-time in form of a <I>PEP Module</I>. A <I>PEP Module</I> consists of the following: <PRE>#include "<A HREF="HTPEP.html">HTPEP.h</A>" </PRE> <H3> Generic Authentication </H3> <P> The <A HREF="HTAAUtil.html">Authentication Manage</A><I>r</I> is a registry for <I>Authentication Schemes</I> that follow the generic syntax defined by the <A HREF="/">HTTP</A> <CODE>WWW-authenticate</CODE> and <CODE>Authorization</CODE> headers. Currently, the only scheme defined is <I>Basic Authentication</I>, but <I>Digest Authentication </I>will soon follow. All <I>Authentication Schemes</I> are registered at run-time in form of an <I>Authentication Module</I>. An <I>Authentication Module</I> consists of the following: <PRE>#include "<A HREF="HTAAUtil.html">HTAAUtil.h</A>" </PRE> <H3> Client Side Authentication </H3> <P> Contains code for parsing challenges and creating credentials for basic and digest authentication schemes. See also the <A HREF="HTAAUtil.html">HTAAUtil module</A> for how to handle other authentication schemes. <PRE>#include "<A HREF="HTAABrow.html">HTAABrow.h</A>" </PRE> <H3> HTTP Cookies </H3> <P> The <A HREF="HTCookie.html">cookie module</A> provides a simple <A HREF="http://www.netscape.com/newsref/std/cookie_spec.html">HTTP Cookie handling mechanism</A>. It really also is an excersize in showing how libwww can be extended with something like cookies in a modular manner. An important thing to note about this implementation is that it does <EM>not</EM> provide storage for cookies - this is left to the application as normally cookies have to be kept under lock. <PRE> #include "<A HREF="HTCookie.html">HTCookie.h</A>" </PRE> <P> End of HTTP module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWHTTP.html,v 2.14 2025/03/24 16:28:16 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWInit.html���������������������������������������������������������������������0100644�0000764�0000144�00000004452�06700250336�016150� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 --> <TITLE>W3C Sample Code Library libwww Default Initialization</TITLE> </HEAD> <BODY> <H1> Default Initialization Modules and Profiles </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> As mentioned in the <A HREF="../User/Architecture/">Library Architecture</A>, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing MIME headers etc. This module helps the application programmer setting up all this functionality, but it is important to note that none of it is <I>required</I> in order to use libwww. <PRE> #ifndef WWWINIT_H #define WWWINIT_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2> Default Protocols, Transports, MIME Headers, Dialogs etc. </H2> <P> This module contains a large set of default initialization functions for protocol modules, stream converters, event managers etc. <PRE> #include "<A HREF="HTInit.html">HTInit.h</A>" </PRE> <H2> Application Profiles </H2> <P> Application profiles are initialization functions that are "preset" to initialize the Library with the set of features often used in <I>clients</I>, <I>servers</I>, <I>robots</I>, and <I>proxy servers</I>. They are basically collections of the more detailed initialization functions that you can find later in this interface description. In many cases you do not need to use anything else than the profiles, but if you have more specific requirements then you can always fall back on using the initialization functions below or even werite your own extensions. <PRE> #include "<A HREF="HTProfil.html">HTProfil.h</A>" </PRE> <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWInit.html,v 2.11 2025/03/30 22:31:58 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWLib.html����������������������������������������������������������������������0100644�0000764�0000144�00000004444�06523414420�015753� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 16-Apr-1996 --> <NEXTID N="z11"> <TITLE>W3C Sample Code Library libwww Basic libwww Interface</TITLE> </HEAD> <BODY> <H1> Basic Libwww Interface </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the basic include files and the core include files necessary in order to use the W3C Sample Code Library. It contains all core specific modules which are required to compile and build the Library. No converter streams or protocol modules are included in this file as they are for the application to set up. The Library has a special include file called <A HREF="WWWApp.html">WWWApp.h</A> which contains all converters and protocol modules known to the Library. You can include this one if the application is to use all the functionality of the Library. <PRE> #ifndef WWWLIB_H #define WWWLIB_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "<A HREF="wwwsys.html">wwwsys.h</A>" </PRE> <H2> General Utilities </H2> <P> The <A HREF="WWWUtil.html">Basic Utility interface</A> is mostly container modules, dynamic strings and other stuff that you can't live without when building applications. The modules are used by the core part of the W3C Sample Code Library but can also be used by the application. <PRE>#include "<A HREF="WWWUtil.html">WWWUtil.h</A>" </PRE> <H2> Core Modules </H2> <P> This is the basic include file for the core of the W3C Sample Code Library. The core part of the Library is designed as a set of registration modules with no real functionality in itself. Instead all the functionality comes when the application registeres the modules that provides a desired functionaly, for example accessing HTTP servers or the local file system. <PRE>#include "<A HREF="WWWCore.html">WWWCore.h</A>" </PRE> <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWLib.html,v 2.29 2025/05/04 19:37:52 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWMIME.html���������������������������������������������������������������������0100644�0000764�0000144�00000007441�06526451312�016000� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww MIME and RFC822</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code MIME and RFC822 </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the module for basic RFC822/MIME parsing that can be used together with the core of the W3C Sample Code Library. It contains all MIME specific modules which are required to compile and build the MIME DLL. <PRE> #ifndef WWWMIME_H #define WWWMIME_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "<A HREF="wwwsys.html">wwwsys.h</A>" </PRE> <H3> MIME Entity Header Parsing </H3> <P> The libwww MIME parsers are completely generic in that they don't know about any particular headers - they are all registered at run-time by the application. There are two parsers: the first is for parsing <I>MIME headers</I> and the second is for parsing <I>MIME footers</I>. They are both converters that can be set up using the <A HREF="HTInit.html#Converter">HTConverterInit</A> function in the <A HREF="WWWInit.html">libwww setup module</A> <P> There is also a default set of the headers defined by the <A HREF="http://www.w3.org/Protocols/">HTTP/1.1</A> specification which can be initialized using the <A HREF="HTInit.html#MIME"><CODE>HTMIMEInit()</CODE></A> function in the <A HREF="WWWInit.html">libwww setup module</A>. <PRE>#include "<A HREF="HTMIME.html">HTMIME.h</A>" /* Generic MIME parser */ #include "<A HREF="HTHeader.html">HTHeader.h</A>" /* Header parser registration */ </PRE> <H3> MIME Entity Header Generation </H3> <P> When sending a MIME entity along with a request, for example using NNTP or HTTP, the entity headers are generated by the MIME generator stream. This stream will be added to the output stream pipe in order to decorate the outgoing request. <PRE>#include "<A HREF="HTMIMERq.html">HTMIMERq.h</A>" /* MIME request generator */ </PRE> <H3> Default MIME Header Parsers </H3> <P> The Library's MIME parser is divided into two parts: A generic MIME parser that knows how to unwrap all RFC822 headers and specialized header parsers that knows how to parse <CODE>Content-Length</CODE>, for example. This is the default set of the specialized MIME header parsers that can be registered as part of the generic MIME. Note that these functions are not registered by default - they must be registered by the application. This can be done using the <A HREF="HTInit.html">HTMIMEInit()</A> function in the <A HREF="WWWInit.html">WWWInit interface</A>. Of course this can also be used to register new headers that are not represented below - or if you want to replace a default parser then this is also very easy. <PRE>#include "<A HREF="HTMIMImp.html">HTMIMImp.h</A>" </PRE> <H3> Multipart MIME Parsing and Generation </H3> <P> Libwww supports MIME multipart generation and parsing using two streams. The parser stream is a converter that can be setup for"converting" the MIME body parts into separate documents. The MIME multipart stream parser can be set up by using the <A HREF="HTInit.html#Converter">HTConverterInit</A> function in the <A HREF="WWWInit.html">libwww setup module</A>. <PRE> #include "<A HREF="HTBound.html">HTBound.h</A>" /* Multipart MIME parser */ #include "<A HREF="HTMulpar.html">HTMulpar.h</A>" /* Multipart MIME generator stream */ </PRE> <P> End of MIME modules <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWMIME.html,v 2.11 2025/05/14 02:11:22 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWMux.html����������������������������������������������������������������������0100644�0000764�0000144�00000001767�06555436300�016031� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww MUX Transport</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code Library MUX Transport </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <PRE> #ifndef WWWMUX_H #define WWWMUX_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2> System dependencies </H2> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <PRE> #include "<A HREF="HTMuxCh.html">HTMuxCh.h</A>" #include "<A HREF="HTMuxTx.html">HTMuxTx.h</A>" #include "<A HREF="HTDemux.html">HTDemux.h</A>" </PRE> <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWMux.html,v 2.4 2025/07/22 19:25:52 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������libwww/Library/src/WWWNews.html���������������������������������������������������������������������0100644�0000764�0000144�00000004204�06523414423�016156� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww News/NNTP Client</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code News/NNTP Client </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This application interface defines a News client which &nbsp;can be used together with the <A HREF="WWWCore.html">Library core</A>.The module itself is <I>not</I> part of the <A HREF="WWWCore.html">Library core</A>. It may be registered by the application if wanted. The application may also use the <A HREF="HTProfil.html">application profiles</A> to initialize this module. <PRE> #ifndef WWWNEWS_H #define WWWNEWS_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "<A HREF="wwwsys.html">wwwsys.h</A>" </PRE> <H3> NNTP Protocol State machine </H3> <P> The state machine handles requests and responses to an NNTP server according to the NNTP specifications. <PRE>#include "<A HREF="HTNews.html">HTNews.h</A>" </PRE> <H3> News Request Stream </H3> <P> The request stream generates a request which may or may not include a message body to be posted to the server <PRE>#include "<A HREF="HTNewsRq.html">HTNewsRq.h</A>" </PRE> <H3> News Response Stream for Messages and group Listings </H3> <P> The News response streams parses the output from an NNTP server. The two formats understood are News groups and News articles. <PRE>#include "<A HREF="HTNewsLs.html">HTNewsLs.h</A>" </PRE> <H3> Presentation of News Listings in HTML </H3> <P> When the output has been received then we convert it to HTML by parsing it through the following stream. <PRE>#include "<A HREF="HTNDir.html">HTNDir.h</A>" </PRE> <P> End of News module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWNews.html,v 2.7 2025/05/04 19:37:55 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWSQL.html����������������������������������������������������������������������0100644�0000764�0000144�00000003633�06532073574�015716� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww SQL Interface</TITLE> </HEAD> <BODY> <H1> W3C Sample Code Library libwww SQL Interface </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module is an easy to use interface to SQL databases. It contains both a generic interface and some specific examples of how this can be used to connect a Web client to an SQL server. This requires that you have linked against the <A href="http://www.tcx.se/">MySQL library</A>. See the <A href="/">installation instructions</A> for details. <PRE> #ifndef WWWSQL_H #define WWWSQL_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE>#include "wwwsys.h" </PRE> <H3> Basic SQL Interface </H3> <P> This module interacts with the MYSQL C client library to perform SQL operations. It is not intended as a complete SQL API but handles most of the typical error situations talking to an SQL server so that the caller doesn't have to think about it. <PRE> #ifdef HT_MYSQL #include "<A HREF="HTSQL.html">HTSQL.h</A>" #endif </PRE> <H3> SQL Client Side Logging </H3> <P> This SQL based log class generates a SQL database and a set of tables storing the results of a request. The result is stored in different tables depending on whether it is information about the request or the resource returned. <PRE> #ifdef HT_MYSQL #include "<A HREF="HTSQLLog.html">HTSQLLog.h</A>" #endif </PRE> <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* WWWSQL_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWSQL.html,v 2.1 2025/05/24 19:39:40 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������libwww/Library/src/WWWStream.html�������������������������������������������������������������������0100644�0000764�0000144�00000010550�06661445112�016500� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 16-Apr-1996 --> <TITLE>W3C Sample Code Library libwww Streams</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code Library Streams </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The stream part of the Library is a set of streams that can be used in many contexts throughout the Library. It also contains conversions between streams and other memory containers, for example <A HREF="HTChunk.html">Chunks</A>. <PRE> #ifndef WWWSTREAM_H #define WWWSTREAM_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE>#include "wwwsys.h" </PRE> <H3> Content Length Counter </H3> <P> This stream also buffers the result to find out the content length. If a maximum buffer limit is reached Content-Length is calculated for logs but it is not sent to the client -- rather the buffer is flushed right away. <PRE> #include "<A HREF="HTConLen.html">HTConLen.h</A>" /* Content Length Counter */ </PRE> <H3> File Writer Streams </H3> <P> This module contains a set of basic file writer streams that are used to dump data objects to disk at various places within the Library core. Most notably, we use these streams in the <A HREF="HTFWrite.html">Format Manager</A> in order to handle external presenters, for example post script viewers etc. These streams can of course also be used in other contexts by the application. <PRE> #include "<A HREF="HTFWrite.html">HTFWrite.h</A>" #include "<A HREF="HTFWrite.html">HTFSave.h</A>" </PRE> <H3> Content Guess Stream </H3> <P> This interface provides functionality for guessing unknown media types from magic words. The stream is a one that reads first a chunk of stuff, tries to figure out the format, and calls <CODE>HTStreamStack()</CODE>. This is a kind of lazy-evaluation of <CODE>HTStreamStack()</CODE>. This could be extended arbitrarily to recognize all the possible file formats in the world, if someone only had time to do it. <PRE> #include "<A HREF="HTGuess.html">HTGuess.h</A>" /* Guess stream */ </PRE> <H3> Tee Stream </H3> <P> The Tee stream just writes everything you put into it into two oter streams. One use (the only use?!) is for taking a cached copey on disk while loading the main copy, without having to wait for the disk copy to be finished and reread it. <PRE> #include "<A HREF="HTTee.html">HTTee.h</A>" </PRE> <H3> Merge Stream </H3> <P> The Merge stream can be used to merge multiple streams into a single target stream. The Merge stream does not prevent any of the streams from writing and no ordering is imposed. The main feature is basically that the free and abort methods can be called <B>n</B> times where <B>n</B> equals the number of <I>feeds</I> that put data to the stream. <PRE> #include "<A HREF="HTMerge.html">HTMerge.h</A>" </PRE> <H3> Stream to Chunk Conversion </H3> <P> If you do not like the stream model in libwww, then you can use this stream to convert a <A HREF="HTStream.html">stream object </A>into a <A HREF="HTChunk.html">Chunk object</A> which is a dynamic character string buffer in memory. <PRE> #include "<A HREF="HTSChunk.html">HTSChunk.h</A>" </PRE> <H3> Stream to Memory Object Conversion </H3> <P> This version of the stream object is a hook for clients that want an unparsed stream from libwww. The HTXParse_put_* and HTXParse_write routines copy the content of the incoming buffer into a buffer that is realloced whenever necessary. This buffer is handed over to the client in <CODE>HTXParse_free</CODE>. <PRE> #include "<A HREF="HTXParse.html">HTXParse.h</A>" /* External parse stream */ #include "<A HREF="HTEPtoCl.html">HTEPtoCl.h</A>" /* Client callbacks */ </PRE> <H3> Network Telnet To Internal Character Text </H3> <P> This is a filter stream suitable for taking text from a socket and passing it into a stream which expects text in the local C representation. <PRE> #include "<A HREF="HTNetTxt.html">HTNetTxt.h</A>" </PRE> <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWStream.html,v 2.10 2025/02/14 04:00:10 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWTelnt.html��������������������������������������������������������������������0100644�0000764�0000144�00000002533�06523414424�016334� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww TELNET, RLOGIN, AND TN3270 CLIENTS</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 16-Apr-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>Declaration of W3C Sample Code Telnet, rlogin, and TN3270 MODULE</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This is the include file for the basic Telnet, rlogin, and TN3270 module that can be used together with the core of the W3C Sample Code Library. It contains all Telnet, rlogin, and TN3270 specific modules which are required to compile and build the Telnet, rlogin, and TN3270 DLL.<P> <PRE> #ifndef WWWTELNET_H #define WWWTELNET_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2>System dependencies</H2> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <H2>Library Includes</H2> <PRE> #include "HTTelnet.h" /* TELNET client state machine */ </PRE> End of TELNET module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <HR> <ADDRESS> @(#) $Id: WWWTelnt.html,v 2.6 2025/05/04 19:37:56 frystyk Exp $ </ADDRESS> </BODY> </HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWTrans.html��������������������������������������������������������������������0100644�0000764�0000144�00000002536�06523414425�016341� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww Transports</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code Library Transports </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <PRE> #ifndef WWWTRANS_H #define WWWTRANS_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2> System dependencies </H2> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <H2> Transport Modules </H2> <P> These are the transports describing this interface <H3> Local File Transport </H3> <PRE> #include "<A HREF="HTANSI.html">HTANSI.h</A>" #include "<A HREF="HTLocal.html">HTLocal.h</A>" </PRE> <H3> BSD Socket Transport </H3> <PRE> #include "<A HREF="HTTCP.html">HTTCP.h</A>" #include "<A HREF="HTSocket.html">HTSocket.h</A>" #include "<A HREF="HTReader.html">HTReader.h</A>" #include "<A HREF="HTWriter.html">HTWriter.h</A>" #include "<A HREF="HTBufWrt.html">HTBufWrt.h</A>" </PRE> <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWTrans.html,v 2.5 2025/05/04 19:37:57 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWUtil.html���������������������������������������������������������������������0100644�0000764�0000144�00000010370�06523414425�016162� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 16-Apr-1996 --> <NEXTID N="z11"> <TITLE>W3C Sample Code Library libwww Basic Utilities</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code Library Basic Utilities </H1> <PRE>/* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Basic Utility modules are mostly container modules, dynamic strings and other stuff that you can't live without when building applications. The modules are used by the core part of the W3C Sample Code Library but can also be used by the application. See also the main Library include file called <A HREF="WWWLib.html">WWWLib.h</A> which contains all converters and protocol modules known to the Library. You can include this one if the application is to use all the functionality of the Library. <PRE> #ifndef WWWUTIL_H #define WWWUTIL_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2> System dependencies </H2> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <H2> Library Includes </H2> <H3> Basic Macros etc </H3> <P> This module includes file contains things we need everywhere, generally macros for declarations, booleans, etc. <PRE> #include "<A HREF="HTUtils.html">HTUtils.h</A>" </PRE> <H3> Dynamic Arrays </H3> <P> This module implements a flexible array of pointers. It is a general utility module. An array is a structure which may be extended. These routines create and append data to arrays, automatically reallocating them as necessary. It is garanteed that the last entry in an array is <B>NULL</B> <PRE> #include "<A HREF="HTArray.html">HTArray.h</A>" </PRE> <H3> Association Lists </H3> <P> This is a small module build on top of the <A HREF="HTList.html">HTList module</A> that provides a way to store <EM>Name-Value</EM> pairs in an easy way. <PRE> #include "<A HREF="HTAssoc.html">HTAssoc.h</A>" </PRE> <H3> Atoms </H3> <P> Atoms are strings which are given representative pointer values so that they can be stored more efficiently, and comparisons for equality done more efficiently. The pointer values are in fact entries into a hash table. <PRE> #include "<A HREF="HTAtom.html">HTAtom.h</A>" </PRE> <H3> Dynamic Strings </H3> <P> A Chunk is a block wise expandable array of type (char *) and is a sort of apology for real strings in C. Chunks make it easier to handle dynamic strings of unknown size. It is often faster than using the String Copy Routines. <PRE> #include "<A HREF="HTChunk.html">HTChunk.h</A>" </PRE> <H3> Linked Lists </H3> <P> This module provides the functionality for managing a generic list of data objects. The module is implemented as a single linked list using the scheme <EM>first in - last out (FILO)</EM>. <PRE> #include "<A HREF="HTList.html">HTList.h</A>" </PRE> <H3> Dymamic Memory Management </H3> <P> This module defines any memory handler to be used by libwww for allocating and de-allocating dynamic memory. As dynamic memory may be a scarce resource, it is required that an application can handle memory exhaustion gracefully. <PRE> #include "<A HREF="HTMemory.html">HTMemory.h</A>" </PRE> <H3> String Utilities </H3> <P> Routines for dynamic arrays of characters include string copy, case insensitive comparison etc. <PRE> #include "<A HREF="HTString.html">HTString.h</A>" </PRE> <H3> UU encode and decode </H3> <P> File module provides functions functions for uuencode and decode strings which convert a buffer of bytes to/from <A HREF="http://info.internet.isi.edu:80/in-notes/rfc/files/rfc1113.txt">RFC 1113 </A>printable encoding format. This technique is similar to the familiar Unix uuencode format in that it maps 6 binary bits to one ASCII character (or more aptly, 3 binary bytes to 4 ASCII characters). However, RFC 1113 does not use the same mapping to printable characters as uuencode. <PRE> #include "<A HREF="HTUU.html">HTUU.h</A>" </PRE> <P> End of utility modules <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWUtil.html,v 2.12 2025/05/04 19:37:57 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWWAIS.html���������������������������������������������������������������������0100644�0000764�0000144�00000002507�06523414426�016014� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 16-Apr-1996 --> <NEXTID N="z11"> <TITLE>W3C Sample Code Library libwww WAIS CLIENT</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code WAIS MODULE </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This is the include file for the basic WAIS module that can be used together with the <A HREF="WWWCore.html">core of the W3C Sample Code Library</A>. It contains all WAIS specific modules which are required to compile and build the WAIS DLL. <PRE> #ifndef WWWWAIS_H #define WWWWAIS_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2> System dependencies </H2> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "<A HREF="wwwsys.html">wwwsys.h</A>" </PRE> <H2> Library Includes </H2> <PRE> #include "<A HREF="HTWAIS.html">HTWAIS.h</A>" /* WAIS client state machine */ </PRE> <P> End of WAIS module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWWAIS.html,v 2.8 2025/05/04 19:37:58 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWXML.html����������������������������������������������������������������������0100644�0000764�0000144�00000003430�06706437611�015711� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library libwww XML/RDF Module</TITLE> </HEAD> <BODY> <H1> Declaration of W3C Sample Code XML/RDF Module </H1> <PRE> /* ** (c) COPYRIGHT MIT 1999. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> <STRONG>Thanks so much to John Punin for writing this code!</STRONG> <P> We use <A href="http://www.jclark.com/xml/expat.html">James Clark's expat XML parser</A> which is very neat indeed. As the code doesn't come as a separate library, I included it in the libwww CVS code base where I compile is as two libraries: <CODE>libxmltok.a</CODE> and <CODE>libxmlparse.a</CODE>. See the <A HREF="../External/">external modules that libwww works</A> with for details. <PRE> #ifndef WWWXML_H #define WWWXML_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H2> System dependencies </H2> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE> #include "wwwsys.h" </PRE> <H3> The Libwww Expat Wrapper Stream </H3> <PRE> #ifdef HT_EXPAT #include "<A HREF="HTXML.html">HTXML.h</A>" #endif /* HT_EXPAT */ </PRE> <H3> The RDF Parser Using The XML Parser </H3> <P> This RDF parser is based on Janne Saarela's Java based <A href="/RDF/Implementations/SiRPAC/">SiRPAC</A> and <A href="http://www.jclark.com/xml/expat.html">James Clark's expat XML parser</A> <PRE> #ifdef HT_EXPAT #include "<A HREF="HTRDF.html">HTRDF.h</A>" #endif /* HT_EXPAT */ </PRE> <P> End of XML module <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWXML.html,v 2.3 2025/04/18 20:24:41 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWZip.html����������������������������������������������������������������������0100644�0000764�0000144�00000002451�06532073574�016016� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 16-Apr-1996 --> <TITLE>W3C Sample Code Library libwww ZLib Streams</TITLE> </HEAD> <BODY> <H1> W3C Sample Code Library libwww ZLib Streams </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The stream part of the Library is a set of streams that can be used to encode/decode, or compress/decompress content. Many of the streams are based on zlib which is a freely available compression library. <PRE> #ifndef WWWZIP_H #define WWWZIP_H </PRE> <PRE> #ifdef __cplusplus extern "C" { #endif </PRE> <H3> System dependencies </H3> <P> The <A HREF="wwwsys.html">wwwsys.h</A> file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. <PRE>#include "wwwsys.h" </PRE> <H3> GZip Compression / Decompression </H3> <P> This stream can encode / decode gzipped content. <PRE>#include "<A HREF="HTZip.html">HTZip.h</A>" </PRE> <PRE> #ifdef __cplusplus } /* end extern C definitions */ #endif #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: WWWZip.html,v 2.5 2025/05/24 19:39:40 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/wwwsys.html����������������������������������������������������������������������0100644�0000764�0000144�00000074370�07132563156�016240� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 --> <TITLE>W3C Sample Code Library libwww System Dependencies</TITLE> </HEAD> <BODY> <H1> System Dependencies </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This file makes up for the differencies in the systems and platforms supported by libwww. On Unix, it is a question of <A HREF="/">using autoconf</A> to figure out what environment we are in. This is done by running the configure script which creates a <CODE>wwwconf.h</CODE> file. This configuration include file contains a large set of macro definitions telling what features we have and don't have. On platforms not supported by autoconf (Windows, Mac, VMS etc.) you will find the information normally contained in the <CODE>wwwconf.h</CODE> file directly included below. The <A HREF="#Platform">second part of this file </A>uses all the information that we either have from the wwwconf.h file or directly coded and actually does the includes etc. <P> <UL> <LI> <A HREF="wwwsys.html#Unix">Unix</A> <LI> <A HREF="wwwsys.html#Microsoft">Microsoft Windows Win32 API</A> <LI> <A HREF="wwwsys.html#Macintosh">Macintosh</A> <LI> <A HREF="wwwsys.html#Macintosh">Vax VMS</A> </UL> <P> This module is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>. <H3> Authors </H3> <DL> <DT> TBL <DD> Tim Berners-Lee, W3 project, CERN, &lt;timbl@w3.org&gt; <DT> EvA <DD> Eelco van Asperen &lt;evas@cs.few.eur.nl&gt; <DT> MA <DD> Marc Andreesen NCSA <DT> MD <DD> Mark Donszelmann &lt;duns@vxcern.cern.ch&gt; <DT> AT <DD> Aleksandar Totic &lt;atotic@ncsa.uiuc.edu&gt; <DT> SCW <DD> Susan C. Weber &lt;sweber@kyle.eitech.com&gt; <DT> HF <DD> Henrik Frystyk, &lt;frystyk@w3.org&gt; <DT> CLB <DD> Charlie Brooks, &lt;cbrooks@osf.org&gt; </DL> <H3> History: </H3> <DL> <DT> 22 Feb 91 <DD> Written (TBL) as part of the WWW library. <DT> 16 Jan 92 <DD> PC code from (EvA) <DT> 22 Apr 93 <DD> Merged diffs bits from xmosaic release <DT> 29 Apr 93 <DD> Windows/NT code from (SCW) <DT> 29 Sep 93 <DD> Mar 96 CLB - changed SLEEP() macro for Windows/NT MSC compiler added BOOLEAN_DEFINED macro to avoid duplicate definitions in HUtils.h changed netread() macros to support reading from stdin,etc. as well as sockets. (Required for linemode browser to work). <DT> Henrik <DD> Changed to support autoconf for Unix </DL> <PRE> #ifndef SYSDEP_H #define SYSDEP_H </PRE> <H1> Platform Specific Stuff </H1> <H2> <A NAME="Unix">Unix</A> </H2> <P> We rely on <I>autoconf</I> to do the dirty job. If you have any changhes then please add them to the <A HREF="../../../INSTALL.html">configure script</A> <PRE> #ifdef HAVE_CONFIG_H #include &lt;wwwconf.h&gt; #endif </PRE> <H2> <A NAME="Microsoft">Microsoft Windows Win32 API</A> </H2> <P> Help provided by Eric Prud'hommeaux, Susan C. Weber &lt;sweber@kyle.eitech.com&gt;, Paul Hounslow &lt;P.M.Hounslow@reading.ac.uk&gt;, and a lot of other PC people. <PRE> #if defined(_WINDOWS) || defined(_CONSOLE) #define WWW_MSWINDOWS #endif #if defined(_WINDOWS) && !defined (_CONSOLE) #define WWW_WIN_WINDOW #endif #if defined(_CONSOLE) #define WWW_WIN_CONSOLE #endif #ifdef WWW_MSWINDOWS #include &lt;windows.h&gt; #include &lt;io.h&gt; #include &lt;process.h&gt; #include &lt;winsock.h&gt; #include "windows/config.h" #define NETREAD(s,b,l) recv((s),(b),(l),0) #define NETWRITE(s,b,l) send((s),(b),(l),0) #define NETCLOSE(s) closesocket(s) #define IOCTL(s,c,a) ioctlsocket(s,c, (long *) a) #define MKDIR(a,b) mkdir((a)) #define REMOVE(a) remove((a)) #define DEFAULT_SUFFIXES "." #ifndef _CONSOLE #define NO_STDIO #endif #define SOCKET SOCKET /* WinSocks socket descriptor */ #define INVSOC INVALID_SOCKET /* WinSocks invalid socket */ #define DESIRED_WINSOCK_VERSION 0x0101 /* we'd like winsock ver 1.1... */ #define MINIMUM_WINSOCK_VERSION 0x0101 /* ...but we'll take ver 1.1 :) */ </PRE> <H3> File and Directory Access </H3> <P> These next defintions are because the UNIX stuff is not supplied with BC4 (Paul Hounslow &lt;P.M.Hounslow@reading.ac.uk&gt;) <PRE> #define NO_UNIX_IO #define _IFMT 0170000 /* type of file */ #define _IFDIR 0040000 /* directory */ #define _IFCHR 0020000 /* character special */ #define _IFBLK 0060000 /* block special */ #define _IFREG 0100000 /* regular */ #define _IFLNK 0120000 /* symbolic link */ #define _IFSOCK 0140000 /* socket */ #define _IFIFO 0010000 /* fifo */ #define S_ISUID 0004000 /* set user id on execution */ #define S_ISGID 0002000 /* set group id on execution */ #define S_ISVTX 0001000 /* save swapped text even after use */ #ifdef S_IREAD #undef S_IREAD #define S_IREAD 0000400 /* read permission, owner */ #endif #ifdef S_IWRITE #undef S_IWRITE #define S_IWRITE 0000200 /* write permission, owner */ #endif #ifdef S_IEXEC #undef S_IEXEC #define S_IEXEC 0000100 /* execute/search permission, owner */ #endif #define S_ENFMT 0002000 /* enforcement-mode locking */ #ifdef S_IFMT #undef S_IFMT #define S_IFMT _IFMT #endif #ifdef S_IDIR #undef S_IDIR #define S_IFDIR _IFDIR #endif #ifdef S_IFCHR #undef S_IFCHR #define S_IFCHR _IFCHR #endif #ifdef S_IBLK #undef S_IBLK #define S_IFBLK _IFBLK #endif #ifdef S_IREG #undef S_IREG #define S_IFREG _IFREG #endif #define S_IFLNK _IFLNK #ifdef S_IFIFO #undef S_IFIFO #define S_IFIFO _IFIFO #endif #define S_IRWXU 0000700 /* rwx, owner */ #define S_IRUSR 0000400 /* read permission, owner */ #define S_IWUSR 0000200 /* write permission, owner */ #define S_IXUSR 0000100 /* execute/search permission, owner */ #define S_IRWXG 0000070 /* rwx, group */ #define S_IRGRP 0000040 /* read permission, group */ #define S_IWGRP 0000020 /* write permission, grougroup */ #define S_IXGRP 0000010 /* execute/search permission, group */ #define S_IRWXO 0000007 /* rwx, other */ #define S_IROTH 0000004 /* read permission, other */ #define S_IWOTH 0000002 /* write permission, other */ #define S_IXOTH 0000001 /* execute/search permission, other */ #define S_ISREG(m) (((m)&_IFMT) == _IFREG) #define DIR_SEPARATOR #define DIR_SEPARATOR_CHAR '\\' #define DIR_SEPARATOR_STR "\\" </PRE> <H3> Errno and Return Codes </H3> <P> Winsock has its own errno codes and it returns them through WSAGetLastError(). However, it does also support BSD error codes, so we make a compromise. WSA definitions moved from _WIN32 ifdef by EGP <PRE> #define socerrno WSAGetLastError() #define ERRNO_DONE </PRE> <P> Return code for socket functions. We can't use -1 as return value <P> <PRE> #define EWOULDBLOCK WSAEWOULDBLOCK #define EINPROGRESS WSAEINPROGRESS #define ECONNREFUSED WSAECONNREFUSED #define ETIMEDOUT WSAETIMEDOUT #define ENETUNREACH WSAENETUNREACH #define EHOSTUNREACH WSAEHOSTUNREACH #define EHOSTDOWN WSAEHOSTDOWN #define EISCONN WSAEISCONN #define EINVAL WSAEINVAL #define ECONNRESET WSAECONNRESET #define ECONNABORTED WSAECONNABORTED #define ESHUTDOWN WSAESHUTDOWN /* Some compilers do only define WIN32 and NOT _WINDOWS */ #define NO_GROUPS #ifdef _WIN32 #define MKDIR(a,b) mkdir((a)) /* CLB NT has mkdir, but only one arg */ #define SLEEP(n) Sleep((n)*1000) #else #define MKDIR(a,b) _mkdir((a)) /* CLB NT has mkdir, but only one arg */ #endif /* WIN32 */ #endif /* WWW_MSWINDOWS */ </PRE> <H2> <A NAME="Macintosh">Macintosh</A> </H2> <P> We have two environments on Macintosh: Codeworrior and MPV. <H3> Metrowerks Codewarrior 6 </H3> <P> Metrowerks Codewarrior is one development environment on the Mac. We are using GUSI (1.5.9) by Matthias Neeracher &lt;neeri@iis.ee.ethz.ch&gt; for our socket lib. You can find more information about the <A HREF="http://err.ethz.ch/~neeri/macintosh/gusiman/">GUSI Library</A> from Switzerland. <P> Compiles on PPC. Should compile on 68K. <P> August 31, 2025 by Steven T. Roussey &lt;sroussey@eng.uci.edu&gt; (STR). and jeff@macalot.com (Jeff Dripps). Thanks a bunch! <PRE> #ifdef __MWERKS__ #include &lt;gusi.h&gt; #include &lt;dirent.h&gt; #include &lt;errno.h&gt; #include &lt;sys/errno.h&gt; #include &lt;sioux.h&gt; #define INCLUDES_DONE #define TCP_INCLUDES_DONE #define GUSI /* Identifies changes made for GUSI */ #undef HAVE_GETDOMAINNAME /* STR */ #undef HAVE_GETPASS #undef HAVE_GETWD #define HAVE_GETCWD #define USE_DIRENT #define NO_GROUPS #define GOT_READ_DIR #undef HAVE_TIMEZONE /* STR */ #define NO_GMTOFF #define HAVE_STRERROR #define HAVE_GETHOSTNAME #define d_ino d_fileno /* backward compatibility */ #define SLEEP(n) GUSIDefaultSpin( SP_SLEEP, n/60) #define MKDIR(a,b) mkdir(a) #define HAVE_STRFTIME // added JTD:5/1/96 #define HAVE_MKTIME // added JTD:5/1/96 #define HAVE_STRCHR // added JTD:5/1/96 #define STDC_HEADERS // added JTD:5/1/96 #define HAVE_MEMCPY // added JTD:5/1/96 #define TTY_IS_SELECTABLE // added JTD:5/1/96 #define HAVE_READDIR // added JTD:5/1/96 #define HAVE_DIRENT_INO // added JTD:5/1/96 #define HAVE_DIRENT_H // added JTD:5/1/96 #endif </PRE> <H3> MPW </H3> <P> MPW is one development environment on the Mac. <P> This entry was created by Aleksandar Totic (atotic@ncsa.uiuc.edu) this file is compatible with sockets package released by NCSA. One major conflict is that this library redefines write/read/etc as macros. In some of HTML code these macros get executed when they should not be. Such files should define NO_SOCKET_DEFS on top. This is a temporary hack. <PRE> #ifdef applec /* MPW */ #undef HAVE_SYSTEM #define DEBUG /* Can't put it on the CC command line */ #define NO_UNIX_IO /* getuid() missing */ #undef HAVE_GETPID /* getpid() does not exist */ #define NO_GETWD /* getwd() does not exist */ #define NETCLOSE s_close /* Routine to close a TCP-IP socket */ #define NETREAD s_read /* Routine to read from a TCP-IP socket */ #define NETWRITE s_write /* Routine to write to a TCP-IP socket */ #define _ANSI_SOURCE #define GUI #define LINEFEED 10 #define ANON_FTP_HOSTNAME #ifndef NO_SOCKET_DEFS #include &lt;MacSockDefs.h&gt; #endif /* NO_SOCKET_DEFS */ #include &lt;socket.ext.h&gt; #include &lt;string.h&gt; #endif /* applec MPW */ </PRE> <H2> <A NAME="VAX">VAX/VMS</A> </H2> <P> Under VMS, there are many versions of TCP-IP. Define one if you do not use Digital's UCX product: <DL> <DT> UCX <DD> DEC's "Ultrix connection" (default) <DT> WIN_TCP <DD> From Wollongong, now GEC software. <DT> MULTINET <DD> From SRI, now from TGV Inv. <DT> DECNET <DD> Cern's TCP socket emulation over DECnet </DL> <P> The last three do not interfere with the unix i/o library, and so they need special calls to read, write and close sockets. In these cases the socket number is a VMS channel number, so we make the @@@ HORRIBLE @@@ assumption that a channel number will be greater than 10 but a unix file descriptor less than 10. It works. <PRE> #ifdef VMS #include "HTVMSUtils.h" #define CACHE_FILE_PREFIX "SYS$LOGIN:Z_" #define DEFAULT_SUFFIXES "._" #define HAVE_CUSERID #ifdef WIN_TCP #define NETREAD(s,b,l) ((s)&gt;10 ? netread((s),(b),(l)) : read((s),(b),(l))) #define NETWRITE(s,b,l) ((s)&gt;10 ? netwrite((s),(b),(l)) : write((s),(b),(l))) #define NETCLOSE(s) ((s)&gt;10 ? netclose(s) : close(s)) #endif /* WIN_TCP */ #ifdef MULTINET #undef NETCLOSE #undef NETREAD #undef NETWRITE #define NETREAD(s,b,l) ((s)&gt;10 ? socket_read((s),(b),(l)) : read((s),(b),(l))) #define NETWRITE(s,b,l) ((s)&gt;10 ? socket_write((s),(b),(l)) : \ write((s),(b),(l))) #define NETCLOSE(s) ((s)&gt;10 ? socket_close(s) : close(s)) #define IOCTL(s,c,a) socket_ioctl(s,c,a); #endif /* MULTINET */ #ifdef DECNET #define DNP_OBJ 80 /* This one doesn't look busy, but we must check */ /* That one was for decnet */ #undef SELECT /* not supported */ #define NETREAD(s,b,l) ((s)&gt;10 ? recv((s),(b),(l),0) : read((s),(b),(l))) #define NETWRITE(s,b,l) ((s)&gt;10 ? send((s),(b),(l),0) : write((s),(b),(l))) #define NETCLOSE(s) ((s)&gt;10 ? socket_close(s) : close(s)) #undef HAVE_GETHOSTNAME /* Decnet doesn't have a name server */ #endif /* Decnet */ #undef HAVE_GETDOMAINNAME /* Certainly this works for UCX and Multinet; not tried for Wollongong */ #ifdef MULTINET #include &lt;time.h&gt; #ifdef __TIME_T #define __TYPES #define __TYPES_LOADED #endif /* __TIME_T */ #include &lt;multinet_root:[multinet.include.sys]types.h&gt; #include &lt;multinet_root:[multinet.include]errno.h&gt; #ifdef __TYPES #define __TIME_T #endif /* __TYPE */ #ifdef __TIME_LOADED #define __TIME #endif /* __TIME_LOADED */ #include &lt;multinet_root:[multinet.include.sys]time.h&gt; #else /* not MULTINET */ #include &lt;types.h&gt; #include &lt;errno.h&gt; #include &lt;time.h&gt; #endif /* not MULTINET */ #include string #ifndef STDIO_H #include &lt;stdio&gt; #define STDIO_H #endif #include file #ifndef DECNET /* Why is it used at all ? Types conflict with "types.h&gt; */ #include unixio #endif #define INCLUDES_DONE #ifdef MULTINET /* Include from standard Multinet directories */ #include &lt;multinet_root:[multinet.include.sys]socket.h&gt; #ifdef __TIME_LOADED /* defined by sys$library:time.h */ #define __TIME /* to avoid double definitions in next file */ #endif #include &lt;multinet_root:[multinet.include.netinet]in.h&gt; #include &lt;multinet_root:[multinet.include.arpa]inet.h&gt; #include &lt;multinet_root:[multinet.include]netdb.h&gt; #include &lt;multinet_root:[multinet.include.sys]ioctl.h&gt; #else /* not multinet */ #ifdef DECNET #include &lt;types.h&gt; /* for socket.h */ #include &lt;socket.h&gt; #include &lt;dn&gt; #include &lt;dnetdb&gt; #else /* UCX or WIN */ #ifdef CADDR_T #define __CADDR_T #endif /* problem with xlib.h inclusion */ #include &lt;socket.h&gt; #include &lt;in.h&gt; #include &lt;inet.h&gt; #include &lt;netdb.h&gt; #include &lt;ucx$inetdef.h&gt; #endif /* not DECNET */ #endif /* of Multinet or other TCP includes */ #define TCP_INCLUDES_DONE #ifdef UCX #define SIMPLE_TELNET #endif </PRE> <P> On VMS directory browsing is available through a separate copy of dirent.c. The definition of R_OK seem to be missing from the system include files... <PRE> #define USE_DIRENT #define GOT_READ_DIR #include &lt;dirent.h&gt; #define DIR struct dirent #define R_OK 4 </PRE> <P> On VMS machines, the linker needs to be told to put global data sections into a data segment using these storage classes. (MarkDonszelmann) <PRE> #ifdef VAXC #define GLOBALDEF globaldef #define GLOBALREF globalref #endif /* VAXC */ #endif /* vms */ </PRE> <P> On non-VMS machines, the GLOBALDEF and GLOBALREF storage types default to normal C storage types. <PRE> #ifndef GLOBALREF #define GLOBALDEF #define GLOBALREF extern #endif </PRE> <P> On non-VMS machines STAT should be stat...On VMS machines STAT is a function that converts directories and devices so that you can stat them. <PRE> #ifdef VMS typedef unsigned long mode_t; #define HT_STAT HTStat #define HT_LSTAT HTStat #else #define HT_STAT stat #define HT_LSTAT lstat #endif /* non VMS */ </PRE> <H3> Dynamic Memory </H3> <P> Replace memory allocation and free C RTL functions with VAXC$xxx_OPT alternatives for VAXC (but not DECC) on VMS. This makes a big performance difference. (Foteos Macrides). Also have a look at the <A HREF="HTMemory.html">Dynamic Memory Module</A> for how to handle <CODE>malloc</CODE> and <CODE>calloc</CODE>. <PRE> #ifdef VMS #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;unixlib.h&gt; #include &lt;ctype.h&gt; #if defined(VAXC) && !defined(__DECC) #define malloc VAXC$MALLOC_OPT #define calloc VAXC$CALLOC_OPT #define free VAXC$FREE_OPT #define cfree VAXC$CFREE_OPT #define realloc VAXC$REALLOC_OPT #endif /* VAXC but not DECC */ #define unlink remove #define gmtime localtime #include &lt;stat.h&gt; #define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) #define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) #define putenv HTVMS_putenv #endif /* VMS */ </PRE> <H3> Strftime and other time stuff </H3> <PRE> #ifdef VMS #ifndef DECC #undef HAVE_STRFTIME #endif #undef HAVE_MKTIME #undef HAVE_TIMEGM #define NO_GMTOFF #undef HAVE_TIMEZONE #endif </PRE> <H3> Definition of Errno </H3> <PRE> #ifdef VMS #ifndef __DECC extern int uerrno; /* Deposit of error info (as per errno.h) */ extern volatile noshare int socket_errno; /* socket VMS error info (used for translation of vmserrno) */ extern volatile noshare int vmserrno; /* Deposit of VMS error info */ extern volatile noshare int errno; /* noshare to avoid PSECT conflict */ #define ERRNO_DONE #endif /* not DECC */ #endif /* VMS */ </PRE> <P> <HR> <H1> <A NAME="Platform">Platform Independent Stuff</A> </H1> <P> Here we use all the knowledge we got above... <H2> Include Files </H2> <P> This file includes all system header files that are needed, iff they exist. Their existance is discovered by <CODE>configure</CODE>. <PRE> /* stdio.h */ #ifdef HAVE_STDIO_H #include &lt;stdio.h&gt; #endif /* types.h */ #ifdef HAVE_SYS_TYPES_H #include &lt;sys/types.h&gt; #else #ifdef HAVE_TYPES_H #include &lt;types.h&gt; #endif #endif /* unistd.h */ #ifdef HAVE_UNISTD_H #include &lt;unistd.h&gt; #else #ifdef HAVE_SYS_UNISTD_H #include &lt;sys/unistd.h&gt; #endif #endif /* fcntl.h */ #ifdef HAVE_FCNTL_H #include &lt;fcntl.h&gt; #else #ifdef HAVE_SYS_FCNTL_H #include &lt;sys/fcntl.h&gt; #endif #endif /* sys/machine.h */ #ifdef HAVE_SYS_MACHINE_H #include &lt;sys/machine.h&gt; #endif /* limits.h */ #ifdef HAVE_SYS_LIMITS_H #include &lt;sys/limits.h&gt; #else #ifdef HAVE_LIMITS_H #include &lt;limits.h&gt; #endif #endif /* stat.h */ #ifdef HAVE_SYS_STAT_H #include &lt;sys/stat.h&gt; #else #ifdef HAVE_STAT_H #include &lt;stat.h&gt; #endif #endif /* Patch for problems in glibc6 */ #if defined(__GLIBC__) #undef S_IFMT #undef S_IFDIR #define S_IFMT __S_IFMT #define S_IFDIR __S_IFDIR #endif /* in.h */ #ifdef HAVE_NETINET_IN_H #include &lt;netinet/in.h&gt; #else #ifdef HAVE_IN_H #include &lt;in.h&gt; #endif #endif /* tcp.h */ #ifdef HAVE_NETINET_TCP_H #include &lt;netinet/tcp.h&gt; #else #ifdef HAVE_TCP_H #include &lt;tcp.h&gt; #endif #endif /* file.h */ #ifdef HAVE_SYS_FILE_H #include &lt;sys/file.h&gt; #endif /* systeminfo.h */ #ifdef HAVE_SYS_SYSTEMINFO_H #include &lt;sys/systeminfo.h&gt; #endif /* ioctl.h */ #ifdef HAVE_SYS_IOCTL_H #include &lt;sys/ioctl.h&gt; #endif /* termios.h */ #ifdef HAVE_TERMIOS_H #include &lt;termios.h&gt; #endif /* time.h */ #ifdef TIME_WITH_SYS_TIME #include &lt;sys/time.h&gt; #include &lt;time.h&gt; #else #ifdef HAVE_SYS_TIME_H #include &lt;sys/time.h&gt; #else #ifdef HAVE_TIME_H #include &lt;time.h&gt; #endif #endif #endif /* string{,s}.h */ #ifdef HAVE_STRING_H #include &lt;string.h&gt; #else #ifdef HAVE_STRINGS_H #include &lt;strings.h&gt; #endif #endif /* syslog.h */ #ifdef HAVE_SYSLOG_H #include &lt;syslog.h&gt; #else #ifdef HAVE_SYS_SYSLOG_H #include &lt;sys/socket.h&gt; #endif #endif /* socket.h */ #ifdef HAVE_SYS_SOCKET_H #include &lt;sys/socket.h&gt; #else #ifdef HAVE_SOCKET_H #include &lt;socket.h&gt; #endif #endif /* socket.ext.h */ #ifdef HAVE_SOCKET_EXT_H #include &lt;socket.ext.h&gt; #endif /* appkit.h */ #ifdef HAVE_APPKIT_APPKIT_H #include &lt;appkit/appkit.h&gt; #else #ifdef HAVE_APPKIT_H #include &lt;appkit.h&gt; #endif #endif /* dn.h */ #ifdef HAVE_DN_H #include &lt;dn.h&gt; #endif /* ipc.h */ #ifdef HAVE_SYS_IPC_H #include &lt;sys/ipc.h&gt; #endif /* errno.h */ #ifdef HAVE_ERRNO_H #include &lt;errno.h&gt; #else #ifdef HAVE_SYS_ERRNO_H #include &lt;sys/errno.h&gt; #else #ifdef HAVE_NET_ERRNO_H #include &lt;net/errno.h&gt; #endif #endif #endif /* pwd.h */ #ifdef HAVE_PWD_H #include &lt;pwd.h&gt; #endif /* grp.h */ #ifdef HAVE_GRP_H #include &lt;grp.h&gt; #endif /* inet.h */ #ifdef HAVE_ARPA_INET_H #include &lt;arpa/inet.h&gt; #else #ifdef HAVE_INET_H #include &lt;inet.h&gt; #endif #endif /* netdb.h */ #ifdef HAVE_NETDB_H #include &lt;netdb.h&gt; #endif /* manifest.h */ #ifdef HAVE_MANIFEST_H #include &lt;manifest.h&gt; #endif /* bsdtypes.h */ #ifdef HAVE_BSDTYPES_H #include &lt;bsdtypes.h&gt; #endif /* stdefs.h */ #ifdef HAVE_STDEFS_H #include &lt;stdefs.h&gt; #endif /* bsdtime.h */ #ifdef HAVE_BSDTIME_H #include &lt;bsdtime.h&gt; #endif /* select.h */ #ifdef HAVE_SYS_SELECT_H #include &lt;sys/select.h&gt; #else #ifdef HAVE_SELECT_H #include &lt;select.h&gt; #endif #endif /* dnetdb.h */ #ifdef HAVE_DNETDB_H #include &lt;dnetdb.h&gt; #endif /* ucx$inetdef.h */ #ifdef HAVE_UCX_INETDEF_H #include &lt;ucx$inetdef.h&gt; #endif /* libc.h */ #ifdef HAVE_LIBC_H #include &lt;libc.h&gt; #endif /* stdlib.h */ #ifdef HAVE_STDLIB_H #include &lt;stdlib.h&gt; #endif /* malloc.h */ #ifdef HAVE_MALLOC_H #include &lt;malloc.h&gt; #endif /* memory.h */ #ifdef HAVE_MEMORY_H #include &lt;memory.h&gt; #endif /* unixlib.h */ #ifdef HAVE_UNIXLIB_H #include &lt;unixlib.h&gt; #endif /* direct.h */ #ifdef HAVE_DIRECT_H #include &lt;direct.h&gt; #endif /* ctype.h */ #ifdef HAVE_CTYPE_H #include &lt;ctype.h&gt; #endif /* curses.h */ #ifdef CURSES #ifdef HAVE_CURSESX_H #include &lt;cursesX.h&gt; #else #ifdef HAVE_CURSES_H #include &lt;curses.h&gt; #endif #endif #endif /* resource.h (some wait.h's require it) */ #ifdef HAVE_SYS_RESOURCE_H #include &lt;sys/resource.h&gt; #else #ifdef HAVE_RESOURCE_H #include &lt;resource.h&gt; #endif #endif /* dirent.h / ndir.h / dir.h */ #ifdef HAVE_DIRENT_H #include &lt;dirent.h&gt; #define NAMLEN(dirent) strlen((dirent)-&gt;d_name) #else #define dirent direct #define NAMLEN(dirent) (dirent)-&gt;d_namlen #ifdef HAVE_SYS_NDIR_H #include &lt;sys/ndir.h&gt; #endif #ifdef HAVE_SYS_DIR_H #include &lt;sys/dir.h&gt; #endif #ifdef HAVE_DIR_H #include &lt;dir.h&gt; #endif #ifdef HAVE_NDIR_H #include &lt;ndir.h&gt; #endif #endif #if !defined(HAVE_STRCHR) #define strchr index #define strrchr rindex #endif #if !defined(HAVE_MEMCPY) #define memcpy(d, s, n) bcopy((s), (d), (n)) #define memmove(d, s, n) bcopy((s), (d), (n)) #endif /* Definition of var args */ #if defined(STDC_HEADERS) || defined(__STDC__) #include &lt;stdarg.h&gt; #else #ifndef WWW_MSWINDOWS #include &lt;varargs.h&gt; #endif #endif /* wait.h */ #ifdef HAVE_SYS_WAIT_H #include &lt;sys/wait.h&gt; #endif #ifndef WEXITSTATUS #define WEXITSTATUS(stat_val) (((unsigned)(stat_val) &gt;&gt; 8) & 255) #endif #ifndef WIFEXITED #define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif #ifdef HT_POSIX_REGEX #ifdef HAVE_RXPOSIX_H #include &lt;rxposix.h&gt; #else #ifdef HAVE_REGEX_H #include &lt;regex.h&gt; #endif #endif #define W3C_DEFAULT_REGEX_FLAGS (REG_EXTENDED | REG_NEWLINE) #endif </PRE> <H2> Booleans </H2> <PRE> #ifndef BOOLEAN typedef char BOOLEAN; /* Logical value */ #endif #ifndef CURSES #ifndef TRUE #define TRUE (BOOLEAN)1 #define FALSE (BOOLEAN)0 #endif #endif /* CURSES */ #if !defined(BOOL) && !defined(WWW_MSWINDOWS) #define BOOL BOOLEAN #endif #ifndef YES #define YES (BOOL)1 #define NO (BOOL)0 #endif </PRE> <H2> Integers </H2> <P> If we don't have these (for some mysterious reason) then define them. This should (is?) be handled by the configure script already. <PRE> #ifndef u_short #define u_short unsigned short #endif #ifndef u_long #define u_long unsigned long #endif </PRE> <H2> NULL Definition </H2> <PRE> #ifndef NULL #define NULL ((void *)0) #endif </PRE> <H2> Sleep System Call </H2> <P> Some systems use milliseconds instead of seconds <PRE> #ifndef SLEEP #define SLEEP(n) sleep(n) #endif </PRE> <H2> SOCKS </H2> <P> SOCKS is a package for allowing socket connections to tunnel through firewalls in carefully controlled situations. This package can be optionally compiled with SOCKS support; these definitions replace the normal socket calls with the SOCKS ones. Initial modification of the library is credited to Ian Dunkin &lt;imd1707@ggr.co.uk&gt;. <PRE> #ifdef SOCKS #ifdef SOCKS4 #define connect Rconnect #define getsockname Rgetsockname #define getpeername Rgetpeername #define bind Rbind #define accept Raccept #define listen Rlisten #define select Rselect #define recvfrom Rrecvfrom #define sendto Rsendto #define recv Rrecv #define send Rsend #define read Rread #define write Rwrite #define rresvport Rrresvport #define shutdown Rshutdown #define listen Rlisten #define close Rclose #define dup Rdup #define dup2 Rdup2 #define fclose Rfclose #define gethostbyname Rgethostbyname #else #ifdef SOCKS5 #define connect SOCKSconnect #define getsockname SOCKSgetsockname #define getpeername SOCKSgetpeername #define bind SOCKSbind #define accept SOCKSaccept #define listen SOCKSlisten #define select SOCKSselect #define recvfrom SOCKSrecvfrom #define sendto SOCKSsendto #define recv SOCKSrecv #define send SOCKSsend #define read SOCKSread #define write SOCKSwrite #define rresvport SOCKSrresvport #define shutdown SOCKSshutdown #define listen SOCKSlisten #define close SOCKSclose #define dup SOCKSdup #define dup2 SOCKSdup2 #define fclose SOCKSfclose #define gethostbyname SOCKSgethostbyname #endif /* SOCKS5 */ #endif /* SOCKS4 */ #endif /* SOCKS */ </PRE> <H2> Network Family </H2> <PRE> #ifdef DECNET typedef struct sockaddr_dn SockA; /* See netdnet/dn.h or custom vms.h */ #else /* Internet */ typedef struct sockaddr_in SockA; /* See netinet/in.h */ #endif </PRE> <H2> Default Values of Network Access </H2> <PRE> #ifndef NETCLOSE #define NETCLOSE close /* Routine to close a TCP-IP socket */ #endif #ifndef NETREAD #define NETREAD read /* Routine to read from a TCP-IP socket */ #endif #ifndef NETWRITE #define NETWRITE write /* Routine to write to a TCP-IP socket */ #endif #ifndef NETWRITEV #define NETWRITEV writev #endif </PRE> <H2> Definition of errno and Return Code </H2> <P> This is the definition of error codes and the corresponding string constants. If we do not have the <CODE>strerror</CODE> function then try the error list table. <PRE> #ifndef ERRNO_DONE extern int errno; #define socerrno errno #endif #ifndef HAVE_STRERROR /* Otherwise use the table */ extern char *sys_errlist[]; extern int sys_nerr; #endif </PRE> <H2> Definition of Socket Desrciptores </H2> <P> This is necessary in order to support Windows NT... <PRE> #ifndef SOCKET #define SOCKET int /* Unix like socket descriptor */ #define INVSOC (-1) /* Unix invalid socket */ #endif #ifdef __svr4__ #define HT_BACKLOG 32 /* Number of pending connect requests (TCP) */ #else #define HT_BACKLOG 5 /* Number of pending connect requests (TCP) */ #endif /* __svr4__ */ </PRE> <H2> Additional Network variables for SOCKET, file access bits </H2> <PRE> #if 0 #ifndef _WINSOCKAPI_ #define FD_READ 0x01 #define FD_WRITE 0x02 #define FD_OOB 0x04 #define FD_ACCEPT 0x08 #define FD_CONNECT 0x10 #define FD_CLOSE 0x20 #endif /* _WINSOCKAPI_ */ #endif </PRE> <H2> Rough estimate of max path length </H2> <PRE> #ifndef HT_MAX_PATH #ifdef MAXPATHLEN #define HT_MAX_PATH MAXPATHLEN #else #ifdef PATH_MAX #define HT_MAX_PATH PATH_MAX #else #define HT_MAX_PATH 1024 /* Any better ideas? */ #endif #endif #endif /* HT_MAX_PATH */ #ifndef HT_MAX_TMPNAM #ifdef L_tmpnam #define HT_MAX_TMPNAM L_tmpnam #else #define HT_MAX_TMPNAM 128 #endif #endif </PRE> <H2> <A NAME="Hash">Hash Table Sizes</A> </H2> <P> The size of the hash tables used by the various libwww classes like the <A HREF="HTNet.html">HTNet</A> class, the <A HREF="HTHost.html">HTHost</A> class etc. is a speed-size compromize. Here you can set the sizes depending on whether you have a lot of memory or not. The values must be prime numbers, of course. <PRE> #ifdef LIBWWW_SMALL #define HT_XL_HASH_SIZE 101 #define HT_L_HASH_SIZE 67 #define HT_M_HASH_SIZE 31 #define HT_S_HASH_SIZE 5 #else #ifdef LIBWWW_LARGE #define HT_XL_HASH_SIZE 1499 #define HT_L_HASH_SIZE 599 #define HT_M_HASH_SIZE 101 #define HT_S_HASH_SIZE 67 #else #ifdef LIBWWW_EXTRA_LARGE #define HT_XL_HASH_SIZE 9973 #define HT_L_HASH_SIZE 1499 #define HT_M_HASH_SIZE 599 #define HT_S_HASH_SIZE 101 #else #define HT_XL_HASH_SIZE 599 #define HT_L_HASH_SIZE 101 #define HT_M_HASH_SIZE 67 #define HT_S_HASH_SIZE 11 #endif #endif #endif </PRE> <H2> Definition of NGROUPS </H2> <PRE> #ifdef GETGROUPS_T #ifndef NGROUPS #ifdef NGROUPS_MAX #define NGROUPS NGROUPS_MAX #else #define NGROUPS 20 /* Any better ideas? */ #endif #endif #endif </PRE> <H2> Definition of Max Domain Name Length </H2> <PRE> #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 64 /* Any better ideas? */ #endif </PRE> <H2> File/Directory Management </H2> <PRE> #ifndef MKDIR #define MKDIR(a,b) mkdir((a), (b)) #endif #ifndef RMDIR #define RMDIR(a) rmdir((a)) #endif #ifndef REMOVE #define REMOVE(a) unlink((a)) #endif #ifndef DEFAULT_SUFFIXES #define DEFAULT_SUFFIXES ".,_" #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR_CHAR '/' #define DIR_SEPARATOR_STR "/" #endif #ifndef F_OK #define R_OK 4 #define W_OK 2 #define X_OK 1 #define F_OK 0 #endif </PRE> <H2> Macros for manipulating masks for select() </H2> <PRE> #ifndef FD_SET #define FD_SET(fd, m) (*(unsigned*)(m) |= (1 &lt;&lt; (fd))) #endif #ifndef FD_CLR #define FD_CLR(fd, m) (*(unsigned*)(m) &= ~(1 &lt;&lt; (fd))) #endif #ifndef FD_ZERO #define FD_ZERO(m) (*(unsigned*)(m)) = 0 #endif #ifndef FD_ISSET #define FD_ISSET(fd, m) (*(unsigned*)(m) & (1 &lt;&lt; (fd))) #endif </PRE> <H2> Macros for converting characters </H2> <PRE> #ifndef TOASCII #define TOASCII(c) (c) #define FROMASCII(c) (c) #endif </PRE> <H2> Cache file prefix </H2> <P> This is something onto which we tag something meaningful to make a cache file name. used in HTWSRC.c at least. If it is not defined at all, caching is turned off. <PRE> #ifndef CACHE_FILE_PREFIX #ifdef unix #define CACHE_FILE_PREFIX "/usr/wsrc/" #endif #endif </PRE> <H2> Thread Safe Setup </H2> <P> These are some constants setting the size of buffers used by thread safe versions of some system calls. <PRE> #ifdef HT_REENTRANT #ifdef _POSIX_LOGIN_NAME_MAX #define HT_LOGNAME_MAX _POSIX_LOGIN_NAME_MAX #else #ifdef LOGNAME_MAX #define HT_LOGNAME_MAX (LOGNAME_MAX+1) #else #define HT_LOGNAME_MAX 64 #endif #endif #define HOSTENT_MAX 1024 #define CTIME_MAX 26 #endif /* HT_REENTRANT */ </PRE> <H2> Types </H2> <P> We define some types here so we son't have to worry about it later <PRE> typedef unsigned long ms_t; </PRE> <PRE> #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: wwwsys.html,v 2.125 2025/07/11 09:18:38 kahan Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/�������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520571�015446� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/CVS/���������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517376�016112� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/CVS/Root�����������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517376�016756� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/CVS/Repository�����������������������������������������������������������0100644�0000764�0000144�00000000033�07405517376�020205� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/CVS/Entries��������������������������������������������������������������0100644�0000764�0000144�00000002311�07405517376�017440� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.4/Mon Aug 5 17:23:10 1996// /Makefile.am/1.26/Fri Aug 11 12:08:07 2000// /config.h/1.24/Fri Mar 9 15:58:04 2001// /windll.c/1.1/Thu Nov 16 23:51:22 1995// /wwwapp.files/1.12/Tue Mar 30 22:32:28 1999// /wwwcache.files/1.1/Wed Feb 14 00:47:11 1996// /wwwcore.files/1.12/Sun Feb 7 18:33:11 1999// /wwwdir.files/1.1/Wed Feb 14 00:47:13 1996// /wwwdll.c/1.1/Thu Nov 16 23:51:31 1995// /wwwdll.def/1.1/Thu Nov 16 23:51:33 1995// /wwwfile.files/1.2/Sun Feb 7 18:33:11 1999// /wwwftp.files/1.1/Wed Feb 14 00:47:14 1996// /wwwgophe.files/1.1/Wed Feb 14 00:47:15 1996// /wwwhtml.files/1.3/Fri Jan 29 14:44:27 1999// /wwwhttp.files/1.5/Wed Mar 24 16:28:17 1999// /wwwinit.files/1.2/Tue Mar 30 22:32:28 1999// /wwwmime.files/1.4/Sun Feb 14 04:00:10 1999// /wwwmux.files/1.3/Sun May 24 19:39:41 1998// /wwwnews.files/1.1/Wed Feb 14 00:47:18 1996// /wwwsql.files/1.1/Sun May 24 19:39:41 1998// /wwwstream.files/1.7/Sun Feb 14 04:00:10 1999// /wwwtelnt.files/1.1/Wed Feb 14 00:47:19 1996// /wwwtrans.files/1.3/Fri Dec 27 16:13:45 1996// /wwwutils.files/1.3/Sun Apr 18 20:25:15 1999// /wwwwais.files/1.2/Sun Feb 14 04:00:10 1999// /wwwxml.files/1.2/Sun Apr 18 20:25:15 1999// /wwwzip.files/1.1/Sun Jan 26 08:13:56 1997// D �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/Makefile�����������������������������������������������������������������0100644�0000764�0000144�00000016465�07405520571�017117� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ SUFFIXES = .files .def # the following rules allow to select the windows files that must be included # in the distribution, but that aren't processes or generated by the Unix # Make command SRC := $(subst $(srcdir)/,,$(wildcard $(srcdir)/*.c)) MAK := $(subst $(srcdir)/,,$(wildcard $(srcdir)*.mak)) FLS := $(subst $(srcdir)/,,$(wildcard $(srcdir)/*.files)) BUILT_SOURCES = wwwapp.def wwwapp.def wwwcache.def wwwcore.def wwwdir.def wwwmux.def wwwfile.def wwwftp.def wwwgophe.def wwwstream.def wwwhtml.def wwwhttp.def wwwmime.def wwwnews.def wwwtrans.def wwwtelnt.def wwwutils.def wwwwais.def wwwzip.def wwwsql.def wwwxml.def wwwinit.def EXTRA_DIST = $(BUILT_SOURCES) config.h wwwdll.def $(SRC) $(FLS) $(MAK) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .def .files $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/src/windows/Makefile $(mkinstalldirs) $(distdir)/$(srcdir) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean def-clean: test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) def: $(BUILT_SOURCES) .files.def: perl $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/.cvsignore���������������������������������������������������������������0100644�0000764�0000144�00000000042�06201426776�017444� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile Makefile.in *.def *.docs ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/Makefile.am��������������������������������������������������������������0100644�0000764�0000144�00000002010�07144766247�017504� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. SUFFIXES = .files .def # the following rules allow to select the windows files that must be included # in the distribution, but that aren't processes or generated by the Unix # Make command SRC := $(subst $(srcdir)/,,$(wildcard $(srcdir)/*.c)) MAK := $(subst $(srcdir)/,,$(wildcard $(srcdir)*.mak)) FLS := $(subst $(srcdir)/,,$(wildcard $(srcdir)/*.files)) BUILT_SOURCES = \ wwwapp.def wwwapp.def wwwcache.def \ wwwcore.def wwwdir.def wwwmux.def \ wwwfile.def wwwftp.def wwwgophe.def \ wwwstream.def wwwhtml.def wwwhttp.def \ wwwmime.def wwwnews.def wwwtrans.def \ wwwtelnt.def wwwutils.def wwwwais.def \ wwwzip.def wwwsql.def wwwxml.def \ wwwinit.def EXTRA_DIST = \ $(BUILT_SOURCES) \ config.h \ wwwdll.def \ $(SRC) \ $(FLS) \ $(MAK) def-clean: test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) def: $(BUILT_SOURCES) .files.def: perl $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/config.h�����������������������������������������������������������������0100644�0000764�0000144�00000031740�07252176614�017073� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** Hand tailored config.h for windows. */ /* Define if type char is unsigned and you are not using gcc. */ #ifndef __CHAR_UNSIGNED__ /* #undef __CHAR_UNSIGNED__ */ #endif /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define to the type of elements in the array set by `getgroups'. Usually this is either `int' or `gid_t'. */ /* undef GETGROUPS_T gid_t */ /* Define to `int' if <sys/types.h> doesn't define. */ /* #undef gid_t */ /* Define if you don't have vprintf but do have _doprnt. */ /* #undef HAVE_DOPRNT */ /* Define if you have the strftime function. */ #define HAVE_STRFTIME 1 /* Define if you have <sys/wait.h> that is POSIX.1 compatible. */ /* undef HAVE_SYS_WAIT_H */ /* Define if your struct tm has tm_zone. */ /* #undef HAVE_TM_ZONE */ /* Define if you don't have tm_zone but do have the external array tzname. */ /* undef HAVE_TZNAME */ /* Define if you have the vprintf function. */ #define HAVE_VPRINTF 1 /* Define to `int' if <sys/types.h> doesn't define. */ #define mode_t unsigned long /* Define to `int' if <sys/types.h> doesn't define. */ /* #undef pid_t */ /* Define if you need to in order for stat and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define as the return type of signal handlers (int or void). */ /* #undef RETSIGTYPE void */ /* Define to `unsigned' if <sys/types.h> doesn't define. */ /* #undef size_t */ /* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both <sys/time.h> and <time.h>. */ /* #undef TIME_WITH_SYS_TIME */ /* Define if your <sys/time.h> declares struct tm. */ /* #undef TM_IN_SYS_TIME */ /* Define to `int' if <sys/types.h> doesn't define. */ /* #undef uid_t */ /* Define if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ /* #undef WORDS_BIGENDIAN */ /* Define to enable direct WAIS access. */ /* #undef HT_DIRECT_WAIS */ /* Define to enable mysql access. */ /* #undef HT_MYSQL */ /* Define to enable expat XML parser. */ #define HT_EXPAT 1 /* Define to enable Zlib compression / decompression support. */ #define HT_ZLIB 1 /* Define to enable Digest Authenticaiton support */ #define HT_MD5 1 /* Define to enable POSIX RegEx support. */ #define HT_POSIX_REGEX 1 /* Define to enable support for enabling a rules file w/o user interaction. */ /* #undef HT_AUTOMATIC_RULES */ /* Define to enable SOCKS firewall-breaching code. */ /* #undef SOCKS */ /* #undef SOCKS4 */ /* #undef SOCKS5 */ /* Define to build Cyrillic version. */ /* #undef CYRILLIC */ /* Define to use internal signal handler */ /* #undef WWWLIB_SIG */ /* Define to build using reentrant system calls. */ /* #undef HT_REENTRANT */ /* Define to be the package name. */ #define W3C_PACKAGE "w3c-libwww" /* Define to be the version. */ #define W3C_VERSION "5.3.1" /* Define to be the location of the W3C Icons */ #define W3C_ICONS "/usr/local/share/w3c-icons" /* Define to be the location of the TCL Library */ #define W3C_TCL "/usr/local/lib/libtcl7.5.a" /* Define this to be the prefix for cache files. */ #define CACHE_FILE_PREFIX "/usr/wsrc/" /* Define this if we can select on stdin. */ /* #undef TTY_IS_SELECTABLE */ /* Define to disable Nagle's algorithm */ #define HT_NO_NAGLE 1 /* Define to disable HTTP/1.1 pipelining */ /* #undef HT_NO_PIPELINING */ /* Define to enable MUX as HTTP transport */ /* #undef HT_MUX */ /* Define this if it's not typedef'd automatically. */ #define BOOLEAN /* Define this to be the location of the resolver configuration file. */ /* #undef RESOLV_CONF */ /* Define this to be the rlogin program name. */ /* undef RLOGIN_PROGRAM */ /* Define this to be the telnet program name. */ #define TELNET_PROGRAM "telnet" /* Define this to be the tn3270 program name. */ /* #undef TN3270_PROGRAM */ /* Define this if it isn't in the header files. */ /* #undef u_char */ /* For removing a file */ /* #undef unlink */ /* Define this if it isn't in the header files. */ /* #undef u_short */ /* Define this if it isn't in the header files. */ /* #undef u_long */ /* Define if time_t is of type long */ #define HAVE_LONG_TIME_T 1 /* Define if size_t is of type long */ /* undef HAVE_LONG_SIZE_T */ /* The number of bytes in a char. */ #define SIZEOF_CHAR 1 /* The number of bytes in a char *. */ #define SIZEOF_CHAR_P 4 /* The number of bytes in a int. */ #define SIZEOF_INT 4 /* The number of bytes in a long. */ #define SIZEOF_LONG 4 /* Define if you have the chdir function. */ #define HAVE_CHDIR 1 /* Define if you have the fcntl function. */ /* #undef HAVE_FCNTL */ /* Define if you have the getcwd function. */ #define HAVE_GETCWD 1 /* Define if you have the getdomainname function. */ /* #undef HAVE_GETDOMAINNAME */ /* Define if you have the gethostname function. */ #define HAVE_GETHOSTNAME 1 /* Define if you have the getlogin function. */ /* #undef HAVE_GETLOGIN */ /* Define if you have the getpass function. */ /* #undef HAVE_GETPASS */ /* Define if you have the getpid function. */ /* #undef HAVE_GETPID */ /* Define if you have the getsockopt function. */ #define HAVE_GETSOCKOPT 1 /* Define if you have the gettimeofday function. */ /* #undef HAVE_GETTIMEOFDAY */ /* Define if you have the getwd function. */ /* #undef HAVE_GETWD */ /* Define if you have the ioctl function. */ /* #undef HAVE_IOCTL */ /* Define if you have the memcpy function. */ #define HAVE_MEMCPY 1 /* Define if you have the mktime function. */ #define HAVE_MKTIME 1 /* Define if you have the opendir function. */ /* #undef HAVE_OPENDIR */ /* Define if you have the readdir function. */ /* #undef HAVE_READDIR */ /* Define if you have the select function. */ /* #undef HAVE_SELECT */ /* Define if you have the setsockopt function. */ #define HAVE_SETSOCKOPT 1 /* Define if you have the socket function. */ #define HAVE_SOCKET 1 /* Define if you have the strchr function. */ #define HAVE_STRCHR 1 /* Define if you have the strerror function. */ #define HAVE_STRERROR 1 /* Define if you have the strtol function. */ #define HAVE_STRTOL 1 /* Define if you have the sysinfo function. */ /* #undef HAVE_SYSINFO */ /* Define if you have the tempnam function. */ /* Have problems on windows */ /* #undef HAVE_TEMPNAM */ /* Define if you have the timegm function. */ /* #undef HAVE_TIMEGM */ /* Define if you have the <appkit.h> header file. */ /* #undef HAVE_APPKIT_H */ /* Define if you have the <appkit/appkit.h> header file. */ /* #undef HAVE_APPKIT_APPKIT_H */ /* Define if you have the <arpa/inet.h> header file. */ /* #undef HAVE_ARPA_INET_H */ /* Define if you have the <bsdtime.h> header file. */ /* #undef HAVE_BSDTIME_H */ /* Define if you have the <bsdtypes.h> header file. */ /* #undef HAVE_BSDTYPES_H */ /* Define if you have the <ctype.h> header file. */ /* #undef HAVE_CTYPE_H */ /* Define if you have the <curses.h> header file. */ /* #undef HAVE_CURSES_H */ /* Define if you have the <cursesX.h> header file. */ /* #undef HAVE_CURSESX_H */ /* Define if you have the <dir.h> header file. */ /* #undef HAVE_DIR_H */ /* Define if you have the <direct.h> header file. */ #define HAVE_DIRECT_H 1 /* Define if you have the <dirent.h> header file. */ /* #undef HAVE_DIRENT_H */ /* Define if you have the <dn.h> header file. */ /* #undef HAVE_DN_H */ /* Define if you have the <dnetdb.h> header file. */ /* #undef HAVE_DNETDB_H */ /* Define if you have the <errno.h> header file. */ /* #undef HAVE_ERRNO_H */ /* Define if you have the <fcntl.h> header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the <grp.h> header file. */ /* #undef HAVE_GRP_H */ /* Define if you have the <in.h> header file. */ /* #undef HAVE_IN_H */ /* Define if you have the <inet.h> header file. */ /* #undef HAVE_INET_H */ /* Define if you have the <libc.h> header file. */ /* #undef HAVE_LIBC_H */ /* Define if you have the <limits.h> header file. */ #define HAVE_LIMITS_H 1 /* Define if you have the <malloc.h> header file. */ #define HAVE_MALLOC_H 1 /* Define if you have the <manifest.h> header file. */ /* #undef HAVE_MANIFEST_H */ /* Define if you have the <memory.h> header file. */ /* #undef HAVE_MEMORY_H */ /* Define if you have the <ndir.h> header file. */ /* #undef HAVE_NDIR_H */ /* Define if you have the <net/errno.h> header file. */ /* #undef HAVE_NET_ERRNO_H */ /* Define if you have the <netdb.h> header file. */ /* #undef HAVE_NETDB_H */ /* Define if you have the <netinet/in.h> header file. */ /* #undef HAVE_NETINET_IN_H */ /* Define if you have the <netinet/tcp.h> header file. */ /* #undef HAVE_NETINET_TCP_H */ /* Define if you have the <pwd.h> header file. */ /* #undef HAVE_PWD_H */ /* Define if you have the <curses.h> header file. */ #define HAVE_REGEX_H 1 /* Define if you have the <resource.h> header file. */ /* #undef HAVE_RESOURCE_H */ /* Define if you have the <select.h> header file. */ /* #undef HAVE_SELECT_H */ /* Define if you have the <socket.h> header file. */ /* #undef HAVE_SOCKET_H */ /* Define if you have the <stat.h> header file. */ /* #undef HAVE_STAT_H */ /* Define if you have the <stdefs.h> header file. */ /* #undef HAVE_STDEFS_H */ /* Define if you have the <stdio.h> header file. */ #define HAVE_STDIO_H 1 /* Define if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 /* Define if you have the <string.h> header file. */ #define HAVE_STRING_H 1 /* Define if you have the <strings.h> header file. */ /* #undef HAVE_STRINGS_H */ /* Define if you have the <sys/dir.h> header file. */ /* #undef HAVE_SYS_DIR_H */ /* Define if you have the <sys/errno.h> header file. */ /* #undef HAVE_SYS_ERRNO_H */ /* Define if you have the <sys/fcntl.h> header file. */ /* #undef HAVE_SYS_FCNTL_H */ /* Define if you have the <sys/file.h> header file. */ /* #undef HAVE_SYS_FILE_H */ /* Define if you have the <sys/ioctl.h> header file. */ /* #undef HAVE_SYS_IOCTL_H */ /* Define if you have the <sys/ipc.h> header file. */ /* #undef HAVE_SYS_IPC_H */ /* Define if you have the <sys/limits.h> header file. */ /* #undef HAVE_SYS_LIMITS_H */ /* Define if you have the <sys/ndir.h> header file. */ /* #undef HAVE_SYS_NDIR_H */ /* Define if you have the <sys/resource.h> header file. */ /* #undef HAVE_SYS_RESOURCE_H */ /* Define if you have the <sys/select.h> header file. */ /* #undef HAVE_SYS_SELECT_H */ /* Define if you have the <sys/socket.h> header file. */ /* #undef HAVE_SYS_SOCKET_H */ /* Define if you have the <sys/stat.h> header file. */ #define HAVE_SYS_STAT_H 1 /* Define if you have the <sys/systeminfo.h> header file. */ /* #undef HAVE_SYS_SYSTEMINFO_H */ /* Define if you have the <sys/time.h> header file. */ /* #undef HAVE_SYS_TIME_H */ /* Define if you have the <sys/types.h> header file. */ #define HAVE_SYS_TYPES_H 1 /* Define if you have the <sys/unistd.h> header file. */ /* #undef HAVE_SYS_UNISTD_H */ /* Define if you have the <syslog.h> header file. */ /* #undef HAVE_SYSLOG_H */ /* Define if you have the <tcp.h> header file. */ /* #undef HAVE_TCP_H */ /* Define if you have the <termios.h> header file. */ /* #undef HAVE_TERMIOS_H */ /* Define if you have the <time.h> header file. */ #define HAVE_TIME_H 1 /* Define if you have the <types.h> header file. */ /* #undef HAVE_TYPES_H */ /* Define if you have the <unistd.h> header file. */ /* #undef HAVE_UNISTD_H */ /* Define if you have the <unixlib.h> header file. */ /* #undef HAVE_UNIXLIB_H */ /* Define if you have the ICE library (-lICE). */ /* #undef HAVE_LIBICE */ /* Define if you have the dl library (-ldl). */ /* #undef HAVE_LIBDL */ /* Define if you have the inet library (-linet). */ /* #undef HAVE_LIBINET */ /* Define if you have the nsl library (-lnsl). */ /* #undef HAVE_LIBNSL */ /* Define if you have the socket library (-lsocket). */ /* #undef HAVE_LIBSOCKET */ /* Define this if you have the external variable 'socket_errno'. */ /* #undef HAVE_SOCKET_ERRNO */ /* Define this if you have the external variable 'sys_errlist'. */ /* #undef HAVE_SYS_ERRLIST */ /* Define this if you have the external variable 'sys_nerr'. */ /* #undef HAVE_SYS_NERR */ /* Define this if you have the external variable 'timezone' */ #define HAVE_TIMEZONE 1 /* Define this if you have the external variable 'altzone' */ /* #undef HAVE_ALTZONE */ /* Define this if you have the external variable 'altzone' */ #define HAVE_DAYLIGHT 1 /* Define this if you have the uxc$inetdef.h header file. */ /* #undef HAVE_UXC_INETDEF_H */ /* Define this if directory entries have inodes. */ /* #undef HAVE_DIRENT_INO */ /* Define this if tm structure includes a tm_gmtoff entry. */ /* #undef HAVE_TM_GMTOFF */ /* Define this if your ioctl understands the winsize structure. */ /* #undef HAVE_WINSIZE */ /* Define this if the extern timezone is negative. */ /* #undef NEGATIVE_TIMEZONE */ /* Define this if sys_errlist must be declared (if it exists). */ /* #undef NEED_SYS_ERRLIST_DECLARED */ /* Define this if sys_nerr must be declared (if it exists). */ /* #undef NEED_SYS_NERR_DECLARED */ ��������������������������������libwww/Library/src/windows/windll.c�����������������������������������������������������������������0100644�0000764�0000144�00000000163�06052747172�017105� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <windows.h> BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) { return (1); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwapp.files�������������������������������������������������������������0100644�0000764�0000144�00000000132�06700250374�020006� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAccess.c HTDialog.c HTEvtLst.c HTFilter.c HTHist.c HTHome.c HTLog.c HTProxy.c HTRules.c ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwcache.files�����������������������������������������������������������0100644�0000764�0000144�00000000012�06110230417�020255� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTCache.c ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwcore.files������������������������������������������������������������0100644�0000764�0000144�00000000416�06657356147�020203� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAlert.c HTAnchor.c HTChannl.c HTDNS.c HTError.c HTEscape.c HTEvent.c HTFormat.c HTHost.c HTInet.c HTLib.c HTLink.c HTMemLog.c HTMethod.c HTNet.c HTNoFree.c HTParse.c HTProt.c HTReqMan.c HTResponse.c HTStream.c HTTCP.c HTTimer.c HTTrans.c HTUTree.c HTUser.c HTWWWStr.c ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwdir.files�������������������������������������������������������������0100644�0000764�0000144�00000000035�06110230421�017770� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTIcons.c HTDescpt.c HTDir.c ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwdll.c�����������������������������������������������������������������0100644�0000764�0000144�00000000516�06052747203�017131� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTDLL - module to be included only when making wwwuitls.dll * purpose: provide instances of the following exported globals: * PTTYPrint - * WWW_TraceFlag - */ typedef int (TTYPrint_t)(unsigned int target, const char* fmt, ...); TTYPrint_t* PTTYPrint; int WWW_TraceFlag = 0; /* Global trace flag for ALL W3 code */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwdll.def���������������������������������������������������������������0100644�0000764�0000144�00000000271�06052747205�017445� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;LIBRARY htdll DESCRIPTION 'Core functions from the wwwlib.' EXPORTS ;HTDLL.c ;PpTTYPrint = PTTYPrint @ 801 NONAME CONSTANT PTTYPrint @ 801 CONSTANT WWW_TraceFlag @ 802 CONSTANT ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwfile.files������������������������������������������������������������0100644�0000764�0000144�00000000046�06657356147�020171� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTBInit.c HTBind.c HTFile.c HTMulti.c ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwftp.files�������������������������������������������������������������0100644�0000764�0000144�00000000023�06110230422�020001� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTFTP.c HTFTPDir.c �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwgophe.files�����������������������������������������������������������0100644�0000764�0000144�00000000013�06110230423�020312� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTGopher.c ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwhtml.files������������������������������������������������������������0100644�0000764�0000144�00000000124�06654344513�020202� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMLPDTD.c SGML.c HTMLGen.c HTTeXGen.c HTPlain.c HTML.c HText.c HTHInit.c HTStyle.c ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwhttp.files������������������������������������������������������������0100644�0000764�0000144�00000000157�06676211241�020216� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAABrow.c HTAAUtil.c HTCookie.c HTDigest.c HTTChunk.c HTTP.c HTTPGen.c HTTPReq.c HTTPRes.c HTTPServ.c HTPEP.c �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwinit.files������������������������������������������������������������0100644�0000764�0000144�00000000024�06700250374�020171� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTInit.c HTProfil.c ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwmime.files������������������������������������������������������������0100644�0000764�0000144�00000000077�06661445112�020167� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTBound.c HTHeader.c HTMIME.c HTMIMPrs.c HTMIMERq.c HTMIMImp.c �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwmux.files�������������������������������������������������������������0100644�0000764�0000144�00000000036�06532073575�020053� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMuxCh.c HTMuxTx.c HTDemux.c ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwnews.files������������������������������������������������������������0100644�0000764�0000144�00000000050�06110230426�020170� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTNDir.c HTNews.c HTNewsLs.c HTNewsRq.c ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwsql.files�������������������������������������������������������������0100644�0000764�0000144�00000000023�06532073575�020035� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTSQL.c HTSQLLog.c �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwstream.files����������������������������������������������������������0100644�0000764�0000144�00000000150�06661445112�020523� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTConLen.c HTEPtoCl.c HTFSave.c HTFWrite.c HTGuess.c HTMerge.c HTNetTxt.c HTSChunk.c HTTee.c HTXParse.c ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwtelnt.files�����������������������������������������������������������0100644�0000764�0000144�00000000013�06110230427�020342� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTelnet.c ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwtrans.files�����������������������������������������������������������0100644�0000764�0000144�00000000077�06260772671�020377� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTANSI.c HTBufWrt.c HTLocal.c HTReader.c HTSocket.c HTWriter.c �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwutils.files�����������������������������������������������������������0100644�0000764�0000144�00000000140�06706437653�020402� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTArray.c HTAssoc.c HTAtom.c HTChunk.c HTHash.c HTList.c HTMemory.c HTString.c HTTrace.c HTUU.c ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwwais.files������������������������������������������������������������0100644�0000764�0000144�00000000022�06661445112�020171� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTWAIS.c HTWSRC.c ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwxml.files�������������������������������������������������������������0100644�0000764�0000144�00000000020�06706437653�020037� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTRDF.c HTXML.c ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwzip.files�������������������������������������������������������������0100644�0000764�0000144�00000000010�06272611104�020017� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTZip.c ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwapp.def���������������������������������������������������������������0100644�0000764�0000144�00000006444�07405520456�017462� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTAccess.c @ 100 HTLoadAbsolute @ 101 HTLoadRelative @ 102 HTLoadToStream @ 103 HTLoadToFile @ 104 HTLoadToChunk @ 105 HTLoadAnchor @ 106 HTLoadAnchorRecursive @ 107 HTLoadAnchorToChunk @ 108 HTLoadRules @ 109 HTLoadRulesAutomatically @ 110 HTSearchAbsolute @ 111 HTSearchRelative @ 112 HTSearchString @ 113 HTSearchAnchor @ 114 HTGetFormAbsolute @ 115 HTGetFormRelative @ 116 HTGetFormAnchor @ 117 HTPostFormAbsolute @ 118 HTPostFormRelative @ 119 HTPostFormAnchor @ 120 HTPostFormAnchorToChunk @ 121 HTPutAbsolute @ 122 HTPutRelative @ 123 HTPutAnchor @ 124 HTPostAbsolute @ 125 HTPostRelative @ 126 HTPostAnchor @ 127 HTPutStructuredAbsolute @ 128 HTPutStructuredRelative @ 129 HTPutStructuredAnchor @ 130 HTPutDocumentAbsolute @ 131 HTPutDocumentRelative @ 132 HTPutDocumentAnchor @ 133 HTCopyAnchor @ 134 HTUploadAnchor @ 135 HTUpload_callback @ 136 HTHeadAbsolute @ 137 HTHeadRelative @ 138 HTHeadAnchor @ 139 HTDeleteAbsolute @ 140 HTDeleteRelative @ 141 HTDeleteAnchor @ 142 HTOptionsAbsolute @ 143 HTOptionsRelative @ 144 HTOptionsAnchor @ 145 HTTraceAbsolute @ 146 HTTraceRelative @ 147 HTTraceAnchor @ 148 HTServeAbsolute @ 149 ;HTDialog.c @ 200 HTDialog_progressMessage @ 201 HTDialog_errorMessage @ 202 HTProgress @ 203 HTConfirm @ 204 HTPrompt @ 205 HTPromptPassword @ 206 HTPromptUsernameAndPassword @ 207 HTError_print @ 208 HTError_response @ 209 ;HTEvtLst.c @ 300 CheckSockEvent @ 301 EventOrder_executeAndDelete @ 302 EventOrder_deleteAll @ 303 HTEventList_register @ 304 HTEventList_unregister @ 305 HTEventList_unregisterAll @ 306 HTEventList_dispatch @ 307 HTEventList_lookup @ 308 HTEventList_newLoop @ 309 HTEventList_stopLoop @ 310 HTEventList_loop @ 311 HTEventList_setWinHandle @ 312 HTEventList_getWinHandle @ 313 HTEventInit @ 314 HTEventTerminate @ 315 ;HTFilter.c @ 400 HTProxyFilter @ 401 HTRuleFilter @ 402 HTMemoryCacheFilter @ 403 HTInfoFilter @ 404 HTRedirectFilter @ 405 HTUseProxyFilter @ 406 HTCredentialsFilter @ 407 HTAuthFilter @ 408 HTAuthInfoFilter @ 409 HTLogFilter @ 410 HTRefererFilter @ 411 ;HTHist.c @ 500 HTHistory_new @ 501 HTHistory_delete @ 502 HTHistory_record @ 503 HTHistory_replace @ 504 HTHistory_removeLast @ 505 HTHistory_removeFrom @ 506 HTHistory_count @ 507 HTHistory_position @ 508 HTHistory_recall @ 509 HTHistory_find @ 510 HTHistory_list @ 511 HTHistory_canBacktrack @ 512 HTHistory_backtrack @ 513 HTHistory_back @ 514 HTHistory_canForward @ 515 HTHistory_forward @ 516 ;HTHome.c @ 600 HTGetCurrentDirectoryURL @ 601 HTHomeAnchor @ 602 HTTmpAnchor @ 603 HTParseFormInput @ 604 HTSetTraceMessageMask @ 605 ;HTLog.c @ 700 HTLog_open @ 701 HTLog_close @ 702 HTLog_accessCount @ 703 HTLog_addCLF @ 704 HTLog_addReferer @ 705 HTLog_addLine @ 706 HTLog_addText @ 707 ;HTProxy.c @ 800 HTProxy_add @ 801 HTProxy_addRegex @ 802 HTProxy_deleteAll @ 803 HTGateway_add @ 804 HTGateway_deleteAll @ 805 HTNoProxy_add @ 806 HTNoProxy_addRegex @ 807 HTNoProxy_deleteAll @ 808 HTProxy_NoProxyIsOnlyProxy @ 809 HTProxy_setNoProxyIsOnlyProxy @ 810 HTProxy_find @ 811 HTGateway_find @ 812 HTProxy_getEnvVar @ 813 ;HTRules.c @ 900 HTRule_global @ 901 HTRule_setGlobal @ 902 HTRule_addGlobal @ 903 HTRule_add @ 904 HTRule_deleteAll @ 905 HTRule_translate @ 906 HTRule_parseLine @ 907 HTRules @ 908 HTRules_parseAutomatically @ 909 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwcache.def�������������������������������������������������������������0100644�0000764�0000144�00000002027�07405520456�017736� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTCache.c @ 100 HTCacheIndex_delete @ 101 HTCacheIndex_write @ 102 HTCacheIndex_read @ 103 HTCacheMode_getRoot @ 104 HTCacheInit @ 105 HTCacheTerminate @ 106 HTCacheMode_setEnabled @ 107 HTCacheMode_enabled @ 108 HTCacheMode_setProtected @ 109 HTCacheMode_protected @ 110 HTCacheMode_setDisconnected @ 111 HTCacheMode_disconnected @ 112 HTCacheMode_isDisconnected @ 113 HTCacheMode_setExpires @ 114 HTCacheMode_expires @ 115 HTCacheMode_setMaxSize @ 116 HTCacheMode_maxSize @ 117 HTCacheMode_setMaxCacheEntrySize @ 118 HTCacheMode_maxCacheEntrySize @ 119 HTCacheMode_setDefaultExpiration @ 120 HTCacheMode_DefaultExpiration @ 121 HTCache_touch @ 122 HTCache_find @ 123 HTCache_deleteAll @ 124 HTCache_writeMeta @ 125 HTCache_updateMeta @ 126 HTCache_resetMeta @ 127 HTCache_flushAll @ 128 HTCache_isFresh @ 129 HTCache_getLock @ 130 HTCache_releaseLock @ 131 HTCache_hasLock @ 132 HTCache_breakLock @ 133 HTCache_name @ 134 HTCache_remove @ 135 HTCache_addHit @ 136 HTCacheWriter @ 137 HTCacheAppend @ 138 HTLoadCache @ 139 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwcore.def��������������������������������������������������������������0100644�0000764�0000144�00000046236�07405520456�017635� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTAlert.c @ 100 HTAlert_setInteractive @ 101 HTAlert_interactive @ 102 HTAlertCall_add @ 103 HTAlertCall_delete @ 104 HTAlertCall_deleteOpcode @ 105 HTAlertCall_deleteAll @ 106 HTAlertCall_find @ 107 HTAlert_setGlobal @ 108 HTAlert_global @ 109 HTAlert_add @ 110 HTAlert_delete @ 111 HTAlert_deleteOpcode @ 112 HTAlert_deleteAll @ 113 HTAlert_find @ 114 HTAlert_newReply @ 115 HTAlert_deleteReply @ 116 HTAlert_replyMessage @ 117 HTAlert_setReplyMessage @ 118 HTAlert_assignReplyMessage @ 119 HTAlert_replySecret @ 120 HTAlert_setReplySecret @ 121 HTAlert_replyOutput @ 122 HTAlert_setReplyOutput @ 123 ;HTAnchor.c @ 200 HTAnchor_findChild @ 201 HTAnchor_findAddress @ 202 HTAnchor_findChildAndLink @ 203 HTAnchor_mainLink @ 204 HTAnchor_setMainLink @ 205 HTAnchor_subLinks @ 206 HTAnchor_setSubLinks @ 207 HTAnchor_followMainLink @ 208 HTAnchor_findLinkType @ 209 HTAnchor_deleteAll @ 210 HTAnchor_clearAll @ 211 HTAnchor_delete @ 212 HTAnchor_getArray @ 213 HTAnchor_parent @ 214 HTAnchor_setDocument @ 215 HTAnchor_document @ 216 HTAnchor_address @ 217 HTAnchor_expandedAddress @ 218 HTAnchor_physical @ 219 HTAnchor_setPhysical @ 220 HTAnchor_clearPhysical @ 221 HTAnchor_hasChildren @ 222 HTAnchor_isChild @ 223 HTAnchor_view @ 224 HTAnchor_update @ 225 HTAnchor_variants @ 226 HTAnchor_addVariant @ 227 HTAnchor_deleteVariant @ 228 HTAnchor_clearIndex @ 229 HTAnchor_setIndex @ 230 HTAnchor_isIndex @ 231 HTAnchor_base @ 232 HTAnchor_setBase @ 233 HTAnchor_location @ 234 HTAnchor_setLocation @ 235 HTAnchor_meta @ 236 HTAnchor_addMeta @ 237 HTAnchor_robots @ 238 HTAnchor_format @ 239 HTAnchor_setFormat @ 240 HTAnchor_formatParam @ 241 HTAnchor_addFormatParam @ 242 HTAnchor_charset @ 243 HTAnchor_setCharset @ 244 HTAnchor_level @ 245 HTAnchor_setLevel @ 246 HTAnchor_encoding @ 247 HTAnchor_addEncoding @ 248 HTAnchor_deleteEncoding @ 249 HTAnchor_deleteEncodingAll @ 250 HTAnchor_language @ 251 HTAnchor_addLanguage @ 252 HTAnchor_deleteLanguageAll @ 253 HTAnchor_length @ 254 HTAnchor_setLength @ 255 HTAnchor_addLength @ 256 HTAnchor_contentTransferEncoding @ 257 HTAnchor_setContentTransferEncoding @ 258 HTAnchor_allow @ 259 HTAnchor_setAllow @ 260 HTAnchor_appendAllow @ 261 HTAnchor_title @ 262 HTAnchor_setTitle @ 263 HTAnchor_appendTitle @ 264 HTAnchor_version @ 265 HTAnchor_setVersion @ 266 HTAnchor_derived @ 267 HTAnchor_setDerived @ 268 HTAnchor_md5 @ 269 HTAnchor_setMd5 @ 270 HTAnchor_date @ 271 HTAnchor_setDate @ 272 HTAnchor_expires @ 273 HTAnchor_setExpires @ 274 HTAnchor_lastModified @ 275 HTAnchor_setLastModified @ 276 HTAnchor_age @ 277 HTAnchor_setAge @ 278 HTAnchor_etag @ 279 HTAnchor_setEtag @ 280 HTAnchor_isEtagWeak @ 281 HTAnchor_header @ 282 HTAnchor_setHeader @ 283 HTAnchor_setHeaderParsed @ 284 HTAnchor_headerParsed @ 285 HTAnchor_clearHeader @ 286 ;HTChannl.c @ 300 ChannelIStream_consumed @ 301 HTChannel_new @ 302 HTChannel_find @ 303 HTChannel_delete @ 304 HTChannel_deleteAll @ 305 HTChannel_safeDeleteAll @ 306 HTChannel_socket @ 307 HTChannel_setSocket @ 308 HTChannel_file @ 309 HTChannel_setFile @ 310 HTChannel_setHost @ 311 HTChannel_host @ 312 HTChannel_upSemaphore @ 313 HTChannel_downSemaphore @ 314 HTChannel_setSemaphore @ 315 HTChannel_setInput @ 316 HTChannel_input @ 317 HTChannel_deleteInput @ 318 HTChannel_setOutput @ 319 HTChannel_output @ 320 HTChannel_deleteOutput @ 321 HTChannel_getChannelIStream @ 322 HTChannel_getChannelOStream @ 323 ;HTDNS.c @ 400 HTDNS_setTimeout @ 401 HTDNS_timeout @ 402 HTDNS_add @ 403 HTDNS_updateWeigths @ 404 HTDNS_delete @ 405 HTDNS_deleteAll @ 406 HTGetHostByName @ 407 HTGetHostBySock @ 408 ;HTError.c @ 500 HTError_add @ 501 HTError_addSystem @ 502 HTError_deleteAll @ 503 HTError_deleteLast @ 504 HTError_ignoreLast @ 505 HTError_setIgnore @ 506 HTError_show @ 507 HTError_setShow @ 508 HTError_doShow @ 509 HTError_severity @ 510 HTError_hasSeverity @ 511 HTError_index @ 512 HTError_parameter @ 513 HTError_location @ 514 ;HTEscape.c @ 600 HTEscape @ 601 HTAsciiHexToChar @ 602 HTUnEscape @ 603 ;HTEvent.c @ 700 HTEvent_setRegisterCallback @ 701 HTEvent_setUnregisterCallback @ 702 HTEvent_isCallbacksRegistered @ 703 HTEvent_unregister @ 704 HTEvent_register @ 705 HTEvent_setCallback @ 706 HTEvent_new @ 707 HTEvent_delete @ 708 HTEvent_setParam @ 709 HTEvent_setPriority @ 710 HTEvent_setTimeout @ 711 HTEvent_type2str @ 712 ;HTFormat.c @ 800 HTBlackHoleConverter @ 801 HTThroughLine @ 802 HTSaveConverter @ 803 HTIdentityCoding @ 804 HTPresentation_setConverter @ 805 HTPresentation_converter @ 806 HTPresentation_add @ 807 HTPresentation_deleteAll @ 808 HTConversion_add @ 809 HTConversion_deleteAll @ 810 HTCoding_add @ 811 HTCoding_deleteAll @ 812 HTCoding_name @ 813 HTCoding_quality @ 814 HTLanguage_add @ 815 HTLanguage_deleteAll @ 816 HTCharset_add @ 817 HTCharset_deleteAll @ 818 HTFormat_setConversion @ 819 HTFormat_conversion @ 820 HTFormat_addConversion @ 821 HTFormat_setContentCoding @ 822 HTFormat_contentCoding @ 823 HTFormat_addCoding @ 824 HTFormat_setTransferCoding @ 825 HTFormat_transferCoding @ 826 HTFormat_addTransferCoding @ 827 HTFormat_setLanguage @ 828 HTFormat_language @ 829 HTFormat_setCharset @ 830 HTFormat_charset @ 831 HTFormat_deleteAll @ 832 HTStreamStack @ 833 HTStackValue @ 834 HTContentCodingStack @ 835 HTContentEncodingStack @ 836 HTContentDecodingStack @ 837 HTTransferCodingStack @ 838 HTTransferEncodingStack @ 839 HTTransferDecodingStack @ 840 HTContentTransferCodingStack @ 841 ;HTHost.c @ 900 HTHost_new @ 901 HTHost_newWParse @ 902 HTHost_find @ 903 HTHost_deleteAll @ 904 HTHost_name @ 905 HTHost_class @ 906 HTHost_setClass @ 907 HTHost_version @ 908 HTHost_setVersion @ 909 HTHost_setPersistTimeout @ 910 HTHost_persistTimeout @ 911 HTHost_setActiveTimeout @ 912 HTHost_activeTimeout @ 913 HTHost_setPersistExpires @ 914 HTHost_persistExpires @ 915 HTHost_setReqsPerConnection @ 916 HTHost_reqsPerConnection @ 917 HTHost_setReqsMade @ 918 HTHost_reqsMade @ 919 HTHost_publicMethods @ 920 HTHost_setPublicMethods @ 921 HTHost_appendPublicMethods @ 922 HTHost_server @ 923 HTHost_setServer @ 924 HTHost_userAgent @ 925 HTHost_setUserAgent @ 926 HTHost_rangeUnits @ 927 HTHost_setRangeUnits @ 928 HTHost_isRangeUnitAcceptable @ 929 HTHost_setPersistent @ 930 HTHost_isPersistent @ 931 HTHost_channel @ 932 HTHost_setCloseNotification @ 933 HTHost_closeNotification @ 934 HTHost_clearChannel @ 935 HTHost_doRecover @ 936 HTHost_recoverPipe @ 937 HTHost_killPipe @ 938 HTHost_mode @ 939 HTHost_setMode @ 940 HTHost_isIdle @ 941 HTHost_addNet @ 942 HTHost_deleteNet @ 943 HTHost_nextPendingNet @ 944 HTHost_nextPendingHost @ 945 HTHost_launchPending @ 946 HTHost_firstNet @ 947 HTHost_numberOfOutstandingNetObjects @ 948 HTHost_numberOfPendingNetObjects @ 949 HTHost_connect @ 950 HTHost_listen @ 951 HTHost_accept @ 952 HTHost_register @ 953 HTHost_unregister @ 954 HTHost_setRemainingRead @ 955 HTHost_remainingRead @ 956 HTHost_getSockAddr @ 957 HTHost_setHome @ 958 HTHost_home @ 959 HTHost_setRetry @ 960 HTHost_decreaseRetry @ 961 HTHost_retry @ 962 HTHost_setChannel @ 963 HTHost_getReadNet @ 964 HTHost_getWriteNet @ 965 HTHost_getInput @ 966 HTHost_getOutput @ 967 HTHost_output @ 968 HTHost_read @ 969 HTHost_setConsumed @ 970 HTHost_hash @ 971 HTHost_setWriteDelay @ 972 HTHost_writeDelay @ 973 HTHost_findWriteDelay @ 974 HTHost_setDefaultWriteDelay @ 975 HTHost_defaultWriteDelay @ 976 HTHost_forceFlush @ 977 HTHost_setContext @ 978 HTHost_context @ 979 HTHost_eventTimeout @ 980 HTHost_setEventTimeout @ 981 HTHost_setMaxPipelinedRequests @ 982 HTHost_maxPipelinedRequests @ 983 HTHost_setActivateRequestCallback @ 984 HTHost_disable_PendingReqLaunch @ 985 HTHost_enable_PendingReqLaunch @ 986 ;HTInet.c @ 1000 HTErrnoString @ 1001 HTInetStatus @ 1002 HTCardinal @ 1003 HTSetSignal @ 1004 HTSetSignal @ 1005 HTInetString @ 1006 HTParseInet @ 1007 HTGetHostName @ 1008 HTGetMailAddress @ 1009 HTGetNewsServer @ 1010 HTGetTimeZoneOffset @ 1011 HTGetTmpFileName @ 1012 HTGetTimeInMillis @ 1013 ;HTLib.c @ 1100 HTLib_appName @ 1101 HTLib_setAppName @ 1102 HTLib_appVersion @ 1103 HTLib_setAppVersion @ 1104 HTLib_name @ 1105 HTLib_version @ 1106 HTLib_userProfile @ 1107 HTLib_setUserProfile @ 1108 HTLib_secure @ 1109 HTLib_setSecure @ 1110 HTLib_isInitialized @ 1111 HTLibInit @ 1112 HTLibTerminate @ 1113 ;HTLink.c @ 1200 HTLink_new @ 1201 HTLink_delete @ 1202 HTLink_add @ 1203 HTLink_remove @ 1204 HTLink_removeAll @ 1205 HTLink_moveAll @ 1206 HTLink_find @ 1207 HTLink_findType @ 1208 HTLink_setDestination @ 1209 HTLink_destination @ 1210 HTLink_setType @ 1211 HTLink_type @ 1212 HTLink_setResult @ 1213 HTLink_result @ 1214 HTLink_setMethod @ 1215 HTLink_method @ 1216 ;HTMemLog.c @ 1300 HTMemLog_open @ 1301 HTMemLog_flush @ 1302 HTMemLog_add @ 1303 HTMemLog_close @ 1304 HTMemLog_callback @ 1305 ;HTMethod.c @ 1400 HTMethod_enum @ 1401 HTMethod_name @ 1402 ;HTNet.c @ 1500 HTNetCall_addBefore @ 1501 HTNetCall_deleteBefore @ 1502 HTNetCall_deleteBeforeAll @ 1503 HTNetCall_executeBefore @ 1504 HTNetCall_addAfter @ 1505 HTNetCall_deleteAfter @ 1506 HTNetCall_deleteAfterStatus @ 1507 HTNetCall_deleteAfterAll @ 1508 HTNetCall_executeAfter @ 1509 HTNet_setBefore @ 1510 HTNet_before @ 1511 HTNet_addBefore @ 1512 HTNet_deleteBefore @ 1513 HTNet_executeBeforeAll @ 1514 HTNet_setAfter @ 1515 HTNet_after @ 1516 HTNet_addAfter @ 1517 HTNet_deleteAfter @ 1518 HTNet_deleteAfterStatus @ 1519 HTNet_executeAfterAll @ 1520 HTNet_maxSocket @ 1521 HTNet_setMaxSocket @ 1522 HTNet_increaseSocket @ 1523 HTNet_decreaseSocket @ 1524 HTNet_availableSockets @ 1525 HTNet_increasePersistentSocket @ 1526 HTNet_decreasePersistentSocket @ 1527 HTNet_availablePersistentSockets @ 1528 HTNet_isIdle @ 1529 HTNet_isEmpty @ 1530 HTNet_count @ 1531 HTNet_dup @ 1532 HTNet_execute @ 1533 HTNet_start @ 1534 HTNet_new @ 1535 HTNet_newServer @ 1536 HTNet_newClient @ 1537 HTNet_clear @ 1538 HTNet_delete @ 1539 HTNet_deleteDup @ 1540 HTNet_deleteAll @ 1541 HTNet_killPipe @ 1542 HTNet_kill @ 1543 HTNet_killAll @ 1544 HTNet_priority @ 1545 HTNet_setPriority @ 1546 HTNet_persistent @ 1547 HTNet_setPersistent @ 1548 HTNet_setContext @ 1549 HTNet_context @ 1550 HTNet_setSocket @ 1551 HTNet_socket @ 1552 HTNet_setRequest @ 1553 HTNet_request @ 1554 HTNet_setChannel @ 1555 HTNet_channel @ 1556 HTNet_setHost @ 1557 HTNet_host @ 1558 HTNet_setDns @ 1559 HTNet_dns @ 1560 HTNet_setProtocol @ 1561 HTNet_protocol @ 1562 HTNet_setTransport @ 1563 HTNet_transport @ 1564 HTNet_preemptive @ 1565 HTNet_getOutput @ 1566 HTNet_event @ 1567 HTNet_setEventParam @ 1568 HTNet_eventParam @ 1569 HTNet_setEventCallback @ 1570 HTNet_eventCallback @ 1571 HTNet_setEventPriority @ 1572 HTNet_eventPriority @ 1573 HTNet_readStream @ 1574 HTNet_setReadStream @ 1575 HTNet_setRawBytesCount @ 1576 HTNet_rawBytesCount @ 1577 ;HTNoFree.c @ 1600 HTNoFreeStream_new @ 1601 HTNoFreeStream_delete @ 1602 ;HTParse.c @ 1700 HTParse @ 1701 HTURL_isAbsolute @ 1702 HTSimplify @ 1703 HTRelative @ 1704 HTCleanTelnetString @ 1705 ;HTProt.c @ 1800 HTProtocol_add @ 1801 HTProtocol_delete @ 1802 HTProtocol_client @ 1803 HTProtocol_server @ 1804 HTProtocol_id @ 1805 HTProtocol_preemptive @ 1806 HTProtocol_deleteAll @ 1807 HTProtocol_find @ 1808 HTProtocol_setTransport @ 1809 HTProtocol_transport @ 1810 HTProtocol_name @ 1811 ;HTReqMan.c @ 1900 HTRequest_new @ 1901 HTRequest_clear @ 1902 HTRequest_dup @ 1903 HTRequest_dupInternal @ 1904 HTRequest_delete @ 1905 HTRequest_kill @ 1906 HTRequest_setInternal @ 1907 HTRequest_internal @ 1908 HTRequest_setFlush @ 1909 HTRequest_flush @ 1910 HTRequest_date @ 1911 HTRequest_setDate @ 1912 HTRequest_setMethod @ 1913 HTRequest_method @ 1914 HTRequest_setPriority @ 1915 HTRequest_priority @ 1916 HTRequest_setUserProfile @ 1917 HTRequest_userProfile @ 1918 HTRequest_setNet @ 1919 HTRequest_net @ 1920 HTRequest_response @ 1921 HTRequest_setResponse @ 1922 HTRequest_error @ 1923 HTRequest_setError @ 1924 HTRequest_deleteAllErrors @ 1925 HTRequest_addError @ 1926 HTRequest_addSystemError @ 1927 HTRequest_setMaxRetry @ 1928 HTRequest_maxRetry @ 1929 HTRequest_retrys @ 1930 HTRequest_addRetry @ 1931 HTRequest_AAretrys @ 1932 HTRequest_addAARetry @ 1933 HTRequest_doRetry @ 1934 HTRequest_setPreemptive @ 1935 HTRequest_preemptive @ 1936 HTRequest_setNegotiation @ 1937 HTRequest_negotiation @ 1938 HTRequest_setPreconditions @ 1939 HTRequest_preconditions @ 1940 HTRequest_setGnHd @ 1941 HTRequest_addGnHd @ 1942 HTRequest_gnHd @ 1943 HTRequest_setRqHd @ 1944 HTRequest_addRqHd @ 1945 HTRequest_rqHd @ 1946 HTRequest_setRsHd @ 1947 HTRequest_addRsHd @ 1948 HTRequest_rsHd @ 1949 HTRequest_setEnHd @ 1950 HTRequest_addEnHd @ 1951 HTRequest_enHd @ 1952 HTRequest_setGenerator @ 1953 HTRequest_generator @ 1954 HTRequest_setMIMEParseSet @ 1955 HTRequest_MIMEParseSet @ 1956 HTRequest_setConversion @ 1957 HTRequest_conversion @ 1958 HTRequest_setEncoding @ 1959 HTRequest_encoding @ 1960 HTRequest_setTransfer @ 1961 HTRequest_transfer @ 1962 HTRequest_setLanguage @ 1963 HTRequest_language @ 1964 HTRequest_setCharset @ 1965 HTRequest_charset @ 1966 HTRequest_setFullURI @ 1967 HTRequest_fullURI @ 1968 HTRequest_setProxy @ 1969 HTRequest_proxy @ 1970 HTRequest_deleteProxy @ 1971 HTRequest_setReloadMode @ 1972 HTRequest_reloadMode @ 1973 HTRequest_defaultPutName @ 1974 HTRequest_setDefaultPutName @ 1975 HTRequest_deleteDefaultPutName @ 1976 HTRequest_addCacheControl @ 1977 HTRequest_deleteCacheControl @ 1978 HTRequest_cacheControl @ 1979 HTRequest_deleteRange @ 1980 HTRequest_addRange @ 1981 HTRequest_range @ 1982 HTRequest_addConnection @ 1983 HTRequest_deleteConnection @ 1984 HTRequest_connection @ 1985 HTRequest_addExpect @ 1986 HTRequest_deleteExpect @ 1987 HTRequest_expect @ 1988 HTRequest_deleteCredentialsAll @ 1989 HTRequest_addCredentials @ 1990 HTRequest_credentials @ 1991 HTRequest_setRealm @ 1992 HTRequest_realm @ 1993 HTRequest_deleteRealm @ 1994 HTRequest_addExtraHeader @ 1995 HTRequest_extraHeader @ 1996 HTRequest_deleteExtraHeaderAll @ 1997 HTRequest_addOptional @ 1998 HTRequest_optional @ 1999 HTRequest_deleteOptionalAll @ 2000 HTRequest_addMandatory @ 2001 HTRequest_mandatory @ 2002 HTRequest_deleteMandatoryAll @ 2003 HTRequest_setAnchor @ 2004 HTRequest_anchor @ 2005 HTRequest_childAnchor @ 2006 HTRequest_setParent @ 2007 HTRequest_parent @ 2008 HTRequest_setOutputStream @ 2009 HTRequest_outputStream @ 2010 HTRequest_setOutputFormat @ 2011 HTRequest_outputFormat @ 2012 HTRequest_setDebugStream @ 2013 HTRequest_debugStream @ 2014 HTRequest_setDebugFormat @ 2015 HTRequest_debugFormat @ 2016 HTRequest_setInputStream @ 2017 HTRequest_inputStream @ 2018 HTRequest_addBefore @ 2019 HTRequest_deleteBefore @ 2020 HTRequest_deleteBeforeAll @ 2021 HTRequest_before @ 2022 HTRequest_addAfter @ 2023 HTRequest_deleteAfter @ 2024 HTRequest_deleteAfterStatus @ 2025 HTRequest_deleteAfterAll @ 2026 HTRequest_after @ 2027 HTRequest_setCallback @ 2028 HTRequest_callback @ 2029 HTRequest_setContext @ 2030 HTRequest_context @ 2031 HTRequest_setOutputConnected @ 2032 HTRequest_outputConnected @ 2033 HTRequest_bodyRead @ 2034 HTRequest_bodyWritten @ 2035 HTRequest_bytesRead @ 2036 HTRequest_bytesWritten @ 2037 HTRequest_setMaxForwards @ 2038 HTRequest_maxForwards @ 2039 HTRequest_setSource @ 2040 HTRequest_source @ 2041 HTRequest_isPostWeb @ 2042 HTRequest_setPostCallback @ 2043 HTRequest_postCallback @ 2044 HTRequest_setEntityAnchor @ 2045 HTRequest_entityAnchor @ 2046 HTRequest_addDestination @ 2047 HTRequest_removeDestination @ 2048 HTRequest_destinationsReady @ 2049 HTRequest_linkDestination @ 2050 HTRequest_unlinkDestination @ 2051 HTRequest_removePostWeb @ 2052 HTRequest_killPostWeb @ 2053 HTRequest_forceFlush @ 2054 HTLoad @ 2055 HTServe @ 2056 ;HTResponse.c @ 2100 HTResponse_new @ 2101 HTResponse_delete @ 2102 HTResponse_redirection @ 2103 HTResponse_setRedirection @ 2104 HTResponse_retryTime @ 2105 HTResponse_setRetryTime @ 2106 HTResponse_addChallenge @ 2107 HTResponse_deleteChallengeAll @ 2108 HTResponse_challenge @ 2109 HTResponse_setRealm @ 2110 HTResponse_realm @ 2111 HTResponse_setScheme @ 2112 HTResponse_scheme @ 2113 HTResponse_addConnection @ 2114 HTResponse_deleteConnectionAll @ 2115 HTResponse_connection @ 2116 HTResponse_addProtocol @ 2117 HTResponse_deleteProtocolAll @ 2118 HTResponse_protocol @ 2119 HTResponse_addProtocolInfo @ 2120 HTResponse_deleteProtocolInfoAll @ 2121 HTResponse_protocolInfo @ 2122 HTResponse_addProtocolRequest @ 2123 HTResponse_deleteProtocolRequestAll @ 2124 HTResponse_protocolRequest @ 2125 HTResponse_deleteCacheControlAll @ 2126 HTResponse_cacheControl @ 2127 HTResponse_addCacheControl @ 2128 HTResponse_isCachable @ 2129 HTResponse_setCachable @ 2130 HTResponse_isCached @ 2131 HTResponse_maxAge @ 2132 HTResponse_mustRevalidate @ 2133 HTResponse_noCache @ 2134 HTResponse_etag @ 2135 HTResponse_deleteRangeAll @ 2136 HTResponse_addRange @ 2137 HTResponse_range @ 2138 HTResponse_length @ 2139 HTResponse_setLength @ 2140 HTResponse_addLength @ 2141 HTResponse_format @ 2142 HTResponse_setFormat @ 2143 HTResponse_formatParam @ 2144 HTResponse_addFormatParam @ 2145 HTResponse_charset @ 2146 HTResponse_setCharset @ 2147 HTResponse_addEncoding @ 2148 HTResponse_encoding @ 2149 HTResponse_addTransfer @ 2150 HTResponse_transfer @ 2151 HTResponse_contentTransferEncoding @ 2152 HTResponse_setContentTransferEncoding @ 2153 HTResponse_addVariant @ 2154 HTResponse_deleteVariantAll @ 2155 HTResponse_variant @ 2156 HTResponse_addTrailer @ 2157 HTResponse_deleteTrailerAll @ 2158 HTResponse_trailer @ 2159 HTResponse_addHeader @ 2160 HTResponse_deleteHeaderAll @ 2161 HTResponse_header @ 2162 HTResponse_handOverHeader @ 2163 HTResponse_reason @ 2164 HTResponse_setReason @ 2165 ;HTStream.c @ 2200 HTBlackHole @ 2201 HTErrorStream @ 2202 ;HTTCP.c @ 2300 HTDoConnect @ 2301 HTDoAccept @ 2302 HTDoListen @ 2303 HTDoClose @ 2304 ;HTTimer.c @ 2400 HTTimer_expireAll @ 2401 HTTimer_registerSetTimerCallback @ 2402 HTTimer_registerDeleteTimerCallback @ 2403 HTTimer_expiresRelative @ 2404 HTTimer_expiresAbsolute @ 2405 HTTimer_callback @ 2406 HTTimer_isRelative @ 2407 HTTimer_delete @ 2408 HTTimer_new @ 2409 HTTimer_refresh @ 2410 HTTimer_deleteAll @ 2411 HTTimer_dispatch @ 2412 HTTimer_hasTimerExpired @ 2413 HTTimer_next @ 2414 ;HTTrans.c @ 2500 HTTransport_add @ 2501 HTTransport_delete @ 2502 HTTransport_deleteAll @ 2503 HTTransport_find @ 2504 HTTransport_mode @ 2505 HTTransport_setMode @ 2506 ;HTUTree.c @ 2600 HTUTree_findNode @ 2601 HTUTree_addNode @ 2602 HTUTree_replaceNode @ 2603 HTUTree_deleteNode @ 2604 HTUTree_new @ 2605 HTUTree_find @ 2606 HTUTree_delete @ 2607 HTUTree_deleteAll @ 2608 ;HTUser.c @ 2700 HTUserProfile_new @ 2701 HTUserProfile_localize @ 2702 HTUserProfile_delete @ 2703 HTUserProfile_fqdn @ 2704 HTUserProfile_setFqdn @ 2705 HTUserProfile_email @ 2706 HTUserProfile_setEmail @ 2707 HTUserProfile_news @ 2708 HTUserProfile_setNews @ 2709 HTUserProfile_tmp @ 2710 HTUserProfile_setTmp @ 2711 HTUserProfile_timezone @ 2712 HTUserProfile_setTimezone @ 2713 HTUserProfile_context @ 2714 HTUserProfile_setContext @ 2715 ;HTWWWStr.c @ 2800 HTNextField @ 2801 HTNextLWSToken @ 2802 HTNextPair @ 2803 HTNextParam @ 2804 HTNextElement @ 2805 HTNextSegment @ 2806 HTNextSExp @ 2807 HTMessageIdStr @ 2808 HTParseTime @ 2809 HTDateTimeStr @ 2810 HTDateDirStr @ 2811 HTNumToStr @ 2812 HTMIMEMatch @ 2813 HTWWWToLocal @ 2814 HTLocalToWWW @ 2815 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwdir.def���������������������������������������������������������������0100644�0000764�0000144�00000000633�07405520456�017452� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTIcons.c @ 100 HTIcon_url @ 101 HTIcon_alternative @ 102 HTIcon_add @ 103 HTIcon_addUnknown @ 104 HTIcon_addBlank @ 105 HTIcon_addParent @ 106 HTIcon_addDir @ 107 HTIcon_find @ 108 HTIcon_deleteAll @ 109 ;HTDescpt.c @ 200 HTReadDescriptions @ 201 HTFreeDescriptions @ 202 HTGetDescription @ 203 ;HTDir.c @ 300 HTDir_setWidth @ 301 HTDir_new @ 302 HTDir_addElement @ 303 HTDir_free @ 304 �����������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwmux.def���������������������������������������������������������������0100644�0000764�0000144�00000001315�07405520456�017503� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTMuxCh.c @ 100 HTMuxSession_register @ 101 HTMuxSession_accept @ 102 HTMuxSession_connect @ 103 HTMuxSession_close @ 104 HTMuxSession_id @ 105 HTMuxSession_pid @ 106 HTMuxSession_net @ 107 HTMuxSession_setClose @ 108 HTMuxSession_credit @ 109 HTMuxSession_setCredit @ 110 HTMuxSession_fragment @ 111 HTMuxSession_setFragment @ 112 HTMuxSession_disposeData @ 113 HTMuxChannel_new @ 114 HTMuxChannel_find @ 115 HTMuxChannel_delete @ 116 HTMuxChannel_deleteAll @ 117 HTMuxChannel_net @ 118 HTMuxChannel_findSession @ 119 HTMuxChannel_host @ 120 HTMuxChannel_sendControl @ 121 HTMuxProtocol_add @ 122 HTMuxProtocol_delete @ 123 ;HTMuxTx.c @ 200 HTMuxBuffer_new @ 201 ;HTDemux.c @ 300 HTDemux_new @ 301 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwfile.def��������������������������������������������������������������0100644�0000764�0000144�00000001225�07405520456�017611� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTBInit.c @ 100 HTFileInit @ 101 ;HTBind.c @ 200 HTBind_init @ 201 HTBind_deleteAll @ 202 HTBind_caseSensitive @ 203 HTBind_delimiters @ 204 HTBind_setDelimiters @ 205 HTBind_addType @ 206 HTBind_addEncoding @ 207 HTBind_addTransfer @ 208 HTBind_addLanguage @ 209 HTBind_add @ 210 HTBind_getSuffix @ 211 HTBind_getAnchorBindings @ 212 HTBind_getResponseBindings @ 213 HTBind_getFormat @ 214 ;HTFile.c @ 300 HTFile_setDirAccess @ 301 HTFile_dirAccess @ 302 HTFile_setDirReadme @ 303 HTFile_dirReadme @ 304 HTFile_doFileSuffixBinding @ 305 HTFile_fileSuffixBinding @ 306 HTLoadFile @ 307 ;HTMulti.c @ 400 HTAddWelcome @ 401 HTMulti @ 402 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwftp.def���������������������������������������������������������������0100644�0000764�0000144�00000000272�07405520456�017464� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTFTP.c @ 100 HTLoadFTP @ 101 HTFTP_setTransferMode @ 102 HTFTP_transferMode @ 103 HTFTP_setControlMode @ 104 HTFTP_controlMode @ 105 ;HTFTPDir.c @ 200 HTFTPDir_new @ 201 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwgophe.def�������������������������������������������������������������0100644�0000764�0000144�00000000060�07405520456�017770� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTGopher.c @ 100 HTLoadGopher @ 101 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwstream.def������������������������������������������������������������0100644�0000764�0000144�00000001041�07405520456�020161� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTConLen.c @ 100 HTBuffer_new @ 101 HTDelayBuffer @ 102 HTContentCounter @ 103 HTPipeBuffer @ 104 ;HTEPtoCl.c @ 200 HTCallClient @ 201 ;HTFSave.c @ 300 HTFileSave_new @ 301 HTSaveLocally @ 302 HTSaveAndExecute @ 303 HTSaveAndCallback @ 304 ;HTFWrite.c @ 400 HTFWriter_new @ 401 ;HTGuess.c @ 500 HTGuess_new @ 501 ;HTMerge.c @ 600 HTMerge @ 601 ;HTNetTxt.c @ 700 HTNetToText @ 701 HTTextToNet @ 702 ;HTSChunk.c @ 800 HTStreamToChunk @ 801 ;HTTee.c @ 900 HTTee @ 901 ;HTXParse.c @ 1000 HTXParse @ 1001 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwhtml.def��������������������������������������������������������������0100644�0000764�0000144�00000003245�07405520456�017642� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTMLPDTD.c @ 100 HTML_dtd @ 101 HTML_setDtd @ 102 HTStartAnchor @ 103 HTMLPutImg @ 104 HTNextID @ 105 ;SGML.c @ 200 SGML_new @ 201 SGML_findTag @ 202 SGML_findTagName @ 203 SGML_findTagContents @ 204 SGML_findElementNumber @ 205 HTTag_name @ 206 HTTag_content @ 207 HTTag_attributes @ 208 HTTag_attributeName @ 209 HTAttr_name @ 210 ;HTMLGen.c @ 300 HTMLGenerator @ 301 HTPlainToHTML @ 302 HTPlainTo7BitHTML @ 303 ;HTTeXGen.c @ 400 HTMLToTeX @ 401 ;HTPlain.c @ 500 HTPlainPresent @ 501 ;HTML.c @ 600 HTMLUseCharacterSet @ 601 HTML_flush @ 602 HTML_free @ 603 HTMLToPlain @ 604 HTMLToC @ 605 HTMLPresent @ 606 ;HText.c @ 700 HTextImp_new @ 701 HTextImp_delete @ 702 HTextImp_build @ 703 HTextImp_addText @ 704 HTextImp_foundLink @ 705 HTextImp_beginElement @ 706 HTextImp_endElement @ 707 HTextImp_unparsedBeginElement @ 708 HTextImp_unparsedEndElement @ 709 HTextImp_unparsedEntity @ 710 HText_registerCDCallback @ 711 HText_unregisterCDCallback @ 712 HText_registerBuildCallback @ 713 HText_registerTextCallback @ 714 HText_unregisterTextCallback @ 715 HText_registerLinkCallback @ 716 HText_unregisterLinkCallback @ 717 HText_registerElementCallback @ 718 HText_unregisterElementCallback @ 719 HText_registerUnparsedElementCallback @ 720 HText_unregisterUnparsedElementCallback @ 721 HText_registerUnparsedEntityCallback @ 722 HText_unregisterUnparsedEntityCallback @ 723 ;HTHInit.c @ 800 HTMLInit @ 801 ;HTStyle.c @ 900 HTStyle_new @ 901 HTStyle_delete @ 902 HTStyleSheet_new @ 903 HTStyleSheet_delete @ 904 HTStyleSheet_addStyle @ 905 HTStyleSheet_deleteStyle @ 906 HTStyleSheet_findStyleWithName @ 907 HTStyleSheet_findStyleForElement @ 908 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwhttp.def��������������������������������������������������������������0100644�0000764�0000144�00000003072�07405520456�017653� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTAABrow.c @ 100 HTBasic_delete @ 101 HTBasic_generate @ 102 HTBasic_parse @ 103 HTDigest_delete @ 104 HTDigest_updateInfo @ 105 HTDigest_generate @ 106 HTDigest_parse @ 107 ;HTAAUtil.c @ 200 HTAA_newModule @ 201 HTAA_findModule @ 202 HTAA_deleteModule @ 203 HTAA_deleteAllModules @ 204 HTAA_updateNode @ 205 HTAA_deleteNode @ 206 HTAA_beforeFilter @ 207 HTAA_afterFilter @ 208 HTAA_updateFilter @ 209 HTAA_proxyBeforeFilter @ 210 ;HTCookie.c @ 300 HTCookie_setName @ 301 HTCookie_name @ 302 HTCookie_setValue @ 303 HTCookie_value @ 304 HTCookie_setDomain @ 305 HTCookie_domain @ 306 HTCookie_setPath @ 307 HTCookie_path @ 308 HTCookie_setExpiration @ 309 HTCookie_expiration @ 310 HTCookie_setSecure @ 311 HTCookie_isSecure @ 312 HTCookie_init @ 313 HTCookie_terminate @ 314 HTCookie_setCookieMode @ 315 HTCookie_cookieMode @ 316 HTCookie_setCallbacks @ 317 HTCookie_deleteCallbacks @ 318 ;HTDigest.c @ 400 HTDigest_init @ 401 HTDigest_update @ 402 HTDigest_final @ 403 ;HTTChunk.c @ 500 HTChunkedDecoder @ 501 HTChunkedEncoder @ 502 ;HTTP.c @ 600 HTTPStatus_new @ 601 HTLoadHTTP @ 602 HTTP_setConnectionMode @ 603 HTTP_connectionMode @ 604 HTTP_setBodyWriteDelay @ 605 HTTP_bodyWriteDelay @ 606 ;HTTPGen.c @ 700 HTTPGen_new @ 701 ;HTTPReq.c @ 800 HTTPRequest_new @ 801 ;HTTPRes.c @ 900 HTTPResponse_new @ 901 ;HTTPServ.c @ 1000 HTServHTTP @ 1001 ;HTPEP.c @ 1100 HTPEP_newModule @ 1101 HTPEP_findModule @ 1102 HTPEP_deleteModule @ 1103 HTPEP_deleteAllModules @ 1104 HTPEP_addNode @ 1105 HTPEP_beforeFilter @ 1106 HTPEP_afterFilter @ 1107 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwmime.def��������������������������������������������������������������0100644�0000764�0000144�00000003472�07405520456�017627� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTBound.c @ 100 HTBoundary @ 101 ;HTHeader.c @ 200 HTGenerator_add @ 201 HTGenerator_delete @ 202 HTGenerator_deleteAll @ 203 HTHeader_setMIMEParseSet @ 204 HTHeader_MIMEParseSet @ 205 HTHeader_addParser @ 206 HTHeader_addRegexParser @ 207 HTHeader_deleteParser @ 208 HTHeader_setGenerator @ 209 HTHeader_generator @ 210 HTHeader_addGenerator @ 211 HTHeader_deleteGenerator @ 212 HTHeader_deleteAll @ 213 ;HTMIME.c @ 300 HTMIMEConvert @ 301 HTMIMEHeader @ 302 HTMIMEContinue @ 303 HTMIMEUpgrade @ 304 HTMIMEFooter @ 305 HTMIMEPartial @ 306 HTMIME_setSaveStream @ 307 HTMIME_saveStream @ 308 HTCacheCopyHeaders @ 309 ;HTMIMPrs.c @ 400 HTMIMEParseSet_new @ 401 HTMIMEParseSet_deleteAll @ 402 HTMIMEParseSet_add @ 403 HTMIMEParseSet_addRegex @ 404 HTMIMEParseSet_delete @ 405 HTMIMEParseSet_dispatch @ 406 ;HTMIMERq.c @ 500 HTMIMERequest_new @ 501 ;HTMIMImp.c @ 600 HTMIME_accept @ 601 HTMIME_acceptCharset @ 602 HTMIME_acceptEncoding @ 603 HTMIME_acceptLanguage @ 604 HTMIME_acceptRanges @ 605 HTMIME_authenticate @ 606 HTMIME_authenticationInfo @ 607 HTMIME_authorization @ 608 HTMIME_cacheControl @ 609 HTMIME_connection @ 610 HTMIME_contentEncoding @ 611 HTMIME_contentLength @ 612 HTMIME_contentRange @ 613 HTMIME_contentTransferEncoding @ 614 HTMIME_contentType @ 615 HTMIME_keepAlive @ 616 HTMIME_link @ 617 HTMIME_location @ 618 HTMIME_maxForwards @ 619 HTMIME_messageDigest @ 620 HTMIME_pragma @ 621 HTMIME_protocol @ 622 HTMIME_protocolInfo @ 623 HTMIME_protocolRequest @ 624 HTMIME_proxyAuthorization @ 625 HTMIME_proxyAuthenticationInfo @ 626 HTMIME_public @ 627 HTMIME_range @ 628 HTMIME_referer @ 629 HTMIME_retryAfter @ 630 HTMIME_server @ 631 HTMIME_transferEncoding @ 632 HTMIME_trailer @ 633 HTMIME_upgrade @ 634 HTMIME_userAgent @ 635 HTMIME_vary @ 636 HTMIME_via @ 637 HTMIME_warning @ 638 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwnews.def��������������������������������������������������������������0100644�0000764�0000144�00000000643�07405520456�017651� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTNDir.c @ 100 HTNewsDir_setWidth @ 101 HTNewsDir_new @ 102 HTNewsDir_addElement @ 103 HTNewsDir_addGroupElement @ 104 HTNewsDir_belongsToSet @ 105 HTNewsDir_free @ 106 ;HTNews.c @ 200 HTNews_setMaxArticles @ 201 HTNews_maxArticles @ 202 HTLoadNews @ 203 ;HTNewsLs.c @ 300 HTNewsCache_before @ 301 HTNewsCache_after @ 302 HTNewsList @ 303 HTNewsGroup @ 304 ;HTNewsRq.c @ 400 HTNewsPost_new @ 401 ���������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwtrans.def�������������������������������������������������������������0100644�0000764�0000144�00000000531�07405520456�020020� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTANSI.c @ 100 HTANSIReader_new @ 101 HTANSIWriter_new @ 102 ;HTBufWrt.c @ 200 HTBufferWriter_new @ 201 HTBufferConverter_new @ 202 ;HTLocal.c @ 300 HTFileOpen @ 301 HTFileClose @ 302 ;HTReader.c @ 400 HTReader_consumed @ 401 HTReader_new @ 402 ;HTSocket.c @ 500 HTLoadSocket @ 501 ;HTWriter.c @ 600 HTWriter_new @ 601 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwtelnt.def�������������������������������������������������������������0100644�0000764�0000144�00000000060�07405520456�020014� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTTelnet.c @ 100 HTLoadTelnet @ 101 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwutils.def�������������������������������������������������������������0100644�0000764�0000144�00000004625�07405520456�020041� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTArray.c @ 100 HTArray_new @ 101 HTArray_clear @ 102 HTArray_delete @ 103 HTArray_addObject @ 104 HTArray_sort @ 105 ;HTAssoc.c @ 200 HTAssocList_new @ 201 HTAssocList_delete @ 202 HTAssocList_addObject @ 203 HTAssocList_replaceObject @ 204 HTAssocList_findObject @ 205 HTAssocList_findObjectExact @ 206 HTAssocList_findObjectCaseSensitive @ 207 HTAssocList_findObjectCaseSensitiveExact @ 208 HTAssocList_removeObject @ 209 ;HTAtom.c @ 300 HTAtom_for @ 301 HTAtom_caseFor @ 302 HTAtom_deleteAll @ 303 HTAtom_templateMatches @ 304 ;HTChunk.c @ 400 HTChunk_new @ 401 HTChunk_clear @ 402 HTChunk_delete @ 403 HTChunk_data @ 404 HTChunk_size @ 405 HTChunk_truncate @ 406 HTChunk_setSize @ 407 HTChunk_fromCString @ 408 HTChunk_fromBuffer @ 409 HTChunk_toCString @ 410 HTChunk_putc @ 411 HTChunk_puts @ 412 HTChunk_putb @ 413 HTChunk_terminate @ 414 HTChunk_ensure @ 415 ;HTHash.c @ 500 HTHashtable_new @ 501 HTHashtable_delete @ 502 HTHashtable_addObject @ 503 HTHashtable_removeObject @ 504 HTHashtable_object @ 505 HTHashtable_count @ 506 HTHashtable_walk @ 507 HTHashtable_keys @ 508 HTHashtable_print @ 509 ;HTList.c @ 600 HTList_new @ 601 HTList_delete @ 602 HTList_addObject @ 603 HTList_appendObject @ 604 HTList_removeObject @ 605 HTList_addList @ 606 HTList_appendList @ 607 HTList_quickRemoveElement @ 608 HTList_removeObjectAll @ 609 HTList_removeLastObject @ 610 HTList_removeFirstObject @ 611 HTList_firstObject @ 612 HTList_count @ 613 HTList_indexOf @ 614 HTList_indexOfElement @ 615 HTList_elementOf @ 616 HTList_objectAt @ 617 HTList_removeObjectAt @ 618 HTList_insertionSort @ 619 ;HTMemory.c @ 700 HTMemoryCall_add @ 701 HTMemoryCall_delete @ 702 HTMemoryCall_deleteAll @ 703 HTMemory_malloc @ 704 HTMemory_calloc @ 705 HTMemory_realloc @ 706 HTMemory_free @ 707 HTMemory_setExit @ 708 HTMemory_exit @ 709 HTMemory_outofmem @ 710 ;HTString.c @ 800 strcasecomp @ 801 strncasecomp @ 802 HTStrCaseStr @ 803 tailcomp @ 804 tailcasecomp @ 805 HTSACopy @ 806 HTSACat @ 807 StrAllocMCopy @ 808 StrAllocMCat @ 809 HTStrMatch @ 810 HTStrCaseMatch @ 811 HTStrip @ 812 ;HTTrace.c @ 900 HTTrace_setCallback @ 901 HTTrace_getCallback @ 902 HTTrace @ 903 HTTraceData_setCallback @ 904 HTTraceData_getCallback @ 905 HTTraceData @ 906 HTPrint_setCallback @ 907 HTPrint_getCallback @ 908 HTPrint @ 909 HTDebugBreak @ 910 ;HTUU.c @ 1000 HTUU_encode @ 1001 HTUU_decode @ 1002 �����������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwwais.def��������������������������������������������������������������0100644�0000764�0000144�00000000145�07405520456�017635� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTWAIS.c @ 100 HTLoadWAIS @ 101 HTLoadWAIS @ 102 ;HTWSRC.c @ 200 HTWSRCConvert @ 201 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwzip.def���������������������������������������������������������������0100644�0000764�0000144�00000000156�07405520456�017476� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTZip.c @ 100 HTZLib_setCompressionLevel @ 101 HTZLib_compressionLevel @ 102 HTZLib_inflate @ 103 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwsql.def���������������������������������������������������������������0100644�0000764�0000144�00000001032�07405520456�017465� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTSQL.c @ 100 HTSQL_printf @ 101 HTSQL_new @ 102 HTSQL_delete @ 103 HTSQL_connect @ 104 HTSQL_getMysql @ 105 HTSQL_close @ 106 HTSQL_version @ 107 HTSQL_selectDB @ 108 HTSQL_query @ 109 HTSQL_getLastInsertId @ 110 HTSQL_GetAffectedRows @ 111 HTSQL_storeResult @ 112 HTSQL_freeResult @ 113 ;HTSQLLog.c @ 200 HTSQLLog_open @ 201 HTSQLLog_close @ 202 HTSQLLog_clearTables @ 203 HTSQLLog_makeRelativeTo @ 204 HTSQLLog_accessCount @ 205 HTSQLLog_addURI @ 206 HTSQLLog_addLinkRelationship @ 207 HTSQLLog_addEntry @ 208 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwxml.def���������������������������������������������������������������0100644�0000764�0000144�00000002625�07405520456�017477� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTRDF.c @ 100 HTTriple_new @ 101 HTTriple_delete @ 102 HTTriple_print @ 103 HTTriple_subject @ 104 HTTriple_predicate @ 105 HTTriple_object @ 106 HTElement_new @ 107 HTElement_new2 @ 108 HTElement_addData @ 109 HTElement_delete @ 110 HTElement_addChild @ 111 HTElement_addAttribute @ 112 HTElement_removeAttribute @ 113 HTElement_getAttribute @ 114 HTElement_getAttribute2 @ 115 HTElement_addTarget @ 116 HTElement_target @ 117 HTElement_instanceOfData @ 118 HTRDF_new @ 119 HTRDF_delete @ 120 HTRDF_setSource @ 121 HTRDF_resolve @ 122 HTRDF_isRDF @ 123 HTRDF_isRDFroot @ 124 HTRDF_isDescription @ 125 HTRDF_isListItem @ 126 HTRDF_isSequence @ 127 HTRDF_isAlternative @ 128 HTRDF_isBag @ 129 HTRDF_isContainer @ 130 HTRDF_isTypedPredicate @ 131 HTRDF_processTypedNode @ 132 HTRDF_processRDF @ 133 HTRDF_processDescription @ 134 HTRDF_processXML @ 135 HTRDF_root @ 136 HTRDF_namespace @ 137 HTRDF_parseLiteral @ 138 HTRDF_parseResource @ 139 HTRDF_resolveLater @ 140 HTRDF_registerID @ 141 HTRDF_registerResource @ 142 HTRDF_lookforNode @ 143 HTRDF_getResource @ 144 HTRDF_newReificationID @ 145 HTRDF_addTriple @ 146 HTRDF_createBags @ 147 HTRDF_setOutputStream @ 148 HTRDF_registerNewTripleCallback @ 149 HTRDF_registerNewParserCallback @ 150 HTRDFParser_new @ 151 HTRDFToTriples @ 152 HTRDF_parseFile @ 153 HTRDF_parseBuffer @ 154 ;HTXML.c @ 200 HTXML_new @ 201 HTXMLCallback_registerNew @ 202 �����������������������������������������������������������������������������������������������������������libwww/Library/src/windows/wwwinit.def��������������������������������������������������������������0100644�0000764�0000144�00000001147�07405520457�017641� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;HTInit.c @ 100 HTConverterInit @ 101 HTPresenterInit @ 102 HTFormatInit @ 103 HTTransferEncoderInit @ 104 HTContentEncoderInit @ 105 HTBeforeInit @ 106 HTAfterInit @ 107 HTAAInit @ 108 HTNetInit @ 109 HTAlertInit @ 110 HTTransportInit @ 111 HTProtocolInit @ 112 HTProtocolPreemptiveInit @ 113 HTIconInit @ 114 HTMIMEInit @ 115 ;HTProfil.c @ 200 HTProfile_delete @ 201 HTProfile_newClient @ 202 HTProfile_newHTMLClient @ 203 HTProfile_newPreemptiveClient @ 204 HTProfile_newNoCacheClient @ 205 HTProfile_newHTMLNoCacheClient @ 206 HTProfile_newRobot @ 207 HTProfile_newPreemptiveRobot @ 208 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/windows/Makefile.in��������������������������������������������������������������0100644�0000764�0000144�00000016067�07405520525�017521� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ SUFFIXES = .files .def # the following rules allow to select the windows files that must be included # in the distribution, but that aren't processes or generated by the Unix # Make command SRC := $(subst $(srcdir)/,,$(wildcard $(srcdir)/*.c)) MAK := $(subst $(srcdir)/,,$(wildcard $(srcdir)*.mak)) FLS := $(subst $(srcdir)/,,$(wildcard $(srcdir)/*.files)) BUILT_SOURCES = wwwapp.def wwwapp.def wwwcache.def wwwcore.def wwwdir.def wwwmux.def wwwfile.def wwwftp.def wwwgophe.def wwwstream.def wwwhtml.def wwwhttp.def wwwmime.def wwwnews.def wwwtrans.def wwwtelnt.def wwwutils.def wwwwais.def wwwzip.def wwwsql.def wwwxml.def wwwinit.def EXTRA_DIST = $(BUILT_SOURCES) config.h wwwdll.def $(SRC) $(FLS) $(MAK) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .def .files $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/src/windows/Makefile $(mkinstalldirs) $(distdir)/$(srcdir) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean def-clean: test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) def: $(BUILT_SOURCES) .files.def: perl $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/Makefile�������������������������������������������������������������������������0100644�0000764�0000144�00000073041�07405520571�015416� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = subdirs = @subdirs@ LDFLAGS = -version-info "1:0:1" lib_LTLIBRARIES = libwwwutils.la libwwwcore.la libwwwtrans.la libwwwstream.la libwwwcache.la libwwwdir.la libwwwfile.la libwwwftp.la libwwwgopher.la libwwwmime.la libwwwhttp.la libwwwnews.la libwwwtelnet.la libwwwhtml.la libwwwapp.la libwwwinit.la libwwwmux.la libwwwxml.la EXTRA_LTLIBRARIES = libwwwxml.la libwwwzip.la libwwwwais.la libwwwsql.la SUBDIRS = SSL windows vms # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .txt icondir = ${prefix}/share/w3c-libwww CPPFLAGS := $(CPPFLAGS) -DW3C_ICONS=\"$(icondir)\" libwwwutils_la_SOURCES = WWWUtil.h HTArray.h HTArray.c HTAssoc.h HTAssoc.c HTAtom.h HTAtom.c HTBTree.h HTBTree.c HTChunk.h HTChunk.c HTHash.h HTHash.c HTList.h HTList.c HTMemory.h HTMemory.c HTString.h HTString.c HTTrace.c HTUtils.h HTUU.h HTUU.c libwwwcore_la_SOURCES = WWWCore.h HTAlert.h HTAlert.c HTAncMan.h HTAnchor.c HTAnchor.h HTChannl.h HTChannl.c HTDNS.h HTDNS.c HTError.h HTError.c HTEscape.h HTEscape.c HTEvent.h HTEvent.c HTFormat.c HTFormat.h HTHost.h HTHstMan.h HTHost.c HTInet.h HTInet.c HTLib.h HTLib.c HTLink.h HTLink.c HTMemLog.h HTMemLog.c HTMethod.h HTMethod.c HTNet.h HTNetMan.h HTNet.c HTNoFree.h HTNoFree.c HTParse.h HTParse.c HTProt.h HTProt.c HTReq.h HTReqMan.h HTReqMan.c HTResponse.h HTResMan.h HTResponse.c HTStream.h HTIOStream.h HTStream.c HTStruct.h HTTCP.h HTTCP.c HTTimer.h HTTimer.c HTTrans.h HTTrans.c HTUTree.h HTUTree.c HTUser.h HTUser.c HTWWWStr.h HTWWWStr.c libwwwtrans_la_SOURCES = WWWTrans.h HTANSI.h HTANSI.c HTBufWrt.h HTBufWrt.c HTLocal.h HTLocal.c HTReader.h HTReader.c HTSocket.h HTSocket.c HTWriter.h HTWriter.c libwwwstream_la_SOURCES = WWWStream.h HTConLen.h HTConLen.c HTEPtoCl.h HTEPtoCl.c HTFSave.h HTFSave.c HTFWrite.h HTFWrite.c HTGuess.h HTGuess.c HTMerge.h HTMerge.c HTNetTxt.h HTNetTxt.c HTSChunk.h HTSChunk.c HTTee.h HTTee.c HTXParse.h HTXParse.c libwwwcache_la_SOURCES = WWWCache.h HTCache.h HTCache.c libwwwfile_la_SOURCES = WWWFile.h HTBInit.h HTBInit.c HTBind.h HTBind.c HTFile.h HTFile.c HTMulti.h HTMulti.c libwwwftp_la_SOURCES = WWWFTP.h HTFTP.h HTFTP.c HTFTPDir.h HTFTPDir.c libwwwgopher_la_SOURCES = WWWGophe.h HTGopher.h HTGopher.c libwwwmime_la_SOURCES = WWWMIME.h HTBound.h HTBound.c HTHeader.h HTHeader.c HTMIME.h HTMIME.c HTMIMPrs.h HTMIMPrs.c HTMIMERq.h HTMIMERq.c HTMIMImp.h HTMIMImp.c HTMulpar.h libwwwhttp_la_SOURCES = WWWHTTP.h HTTPUtil.h HTAABrow.h HTAABrow.c HTAAUtil.h HTAAUtil.c HTCookie.h HTCookie.c HTDigest.h HTDigest.c HTTChunk.h HTTChunk.c HTTP.h HTTP.c HTTPGen.h HTTPGen.c HTTPReq.h HTTPReq.c HTTPRes.h HTTPRes.c HTTPServ.h HTTPServ.c HTPEP.h HTPEP.c libwwwhttp_la_DEPENDENCIES = ../../modules/md5/libmd5.la libwwwnews_la_SOURCES = WWWNews.h HTNDir.h HTNDir.c HTNews.h HTNews.c HTNewsLs.h HTNewsLs.c HTNewsRq.h HTNewsRq.c libwwwtelnet_la_SOURCES = WWWTelnt.h HTTelnet.h HTTelnet.c libwwwwais_la_SOURCES = WWWWAIS.h HTWAIS.h HTWAIS.c HTWSRC.h HTWSRC.c libwwwwais_la_LDFLAGS = -rpath $(libdir) libwwwhtml_la_SOURCES = WWWHTML.h HTMLPDTD.h HTMLPDTD.c SGML.h SGML.c HTMLGen.h HTMLGen.c HTTeXGen.h HTTeXGen.c HTPlain.h HTPlain.c HTML.h HTML.c HText.h HTextImp.h HText.c HTHInit.h HTHInit.c HTStyle.h HTStyle.c libwwwdir_la_SOURCES = WWWDir.h HTIcons.h HTIcons.c HTDescpt.h HTDescpt.c HTDir.h HTDir.c libwwwapp_la_SOURCES = WWWApp.h HTAccess.h HTAccess.c HTDialog.h HTDialog.c HTEvtLst.h HTEvtLst.c HTFilter.h HTFilter.c HTHist.h HTHist.c HTInit.h HTInit.c HTHome.h HTHome.c HTLog.h HTLog.c HTProxy.h HTProxy.c HTRules.h HTRules.c libwwwinit_la_SOURCES = WWWInit.h HTProfil.h HTProfil.c libwwwmux_la_SOURCES = WWWMux.h HTDemux.h HTDemux.c HTMuxCh.h HTMuxCh.c HTMuxHeader.h HTMuxTx.h HTMuxTx.c libwwwxml_la_SOURCES = WWWXML.h HTRDF.h HTRDF.c HTXML.h HTXML.c libwwwxml_la_DEPENDENCIES = ../../modules/expat/xmltok/libxmltok.la ../../modules/expat/xmlparse/libxmlparse.la libwwwxml_la_LDFLAGS = -rpath $(libdir) libwwwzip_la_SOURCES = WWWZip.h HTZip.h HTZip.h HTZip.c libwwwzip_la_LDFLAGS = -rpath $(libdir) libwwwsql_la_SOURCES = WWWSQL.h HTSQL.h HTSQL.c HTSQLLog.h HTSQLLog.h HTSQLLog.c libwwwsql_la_LDFLAGS = -rpath $(libdir) INCLUDES = -I/usr/local/include -I${top_srcdir}/modules/md5 -I${top_srcdir}/modules/expat/xmlparse BUILT_SOURCES = wwwsys.h HTAABrow.h HTAAUtil.h HTANSI.h HTAccess.h HTAlert.h HTAncMan.h HTAnchor.h HTArray.h HTAssoc.h HTAtom.h HTBInit.h HTBTree.h HTBind.h HTBind.h HTBound.h HTBufWrt.h HTCache.h HTChannl.h HTChunk.h HTConLen.h HTCookie.h HTDNS.h HTDemux.h HTDescpt.h HTDialog.h HTDigest.h HTDir.h HTEPtoCl.h HTError.h HTEscape.h HTEvent.h HTEvtLst.h HTFSave.h HTFTP.h HTFTPDir.h HTFWrite.h HTFile.h HTFilter.h HTFormat.h HTGopher.h HTGuess.h HTHInit.h HTHash.h HTHeader.h HTHist.h HTHome.h HTHost.h HTHstMan.h HTIOStream.h HTIcons.h HTInet.h HTInit.h HTLib.h HTLink.h HTList.h HTLocal.h HTLog.h HTMIME.h HTMIMERq.h HTMIMImp.h HTMIMPrs.h HTML.h HTMLGen.h HTMLPDTD.h HTMemLog.h HTMemory.h HTMerge.h HTMethod.h HTMulpar.h HTMulti.h HTMuxCh.h HTMuxHeader.h HTMuxTx.h HTNDir.h HTNet.h HTNetMan.h HTNetTxt.h HTNews.h HTNewsLs.h HTNewsRq.h HTNoFree.h HTPEP.h HTParse.h HTPlain.h HTProfil.h HTProt.h HTProxy.h HTRDF.h HTReader.h HTReq.h HTReqMan.h HTResMan.h HTResponse.h HTRules.h HTSChunk.h HTSQL.h HTSQLLog.h HTSocket.h HTStream.h HTString.h HTStruct.h HTStyle.h HTTCP.h HTTChunk.h HTTP.h HTTPGen.h HTTPReq.h HTTPRes.h HTTPServ.h HTTPUtil.h HTTeXGen.h HTTee.h HTTelnet.h HTTimer.h HTTrans.h HTUTree.h HTUU.h HTUser.h HTUtils.h HTWAIS.h HTWSRC.h HTWWWStr.h HTWriter.h HTXML.h HTXParse.h HTZip.h HText.h HTextImp.h SGML.h WWWApp.h WWWCache.h WWWCore.h WWWDir.h WWWFTP.h WWWFile.h WWWGophe.h WWWHTML.h WWWHTTP.h WWWInit.h WWWLib.h WWWMIME.h WWWMux.h WWWNews.h WWWSQL.h WWWStream.h WWWTelnt.h WWWTrans.h WWWUtil.h WWWWAIS.h WWWXML.h WWWZip.h pkginclude_HEADERS = $(BUILT_SOURCES) DOCS := $(wildcard *.html) EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../.. LIBS = -ldl libwwwxml_la_LIBADD = libwwwxml_la_OBJECTS = HTRDF.lo HTXML.lo libwwwzip_la_LIBADD = libwwwzip_la_OBJECTS = HTZip.lo libwwwwais_la_LIBADD = libwwwwais_la_OBJECTS = HTWAIS.lo HTWSRC.lo libwwwsql_la_LIBADD = libwwwsql_la_OBJECTS = HTSQL.lo HTSQLLog.lo libwwwutils_la_LDFLAGS = libwwwutils_la_LIBADD = libwwwutils_la_OBJECTS = HTArray.lo HTAssoc.lo HTAtom.lo HTBTree.lo \ HTChunk.lo HTHash.lo HTList.lo HTMemory.lo HTString.lo HTTrace.lo \ HTUU.lo libwwwcore_la_LDFLAGS = libwwwcore_la_LIBADD = libwwwcore_la_OBJECTS = HTAlert.lo HTAnchor.lo HTChannl.lo HTDNS.lo \ HTError.lo HTEscape.lo HTEvent.lo HTFormat.lo HTHost.lo HTInet.lo \ HTLib.lo HTLink.lo HTMemLog.lo HTMethod.lo HTNet.lo HTNoFree.lo \ HTParse.lo HTProt.lo HTReqMan.lo HTResponse.lo HTStream.lo HTTCP.lo \ HTTimer.lo HTTrans.lo HTUTree.lo HTUser.lo HTWWWStr.lo libwwwtrans_la_LDFLAGS = libwwwtrans_la_LIBADD = libwwwtrans_la_OBJECTS = HTANSI.lo HTBufWrt.lo HTLocal.lo HTReader.lo \ HTSocket.lo HTWriter.lo libwwwstream_la_LDFLAGS = libwwwstream_la_LIBADD = libwwwstream_la_OBJECTS = HTConLen.lo HTEPtoCl.lo HTFSave.lo \ HTFWrite.lo HTGuess.lo HTMerge.lo HTNetTxt.lo HTSChunk.lo HTTee.lo \ HTXParse.lo libwwwcache_la_LDFLAGS = libwwwcache_la_LIBADD = libwwwcache_la_OBJECTS = HTCache.lo libwwwdir_la_LDFLAGS = libwwwdir_la_LIBADD = libwwwdir_la_OBJECTS = HTIcons.lo HTDescpt.lo HTDir.lo libwwwfile_la_LDFLAGS = libwwwfile_la_LIBADD = libwwwfile_la_OBJECTS = HTBInit.lo HTBind.lo HTFile.lo HTMulti.lo libwwwftp_la_LDFLAGS = libwwwftp_la_LIBADD = libwwwftp_la_OBJECTS = HTFTP.lo HTFTPDir.lo libwwwgopher_la_LDFLAGS = libwwwgopher_la_LIBADD = libwwwgopher_la_OBJECTS = HTGopher.lo libwwwmime_la_LDFLAGS = libwwwmime_la_LIBADD = libwwwmime_la_OBJECTS = HTBound.lo HTHeader.lo HTMIME.lo HTMIMPrs.lo \ HTMIMERq.lo HTMIMImp.lo libwwwhttp_la_LDFLAGS = libwwwhttp_la_LIBADD = libwwwhttp_la_OBJECTS = HTAABrow.lo HTAAUtil.lo HTCookie.lo HTDigest.lo \ HTTChunk.lo HTTP.lo HTTPGen.lo HTTPReq.lo HTTPRes.lo HTTPServ.lo \ HTPEP.lo libwwwnews_la_LDFLAGS = libwwwnews_la_LIBADD = libwwwnews_la_OBJECTS = HTNDir.lo HTNews.lo HTNewsLs.lo HTNewsRq.lo libwwwtelnet_la_LDFLAGS = libwwwtelnet_la_LIBADD = libwwwtelnet_la_OBJECTS = HTTelnet.lo libwwwhtml_la_LDFLAGS = libwwwhtml_la_LIBADD = libwwwhtml_la_OBJECTS = HTMLPDTD.lo SGML.lo HTMLGen.lo HTTeXGen.lo \ HTPlain.lo HTML.lo HText.lo HTHInit.lo HTStyle.lo libwwwapp_la_LDFLAGS = libwwwapp_la_LIBADD = libwwwapp_la_OBJECTS = HTAccess.lo HTDialog.lo HTEvtLst.lo HTFilter.lo \ HTHist.lo HTInit.lo HTHome.lo HTLog.lo HTProxy.lo HTRules.lo libwwwinit_la_LDFLAGS = libwwwinit_la_LIBADD = libwwwinit_la_OBJECTS = HTProfil.lo libwwwmux_la_LDFLAGS = libwwwmux_la_LIBADD = libwwwmux_la_OBJECTS = HTDemux.lo HTMuxCh.lo HTMuxTx.lo CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(pkginclude_HEADERS) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/HTAABrow.P .deps/HTAAUtil.P .deps/HTANSI.P \ .deps/HTAccess.P .deps/HTAlert.P .deps/HTAnchor.P .deps/HTArray.P \ .deps/HTAssoc.P .deps/HTAtom.P .deps/HTBInit.P .deps/HTBTree.P \ .deps/HTBind.P .deps/HTBound.P .deps/HTBufWrt.P .deps/HTCache.P \ .deps/HTChannl.P .deps/HTChunk.P .deps/HTConLen.P .deps/HTCookie.P \ .deps/HTDNS.P .deps/HTDemux.P .deps/HTDescpt.P .deps/HTDialog.P \ .deps/HTDigest.P .deps/HTDir.P .deps/HTEPtoCl.P .deps/HTError.P \ .deps/HTEscape.P .deps/HTEvent.P .deps/HTEvtLst.P .deps/HTFSave.P \ .deps/HTFTP.P .deps/HTFTPDir.P .deps/HTFWrite.P .deps/HTFile.P \ .deps/HTFilter.P .deps/HTFormat.P .deps/HTGopher.P .deps/HTGuess.P \ .deps/HTHInit.P .deps/HTHash.P .deps/HTHeader.P .deps/HTHist.P \ .deps/HTHome.P .deps/HTHost.P .deps/HTIcons.P .deps/HTInet.P \ .deps/HTInit.P .deps/HTLib.P .deps/HTLink.P .deps/HTList.P \ .deps/HTLocal.P .deps/HTLog.P .deps/HTMIME.P .deps/HTMIMERq.P \ .deps/HTMIMImp.P .deps/HTMIMPrs.P .deps/HTML.P .deps/HTMLGen.P \ .deps/HTMLPDTD.P .deps/HTMemLog.P .deps/HTMemory.P .deps/HTMerge.P \ .deps/HTMethod.P .deps/HTMulti.P .deps/HTMuxCh.P .deps/HTMuxTx.P \ .deps/HTNDir.P .deps/HTNet.P .deps/HTNetTxt.P .deps/HTNews.P \ .deps/HTNewsLs.P .deps/HTNewsRq.P .deps/HTNoFree.P .deps/HTPEP.P \ .deps/HTParse.P .deps/HTPlain.P .deps/HTProfil.P .deps/HTProt.P \ .deps/HTProxy.P .deps/HTRDF.P .deps/HTReader.P .deps/HTReqMan.P \ .deps/HTResponse.P .deps/HTRules.P .deps/HTSChunk.P .deps/HTSQL.P \ .deps/HTSQLLog.P .deps/HTSocket.P .deps/HTStream.P .deps/HTString.P \ .deps/HTStyle.P .deps/HTTCP.P .deps/HTTChunk.P .deps/HTTP.P \ .deps/HTTPGen.P .deps/HTTPReq.P .deps/HTTPRes.P .deps/HTTPServ.P \ .deps/HTTeXGen.P .deps/HTTee.P .deps/HTTelnet.P .deps/HTTimer.P \ .deps/HTTrace.P .deps/HTTrans.P .deps/HTUTree.P .deps/HTUU.P \ .deps/HTUser.P .deps/HTWAIS.P .deps/HTWSRC.P .deps/HTWWWStr.P \ .deps/HTWriter.P .deps/HTXML.P .deps/HTXParse.P .deps/HTZip.P \ .deps/HText.P .deps/SGML.P SOURCES = $(libwwwxml_la_SOURCES) $(libwwwzip_la_SOURCES) $(libwwwwais_la_SOURCES) $(libwwwsql_la_SOURCES) $(libwwwutils_la_SOURCES) $(libwwwcore_la_SOURCES) $(libwwwtrans_la_SOURCES) $(libwwwstream_la_SOURCES) $(libwwwcache_la_SOURCES) $(libwwwdir_la_SOURCES) $(libwwwfile_la_SOURCES) $(libwwwftp_la_SOURCES) $(libwwwgopher_la_SOURCES) $(libwwwmime_la_SOURCES) $(libwwwhttp_la_SOURCES) $(libwwwnews_la_SOURCES) $(libwwwtelnet_la_SOURCES) $(libwwwhtml_la_SOURCES) $(libwwwapp_la_SOURCES) $(libwwwinit_la_SOURCES) $(libwwwmux_la_SOURCES) OBJECTS = $(libwwwxml_la_OBJECTS) $(libwwwzip_la_OBJECTS) $(libwwwwais_la_OBJECTS) $(libwwwsql_la_OBJECTS) $(libwwwutils_la_OBJECTS) $(libwwwcore_la_OBJECTS) $(libwwwtrans_la_OBJECTS) $(libwwwstream_la_OBJECTS) $(libwwwcache_la_OBJECTS) $(libwwwdir_la_OBJECTS) $(libwwwfile_la_OBJECTS) $(libwwwftp_la_OBJECTS) $(libwwwgopher_la_OBJECTS) $(libwwwmime_la_OBJECTS) $(libwwwhttp_la_OBJECTS) $(libwwwnews_la_OBJECTS) $(libwwwtelnet_la_OBJECTS) $(libwwwhtml_la_OBJECTS) $(libwwwapp_la_OBJECTS) $(libwwwinit_la_OBJECTS) $(libwwwmux_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s .txt $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libwwwxml.la: $(libwwwxml_la_OBJECTS) $(libwwwxml_la_DEPENDENCIES) $(LINK) $(libwwwxml_la_LDFLAGS) $(libwwwxml_la_OBJECTS) $(libwwwxml_la_LIBADD) $(LIBS) libwwwzip.la: $(libwwwzip_la_OBJECTS) $(libwwwzip_la_DEPENDENCIES) $(LINK) $(libwwwzip_la_LDFLAGS) $(libwwwzip_la_OBJECTS) $(libwwwzip_la_LIBADD) $(LIBS) libwwwwais.la: $(libwwwwais_la_OBJECTS) $(libwwwwais_la_DEPENDENCIES) $(LINK) $(libwwwwais_la_LDFLAGS) $(libwwwwais_la_OBJECTS) $(libwwwwais_la_LIBADD) $(LIBS) libwwwsql.la: $(libwwwsql_la_OBJECTS) $(libwwwsql_la_DEPENDENCIES) $(LINK) $(libwwwsql_la_LDFLAGS) $(libwwwsql_la_OBJECTS) $(libwwwsql_la_LIBADD) $(LIBS) libwwwutils.la: $(libwwwutils_la_OBJECTS) $(libwwwutils_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwutils_la_LDFLAGS) $(libwwwutils_la_OBJECTS) $(libwwwutils_la_LIBADD) $(LIBS) libwwwcore.la: $(libwwwcore_la_OBJECTS) $(libwwwcore_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwcore_la_LDFLAGS) $(libwwwcore_la_OBJECTS) $(libwwwcore_la_LIBADD) $(LIBS) libwwwtrans.la: $(libwwwtrans_la_OBJECTS) $(libwwwtrans_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwtrans_la_LDFLAGS) $(libwwwtrans_la_OBJECTS) $(libwwwtrans_la_LIBADD) $(LIBS) libwwwstream.la: $(libwwwstream_la_OBJECTS) $(libwwwstream_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwstream_la_LDFLAGS) $(libwwwstream_la_OBJECTS) $(libwwwstream_la_LIBADD) $(LIBS) libwwwcache.la: $(libwwwcache_la_OBJECTS) $(libwwwcache_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwcache_la_LDFLAGS) $(libwwwcache_la_OBJECTS) $(libwwwcache_la_LIBADD) $(LIBS) libwwwdir.la: $(libwwwdir_la_OBJECTS) $(libwwwdir_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwdir_la_LDFLAGS) $(libwwwdir_la_OBJECTS) $(libwwwdir_la_LIBADD) $(LIBS) libwwwfile.la: $(libwwwfile_la_OBJECTS) $(libwwwfile_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwfile_la_LDFLAGS) $(libwwwfile_la_OBJECTS) $(libwwwfile_la_LIBADD) $(LIBS) libwwwftp.la: $(libwwwftp_la_OBJECTS) $(libwwwftp_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwftp_la_LDFLAGS) $(libwwwftp_la_OBJECTS) $(libwwwftp_la_LIBADD) $(LIBS) libwwwgopher.la: $(libwwwgopher_la_OBJECTS) $(libwwwgopher_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwgopher_la_LDFLAGS) $(libwwwgopher_la_OBJECTS) $(libwwwgopher_la_LIBADD) $(LIBS) libwwwmime.la: $(libwwwmime_la_OBJECTS) $(libwwwmime_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwmime_la_LDFLAGS) $(libwwwmime_la_OBJECTS) $(libwwwmime_la_LIBADD) $(LIBS) libwwwhttp.la: $(libwwwhttp_la_OBJECTS) $(libwwwhttp_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwhttp_la_LDFLAGS) $(libwwwhttp_la_OBJECTS) $(libwwwhttp_la_LIBADD) $(LIBS) libwwwnews.la: $(libwwwnews_la_OBJECTS) $(libwwwnews_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwnews_la_LDFLAGS) $(libwwwnews_la_OBJECTS) $(libwwwnews_la_LIBADD) $(LIBS) libwwwtelnet.la: $(libwwwtelnet_la_OBJECTS) $(libwwwtelnet_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwtelnet_la_LDFLAGS) $(libwwwtelnet_la_OBJECTS) $(libwwwtelnet_la_LIBADD) $(LIBS) libwwwhtml.la: $(libwwwhtml_la_OBJECTS) $(libwwwhtml_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwhtml_la_LDFLAGS) $(libwwwhtml_la_OBJECTS) $(libwwwhtml_la_LIBADD) $(LIBS) libwwwapp.la: $(libwwwapp_la_OBJECTS) $(libwwwapp_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwapp_la_LDFLAGS) $(libwwwapp_la_OBJECTS) $(libwwwapp_la_LIBADD) $(LIBS) libwwwinit.la: $(libwwwinit_la_OBJECTS) $(libwwwinit_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwinit_la_LDFLAGS) $(libwwwinit_la_OBJECTS) $(libwwwinit_la_LIBADD) $(LIBS) libwwwmux.la: $(libwwwmux_la_OBJECTS) $(libwwwmux_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwmux_la_LDFLAGS) $(libwwwmux_la_OBJECTS) $(libwwwmux_la_LIBADD) $(LIBS) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgincludedir) @list='$(pkginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p"; \ $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) list='$(pkginclude_HEADERS)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkgincludedir)/$$p; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-libLTLIBRARIES install-exec: install-exec-recursive install-data-am: install-pkgincludeHEADERS install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS uninstall: uninstall-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(pkgincludedir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool uninstall-pkgincludeHEADERS \ install-pkgincludeHEADERS install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Generating the .h files using the " @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/wwwsys.h�������������������������������������������������������������������������0100644�0000764�0000144�00000067710�07405520455�015521� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww System Dependencies ! System Dependencies ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This file makes up for the differencies in the systems and platforms supported by libwww. On Unix, it is a question of using autoconf to figure out what environment we are in. This is done by running the configure script which creates a wwwconf.h file. This configuration include file contains a large set of macro definitions telling what features we have and don't have. On platforms not supported by autoconf (Windows, Mac, VMS etc.) you will find the information normally contained in the wwwconf.h file directly included below. The second part of this file uses all the information that we either have from the wwwconf.h file or directly coded and actually does the includes etc. o Unix o Microsoft Windows Win32 API o Macintosh o Vax VMS This module is a part of the W3C Sample Code Library. ( Authors ) TBL Tim Berners-Lee, W3 project, CERN, <timbl@w3.org> EvA Eelco van Asperen <evas@cs.few.eur.nl> MA Marc Andreesen NCSA MD Mark Donszelmann <duns@vxcern.cern.ch> AT Aleksandar Totic <atotic@ncsa.uiuc.edu> SCW Susan C. Weber <sweber@kyle.eitech.com> HF Henrik Frystyk, <frystyk@w3.org> CLB Charlie Brooks, <cbrooks@osf.org> ( History: ) 22 Feb 91 Written (TBL) as part of the WWW library. 16 Jan 92 PC code from (EvA) 22 Apr 93 Merged diffs bits from xmosaic release 29 Apr 93 Windows/NT code from (SCW) 29 Sep 93 Mar 96 CLB - changed SLEEP() macro for Windows/NT MSC compiler added BOOLEAN_DEFINED macro to avoid duplicate definitions in HUtils.h changed netread() macros to support reading from stdin,etc. as well as sockets. (Required for linemode browser to work). Henrik Changed to support autoconf for Unix */ #ifndef SYSDEP_H #define SYSDEP_H /* ! Platform Specific Stuff ! . Unix . We rely on autoconf to do the dirty job. If you have any changhes then please add them to the configure script */ #ifdef HAVE_CONFIG_H #include <wwwconf.h> #endif /* . Microsoft Windows Win32 API . Help provided by Eric Prud'hommeaux, Susan C. Weber <sweber@kyle.eitech.com>, Paul Hounslow <P.M.Hounslow@reading.ac.uk>, and a lot of other PC people. */ #if defined(_WINDOWS) || defined(_CONSOLE) #define WWW_MSWINDOWS #endif #if defined(_WINDOWS) && !defined (_CONSOLE) #define WWW_WIN_WINDOW #endif #if defined(_CONSOLE) #define WWW_WIN_CONSOLE #endif #ifdef WWW_MSWINDOWS #include <windows.h> #include <io.h> #include <process.h> #include <winsock.h> #include "windows/config.h" #define NETREAD(s,b,l) recv((s),(b),(l),0) #define NETWRITE(s,b,l) send((s),(b),(l),0) #define NETCLOSE(s) closesocket(s) #define IOCTL(s,c,a) ioctlsocket(s,c, (long *) a) #define MKDIR(a,b) mkdir((a)) #define REMOVE(a) remove((a)) #define DEFAULT_SUFFIXES "." #ifndef _CONSOLE #define NO_STDIO #endif #define SOCKET SOCKET /* WinSocks socket descriptor */ #define INVSOC INVALID_SOCKET /* WinSocks invalid socket */ #define DESIRED_WINSOCK_VERSION 0x0101 /* we'd like winsock ver 1.1... */ #define MINIMUM_WINSOCK_VERSION 0x0101 /* ...but we'll take ver 1.1 :) */ /* ( File and Directory Access ) These next defintions are because the UNIX stuff is not supplied with BC4 (Paul Hounslow <P.M.Hounslow@reading.ac.uk>) */ #define NO_UNIX_IO #define _IFMT 0170000 /* type of file */ #define _IFDIR 0040000 /* directory */ #define _IFCHR 0020000 /* character special */ #define _IFBLK 0060000 /* block special */ #define _IFREG 0100000 /* regular */ #define _IFLNK 0120000 /* symbolic link */ #define _IFSOCK 0140000 /* socket */ #define _IFIFO 0010000 /* fifo */ #define S_ISUID 0004000 /* set user id on execution */ #define S_ISGID 0002000 /* set group id on execution */ #define S_ISVTX 0001000 /* save swapped text even after use */ #ifdef S_IREAD #undef S_IREAD #define S_IREAD 0000400 /* read permission, owner */ #endif #ifdef S_IWRITE #undef S_IWRITE #define S_IWRITE 0000200 /* write permission, owner */ #endif #ifdef S_IEXEC #undef S_IEXEC #define S_IEXEC 0000100 /* execute/search permission, owner */ #endif #define S_ENFMT 0002000 /* enforcement-mode locking */ #ifdef S_IFMT #undef S_IFMT #define S_IFMT _IFMT #endif #ifdef S_IDIR #undef S_IDIR #define S_IFDIR _IFDIR #endif #ifdef S_IFCHR #undef S_IFCHR #define S_IFCHR _IFCHR #endif #ifdef S_IBLK #undef S_IBLK #define S_IFBLK _IFBLK #endif #ifdef S_IREG #undef S_IREG #define S_IFREG _IFREG #endif #define S_IFLNK _IFLNK #ifdef S_IFIFO #undef S_IFIFO #define S_IFIFO _IFIFO #endif #define S_IRWXU 0000700 /* rwx, owner */ #define S_IRUSR 0000400 /* read permission, owner */ #define S_IWUSR 0000200 /* write permission, owner */ #define S_IXUSR 0000100 /* execute/search permission, owner */ #define S_IRWXG 0000070 /* rwx, group */ #define S_IRGRP 0000040 /* read permission, group */ #define S_IWGRP 0000020 /* write permission, grougroup */ #define S_IXGRP 0000010 /* execute/search permission, group */ #define S_IRWXO 0000007 /* rwx, other */ #define S_IROTH 0000004 /* read permission, other */ #define S_IWOTH 0000002 /* write permission, other */ #define S_IXOTH 0000001 /* execute/search permission, other */ #define S_ISREG(m) (((m)&_IFMT) == _IFREG) #define DIR_SEPARATOR #define DIR_SEPARATOR_CHAR '\\' #define DIR_SEPARATOR_STR "\\" /* ( Errno and Return Codes ) Winsock has its own errno codes and it returns them through WSAGetLastError(). However, it does also support BSD error codes, so we make a compromise. WSA definitions moved from _WIN32 ifdef by EGP */ #define socerrno WSAGetLastError() #define ERRNO_DONE /* Return code for socket functions. We can't use -1 as return value */ #define EWOULDBLOCK WSAEWOULDBLOCK #define EINPROGRESS WSAEINPROGRESS #define ECONNREFUSED WSAECONNREFUSED #define ETIMEDOUT WSAETIMEDOUT #define ENETUNREACH WSAENETUNREACH #define EHOSTUNREACH WSAEHOSTUNREACH #define EHOSTDOWN WSAEHOSTDOWN #define EISCONN WSAEISCONN #define EINVAL WSAEINVAL #define ECONNRESET WSAECONNRESET #define ECONNABORTED WSAECONNABORTED #define ESHUTDOWN WSAESHUTDOWN /* Some compilers do only define WIN32 and NOT _WINDOWS */ #define NO_GROUPS #ifdef _WIN32 #define MKDIR(a,b) mkdir((a)) /* CLB NT has mkdir, but only one arg */ #define SLEEP(n) Sleep((n)*1000) #else #define MKDIR(a,b) _mkdir((a)) /* CLB NT has mkdir, but only one arg */ #endif /* WIN32 */ #endif /* WWW_MSWINDOWS */ /* . Macintosh . We have two environments on Macintosh: Codeworrior and MPV. ( Metrowerks Codewarrior 6 ) Metrowerks Codewarrior is one development environment on the Mac. We are using GUSI (1.5.9) by Matthias Neeracher <neeri@iis.ee.ethz.ch> for our socket lib. You can find more information about the GUSI Library from Switzerland. Compiles on PPC. Should compile on 68K. August 31, 2025 by Steven T. Roussey <sroussey@eng.uci.edu> (STR). and jeff@macalot.com (Jeff Dripps). Thanks a bunch! */ #ifdef __MWERKS__ #include <gusi.h> #include <dirent.h> #include <errno.h> #include <sys/errno.h> #include <sioux.h> #define INCLUDES_DONE #define TCP_INCLUDES_DONE #define GUSI /* Identifies changes made for GUSI */ #undef HAVE_GETDOMAINNAME /* STR */ #undef HAVE_GETPASS #undef HAVE_GETWD #define HAVE_GETCWD #define USE_DIRENT #define NO_GROUPS #define GOT_READ_DIR #undef HAVE_TIMEZONE /* STR */ #define NO_GMTOFF #define HAVE_STRERROR #define HAVE_GETHOSTNAME #define d_ino d_fileno /* backward compatibility */ #define SLEEP(n) GUSIDefaultSpin( SP_SLEEP, n/60) #define MKDIR(a,b) mkdir(a) #define HAVE_STRFTIME // added JTD:5/1/96 #define HAVE_MKTIME // added JTD:5/1/96 #define HAVE_STRCHR // added JTD:5/1/96 #define STDC_HEADERS // added JTD:5/1/96 #define HAVE_MEMCPY // added JTD:5/1/96 #define TTY_IS_SELECTABLE // added JTD:5/1/96 #define HAVE_READDIR // added JTD:5/1/96 #define HAVE_DIRENT_INO // added JTD:5/1/96 #define HAVE_DIRENT_H // added JTD:5/1/96 #endif /* ( MPW ) MPW is one development environment on the Mac. This entry was created by Aleksandar Totic (atotic@ncsa.uiuc.edu) this file is compatible with sockets package released by NCSA. One major conflict is that this library redefines write/read/etc as macros. In some of HTML code these macros get executed when they should not be. Such files should define NO_SOCKET_DEFS on top. This is a temporary hack. */ #ifdef applec /* MPW */ #undef HAVE_SYSTEM #define DEBUG /* Can't put it on the CC command line */ #define NO_UNIX_IO /* getuid() missing */ #undef HAVE_GETPID /* getpid() does not exist */ #define NO_GETWD /* getwd() does not exist */ #define NETCLOSE s_close /* Routine to close a TCP-IP socket */ #define NETREAD s_read /* Routine to read from a TCP-IP socket */ #define NETWRITE s_write /* Routine to write to a TCP-IP socket */ #define _ANSI_SOURCE #define GUI #define LINEFEED 10 #define ANON_FTP_HOSTNAME #ifndef NO_SOCKET_DEFS #include <MacSockDefs.h> #endif /* NO_SOCKET_DEFS */ #include <socket.ext.h> #include <string.h> #endif /* applec MPW */ /* . VAX/VMS . Under VMS, there are many versions of TCP-IP. Define one if you do not use Digital's UCX product: UCX DEC's "Ultrix connection" (default) WIN_TCP From Wollongong, now GEC software. MULTINET From SRI, now from TGV Inv. DECNET Cern's TCP socket emulation over DECnet The last three do not interfere with the unix i/o library, and so they need special calls to read, write and close sockets. In these cases the socket number is a VMS channel number, so we make the @@@ HORRIBLE @@@ assumption that a channel number will be greater than 10 but a unix file descriptor less than 10. It works. */ #ifdef VMS #include "HTVMSUtils.h" #define CACHE_FILE_PREFIX "SYS$LOGIN:Z_" #define DEFAULT_SUFFIXES "._" #define HAVE_CUSERID #ifdef WIN_TCP #define NETREAD(s,b,l) ((s)>10 ? netread((s),(b),(l)) : read((s),(b),(l))) #define NETWRITE(s,b,l) ((s)>10 ? netwrite((s),(b),(l)) : write((s),(b),(l))) #define NETCLOSE(s) ((s)>10 ? netclose(s) : close(s)) #endif /* WIN_TCP */ #ifdef MULTINET #undef NETCLOSE #undef NETREAD #undef NETWRITE #define NETREAD(s,b,l) ((s)>10 ? socket_read((s),(b),(l)) : read((s),(b),(l))) #define NETWRITE(s,b,l) ((s)>10 ? socket_write((s),(b),(l)) : \ write((s),(b),(l))) #define NETCLOSE(s) ((s)>10 ? socket_close(s) : close(s)) #define IOCTL(s,c,a) socket_ioctl(s,c,a); #endif /* MULTINET */ #ifdef DECNET #define DNP_OBJ 80 /* This one doesn't look busy, but we must check */ /* That one was for decnet */ #undef SELECT /* not supported */ #define NETREAD(s,b,l) ((s)>10 ? recv((s),(b),(l),0) : read((s),(b),(l))) #define NETWRITE(s,b,l) ((s)>10 ? send((s),(b),(l),0) : write((s),(b),(l))) #define NETCLOSE(s) ((s)>10 ? socket_close(s) : close(s)) #undef HAVE_GETHOSTNAME /* Decnet doesn't have a name server */ #endif /* Decnet */ #undef HAVE_GETDOMAINNAME /* Certainly this works for UCX and Multinet; not tried for Wollongong */ #ifdef MULTINET #include <time.h> #ifdef __TIME_T #define __TYPES #define __TYPES_LOADED #endif /* __TIME_T */ #include <multinet_root:[multinet.include.sys]types.h> #include <multinet_root:[multinet.include]errno.h> #ifdef __TYPES #define __TIME_T #endif /* __TYPE */ #ifdef __TIME_LOADED #define __TIME #endif /* __TIME_LOADED */ #include <multinet_root:[multinet.include.sys]time.h> #else /* not MULTINET */ #include <types.h> #include <errno.h> #include <time.h> #endif /* not MULTINET */ #include string #ifndef STDIO_H #include <stdio> #define STDIO_H #endif #include file #ifndef DECNET /* Why is it used at all ? Types conflict with "types.h> */ #include unixio #endif #define INCLUDES_DONE #ifdef MULTINET /* Include from standard Multinet directories */ #include <multinet_root:[multinet.include.sys]socket.h> #ifdef __TIME_LOADED /* defined by sys$library:time.h */ #define __TIME /* to avoid double definitions in next file */ #endif #include <multinet_root:[multinet.include.netinet]in.h> #include <multinet_root:[multinet.include.arpa]inet.h> #include <multinet_root:[multinet.include]netdb.h> #include <multinet_root:[multinet.include.sys]ioctl.h> #else /* not multinet */ #ifdef DECNET #include <types.h> /* for socket.h */ #include <socket.h> #include <dn> #include <dnetdb> #else /* UCX or WIN */ #ifdef CADDR_T #define __CADDR_T #endif /* problem with xlib.h inclusion */ #include <socket.h> #include <in.h> #include <inet.h> #include <netdb.h> #include <ucx$inetdef.h> #endif /* not DECNET */ #endif /* of Multinet or other TCP includes */ #define TCP_INCLUDES_DONE #ifdef UCX #define SIMPLE_TELNET #endif /* On VMS directory browsing is available through a separate copy of dirent.c. The definition of R_OK seem to be missing from the system include files... */ #define USE_DIRENT #define GOT_READ_DIR #include <dirent.h> #define DIR struct dirent #define R_OK 4 /* On VMS machines, the linker needs to be told to put global data sections into a data segment using these storage classes. (MarkDonszelmann) */ #ifdef VAXC #define GLOBALDEF globaldef #define GLOBALREF globalref #endif /* VAXC */ #endif /* vms */ /* On non-VMS machines, the GLOBALDEF and GLOBALREF storage types default to normal C storage types. */ #ifndef GLOBALREF #define GLOBALDEF #define GLOBALREF extern #endif /* On non-VMS machines STAT should be stat...On VMS machines STAT is a function that converts directories and devices so that you can stat them. */ #ifdef VMS typedef unsigned long mode_t; #define HT_STAT HTStat #define HT_LSTAT HTStat #else #define HT_STAT stat #define HT_LSTAT lstat #endif /* non VMS */ /* ( Dynamic Memory ) Replace memory allocation and free C RTL functions with VAXC$xxx_OPT alternatives for VAXC (but not DECC) on VMS. This makes a big performance difference. (Foteos Macrides). Also have a look at the Dynamic Memory Module for how to handle malloc and calloc. */ #ifdef VMS #include <stdio.h> #include <stdlib.h> #include <unixlib.h> #include <ctype.h> #if defined(VAXC) && !defined(__DECC) #define malloc VAXC$MALLOC_OPT #define calloc VAXC$CALLOC_OPT #define free VAXC$FREE_OPT #define cfree VAXC$CFREE_OPT #define realloc VAXC$REALLOC_OPT #endif /* VAXC but not DECC */ #define unlink remove #define gmtime localtime #include <stat.h> #define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) #define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) #define putenv HTVMS_putenv #endif /* VMS */ /* ( Strftime and other time stuff ) */ #ifdef VMS #ifndef DECC #undef HAVE_STRFTIME #endif #undef HAVE_MKTIME #undef HAVE_TIMEGM #define NO_GMTOFF #undef HAVE_TIMEZONE #endif /* ( Definition of Errno ) */ #ifdef VMS #ifndef __DECC extern int uerrno; /* Deposit of error info (as per errno.h) */ extern volatile noshare int socket_errno; /* socket VMS error info (used for translation of vmserrno) */ extern volatile noshare int vmserrno; /* Deposit of VMS error info */ extern volatile noshare int errno; /* noshare to avoid PSECT conflict */ #define ERRNO_DONE #endif /* not DECC */ #endif /* VMS */ /* ! Platform Independent Stuff ! Here we use all the knowledge we got above... . Include Files . This file includes all system header files that are needed, iff they exist. Their existance is discovered by configure. */ /* stdio.h */ #ifdef HAVE_STDIO_H #include <stdio.h> #endif /* types.h */ #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> #else #ifdef HAVE_TYPES_H #include <types.h> #endif #endif /* unistd.h */ #ifdef HAVE_UNISTD_H #include <unistd.h> #else #ifdef HAVE_SYS_UNISTD_H #include <sys/unistd.h> #endif #endif /* fcntl.h */ #ifdef HAVE_FCNTL_H #include <fcntl.h> #else #ifdef HAVE_SYS_FCNTL_H #include <sys/fcntl.h> #endif #endif /* sys/machine.h */ #ifdef HAVE_SYS_MACHINE_H #include <sys/machine.h> #endif /* limits.h */ #ifdef HAVE_SYS_LIMITS_H #include <sys/limits.h> #else #ifdef HAVE_LIMITS_H #include <limits.h> #endif #endif /* stat.h */ #ifdef HAVE_SYS_STAT_H #include <sys/stat.h> #else #ifdef HAVE_STAT_H #include <stat.h> #endif #endif /* Patch for problems in glibc6 */ #if defined(__GLIBC__) #undef S_IFMT #undef S_IFDIR #define S_IFMT __S_IFMT #define S_IFDIR __S_IFDIR #endif /* in.h */ #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #else #ifdef HAVE_IN_H #include <in.h> #endif #endif /* tcp.h */ #ifdef HAVE_NETINET_TCP_H #include <netinet/tcp.h> #else #ifdef HAVE_TCP_H #include <tcp.h> #endif #endif /* file.h */ #ifdef HAVE_SYS_FILE_H #include <sys/file.h> #endif /* systeminfo.h */ #ifdef HAVE_SYS_SYSTEMINFO_H #include <sys/systeminfo.h> #endif /* ioctl.h */ #ifdef HAVE_SYS_IOCTL_H #include <sys/ioctl.h> #endif /* termios.h */ #ifdef HAVE_TERMIOS_H #include <termios.h> #endif /* time.h */ #ifdef TIME_WITH_SYS_TIME #include <sys/time.h> #include <time.h> #else #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #else #ifdef HAVE_TIME_H #include <time.h> #endif #endif #endif /* string{,s}.h */ #ifdef HAVE_STRING_H #include <string.h> #else #ifdef HAVE_STRINGS_H #include <strings.h> #endif #endif /* syslog.h */ #ifdef HAVE_SYSLOG_H #include <syslog.h> #else #ifdef HAVE_SYS_SYSLOG_H #include <sys/socket.h> #endif #endif /* socket.h */ #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #else #ifdef HAVE_SOCKET_H #include <socket.h> #endif #endif /* socket.ext.h */ #ifdef HAVE_SOCKET_EXT_H #include <socket.ext.h> #endif /* appkit.h */ #ifdef HAVE_APPKIT_APPKIT_H #include <appkit/appkit.h> #else #ifdef HAVE_APPKIT_H #include <appkit.h> #endif #endif /* dn.h */ #ifdef HAVE_DN_H #include <dn.h> #endif /* ipc.h */ #ifdef HAVE_SYS_IPC_H #include <sys/ipc.h> #endif /* errno.h */ #ifdef HAVE_ERRNO_H #include <errno.h> #else #ifdef HAVE_SYS_ERRNO_H #include <sys/errno.h> #else #ifdef HAVE_NET_ERRNO_H #include <net/errno.h> #endif #endif #endif /* pwd.h */ #ifdef HAVE_PWD_H #include <pwd.h> #endif /* grp.h */ #ifdef HAVE_GRP_H #include <grp.h> #endif /* inet.h */ #ifdef HAVE_ARPA_INET_H #include <arpa/inet.h> #else #ifdef HAVE_INET_H #include <inet.h> #endif #endif /* netdb.h */ #ifdef HAVE_NETDB_H #include <netdb.h> #endif /* manifest.h */ #ifdef HAVE_MANIFEST_H #include <manifest.h> #endif /* bsdtypes.h */ #ifdef HAVE_BSDTYPES_H #include <bsdtypes.h> #endif /* stdefs.h */ #ifdef HAVE_STDEFS_H #include <stdefs.h> #endif /* bsdtime.h */ #ifdef HAVE_BSDTIME_H #include <bsdtime.h> #endif /* select.h */ #ifdef HAVE_SYS_SELECT_H #include <sys/select.h> #else #ifdef HAVE_SELECT_H #include <select.h> #endif #endif /* dnetdb.h */ #ifdef HAVE_DNETDB_H #include <dnetdb.h> #endif /* ucx$inetdef.h */ #ifdef HAVE_UCX_INETDEF_H #include <ucx$inetdef.h> #endif /* libc.h */ #ifdef HAVE_LIBC_H #include <libc.h> #endif /* stdlib.h */ #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif /* malloc.h */ #ifdef HAVE_MALLOC_H #include <malloc.h> #endif /* memory.h */ #ifdef HAVE_MEMORY_H #include <memory.h> #endif /* unixlib.h */ #ifdef HAVE_UNIXLIB_H #include <unixlib.h> #endif /* direct.h */ #ifdef HAVE_DIRECT_H #include <direct.h> #endif /* ctype.h */ #ifdef HAVE_CTYPE_H #include <ctype.h> #endif /* curses.h */ #ifdef CURSES #ifdef HAVE_CURSESX_H #include <cursesX.h> #else #ifdef HAVE_CURSES_H #include <curses.h> #endif #endif #endif /* resource.h (some wait.h's require it) */ #ifdef HAVE_SYS_RESOURCE_H #include <sys/resource.h> #else #ifdef HAVE_RESOURCE_H #include <resource.h> #endif #endif /* dirent.h / ndir.h / dir.h */ #ifdef HAVE_DIRENT_H #include <dirent.h> #define NAMLEN(dirent) strlen((dirent)->d_name) #else #define dirent direct #define NAMLEN(dirent) (dirent)->d_namlen #ifdef HAVE_SYS_NDIR_H #include <sys/ndir.h> #endif #ifdef HAVE_SYS_DIR_H #include <sys/dir.h> #endif #ifdef HAVE_DIR_H #include <dir.h> #endif #ifdef HAVE_NDIR_H #include <ndir.h> #endif #endif #if !defined(HAVE_STRCHR) #define strchr index #define strrchr rindex #endif #if !defined(HAVE_MEMCPY) #define memcpy(d, s, n) bcopy((s), (d), (n)) #define memmove(d, s, n) bcopy((s), (d), (n)) #endif /* Definition of var args */ #if defined(STDC_HEADERS) || defined(__STDC__) #include <stdarg.h> #else #ifndef WWW_MSWINDOWS #include <varargs.h> #endif #endif /* wait.h */ #ifdef HAVE_SYS_WAIT_H #include <sys/wait.h> #endif #ifndef WEXITSTATUS #define WEXITSTATUS(stat_val) (((unsigned)(stat_val) >> 8) & 255) #endif #ifndef WIFEXITED #define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif #ifdef HT_POSIX_REGEX #ifdef HAVE_RXPOSIX_H #include <rxposix.h> #else #ifdef HAVE_REGEX_H #include <regex.h> #endif #endif #define W3C_DEFAULT_REGEX_FLAGS (REG_EXTENDED | REG_NEWLINE) #endif /* . Booleans . */ #ifndef BOOLEAN typedef char BOOLEAN; /* Logical value */ #endif #ifndef CURSES #ifndef TRUE #define TRUE (BOOLEAN)1 #define FALSE (BOOLEAN)0 #endif #endif /* CURSES */ #if !defined(BOOL) && !defined(WWW_MSWINDOWS) #define BOOL BOOLEAN #endif #ifndef YES #define YES (BOOL)1 #define NO (BOOL)0 #endif /* . Integers . If we don't have these (for some mysterious reason) then define them. This should (is?) be handled by the configure script already. */ #ifndef u_short #define u_short unsigned short #endif #ifndef u_long #define u_long unsigned long #endif /* . NULL Definition . */ #ifndef NULL #define NULL ((void *)0) #endif /* . Sleep System Call . Some systems use milliseconds instead of seconds */ #ifndef SLEEP #define SLEEP(n) sleep(n) #endif /* . SOCKS . SOCKS is a package for allowing socket connections to tunnel through firewalls in carefully controlled situations. This package can be optionally compiled with SOCKS support; these definitions replace the normal socket calls with the SOCKS ones. Initial modification of the library is credited to Ian Dunkin <imd1707@ggr.co.uk>. */ #ifdef SOCKS #ifdef SOCKS4 #define connect Rconnect #define getsockname Rgetsockname #define getpeername Rgetpeername #define bind Rbind #define accept Raccept #define listen Rlisten #define select Rselect #define recvfrom Rrecvfrom #define sendto Rsendto #define recv Rrecv #define send Rsend #define read Rread #define write Rwrite #define rresvport Rrresvport #define shutdown Rshutdown #define listen Rlisten #define close Rclose #define dup Rdup #define dup2 Rdup2 #define fclose Rfclose #define gethostbyname Rgethostbyname #else #ifdef SOCKS5 #define connect SOCKSconnect #define getsockname SOCKSgetsockname #define getpeername SOCKSgetpeername #define bind SOCKSbind #define accept SOCKSaccept #define listen SOCKSlisten #define select SOCKSselect #define recvfrom SOCKSrecvfrom #define sendto SOCKSsendto #define recv SOCKSrecv #define send SOCKSsend #define read SOCKSread #define write SOCKSwrite #define rresvport SOCKSrresvport #define shutdown SOCKSshutdown #define listen SOCKSlisten #define close SOCKSclose #define dup SOCKSdup #define dup2 SOCKSdup2 #define fclose SOCKSfclose #define gethostbyname SOCKSgethostbyname #endif /* SOCKS5 */ #endif /* SOCKS4 */ #endif /* SOCKS */ /* . Network Family . */ #ifdef DECNET typedef struct sockaddr_dn SockA; /* See netdnet/dn.h or custom vms.h */ #else /* Internet */ typedef struct sockaddr_in SockA; /* See netinet/in.h */ #endif /* . Default Values of Network Access . */ #ifndef NETCLOSE #define NETCLOSE close /* Routine to close a TCP-IP socket */ #endif #ifndef NETREAD #define NETREAD read /* Routine to read from a TCP-IP socket */ #endif #ifndef NETWRITE #define NETWRITE write /* Routine to write to a TCP-IP socket */ #endif #ifndef NETWRITEV #define NETWRITEV writev #endif /* . Definition of errno and Return Code . This is the definition of error codes and the corresponding string constants. If we do not have the strerror function then try the error list table. */ #ifndef ERRNO_DONE extern int errno; #define socerrno errno #endif #ifndef HAVE_STRERROR /* Otherwise use the table */ extern char *sys_errlist[]; extern int sys_nerr; #endif /* . Definition of Socket Desrciptores . This is necessary in order to support Windows NT... */ #ifndef SOCKET #define SOCKET int /* Unix like socket descriptor */ #define INVSOC (-1) /* Unix invalid socket */ #endif #ifdef __svr4__ #define HT_BACKLOG 32 /* Number of pending connect requests (TCP) */ #else #define HT_BACKLOG 5 /* Number of pending connect requests (TCP) */ #endif /* __svr4__ */ /* . Additional Network variables for SOCKET, file access bits . */ #if 0 #ifndef _WINSOCKAPI_ #define FD_READ 0x01 #define FD_WRITE 0x02 #define FD_OOB 0x04 #define FD_ACCEPT 0x08 #define FD_CONNECT 0x10 #define FD_CLOSE 0x20 #endif /* _WINSOCKAPI_ */ #endif /* . Rough estimate of max path length . */ #ifndef HT_MAX_PATH #ifdef MAXPATHLEN #define HT_MAX_PATH MAXPATHLEN #else #ifdef PATH_MAX #define HT_MAX_PATH PATH_MAX #else #define HT_MAX_PATH 1024 /* Any better ideas? */ #endif #endif #endif /* HT_MAX_PATH */ #ifndef HT_MAX_TMPNAM #ifdef L_tmpnam #define HT_MAX_TMPNAM L_tmpnam #else #define HT_MAX_TMPNAM 128 #endif #endif /* . Hash Table Sizes . The size of the hash tables used by the various libwww classes like the HTNet class, the HTHost class etc. is a speed-size compromize. Here you can set the sizes depending on whether you have a lot of memory or not. The values must be prime numbers, of course. */ #ifdef LIBWWW_SMALL #define HT_XL_HASH_SIZE 101 #define HT_L_HASH_SIZE 67 #define HT_M_HASH_SIZE 31 #define HT_S_HASH_SIZE 5 #else #ifdef LIBWWW_LARGE #define HT_XL_HASH_SIZE 1499 #define HT_L_HASH_SIZE 599 #define HT_M_HASH_SIZE 101 #define HT_S_HASH_SIZE 67 #else #ifdef LIBWWW_EXTRA_LARGE #define HT_XL_HASH_SIZE 9973 #define HT_L_HASH_SIZE 1499 #define HT_M_HASH_SIZE 599 #define HT_S_HASH_SIZE 101 #else #define HT_XL_HASH_SIZE 599 #define HT_L_HASH_SIZE 101 #define HT_M_HASH_SIZE 67 #define HT_S_HASH_SIZE 11 #endif #endif #endif /* . Definition of NGROUPS . */ #ifdef GETGROUPS_T #ifndef NGROUPS #ifdef NGROUPS_MAX #define NGROUPS NGROUPS_MAX #else #define NGROUPS 20 /* Any better ideas? */ #endif #endif #endif /* . Definition of Max Domain Name Length . */ #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 64 /* Any better ideas? */ #endif /* . File/Directory Management . */ #ifndef MKDIR #define MKDIR(a,b) mkdir((a), (b)) #endif #ifndef RMDIR #define RMDIR(a) rmdir((a)) #endif #ifndef REMOVE #define REMOVE(a) unlink((a)) #endif #ifndef DEFAULT_SUFFIXES #define DEFAULT_SUFFIXES ".,_" #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR_CHAR '/' #define DIR_SEPARATOR_STR "/" #endif #ifndef F_OK #define R_OK 4 #define W_OK 2 #define X_OK 1 #define F_OK 0 #endif /* . Macros for manipulating masks for select() . */ #ifndef FD_SET #define FD_SET(fd, m) (*(unsigned*)(m) |= (1 << (fd))) #endif #ifndef FD_CLR #define FD_CLR(fd, m) (*(unsigned*)(m) &= ~(1 << (fd))) #endif #ifndef FD_ZERO #define FD_ZERO(m) (*(unsigned*)(m)) = 0 #endif #ifndef FD_ISSET #define FD_ISSET(fd, m) (*(unsigned*)(m) & (1 << (fd))) #endif /* . Macros for converting characters . */ #ifndef TOASCII #define TOASCII(c) (c) #define FROMASCII(c) (c) #endif /* . Cache file prefix . This is something onto which we tag something meaningful to make a cache file name. used in HTWSRC.c at least. If it is not defined at all, caching is turned off. */ #ifndef CACHE_FILE_PREFIX #ifdef unix #define CACHE_FILE_PREFIX "/usr/wsrc/" #endif #endif /* . Thread Safe Setup . These are some constants setting the size of buffers used by thread safe versions of some system calls. */ #ifdef HT_REENTRANT #ifdef _POSIX_LOGIN_NAME_MAX #define HT_LOGNAME_MAX _POSIX_LOGIN_NAME_MAX #else #ifdef LOGNAME_MAX #define HT_LOGNAME_MAX (LOGNAME_MAX+1) #else #define HT_LOGNAME_MAX 64 #endif #endif #define HOSTENT_MAX 1024 #define CTIME_MAX 26 #endif /* HT_REENTRANT */ /* . Types . We define some types here so we son't have to worry about it later */ typedef unsigned long ms_t; /* */ #endif /* @(#) $Id: wwwsys.html,v 2.125 2025/07/11 09:18:38 kahan Exp $ */ ��������������������������������������������������������libwww/Library/src/HTAABrow.h�����������������������������������������������������������������������0100644�0000764�0000144�00000002644�07405520455�015500� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Client Side Authentication Challenges and Credentials ! Client Side Authentication Challenges and Credentials ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Contains code for parsing challenges and creating credentials for basic and digest authentication schemes. See also the HTAAUtil module for how to handle other authentication schemes. You don't have to use this code at all if you better like to use your own functions for parsing challenges and generating credentials. All functions are implemented as callback functions to the Authentication Manager This module is implemented by HTAABrow.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTAABROW_H #define HTAABROW_H #include "HTUTree.h" #include "HTNet.h" /* . Basic Authentication . This is the set of callback functions for handling basic authentication. */ extern HTNetBefore HTBasic_generate; extern HTNetAfter HTBasic_parse; extern HTUTree_gc HTBasic_delete; /* . Digest Authentication . This is the set of callback functions for handling digest authentication. */ extern HTNetBefore HTDigest_generate; extern HTNetAfter HTDigest_parse; extern HTNetAfter HTDigest_updateInfo; extern HTUTree_gc HTDigest_delete; /* */ #endif /* NOT HTAABROW_H */ /* @(#) $Id: HTAABrow.html,v 2.31 2025/01/27 08:52:02 kahan Exp $ */ ��������������������������������������������������������������������������������������������libwww/Library/src/HTAAUtil.h�����������������������������������������������������������������������0100644�0000764�0000144�00000015471�07405520455�015506� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Access Authentication ! Access Authentication Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Authentication Manager is a registry for Authentication Schemes that follow the generic syntax defined by the HTTP WWW-authenticate and Authorization headers. Currently, the only scheme defined is Basic Authentication, but Digest Authentication will soon follow. All Authentication Schemes are registered at run-time in form of an Authentication Module. An Authentication Module consists of the following: scheme The name which is used to identify the scheme. This is equivalent to the <scheme> part of the WWW-authenticate HTTP header, for example "basic" BEFORE Filter When a new request is issued, the Authentication Manager looks in the URL tree to see if we have any access authentication information for this particular request. The search is based on the realm (if known) in which the request belongs and the URL itself. If a record is found then the Authentication Manager calls the Authentication Module in order to generate the credentials. AFTER Filter After a request has terminated and the result was lack of credentials, the request should normally be repeated with a new set of credentials. The AFTER filter is responsible for extracting the challenge from the HTTP response and store it in the URL tree, so that we next time we request the same URL we know that it is protected and we can ask the user for the appropriate credentials (user name and password, for example). garbage collection The authentication information is stored in a URL Tree but as it doesn't know the format of the scheme specific parts, you must register a garbage collector (gc). The gc is called when node is deleted in the tree. Note: The Authentication Manager itself consists of BEFORE and an AFTER filter - just like the Authentication Modules. This means that any Authentication Module also can be registered directly as a BEFORE and AFTER filter by the Net Manager. The reason for having the two layer model is that the Authentication Manager maintains a single URL tree for storing access information for all Authentication Schemes. An Authentication Module has three resources, it can use when creating challenges or credentials: o Handle the credentials which is a part of the Request obejct. The credentials are often generated by asking the user for a user name ansd a password. o Handle the challenges which is a part of the Request object. The MIME parser will normally find the credentials as we parse the HTTP response. o Add information to the URL Tree This module is implemented by HTAAUtil.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTAAUTIL_H #define HTAAUTIL_H #include "HTReq.h" #include "HTNet.h" #include "HTUTree.h" /* . Authentication Scheme Registration . An Authentication Scheme is registered by registering an Authentication Module to in the Authentication Manager. ( Add an Authentication Module ) You can add an authentication scheme by using the following method. Each of the callback function must have the type as defined below. */ typedef struct _HTAAModule HTAAModule; extern HTAAModule * HTAA_newModule (const char * scheme, HTNetBefore * before, HTNetAfter * after, HTNetAfter * update, HTUTree_gc * gc); /* ( Find an Authentication Module ) */ extern HTAAModule * HTAA_findModule (const char * scheme); /* ( Delete an Authentication Module ) */ extern BOOL HTAA_deleteModule (const char * scheme); /* ( Delete ALL Authentication modules ) */ extern BOOL HTAA_deleteAllModules (void); /* . Handling the URL Tree . The authentication information is stored as URL Trees. &nbsp;The root of a URL Tree is identified by a hostname and a port number. Each URL Tree contains a set of templates and realms which can be used to predict what information to use in a hierarchical tree. The URL trees are automatically collected after some time so the application does not have to worry about freeing the trees. When a node in a tree is freed, the gc registered as part of the Authentication Module is called. Server applications can have different authentication setups for each hostname and port number, they control. For example, a server with interfaces "www.foo.com" and "internal.foo.com" can have different protection setups for each interface. ( Add new or Update a Note in the UTree ) Add an access authentication information node to the database or update an existing one. If the entry is already found then it is replaced with the new one. The template must follow normal URI syntax but can include a wildcard Return YES if added (or replaced), else NO */ extern void * HTAA_updateNode (BOOL proxy, char const * scheme, const char * realm, const char * url, void * context); /* ( Delete a Node from the UTree ) This is called if an already entered node has to be deleted, for example if it is not used (the user cancelled entering a username and password), or for some reason has expired. */ extern BOOL HTAA_deleteNode (BOOL proxy_access, char const * scheme, const char * realm, const char * url); /* . The Authentication Manager Filters . As mentioned, the Access Authentication Manager is itself a set of filters that can be registered by the Net manager. ( Before Filter ) Make a lookup in the URL tree to find any context for this node, If no context is found then we assume that we don't know anything about this URL and hence we don't call any BEFORE filters at all. */ HTNetBefore HTAA_beforeFilter; /* ( After Filter ) Call the AFTER filter that knows how to handle this scheme. */ HTNetAfter HTAA_afterFilter; /* ( Update Filter ) Call the UPDATE filter that knows how to handle this scheme. */ HTNetAfter HTAA_updateFilter; /* ( Proxy Authentication Filter ) Just as for normal authentication we have a filter for proxy authentication. The proxy authentication uses exactly the same code as normal authentication but it stores the information in a separate proxy authentication URL tree. That way, we don't get any clashes between a server acting as a proxy and a normal server at the same time on the same port. The difference is that we only have a ingoing filter (a before filter) as the out going filter is identical to the normal authentication filter. The filter requires to be called after a proxy filter as we otherwise don't know whether we are using a proxy or not. */ HTNetBefore HTAA_proxyBeforeFilter; /* */ #endif /* NOT HTAAUTIL_H */ /* @(#) $Id: HTAAUtil.html,v 2.38 2025/01/27 08:52:02 kahan Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTANSI.h�������������������������������������������������������������������������0100644�0000764�0000144�00000002212�07405520455�015106� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library ANSI Read and Write Streams ! ANSI Read and Write Streams ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The ANSI Reader Stream and the ANSI Writer Stream are output streams&nbsp;which knows how to read and write to an ANSI C type FILE descriptor. Both streams are part of the Transport interface and may be registered as part of a Transport Object. In the default initialization interface, you can find the HTTransportInit() function which sets up the streams for handling local file access on some platforms. This module is implemented by HTANSI.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTANSI_H #define HTANSI_H #include "HTIOStream.h" /* . Input Buffering . In order to optimize reading a channel, we bind a buffer to each channel object. The size of this buffer is a compromise between speed and memory. */ #define FILE_BUFFER_SIZE 65536 /* . Read Stream . */ extern HTInput_new HTANSIReader_new; /* . Write Stream . */ extern HTOutput_new HTANSIWriter_new; /* */ #endif /* End of declaration module */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTAccess.h�����������������������������������������������������������������������0100644�0000764�0000144�00000066045�07405520455�015573� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Accessing URIs ! Accessing URIs ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is the application interface module to the Request class. It contains a lot of methods for loading URIs and also for uploading URIs using PUT or POST, for example. You can use the Request class directly but this module makes it easier to use by providing a lot of small request functions using the Request class in different ways. It contains help functions for accessing documents and for uploading documents to a remote server. This module contains functions for handling all HTTP/1.1 methods: GET Requests o Various GET requests including specialized functions like loading a rule file, etc. o Search requests based on the GET method o Formdata requests based on the GET method PUT Requests o Save a document from memory ASIS using PUT o Save a structured document from memory using PUT o Save any URI (FTP, HTTP, local disk) using PUT POST Requests o Post Formdata to a remote HTTP server o Post a document from memory ASIS to a remote HTTP server HEAD, DELETE, OPTIONS, and TRACE requests o Get metainformation about a document using HEAD requests o Delete documents based on the DELETE method o Get information about the features supoprted by a resource using OPTIONS o Trace a request using the TRACE method Furthermore, it contains a few access methods for handling incoming requests - in orther words acting as a server. Although libwww is primarily for clients, it is in fact symmetric in that it can handle both client requests and server requests. This module is implemented by HTAccess.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTACCESS_H #define HTACCESS_H #include "HTReq.h" #include "HTAnchor.h" /* . Load a Document (Method = GET) . URIs can be accesses using a character string, for example "http://www.w3.org" or it can be accessed by using the libwww representation of a URI called an Anchor object. Note that we call all objects accessible through URIs for documents - this is a notion we have inherited from the hypertext world. ( Load a Document from Absolute URI ) Request a document referencd by an absolute URI. The output from the request is passed to the Stream Pipe Manager that figures out where to pump the data. This can for example be to the display or to a local file depending on the set of converters registered by the application. */ extern BOOL HTLoadAbsolute (const char * url, HTRequest * request); /* ( Load a Document from Relative URI ) Request a document referenced by a relative URI. The relative URI is made absolute by resolving it relative to the address of the 'base' anchor. */ extern BOOL HTLoadRelative (const char * relative, HTParentAnchor * base, HTRequest * request); /* ( Load a Document into Memory ) Request a document referred to by the URI and load it into a HTChunk object. A chunk object is a dynamic string so in the end you will have a single memory buffer containing the document. The chunk must be freed by the caller. */ extern HTChunk * HTLoadToChunk (const char * url, HTRequest * request); /* ( Load a Document and Save as a Local File ) This function loads a URI and saves the contents in the specifed file. The file should not &nbsp;be open, as the load function both opens and closes the file. If the file already exists then it asks the user whether the file should be overwritten or not. the contents is saved ASIS - that is - we do not touch the contents of the file! */ extern BOOL HTLoadToFile (const char * url, HTRequest * request, const char * filename); /* ( Load a Document and put the Contents into a Stream ) Request a document referenced by an absolute URI and sending the data down a stream. This stream can be anny stream you like, for eample one from the Stream Interface. */ extern BOOL HTLoadToStream (const char * url, HTStream * output, HTRequest * request); /* ( Load a Document using an Anchor ) Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the appropriate method in the Anchor class. */ extern BOOL HTLoadAnchor (HTAnchor * anchor, HTRequest * request); /* ( Load a Document into Memory using an Anchor ) This is the same as HTLoadToChunk but instead of passing a URI string you pass an HTAnchor object. Internally, all URIs are represented as anchors which contains all the information we have about the resource. The chunk must be freed by the caller. */ extern HTChunk * HTLoadAnchorToChunk (HTAnchor * anchor, HTRequest * request); /* ( Recursively Request a Document using Anchors ) Same as HTLoadAnchor() but the information in the error stack in the request object is kept, so that any error messages in one. This function is almost identical to HTLoadAnchor, but it doesn't clear the error stack so that the information in there is kept. */ extern BOOL HTLoadAnchorRecursive (HTAnchor * anchor, HTRequest * request); /* . Load Special Documents . We also have a set of functions for loading special files like rules files which also are referenced by a URI but which do have to be treated specially. ( Load a Rule File ) Rule files can be loaded just like any other URI but you can also just use these functions which do all the work for you: they load a rule find with the URI specified and add the set of rules to the existing set. They come in two flavours - one that asks the user whether it is OK to add the rules and one that does it automatically without asking. As the app would have to call this method explicitly, it may have other ways of protecting the user. Both functions use preemptive requests so that everything else stops in the meantime. */ extern BOOL HTLoadRules (const char * url); extern BOOL HTLoadRulesAutomatically (const char * url); /* . Search a Document (Method = GET) . The search methods all use GET as the method in the HTTP request. The functions take the keywords and encode them according to RFC 1866 (Hypertext Markup language). That is, the query part is separated from the rest of the URI by a "?". The keywords are passed to the function as a Chunk Object and each keyword must be separated by a space ' '. This will then be converted into a '+' before added to the URI. ( Search a Document from Absolute URI ) */ extern BOOL HTSearchAbsolute (HTChunk * keywords, const char * base, HTRequest * request); /* ( Search a Document from Relative URI ) Search a document referenced by a relative URI. The relative URI is made absolute by resolving it relative to the address of the 'base' anchor. */ extern BOOL HTSearchRelative (HTChunk * keywords, const char * relative, HTParentAnchor * base, HTRequest * request); /* ( Search a Document using an Anchor ) */ extern BOOL HTSearchAnchor (HTChunk * keywords, HTAnchor * anchor, HTRequest * request); /* ( Search a Document using an Anchor Using a String ) This works exactly as the HTSearchAnchor() function but takes a C string instead of a chunk object. */ extern BOOL HTSearchString (const char * keywords, HTAnchor * anchor, HTRequest * request); /* . Submit Forms Using GET Method . Formdata can be sent to an HTTP server in two ways - it can either use a GET method or it can use a POST method. The difference is whether the request "has side effects" or not. For example, if you are ordering a pizza then the (hopefully positive) sideeffect is that you actually get one delivered. However, if you are issuing search data - for example to Alta Vista, then there is no sideeffect. In the former example you would use the GET form and in the latter you would use the POST form. ( Submit Form from Absolute URI using GET ) Submit formdata using GET to the address indicated as the "base" which must be an absolute URI. The list of form data must be given as an association list where the name is the field name and the value is the value of the field. */ extern BOOL HTGetFormAbsolute (HTAssocList * formdata, const char * base, HTRequest * request); /* ( Submit Form from Relative URI using GET ) Submit formdata using GET to the address indicated relative to the address of the base anchor. The list of form data must be given as an association list where the name is the field name and the value is the value of the field. */ extern BOOL HTGetFormRelative (HTAssocList * formdata, const char * relative, HTParentAnchor * base, HTRequest * request); /* ( Send a Form using an Anchor and the GET Method ) Submit formdata using GET to the address indicated of the anchor. The list of form data must be given as an association list where the name is the field name and the value is the value of the field. */ extern BOOL HTGetFormAnchor (HTAssocList * formdata, HTAnchor * anchor, HTRequest * request); /* . Submit Forms Using POST Method . The data in a POST form is sent as the body part of the HTTP message whereas a GET form wraps it all up into the URI. In order to be able to use the POST data object at a later point in time, we create a new anchor on the fly. This anchor has a URI file location which points into the temporary area given by the User Profile Object. That is - you can actually save the anchor using a PUT request and then be able to retrive the form data at a later point in time. Even though this may seem "ambitious" for posting form data, it is really just a special example of sending any kind of data to a remote server. All POST form functions return the new anchor or NULL if they fail. ( Submit Form from Absolute URI using POST ) Submit formdata using POST to the address indicated as the "base" which must be an absolute URI. The list of form data must be given as an association list where the name is the field name and the value is the value of the field. */ extern HTParentAnchor * HTPostFormAbsolute (HTAssocList * formdata, const char * base, HTRequest * request); /* ( Submit Form from a Relative URI using GET ) Submit formdata using POST to the address indicated relative to the address of the base anchor. The list of form data must be given as an association list where the name is the field name and the value is the value of the field. */ extern HTParentAnchor * HTPostFormRelative (HTAssocList * formdata, const char * relative, HTParentAnchor * base, HTRequest * request); /* ( Submit Form using an Anchor and the POST Method ) Submit formdata using POST to the address indicated of the anchor. The list of form data must be given as an association list where the name is the field name and the value is the value of the field. */ extern HTParentAnchor * HTPostFormAnchor (HTAssocList * formdata, HTAnchor * anchor, HTRequest * request); /* ( Submit Form and Save the Result in a Memory Buffer ) Submit formdata to the address referred to by the HTAnchor object and load the result of the POST into a HTChunk object. A chunk object is a dynamic memory buffer so in the end you will have a single memory buffer containing the document. The chunk must be freed by the caller. */ extern HTChunk * HTPostFormAnchorToChunk (HTAssocList * formdata, HTAnchor * anchor, HTRequest * request); /* . Get Metainformation about a Document (Method = HEAD) . If you are not interested in the document itself but only in the metainformation that describes the document then you should use the HEAD method in your request. ( Get Metainformation about a Document from Absolute URI ) Request metainfomration about a document referencd by an absolute URI. */ extern BOOL HTHeadAbsolute (const char * url, HTRequest * request); /* ( Get Metainformation about a Document from Relative URI ) Request metainformation about a document referenced by a relative URI. */ extern BOOL HTHeadRelative (const char * relative, HTParentAnchor * base, HTRequest * request); /* ( Get Metainformation about a Document using an Anchor ) Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the approproiate method in the Anchor class. */ extern BOOL HTHeadAnchor (HTAnchor * anchor, HTRequest * request); /* . Delete a Document (Method = DELETE) . If you want to delete a document (or make the document inaccessible for future references) then you can use the DELETE method in your request. ( Delete a Document from Absolute URI ) Request metainfomration about a document referencd by an absolute URI. */ extern BOOL HTDeleteAbsolute (const char * url, HTRequest * request); /* ( Delete a Document from Relative URI ) Request metainformation about a document referenced by a relative URI. */ extern BOOL HTDeleteRelative (const char * relative, HTParentAnchor * base, HTRequest * request); /* ( Delete a Document using an Anchor ) Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the approproiate method in the Anchor class. */ extern BOOL HTDeleteAnchor (HTAnchor * anchor, HTRequest * request); /* . Save a Document ASIS From Memory (Method = PUT) . If you already have a document in memory and it is associated with an Anchor object then you can PUT this document to a remote server using the following methods. Other information that you can set in the anchor is metadata like the media type, the document length, the language, or any other information that you want to associate with the document to be uploaded. This set of functions takes the document ASIS - that it the exact content of the document associated with this anchor will be sent to the remote server. If your anchor represents a structured content and the document itself is a parse tree, for example, then you can use the structured PUT functions. If your application is an editor, then you may want to create a new anchor on the fly for temporary backups on local disk before you save it to a remote server. An easy way to get a new anchor with a local file URI is to use the HTTmpAnchor function which is part of the WWWApp interface. ( Save a Document ASIS from Memory Using Absolute URI (PUT) ) The source is an anchor with the contents already in memory and the destination is an absolute URI. */ extern BOOL HTPutAbsolute (HTParentAnchor * source, const char * destination, HTRequest * request); /* ( Save a Document ASIS from Memory Using Relative URI (PUT) ) The source is an anchor with the contents already in memory and the destination is a relative URI relative to the destination anchor */ extern BOOL HTPutRelative (HTParentAnchor * source, const char * relative, HTParentAnchor * destination_base, HTRequest * request); /* ( Save a Document ASIS from Memory Using an Anchor (PUT) ) Both the source and the anchor are anchor objects. The source anchor already has the contents in memory */ extern BOOL HTPutAnchor (HTParentAnchor * source, HTAnchor * dest, HTRequest * request); /* . Save a Structured Document (Using PUT) . If you want to save a document from memory but it contains structured information (for example, it is in the form of a parse tree) then you can use this interface. The only difference from above is that the caller must provide the function that provides data while sending it accross the network - we can't just take it as a block. You can for example have a look at the HTEntity_callback function which is used in the ASIS interface if you want to write your own data feeding method. ( Save a Structured Document from Memory to Absolute URI (PUT) ) Upload a document referenced by an absolute URI. */ extern BOOL HTPutStructuredAbsolute (HTParentAnchor * source, const char * destination, HTRequest * request, HTPostCallback * input); /* ( Save a Structured Document from Memory to Relative URI (PUT) ) The source is an anchor with the contents already in memory and the destination is a relative URI relative to the destination anchor */ extern BOOL HTPutStructuredRelative (HTParentAnchor * source, const char * relative, HTParentAnchor * destination_base, HTRequest * request, HTPostCallback * input); /* ( Save a Structured Document Using an Anchor and the PUT Method ) The source is an anchor with the contents already in memory and the destination is a relative URI. The HTPostCallback function type is declared in the HTRequest object. */ extern BOOL HTPutStructuredAnchor (HTParentAnchor * source, HTAnchor * destination, HTRequest * request, HTPostCallback * input); /* . Save a Remote Document (Using PUT) . If the content of the document associated with the anchor is NOT in memory then you can use this interface. These methods make two requests: first they go out and get the source which can be on an FTP server, on local disk, on another HTTP server etc. and then they PUT this document ASIS to the destination HTTP server. ( Save a Document from Absolute URI using PUT ) Get the source and PUT it to the destination which is an absolute URI */ extern BOOL HTPutDocumentAbsolute (HTParentAnchor * source, const char * destination, HTRequest * request); /* ( Save a Document from Relative URI using PUT ) Get the source and PUT it to the destination which is a relative URI */ extern BOOL HTPutDocumentRelative (HTParentAnchor * source, const char * relative, HTParentAnchor * destination_base, HTRequest * request); /* ( Save a Document Using an Anchor and the PUT Method ) Get the source and PUT it to the destination which is an anchor object. */ extern BOOL HTPutDocumentAnchor (HTParentAnchor * source, HTAnchor * destination, HTRequest * request); /* . Post a Document from Memory ASIS (Method = POST) . If you already have a document in memory and it is associated with an Anchor object then you can POST this document to a remote server using the following methods. Other information that you can set in the anchor is metadata like the media type, the document length, the language, or any other information that you want to associate with the document to be uploaded. This set of functions takes the document ASIS - that it the exact content of the document associated with this anchor will be sent to the remote server. If your application is an editor, then you may want to create a new anchor on the fly for temporary backups on local disk before you save it to a remote server. An easy way to get a new anchor with a local file URI is to use the HTTmpAnchor function which is part of the WWWApp interface. ( Post a Document from Memory ASIS using Absolute URI (POST) ) Upload a document using POST referenced by an absolute URI. */ extern BOOL HTPostAbsolute (HTParentAnchor * source, const char * destination, HTRequest * request); /* ( Post a Document from Memory ASIS using Relative URI (POST) ) Upload a document using POST referenced by a relative URI. */ extern BOOL HTPostRelative (HTParentAnchor * source, const char * relative, HTParentAnchor * destination_base, HTRequest * request); /* ( Post a Document from Memory ASIS using an Anchor (POST) ) POST an anchor - here both the source and the anchor are anchor objects. The source anchor already has the contents in memory. */ extern BOOL HTPostAnchor (HTParentAnchor * source, HTAnchor * dest, HTRequest * request); /* . Get Available Options for a Document (Method = OPTIONS) . If you want to get information about a document then you can use the the OPTIONS method in your request. The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval. A speciality about the OPTIONS method is that the client can issue a request with no pathinfo at all but only with a "*". That is, the request line can look like this "OPTIONS * HTTP/1.1". This means that we request information about the server as a whole and not only about a single URI. You can get this effect by using a URI containing the hostname alone with NO extra slash at the end, for example http://www.w3.org, http://www.cern.ch. ( Options Available for Document from Absolute URI ) Request options about a document referencd by an absolute URI. */ extern BOOL HTOptionsAbsolute (const char * url, HTRequest * request); /* ( Options Available for Document from Relative URI ) Request options about a document referenced by a relative URI. */ extern BOOL HTOptionsRelative (const char * relative, HTParentAnchor * base, HTRequest * request); /* ( Options Available for Document using an Anchor ) Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the appropriate method in the Anchor class. */ extern BOOL HTOptionsAnchor (HTAnchor * anchor, HTRequest * request); /* . Get Trace Loop back Information for a Document (Method = TRACE) . The TRACE method is used to invoke a remote, application-layer loop-back of the request message. The final recipient of the request SHOULD reflect the message received back to the client as the entity-body of a 200 (OK) response. The final recipient is either the origin server or the first proxy or gateway to receive a Max-Forwards value of zero (0) in the request (see section 14.31). A TRACE request MUST NOT include an entity. TRACE allows the client to see what is being received at the other end of the request chain and use that data for testing or diagnostic information. The value of the Via header field (section 14.44) is of particular interest, since it acts as a trace of the request chain. Use of the Max-Forwards header field allows the client to limit the length of the request chain, which is useful for testing a chain of proxies forwarding messages in an infinite loop. If successful, the response SHOULD contain the entire request message in the entity-body, with a Content-Type of "message/http". Responses to this method MUST NOT be cached. ( Traces Available for Document from Absolute URI ) Request traces about a document referencd by an absolute URI. */ extern BOOL HTTraceAbsolute (const char * url, HTRequest * request); /* ( Traces Available for Document from Relative URI ) Request traces about a document referenced by a relative URI. */ extern BOOL HTTraceRelative (const char * relative, HTParentAnchor * base, HTRequest * request); /* ( Traces Available for Document using an Anchor ) Here the URI is represented by an Anchor object. You can get an anchor object representing a URI by passing the URI to the appropriate method in the Anchor class. */ extern BOOL HTTraceAnchor (HTAnchor * anchor, HTRequest * request); /* . Serve a Request . Although libwww is primarily for clients, it is in fact symmetric in that it can handle both client requests and server requests. The way this is handled is that each protocol is registered with both a client handler and a server handler - depending on which type of request you use, one of them is called. Note that in order to be able to serve any document, there actually have to be a server handler. However, libwww only comes with a raw socket loader which isn't much of a server. There is an attempt of an HTTP server but it is not complete The protocol handler used to serve the request is determined by the URI - just as for client side requests. That is, libwww can in fact simultaneously be the server for multiple protocols if you really want to. Examples of URIs that you can use are noop://localhost:8888 which means that libwww starts listening on port 8888 (see the listen example for details). Other examples are http://localhost:7777 which means that it listens for HTTP on port 7777. Again, there is no HTTP server in libwww - this is just an example. */ extern BOOL HTServeAbsolute (const char * address, HTRequest * request); /* . Save a URI To Multiple Destinations - Not supported!!! . Note: This is no longer supported These are the generic versions of the PUT and POST functions. They can be used to send documents to multiple destinations simultanously using the PostWeb model. ( Copy an anchor - not supported ) Fetch the URI from either local file store or from a remote HTTP server and send it using either PUT or POST to the remote destination using HTTP. The caller can decide the exact method used and which HTTP header fields to transmit by setting the user fields in the request structure. If posting to NNTP then we can't dispatch at this level but must pass the source anchor to the news module that then takes all the refs to NNTP and puts into the "newsgroups" header Returns YES if request accepted, else NO */ extern BOOL HTCopyAnchor (HTAnchor * src_anchor, HTRequest * main_req); /* ( Upload an Anchor - not supported ) This function can be used to send data along with a request to a remote server. It can for example be used to POST form data to a remote HTTP server - or it can be used to post a newsletter to a NNTP server. In either case, you pass a callback function which the request calls when the remote destination is ready to accept data. In this callback you get the current request object and a stream into where you can write data. It is very important that you return the value returned by this stream to the Library so that it knows what to do next. The reason is that the outgoing stream might block or an error may occur and in that case the Library must know about it. If you do not want to handle the stream interface yourself then you can use the HTUpload_callback which is declared below. The source anchor represents the data object in memory and it points to the destination anchor by using the POSTWeb method. The source anchor contains metainformation about the data object in memory and the destination anchor represents the reponse from the remote server. Returns YES if request accepted, else NO */ extern BOOL HTUploadAnchor (HTAnchor * source_anchor, HTRequest * request, HTPostCallback * callback); /* ( POST Callback Handler - not supported ) Is you do not want to handle the stream interface on your own, you can use this "middleman" function which does the actual writing to the target stream for the anchor upload and also handles the return value from the stream. Now, your application is called via the callback function that you may associate with a request object. You indicate when you have sent all the data you want by returning HT_LOADED from the callback. */ extern int HTUpload_callback (HTRequest * request, HTStream * target); /* */ #endif /* HTACCESS_H */ /* @(#) $Id: HTAccess.html,v 2.89 2025/12/17 01:51:01 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTAlert.h������������������������������������������������������������������������0100644�0000764�0000144�00000020512�07405520455�015426� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Library Alert Class ! The Alert Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Alert class defines a set of methods to be used by libwww for passing prompts and message to the application. In order to maintain libwww application independent and natural language independent, it does not know how to communicate with a user. Note here that a user is a somewhat abstract notion for &nbsp;something that can receive a message or prompt from libwww. A user can for example be a person, but is may also be handled automatically by a robot or a client receiving a response from a HTTP server. Libwww has a set of opcodes that classifies the nature of the message, for example that it is a question that must be confirmed in order to continue a request or simply a progress notification. The application can register a callback for any number of the defined opcodes - in case libwww has a message for an opcode that does not have a method associated, the message is ignored. You can also globally disable any message send from libwww. Note: The library core does not define any message or dialog methods - they are all considered part of the application. However, it comes with a default set of methods which can be initiated using the function HTAlertInit() in HTInit module This module is implemented by HTAlert.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTALERT_H #define HTALERT_H #include "HTReq.h" /* . Message Opcodes and Messages . The callback functions are defined as a generic callback where the caller can pass a set of input parameters and the callee can return a set of outptu parameters. Also note that all the *_PROG_* opcodes are a subset of HT_A_PROGRESS. This means that you easily can register a callback for all progress reports. The callback handler for progress notifications SHOULD NOT be used to interrupt the ongoing message as it is not guaranteed to be in a state to do so. Instead you should use the event handlers or the timers for this. */ typedef enum _HTAlertOpcode { HT_PROG_DNS = 0x1, /* Doing DNS resolution */ HT_PROG_CONNECT = 0x2, /* Connecting Active */ HT_PROG_ACCEPT = 0x4, /* Connecting Passive */ HT_PROG_READ = 0x8, /* Read data */ HT_PROG_WRITE = 0x10, /* Write data */ HT_PROG_DONE = 0x20, /* Request finished */ HT_PROG_INTERRUPT = 0x40, /* Request interrupted */ HT_PROG_OTHER = 0x80, /* Other progress notes */ HT_PROG_TIMEOUT = 0x100, /* Request timed out */ HT_PROG_LOGIN = 0x200, /* Automatic login notifications */ HT_A_PROGRESS = 0xFFFF, /* Get all progress reports - no reply */ /* First word are reserved for progresss notifications */ HT_A_MESSAGE = 0x1<<16, /* Send a message - no reply */ HT_A_CONFIRM = 0x2<<16, /* Want YES or NO back */ HT_A_PROMPT = 0x4<<16, /* Want full dialog */ HT_A_SECRET = 0x8<<16, /* Secret dialog (e.g. password) */ HT_A_USER_PW = 0x10<<16 /* Atomic userid and password */ } HTAlertOpcode; typedef struct _HTAlertPar HTAlertPar; typedef BOOL HTAlertCallback (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply); /* If you don't expect any return values then reply can be NULL. The return value of the callback function can be used to indicate confirmation on a prompt (Yes or No). . User Prompts and Questions . This is an enumerated list of messages that can be converted into a string table etc. See the HTDialog module for default initialization of these strings. */ typedef enum _HTAlertMsg { HT_MSG_NULL = -1, HT_MSG_UID = 0, HT_MSG_PROXY_UID, HT_MSG_FTP_UID, HT_MSG_PW, HT_MSG_FILENAME, HT_MSG_ACCOUNT, HT_MSG_METHOD, HT_MSG_MOVED, HT_MSG_RULES, HT_MSG_FILE_REPLACE, HT_MSG_RETRY_AUTHENTICATION, HT_MSG_RETRY_PROXY_AUTH, HT_MSG_REDO, HT_MSG_BIG_PUT, HT_MSG_SOURCE_MOVED, HT_MSG_DESTINATION_MOVED, HT_MSG_REDIRECTION, HT_MSG_PROXY, HT_MSG_CACHE_LOCK, HT_MSG_ACCEPT_COOKIE, HT_MSG_ELEMENTS /* This MUST be the last element */ } HTAlertMsg; /* . Enable or Disable Messages . If you really don't want the library to prompt for anything at all then enable this constant. The default value is Interactive. */ extern void HTAlert_setInteractive (BOOL interative); extern BOOL HTAlert_interactive (void); /* . Creation and Deletion Methods . Message methods are registered in lists. By default a list is not enabled before you assign it as being active. This allows the application to maintain multiple lists of message handlers which can be swapped in and out as neeeded. ( Add a Callback Function ) Register a call back function that is to be called when generating messages, dialog, prompts, progress reports etc. The opcode signifies which call back function to call depending of the type of the message. Opcode can be any combination of the bitflags defined by HTAlertOpcode. If you register one callback for HT_A_PROGRESS then this will get called on all progress notifications. */ extern BOOL HTAlertCall_add (HTList * list, HTAlertCallback * cbf, HTAlertOpcode opcode); /* ( Delete a Callback function ) Unregister a call back function from a list */ extern BOOL HTAlertCall_delete (HTList * list, HTAlertCallback * cbf); /* ( Delete all Callbacks With this Opcode ) Unregister all handlers registered for a given opcode. */ extern BOOL HTAlertCall_deleteOpcode (HTList * list, HTAlertOpcode opcode); /* ( Delete a list of Callback Functions ) Unregisters all call back functions */ extern BOOL HTAlertCall_deleteAll (HTList * list); /* ( Find a Callback Function ) Finds a callback function corresponding to the opcode. If none has been registered then NULL is returned. */ extern HTAlertCallback * HTAlertCall_find(HTList * list, HTAlertOpcode opcode); /* . The Reply Object . The reply object is used for communicating input from the user back to the Library. This is only required to use when for example the user is prompted for a file name etc. You can find several examples on how to use this in the default message and dialog module provided together with the Library. */ extern HTAlertPar * HTAlert_newReply (void); extern void HTAlert_deleteReply (HTAlertPar * old); /* ( Handle the Reply Message ) These methods provide the API for handling the reply message. There are two ways of assigning a message to the reply message - either by copying the buffer or by reusing the same buffer. In the latter case, the caller must make sure not to free the reply message before it has been used. */ extern BOOL HTAlert_setReplyMessage (HTAlertPar * me, const char *message); extern BOOL HTAlert_assignReplyMessage (HTAlertPar * me, char * message); /* You can get the data back again by using this method: */ extern char * HTAlert_replyMessage (HTAlertPar * me); /* */ extern char * HTAlert_replySecret (HTAlertPar * me); extern BOOL HTAlert_setReplySecret (HTAlertPar * me, const char * secret); extern void * HTAlert_replyOutput (HTAlertPar * me); extern BOOL HTAlert_setReplyOutput (HTAlertPar * me, void * output); /* . Active set of Callback Functions . A list can be assigned as being active in which case it is visible for libwww by assigning the list as the global alert list. Libwww does not know about inactive lists of alert handlers. */ extern void HTAlert_setGlobal (HTList * list); extern HTList * HTAlert_global (void); /* ( Global Alert List Methods ) You can assign a callback directly to the global list in which case it becomes immediately available to libwww. In this case you do not need to worry about creating the list - it will be created as well as deleted automatically. Add an Alert Handler */ extern BOOL HTAlert_add (HTAlertCallback * cbf, HTAlertOpcode opcode); /* Delete an Alert Handler You can either delete a handler by referring to its address or to the opcode that it has been registered for. */ extern BOOL HTAlert_delete (HTAlertCallback * cbf); extern BOOL HTAlert_deleteOpcode (HTAlertOpcode opcode); /* Delete all Alert Handlers */ extern BOOL HTAlert_deleteAll (void); /* Find an Alert Handler */ extern HTAlertCallback * HTAlert_find (HTAlertOpcode opcode); /* */ #endif /* @(#) $Id: HTAlert.html,v 2.56 2025/06/30 20:15:03 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTAncMan.h�����������������������������������������������������������������������0100644�0000764�0000144�00000007344�07405520455�015524� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Anchor Object !The Anchor Class Definition! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is the private part of the anchor object. It has the functions declarations that are private to the Library and that shouldn't be used by applications. See also the public part of the declarition in the HTAnchorModule. */ #ifndef HTANCMAN_H #define HTANCMAN_H #include "HTAnchor.h" #include "HTList.h" #include "HTAtom.h" #include "HTMethod.h" /* We have a set of Anchor objects which of course should be sub classes - but - hey - this is C - what do you expect! (Generic Anchor type) This is the super class of anchors. We often use this as an argument to the functions that both accept parent anchors and child anchors. We separate the first link from the others to avoid too many small mallocs involved by a list creation. Most anchors only point to one place. */ struct _HTAnchor { HTLink mainLink; /* Main (or default) destination of this */ HTList * links; /* List of extra links from this, if any */ HTParentAnchor * parent; /* Parent of this anchor (self for adults) */ }; /* (Anchor for a Parent Object) These anchors points to the whole contents of a graphic object (document). The parent anchor of a parent anchor is itself. The parent anchor now contains all meta information about the object. This is largely the entity headers in the HTTP specification. */ struct _HTParentAnchor { /* Common part from the generic anchor structure */ HTLink mainLink; /* Main (or default) destination of this */ HTList * links; /* List of extra links from this, if any */ HTParentAnchor * parent; /* Parent of this anchor (self) */ /* ParentAnchor-specific information */ HTList ** children; /* Hash of subanchors of this, if any */ HTList * sources; /* List of anchors pointing to this, if any */ void * document; /* The document within this is an anchor */ char * physical; /* Physical address */ char * address; /* Absolute address of this node */ BOOL isIndex; /* Acceptance of a keyword search */ HTAssocList * headers; /* Unparsed headers */ BOOL header_parsed; /* Are we done parsing? */ /* We keep a list of variants of this anchor, if any */ HTList * variants; /* Entity header fields */ char * title; HTMethod allow; /* Allowed methods (bit-flag) */ HTFormat content_type; /* Content type */ HTAssocList * type_parameters;/* Content type parameters (charset etc.) */ HTAssocList * meta_tags; /* Set of metatags found in the HTML text */ char * content_base; HTList * content_encoding; HTList * content_language; long int content_length; char * content_location; char * content_md5; HTEncoding cte; /* Content-Transfer-Encoding */ time_t date; /* When was the request issued */ time_t expires; /* When does the copy expire */ time_t last_modified; /* When was this last modified */ time_t age; /* Cache estimate of age */ char * etag; /* entity tag */ char * derived_from; /* Opaque string */ char * version; /* Opaque string */ }; /* (Anchor for a Child Object) A child anchor is a anchor object that points to a subpart of a graphic object (document) */ struct _HTChildAnchor { /* Common part from the generic anchor structure */ HTLink mainLink; /* Main (or default) destination of this */ HTList * links; /* List of extra links from this, if any */ HTParentAnchor * parent; /* Parent of this anchor */ /* ChildAnchor-specific information */ char * tag; /* Address of this anchor relative to parent */ }; /* */ #endif /* HTANCMAN_H */ /* @(#) $Id: HTAncMan.html,v 2.14 2025/03/05 21:56:09 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTAnchor.h�����������������������������������������������������������������������0100644�0000764�0000144�00000040771�07405520455�015602� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Anchor Class ! The Anchor Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* An anchor represents a region of a hypertext document which is linked to another anchor in the same or a different document. Another name for anchors would be URLs as an anchor represents all we know about a URL - including where it points to and who points to it.&nbsp;Because the anchor objects represent the part of the Web, the application has been in touch, it is often useful to maintain the anchors throughout the lifetime of the application. It would actually be most useful if we had persistent anchors so that an application could build up a higher knowledge about the Web topology. .When to Escape and Unescape Addresses. The URI escape policy in libwww is that all URIs created as anchors must already have been escaped. The reason for this is that if URIs are not escaped then the URI parser is not guaranteed to work as expected. Imagine, for example, that you have a ":" in a host name, then you could get something like this: http://my:host:8000/ instead of http://my%3Ahost:8000/. Libwww provides support for escaping and unescaping URIs using this set of APIs. This module is implemented by HTAnchor.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTANCHOR_H #define HTANCHOR_H /* . Types defined and used by the Anchor Object . This is a set of videly used type definitions used through out the Library: */ #include "WWWUtil.h" typedef HTAtom * HTFormat; typedef HTAtom * HTLevel; /* Used to specify HTML level */ typedef HTAtom * HTEncoding; /* C-E and C-T-E */ typedef HTAtom * HTCharset; typedef HTAtom * HTLanguage; typedef struct _HTAnchor HTAnchor; typedef struct _HTParentAnchor HTParentAnchor; typedef struct _HTChildAnchor HTChildAnchor; #include "HTLink.h" #include "HTMethod.h" #include "HTResponse.h" /* . The Anchor Class . We have three variants of the Anchor object - I guess some would call them superclass and subclasses ;-) ( Anchor Base Class ) This is the super class of anchors. We often use this as an argument to the functions that both accept parent anchors and child anchors. We separate the first link from the others to avoid too many small mallocs involved by a list creation. Most anchors only point to one place. ( Anchor for a Parent Object ) These anchors points to the whole contents of any resource accesible by a URI. The parent anchor now contains all known metainformation about that object and in some cases the parent anchor also contains the document itself. Often we get the metainformation about a document via the entity headers in the HTTP specification. ( Anchor for a Child Object ) A child anchor is a anchor object that points to a subpart of a hypertext document. In HTML this is represented by the NAME tag of the Anchor element. After we have defined the data structures we must define the methods that can be used on them. All anchors are kept in an internal hash table so that they are easier to find again. ( Find/Create a Parent Anchor ) This one is for a reference (link) which is found in a document, and might not be already loaded. The parent anchor returned can either be created on the spot or is already in the hash table. */ extern HTAnchor * HTAnchor_findAddress (const char * address); /* ( Find/Create a Child Anchor ) This one is for a new child anchor being edited into an existing document. The parent anchor must already exist but the child returned can either be created on the spot or is already in the hash table. The tag is the part that's after the '#' sign in a URI. */ extern HTChildAnchor * HTAnchor_findChild (HTParentAnchor *parent, const char * tag); /* ( Find/Create a Child Anchor and Link to Another Parent ) Find a child anchor anchor with a given parent and possibly a tag, and (if passed) link this child to the URI given in the href. As we really want typed links to the caller should also indicate what the type of the link is (see HTTP spec for more information). The link is relative to the address of the parent anchor. */ extern HTChildAnchor * HTAnchor_findChildAndLink ( HTParentAnchor * parent, /* May not be 0 */ const char * tag, /* May be "" or 0 */ const char * href, /* May be "" or 0 */ HTLinkType ltype); /* May be 0 */ /* ( Delete an Anchor ) All outgoing links from parent and children are deleted, and this anchor is removed from the sources list of all its targets. We also delete the targets. If this anchor's source list is empty, we delete it and its children. */ extern BOOL HTAnchor_delete (HTParentAnchor *me); /* ( Clear all Anchors ) Deletes all the metadata associated with anchors but doesn't delete the anchor link structure itself. This is much safer than deleting the complete anchor structure as this represents the complete Web the application has been in touch with. It also returns a list of all the objects (hyperdoc) hanging of the parent anchors found while doing it. These are not deleted by libwww. */ extern BOOL HTAnchor_clearAll (HTList * documents); /* ( Delete all Anchors ) Deletes all anchors and return a list of all the objects (hyperdoc) hanging of the parent anchors found while doing it. The application may keep its own list of HyperDocs, but this function returns it anyway. It is always for the application to delete any HyperDocs. If NULL then no hyperdocs are returned. Return YES if OK, else NO. Note: This function is different from cleaning up the history list! */ extern BOOL HTAnchor_deleteAll (HTList * objects); /* ( Flatten all anchors into Array ) Flattens the anchor web structure into an array. This is useful for calculating statistics, sorting the parent anchors etc. The caller can indicate the size of the array (total number of anchors if known - otherwise 0). Return an array that must be freed by the caller or NULL if no anchors. */ extern HTArray * HTAnchor_getArray (int growby); /* . Links and Anchors . Anchor objects are bound together by Link objects that carry information about what type of link and whetther we have followed the link etc. Any anchor object can have zero, one, or many links but the normal case is one. Therefore we treat this is a special way. ( Handling the Main Link ) Any outgoing link can at any time be the main destination. */ extern BOOL HTAnchor_setMainLink (HTAnchor * anchor, HTLink * link); extern HTLink * HTAnchor_mainLink (HTAnchor * anchor); extern HTAnchor * HTAnchor_followMainLink (HTAnchor * anchor); /* ( Handling the Sub Links ) */ extern BOOL HTAnchor_setSubLinks (HTAnchor * anchor, HTList * list); extern HTList * HTAnchor_subLinks (HTAnchor * anchor); /* ( Search for a Link Type ) Links can have relations (indicated by the "rel" or "rev" HTML link attributes). This function can search an anchor looking for a specific type, for example "stylesheet". */ extern HTLink * HTAnchor_findLinkType (HTAnchor * me, HTLinkType type); /* . Relations Between Children and Parents . As always, children and parents have a compliated relationship and the libwww Anchor class is no exception. ( Who is Parent? ) For parent anchors this returns the anchor itself */ extern HTParentAnchor * HTAnchor_parent (HTAnchor *me); /* ( Does it have any Anchors within it? ) Does this parent anchor have any children */ extern BOOL HTAnchor_hasChildren (HTParentAnchor *me); /* ( Is this anchor a Child? ) */ extern BOOL HTAnchor_isChild (HTAnchor * me); /* ( Get the Tag/Fragment/View of this anchor ) If this is a child anchor then it has a tag (often also called a "fragment"), which is essentially a specific view of a document. This is why I like to call it a view instead of a fragment. The string returned (if non-NULL) must be freed by the caller. */ extern char * HTAnchor_view (HTAnchor * me); /* . Anchor Addresses . There are two addresses of an anchor. The URI that was passed when the anchor was crated and the physical address that's used when the URI is going to be requested. The two addresses may be different if the request is going through a proxy or a gateway or it may have been mapped through a rule file. ( Logical Address ) Returns the full URI of the anchor, child or parent as a malloc'd string to be freed by the caller as when the anchor was created. */ extern char * HTAnchor_address (HTAnchor * me); /* ( Expanded Logical Address ) When expanding URLs within a hypertext document, the base address is taken as the following value if present (in that order): o Content-Base header o Content-Location header o Logical address */ extern char * HTAnchor_expandedAddress (HTAnchor * me); /* ( Physical address ) Contains the physical address after we haved looked for proxies etc. */ extern char * HTAnchor_physical (HTParentAnchor * me); extern void HTAnchor_setPhysical (HTParentAnchor * me, char * protocol); extern void HTAnchor_clearPhysical (HTParentAnchor * me); /* . Entity Body Information . A parent anchor can have a data object bound to it. This data object does can for example be a parsed version of a HTML that knows how to present itself to the user, or it can be an unparsed data object. It's completely free for the application to use this possibility, but a typical usage would to manage the data object as part of a memory cache. */ extern void HTAnchor_setDocument (HTParentAnchor *me, void * doc); extern void * HTAnchor_document (HTParentAnchor *me); /* . Entity Header Information . The anchor object also contains all the metainformation that we know about the object. ( Clear All header Information ) */ extern void HTAnchor_clearHeader (HTParentAnchor *me); /* ( Inherit Metainformation from the Response object ) Once we have decided to cache the object we transfer already parsed metainformation from the HTResponse object to the anchor object and also the unparsed headers as we may wanna use that information later. */ extern BOOL HTAnchor_update (HTParentAnchor * me, HTResponse * response); /* ( Is the Anchor searchable? ) */ extern void HTAnchor_clearIndex (HTParentAnchor * me); extern void HTAnchor_setIndex (HTParentAnchor * me); extern BOOL HTAnchor_isIndex (HTParentAnchor * me); /* ( Anchor Title ) We keep the title in the anchor as we then can refer to it later in the history list etc. We can also obtain the title element if it is passed as a HTTP header in the response. Any title element found in an HTML document will overwrite a title given in a HTTP header. */ extern const char * HTAnchor_title (HTParentAnchor *me); extern void HTAnchor_setTitle (HTParentAnchor *me, const char * title); extern void HTAnchor_appendTitle (HTParentAnchor *me, const char * title); /* ( Meta Tags within the Document ) */ extern HTAssocList * HTAnchor_meta (HTParentAnchor * me); extern BOOL HTAnchor_addMeta (HTParentAnchor * me, const char * name, const char * value); /* The Robots Meta tag A special case function that looks for any robots meta tag. This tag contains information about which links a robot can traverse and which it shouldn't. */ extern char * HTAnchor_robots (HTParentAnchor * me); /* ( Content Base ) The Content-Base header may be used for resolving relative URLs within the entity. If it there is no Content-Base header then we use the Content-Location if present and absolute. */ extern char * HTAnchor_base (HTParentAnchor * me); extern BOOL HTAnchor_setBase (HTParentAnchor * me, char * base); /* ( Content Location ) Content location can either be an absolute or a relative URL. The URL may be either absolute or relative. If it is relative then we parse it relative to the Content-Base header of the request URI if any, otherwise we use the Request URI. */ extern char * HTAnchor_location (HTParentAnchor * me); extern BOOL HTAnchor_setLocation (HTParentAnchor * me, char * location); /* ( Media Types (Content-Type) ) */ extern HTFormat HTAnchor_format (HTParentAnchor *me); extern void HTAnchor_setFormat (HTParentAnchor *me, HTFormat form); /* ( Content Type Parameters ) The Anchor obejct stores all content parameters in an Association list so here you will always be able to find them. We also have a few methods for the special cases: charset and level as they are often needed. */ extern HTAssocList * HTAnchor_formatParam (HTParentAnchor * me); extern BOOL HTAnchor_addFormatParam (HTParentAnchor * me, const char * name, const char * value); /* Charset parameter to Content-Type */ extern HTCharset HTAnchor_charset (HTParentAnchor *me); extern BOOL HTAnchor_setCharset (HTParentAnchor *me, HTCharset charset); /* Level parameter to Content-Type */ extern HTLevel HTAnchor_level (HTParentAnchor * me); extern BOOL HTAnchor_setLevel (HTParentAnchor * me, HTLevel level); /* ( Content Language ) */ extern HTList * HTAnchor_language (HTParentAnchor * me); extern BOOL HTAnchor_addLanguage (HTParentAnchor *me, HTLanguage lang); extern BOOL HTAnchor_deleteLanguageAll (HTParentAnchor * me); /* ( Content Encoding ) */ extern HTList * HTAnchor_encoding (HTParentAnchor * me); extern BOOL HTAnchor_addEncoding (HTParentAnchor * me, HTEncoding enc); extern BOOL HTAnchor_deleteEncoding (HTParentAnchor * me, HTEncoding enc); extern BOOL HTAnchor_deleteEncodingAll (HTParentAnchor * me); #define HTAnchor_removeEncoding(a, e) HTAnchor_deleteEncoding((a), (e)) /* ( Content Transfer Encoding ) */ extern HTEncoding HTAnchor_contentTransferEncoding (HTParentAnchor *me); extern void HTAnchor_setContentTransferEncoding (HTParentAnchor *me, HTEncoding cte); /* ( Content Length ) */ extern long int HTAnchor_length (HTParentAnchor * me); extern void HTAnchor_setLength (HTParentAnchor * me, long int length); extern void HTAnchor_addLength (HTParentAnchor * me, long int deltalength); /* ( Content MD5 ) */ extern char * HTAnchor_md5 (HTParentAnchor * me); extern BOOL HTAnchor_setMd5 (HTParentAnchor * me, const char * hash); /* ( Allowed methods (Allow) ) */ extern HTMethod HTAnchor_allow (HTParentAnchor * me); extern void HTAnchor_setAllow (HTParentAnchor * me, HTMethod methodset); extern void HTAnchor_appendAllow (HTParentAnchor * me, HTMethod methodset); /* ( Version ) */ extern char * HTAnchor_version (HTParentAnchor * me); extern void HTAnchor_setVersion (HTParentAnchor * me, const char * version); /* ( Date ) Returns the date that was registered in the RFC822 header "Date" */ extern time_t HTAnchor_date (HTParentAnchor * me); extern void HTAnchor_setDate (HTParentAnchor * me, const time_t date); /* ( Last Modified Date ) Returns the date that was registered in the RFC822 header "Last-Modified" */ extern time_t HTAnchor_lastModified (HTParentAnchor * me); extern void HTAnchor_setLastModified (HTParentAnchor * me, const time_t lm); /* ( Entity Tag ) Entity tags are used for comparing two or more entities from the same requested resource. It is a cache validator much in the same way Date can be. The difference is that we can't always trust the date and time stamp and hence we must have something stronger. */ extern char * HTAnchor_etag (HTParentAnchor * me); extern void HTAnchor_setEtag (HTParentAnchor * me, const char * etag); extern BOOL HTAnchor_isEtagWeak (HTParentAnchor * me); /* ( Age Header ) The Age response-header field conveys the sender's estimate of the amount of time since the response (or its revalidation) was generated at the origin server. A cached response is "fresh" if its age does not exceed its freshness lifetime. */ extern time_t HTAnchor_age (HTParentAnchor * me); extern void HTAnchor_setAge (HTParentAnchor * me, const time_t age); /* ( Expires Date ) */ extern time_t HTAnchor_expires (HTParentAnchor * me); extern void HTAnchor_setExpires (HTParentAnchor * me, const time_t exp); /* ( Derived from ) */ extern char * HTAnchor_derived (HTParentAnchor *me); extern void HTAnchor_setDerived (HTParentAnchor *me, const char *derived_from); /* . Status of Header Parsing . This is primarily for internal use. It is so that we can check whether the header has been parsed or not. */ extern BOOL HTAnchor_headerParsed (HTParentAnchor *me); extern void HTAnchor_setHeaderParsed (HTParentAnchor *me); /* ( Original Response Headers ) The MIME parser may add the original response headers as (name,value) pairs. */ extern BOOL HTAnchor_setHeader (HTParentAnchor * me, HTAssocList * list); extern HTAssocList * HTAnchor_header (HTParentAnchor * me); /* */ #endif /* HTANCHOR_H */ /* @(#) $Id: HTAnchor.html,v 2.61 2025/08/04 09:14:58 kahan Exp $ */ �������libwww/Library/src/HTArray.h������������������������������������������������������������������������0100644�0000764�0000144�00000005041�07405520455�015435� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Dynamic Array Pointer Class !Dynamic Array Pointer Class! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module implements a flexible array of pointers. It is a general utility module. An array is a structure which may be extended. These routines create and append data to arrays, automatically reallocating them as necessary. It is garanteed that the last entry in an array is NULL This module is implemented by HTArray.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTARRAY_H #define HTARRAY_H /* .Private Data Structure. This structure should not be referenced outside this module. If I find out I'll make it private ;-) */ typedef struct { int size; /* In numbers of elements */ int growby; /* Allocation unit in elements */ int allocated; /* Current size of *data */ void ** data; /* Pointer to malloced area or 0 */ } HTArray; /* .Create a new Array. Create a new array and specify the number of bytes to allocate at a time when the array is later extended. Arbitrary but normally a trade-off time vs. memory */ extern HTArray * HTArray_new (int grow); /* .Delete an Array. Delete an array created by HTArray_new */ extern BOOL HTArray_delete (HTArray * array); /* .Clear an Array. Clears an array but keeps it around */ extern BOOL HTArray_clear (HTArray * array); /* .Append an element to the Array. Add the element to the array. */ extern BOOL HTArray_addObject (HTArray * array, void * object); /* .Traverse an Array. Fast macros to traverse a macro ending in a NULL element. */ #define HTArray_firstObject(me, dp) \ ((me) && ((dp)=(me)->data) ? *(dp)++ : NULL) #define HTArray_nextObject(me, dp) \ ((me) && (dp) ? *(dp)++ : NULL) /* .Sort an Array. An array can be sorted in any way you like, for example with qsort(). This module provides an easy interface to the qsort() function using where you can define you own comparison routine as a function of the type: */ typedef int HTComparer (const void * a, const void * b); /* The sort function returns YES if sorting OK, else NO. */ extern BOOL HTArray_sort (HTArray * array, HTComparer * comp); /* .Returns Data Vector. Returns a pointer to the actual data */ #define HTArray_data(me) ((me) ? (me)->data : NULL) /* .Return Current Size. Returns the current size of the chunk */ #define HTArray_size(me) ((me) ? (me)->size : -1) /* */ #endif /* @(#) $Id: HTArray.html,v 2.8 2025/08/07 10:38:05 kahan Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTAssoc.h������������������������������������������������������������������������0100644�0000764�0000144�00000006500�07405520455�015430� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Association Pairs ! Association List For Storing Name-Value Pairs ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This Assoctiation List class is closely related to the HTList Class as it simply is a list of a specific list element containing a characters based name/value pair. Lookups from association list can be case sensitive and or prefix based. This module is implemented by HTAssoc.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTASSOC_H #define HTASSOC_H #include "HTList.h" typedef HTList HTAssocList; typedef struct { char * name; char * value; } HTAssoc; /* . Creation and Deletetion Methods . These methods create and deletes and association list */ extern HTAssocList * HTAssocList_new (void); extern BOOL HTAssocList_delete (HTAssocList * alist); /* . Add an Element to a List . We have two methods for adding new elements - you can either add unconditionally or replace any existing element with the same name but a new value. In replacing an element, the search is case insensitive prefix match! A new list element is added to the beginning of the list so that it is the first element just after the head element. */ extern BOOL HTAssocList_addObject ( HTAssocList * alist, const char * name, const char * value); extern BOOL HTAssocList_replaceObject ( HTAssocList * list, const char * name, const char * value); /* . Remove an Element from a List . Remove the element with the given name from the list. Search is case insensitive prefix match! */ extern BOOL HTAssocList_removeObject ( HTAssocList * list, const char * name); /* . Search for Element in a list . We have a small set of methods for searching a specific element within a list. ( Case Insensitive, Prefix Match ) In many situations, the values of associations are case insensitive - use this method to search the list using case insensitive comparison. Also, you can search for matching prefixes and not the whole string, for example "foo" matches "football" */ extern char * HTAssocList_findObject ( HTAssocList * alist, const char * name); /* ( Case Insensitive, Exact Match ) In case you want case insensitive, exact match */ extern char * HTAssocList_findObjectExact ( HTAssocList * alist, const char * name); /* ( Case Sensitive, Prefix Match ) In case you want case sensitive, prefix match */ extern char * HTAssocList_findObjectCaseSensitive ( HTAssocList * list, const char * name); /* ( Case Sensitive, Exact Match ) And finally if you want case sensitive, exact match */ extern char * HTAssocList_findObjectCaseSensitiveExact ( HTAssocList * list, const char * name); /* . Get Name and Values . Use this to get the name and value of a assoc object */ #define HTAssoc_name(me) ((me) ? (me)->name : NULL) #define HTAssoc_value(me) ((me) ? (me)->value : NULL) /* . Traverse list . Fast macro to traverse the list. Call it first with copy of list header: it returns the first object and increments the passed list pointer. Call it with the same variable until it returns NULL. */ #define HTAssocList_nextObject(me) \ ((me) && ((me) = (me)->next) ? (me)->object : NULL) /* */ #endif /* not HTASSOC_H */ /* @(#) $Id: HTAssoc.html,v 2.18 2025/04/18 20:17:44 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTAtom.h�������������������������������������������������������������������������0100644�0000764�0000144�00000003510�07405520455�015256� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Atom Class ! The Atom Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Atom Class defines strings which are given representative pointer values so that they can be stored more efficiently, and comparisons for equality done more efficiently. The list of atoms is stored in a hash table, so when asking for a new atom you might in fact get back an existing one. Note: There are a whole bunch of MIME-types defined as atoms, so please use them! This module is implemented by HTAtom.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTATOM_H #define HTATOM_H #include "HTList.h" typedef struct _HTAtom HTAtom; struct _HTAtom { HTAtom * next; char * name; }; /* struct _HTAtom */ /* ( Get an Atom ) This function returns a representative value (an atom) such that it will always (within one run of the program) return the same value for the same given string. The former is case sensitive, the latter is case insensitive. */ extern HTAtom * HTAtom_for (const char * string); extern HTAtom * HTAtom_caseFor (const char * string); /* ( Get Content of an Atom ) */ #define HTAtom_name(a) ((a) ? (a)->name : NULL) /* This macro returns the string pointed to by the atom. ( Search For Atoms ) Returns a list of atoms which matches the template given. It is especially made for MIME-types so that for example a template like text<slash><star> returns a list of all MIME-types of type text. */ extern HTList * HTAtom_templateMatches (const char * templ); /* ( Cleanup Memory ) In order to cleanup memory, call this function. This is done automaticly from the HTLibTerminate function. */ extern void HTAtom_deleteAll (void); #endif /* @(#) $Id: HTAtom.html,v 2.27 2025/07/04 15:23:24 kahan Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTBInit.h������������������������������������������������������������������������0100644�0000764�0000144�00000002764�07405520455�015375� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Media Type Initialization ! Default Media Type Initialization Module ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* As mentioned in the Library Architecture, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing RFC 822 headers etc. This module helps the application programmer setting up all this functionality, but it is important to note that none of it is required in order to use the Library. This module is implemented by HTBInit.c, and it is a part of the W3C Sample Code Library. You can also have a look at the other Initialization modules. */ #ifndef HTBINIT_H #define HTBINIT_H /* . Default File Suffix Binding . Register the default set of bindings between file suffixes and media types. This is used for example to guess the media type of a FTP URL of a local file URL. */ #include "WWWCore.h" extern void HTFileInit (void); /* */ #endif /* @(#) $Id: HTBInit.html,v 2.7 2025/05/14 02:10:16 frystyk Exp $ */ ������������libwww/Library/src/HTBTree.h������������������������������������������������������������������������0100644�0000764�0000144�00000002721�07405520455�015362� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Balanced Binary Tree !Balanced Binary Tree! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Tree creation, traversal and freeing. User-supplied comparison routine. This module is implemented by HTBTree.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTBTTEE_H #define HTBTREE_H #include "HTArray.h" /* */ typedef struct _HTBTree HTBTree; typedef struct _HTBTree_element HTBTElement; /* .Create a Binary Tree. This function creates a new binary tree and uses the comparison function when building the tree. */ extern HTBTree * HTBTree_new (HTComparer * comp); /* .Free storage of the tree but not of the objects. */ extern void HTBTree_free (HTBTree * tree); /* .Free storage of the tree and of the objects. */ extern void HTBTreeAndObject_free (HTBTree * tree); /* .Add an object to a binary tree. */ extern void HTBTree_add (HTBTree* tree, void * object); /* .Return an Object. */ extern void * HTBTree_object (HTBTElement * element); /* .Find next element in depth-first order. (On entry,) If element is NULL then start with leftmost element. if not NULL then give next object to the right. The function returns a pointer to element or NULL if none left. */ extern HTBTElement * HTBTree_next (HTBTree * tree, HTBTElement * element); /* */ #endif /* @(#) $Id: HTBTree.html,v 2.19 2025/05/14 02:10:16 frystyk Exp $ */ �����������������������������������������������libwww/Library/src/HTBind.h�������������������������������������������������������������������������0100644�0000764�0000144�00000014240�07405520455�015234� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww File Suffix Binding ! File Suffix Binding Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The preferences that we described in section Request Preferences did not mention what libwww should do if it doesn't know the data format of a document. In many protocols this information is provided by the remote server. Typical examples are MIME like protocols where the metainformation such as the Content-Type and the Content-Language is provided together with the document. However, applications often have access to the local file system using file URLs which in general do not keep any or at least very little information of the file type. It is therefore required to have some kind of binding between the file system and the preferences registered in the Library which provides this mateinformation about the object. Often files in a file system is classified by some sort of a suffix, for example, GIF files are often ending in .gif, text files in .txt etc. This binding is not static and it is therefore required to have a dynamic binding just like the preferences themselves. An example of the latter is HTML files which on most Unix systems end in .html whereas they on many MS-DOS based systems end in .htm. This module provides a generic binding mechanism between a file and its representation internally in libwww. It is not limited to simple file suffix classification but can also be used in more advanced environments using data bases etc. However, at this point we are interested in how we can register bindings between file suffixes and for example content types, content languages etc. The Bind manager is born with a certain knowledge about the set of delimiters but more can be added to provide the functionality desired. All the binding management could of course be replaced by a database interface. This module is implemented by HTBind.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTBIND_H #define HTBIND_H #include "HTFormat.h" #include "HTAnchor.h" /* . Initialization of the Module . These functions must be called on startup and termination of the application. This is done automatically by HTLibInit() and HTLibTerminate(). */ extern BOOL HTBind_init (void); extern BOOL HTBind_deleteAll (void); /* . Case Sensitivity . Should the search for suffixes be case sensitive or not? The default value is case sensitive. */ extern void HTBind_caseSensitive (BOOL sensitive); /* . Suffix Delimiters . Change the set of suffix delimiters. The default is a platform dependent set defined in the tcp module. */ extern const char *HTBind_delimiters (void); extern void HTBind_setDelimiters (const char * new_suffixes); /* . Set up Bindings Associated with a File Suffix . There are four types of bindings: o Content Type (media type) o Language o Content Encoding o Content Transfer Encoding And the associated set of methods is defined as: */ extern BOOL HTBind_add (const char * suffix, const char * representation, const char * encoding, const char * transfer, const char * language, double value); extern BOOL HTBind_addType (const char * suffix, const char * format, double value); extern BOOL HTBind_addEncoding (const char * suffix, const char * encoding, double value); extern BOOL HTBind_addTransfer (const char * suffix, const char * transfer, double value); extern BOOL HTBind_addLanguage (const char * suffix, const char * language, double value); /* The first method is a "super" method for binding information to a file suffic. Any of the string values can be NULL. If filename suffix is already defined its previous definition is overridden or modified. For example, a HTBind_setType and HTBind_setEncoding can be called with the same suffix. Calling this with suffix set to "*" will set the default representation. Calling this with suffix set to "*.*" will set the default representation for unknown suffix files which contain a "." NOTE: The suffixes can contain characters that must be escaped in a URL. However, they should not be encoded when parsed as the suffix parameter. . Determine a suitable suffix . Use the set of bindings to find a suitable suffix (or index) for a certain combination of language, media type and encoding given in the anchor. Returns a pointer to a suitable suffix string that must be freed by the caller. If more than one suffix is found they are all concatenated. If no suffix is found, NULL is returned. */ extern char * HTBind_getSuffix (HTParentAnchor * anchor); /* . Determine the content of an Anchor . Use the set of bindings to find the combination of language, media type and encoding of a given anchor. If more than one suffix is found they are all searched. The last suffix has highest priority, the first one lowest. Returns the HTAnchor object with the representations found. See also HTBind_getFormat */ extern BOOL HTBind_getAnchorBindings (HTParentAnchor * anchor); /* . Determine the content of a Response . Use the set of bindings to find the combination of language, media type and encoding of a given anchor. If more than one suffix is found they are all searched. The last suffix has highest priority, the first one lowest. Returns the HTResponse object with the representations found. See also HTBind_getFormat */ extern BOOL HTBind_getResponseBindings (HTResponse * response, const char * url); /* . Determine the content of File . Use the set of bindings to find the combination of language, media type and encoding of a given anchor. If more than one suffix is found they are all searched. The last suffix has highest priority, the first one lowest. Returns the format, encoding, and language found. See also HTBind_getBindings. */ extern BOOL HTBind_getFormat (const char * filename, HTFormat * format, HTEncoding * enc, HTEncoding * cte, HTLanguage * lang, double * quality); /* End of declaration module */ #endif /* HTBIND_H */ /* @(#) $Id: HTBind.html,v 2.18 2025/06/30 21:05:13 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTBound.h������������������������������������������������������������������������0100644�0000764�0000144�00000001370�07405520455�015427� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MIME multipart parser stream !MIME Multipart Parser Stream! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This stream parses a MIME multipart stream and builds a set of new streams via the stream stack each time we encounter a boundary start. We get the boundary from the normal MIME parser via the Request object. As we keep a local copy this also work for nested multiparts. This module is implemented by HTBound.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTBOUND_H #define HTBOUND_H #include "HTFormat.h" extern HTConverter HTBoundary; #endif /* @(#) $Id: HTBound.html,v 2.5 2025/05/14 02:10:17 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTBufWrt.h�����������������������������������������������������������������������0100644�0000764�0000144�00000003421�07405520455�015570� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Buffered Socket Writer Stream ! Buffered Socket Writer Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Buffered Socket Writer Stream is an output stream &nbsp;which knows how to write to a BSD type socket. It is part of the Transport interface and may be registered as part of a Transport Object. The application can&nbsp;initialize this stream together with the HTReader stream, for example. In the default initialization module, you can find the HTTransportInit() function which sets up this stream as a default transport for handling unbuffered socket write operations. The difference from the unbuffered write stream is that this stream lets you write characters without causing a write system call every time. The data is first written into a buffer. Data is written to the transport only when the buffer is full, or when the stream is flushed. This module is implemented by HTBufWrt.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTBUFWRT_H #define HTBUFWRT_H #include "HTIOStream.h" /* . Default Output Buffering . In order to optimize reading a channel, we bind a buffer to each channel object. The size of this buffer is a compromise between speed and memory. By default, we have chosen a value frequently used in TCP connections. In the stream creation method you can pass any other buffer size. In the case of 0, we take the default size. */ #define OUTPUT_BUFFER_SIZE 1024 /* . Buffered Write Stream . */ extern HTOutput_new HTBufferWriter_new; /* . Buffered Write Converter Stream . */ extern HTOutputConverter_new HTBufferConverter_new; /* */ #endif /* @(#) $Id: HTBufWrt.html,v 2.6 2025/04/04 00:12:00 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTCache.h������������������������������������������������������������������������0100644�0000764�0000144�00000027160�07405520455�015370� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Persistent Cache Manager ! Persistent Cache Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The cache contains details of persistent files which contain the contents of remote documents. The existing cache manager is somewhat naive - especially in its garbage collection but it is just an example of how it can be done.However, it is a fully HTTP/1.1 compliant cache manager.&nbsp;More advanced implementations are welcome! This module is implemented by HTCache.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTCACHE_H #define HTCACHE_H #include "WWWLib.h" /* . Initialize and Terminate the Persistent Cache . The cache_root is the URI of the location of the persistent cache. An example is "file:/tmp/w3c-lib". If cache_root is NULL then determine a cache root using the following algorithm: o Look for any environment variables (if supported) in the following order: WWW_CACHE, TMP, and TEMP. If none are set then then fall back on "/tmp". o Append the folder name "w3c-cache" to the root identified above The cache_root location does not have to exist, it will be created automatically if not. An empty string will make '/' the cache root. The size is the total size in MBytes - the default size is 20M. The cache can not be less than 5M. We can only enable the cache if we are in secure mode where we can not access the local file system. This is for example the case if using an application as a telnet shell. */ extern BOOL HTCacheInit (const char * cache_root, int size); /* After the cache has been terminated it can not be used anymore unless you do another HTCacheInit() call. */ extern BOOL HTCacheTerminate (void); /* . Cache Mode Parameters . The persistent cache has a set of overall parameters that you can adjust ( Enable and Disable the Cache ) The cache can be temporarily suspended by using the enable/disable flag. This does not prevent the cache from being enabled/disable at a later point in time. */ extern void HTCacheMode_setEnabled (BOOL mode); extern BOOL HTCacheMode_enabled (void); /* The cache can be setup to whether cache password protected documents thru the protected flag. By default this flag is turned off. */ extern void HTCacheMode_setProtected (BOOL mode); extern BOOL HTCacheMode_protected (void); /* ( What is the current Cache Root? ) Return the value of the cache root. The cache root can only be set through the HTCacheInit() function. The string returned MUST be freed by the caller */ extern char * HTCacheMode_getRoot (void); /* ( Total Cache Size ) We set the default cache size to 20M. We set the minimum size to 5M in order not to get into weird problems while writing the cache. The size is indicated in Mega bytes. The size is given in MBytes and is also returned in MBytes. We don't consider the metainformation as part of the total cache size which is the the reason for why the min cache size should not be less than 5M. */ extern BOOL HTCacheMode_setMaxSize (int size); extern int HTCacheMode_maxSize (void); /* ( Max Size of a Single Cache Entry ) It is also possible to control the max size of a single cache entry so that the cache doesn't get filled with a very few, very large cached entries. The default max size for a single cached entry is 3M. The value indicated must be in Mbytes, for example, a vaue of 3 would mean 3 MBytes. */ extern BOOL HTCacheMode_setMaxCacheEntrySize (int size); extern int HTCacheMode_maxCacheEntrySize (void); /* ( Default expiration time of cache entries ) If a response does not arrive with an expiration time and does not explicitly forbid its being cached, use the default expiration time. The time is given in seconds (e.g., 3,600 is one hour). */ extern void HTCacheMode_setDefaultExpiration (const int exp_time); extern int HTCacheMode_DefaultExpiration (void); /* ( How do we handle Expiration of Cached Objects? ) There are various ways of handling Expires header when met in a history list. Either it can be ignored all together, the user can be notified with a warning, or the document can be reloaded automatically. This flag decides what action to be taken. The default action is HT_EXPIRES_IGNORE. In HT_EXPIRES_NOTIFY mode , we push a message on to the Error stack which is presented to the user. */ typedef enum _HTExpiresMode { HT_EXPIRES_IGNORE = 0, HT_EXPIRES_NOTIFY, HT_EXPIRES_AUTO } HTExpiresMode; extern void HTCacheMode_setExpires (HTExpiresMode mode); extern HTExpiresMode HTCacheMode_expires (void); /* ( Disconnected Operation ) The cache can be set to handle disconnected operation where it does not use the network to validate entries and do not attempt to load new documents. All requests that can not be fulfilled by the cache will be returned with a "504 Gateway Timeout" response. There are two modes of how the cache can operate in disconnected mode: No network activity at all Here is uses its own persistent cache Forward all disconnected requests to a proxy cache Here it uses the HTTP/1.1 cache-control to indicate that the proxy should operate in disconnected mode. This mode only really makes sense when you are using a proxy, of course. */ typedef enum _HTDisconnectedMode { HT_DISCONNECT_NONE = 0, HT_DISCONNECT_NORMAL = 1, HT_DISCONNECT_EXTERNAL = 2 } HTDisconnectedMode; extern void HTCacheMode_setDisconnected (HTDisconnectedMode mode); extern HTDisconnectedMode HTCacheMode_disconnected (void); extern BOOL HTCacheMode_isDisconnected (HTReload mode); /* . The Cache Index . The persistent cache keeps an index of its current entries so that garbage collection and lookup becomes more efficient. This index is stored automatically at regular intervals so that we don't get out of sync. Also, it is automatically loaded at startup and saved at closedown of the cache. ( Reading the Cache Index ) Read the saved set of cached entries from disk. we only allow the index ro be read when there is no entries in memory. That way we can ensure consistancy. */ extern BOOL HTCacheIndex_read (const char * cache_root); /* ( Write the Cache Index ) Walk through the list of cached objects and save them to disk. We override any existing version but that is normally OK as we have already read its contents. */ extern BOOL HTCacheIndex_write (const char * cache_root); /* . The HTCache Object . The cache object is what we store about a cached objet in memory. */ typedef struct _HTCache HTCache; /* ( Create and Update a Cache Object ) Filling the cache is done as all other transportation of bulk data in libwww using streams. The cache object creater is a stream which in many cases sits on a T stream so that we get the original feed and at the same time can parse the contents. In some situations, we want to append data to an already exiting cache entry. This is the case when a use has interrupted a download and we are stuck with a subpart of the document. If the user later on whishes to download the object again we can issue a range request and continue from where we were. This will in many situations save a lot of bandwidth. */ extern HTConverter HTCacheWriter, HTCacheAppend; /* This function writes the metainformation along with the data object stored by the HTCacheWriter stream above. If no headers are available then the meta file is empty */ extern BOOL HTCache_writeMeta (HTCache * cache, HTRequest * request, HTResponse * response); /* In case we received a "304 Not Modified" response then we do not have to tough the body but must merge the metainformation with the previous version. Therefore we need a special metainformation update function. */ extern BOOL HTCache_updateMeta (HTCache * cache, HTRequest * request, HTResponse * response); /* Clear a cache entry */ extern BOOL HTCache_resetMeta (HTCache * cache, HTRequest * request, HTResponse * response); /* ( Check Cached Entry ) After we get a response back, we should check whether we can still cache an entry and/or we should add an entry for a resource that has just been created so that we can remember the etag and other things. The latter allows us to guarantee that we don't loose data due to the lost update problem. */ extern HTCache * HTCache_touch (HTRequest * request, HTResponse * response, HTParentAnchor * anchor); /* ( Load a Cached Object ) Loading a cached object is also done as all other loads in libwww by using a protocol load module. For the moment, this load function handles the persistent cache as if it was on local file but in fact &nbsp;it could be anywhere. */ extern HTProtCallback HTLoadCache; /* ( Delete a Cache Object ) Remove a HTCache object from memory and from disk. You must explicitly remove a lock before this operation can succeed */ extern BOOL HTCache_remove (HTCache * cache); /* ( Delete All Cache Objects in Memory ) Destroys all cache entried in memory but does not write anything to disk. Use the index methods above for doing that. We do not delete the disk contents. */ extern BOOL HTCache_deleteAll (void); /* ( Delete all Cache Object and File Entries ) Destroys all cache entried in memory and on disk. This call basically resets the cache to the inital state but it does not terminate the cache. That is, you don't have to reinitialize the cache before you can use it again. */ extern BOOL HTCache_flushAll (void); /* ( Find a Cached Object ) Verifies if a cache object exists for this URL and if so returns a URL for the cached object. It does not verify whether the object is valid or not, for example it might have expired. Use the cache validation methods for checking this. */ extern HTCache * HTCache_find (HTParentAnchor * anchor, char * default_name); /* ( Verify if an Object is Fresh ) This function checks whether a document has expired or not. The check is based on the metainformation passed in the anchor object The function returns the level of validation needed for getting a fresh version. We also check the cache control directives in the request to see if they change the freshness discission. */ extern HTReload HTCache_isFresh (HTCache * me, HTRequest * request); /* ( Register a Cache Hit ) As a cache hit may occur several places, we have a public function where we can declare a download to be a true cache hit. The number of hits a cache object has affects its status when we are doing garbage collection. */ extern BOOL HTCache_addHit (HTCache * cache); /* ( Find the Location of a Cached Object ) Is we have a valid entry in the cache then we also need a location where we can get it. Hopefully, we may be able to access it thourgh one of our protocol modules, for example the local file module. The name returned is in URL syntax and must be freed by the caller */ extern char * HTCache_name (HTCache * cache); /* ( Locking a Cache Object ) While we are creating a new cache object or while we are validating an existing one, we must have a lock on the entry so that not other requests can get to it in the mean while. A lock can be broken if the same request tries to create the cache entry again. This means that we have tried to validate the cache entry but we got a new shipment of bytes back from the origin server or an intermediary proxy. */ extern BOOL HTCache_getLock (HTCache * cache, HTRequest * request); extern BOOL HTCache_breakLock (HTCache * cache, HTRequest * request); extern BOOL HTCache_hasLock (HTCache * cache); extern BOOL HTCache_releaseLock (HTCache * cache); /* */ #endif /* @(#) $Id: HTCache.html,v 2.25 2025/08/30 13:41:03 kahan Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTChannl.h�����������������������������������������������������������������������0100644�0000764�0000144�00000007674�07405520455�015600� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Channel Interface ! The Channel Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* A channel contains information about sockets and their input and output streams. A channel represents the front end for receiving data towards the underlying transport. The definition of a channel describes how we are to read the data coming in on a socket, for example. In other words - a channel represents the first part of how to get handle incoming data in the Library: o Reading data on a channel o Defining a target for incoming data o Defining a protocol state machine that can handle the data This module is implemented by HTChannl.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTCHANNL_H #define HTCHANNL_H typedef struct _HTChannel HTChannel; #include "HTHost.h" #include "HTIOStream.h" /* . The Channel Object . The channel object contains an input and an output stream for a particular connection. ( Creation and Deletion of Channel Objects ) Either the socket can be invalid (INVSOC) or the file descriptor can be NULL but not both. */ extern HTChannel * HTChannel_new (SOCKET sockfd, FILE * fp, BOOL active); /* ( Deleting a Channel Object ) */ extern BOOL HTChannel_delete (HTChannel * channel, int status); extern BOOL HTChannel_deleteAll (void); extern BOOL HTChannel_safeDeleteAll (void); /* ( Search for a Channel ) Look for a channel object if we for some reason should have lost it */ extern HTChannel * HTChannel_find (SOCKET sockfd); /* ( Get Transport Descriptor for Channel ) A transport descriptor can be either a ANSI C file descriptor or a BSD socket. As it is difficult for the channel to know which one is used by a specific transport, we leave this to the caller to figure out. This is probably not the best way of doing it. */ extern SOCKET HTChannel_socket (HTChannel * channel); extern BOOL HTChannel_setSocket (HTChannel * channel, SOCKET socket); extern FILE * HTChannel_file (HTChannel * channel); extern BOOL HTChannel_setFile (HTChannel * channel, FILE * fp); /* ( The Host Object ) The Channel object also keeps a link to the host object so that we have a link to the persistent connection repository. */ extern BOOL HTChannel_setHost (HTChannel * ch, HTHost * host); extern HTHost * HTChannel_host (HTChannel * ch); /* ( Semaphores ) Adjust the semaphore on a channel. As many Net objects can point to the same channel we need to keep count of them so that we know if we can delete a channel or if it is still in use. We do this by having a simple semaphore associated with each channel object */ extern void HTChannel_upSemaphore (HTChannel * channel); extern void HTChannel_downSemaphore (HTChannel * channel); extern void HTChannel_setSemaphore (HTChannel * channel, int semaphore); /* ( Create Input and Output Streams ) You create the input stream and bind it to the channel using the following methods. Please read the description in the HTIOStream module on the parameters target, param, and mode. The input and output stream are instances created by the Transport object. The Transport Object defines the creation methods for the inout and output streams and the Channel object contains the actualy stream objects. */ extern BOOL HTChannel_setInput (HTChannel * ch, HTInputStream * input); extern HTInputStream * HTChannel_input (HTChannel * ch); extern BOOL HTChannel_deleteInput (HTChannel * channel, int status); extern BOOL HTChannel_setOutput (HTChannel * ch, HTOutputStream * output); extern HTOutputStream * HTChannel_output (HTChannel * ch); extern BOOL HTChannel_deleteOutput (HTChannel * channel, int status); extern HTInputStream * HTChannel_getChannelIStream (HTChannel * ch); extern HTOutputStream * HTChannel_getChannelOStream (HTChannel * ch); /* */ #endif /* HTCHANNL */ /* @(#) $Id: HTChannl.html,v 2.12 2025/07/07 15:43:28 frystyk Exp $ */ ��������������������������������������������������������������������libwww/Library/src/HTChunk.h������������������������������������������������������������������������0100644�0000764�0000144�00000013116�07405520455�015431� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Chunk Class ! The Chunk Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Chunk Class defines a way to automatically handle dynamic strings and other data types. You create a chunk with an initial size and it will then automatically grow to accommodate added data to the chunk. It is a general utility module. It is guaranteed that the array is '\0' terminated at all times (and hence is a valid C type string). The method HTChunkTerminate can be used to explicitly add a terminating '\0' and then to include this character in the chunk size. If left out, the terminating character is not considered part of the chunk. Note: The names without a "_" (made as a #define's) are only provided for backwards compatibility and should not be used. This module is implemented by HTChunk.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTCHUNK_H #define HTCHUNK_H /* . Create new chunk . Create a new chunk and specify the number of bytes to allocate at a time when the chunk is later extended. Arbitrary but normally a trade-off time vs. memory */ typedef struct _HTChunk HTChunk; extern HTChunk * HTChunk_new (int growby); /* . Free a chunk . Free a chunk created by HTChunk_newfrom memory */ extern void HTChunk_delete (HTChunk * ch); /* . Clear a chunk . Keep the chunk in memory but clear all data kept inside. This can be used if you know that you can reuse the allocated memory instead of allocating new memory. This zeros out all the allocated data (even data past the indicated size) and sets the size of the chunk to 0. If you have not used any bytes past the indicated size, it is more efficient to truncate the chunk to 0 instead. */ extern void HTChunk_clear (HTChunk * ch); /* . Ensure a Chunk has a Certain Amount of Free Space . Make sure that a chunk has enough memory allocated to grow by the indicated extra size. If this is not the case, then the chunk is expanded (in multiples of the chunk's "growby" size). Nothing is done if the current size plus the requested extra space fits within the chunk's currently allocated memory. */ extern void HTChunk_ensure (HTChunk * ch, int extra_size); /* . Append a character to a chunk . Add the character and increment the size of the chunk by one character */ extern void HTChunk_putc (HTChunk * ch, char c); /* . Append a string to a chunk . Add the string and increment the size of the chunk by the length of the string (without the trailing zero) */ extern void HTChunk_puts (HTChunk * ch, const char *str); /* . Append a block to a chunk . Add the block and increment the size of the chunk by the len */ extern void HTChunk_putb (HTChunk * ch, const char *block, int len); /* . Return Pointer to Data . This define converts a chunk to a normal char pointer so that it can be parsed to any ANSI C string function. */ extern char * HTChunk_data (HTChunk * ch); /* . Return Current Size . Returns the current size of the chunk */ extern int HTChunk_size (HTChunk * ch); /* . Setting the Size of a Chunk . If you want to cut off a piece of a chunk or extend it to make room for some direct buffer manipulation, then you can use one of these functions. Both of these calls set the size of the chunk to be size, but the truncate call only allows you to make the string shorter. If the string is made shorter, the formerly-used bytes are cleared, so truncating a chunk to 0 is analogous to clearing it, but slightly more efficient. */ extern BOOL HTChunk_truncate (HTChunk * ch, int size); extern BOOL HTChunk_setSize (HTChunk * ch, int size); /* . Zero Terminate a chunk . As a chunk often is a dynamic string, it needs to be terminated by a zero in order to be used in C. However, by default any chunk is always zero terminated, so the only purpose of this function is to increment the size counter with one corresponding to the zero. */ extern void HTChunk_terminate (HTChunk * ch); /* . CString Conversions . A Chunk may be built from an allocated string. The chunk assumes control of the passed string, eliminating the need for additional allocations and string copies. When you take control of the CString from a chunk, the chunk is destroyed. */ extern HTChunk * HTChunk_fromCString (char * str, int grow); extern char * HTChunk_toCString (HTChunk * ch); /* . Creating a Chunk from an allocated buffer . A Chunk may be built from an allocted buffer. You must specify how much memory is allocated in the buffer (buflen) and what the size the new Chunk should be (size). All memory between size and buflen is zeroed. Note that is is legal to specify a size equal to the buflen if you don't expect the Chunk to be null terminated. The chunk takes control of the memory, and will free it when the Chunk is destroyed. Note that in order to avoid conflicts, the buffer's memory should be allocated using libwww's dedicated functions. */ extern HTChunk * HTChunk_fromBuffer (char * buf, int buflen, int size, int grow); /* . Old Interface Names . Don't use these in new applications */ #define HTChunkCreate(growby) HTChunk_new(growby) #define HTChunkFree(ch) HTChunk_delete(ch) #define HTChunkClear(ch) HTChunk_clear(ch) #define HTChunkEnsure(ch, s) HTChunk_ensure((ch), (s)) #define HTChunkPutc(ch, c) HTChunk_putc((ch), (c)) #define HTChunkPuts(ch, str) HTChunk_puts((ch), (str)) #define HTChunkTerminate(ch) HTChunk_terminate(ch) #define HTChunkData(ch) HTChunk_data(ch) #define HTChunkSize(ch) HTChunk_size(ch) /* */ #endif /* @(#) $Id: HTChunk.html,v 2.39 2025/09/01 13:47:14 kahan Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTConLen.h�����������������������������������������������������������������������0100644�0000764�0000144�00000005157�07405520455�015545� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Content Length Counter and Other Buffer Streams ! Content Length Counter and Other Buffer Streams ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides various forms of buffering streams. You can also check out the chunk buffer stream which converts a stream to a memory buffer. These streams preseerve the streaming model. The content length counter &nbsp;stream buffers the result&nbsp;to find out the content length&nbsp;before the data is forwarded to the target stream. You can use this stream when generating a HTTP response in order to find the content length before writing the object to the socket, for example. This module is implemented by HTConLen.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTCONLEN_H #define HTCONLEN_H /* . Buffer Stream . This stream does almost the same as the content length counter stream except that it doesn't count the length! In other words - it's a completely normal memory buffer for the stream. If the buffer fills up, this stream flushes the buffer and goes transparent so that all new data will be pumped through without any buffering. */ extern HTStream * HTBuffer_new (HTStream * target, HTRequest * request, int max_size); /* . Content Length Counter Stream . This stream can be inserted anywhere to count the content length of the body. The result is passed to the Anchor object of this request so that future requests for the content length will get the right size. */ extern HTStream * HTContentCounter (HTStream * target, HTRequest * request, int max_size); /* . Delay Buffer Stream . This stream is much like the buffer stream above but instead of goin transparent when the buffer fills up, it returns HT_PAUSE which indicates that the stream doesn't accept more data and so the caller should not put any more data into it. When the buffer is flushed (the flush method invoked) then the stream goes into transparent mode, just like the buffer stream. */ extern HTStream * HTDelayBuffer (HTStream * target, int max_size); /* . Pipe Buffer Stream . This stream is much like the buffer stream above but instead of goin transparent when the buffer fills up, it returns HT_PAUSE which indicates that the stream doesn't accept more data and so the caller should not put any more data into it. */ extern HTStream * HTPipeBuffer (HTStream * target, int max_size); /* End of definition module */ #endif /* HTCONLEN_H */ /* @(#) $Id: HTConLen.html,v 2.8 2025/05/14 02:10:21 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTCookie.h�����������������������������������������������������������������������0100644�0000764�0000144�00000010104�07405520455�015564� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Simple Cookie Handler ! Simple Cookie Handler ! */ /* ** (c) COPYRIGHT MIT 1999. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides a simple HTTP Cookie handling mechanism. It really also is an excersize in showing how libwww can be extended with something like cookies in a modular manner. An important thing to note about this implementation is that it does not provide storage for cookies - this is left to the application as normally cookies have to be kept under lock. This module is implemented by HTCookie.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTCOOKIE_H #define HTCOOKIE_H #include "WWWLib.h" /* . Initiate and Terminate Cookie Handling . In order to start handling cookies, you need to initiate the module. Likewise, when you are done, you must terminate the module in order to clean up memory etc. Note that this cookie handler doesn't provide storage room for cookies - the application MUST do that by registering cookie callbacks. Initiation does three things: o Register a MIME header parser to parse the Set-Cookie header field o Register a BEFORE filter to see if a cookie should be added to the request (uses the "set" callback) o Register an AFTER filter to handle new cookies (uses the "find" callback) */ extern BOOL HTCookie_init (void); extern BOOL HTCookie_terminate (void); /* . The Cookie Class . The cookie class is used to handle cookies in libwww and to hand them off to the application. The creation and deletion of cookie object is handled by this cookie module - the application is handed a cookie and can access the elements using the following methods: */ typedef struct _HTCookie HTCookie; /* ( Cookie Name ) */ extern BOOL HTCookie_setName (HTCookie * me, const char * name); extern char * HTCookie_name (HTCookie * me); /* ( Cookie Value ) */ extern BOOL HTCookie_setValue (HTCookie * me, const char * value); extern char * HTCookie_value (HTCookie * me); /* ( Cookie Domain ) */ extern BOOL HTCookie_setDomain (HTCookie * me, const char * domain); extern char * HTCookie_domain (HTCookie * me); /* ( Cookie Path ) */ extern BOOL HTCookie_setPath (HTCookie * me, const char * path); extern char * HTCookie_path (HTCookie * me); /* ( Cookie Expiration ) */ extern time_t HTCookie_setExpiration (HTCookie * me, time_t expiration); extern time_t HTCookie_expiration (HTCookie * me); /* ( Is Cookie Secure? ) */ extern time_t HTCookie_setSecure (HTCookie * me, BOOL secure); extern BOOL HTCookie_isSecure (HTCookie * me); /* . Cookie Callbacks . The cookie callbacks are called before the request is shipped over the wire to see if any cookies should be included and after the response has been recieved if a new cookie is found in a response and before. Cookie callbacks can be registered with a context that is sent along with the callback when called. */ typedef BOOL HTCookieSetCallback (HTRequest * request, HTCookie * cookie, void * param); typedef HTAssocList * HTCookieFindCallback (HTRequest * request, void * param); extern BOOL HTCookie_setCallbacks (HTCookieSetCallback * setCookie, void * setCookieContext, HTCookieFindCallback * findCookie, void * findCookieContext); extern BOOL HTCookie_deleteCallbacks (void); /* . Cookie Handling Mode . The application can decide how cookies are to be handled - should they be ignored, should the user be asked, etc. */ typedef enum _HTCookieMode { HT_COOKIE_ACCEPT = 0x1, /* Accept cookies */ HT_COOKIE_SEND = 0x2, /* Send cookies when fit */ HT_COOKIE_SAME_HOST = 0x4, /* Don't accept cookies for other hosts */ HT_COOKIE_SAME_DOMAIN = 0x8, /* Don't accept cookies for other domains */ HT_COOKIE_PROMPT = 0x10 /* Prompt before accepting cookies */ } HTCookieMode; extern BOOL HTCookie_setCookieMode (HTCookieMode mode); extern HTCookieMode HTCookie_cookieMode (void); /* */ #endif /* HTCOOKIE_H */ /* @(#) $Id: HTCookie.html,v 2.3 2025/07/31 01:30:16 raff Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTDNS.h��������������������������������������������������������������������������0100644�0000764�0000144�00000006436�07405520455�015014� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww DNS Class ! Domain Name Service Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The DNS Class defines generic access to &nbsp;the DNS system. It maintains a cache of all visited hosts so that subsequent connects to the same host doesn't imply a new request to the DNS every time. Multihomed hosts are treated specially in that the time spend on every connect is measured and kept in the cache. On the next request to the same host, the IP-address with the lowest average connect time is chosen. If one IP-address fails completely, e.g. connection refused then it disabled and HTDoConnect tries one of the other IP-addresses to the same host. Every entry in the cache has its own time to live (TTL) and hence the cache manages its own automatic garbage collection. Currently the TTL is not bound to the DNS records which should be changed. You can set the DNS object TTL This module is implemented by HTDNS.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTDNS_H #define HTDNS_H /* */ typedef struct _HTdns HTdns; /* . DNS Cache Expiration Time . When to remove an entry in the DNS cache. We maintain our own DNS cache as we keep track of the connect time, pick the fastet host on multi-homed hosts etc. However we DO NOT HONOR DNS TTL Records which is the reason for why the expiration must be faily short (the default value is 30 mins), so that it doesn't collide with the DNS mechanism for timing out DNS records befoew swapping IP addresses around. */ extern void HTDNS_setTimeout (time_t timeout); extern time_t HTDNS_timeout (time_t timeout); /* . Creation and Deletion Methods . ( Add a DNS Object ) Add an element to the cache of visited hosts. The homes variable indicates the number of IP addresses found when looking up the name. A host name must NOT contain a port number. */ extern HTdns * HTDNS_add (HTList * list, struct hostent * element, char * host, int * homes); /* ( Delete a DNS object ) This function flushes the DNS object from the cache and frees up memory */ extern BOOL HTDNS_delete (const char * host); /* ( Delete ALL DNS objects ) This function is called from HTLibTerminate. It can be called at any point in time if the DNS cache is going to be flushed. */ extern BOOL HTDNS_deleteAll (void); /* . DNS Class Methods . ( Recalculating the Time Weights on Multihomed Host ) On every connect to a multihomed host, the average connect time is updated exponentially for all the entries. */ extern BOOL HTDNS_updateWeigths (HTdns *dns, int cur, ms_t deltatime); /* . Resolver Functions . These are the functions that resolve a host name ( Get Host By Socket ) This function should have been called HTGetHostByAddr but for historical reasons this is not the case. */ extern char * HTGetHostBySock (int soc); /* ( Get Host By Name ) This function gets the address of the host and puts it in to the socket structure. It maintains its own cache of connections so that the communication to the Domain Name Server is minimized. Returns the number of homes or -1 if error. */ extern int HTGetHostByName (HTHost * host, char *hostname, HTRequest * request); /* */ #endif /* @(#) $Id: HTDNS.html,v 2.19 2025/02/05 17:49:50 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTDemux.h������������������������������������������������������������������������0100644�0000764�0000144�00000001741�07405520455�015444� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library Socket Reader Stream ! Demultiplexing Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The MUX Reader Stream is an input stream &nbsp;which knows how to demultiplex a MUX channel. It is part of the Transport interface and may be registered as part of a Transport Object. The application can&nbsp;initialize this stream together with the HTMuxTx stream, for example. In the default initialization module, you can find the HTTransportInit() function which sets up this stream as a default transport for handling socket read operations. This module is implemented by HTMuxRx.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMUXRX_H #define HTMUXRX_H #include "HTStream.h" #include "HTMuxCh.h" /* */ extern HTStream * HTDemux_new (HTHost * host, HTMuxChannel * muxch); /* */ #endif /* @(#) $Id: HTDemux.html,v 2.3 2025/05/14 02:10:21 frystyk Exp $ */ �������������������������������libwww/Library/src/HTDescpt.h�����������������������������������������������������������������������0100644�0000764�0000144�00000005406�07405520455�015606� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww File descriptions !File Descriptions! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Descriptions appearing in directory listings are produced by this module. This may be overridden by another module for those who which descriptions to come from somewhere else. It's only HTTP directory listings that contain a description field (if enabled by the Directory browsing module. This module is implemented by HTDescpt.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTDESCRIPT_H #define HTDESCRIPT_H /* .Description File. This module gets descriptions from the file defined by global variable HTDescriptionFile in the same directory as the directoy to be listed. The default value is .www_descript: */ extern char * HTDescriptionFile; /* In the description file lines starting with a word starting with 'D' are taken to be descriptions (this looks funny now, but this is to make it easy to extend these description files to contain also other information. An example of the format of the description file is: */ /* ** DESCRIBE welcome.html Our welcome page ** DESCRIBE map*.gif Map as a GIF image ** DESCRIBE map*.ps Map as a PostScript image */ /* .HTML Titles. If description is not specified for a file that is of type text/html, this module uses the HTML TITLE as the description. This feature can be turned off by setting the HTPeekTitles variable to false. */ extern BOOL HTPeekTitles; /* .Read Description File. The description file for a directory is read in only once by HTReadDescriptions(), and the result returned by it is given as an argument when finding out a description for a single file. */ extern HTList * HTReadDescriptions (char * dirname); /* .Get Description For a File. Once description file has been read and the list of descriptions is returned by HTReadDescriptions(), the function HTGetDescription() can be used to get a description for a given file: */ extern char * HTGetDescription (HTList * descriptions, char * dirname, char * filename, HTFormat format); /* Directory name has to be present because this function may then take a peek at the file itself (to get the HTML TITLE, for example). If format is WWW_HTML and description is not found, this module may be configured to use the HTML TITLE as the description. No string returned by this function should be freed! .Freeing Descriptions. Once descriptions have been gotten, the description list returned by HTReadDescriptions() must be freed by HTFreeDescriptions(): */ extern void HTFreeDescriptions (HTList * descriptions); /* */ #endif /* !HTDESCRIPT_H */ /* @(#) $Id: HTDescpt.html,v 2.13 2025/05/14 02:10:22 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTDialog.h�����������������������������������������������������������������������0100644�0000764�0000144�00000025013�07405520455�015557� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Messages and Dialogs ! Application side Error Messages And the like ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides some "make life easier" functions in order to get the application going. The functionality of this module was originally in HTAccess, but now It is part of the application interface which the application may use it if desired. This module is implemented by HTHome.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTDIALOG_H #define HTDIALOG_H #include "WWWLib.h" /* . Default English Error Messages and Progress Notifications . The following functions provide a default set of error messages and prompts in plain English. You can of course change this as you like. ( Default English User Prompts and Questions ) This list corresponds to the enumeration list defined in the HTAlert module */ #define HT_MSG_ENGLISH_INITIALIZER \ "Please enter username:", \ "Please enter username for proxy authentication:", \ "Please enter username for this FTP server:", \ "Password:", \ "Please give name of file to save in:", \ "Plase enter account:", \ "You might not be allowed to use this method here, continue?", \ "Location has moved, continue?", \ "A new set of rules is requested to be added to your setup - continue?", \ "This file already exists - replace existing file?", \ "Authentication failed - retry?", \ "Proxy authentication failed - retry?", \ "This method has already been performed - repeat operation?", \ "This document is very big - continue operation?", \ "The source document for this operation has moved - continue operation \ with new location?", \ "The destination document for this operation has moved - continue \ operation with new location?", \ "A redirection may change the behavior of this method - proceed anyway?", \ "An automatic request for changing proxy has been encountered - continue?", \ "The persistent cache is already in use by another user. If this is not \ the case then you can manually delete this lock and restart.", \ "The server has sent you a cookie - accept?" /* ( Default English Messages and Progress Notifications ) This list corresponds to the enumeration list defined in the HTError module */ /* CODE ERROR MESSAGE ERROR URL */ #define HTERR_ENGLISH_INITIALIZER \ { 100, "Continue", "information" }, \ { 101, "Switching Protocols", "information" }, \ { 200, "OK", "success" }, \ { 201, "Created", "success" }, \ { 202, "Accepted", "success" }, \ { 203, "Non-authoritative Information", "success" }, \ { 204, "Document Updated", "success" }, \ { 205, "Reset Content", "success" }, \ { 206, "Partial Content", "success" }, \ { 207, "Partial Update OK", "success" }, \ { 300, "Multiple Choices", "redirection" }, \ { 301, "Moved Permanently", "redirection" }, \ { 302, "Found", "redirection" }, \ { 303, "See Other", "redirection" }, \ { 304, "Not Modified", "redirection" }, \ { 305, "Use Proxy", "redirection" }, \ { 306, "Proxy Redirect", "redirection" }, \ { 307, "Temporary Redirect", "redirection" }, \ { 400, "Bad Request", "client_error" }, \ { 401, "Unauthorized", "client_error" }, \ { 402, "Payment Required", "client_error" }, \ { 403, "Forbidden", "client_error" }, \ { 404, "Not Found", "client_error" }, \ { 405, "Method Not Allowed", "client_error" }, \ { 406, "Not Acceptable", "client_error" }, \ { 407, "Proxy Authentication Required", "client_error" }, \ { 408, "Request Timeout", "client_error" }, \ { 409, "Conflict", "client_error" }, \ { 410, "Gone", "client_error" }, \ { 411, "Length Required", "client_error" }, \ { 412, "Precondition Failed", "client_error" }, \ { 413, "Request Entity Too Large", "client_error" }, \ { 414, "Request-URI Too Large", "client_error" }, \ { 415, "Unsupported Media Type", "client_error" }, \ { 416, "Range Not Satisfiable", "client_error" }, \ { 417, "Expectation Failed", "client_error" }, \ { 418, "Reauthentication Required", "client_error" }, \ { 419, "Proxy Reauthentication Reuired", "client_error" }, \ { 500, "Internal Server Error", "server_error" }, \ { 501, "Not Implemented", "server_error" }, \ { 502, "Bad Gateway", "server_error" }, \ { 503, "Service Unavailable", "server_error" }, \ { 504, "Gateway Timeout", "server_error" }, \ { 505, "HTTP Version not supported", "server_error" }, \ { 506, "Partial update Not Implemented", "server_error" }, \ \ /* Cache Warnings */ \ { 10, "Response is Stale", "cache" }, \ { 11, "Revalidation Failed", "cache" }, \ { 12, "Disconnected Opeartion", "cache" }, \ { 13, "Heuristic Expiration", "cache" }, \ { 14, "Transformation Applied", "cache" }, \ { 99, "Cache warning", "cache" }, \ \ /* Non-HTTP Error codes and warnings */ \ { 0, "Can't locate remote host", "internal" }, \ { 0, "No host name found", "internal" }, \ { 0, "No file name found or file not accessible", "internal" }, \ { 0, "FTP server replies", "internal" }, \ { 0, "FTP server doesn't reply", "internal" }, \ { 0, "FTP login failure", "internal" }, \ { 0, "Server timed out", "internal" }, \ { 0, "Gopher-server replies", "internal" }, \ { 0, "Data transfer interrupted", "internal" }, \ { 0, "Connection establishment interrupted", "internal" }, \ { 0, "CSO-server replies", "internal" }, \ { 0, "This is probably a HTTP server 0.9 or less","internal" }, \ { 0, "Bad, Incomplete, or Unknown Response", "internal" }, \ { 0, "Unknown access authentication scheme", "internal" }, \ { 0, "News-server replies", "internal" }, \ { 0, "Trying `ftp://' instead of `file://'", "internal" }, \ { 0, "Too many redirections", "internal" }, \ { 0, "Method not suited for automatic redirection","internal" }, \ { 0, "Premature End Of File", "internal" }, \ { 0, "Response from WAIS Server too Large - Extra lines \ ignored","internal"}, \ { 0, "WAIS-server doesn't return any data", "internal" }, \ { 0, "Can't connect to WAIS-server", "internal" }, \ { 0, "operation failed", "internal" }, \ { 0, "Wrong or unknown access scheme", "internal" }, \ { 0, "Access scheme not allowed in this context", "internal" }, \ { 0, "When you are connected, you can log in", "internal" }, \ { 0, "This version has expired and will be automatically reloaded", "internal" }, \ { 0, "Loading new rules must be explicitly acknowledged", "internal" }, \ { 0, "Automatic proxy redirection must be explicitly acknowledged", "internal" } /* ( Generate a Default Error Message ) This function provides an unformatted English string containing the possibly nested status message that explains the result of a request. This is essentially "flattening out" the information provided in the request error strack. The string must be freed by the caller. */ extern char * HTDialog_errorMessage (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input); /* ( Generate a Default Progress Notification Message ) This function provides a string containin an English progress message that the application can present to the user if desired. The string must be freed by the caller. */ extern char * HTDialog_progressMessage (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input); /* . Default User Interaction Handlers . You can register a set of callback functions to handle user prompting, error messages, confimations etc. Here we give a set of functions that can be used on almost anu thinkable platform. If you want to provide your own platform dependent implementation then fine :-) ( Display a message, then wait for 'YES' or 'NO' ) This function prompts the user for a confirmation on the message passed as a parameter. If the user reacts in the affirmative, returns TRUE, returns FALSE otherwise. */ extern HTAlertCallback HTConfirm; /* ( Prompt the User a Question ) Prompt for answer and get text back. Reply text is either NULL on error or a dynamic string which the caller must free. */ extern HTAlertCallback HTPrompt; /* ( Prompt for a Password ) Prompt for password without echoing the reply. Reply text is weither NULL on error or a dynamic string which the caller must free. NOTE: The current version uses getpass which on many systems returns a string of 8 or 16 bytes. */ extern HTAlertCallback HTPromptPassword; /* ( Prompt for a UserID and a Password ) This is just a composite function using HTPrompt and HTPromptPassword. The strings returned must be freed by caller. */ extern HTAlertCallback HTPromptUsernameAndPassword; /* ( Display a Message ) This function simply puts out the message passed. */ extern HTAlertCallback HTAlert; /* ( Progress Notification ) This function can be used to indicate the current status of a certain action. In order to avoid having strings directly in the core parts of the Library, this function is passed a "state" argument from which the message can be generated in this module. The "param" argument is for additional information to be passed. */ extern HTAlertCallback HTProgress; /* ( Generating a User Error Message of a request ) This function outputs the content of the error list to standard output (used in Line Mode Browser), but smart clients and servers might overwrite this function so that the error messages can be handled to the user in a nice(r) way. That is the reason for putting the actual implementation in HTAlert.c. */ extern HTAlertCallback HTError_print; /* ( Generating a Server Error Message of a request ) Default function that creates an error message using HTAlert() to put out the contents of the error_stack messages. Furthermore, the error_info structure contains a name of a help file that might be put up as a link. This file can then be multi-linguistic. */ extern BOOL HTError_response (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply); /* */ #endif /* HTDIALOG_H */ /* @(#) $Id: HTDialog.html,v 2.9 2025/04/01 19:35:39 frystyk Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTDigest.h�����������������������������������������������������������������������0100644�0000764�0000144�00000003152�07405520455�015577� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Generic Message Digest Interface ! Generic Message Digest Interface ! */ /* ** (c) COPYRIGHT W3C, INRIA 1998. ** Please first read the full copyright statement in the file COPYRIGHT. */ /* Contains a generic interface to the message digest algorithms, inspired from the RSA-Euro toolkit. For the moment, it only covers MD5. SHA and other algorithms could be added later on. This code is only used during message digest authentication. AUTHORS: JK Jose Kahan jose@w3.org HISTORY: Dec 98 JK Created the module from scratch This module is implemented by HTDigest.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTDigest_H #define HTDigest_H /* Library include files */ #include "WWWLib.h" /* add the MD algorithm header files here below */ #include "md5.h" /* . Interface to message digest algorithms . The list of known message digest algorithms */ #define HTDaMD5 1 /* This is our general digest context structure. If you add a new algorithm, include its context in the union. */ typedef struct _HTDigestContext { int algorithm; union { MD5_CTX md5; } context; } HTDigestContext; /* This is a set of generic functions for generating a message digest */ extern BOOL HTDigest_init (HTDigestContext *context, int digesttype); extern BOOL HTDigest_update (HTDigestContext *context, char *input, unsigned int inputLen); extern BOOL HTDigest_final (unsigned char *digest, HTDigestContext *context); /* */ #endif /* NOT HTDigest_H */ /* @(#) $Id: HTDigest.html,v 2.3 2025/02/22 15:54:19 kahan Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTDir.h��������������������������������������������������������������������������0100644�0000764�0000144�00000005646�07405520455�015110� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww DIRECTORY BROWSING !Directory Browsing! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The directory manager generates directory listings for FTP and HTTP requests. This module contains the protocol independent code and it produces the HTML object. It is only included if either the FTP or the File module is included. This module is implemented by HTDir.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTDIR_H #define HTDIR_H #include "HTReq.h" #include "HTIcons.h" /* .What Should the Listings Look Like?. If the HT_DS_DES is set then the Description field is added as the last column in the listing. File descriptions are queried from the HTDescript module. Make a full mask by adding/oring the following flags: */ typedef enum _HTDirShow { HT_DS_SIZE = 0x1, /* Show file size using K, M and G? */ HT_DS_DATE = 0x2, /* Show last modified date? */ HT_DS_HID = 0x4, /* Show hidden files? */ HT_DS_DES = 0x8, /* Show descriptions? */ HT_DS_ICON = 0x10, /* Show icons? */ HT_DS_HOTI = 0x20 /* Are Icons hot or cold? */ } HTDirShow; typedef enum _HTDirKey { HT_DK_NONE = 0, /* No sorting */ HT_DK_CSEN = 1, /* Case sensitive */ HT_DK_CINS = 2 /* Case insensitive */ } HTDirKey; /* (Length of Filenames and Descriptions) The module automatically ajusts the width of the directory listing as a function of the file name. The width can flows dynamically between an upper and a lower limit. The maximum length of this field is specified by */ extern BOOL HTDir_setWidth (int minfile, int maxfile); /* .The Directory Object. The directory object handles the generation of a directory listing. It is a bit like a stream in that it accept data, but it must be formatted in a special way which makes the normal stream architecture inadequate. (Width of File Names) The module automatically ajusts the width of the directory listing as a function of the file name. The width can flows dynamically between an upper and a lower limit. */ extern BOOL HTDir_setWidth (int minfile, int maxfile); /* (Create a Directory Object) Creates a structured stream object and sets up the initial HTML stuff Returns the dir object if OK, else NULL */ typedef struct _HTDir HTDir; extern HTDir * HTDir_new (HTRequest * request, HTDirShow show, HTDirKey key); /* (Add a Line to the List) This function accepts a directory line. "data" and "size", and "description" can all be NULL. Returns YES if OK, else NO */ extern BOOL HTDir_addElement (HTDir *dir, char *name, char *date, char *size, HTFileMode mode); /* (Free a Directory Obejct) If we are sorting then do the sorting and put out the list, else just append the end of the list. */ extern BOOL HTDir_free (HTDir * dir); /* */ #endif /* HTDIR */ /* @(#) $Id: HTDir.html,v 2.5 2025/05/14 02:10:23 frystyk Exp $ */ ������������������������������������������������������������������������������������������libwww/Library/src/HTEPtoCl.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001416�07405520455�015507� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Callback Stream Callbacks ! External Parser Callbacks ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* An interface between the XParse module and the Application. This module contains the interface between the XParse module and the client. The dummy function is only here so that clients that use the XParse module can overwrite it. See also HTXParse This module is implemented by HTEPtoCl.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTEPTOCLIENT_H #define HTEPTOCLIENT_H #include "HTStream.h" #include "HTXParse.h" extern CallClient HTCallClient; #endif /* @(#) $Id: HTEPtoCl.html,v 2.14 2025/02/14 04:00:10 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTError.h������������������������������������������������������������������������0100644�0000764�0000144�00000020703�07405520455�015452� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Error Class ! The Error Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Error class provides an easy API for registering errors ocurring while libwww serves a request. All errors are registered in an "error stack"&nbsp;in the Request object which allows for nested errors. The Error class is both natural language independent and application independent in that it uses enumerations in order to refer to specific errors. It is for the application to provide an error presentation module which interprets the errors associated with a request. An eample of such an implementation can be found in the HTDialog module. This module is implemented by HTError.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTERROR_H #define HTERROR_H typedef struct _HTError HTError; typedef enum _HTSeverity { ERR_UNKNOWN = 0x0, ERR_FATAL = 0x1, ERR_NON_FATAL = 0x2, ERR_WARN = 0x4, ERR_INFO = 0x8 } HTSeverity; #include "HTReq.h" /* . The Error Message Object . An error consists of a messsage code, a short, natural language specific message, and a URI which can point to more information. This module also provides a default set of error objects with English text. Errors are registered together with a severity and you can also set the mode for what class of error severities should be shown and which should be ignored. */ typedef struct _HTErrorMessage { int code; /* Error number */ char * msg; /* Short explanation */ char * url; /* Explaning URL */ } HTErrorMessage; /* ( Error Message Index ) Note: All non-HTTP error codes have (index number > HTERR_HTTP_CODES), and they will not be shown in the error-message generated. Error codes are registered in an array where the following enumerations serve as an index. They must not be replaced! See the HTDialog module for default initialization of these messages. */ typedef enum _HTErrorElement { HTERR_CONTINUE = 0, /* 100 */ HTERR_SWITCHING, /* 101 */ HTERR_OK, /* 200 */ HTERR_CREATED, /* 201 */ HTERR_ACCEPTED, /* 202 */ HTERR_NON_AUTHORITATIVE, /* 203 */ HTERR_NO_CONTENT, /* 204 */ HTERR_RESET, /* 205 */ HTERR_PARTIAL, /* 206 */ HTERR_PARTIAL_OK, /* 207 */ HTERR_MULTIPLE, /* 300 */ HTERR_MOVED, /* 301 */ HTERR_FOUND, /* 302 */ HTERR_METHOD, /* 303 */ HTERR_NOT_MODIFIED, /* 304 */ HTERR_USE_PROXY, /* 305 */ HTERR_PROXY_REDIRECT, /* 306 */ HTERR_TEMP_REDIRECT, /* 307 */ HTERR_BAD_REQUEST, /* 400 */ HTERR_UNAUTHORIZED, /* 401 */ HTERR_PAYMENT_REQUIRED, /* 402 */ HTERR_FORBIDDEN, /* 403 */ HTERR_NOT_FOUND, /* 404 */ HTERR_NOT_ALLOWED, /* 405 */ HTERR_NONE_ACCEPTABLE, /* 406 */ HTERR_PROXY_UNAUTHORIZED, /* 407 */ HTERR_TIMEOUT, /* 408 */ HTERR_CONFLICT, /* 409 */ HTERR_GONE, /* 410 */ HTERR_LENGTH_REQUIRED, /* 411 */ HTERR_PRECON_FAILED, /* 412 */ HTERR_TOO_BIG, /* 413 */ HTERR_URI_TOO_BIG, /* 414 */ HTERR_UNSUPPORTED, /* 415 */ HTERR_BAD_RANGE, /* 416 */ HTERR_EXPECTATION_FAILED, /* 417 */ HTERR_REAUTH, /* 418 */ HTERR_PROXY_REAUTH, /* 419 */ HTERR_INTERNAL, /* 500 */ HTERR_NOT_IMPLEMENTED, /* 501 */ HTERR_BAD_GATE, /* 502 */ HTERR_DOWN, /* 503 */ HTERR_GATE_TIMEOUT, /* 504 */ HTERR_BAD_VERSION, /* 505 */ HTERR_NO_PARTIAL_UPDATE, /* 506 */ /* Cache warnings */ HTERR_STALE, /* 10 */ HTERR_REVALIDATION_FAILED, /* 11 */ HTERR_DISCONNECTED_CACHE, /* 12 */ HTERR_HEURISTIC_EXPIRATION, /* 13 */ HTERR_TRANSFORMED, /* 14 */ HTERR_CACHE, /* 99 */ /* Put all non-HTTP status codes after this */ HTERR_NO_REMOTE_HOST, HTERR_NO_HOST, HTERR_NO_FILE, HTERR_FTP_SERVER, HTERR_FTP_NO_RESPONSE, HTERR_FTP_LOGIN_FAILURE, HTERR_TIME_OUT, HTERR_GOPHER_SERVER, HTERR_INTERRUPTED, HTERR_CON_INTR, HTERR_CSO_SERVER, HTERR_HTTP09, HTERR_BAD_REPLY, HTERR_UNKNOWN_AA, HTERR_NEWS_SERVER, HTERR_FILE_TO_FTP, HTERR_AUTO_REDIRECT, HTERR_MAX_REDIRECT, HTERR_EOF, HTERR_WAIS_OVERFLOW, HTERR_WAIS_MODULE, HTERR_WAIS_NO_CONNECT, HTERR_SYSTEM, HTERR_CLASS, HTERR_ACCESS, HTERR_LOGIN, HTERR_CACHE_EXPIRED, HTERR_NO_AUTO_RULES, HTERR_NO_AUTO_PROXY, HTERR_ELEMENTS /* This MUST be the last element */ } HTErrorElement; /* ( Default English Language Messages ) Default set of error messages arranged in an array into which the index codes serve as index. See the HTDialog module for default initialization of these strings. . What Errors should be Ignored or Passed Through? . This variable dictates which errors should be put out when generating the message to the user. The first four enumerations make it possible to see `everything as bad or worse than' this level, e.g. HT_ERR_SHOW_NON_FATAL shows messages of type HT_ERR_SHOW_NON_FATAL and HT_ERR_SHOW_FATAL. Note: The default value is made so that it only puts a message to stderr if a `real' error has occurred. If a separate widget is available for information and error messages then probably HT_ERR_SHOW_DETAILED would be more appropriate. */ typedef enum _HTErrorShow { HT_ERR_SHOW_FATAL = 0x1, HT_ERR_SHOW_NON_FATAL = 0x3, HT_ERR_SHOW_WARNING = 0x7, HT_ERR_SHOW_INFO = 0xF, HT_ERR_SHOW_PARS = 0x10, HT_ERR_SHOW_LOCATION = 0x20, HT_ERR_SHOW_IGNORE = 0x40, HT_ERR_SHOW_FIRST = 0x80, HT_ERR_SHOW_LINKS = 0x100, HT_ERR_SHOW_DEFAULT = 0x13, HT_ERR_SHOW_DETAILED = 0x1F, HT_ERR_SHOW_DEBUG = 0x7F } HTErrorShow; extern HTErrorShow HTError_show (void); extern BOOL HTError_setShow (HTErrorShow mask); /* . Creation and Deletion Methods . ( Add an Error ) Add an error message to the error list. `par' and `where' might be set to NULL. If par is a string, it is sufficient to let length be unspecified, i.e., 0. If only a part of the string is wanted then specify a length inferior to strlen((char *) par). The string is '\0' terminated automaticly. See also HTError_addSystem for system errors. Returns YES if OK, else NO. */ extern BOOL HTError_add (HTList * list, HTSeverity severity, BOOL ignore, int element, void * par, unsigned int length, char * where); /* ( Add a System Error ) Add a system error message to the error list. syscall is the name of the system call, e.g. "close". The message put to the list is that corresponds to the error number passed. See also HTError_add. Returns YES if OK, else NO. */ extern BOOL HTError_addSystem (HTList * list, HTSeverity severity, int errornumber, BOOL ignore, char * syscall); /* ( Delete an Entire Error Stack ) Deletes all errors in a list. */ extern BOOL HTError_deleteAll (HTList * list); /* ( Deletes the Last Edded Entry ) Deletes the last error entry added to the list. Return YES if OK, else NO */ extern BOOL HTError_deleteLast (HTList * list); /* . Object Methods . ( Show the Error Entry? ) Should we show this entry in the list or just continue to the next one? */ extern BOOL HTError_doShow (HTError * info); /* ( Ignore last Added Error ) Turns on the `ignore' flag for the most recent error entered the error list. Returns YES if OK else NO */ extern BOOL HTError_ignoreLast (HTList * list); extern BOOL HTError_setIgnore (HTError * info); /* ( Error Index Number ) Each error object is assigned an index number as defined by the HTErrorElement above. The mapping from this index to an error code and a message must be done by the application. The Library provides a default implementation in the HTDialog module, but that can of course be changed depending on the application. */ extern int HTError_index (HTError * info); /* ( Error Severity ) This function returns the severity of the error object passed by the caller */ extern HTSeverity HTError_severity (HTError * info); /* You can ask whether a list of errors contains any error object with a severity level which is higher than the one specifed. */ extern BOOL HTError_hasSeverity (HTList * list, HTSeverity severity); /* ( Parameters Asscotiated with Error ) */ extern void * HTError_parameter (HTError * info, int * length); /* ( Where did it happen? ) */ extern const char * HTError_location (HTError * info); /* */ #endif /* HTERROR_H */ /* @(#) $Id: HTError.html,v 2.50 2025/04/01 19:35:39 frystyk Exp $ */ �������������������������������������������������������������libwww/Library/src/HTEscape.h�����������������������������������������������������������������������0100644�0000764�0000144�00000003707�07405520455�015566� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww URIs ! Escape and Unescape Illegal Characters in URIs ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* URLs are written only with the graphic printable characters of the US-ASCII coded character set. All other characters must be escaped before they can be used in URLs. This module defines the methods required for escaping and unescaping the URLs. Internally in the Library, all URLs are escaped so that we never see illegal characters in the URL handled by the Library. We only unescape the URLs when we have to, for example while taking to the local file system etc. This module is implemented by HTEscape.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTESCAPE_H #define HTESCAPE_H /* . Encode Unacceptable Characters using %xy . This function takes a string containing any sequence of ASCII characters, and returns a malloced string containing the same infromation but with all "unacceptable" characters represented in the form %xy where x and y are two hex digits. */ typedef enum _HTURIEncoding { URL_XALPHAS = 0x1, /* Escape all unsafe characters */ URL_XPALPHAS = 0x2, /* As URL_XALPHAS but allows '+' */ URL_PATH = 0x4, /* As URL_XPALPHAS but allows '/' */ URL_DOSFILE = 0x8 /* As URL_URLPATH but allows ':' */ } HTURIEncoding; extern char * HTEscape (const char * str, HTURIEncoding mask); /* . Convert a single Character from Ascii Hex to Char . */ extern char HTAsciiHexToChar (char c); /* . Decode %xy Escaped Characters . This function takes a pointer to a string in which character smay have been encoded in %xy form, where xy is the acsii hex code for character 16x+y. The string is converted in place, as it will never grow. */ extern char * HTUnEscape (char * str); /* */ #endif /* HTESCAPE_H */ /* @(#) $Id: HTEscape.html,v 2.17 2025/05/24 23:03:13 frystyk Exp $ */ ���������������������������������������������������������libwww/Library/src/HTEvent.h������������������������������������������������������������������������0100644�0000764�0000144�00000020207�07405520455�015441� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Event Class ! The Event Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Event Class defines any event manager to be used by libwww for handling events. An event is not strictly defined as it is highly platform dependent and hence out of scope for the Library. If you are using the libwww pseudo threads on Unix then an event is when the&nbsp;select() system call returns a notification on&nbsp;a socket descriptor, but it may as well be an asynchronous event from the windows manager etc. If your application is not using anything but traditional blocking sockets then you do not need an event manager at all. In that case, libwww will block on any socket or system call until the process can proceed. The libwww interface to an event manager is very simple as it consists of registering a socket descriptor, the location in the program, and the current state when an operation (for example read) would block. When the event manager at a later point in time gets a notification that the socket has become ready, it can then call libwww with the state saved from the registration and libwww can continue. Second, libwww must be able to unregister a socket when it is not anymore in a state where it can block. Only in case the application wishes to use non-blocking sockets it should register methods for handling the registration process as described below. Note: The library core does not define any event manager - it is considered part of the application. The library comes with a default event manager which can be initiated using the function HTEventInit() in HTInit module This module is implemented by HTEvent.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTEVENT_H #define HTEVENT_H #include "wwwsys.h" #ifdef IN_EVENT typedef struct _HTTimer HTTimer; #endif typedef enum _HTPriority { HT_PRIORITY_INV = -1, HT_PRIORITY_OFF = 0, HT_PRIORITY_MIN = 1, HT_PRIORITY_MAX = 20 } HTPriority; #define HTEVENT_INDEX 0x10 typedef enum { #ifdef WWW_WIN_ASYNC HTEvent_READ = (0x001 | 0 << HTEVENT_INDEX), HTEvent_WRITE = (0x002 | 1 << HTEVENT_INDEX), HTEvent_OOB = (0x004 | 2 << HTEVENT_INDEX), HTEvent_ACCEPT = (0x008 | 3 << HTEVENT_INDEX), HTEvent_CONNECT = (0x010 | 4 << HTEVENT_INDEX), HTEvent_CLOSE = (0x020 | 5 << HTEVENT_INDEX), HTEvent_TYPES = 6, /* winsock has seperate events for all of these */ #define HTEVENT_TYPES 6 /* use in constructing the fake event below */ #else /* WWW_WIN_ASYNC */ HTEvent_READ = (0x001 | 0 << HTEVENT_INDEX), HTEvent_ACCEPT = (0x002 | 0 << HTEVENT_INDEX), HTEvent_CLOSE = (0x004 | 0 << HTEVENT_INDEX), HTEvent_WRITE = (0x008 | 1 << HTEVENT_INDEX), HTEvent_CONNECT = (0x010 | 1 << HTEVENT_INDEX), HTEvent_OOB = (0x020 | 2 << HTEVENT_INDEX), HTEvent_TYPES = 3, /* only READ, WRITE, and OOB are real types */ #define HTEVENT_TYPES 3 /* use in constructing the fake event below */ #endif /* !WWW_WIN_ASYNC */ /* ** fake events - these don't correspond to event manager events, but they ** are usefull for communicating with the protocol modules */ HTEvent_TIMEOUT = (0x040 | HTEVENT_TYPES << HTEVENT_INDEX), HTEvent_BEGIN = (0x000 | HTEVENT_TYPES << HTEVENT_INDEX), HTEvent_END = (0x080 | HTEVENT_TYPES << HTEVENT_INDEX), HTEvent_FLUSH = (0x100 | HTEVENT_TYPES << HTEVENT_INDEX), HTEvent_RESET = (0x200 | HTEVENT_TYPES << HTEVENT_INDEX), HTEvent_ALL = 0xFFFF } HTEventType; #define HTEvent_BITS(type) (type & 0xFFFF) #define HTEvent_INDEX(type) (type >> HTEVENT_INDEX) #define HT_EVENT_INITIALIZER \ {HTEvent_READ, "HTEvent_READ"}, \ {HTEvent_ACCEPT, "HTEvent_ACCEPT"}, \ {HTEvent_CLOSE, "HTEvent_CLOSE"}, \ {HTEvent_WRITE, "HTEvent_WRITE"}, \ {HTEvent_CONNECT, "HTEvent_CONNECT"}, \ {HTEvent_OOB, "HTEvent_OOB"}, \ {HTEvent_TIMEOUT, "HTEvent_TIMEOUT"}, \ {HTEvent_BEGIN, "HTEvent_BEGIN"}, \ {HTEvent_END, "HTEvent_END"}, \ {HTEvent_FLUSH, "HTEvent_FLUSH"}, \ {HTEvent_RESET, "HTEvent_RESET"} extern char * HTEvent_type2str(HTEventType type); /* . Event Handlers . A location is a function that can be registered by the event manager and called at a later point in time in order to continue an operation. All locations must be of type &nbsp;HTEventCallback as defined here: */ typedef int HTEventCallback (SOCKET, void *, HTEventType); typedef struct _HTEvent HTEvent; /* Avoid circular include for HTReq->HTNet->HTHost: HTEvent blah */ #include "HTReq.h" /* There are many default event handlers provided with the Library. For example, all the protocol modules such as the HTTP client module are implemented as event handlers. In stead of using blocking sockets, this allows a protocol module to register itself when performing an operation that would block. When the sockets becomes ready the handler is called with th socket in question, the request object, and the socket operation &nbsp; . Registering and Unregistering Events . As mentioned above, the only interface libwww requires from an event manager is a method to register an event when an operation would block and unregister it when the operation has completed The library registers and unregisters events by calling the following two functions: */ extern int HTEvent_register (SOCKET, HTEventType, HTEvent *); extern int HTEvent_unregister (SOCKET, HTEventType); /* The register function contains information about which socket we are waiting on to get ready and which operation we are waiting for (read, write, etc.), the request object containing the current request, the event handler that we want to be called when the socket becomes reasy, and finally the priority by which we want the thread to be processed by the event manager. Likewise, libwww can unregister a operation on a socket which means that libwww is no longer waiting for this actiion to become ready. . Registering an Event Manager . Libwww core does not contain any event manager as it depends on whether you want to use pseudo threads no threads, or real threads. Instead, libwww comes with a default implementation that you may register, but you may as well implement and register your own. The register and unregister functions above actually does nothing than looking for a registered event manager and then passes the call on to that. You register your own event manager by using the methods below: */ typedef int HTEvent_registerCallback(SOCKET, HTEventType, HTEvent *); typedef int HTEvent_unregisterCallback(SOCKET, HTEventType); extern void HTEvent_setRegisterCallback(HTEvent_registerCallback *); extern void HTEvent_setUnregisterCallback(HTEvent_unregisterCallback *); /* ( Has Register and Unregister Callbacks been setup? ) Replies YES if both an HTEvent_setRegisterCallback and HTEvent_setUnregisterCallback have been called with non NULL callbacks. */ extern BOOL HTEvent_isCallbacksRegistered(void); /* . Create and Delete Events . */ extern HTEvent * HTEvent_new (HTEventCallback * cbf, void * context, HTPriority pritority, int timeoutInMillis); extern BOOL HTEvent_delete (HTEvent * event); /* ( Event Timeouts, Priorities, Callbacks, and Contexts ) Normally, these are set when creating the event. */ extern BOOL HTEvent_setParam(HTEvent * event, void * param); extern BOOL HTEvent_setPriority(HTEvent * event, HTPriority priority); extern BOOL HTEvent_setTimeout(HTEvent * event, int timeoutInMillis); extern BOOL HTEvent_setCallback(HTEvent * event, HTEventCallback * cbf); /* . The Raw Event Type . Don't use this directly, use the methods above instead. */ struct _HTEvent { HTPriority priority; /* Priority of this request (event) */ int millis; /* Timeout in ms for this event */ #ifdef IN_EVENT HTTimer * timer; #endif HTEventCallback * cbf; /* Protocol state machine */ void * param; /* HTEvent_register parameter */ HTRequest * request; }; /* You can register the event manager provided together with libwww by using the HTEventInit() in the HTInit module */ #endif /* HTEVENT_H */ /* @(#) $Id: HTEvent.html,v 2.17 2025/08/10 02:42:12 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTEvtLst.h�����������������������������������������������������������������������0100644�0000764�0000144�00000010003�07405520455�015572� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Default Event Manager ! Default Event Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides a default event registry and an eventloop which may be used by an application if desired. See also the libwww timers defined in the HTTimer module. An application may use this module for: o Eventloop and registry - Application registers HTEvntrg_register and HTEvntrg_unregister and calls HTEventList_loop to dispatch events as they occur. o Event registry - Application just registers its own event handlers and chains them to HTEvntrg_register and HTEvntrg_unregister. When the application's eventloop gets activity on a socket, it calls HTEvent_dispatch to handle it. o Nothing - Application registers its own event handler uses its own eventloop to dispatch those events. This module is implemented by HTEvtLst.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTEVTLST_H #define HTEVTLST_H #include "wwwsys.h" #include "HTEvent.h" #include "HTReq.h" /* ( Windows Specific Handles ) */ #if defined(WWW_WIN_ASYNC) || defined(WWW_WIN_DLL) extern BOOL HTEventList_winHandle (HTRequest * request); extern BOOL HTEventList_setWinHandle (HWND window, unsigned long message); extern HWND HTEventList_getWinHandle (unsigned long * pMessage); extern LRESULT CALLBACK AsyncWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); #endif /* . Event Registry . The libwww event registry binds a socket and operation (FD_READ, FD_WRITE, ...) to a callback function. Events are registered, unregistered, and dispatched as they come in. ( Register an Event Handler ) For a given socket, reqister a request structure, a set of operations, a HTEventCallback function, and a priority. For this implementation, we allow only a single HTEventCallback function for all operations. and the priority field is ignored. */ extern HTEvent_registerCallback HTEventList_register; /* ( Unregister an Event Handler ) Remove the registered information for the specified socket for the actions specified in ops. if no actions remain after the unregister, the registered info is deleted, and, if the socket has been registered for notification, the HTEventCallback will be invoked. */ extern HTEvent_unregisterCallback HTEventList_unregister; /* ( Unregister ALL Event Handlers ) Unregister all sockets. N.B. we just remove them for our internal data structures: it is up to the application to actually close the socket. */ extern int HTEventList_unregisterAll (void); /* ( Lookup and Dispatch Event Handlers ) Callbacks can be looked up or dispatched based on the socket and operation (read/write/oob) */ extern int HTEventList_dispatch (SOCKET s, HTEventType type, ms_t now); extern HTEvent * HTEventList_lookup (SOCKET s, HTEventType type); /* . Libwww Default EventLoop . The libwww default eventloop dispatches events to the event registry. ( Start and Stop the Event Manager ) */ extern BOOL HTEventInit (void); extern BOOL HTEventTerminate (void); /* ( Start the Eventloop ) That is, we wait for activity from one of our registered channels, and dispatch on that. Under Windows/NT, we must treat the console and sockets as distinct. That means we can't avoid a busy wait, but we do our best. */ extern int HTEventList_newLoop (void); /* The next version is an old version of the eventloop start. The request is not used for anything and can be NULL. */ extern int HTEventList_loop (HTRequest * request); /* ( Stop the Eventloop ) Stops the (select based) eventloop immediately. The function does not guarantee that all requests have terminated so it is important that the application does this before this function is called. This can be done using the HTNet_isIdle() function in the HTNet Module */ extern void HTEventList_stopLoop (void); /* */ #endif /* HTEVTLST_H */ /* @(#) $Id: HTEvtLst.html,v 2.7 2025/11/21 02:44:42 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTFSave.h������������������������������������������������������������������������0100644�0000764�0000144�00000003656�07405520455�015375� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww ANSI C File Streams ! Basic ANSI C File Writer Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module contains some local file writer streams based on the basic file writer stream defined in the HTFWrite module. They can be used to do save-as, save-and-callback etc. This module is implemented by HTFSave.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTFSAVE_H #define HTFSAVE_H #include "HTFWrite.h" /* . Various Converters using the File Writer Stream . This is a set of functions that can be registered as converters. They all use the basic ANSI C file writer stream for writing out to the local file system. */ extern HTConverter HTSaveAndExecute, HTSaveLocally, HTSaveAndCallback; /* HTSaveLocally Saves a file to local disk. This can for example be used to dump date objects of unknown media types to local disk. The stream prompts for a file name for the temporary file. HTSaveAndExecute Creates temporary file, writes to it and then executes system command (maybe an external viewer) when EOF has been reached. The stream finds a suitable name of the temporary file which preserves the suffix. This way, the system command can find out the file type from the name of the temporary file name. HTSaveAndCallback This stream works exactly like the HTSaveAndExecute stream but in addition when EOF has been reached, it checks whether a callback function has been associated with the request object in which case, this callback is being called. This can be use by the application to do some processing after the system command has terminated. The callback function is called with the file name of the temporary file as parameter. */ #endif /* @(#) $Id: HTFSave.html,v 2.1 2025/02/07 18:26:23 frystyk Exp $ */ ����������������������������������������������������������������������������������libwww/Library/src/HTFTP.h��������������������������������������������������������������������������0100644�0000764�0000144�00000003342�07405520455�015012� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww FTP CLIENT !FTP access functions! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the FTP load module that handles all communication with FTP-servers. This module is implemented by HTFTP.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTFTP_H #define HTFTP_H #include "HTProt.h" extern HTProtCallback HTLoadFTP; typedef enum _FTPServerType { FTP_GENERIC = 0x1, FTP_MACHTEN = 0x2, FTP_UNIX = 0x4, FTP_VMS = 0x8, FTP_CMS = 0x10, FTP_DCTS = 0x20, FTP_TCPC = 0x40, FTP_PETER_LEWIS = 0x80, FTP_NCSA = 0x200, FTP_WINNT = 0x400, FTP_UNSURE = 0x8000 } FTPServerType; #define MAX_FTP_LINE 128 /* Don't use more than this */ /* . Global Transfer Mode . Can be used to set the default transfer mode overruling what may be indicated in the FTP URL. Added by Neil Griffin, GAIN Software */ typedef enum _FTPTransferMode { FTP_DEFAULT_TRANSFER_MODE = 0, FTP_ASCII_TRANSFER_MODE = 1, FTP_BINARY_TRANSFER_MODE = 2, FTP_DIR_TRANSFER_MODE = 3 } FTPTransferMode; extern FTPTransferMode HTFTP_transferMode (void); extern void HTFTP_setTransferMode (FTPTransferMode mode); /* . Global Control Mode . Can be used to set the default control modes for various FTP settings like always aski for user name and password, etc. */ typedef enum _FTPControlMode { FTP_DEFAULT_CONTROL_MODE = 0, FTP_ALWAYS_ASK_UID_PW = 1 } FTPControlMode; extern FTPControlMode HTFTP_controlMode (void); extern void HTFTP_setControlMode (FTPControlMode mode); /* */ #endif /* @(#) $Id: HTFTP.html,v 2.40 2025/05/19 16:49:26 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTFTPDir.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001162�07405520455�015447� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww FTP DIRECTORY LISTING !FTP Directory Listings! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module converts a FTP directory listing to a HTML object This module is implemented by HTFTPDir.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTFTPDIR_H #define HTFTPDIR_H #include "HTStream.h" #include "HTFTP.h" extern HTStream * HTFTPDir_new (HTRequest * request, FTPServerType server, char list); #endif /* @(#) $Id: HTFTPDir.html,v 2.5 2025/05/14 02:10:27 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTFWrite.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001747�07405520455�015570� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww ANSI C File Streams ! Basic ANSI C File Writer Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module contains a basic file writer stream that can be used to dump data objects to local disk. See also the various subclasses of this basic stream which can be used to do save-as, save-and-callback etc. in the HTFSave module This module is implemented by HTFWrite.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTFWRITE_H #define HTFWRITE_H #include "HTStream.h" #include "HTReq.h" /* . Basic ANSI C File Writer Stream . This function puts up a new stream given an open file descripter. If the file is not to be closed afterwards, then set leave_open=NO. */ extern HTStream * HTFWriter_new ( HTRequest * request, FILE * fp, BOOL leave_open); /* */ #endif /* @(#) $Id: HTFWrite.html,v 2.23 2025/02/07 18:26:23 frystyk Exp $ */ �������������������������libwww/Library/src/HTFile.h�������������������������������������������������������������������������0100644�0000764�0000144�00000003724�07405520455�015244� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Local File Access ! Local File Access ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* These are routines for local file access used by WWW browsers and servers. This module is implemented by HTFile.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTFILE_H #define HTFILE_H #include "HTProt.h" extern HTProtCallback HTLoadFile; /* . Directory Access . You can define the directory access for file URLs by using the following function. */ typedef enum _HTDirAccess { HT_DIR_FORBID, /* Altogether forbidden */ HT_DIR_SELECTIVE, /* Only if "selfile" exists */ HT_DIR_OK /* Directory reading always OK */ } HTDirAccess; #define DEFAULT_DIR_FILE ".www_browsable" /* If exists, can browse */ extern HTDirAccess HTFile_dirAccess (void); extern BOOL HTFile_setDirAccess (HTDirAccess mode); /* . Readme Files . You can specify the module to look for a README file and to put into a directory listing. These are the possibilities: */ typedef enum _HTDirReadme { HT_DIR_README_NONE, HT_DIR_README_TOP, HT_DIR_README_BOTTOM } HTDirReadme; #define DEFAULT_README "README" extern HTDirReadme HTFile_dirReadme (void); extern BOOL HTFile_setDirReadme (HTDirReadme mode); /* . Should we do Automatic File Suffix Binding? . By default, libwww uses the file suffix bindings to figure out the media type, natural language, charset, content encoding, etc and assign the values to the anchor of the local file. However, in some situations, the application can either already have done this or isn't interested in using the libwww bindings. You can control whether libwww should do thi or not using the following methods: */ extern BOOL HTFile_doFileSuffixBinding (BOOL mode); extern BOOL HTFile_fileSuffixBinding (void); /* */ #endif /* HTFILE_H */ /* @(#) $Id: HTFile.html,v 2.40 2025/05/14 02:10:28 frystyk Exp $ */ ��������������������������������������������libwww/Library/src/HTFilter.h�����������������������������������������������������������������������0100644�0000764�0000144�00000010607�07405520455�015610� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww BEFORE and AFTER Filters ! Standard BEFORE and AFTER Filters ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides a set of default BEFORE and AFTER filters that can be registered by the Net manager to be called before and after a request. All filters can be registered either to be called globally (all requests) or locally (pr request basis). This module is implemented by HTFilter.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTFILTER_H #define HTFILTER_H #include "WWWLib.h" /* . BEFORE Filters . This is a standard set of BEFORE filters which the application may initialize. This can be done in an easy way using the function HTBeforeInit() in the Initialization interface. ( Proxy and Gateway BEFORE filter ) Checks for registerd proxy servers or gateways and sees whether this request should be redirected to a proxy or a gateway. Proxies have higher priority than gateways so we look for them first! For HTTP/1.0 and HTTP/1.1 we may only send a full URL (including the host portion) to proxy servers. Therefore, we tell the Library whether to use the full URL or the traditional HTTP one without the host part. */ extern HTNetBefore HTProxyFilter; /* ( Rule Translation BEFORE Filter ) If we have a set of rules loaded (see the Rule manager) then check before each request whether how that should be translated. The trick is that a parent anchor has a "address" which is the part from the URL we used when we created the anchor. However, it also have a "physical address" which is the place we are actually going to look for the resource. Hence this filter translates from the address to the physical address (if any translations are found) */ extern HTNetBefore HTRuleFilter; /* ( Memory Cache (History List) Validation BEFORE Filter ) Check if document is already loaded. The user can define whether the history list should follow normal expiration or work as a traditional history list where expired documents are not updated. We don't check for anything but existence proof of a document associated with the anchor as the definition is left to the application. */ extern HTNetBefore HTMemoryCacheFilter; /* ( Client side authentication BEFORE filter ) The filter generates the credentials required to access a document Getting the credentials may involve asking the user in which case we use the methods registered by the HTAlert module */ extern HTNetBefore HTCredentialsFilter; /* . AFTER Filters . Like BEFORE filters we provide a default set of typical AFTER filters that may be initialized by the application. Again, an easy way of doing this is to call the HTAfterInit() function in the Initialization interface. ( Error and Information filter ) It checks the status code from a request and generates an error/information message if required. */ extern HTNetAfter HTInfoFilter; /* ( Redirection filter ) The redirection handler only handles automatic redirections on the GET or HEAD method (or any other safe method). The users is asked for all other methods. */ extern HTNetAfter HTRedirectFilter; /* ( Proxy Redirection filter ) This filter handles a "305 Use Proxy" response and retries the request through the proxy */ extern HTNetAfter HTUseProxyFilter; /* ( Client side authentication filter ) The client side authentication filter uses the user dialog messages registered in the HTAlert module. By default these are the ones used by the line mode browser but you can just register something else. */ extern HTNetAfter HTAuthFilter; /* ( Client side authentication information filter ) This filter updates the client's local authentication information database with new information sent by the server via the authentication-info header. This header is currently used only by the Digest authentication scheme. This filter is initialized by default, but you can just register something else. */ extern HTNetAfter HTAuthInfoFilter; /* ( Request Common Log File Filter ) Default Logging filter using the log manager provided by the Log Manager. */ extern HTNetAfter HTLogFilter; /* ( Request Referer Log File Filter ) Default Referer Log filter using the log manager provided by the Log Manager. */ extern HTNetAfter HTRefererFilter; /* */ #endif /* HTFILTER_H */ /* @(#) $Id: HTFilter.html,v 2.13 2025/02/03 16:35:11 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTFormat.h�����������������������������������������������������������������������0100644�0000764�0000144�00000055163�07405520455�015621� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Stream Pipe Manager ! The Stream Pipe Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Stream Pipe Manager is responsible for setting up the stream pipe from the Channel Object to the Request Object when data is arriving, for example as a response to s HTTP Get request. As data arrives, we start to parse it and the more we know the more we can build up our stream pipe. For example, in the case of HTTP, we first have a stream that can parse the HTTP response line containing "200 OK". Then we have a MIME parser for handling the MIME headers. When the MIME headers have been parsed, we know the content type and any encoding of the MIME body. If we need to decode a chunked encoding then we set up a chunked decoder, and if we have to parse a HTML object then we set up a HTML parser. The Format Manager is also responsible for keeping track of the "preferences" of the application and/or user. It is an integral part of the Web and HTTP, that the client application can express its preferences as a set of "accept" headers in a HTTP request. This task is highly related to the task mentioned above as we there use the modules that are registered and here tell the remote server what we are capable of doing and what we would prefer. Note: The library core does not define any default decoders or parsers - they are all considered part of the application. The library comes with a default set of parsers including the ones mentioned above which can be initiated using the functions in HTInit module. There are different initialization functions for content type parsers and content encodings respectively. o Content Type Converters and Presenters o Content Encoders and Decoders o Content Charsets o Natural Languages The application can assign its preferences in two ways: either locally to a single request or globally to all requests. The local assignment can either add to or override the global settings depending on how they are registered. All local registration is handled by the Request Object and the global registration is handled by the Format Manager. This module is implemented by HTFormat.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTFORMAT_H #define HTFORMAT_H #include "HTUtils.h" #include "HTStream.h" #include "HTAtom.h" #include "HTList.h" #include "HTAnchor.h" #include "HTReq.h" /* . Converters and Presenters . All content type converters are subclassed from the Generic stream objetc. That way, we allow the application to do very fast progressive display of incoming data. In other words, the stream model of the Library provides data as soon as it arrives from the network, the application does not have to wait until the whole document has been down loaded before it starts parsing it. ( Predefined Content Types ) These macros (which used to be constants) define some basic internally referenced representations. The www/xxx ones are of course not MIME standard. They are internal representations used in the Library but they can't be exported to other apps! */ #define WWW_INTERNAL HTAtom_for("www/*") /* All internal formats */ /* WWW_INTERNAL represent all internal formats. This can for example be used to match using the HTMIMEMatch(...). */ #define WWW_RAW HTAtom_for("www/void") /* Raw output from Protocol */ /* WWW_RAW is an output format which leaves the input untouched exactly as it is received by the protocol module. For example, in the case of FTP, this format returns raw ASCII objects for directory listings; for HTTP, everything including the header is returned, for Gopher, a raw ASCII object is returned for a menu etc. */ #define WWW_SOURCE HTAtom_for("*/*") /* WWW_SOURCE is an output format which leaves the input untouched exactly as it is received by the protocol module IF not a suitable converter has been registered with a quality factor higher than 1 (for example 2). In this case the SUPER CONVERTER is preferred for the raw output. This can be used as a filter effect that allows conversion from, for example raw FTPdirectory listings into HTML but passes a MIME body untouched. */ #define WWW_PRESENT HTAtom_for("www/present") /* WWW_PRESENT represents the user's perception of the document. If you convert to WWW_PRESENT, you present the material to the user. */ #define WWW_DEBUG HTAtom_for("www/debug") /* WWW_DEBUG represents the user's perception of debug information, for example sent as a HTML document in a HTTP redirection message. */ #define WWW_UNKNOWN HTAtom_for("www/unknown") /* WWW_UNKNOWN is a really unknown type. It differs from the real MIME type "application/octet-stream" in that we haven't even tried to figure out the content type at this point. */ #define WWW_CACHE HTAtom_for("www/cache") #define WWW_CACHE_APPEND HTAtom_for("www/cache-append") /* WWW_CACHE is the internal content-type designated for a persistent cache module which can store the object to local storage. The cache append format is special in that we append information to an already existing cache entry. This can happen if we have issued a If-Range request and got back a "206 Partial response". These are regular MIME types defined. Others can be added! */ #define WWW_HTML HTAtom_for("text/html") #define WWW_PLAINTEXT HTAtom_for("text/plain") #define WWW_FORM HTAtom_for("application/x-www-form-urlencoded") #define WWW_MIME HTAtom_for("message/rfc822") #define WWW_MIME_HEAD HTAtom_for("message/x-rfc822-head") #define WWW_MIME_FOOT HTAtom_for("message/x-rfc822-foot") #define WWW_MIME_PART HTAtom_for("message/x-rfc822-partial") #define WWW_MIME_CONT HTAtom_for("message/x-rfc822-cont") #define WWW_MIME_UPGRADE HTAtom_for("message/x-rfc822-upgrade") #define WWW_MIME_COPYHEADERS HTAtom_for("www/x-rfc822-headers") #define WWW_AUDIO HTAtom_for("audio/basic") #define WWW_VIDEO HTAtom_for("video/mpeg") #define WWW_GIF HTAtom_for("image/gif") #define WWW_JPEG HTAtom_for("image/jpeg") #define WWW_TIFF HTAtom_for("image/tiff") #define WWW_PNG HTAtom_for("image/png") #define WWW_BINARY HTAtom_for("application/octet-stream") #define WWW_POSTSCRIPT HTAtom_for("application/postscript") #define WWW_RICHTEXT HTAtom_for("application/rtf") /* We also have some MIME types that come from the various protocols when we convert from ASCII to HTML. */ #define WWW_GOPHER_MENU HTAtom_for("text/x-gopher") #define WWW_CSO_SEARCH HTAtom_for("text/x-cso") #define WWW_FTP_LNST HTAtom_for("text/x-ftp-lnst") #define WWW_FTP_LIST HTAtom_for("text/x-ftp-list") #define WWW_NNTP_LIST HTAtom_for("text/x-nntp-list") #define WWW_NNTP_OVER HTAtom_for("text/x-nntp-over") #define WWW_NNTP_HEAD HTAtom_for("text/x-nntp-head") #define WWW_HTTP HTAtom_for("text/x-http") /* Finally we have defined a special format for our RULE files as they can be handled by a special converter. */ #define WWW_RULES HTAtom_for("application/x-www-rules") /* ( The Quality Factor ) Characteristic for all preferences is that there is a quality factor associated with each member. The quality factor is a real number between 0 and 1 with 0 meaning "very bad" and 1 means "perfect". By registering a natural language or any or other preference in this group together with a quality factor you can specify "how well the preference is handled" either by the application or by the user. In the case of the user the quality factor of a natural language is how well the user understands the language. In my case, the quality factors for, for example Greek would be close to zero and 1 for Danish (nothing bad said about Greek!). It is a bit different for converters where it is often the application's ability of handling the data format rather than the user's perception. As an example it is often faster to use a converter than a presenter as it takes time to launch the external application and libwww can not use progressive display mechanisms which is often the case for converters. Therefore, as an example, if we capable of handling an image in png format inline but rely on an external viewer for presenting postscript, we might set up the following list: HTConversion_add (converters, "image", "www/present", GifPresenter, 1.0, 0.0, 0.0); HTPresentation_add (presenters, "application/postscript", "ghostview %s", NULL, 0.5, 0.0, 0.0);> where the gif converter is registered with a quality factor of 1.0 and the postscript presenter with a quality factor of 0.5.Register Presenters ( The Converter Class ) A converter is a stream with a special set of parameters and which is registered as capable of converting from a MIME type to something else (maybe another MIME-type). A converter is defined to be a function returning a stream and accepting the following parameters. The content type elements are atoms for which we have defined a prototype. */ typedef HTStream * HTConverter (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream); extern void HTConversion_add (HTList * conversions, const char * rep_in, const char * rep_out, HTConverter * converter, double quality, double secs, double secs_per_byte); extern void HTConversion_deleteAll (HTList * list); /* ( The Presenter Class ) A presenter is a module (possibly an external program) which can present a graphic object of a certain MIME type to the user. That is, presenters are normally used to present objects that the converters are not able to handle. Data is transferred to the external program using a special "presenter stream" which for example can use the local disk to transfer the data from libwww to the external program. Libwww provides a default HTSaveAndExecute stream which you may want to use for this purpose. However, any stream that is of type HTConverter will do. You can manage the special presenter stream using the following methods: */ extern void HTPresentation_setConverter (HTConverter * pconv); extern HTConverter * HTPresentation_converter (void); /* Both presenters and converters are of the type HTConverter. */ extern void HTPresentation_add (HTList * conversions, const char * representation, const char * command, const char * test_command, double quality, double secs, double secs_per_byte); extern void HTPresentation_deleteAll (HTList * list); /* ( Basic Converters ) We have a small set of basic converters that can be hooked in anywhere. They don't "convert" anything but are nice to have. */ extern HTConverter HTThroughLine; extern HTConverter HTBlackHoleConverter; extern HTConverter HTSaveConverter; /* . Content and Transfer Encoders and Decoders . Content codins are transformations applied to an entity object after it was created in its original form. The Library handles two types of codings: Content Codings Content codings values indicate an encoding transformation that has been applied to a resource. Content cosings are primarily used to allow a document to be compressed or encrypted without loosing the identity of its underlying media type. Content Transfer Codings Content transfer codings values are used to indicate an encoding transformation that has been, can be, or may be need to be applied to an enity body in order to ensure safe transport through the network. This differs from a content coding in that the transfer coding is a property of the message, not the original message. Both types of encodings use the same registration mechanism in the Library which we describe below: ( Encoders and Decoders ) Encoders and decoders are subclassed from the generic stream class. Encoders are capable of adding a content coding to a data object and decoders can remove a content coding. */ typedef HTStream * HTCoder (HTRequest * request, void * param, HTEncoding coding, HTStream * target); /* The encoding is the name of the encoding mechanism reporesented as an atom, for example "zip", "chunked", etc. Encodings are registered in lists and content encodings are separated from transfer encodings by registering them in different lists. ( Basic Encoders ) We have a small set of basic coders that can be hooked in anywhere. */ extern HTCoder HTIdentityCoding; /* ( The HTCoding Object ) The HTCoding object represents a registered encoding together with a encoder and a decoder. */ typedef struct _HTCoding HTCoding; /* Predefined Coding Types We have a set of pre defined atoms for various types of content encodings and transfer encodings. "chunked" is not exactly in the same group as the other encodings such as "binary" but it really doesn't make any difference as it is just a matter of how the words are chosen. The first three transfer encodings are actually not encodings - they are just left overs from brain dead mail systems. */ #define WWW_CODING_7BIT HTAtom_for("7bit") #define WWW_CODING_8BIT HTAtom_for("8bit") #define WWW_CODING_BINARY HTAtom_for("binary") #define WWW_CODING_IDENTITY HTAtom_for("identity") #define WWW_CODING_BASE64 HTAtom_for("base64") #define WWW_CODING_MACBINHEX HTAtom_for("macbinhex") #define WWW_CODING_CHUNKED HTAtom_for("chunked") #define WWW_CODING_COMPRESS HTAtom_for("compress") #define WWW_CODING_GZIP HTAtom_for("gzip") #define WWW_CODING_DEFLATE HTAtom_for("deflate") /* ( Register Content Coders ) Some documents are not send in their original data obejct but is encoded in some way. On the Web this is mostly some kind of compression but other encodings for example base 64 can be encountered when talking to NNTP servers etc. Just as for the other preferences, an application can register a supported encoders or decodes as a list. Encoders and decoders are registered in the same way with no differentiation whether it is a encoder or a decoder: */ extern BOOL HTCoding_add (HTList * list, const char * encoding, HTCoder * encoder, HTCoder * decoder, double quality); extern void HTCoding_deleteAll (HTList * list); extern const char * HTCoding_name (HTCoding * me); extern double HTCoding_quality (HTCoding * me); /* . Content Charsets . As the Web reaches all parts of the Internet there are more and more documents written in languages which contains characters not included in the ISO-8859-1 character set. A consequence of this the set of characters sets is often tightly connected with the natural language. libwww does not directly support other character sets but in case an application is capable of handling alternative sets it can register these as preferred character sets along with a quality factor just as all the other preferences in this section. */ extern void HTCharset_add (HTList * list, const char * charset, double quality); /* */ typedef struct _HTAcceptNode { HTAtom * atom; double quality; } HTAcceptNode; /* */ extern void HTCharset_deleteAll (HTList * list); /* . Content Languages . The preferred natural language or languages is in almost all situations dependent on the individual user and an application should therefore give the user the opportunity to change the setup. When specifying a natural language preference, libwww will send this preference along with all HTTP requests. The remote server will then (it if supports this feature) look for a version in the language or languages mentioned. If it finds a matching document then it returns this one, otherwise it uses the best alternative. If no language is specified the remote server may whatever version it finds. */ extern void HTLanguage_add (HTList * list, const char * lang, double quality); extern void HTLanguage_deleteAll (HTList * list); /* . Global Preferences . There are two places where these preferences can be registered: in a global list valid for all requests and a local list valid for a particular request only. These are valid for all requests. See the Request Manager fro local sets. ( Global Converters and Presenters ) The global list of specific conversions which the format manager can do in order to fulfill the request. There is also a local list of conversions which contains a generic set of possible conversions. */ extern void HTFormat_setConversion (HTList * list); extern HTList * HTFormat_conversion (void); extern void HTFormat_addConversion (const char * input_format, const char * output_format, HTConverter * converter, double quality, double secs, double secs_per_byte); /* ( Global Content Codings ) */ extern void HTFormat_setContentCoding (HTList * list); extern HTList * HTFormat_contentCoding (void); extern BOOL HTFormat_addCoding ( char * encoding, HTCoder * encoder, HTCoder * decoder, double quality); /* We also define a macro to find out whether a content encoding is really an encoding or whether it is a unity encoder. */ #define HTFormat_isUnityContent(me) \ ((me)==NULL || \ (me)==WWW_CODING_BINARY || (me)==WWW_CODING_IDENTITY || \ (me)==WWW_CODING_7BIT || (me)==WWW_CODING_8BIT) /* ( Global Transfer Codings ) */ extern void HTFormat_setTransferCoding (HTList * list); extern HTList * HTFormat_transferCoding (void); extern BOOL HTFormat_addTransferCoding ( char * encoding, HTCoder * encoder, HTCoder * decoder, double quality); /* We also define a macro to find out whether a transfer encoding is really an encoding or whether it is just a "dummy" as for example 7bit, 8bit, and binary. */ #define HTFormat_isUnityTransfer(me) \ ((me)==NULL || \ (me)==WWW_CODING_BINARY || (me)==WWW_CODING_IDENTITY || \ (me)==WWW_CODING_7BIT || (me)==WWW_CODING_8BIT) /* ( Global Content Languages ) */ extern void HTFormat_setLanguage (HTList * list); extern HTList * HTFormat_language (void); /* ( Global Content Charsets ) */ extern void HTFormat_setCharset (HTList * list); extern HTList * HTFormat_charset (void); /* ( Delete All Global Lists ) This is a convenience function that might make life easier. */ extern void HTFormat_deleteAll (void); /* . The Content Type Stream Stack . This is the routine which actually sets up the content type conversion. It currently checks only for direct conversions, but multi-stage conversions are forseen. It takes a stream into which the output should be sent in the final format, builds the conversion stack, and returns a stream into which the data in the input format should be fed. If guess is true and input format is www/unknown, try to guess the format by looking at the first few bytes of the stream. */ extern HTStream * HTStreamStack (HTFormat rep_in, HTFormat rep_out, HTStream * output_stream, HTRequest * request, BOOL guess); /* ( Cost of a Stream Stack ) Must return the cost of the same stack which HTStreamStack would set up. */ extern double HTStackValue (HTList * conversions, HTFormat format_in, HTFormat format_out, double initial_value, long int length); /* . Content Encoding Stream Stack . When creating a coding stream stack, it is important that we keep the right order of encoders and decoders. As an example, the HTTP spec specifies that the list in the Content-Encoding header follows the order in which the encodings have been applied to the object. Internally, we represent the content encodings as atoms in a linked list object. The creation of the content coding stack is not based on quality factors as we don't have the freedom as with content types. When using content codings we must apply the codings specified or fail. */ extern HTStream * HTContentCodingStack (HTEncoding coding, HTStream * target, HTRequest * request, void * param, BOOL encoding); /* Here you can provide a complete list instead of a single token. The list has to be filled up in the order the _encodings_ are to be applied */ extern HTStream * HTContentEncodingStack (HTList * encodings, HTStream * target, HTRequest * request, void * param); /* Here you can provide a complete list instead of a single token. The list has to be in the order the _encodings_ were applied - that is, the same way that _encodings_ are to be applied. This is all consistent with the order of the Content-Encoding header. */ extern HTStream * HTContentDecodingStack (HTList * encodings, HTStream * target, HTRequest * request, void * param); /* . Transfer Encoding Stream Stack . When creating a coding stream stack, it is important that we keep the right order of encoders and decoders. As an example, the HTTP spec specifies that the list in the Transfer-Encoding header follows the order in which the encodings have been applied to the object. Internally, we represent the content encodings as atoms in a linked list object. The creation of the content coding stack is not based on quality factors as we don't have the freedom as with content types. When using content codings we must apply the codings specified or fail. */ extern HTStream * HTTransferCodingStack (HTEncoding coding, HTStream * target, HTRequest * request, void * param, BOOL encoding); /* Here you can provide a complete list instead of a single token. The list has to be filled up in the order the _encodings_ are to be applied */ extern HTStream * HTTransferEncodingStack (HTList * encodings, HTStream * target, HTRequest * request, void * param); /* Here you can provide a complete list instead of a single token. The list has to be in the order the _encodings_ were applied - that is, the same way that _encodings_ are to be applied. This is all consistent with the order of the Transfer-Encoding header. */ extern HTStream * HTTransferDecodingStack (HTList * encodings, HTStream * target, HTRequest * request, void * param); /* . Transfer Encoding Stream Stack . Creating the transfer content encoding stream stack is not based on quality factors as we don't have the freedom as with content types. Specify whether you you want encoding or decoding using the BOOL "encode" flag. */ extern HTStream * HTContentTransferCodingStack (HTEncoding encoding, HTStream * target, HTRequest * request, void * param, BOOL encode); /* ( Presentation Object ) This object is not to be used - it should have been hidden&nbsp; */ typedef struct _HTPresentation { HTFormat rep; /* representation name atomized */ HTFormat rep_out; /* resulting representation */ HTConverter *converter; /* The routine to gen the stream stack */ char * command; /* MIME-format string */ char * test_command; /* MIME-format string */ double quality; /* Between 0 (bad) and 1 (good) */ double secs; double secs_per_byte; } HTPresentation; /* */ #endif /* HTFORMAT */ /* @(#) $Id: HTFormat.html,v 2.85 2025/12/18 17:00:56 kahan Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTGopher.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001026�07405520455�015602� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww GOPHER CLIENT !Gopher Access! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module also cantains the CSO Name Server access via Gopher. This module is implemented by HTGopher.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTGOPHER_H #define HTGOPHER_H #include "HTProt.h" extern HTProtCallback HTLoadGopher; #endif /* @(#) $Id: HTGopher.html,v 2.27 2025/05/14 02:10:30 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTGuess.h������������������������������������������������������������������������0100644�0000764�0000144�00000001634�07405520455�015451� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Content-Type Guessing Stream ! Content-Type Guessing Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This interface provides functionality for guessing unknown media types from magic words. The stream is a one that reads first a chunk of stuff, tries to figure out the format, and calls HTStreamStack(). This is a kind of lazy-evaluation of HTStreamStack(). This could be extended arbitrarily to recognize all the possible file formats in the world, if someone only had time to do it. This module is implemented by HTGuess.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTGUESS_H #define HTGUESS_H #include "HTStream.h" #include "HTFormat.h" extern HTConverter HTGuess_new; #endif /* !HTGUESS_H */ /* @(#) $Id: HTGuess.html,v 2.18 2025/05/14 02:10:31 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������libwww/Library/src/HTHInit.h������������������������������������������������������������������������0100644�0000764�0000144�00000003334�07405520455�015375� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Default HTML Parser Initialization ! Default HTML Parser Initialization Methods ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* As mentioned in the Library Architecture, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing RFC 822 headers etc. This module helps the application programmer setting up the HTML parser, but it is important to note that none of it is required in order to use the Library. This module is implemented by HTInit.c, and it is a part of the W3C Sample Code Library. You can also have a look at the other Initialization modules. */ #ifndef HTHINIT_H #define HTHINIT_H #include "WWWLib.h" /* . Default HTML Parsers . The Converters are used to convert a media type to another media type, or to present it on screen. This is a part of the stream stack algorithm. The Presenters are also used in the stream stack, but are initialized separately. */ #include "HTML.h" /* Uses HTML/HText interface */ #include "HTPlain.h" /* Uses HTML/HText interface */ #include "HTTeXGen.h" #include "HTMLGen.h" extern void HTMLInit (HTList * conversions); /* */ #endif /* @(#) $Id: HTHInit.html,v 2.4 2025/05/14 02:10:31 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHash.h�������������������������������������������������������������������������0100644�0000764�0000144�00000004371�07405520455�015247� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Hash Table Class ! Hash Table Class ! Written and integrated into libwww by John Punin - thanks! This module is implemented by HTHash.c, and is a part of the W3C Sample Code Library. This HashTable class implements a simple hash table to keep objects associated with key words. */ #ifndef HTHASH_H #define HTHASH_H #include "HTList.h" typedef struct _HTHashtable HTHashtable; struct _HTHashtable { void **table; int count; int size; }; typedef struct _keynode keynode; struct _keynode { char *key; void *object; }; /* . Creation and Deletion Methods . These methods create and deletes a Hash Table */ extern HTHashtable * HTHashtable_new (int size); extern BOOL HTHashtable_delete (HTHashtable *me); /* . Add an Element to a HashTable . */ extern BOOL HTHashtable_addObject (HTHashtable *me, const char *key, void *newObject); /* . Remove an Element from a HashTable . */ extern BOOL HTHashtable_removeObject (HTHashtable *me, const char *key); /* . Search for an Element in a Hash Table . */ extern void * HTHashtable_object (HTHashtable * me, const char *key); /* . Size of a Hash Table . */ extern int HTHashtable_count (HTHashtable *me); /* . Walk all the elements in a Hash Table . Walking the hashtable calls the specified function pointer with each key and object that is in the hash table. If the callback function returns 0, the walking stops. If it returns a negative number, the current element is removed from the hash table. Return a positive number to keep going. Note that it is legal for the walkFunc to call HTHashtable_removeObject() on any element in the current hash table except the current one (if you intend to keep going, that is). The only legal way to delete the current element while continuing to walk the table is to use the negative return value. */ extern BOOL HTHashtable_walk (HTHashtable *me, int (*walkFunc)(HTHashtable *, char *, void *)); /* . Extract in a dynamic array all keys of the Hash Table . */ extern HTArray * HTHashtable_keys (HTHashtable *me); /* . Print the keys of the Hash Table . */ extern void HTHashtable_print (HTHashtable *me); /* */ #endif /* @(#) $Id: HTHash.html,v 1.2 2025/08/11 07:49:07 kahan Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHeader.h�����������������������������������������������������������������������0100644�0000764�0000144�00000005271�07405520455�015554� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MIME Headers ! MIME Headers ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module handles lists of callback functions for generating and parsing protocol headers. This works exactly like the lists in HTFormat. This module is implemented by HTHeader.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTHEADER_H #define HTHEADER_H #include "HTResponse.h" #include "HTStream.h" /* We have two call back functions: the first is for generating headers. This needs a stream to put down the extra headers. This one is defined in the Request Manager. The other one is for parsing. This needs the string to parse. */ typedef int HTParserCallback (HTRequest * request, HTResponse * response, char * token, char * value); /* . Header Parser Management . Header Parsers can be registered to handle any header. The standard set of HTTP/1.1 MIME parsers is registered by HTMIMEInit in the HTInit module. The HTParserCallbacks are called by the HTMIME module. HTParserCallbacks may be registered for known MIME headers (HTParser_*), or for regular expressions (HTRegexParser_*). To data the regex support is limited to the use of '*' for a wild card. . Header Generator Management . Header Generators can be use to add additional information to aprotocol request. They will all be called. */ extern BOOL HTGenerator_add (HTList * gens, HTPostCallback * callback); extern BOOL HTGenerator_delete (HTList * gens, HTPostCallback * callback); extern BOOL HTGenerator_deleteAll (HTList * gens); /* . Global List Of Parsers and Generators . As in HTFormat module you can register a list globally or locally as you like. The local registrations is managed by Request Manager ( Header Parsers ) */ #define MIME_HASH_SIZE HT_L_HASH_SIZE extern void HTHeader_setMIMEParseSet (HTMIMEParseSet * list); extern HTMIMEParseSet * HTHeader_MIMEParseSet (void); extern BOOL HTHeader_addParser (const char * token, BOOL case_sensitive, HTParserCallback * callback); extern BOOL HTHeader_addRegexParser (const char * token, BOOL case_sensitive, HTParserCallback * callback); extern BOOL HTHeader_deleteParser (const char * token); /* ( Header Generation ) */ extern void HTHeader_setGenerator (HTList * list); extern BOOL HTHeader_addGenerator (HTPostCallback * callback); extern BOOL HTHeader_deleteGenerator (HTPostCallback * callback); extern HTList * HTHeader_generator (void); /* ( Delete all Global Lists ) */ extern void HTHeader_deleteAll (void); /* */ #endif /* HTHEADER_H */ /* @(#) $Id: HTHeader.html,v 2.13 2025/02/07 18:20:31 frystyk Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHist.h�������������������������������������������������������������������������0100644�0000764�0000144�00000010511�07405520455�015264� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HISTORY !History Manager! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is a simple history module for a WWW client. It keeps a linear history, with a destructive or non-destructive backtrack, and list sequencing (previous, next) operations. If you are building a client, you don't have to use this: just don't call it. This module is not used by any other modules in the libwww, so if you don't refer to it you don't get it in your linked application. This module is implemented by HTHist.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTHISTORY_H #define HTHISTORY_H #include "HTAnchor.h" /* .Creation and Deletion Methods. The history module can handle multiple history lists which can be useful in a multithreaded environment with several open windows in the client application. A new histrory lidt is referenced by the handle returned from the creation method. */ typedef struct _HTHistory HTHistory; extern HTHistory *HTHistory_new (void); extern BOOL HTHistory_delete (HTHistory *old); /* .Add and delete History Elements. (Record an entry in a list) Registers the object in the linear list. The first entry is the home page. No check is done for duplicates. Returns YES if ok, else NO */ extern BOOL HTHistory_record (HTHistory *hist, HTAnchor *cur); /* (Replace list with new element) Iserts the new element at the current position and removes all any old list from current position. For example if c is cur pos o before: a b c d e o after : a b f Returns YES if ok, else NO */ extern BOOL HTHistory_replace (HTHistory *hist, HTAnchor *cur); /* (Delete last entry in a list) Deletes the last object from the list Returns YES if OK, else NO */ extern BOOL HTHistory_removeLast (HTHistory *hist); /* (Remove the History list from position) Deletes the history list FROM the entry at position 'cur' (excluded). Home page has position 1. Returns YES if OK, else NO */ extern BOOL HTHistory_removeFrom (HTHistory *hist, int pos); /* (Number of elements stored) Returns the size of the history list or -1 if none. */ extern int HTHistory_count (HTHistory *hist); /* (Current Position) Returns the current position or -1 on error */ extern int HTHistory_position (HTHistory *hist); /* (Find and re-register visited anchor) Finds already registered anchor at given position and registers it again EXCEPT if last entry. This allows for `circular' history lists with duplicate entries. Position 1 is the home anchor. The current position is updated. */ extern HTAnchor * HTHistory_recall (HTHistory *hist, int pos); /* (Find Entry at position) Entry with the given index in the list (1 is the home page). Like HTHistory_recall but without re-registration. Un success, the current position is updated to the value 'pos' value. */ extern HTAnchor * HTHistory_find (HTHistory *hist, int pos); /* (List the History List) This function is like HTHistory_find() but does not update the current position */ extern HTAnchor * HTHistory_list (HTHistory *hist, int pos); /* .Navigation. (Can we back in history) Returns YES if the current anchor is not the first entry (home page) */ extern BOOL HTHistory_canBacktrack (HTHistory *hist); /* (Backtrack with deletion) Returns the previous object and erases the last object. This does not allow for 'forward' as we are always at the end of the list. If no previous object exists, NULL is returned so that the application knows that no previous object was found. See also HTHistory_back(). */ extern HTAnchor * HTHistory_backtrack (HTHistory *hist); /* (Backtrack without deletion) Returns the previos object but does not erase the last object. This does not allow for 'forward'. If no previous object exists, NULL is returned so that the application knows that no previous object was found. See also HTHistory_backtrack() */ extern HTAnchor * HTHistory_back (HTHistory *hist); /* (Can we go forward) Returns YES if the current anchor is not the last entry */ extern BOOL HTHistory_canForward (HTHistory *hist); /* (Forward) Return the next object in the list or NULL if none */ extern HTAnchor * HTHistory_forward (HTHistory *hist); #endif /* HTHISTORY_H */ /* @(#) $Id: HTHist.html,v 2.14 2025/05/14 02:10:32 frystyk Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTHome.h�������������������������������������������������������������������������0100644�0000764�0000144�00000011761�07405520455�015255� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Home Page Management ! Home Page Management ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides some "make life easier" functions in order to get the application going. The functionality of this module was originally in HTAccess, but now it has been moved here as a part of the application interface where the application may use it if desired. This module is implemented by HTHome.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTHOME_H #define HTHOME_H #include "WWWLib.h" /* The home page is special in that this is is the first page to visit when &nbsp;a client application starts up. Note that a home page is a generic URL and hence can be any resouce - not only resources on the local file system. . Personal Home Page . */ #define LOGICAL_DEFAULT "WWW_HOME" /* Defined to be the home page */ #ifndef PERSONAL_DEFAULT #define PERSONAL_DEFAULT "WWW/default.html" /* in home directory */ #endif /* If the home page isn't found, use this file: */ #ifndef LAST_RESORT #define LAST_RESORT "http://www.w3.org/" #endif /* . Home Page for Remote Access . Some Web applications can also be run remotely - for example as a telnet login shell. The Line Mode Browser is an example of such an application.&nbsp;In that case, the home page is often more generic than a personal home page. */ /* If one telnets to an access point it will look in this file for home page */ #ifndef REMOTE_POINTER #define REMOTE_POINTER "/etc/www-remote.url" /* can't be file */ #endif /* and if that fails it will use this. */ #ifndef REMOTE_ADDRESS #define REMOTE_ADDRESS "http://www.w3.org/" /* can't be file */ #endif #ifndef LOCAL_DEFAULT_FILE #define LOCAL_DEFAULT_FILE "/usr/local/lib/WWW/default.html" #endif /* . Get an Anchor for the Home Page . Getting an anchor for the home page involves looking for the (environment) variables described in the section above. As this is something that almost all client applications must do then we provide some simple methods that do the work for you. */ extern HTParentAnchor * HTHomeAnchor (void); /* . Create a New Anchor for Temporary Local Files . When the user starts writing a new document, the client application should create a new anchor which can contain the document while it is created. This can also be the location for backups and for security "auto-save" functionality. This functions creates a new anchor with a URL pointing to the temporary location defined by this user profile and returns that anchor. Andy Levine: I additionally found that calling HTTmpAnchor repeatedly without freeing the newly allocated anchor will cause the anchor hash table to continue to grow. */ extern HTParentAnchor * HTTmpAnchor (HTUserProfile * up); /* . Get The Current Directory in URL form . Creates a local file URL that can be used as a relative name when calling expanding other URLs relative to the current location in the local file system tree where the application is running. The code for this routine originates from the Line Mode Browser and was moved here by howcome@w3.org in order for all clients to take advantage. */ #define HTFindRelatedName HTGetCurrentDirectoryURL extern char * HTGetCurrentDirectoryURL (void); /* . Handle HTML Form Input fields . Takes a string of the form "a=b" containing HTML form data, escapes it accordingly and puts it into the association list so that it readily can be passed to any of the HTAccess function that handles HTML form data. The string should not be encoded in any way - this function encodes it according to the HTML form encoding rules. Examples are "foo=bar", "baz=foo and bar", "a= b ", " a = b ", "toto=", "four = two + two", "six three + three", and "a=b=c" */ extern BOOL HTParseFormInput (HTAssocList * list, const char * str); /* . Handle Library Trace Messages . Standard interface to libwww TRACE messages. Pass this function a string of characters. It will set up the appropriate TRACE flags. The following characters are used as follows: f Show BASIC UTILITIES Trace Messages l Show APPLICATION LEVEL Trace Messages c Show CACHE Trace Messages g Show SGML Trace Messages b Show BIND Trace Messages t Show THREAD Trace Messages s Show STREAM Trace Messages p Show PROTOCOL Trace Messages m Show MEMORY Trace Messages q Show SQL Trace Messages u Show URI Trace Messages h Show AUTH Trace Messages a Show ANCHOR Trace Messages i Show PICS Trace Messages o Show CORE Trace Messages x Show MUX Trace Messages * Show ALL Trace Messages The string must be null terminated, an example is "sop". */ extern int HTSetTraceMessageMask (const char * shortnames); /* */ #endif /* HTHOME_H */ /* @(#) $Id: HTHome.html,v 2.19 2025/07/04 15:19:45 kahan Exp $ */ ���������������libwww/Library/src/HTHost.h�������������������������������������������������������������������������0100644�0000764�0000144�00000041763�07405520455�015307� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Host Class ! The Host Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Host class manages what we know about a remote host. This can for example be what type of host it is, and what version it is using. Notice that a host object can be used to describe both a server or a client - all information in the Host object can be shared regardless of whether it is to be used in a server application or a client application. This module is implemented by HTHost.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTHOST_H #define HTHOST_H typedef struct _HTHost HTHost; #define HOST_HASH_SIZE HT_M_HASH_SIZE #include "HTChannl.h" #include "HTReq.h" #include "HTEvent.h" #include "HTProt.h" #include "HTTimer.h" /* The Host class contains information about the remote host, for example the type (HTTP/1.0, HTTP/1.1, FTP etc.) along with information on how the connections can be used (if it supports persistent connections, interleaved access etc.) . Creation and Deletion Methods . We keep a cache of information that we know about a remote host. This allows us to be much more detailed in generating requests. Search the host info cache for a host object or create a new one and add it. Examples of host names are o www.w3.org o www.foo.com:8000 ( Add a Host Object ) */ extern HTHost * HTHost_new (char * host, u_short u_port); extern HTHost * HTHost_newWParse(HTRequest * request, char * url, u_short u_port); extern int HTHost_hash (HTHost * host); /* ( Delete a Host Object ) The Host Class contains an automatic garbage collection of Host objects so that we don't keep information around that is stale. ( Find a Host Object ) Searches the cache of known hosts to see if we already have information about this host. If not then we return NULL. */ extern HTHost * HTHost_find (char * host); /* ( Delete the Host table ) Cleanup and delete the host table. */ extern void HTHost_deleteAll (void); /* ( Is Host Idle? ) You can use this function to see whether a host object is idle or in use. We have several modes describing how and when a host is idle. This is a function of the Transport Object */ extern BOOL HTHost_isIdle (HTHost * host); /* . Remote Host Information . We keep track of the capabilities of the host in the other end so thatwe may adjust our queries to fit it better ( Remote Host Name ) Get the name of the remote host. This is set automatically when a new Host object and can be asked for at any point in time. You can not change the host name but must create a new Host object instead. */ extern char * HTHost_name (HTHost * host); /* ( Remote Host Protocol Class and Version ) Define the host class of the host at the other end. A class is a generic description of the protocol which is exactly like the access method in a URL, for example "http" etc. The host version is a finer distinction (sub-class) between various versions of the host class, for example HTTP/0.9, HTTP/1.1 etc. The host version is a bit flag that the protocol module can define on its own. That way we don't have to change this module when registering a new protocol module. The host type is a description of whether we can keep the connection persistent or not. */ extern char * HTHost_class (HTHost * host); extern void HTHost_setClass (HTHost * host, char * s_class); extern int HTHost_version (HTHost * host); extern void HTHost_setVersion (HTHost * host, int version); /* ( Public Methods accessible on This Host ) A server can inform a client about the supported methods using the Public header. */ extern HTMethod HTHost_publicMethods (HTHost * me); extern void HTHost_setPublicMethods (HTHost * me, HTMethod methodset); extern void HTHost_appendPublicMethods (HTHost * me, HTMethod methodset); /* ( Server Name of Remote Host ) A server can send its server application name and version in a HTTP response. We pick up this information and add it to the Host object */ extern char * HTHost_server (HTHost * host); extern BOOL HTHost_setServer (HTHost * host, const char * server); /* ( User Agent Name of Remote Host ) A client can send the name of the client application in a HTTP request. We pick up this information and add it to the Host Object */ extern char * HTHost_userAgent (HTHost * host); extern BOOL HTHost_setUserAgent (HTHost * host, const char * userAgent); /* ( Range Units Accepted by this Host ) Since all HTTP entities are represented in HTTP messages as sequences of bytes, the concept of a byte range is meaningful for any HTTP entity. (However, not all clients and servers need to support byte-range operations.) Byte range specifications in HTTP apply to the sequence of bytes in the entity-body (not necessarily the same as the message-body). A byte range operation may specify a single range of bytes, or a set of ranges within a single entity. You can also check whether a specific range unit is OK. We always say YES except if we have a specific statement from the server that it doesn't understand byte ranges - that is - it has sent "none" in a "Accept-Range" response header */ extern char * HTHost_rangeUnits (HTHost * host); extern BOOL HTHost_setRangeUnits (HTHost * host, const char * units); extern BOOL HTHost_isRangeUnitAcceptable (HTHost * host, const char * unit); /* ( User Defined Contexts ) This can be used for anything that the application would like to keep tabs on. */ extern void HTHost_setContext (HTHost * me, void * context); extern void * HTHost_context (HTHost * me); /* . Register a Request on a Host Object . Requests are queued in the Host object until we have resources to start them. The request is in the form of a Net object as we may have multiple socket requests per Request object. This is for example the case with FTP which uses two connections. */ extern int HTHost_addNet (HTHost * host, HTNet * net); extern BOOL HTHost_deleteNet (HTHost * host, HTNet * net, int status); extern HTList * HTHost_net (HTHost * host); /* . Channels . A Channel object is an abstraction for a transport, like a TCP connection, for example. Each host object can have at most one channel object associated with it. ( Create a Channel to a Host ) As a Net Object doesn't necessarily know whether there is a channel up and running and whether that channel can be reused, it must do an explicit connect the the host. */ extern int HTHost_connect (HTHost * host, HTNet * net, char * url); extern int HTHost_accept (HTHost * host, HTNet * net, char * url); extern int HTHost_listen (HTHost * host, HTNet * net, char * url); /* ( Is Channel About to Close? ) As soon as we know that a channel is about to close (for example because the server sends us a Connection: close header field) then we register this informtation in the Host object: */ extern BOOL HTHost_setCloseNotification (HTHost * host, BOOL mode); extern BOOL HTHost_closeNotification (HTHost * host); /* ( Find Channel Associated with a Host Object ) Here you can find an already associated channel with a host object or you can explicitly associate a channel with a host object. */ extern BOOL HTHost_setChannel (HTHost * host, HTChannel * channel); extern HTChannel * HTHost_channel (HTHost * host); /* ( Delete a Channel ) When a channel is deleted, it must be unregistered from the host object which is done by this operation: */ extern BOOL HTHost_clearChannel (HTHost * host, int status); /* . Transport Mode . The way a channel can be used depends on the transport and what mode the channel is in. The mode (whether we can use persistent connections, pipeline, etc.) may change mode in the middle of a connection If the new mode is lower than the old mode then adjust the pipeline accordingly. That is, if we are going into single mode then move all entries in the pipeline and move the rest to the pending queue. They will get launched at a later point in time. */ extern HTTransportMode HTHost_mode (HTHost * host, BOOL * active); extern BOOL HTHost_setMode (HTHost * host, HTTransportMode mode); /* . Handling Pending Requests . There are two ways we can end up with pending requests: o If we are out of sockets then register new host objects as pending. o If we are pending on a connection then register new net objects as pending This set of functions handles pending host objects and can start new requests as resources get available. The first function checks the host object for any pending Net objects and return the first of these Net objects. */ extern HTNet * HTHost_nextPendingNet (HTHost * host); /* The second checks the list of pending host objects waiting for a socket and returns the first of these Host objects. */ extern HTHost * HTHost_nextPendingHost (void); /* ( Start the Next Pending reqeust ) Start the next pending request if any. First we look for pending requests for the same host and then we check for any other pending hosts. If nothing pending then register a close event handler to have something catching the socket if the remote server closes the connection, for example due to timeout. */ extern BOOL HTHost_launchPending (HTHost * host); /* ( Stop Launch of Pending Requests ) Controls whether pending requests should be automatically activated. The default is on, but if turned off then no pending requests are launched. */ extern void HTHost_enable_PendingReqLaunch (void); extern void HTHost_disable_PendingReqLaunch (void); /* . Persistent Connections . We don't want more than (Max open sockets) - 2 connections to be persistent in order to avoid deadlock. You can set the max number of simultaneous open connection in the HTNet manager. ( Is this host Persistent? ) */ extern BOOL HTHost_setPersistent (HTHost * host, BOOL persistent, HTTransportMode mode); extern BOOL HTHost_isPersistent (HTHost * host); /* ( Persistent Connection Timeouts ) If the server doesn't close the connection on us then we close it after a while so that we don't unnecessarily take up resources (see also how the timeouts of individual requests can be set). Libwww provides two mechanisms: an active timeout and a passive timeout. The former uses libwww timers and is the preferred mechanism, the latter passively looks at the Host object when a new request is issued in order to determine whether the existing channel can be reused. This is primariliy for non-preemptive requests which in general is deprecated. By default we have an active timeout of 60 secs and a passive timeout of 120 secs (the latter is longer as this is less reliable). Active timeout s can be accessed using these functions: */ extern BOOL HTHost_setActiveTimeout (ms_t timeout); extern ms_t HTHost_activeTimeout (void); /* and passive timeouts can be accessed using these functions */ extern time_t HTHost_persistTimeout (void); extern BOOL HTHost_setPersistTimeout (time_t timeout); /* The following two functions are deprecated: */ extern void HTHost_setPersistExpires (HTHost * host, time_t expires); extern time_t HTHost_persistExpires (HTHost * host); /* ( Keeping Track of Number of Reqeusts ) Another way to detect when a connection is about to close is to count the number of requests made. For example, the (current) default bevaior by most Apache servers is to close a TCP connection after 100 requests. I don't quite think it makes sense to control the close of a connection like this but anyway, there we go. */ extern void HTHost_setReqsPerConnection (HTHost * host, int reqs); extern int HTHost_reqsPerConnection (HTHost * host); extern void HTHost_setReqsMade (HTHost * host, int reqs); extern int HTHost_reqsMade (HTHost * host); /* . Read and Write Management . Which Net object can read and/or write? When doing pipelining, we essentially serialize requests and therefore we must keep track of who can read and who can write. ( Get the Next Net object for Reading and Writing ) */ extern HTNet * HTHost_firstNet (HTHost * host); extern HTNet * HTHost_getReadNet (HTHost * host); extern HTNet * HTHost_getWriteNet (HTHost * host); /* ( Get input and output Streams for this Host ) */ extern HTInputStream * HTHost_getInput (HTHost * host, HTTransport * transport, void * param, int mode); extern HTOutputStream * HTHost_getOutput (HTHost * host, HTTransport * tp, void * param, int mode); /* ( Reading Data and Keeping Track of how Much ) Because of the push streams, the streams must keep track of how much data actually was consumed by that stream. */ extern int HTHost_read(HTHost * host, HTNet * net); extern BOOL HTHost_setConsumed(HTHost * host, size_t bytes); extern BOOL HTHost_setRemainingRead(HTHost * host, size_t remainaing); extern size_t HTHost_remainingRead (HTHost * host); /* . Pipelining Requests . When possible, we try to pipeline requests onto the same connection as this saves a lot of time and leads to much higher throughput. ( How many Requests can we Pipeline onto the same Connection? ) Use these functions to set the max number of requests that can be pipelined at any one time on a single, persistent connection. The higher the number, the more we have to recover if the server closes the connection prematurely. The default is about 50 requests which is enough to fill most links. */ extern BOOL HTHost_setMaxPipelinedRequests (int max); extern int HTHost_maxPipelinedRequests (void); /* ( How many Pending and Outstanding Net objects are there on a Host? ) You can query how many Het objects (essentially requests) are outstanding or pending on a host object using these methods: */ extern int HTHost_numberOfOutstandingNetObjects (HTHost * host); extern int HTHost_numberOfPendingNetObjects (HTHost * host); /* ( Pipeline Recovery ) Pipelines normally run by themselves (requests are issued and responses recieved). However, it may be necessry to either prematurely abort a pipeline or to recover a broken pipeline due to communication problems with the server. In case a pipeline is broken then we have to recover it and start again. This is handled automatically by the host object, so you do not have to call this one explicitly. */ extern BOOL HTHost_recoverPipe (HTHost * host); extern BOOL HTHost_doRecover (HTHost * host); /* ( Kill a Pipeline ) Call this function to terminate all requests (pending as well as active) registered with a host object. This is typically the function that handles timeout, abort (user hits the red button, etc). You can also use the HTNet object kill method which in terms call this function. */ extern BOOL HTHost_killPipe (HTHost * host); /* . Event Management . These functions are used to register and unregister events (read, write, etc.) so that the host object knows about it. */ extern int HTHost_register(HTHost * host, HTNet * net, HTEventType type); extern int HTHost_unregister(HTHost * host, HTNet * net, HTEventType type); extern int HTHost_tickleFirstNet(HTHost * host, HTEventType type); extern SockA * HTHost_getSockAddr(HTHost * host); /* ( Request Timeouts ) Events can be assigned a timeout which causes the event to be triggered if the timeout happens before other action is available on the socket. You can assign a global timeout for all host object using the following methods. The default is no timeout. */ extern int HTHost_eventTimeout (void); extern void HTHost_setEventTimeout (int millis); /* . Delayed Flush Timer . These methods can control how long we want to wait for a flush on a pipelined channel. The default is 30ms which is OK in most situations. */ extern BOOL HTHost_setWriteDelay (HTHost * host, ms_t delay); extern ms_t HTHost_writeDelay (HTHost * host); extern int HTHost_findWriteDelay(HTHost * host, ms_t lastFlushTime, int buffSize); /* It is also possible to explicitly require a flush using the following method. This can also be set directly in the request object for a single request. */ extern int HTHost_forceFlush(HTHost * host); /* You can also set the global value so that all new host objects (and therefore all new requests) will inherit this value instead of setting it individually. */ extern BOOL HTHost_setDefaultWriteDelay (ms_t delay); extern ms_t HTHost_defaultWriteDelay (void); /* . Multi homed Host Management . We keep track of hosts with multiple IP addresses - socalled multi-homed hosts. This is used for two things: finding the fastest IP address of that host and as a backup if one or more of the hosts are down. This is handled in connection with the DNS manager */ extern BOOL HTHost_setHome (HTHost * host, int home); extern int HTHost_home (HTHost * host); extern BOOL HTHost_setRetry (HTHost * host, int retry); extern int HTHost_retry (HTHost * host); extern BOOL HTHost_decreaseRetry (HTHost * host); /* . Notify Request that it has become Active . A new callback plugged to the activation of a request which allows an application to know when a request has become active. */ typedef int HTHost_ActivateRequestCallback (HTRequest * request); extern void HTHost_setActivateRequestCallback (HTHost_ActivateRequestCallback * cbf); /* */ #endif /* HTHOST_H */ /* @(#) $Id: HTHost.html,v 2.29 2025/07/07 15:43:28 frystyk Exp $ */ �������������libwww/Library/src/HTHstMan.h�����������������������������������������������������������������������0100644�0000764�0000144�00000007741�07405520455�015562� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Private Hst Definition ! Private Host Definition ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the private definition of the Host Class. Please look in the public Host Class for more documentation This module is implemented by HTHost.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTHSTMAN_H #define HTHSTMAN_H #include "HTHost.h" #include "HTDNS.h" #include "HTEvent.h" #include "HTProt.h" #define PIPE_BUFFER_SIZE 8192 /* The HTHost object is the core of the request queue management. This object contains information about the socket descriptor, the input read buffer etc. required to identify and service a request. */ typedef enum _TCPState { TCP_DNS_ERROR = -3, TCP_ERROR = -2, TCP_CONNECTED = -1, TCP_BEGIN = 0, TCP_CHANNEL, TCP_DNS, TCP_NEED_SOCKET, TCP_NEED_BIND, TCP_NEED_LISTEN, TCP_NEED_CONNECT, TCP_IN_USE } TCPState; struct _HTHost { int hash; /* Information about the otherend */ char * hostname; /* name of host + optional port */ u_short u_port; time_t ntime; /* Creation time */ char * type; /* Peer type */ int version; /* Peer version */ HTMethod methods; /* Public methods (bit-flag) */ char * server; /* Server name */ char * user_agent; /* User Agent */ char * range_units; /* ??? */ /* When does this entry expire? */ time_t expires; /* Persistent channel expires time */ int reqsPerConnection; /* from Keep-Alive: header */ int reqsMade; /* updated as they are sent */ /* Queuing and connection modes */ HTList * pipeline; /* Pipe line of net objects */ HTList * pending; /* List of pending Net objects */ HTNet * doit; /* Transfer from pending to pipe */ HTNet * lock; /* This is a kludge! */ HTNet * listening; /* Master for accepting connections */ BOOL persistent; HTTransportMode mode; /* Supported mode */ HTTimer * timer; /* Timer for handling idle connection */ BOOL do_recover; /* If we are supposed to recover */ int recovered; /* How many times had we recovered */ BOOL close_notification; /* Got a hint about close */ BOOL broken_pipe; /* Support for transports */ HTChannel * channel; /* data channel */ /* Connection dependent stuff */ HTdns * dns; /* Link to DNS object */ TCPState tcpstate; /* State in connection */ SockA sock_addr; /* SockA is defined in wwwsys.h */ int retry; /* Counting attempts to connect */ int home; /* Current home if multiple */ ms_t connecttime; /* Time in ms on multihomed hosts */ /* Event Management */ HTEvent * events[HTEvent_TYPES];/* reading and writing may differ */ HTEventType registeredFor; /* Which actions are we blocked on */ size_t remainingRead; /* Tells HostEvent to call next net */ /* User specific stuff */ ms_t delay; /* Write delay in ms */ void * context; /* Protocol Specific context */ int forceWriteFlush; int inFlush; /* Tells if we're currently processing a file flush */ }; #define HTHost_bytesRead(me) ((me) ? (me)->bytes_read : -1) #define HTHost_bytesWritten(me) ((me) ? (me)->bytes_written : -1) #define HTHost_setBytesRead(me,l) ((me) ? (me->bytes_read=(l)) : -1) #define HTHost_setBytesWritten(me,l) ((me) ? (me->bytes_written=(l)) :-1) #define HTHost_setDNS (host, dns) ((me) ? (me->dns=(dns)) :-1) /* */ #endif /* HTHSTMAN_H */ /* @(#) $Id: HTHstMan.html,v 2.19 2025/07/28 13:52:23 kahan Exp $ */ �������������������������������libwww/Library/src/HTIOStream.h���������������������������������������������������������������������0100644�0000764�0000144�00000011160�07405520455�016041� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww I/O Stream Classes ! I/O Stream Classes ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The I/O Stream class defines objects which accepts a sequence of characters to and from a transport &nbsp;The input and output stream are mainly derived from the generic stream class and contains much of the same functionality. The main difference is that the I/O streams also contains methods for reading and writing to a transport. This module is a part of the W3C Sample Code Library. */ #ifndef HTIOSTREAM_H #define HTIOSTREAM_H typedef struct _HTInputStream HTInputStream; typedef struct _HTOutputStream HTOutputStream; #include "HTList.h" #include "HTStream.h" #include "HTChannl.h" /* . Input Stream . An input stream is a stream that can read data from a transport and via a channel putting the data down to the application. */ typedef struct _HTInputStreamClass { char * name; /* This field is for diagnostics only */ int (*flush) (HTInputStream * me); /* The flush method is introduced in order to allow the stream to put any buffered data down the stream pipe but without taking the stream pipe down. It is for the stream to decide whether it has buffered data or not. In some situations, the stream might not want to send buffered data down the target as the date might be relevant for this stream only. */ int (*_free) (HTInputStream * me); /* The free method is like the flush method but it also frees the current stream object and all stream objects down stream. When the free method has been called, the whole stream pipe (not only this object) should not accept any more data. See also the close method below */ int (*abort) (HTInputStream * me, HTList * errorlist); /* The abort method should only be used if a stream is interrupted, for example by the user, or an error occurs. */ int (*read) (HTInputStream * me); /* The read method is the method by which we can read data from the transport layer. */ int (*close) (HTInputStream * me); /* Pipelined transports need to know how many bytes were consumed by the net object. */ int (*consumed) (HTInputStream * me, size_t bytes); /* The close method closes the transport and deletes the input stream object. Note that this is different than the free method which doesn't have to delete the input stream object itself. */ } HTInputStreamClass; /* . Output Stream . The output stream is similar to the generic stream definition in that it has a superset of methods. The param parameter and the mode parameter can be used for whatever purpose suited. */ typedef struct _HTOutputStreamClass { char * name; int (*flush) (HTOutputStream * me); int (*_free) (HTOutputStream * me); int (*abort) (HTOutputStream * me, HTList * errorlist); int (*put_character)(HTOutputStream * me, char ch); int (*put_string) (HTOutputStream * me, const char * str); int (*put_block) (HTOutputStream * me, const char * str, int len); /* See the generic Stream Definition for an explanation of these methods. Note that they all have a HTOutputStream object a the parameter, not a generic stream. This is to avoid incompatible pointer warnings */ int (*close) (HTOutputStream * me); /* The close method closes the transport and deletes the input stream object. Note that this is different than the free method which doesn't have to delete the input stream object itself. */ } HTOutputStreamClass; /* . Transport Streams . Transport streams are special streams with creation methods like defined below. Transport streams can be registered in a transport object as ways of communicating with the a transport. ( Transport Input Stream ) We have two modes of the input stream depending on model used for data reading is PUSH or PULL. The PUSH model is suitable if we are using pseudo threads based on a select() call or equivalent and the PULL is suitable in a real thread environment. In the latter case it doesn't matter if a read procedure blocks as this only concerns a single thread. */ typedef HTInputStream * HTInput_new (HTHost * host, HTChannel * ch, void * param, int mode); /* ( Transport Output Stream ) */ typedef HTOutputStream * HTOutput_new (HTHost * host, HTChannel * ch, void * param, int mode); /* ( Transport Output Stream Converter ) */ typedef HTOutputStream * HTOutputConverter_new( HTHost * host, HTChannel * ch, void * param, int mode, HTOutputStream * target); /* */ #endif /* HTIOSTREAM_H */ /* @(#) $Id: HTIOStream.html,v 2.6 2025/04/04 00:12:00 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTIcons.h������������������������������������������������������������������������0100644�0000764�0000144�00000007503�07405520455�015437� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Icon Management ! Icon Management ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Icons for directory listsings etc. are bound to MIME content-types and content-encodings as described in the format manager. These functions bind icon URLs to given content-type or encoding templates. Templates containing a slash are taken to be content-type templates, other are content-encoding templates. This module is implemented by HTIcons.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTICONS_H #define HTICONS_H #include "WWWLib.h" /* */ typedef struct _HTIconNode HTIconNode; /* . Add new Icons . All of these functions take an absolute URL and alternate text to use. Add an icon the list ( Generic Icons ) */ extern BOOL HTIcon_add (const char * url, const char * prefix, char * alt, char * type_templ); /* ( Specific Icons ) We also have a special set of icons used to represent well-known things in direcctory listings. Unknown Icon Add a unknown icon representing files that we can't figure out what is and hence can`'t come up with a better icon. */ extern BOOL HTIcon_addUnknown (const char * url, const char * prefix, char * alt); /* Empty Icon In order to aligned HTML pages for directory listings in preformatted mode, we need an empty (or blank) icon of the same size as the other icons. */ extern BOOL HTIcon_addBlank (const char * url, const char * prefix, char * alt); /* Parent Icon Add an icon representing a level up in a directory listing - the parent directory. */ extern BOOL HTIcon_addParent (const char * url, const char * prefix, char * alt); /* Directory Icon This icon represents a directory or a folder */ extern BOOL HTIcon_addDir (const char * url, const char * prefix, char * alt); /* . Find an Icon . This is a simplified file mode enumeration that can is used in directory listings. */ typedef enum _HTFileMode { HT_IS_FILE, /* Normal file */ HT_IS_DIR, /* Directory */ HT_IS_BLANK, /* Blank Icon */ HT_IS_PARENT /* Parent Directory */ } HTFileMode; extern HTIconNode * HTIcon_find (HTFileMode mode, HTFormat content_type, HTEncoding content_encoding); /* . Icon URL . When you want to add the icon reference into a directory listing, you can get the URL of the icon by using this method. Don't free or modify the string returned! */ extern char * HTIcon_url (HTIconNode * node); /* . Alternative text . Get the alternative text (if any) for text based clients or if you don't want to download the image right away. The string returned must be freed by the caller. */ extern char * HTIcon_alternative (HTIconNode * node, BOOL brackets); /* . Delete all icons . Cleans up all memory used by icons. Should be called by HTLibTerminate() (but it isn't). */ extern void HTIcon_deleteAll (void); /* . A Standard Set of Icons . The WWWFile interface does not define a default set of icons but the Library distribution files comes with a standard set of icons that can be used if desired. The Icons can be found in $(datadir)/www-icons.The set covers the types described below and they can be set up using the HTIconInit() initialization function in the WWWInit startup interface o blank.xbm for the blank icon o directory.xbm for directory icon o back.xbm for parent directory o unknown.xbm for unknown icon o binary.xbm for binary files o text.xbm for ascii files o image.xbm for image files o movie.xbm for video files o sound.xbm for audio files o tar.xbm for tar and gtar files o compressed.xbm for compressed and gzipped files */ #endif /* HTICONS */ /* @(#) $Id: HTIcons.html,v 2.25 2025/01/04 20:25:32 kahan Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTInet.h�������������������������������������������������������������������������0100644�0000764�0000144�00000007460�07405520455�015265� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Generic Network Communication ! Generic Network Communication ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module has the common code for handling typical Internet functions like getting the name of the local host, getting the domain name and email address of user, parsing error codes returned in errno or equivalent etc. This module is implemented by HTInet.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTINET_H #define HTINET_H #include "HTReq.h" #include "HTHstMan.h" /* ( System Description of Error Message ) Return error message corresponding to errno number given. We need to pass the error number as a parameter as we on some platforms get different codes from sockets and local file access. */ extern char * HTErrnoString (int errnum); extern int HTInetStatus (int errnum, char * where); /* ( Parse a Cardinal Value ) Converts a string to a cardinal value. On entry: *pp points to first character to be interpreted, terminated by non 0..9 character. *pstatus points to status already valid, maxvalue gives the largest allowable value. On exit: *pp points to first unread character, *pstatus points to status updated iff bad */ extern unsigned int HTCardinal (int * pstatus, char ** pp, unsigned int max_value); /* ( Produce a string for an internet address ) This function is equivalent to the BSD system call inet_ntoa in that it converts a numeric 32-bit IP-address to a dotted-notation decimal string. The pointer returned points to static memory which must be copied if it is to be kept. */ extern const char * HTInetString (struct sockaddr_in * sin); /* ( Parse a network node address and port ) It is assumed that any portnumber and numeric host address is given in decimal notation. Separation character is '.' Any port number given in host name overrides all other values. 'host' might be modified. */ extern int HTParseInet (HTHost * host, char * hostname, HTRequest * request); /* ( Timezone Offset ) Calculates the offset from GMT in seconds. */ extern time_t HTGetTimeZoneOffset (void); /* ( Get Time of day in Milli Seconds ) Return the time of day in milli seconds. */ extern ms_t HTGetTimeInMillis (void); /* ( FQDN of this Host ) This function returns a the name of this host or NULL if not available. The name is stored in a static variable. */ extern char * HTGetHostName (void); /* ( User Email Address ) This functions returns a char pointer to a static location containing the mail address of the current user. The static location is different from the one of the current host name so different values can be assigned. The default value is <USER>@hostname where hostname is as returned by HTGetHostName(). */ #ifndef HT_DEFAULT_LOGIN #define HT_DEFAULT_LOGIN "libwww" #endif extern char * HTGetMailAddress (void); /* ( News server ) The default news host is "news" but you can get ans set the value here. */ extern char * HTGetNewsServer (void); /* ( Get a Temporary File Name ) HTGetTmpFileName() allows the user to control the choice of a directory. The argument dir points to the name of the directory in which the file is to be created. This is equivalent to tempnam() function. */ extern char * HTGetTmpFileName (const char * dir); /* ( Signal Handling ) This is only necessary to compile on a few platforms and only if the application does not have its own signal handling. It is required on Solaris 2.3 (and other SVR4 platforms?) due to a bug in the TCP kernel. When a connect() is tried to a illegal port, solaris gives a SIGPIPE signal instead of returning Connection refused. */ #ifdef WWWLIB_SIG extern void HTSetSignal (void); #endif #endif /* HTINET_H */ /* @(#) $Id: HTInet.html,v 2.11 2025/09/22 23:56:01 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTInit.h�������������������������������������������������������������������������0100644�0000764�0000144�00000014113�07405520455�015262� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Default Initialization ! Default Initialization Methods ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* As mentioned in the Library Architecture, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing RFC 822 headers etc. This module helps the application programmer setting up all this functionality, but it is important to note that none of it is required in order to use the Library. This module is implemented by HTInit.c, and it is a part of the W3C Sample Code Library. You can also have a look at the other Initialization modules. */ #ifndef HTINIT_H #define HTINIT_H #include "WWWLib.h" #include "WWWApp.h" /* . Default Transport Protocol Modules . Register the default set of transport protocols. */ #include "WWWTrans.h" extern void HTTransportInit (void); /* . Default Protocol Modules . Set up default bindings between access schemes and the set of protocol modules in the Library. The preemptive version registers all protocol modules to use blocking sockets. */ #include "WWWHTTP.h" #include "WWWFile.h" #include "WWWFTP.h" #include "WWWGophe.h" #include "WWWTelnt.h" #include "WWWNews.h" #ifdef HT_DIRECT_WAIS #include "WWWWAIS.h" #endif #ifndef FTP_PORT #define FTP_PORT 21 #endif #ifndef NEWS_PORT #define NEWS_PORT 119 #endif #ifndef GOPHER_PORT #define GOPHER_PORT 70 #endif #ifndef WAIS_PORT #define WAIS_PORT 666 #endif #ifndef HTTP_PORT #define HTTP_PORT 80 #endif #define HTAccessInit HTProtocolInit extern void HTProtocolInit (void); extern void HTProtocolPreemptiveInit (void); /* . Default MIME Parsers . The core doesn't have any built in MIME parsers, but many of the protocols need them. For instance, many elements of the library rely on the Content-Length being correctly set. HTMIMEInit() provides the minimal functionality needed for library reliabilty. */ #include "WWWMIME.h" #include "WWWApp.h" extern void HTMIMEInit (void); /* . Default Event Manager . libwww core does not have any default event loop - it has to be added by the application. However, it does come with an example implementation thta may be used. This implementation is based on a select system call using non-blocking and interleaved sockets. */ #include "WWWApp.h" /* . Default Media Type Conversions . The Converters are used to convert a media type to another media type, or to present it on screen. This is a part of the stream stack algorithm. The Presenters are also used in the stream stack, but are initialized separately. */ #include "WWWMIME.h" #include "WWWHTML.h" #include "WWWStream.h" #include "WWWDir.h" #include "WWWCache.h" #ifdef HT_EXPAT #include "WWWXML.h" #endif extern void HTConverterInit (HTList * conversions); /* ( Presenters ) The Presenters are used to present media types by calling external programs, for example, a Postscript viewer. This is a part of the stream stack algorithm. The Converters are also used in the stream stack, but are initialized separately. The Presenters use the same include files as the Converters. */ extern void HTPresenterInit (HTList * conversions); /* ( Converters and Presenters ) This function is only defined in order to preserve backward compatibility. */ extern void HTFormatInit (HTList * conversions); /* . Default Transfer Encodings . Transfer encoders and decoders can handle encodings like chunked etc. */ #include "WWWHTTP.h" extern void HTTransferEncoderInit (HTList * encodings); /* . Default Content Encodings . Content encoders and decoders can handle encodings like deflate etc. */ #include "WWWZip.h" extern void HTContentEncoderInit (HTList * encodings); /* . Default BEFORE and AFTER Filters . This module provides a set of default BEFORE and AFTER filters that can be registered by the Net manager to be called before and after a request. All filters can be registered either to be called globally (all requests) or locally (pr request basis). Not done automaticly - may be done by application! ( BEFORE Filters ) The BEFORE filters handle proxies, caches, rule files etc. The filters are called in the order by which the are registered */ #include "WWWApp.h" extern void HTBeforeInit (void); /* ( AFTER Filters ) The AFTER filters handle error messages, logging, redirection, authentication etc. The filters are called in the order by which the are registered */ extern void HTAfterInit (void); /* ( BEFORE and AFTER Filters ) This is just a short cut for registrating both BEFORE and AFTER at once */ extern void HTNetInit (void); /* . Default Access Authentication Modules . The Access Manager which is implemented as a BEFORE and an AFTER filter (automatically registered in HTNetInit()) does not, by default, know of any access authentication schemes. As everything else, this must be registered! This function does the job and should be all you need. */ extern void HTAAInit (void); /* . Default Message and Dialog Functions . We register a set of alert messages Not done automaticly - may be done by application! */ #include "WWWApp.h" extern void HTAlertInit (void); /* . Default Icons for Directory Listings . The WWWDir interface contains support for including references (URLs and ALT text tags) to icons in directory listings. The icons are selected as a function of the media type and the content encoding of the file in question. That is - you can set up icons for compressed files, postscript files etc. There is also a small set of specific icons representing directories etc. */ #include "WWWFile.h" extern void HTIconInit (const char * url_prefix); /* */ #endif /* @(#) $Id: HTInit.html,v 2.55 2025/07/04 15:14:45 kahan Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLib.h��������������������������������������������������������������������������0100644�0000764�0000144�00000006122�07405520455�015066� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Initialization ! Libwww Initialization ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module contains some generic functions for getting the name and version of libwww. It also contains some global configuration options like if you can access the local file system, for example. This module is implemented by HTLib.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTLIB_H #define HTLIB_H #include "HTUser.h" /* . Initializing and Terminating libwww . These two functions initialize memory and settings for the libwww core and cleans up memory kept by libwww core when exiting the application. They &nbsp;MUST be used as libwww otherwise is in a undefined state. */ extern BOOL HTLibInit (const char * AppName, const char * AppVersion); extern BOOL HTLibTerminate (void); /* . Libwww Name and Version . You can get the generic name of the Library and the version by using the following functions: */ extern const char * HTLib_name (void); extern const char * HTLib_version (void); /* . Is libwww Initalized? . Returns YES or NO */ extern BOOL HTLib_isInitialized (void); /* . Application Name and Version . Returns the name of the application name and the version number. The name and version SHOULD be short and to the point. They MUST NOT be used for advertising or other non-essential information. Although any token character MAY appear in a product-version, this token SHOULD only be used for a version identifier. ( Set or get the application name ) The name can not contain any spaces as it is used as part of the user agent field. For the same reason, the string MUST be in US-ASCII. For example, "SmartApp" */ extern const char * HTLib_appName (void); extern BOOL HTLib_setAppName (const char * name); /* ( Set or get the application version ) The version token can not contain any spaces as it is used as part of the user agent field. For the same reason, the string MUST be in US-ASCII. For example, "1.0". */ extern const char * HTLib_appVersion (void); extern BOOL HTLib_setAppVersion (const char * version); /* . Accessing the Local File System . Libwww does normally use the local file system for dumping unknown data objects, file cache etc. In some situations this is not desired, and we can therefore turn it off. This mode also prevents you from being able to access other resources where you have to login telnet, for example. */ extern BOOL HTLib_secure (void); extern void HTLib_setSecure (BOOL mode); /* . Default User Profile . The default user profile is automatically created by the libwww in order to get information about the hostname, default email -address etc. All request objects will be created with this default user profile. The application may assign individual user profiles to every request object or may set the default user profile. */ extern HTUserProfile * HTLib_userProfile (void); extern BOOL HTLib_setUserProfile (HTUserProfile * up); /* */ #endif /* HTLIB_H */ /* @(#) $Id: HTLib.html,v 2.7 2025/07/12 10:44:41 kahan Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLink.h�������������������������������������������������������������������������0100644�0000764�0000144�00000012044�07405520455�015255� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /* W3C Sample Code Library libwww Link Class !The Link Class! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The HTLink class represents links between anchor objects. By keeping the link as a object and not as part of the anchor we are capable of handling link semantics in a much more organized way. For example, we can then search for link types among all the link objects that we have created. Anchor objects are bound together using Link objects. Each anchor can be the source or destination of zero, one, or more links from and to other anchors. Link information can come from many places - two classic examples are the HTML LINK element and the HTTP Link header field. Libwww supports both - the HTML LINK element is handled by the HTML parser and the HTTP Link header field is handled by the MIME parser. The Webbot uses the link class to maintain the information of the Web that it is seeing when traversing the Web as a robot. This module is implemented by HTLink.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTLINK_H #define HTLINK_H typedef struct _HTLink HTLink; #include "WWWUtil.h" #include "HTMethod.h" #include "HTAnchor.h" /* .Creation and Deletion Methods. These are the methods for crating and deleting new link objects (Create a new Link Object) */ typedef HTAtom * HTLinkType; typedef enum _HTLinkResult { HT_LINK_INVALID = -1, HT_LINK_NONE = 0, HT_LINK_ERROR, HT_LINK_OK } HTLinkResult; struct _HTLink { HTAnchor * dest; /* The anchor to which this leads */ HTLinkType type; /* Semantics of this link */ HTMethod method; /* Method for this link, e.g. PUT */ HTLinkResult result; /* Result of any attempt to get this link */ }; HTLink * HTLink_new (void); /* (Delete a Link Object) A link can be removed as any other object */ BOOL HTLink_delete (HTLink * link); /* (Remove All Link Information from an Anchor) This is normally a part of deleting anchor objects. */ extern BOOL HTLink_removeAll (HTAnchor * me); /* .Predefined Link Types. Just for ease of use, we define a seet of commonly used link types. You can ofcourse use any other link type you want. */ #define HT_LR_PERM_REDIRECT HTAtom_for("PERMANENT_REDIRECTION") #define HT_LR_TEMP_REDIRECT HTAtom_for("TEMPORARY_REDIRECTION") #define HT_LR_SEE_OTHER HTAtom_for("SEE_OTHER") /* .Handle Link Between Anchors. As mentioned, link objects are the ones that bind anchor objects together in a Web like structure (Add a Link between two Anchors) This method creates a new link between two anchor objects. */ extern BOOL HTLink_add ( HTAnchor * source, HTAnchor * destination, HTLinkType type, HTMethod method); /* (Remove All Links Between two Anchors) Removes link information from one anchor to another. */ extern BOOL HTLink_remove ( HTAnchor * source, HTAnchor * destination); /* (Find a Link) Find the anchor object between a destination and a source ancher. Return link object if any, else NULL */ extern HTLink * HTLink_find (HTAnchor * source, HTAnchor * destination); /* (Find a Link with a given link type) Returns a link with a given link type or NULL if nothing found */ extern HTLink * HTLink_findType (HTAnchor * me, HTLinkType type); /* .Link Information. This is the set of methods for accessing the information carried by a link object (Link Destination) The link destination is the destination anchor pointed to by the link. */ extern BOOL HTLink_setDestination (HTLink * link, HTAnchor * dest); extern HTAnchor * HTLink_destination (HTLink * link); /* (Link Types and Semantic Links) Each link has a sematic representation associated with it. This means that the application can distinguish between pages based on the semantics of the link. This is very similar to the LINK tag in HTML pages which indicates the meaning if this pages to other pages. */ extern BOOL HTLink_setType (HTLink * link, HTLinkType type); extern HTLinkType HTLink_type (HTLink * link); /* (Link Method) The link method is the HTTP method we have performed between the two links. For example, it can be a POST operation, or a PUT operation where the operation on the first anchor created a new anchor. */ extern BOOL HTLink_setMethod (HTLink * link, HTMethod method); extern HTMethod HTLink_method (HTLink * link); /* (Link Result) When a link has been used for posting an object from a source to a destination link, the result of the operation is stored as part of the link information. This means that we can keep track of which operations we have performed on a link and hence the application can ask the user whether he or she wants to do a re-post, for example. */ extern BOOL HTLink_setResult (HTLink * link, HTLinkResult result); extern HTLinkResult HTLink_result (HTLink * link); /* */ #endif /* HTLINK_H */ /* @(#) $Id: HTLink.html,v 2.6 2025/03/29 15:51:44 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTList.h�������������������������������������������������������������������������0100644�0000764�0000144�00000010231�07405520455�015267� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww List Class ! The List Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The list class defines a generic container for storing collections of things in order. In principle it could be implemented in many ways, but in practice knowing that it is a linked list is important for speed. This module is implemented by HTList.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTLIST_H #define HTLIST_H #include "HTArray.h" typedef struct _HTList HTList; struct _HTList { void * object; HTList * next; }; /* . Creation and Deletion Methods . These two functions create and deletes a list */ extern HTList * HTList_new (void); extern BOOL HTList_delete (HTList *me); /* . Add an Element to List . A new list element is added to the beginning of the list so that it is first element just after the head element. */ extern BOOL HTList_addObject (HTList *me, void *newObject); /* You can also append an element to the end of the list (the end is the first entered object) by using the following function: */ extern BOOL HTList_appendObject (HTList * me, void * newObject); /* The following two functions, contributed by Vic Bancroft (bancroft@america.net) that do the same operation as above, but return a pointer to the new HTList element that was added or appended. This allows one to keep a reference to the end of the list outside of the list itself, which can be used to speed up certain list operations. */ extern HTList * HTList_addList (HTList * me, void * newObject); extern HTList * HTList_appendList (HTList * me, void * newObject); /* . Remove List Elements . You can delete elements in a list using the following methods. The first method only removes the first entry that it finds matching the oldObject whereas the second method removes all occurances of oldObject. */ extern BOOL HTList_removeObject (HTList * me, void * oldObject); extern BOOL HTList_quickRemoveElement (HTList * me, HTList * last); extern BOOL HTList_removeObjectAll (HTList * me, void * oldObject); extern void * HTList_removeLastObject (HTList * me); extern void * HTList_removeFirstObject (HTList * me); /* . Size of a List . Two small function to ask for the size */ #define HTList_isEmpty(me) (me ? me->next == NULL : YES) extern int HTList_count (HTList *me); /* . Reference List Elements By Index . In some situations is is required to use an index in order to refer to a list element. This is for example the case if an element can be registered multiple times. */ extern int HTList_indexOf (HTList * me, void * object); extern int HTList_indexOfElement (HTList * me, HTList * element); extern void * HTList_objectAt (HTList * me, int position); extern HTList * HTList_elementOf (HTList * me, void * object, HTList ** pLast); #define HTList_objectOf(me) (me ? me->object: NULL) /* . Find List Elements . This method returns the last element to the list or NULL if list is empty */ #define HTList_lastObject(me) \ ((me) && (me)->next ? (me)->next->object : NULL) /* This method returns the first element to the list or NULL if list is empty */ extern void * HTList_firstObject (HTList * me); /* . Traverse list . Fast macro to traverse the list. Call it first with copy of list header: it returns the first object and increments the passed list pointer. Call it with the same variable until it returns NULL. */ #define HTList_nextObject(me) \ ((me) && ((me) = (me)->next) ? (me)->object : NULL) /* . Insertion Sort a List . This function sorts a list using the insertion sort mechanism. The comparison function is passed as a parameter and you can &nbsp;find the definition of HTComparer in the HTArray module. Insertion sort is good method whenever a list is nearly in the correct order and few items are many positions away from their sorted location. If the list gets very long then you may wanna use a quicksort instead. */ extern BOOL HTList_insertionSort(HTList * list, HTComparer * comp); /* . Free list . */ #define HTList_free(x) HT_FREE(x) #endif /* HTLIST_H */ /* @(#) $Id: HTList.html,v 2.34 2025/06/15 13:48:44 kahan Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTLocal.h������������������������������������������������������������������������0100644�0000764�0000144�00000003702�07405520455�015413� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Local File Access ! Local File Access ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module has the common code for opening and closing local files. This module is implemented by HTTCP.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTLOCAL_H #define HTLOCAL_H #include "HTNet.h" /* . Mode of File . A file can be opened in variuos modes dependent on whether it is to be opened for reading or writing or both. We here define a set that is largely equivalent to what we know from ANSI C file modes and Unix file modes: */ #ifndef NO_UNIX_IO typedef int HTLocalMode; #define HT_FB_RDONLY O_RDONLY #define HT_FT_RDONLY HT_FB_RDONLY #define HT_FB_WRONLY O_WRONLY|O_CREAT #define HT_FT_WRONLY HT_FB_WRONLY #define HT_FB_RDWR O_RDWR #define HT_FT_RDWR HT_FB_RDWR #define HT_FB_APPEND O_APPEND #define HT_FT_APPEND HT_FB_APPEND #else typedef const char *HTLocalMode; #define HT_FB_RDONLY "rb" #define HT_FT_RDONLY "r" #define HT_FB_WRONLY "wb" #define HT_FT_WRONLY "w" #define HT_FB_RDWR "r+b" #define HT_FT_RDWR "r+" #define HT_FB_APPEND "ab" #define HT_FT_APPEND "a" #endif /* . Open a Local File . Opens a local file using whatever means are available on the current platform. If we have unix file descriptors then use that as we can use select on them. On windows we want to use asynchrounous handles - just like we handle the socket interface as well. On other platforms, we use ANSI C file descriptors. */ extern int HTFileOpen (HTNet * net, char * local, HTLocalMode mode); /* . Close a Local File . Closes a file descriptor whatever means are available on the current platform. If we have unix file descriptors then use this otherwise use the ANSI C file descriptors */ extern int HTFileClose (HTNet * net); /* */ #endif /* HTLOCAL_H */ /* @(#) $Id: HTLocal.html,v 2.6 2025/02/29 14:32:15 kahan Exp $ */ ��������������������������������������������������������������libwww/Library/src/HTLog.h��������������������������������������������������������������������������0100644�0000764�0000144�00000003371�07405520455�015104� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Log Class !Log Manager! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is a generic log object which can be used to log events to a file. This module is implemented by HTLog.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTLIBLOG_H #define HTLIBLOG_H #include "HTReq.h" /* .Create a new Log Object. Create a new object and open the log file. The time used in the log file is either GMT or local dependent on local. */ typedef struct _HTLog HTLog; extern HTLog * HTLog_open (const char * filename, BOOL local, BOOL append); /* .Delete a Log Object. Close the log file and delete the object */ extern BOOL HTLog_close (HTLog * log); /* .How many times has log object been accessed?. Returns access count number or -1 */ extern int HTLog_accessCount (HTLog * log); /* .Log a Client Request in CLF. This functions logs the result of a request in what's close to CLF. It can be used on client side to track user behavior. */ extern BOOL HTLog_addCLF (HTLog * log, HTRequest * request, int status); /* .Log Referer Fields. This functions logs the referer logs of where the user has been. */ extern BOOL HTLog_addReferer (HTLog * log, HTRequest * request, int status); /* .Log the following line. A generic logger - logs whatever you put in as the line. The caller is responsible for adding a line feed if desired. */ extern BOOL HTLog_addLine (HTLog * log, const char * line); /* .Log the Following Variable Arguments. A generic logger with variable arguments */ extern BOOL HTLog_addText (HTLog * log, const char * fmt, ...); /* */ #endif /* @(#) $Id: HTLog.html,v 2.17 2025/05/14 02:10:40 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMIME.h�������������������������������������������������������������������������0100644�0000764�0000144�00000007756�07405520455�015125� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MIME Parsers ! Libwww MIME Parsers ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The MIME parser stream presents a MIME document with a header and possibly a footer. It recursively invokes the format manager to handle embedded formats like MIME multipart. As well as stripping off and parsing the headers, the MIME parser has to parse any weird MIME encodings it may meet within the body parts of messages, and must deal with multipart messages (see HTBound.h). This module is implemented to the level necessary for operation with WWW, but is not currently complete for any arbitrary MIME message. This module is implemented by HTMIME.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMIME_H #define HTMIME_H #include "HTStream.h" #include "HTFormat.h" /* . How to Deal with Unknown Data . When the MIME parser can't find a target stream, for example because the media type is unknown, or it has a content encoding or transfer encoding that it doesn't know about then it has to get rid of the data in some other fashion, for example by dumping it to local disk (but it could also be dumping it to a black hole). The following two functions allow you to set and get the stream to use in this situation. By default, libwww provides an implementation of a save stream as HTSaveLocally which you may want to use - this is for example used by the current profiles. */ extern void HTMIME_setSaveStream (HTConverter * save_stream); extern HTConverter * HTMIME_saveStream (void); /* . MIME Parse Stream . This stream parses a complete MIME message and if a media type header is found then the stream stack is called to create the nest stream instance in the stream pipe. Any piece of the MIME body is pumped right through the stream. */ extern HTConverter HTMIMEConvert; /* . MIME Header ONLY Parse Stream . This stream parses a complete MIME header and then returnes HT_LOADED. It does not set up any streams and resting data stays in the buffer. This can be used if you only want to parse the headers before you decide what to do next. This is for example the case with HTTP HEAD requests. */ extern HTConverter HTMIMEHeader; /* . MIME Footer ONLY Parse Stream . Parse only a footer, for example after a chunked encoding. */ extern HTConverter HTMIMEFooter; /* . HTTP 100 Continue Parse Stream . The 100 continue status codes can come at any time - we take them and put the data down a temporary stream. When the 100 continue message has been parsed, the stream returns HT_CONTINUE */ extern HTConverter HTMIMEContinue; /* . HTTP 101 Switching Protocol Parse Stream . The 101 Switching Protocol status code indicates that the rest of the stream is using another format, protocol, what ever. The result is the same - we are done parsing here and must leave the rest to the next stream which hopefully knows more about how to parse the rest of the stream. The stream stack is called to look for a stream registered for handling WWW_MIME_UPGRADE. This steam should return HT_LOADED when it is done, HT_ERROR if an error occurred and HT_OK as long as it just reads more data. */ extern HTConverter HTMIMEUpgrade; /* . HTTP 206 Partial Data MIME Parse Stream . In case we sent a Range conditional GET we may get back a 206 Partial Response. This response must be appended to the already existing cache entry before presented to the user. That is, first we load the cached object and pump it down the pipe and then the new data follows. Only the latter part gets appended to the cache, of course. */ extern HTConverter HTMIMEPartial; /* . HTMIME_anchor2response . Copies the anchor HTTP headers into a response object by means of the generic _dispatchParsers function. Written so that we can copy the HTTP headers stored in the cache to the response object. */ #ifndef NO_CACHE extern HTConverter HTCacheCopyHeaders; #endif /* */ #endif /* @(#) $Id: HTMIME.html,v 2.32 2025/12/18 17:00:56 kahan Exp $ */ ������������������libwww/Library/src/HTMIMERq.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001537�07405520455�015417� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MIME REQUEST STREAM !MIME Request Stream! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The MIME Request stream generates a MIME request header and writes it to the target which is normally a HTWriter stream. This module is implemented by HTMIMERq.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMIMERQ_H #define HTMIMERQ_H #include "HTStream.h" #include "HTReq.h" /* (Streams Definition) This stream makes a MIME header before it goes into transparent mode. If endHeader is YES then we send an empty CRLF in order to end the header. */ extern HTStream * HTMIMERequest_new (HTRequest * request, HTStream * target, BOOL endHeader); #endif /* @(#) $Id: HTMIMERq.html,v 2.6 2025/05/14 02:10:41 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMIMImp.h�����������������������������������������������������������������������0100644�0000764�0000144�00000003726�07405520455�015457� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Default MIME/RFC822 Header Parsers ! Default MIME/RFC822 Header Parsers ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Library's MIME parser is divided into two parts: A generic MIME parser that knows how to unwrap all RFC822 headers and specialized header parsers that knows how to parse Content-Length, for example. This is the default set of the specialized MIME header parsers that can be registered as part of the generic MIME. Note that these functions are not registered by default - they must be registered by the application. This can be done using the HTMIMEInit() function in the WWWInit interface. Of course this can also be used to register new headers that are not represented below - or if you want to replace a default parser then this is also very easy. This module is implemented by HTMIMImp.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMIMIMP_H #define HTMIMIMP_H #include "HTReq.h" #include "HTHeader.h" /* */ extern HTParserCallback HTMIME_accept, HTMIME_acceptCharset, HTMIME_acceptEncoding, HTMIME_acceptLanguage, HTMIME_acceptRanges, HTMIME_authenticate, HTMIME_authenticationInfo, HTMIME_authorization, HTMIME_cacheControl, HTMIME_connection, HTMIME_contentEncoding, HTMIME_contentLength, HTMIME_contentRange, HTMIME_contentTransferEncoding, HTMIME_contentType, HTMIME_keepAlive, HTMIME_link, HTMIME_location, HTMIME_maxForwards, HTMIME_messageDigest, HTMIME_pragma, HTMIME_protocol, HTMIME_protocolInfo, HTMIME_protocolRequest, HTMIME_proxyAuthorization, HTMIME_proxyAuthenticationInfo, HTMIME_public, HTMIME_range, HTMIME_referer, HTMIME_retryAfter, HTMIME_server, HTMIME_trailer, HTMIME_transferEncoding, HTMIME_upgrade, HTMIME_userAgent, HTMIME_vary, HTMIME_via, HTMIME_warning; /* */ #endif /* @(#) $Id: HTMIMImp.html,v 2.11 2025/12/16 10:59:08 kahan Exp $ */ ������������������������������������������libwww/Library/src/HTMIMPrs.h�����������������������������������������������������������������������0100644�0000764�0000144�00000004156�07405520455�015474� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MIME header parser managment ! MIMEParseSet ! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* A MIMEParseSet associates simple and regex MIME header tokens with parsers. Regex tokens are stored in a list, while simple tokens are stored in a hashed list for quick access. This module is implemented by HTMIMPrs.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMIMPRS_H #define HTMIMPRS_H #include "HTHeader.h" /* . Data Types . The HTMIMEParseSet contains all registered MIME parses. There are regex parsers, which are stored in a list of HTMIMEParseEl, and simple (no wildcards) parsers stored in a hashed array of lists of HTMIMEParseEl. */ typedef struct _HTMIMEParseEl HTMIMEParseEl; struct _HTMIMEParseSet { int size; HTMIMEParseEl ** parsers; HTMIMEParseEl * regexParsers; }; #define MIMEParseSet_NULL {0, NULL, NULL} /* . Public Functions . The following methods are available for this HTMIMEParseSets: ( Create and destroyHashLists ) */ extern HTMIMEParseSet * HTMIMEParseSet_new(int hashSize); extern int HTMIMEParseSet_deleteAll (HTMIMEParseSet * me); /* ( Add and remove parsers ) Register a Header parser to be called if we encounter the token in the protocol response. Tokens can contain a wildcard '*' which will match zero or more arbritary chars. */ extern HTMIMEParseEl * HTMIMEParseSet_add (HTMIMEParseSet * me, const char * token, BOOL caseSensitive, HTParserCallback * callback); extern HTMIMEParseEl * HTMIMEParseSet_addRegex (HTMIMEParseSet * me, const char * token, BOOL caseSensitive, HTParserCallback * callback); extern int HTMIMEParseSet_delete (HTMIMEParseSet * me, const char * token); /* ( Execute these parsers ) Find HTParserCallback which matches the string. */ extern int HTMIMEParseSet_dispatch (HTMIMEParseSet * me, HTRequest * request, char * token, char * value, BOOL * pFound); /* */ #endif /* HTMIMPRS_H */ /* @(#) $Id: HTMIMPrs.html,v 2.8 2025/05/14 02:10:42 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTML.h���������������������������������������������������������������������������0100644�0000764�0000144�00000003171�07405520455�014671� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTML Parser With Text Object Converter ! Simple HTML Parser With Text Object Converter ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This interprets the HTML semantics passed to it by the SGML parser. It then creates a HText object which the application can use to render an HTML object as text comes in over the wire. The stylesheet manager can be used to ensure that the rendering is done according to whatever style information is present. This module is implemented by HTML.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTML_H #define HTML_H #include "HTFormat.h" #include "HTMLPDTD.h" /* . Converters . These are the converters implemented in this module. The first converts from HTML to presentation or plain text. */ extern HTConverter HTMLToPlain; /* The next converts from HTML to a simple C like representation. It puts everything not in PRE within C style comments. This is the way that the line mode browser is used to convert the libwww HTML files to C style .h files */ extern HTConverter HTMLToC; /* This one converts the HTML stream to a rendered object using the HText interface. */ extern HTConverter HTMLPresent; /* . Selecting Internal Character Set Representation . Only ISO_LATIN1 is currently supported. */ typedef enum _HTMLCharacterSet { HTML_ISO_LATIN1, HTML_NEXT_CHARS, HTML_PC_CP950 } HTMLCharacterSet; extern BOOL HTMLUseCharacterSet (HTMLCharacterSet charset); /* */ #endif /* end HTML_H */ /* @(#) $Id: HTML.html,v 2.36 2025/01/06 15:38:47 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMLGen.h������������������������������������������������������������������������0100644�0000764�0000144�00000002025�07405520455�015320� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTML GENERATOR !HTML generator! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module converts structed stream into stream. That is, given a stream to write to, it will give you a structured stream to. This module is implemented by HTMLGen.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMLGEN_H #define HTMLGEN_H #include "HTStruct.h" #include "HTFormat.h" /* The HTML generator stream is almost a converter stream but it returns a structured stream instead of a generic stream. The difference is that a structured stream has methods for starting and ending mark up elements and for HTML/SGML entities. */ extern HTStructured* HTMLGenerator (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream); extern HTConverter HTPlainToHTML; #endif /* @(#) $Id: HTMLGen.html,v 2.23 2025/05/14 02:10:43 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMLPDTD.h�����������������������������������������������������������������������0100644�0000764�0000144�00000043001�07405520455�015341� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTML DTD ! HTML Plus DTD - Software Interface ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* SGML purists should excuse the use of the term "DTD" in this file to represent DTD-related information which is not exactly a DTD itself. The C modular structure doesn't work very well here, as the dtd is partly in the .h and partly in the .c which are not very independent. Tant pis! There are a couple of HTML-specific utility routines also defined. This module is a part of the W3C Sample Code Library. */ #ifndef HTMLDTD_H #define HTMLDTD_H #include "HTStruct.h" #include "SGML.h" /* . Number of HTML Entities . The entity names are defined in the C file. This gives the number of them. Must Match all tables by element! */ #define HTML_ENTITIES 100 /* . HTML Element Enumeration . These include tables in HTMLPDTD.c and code in HTML.c. Note that not everything from HTML 4.0 is there! */ typedef enum _HTMLElement { HTML_A = 0, HTML_ABBR, HTML_ACRONYM, HTML_ADDRESS, HTML_APPLET, HTML_AREA, HTML_B, HTML_BASE, HTML_BASEFONT, HTML_BDO, HTML_BIG, HTML_BLOCKQUOTE, HTML_BODY, HTML_BR, HTML_BUTTON, HTML_CAPTION, HTML_CENTER, HTML_CITE, HTML_CODE, HTML_COL, HTML_COLGROUP, HTML_DD, HTML_DEL, HTML_DFN, HTML_DIR, HTML_DIV, HTML_DL, HTML_DT, HTML_EM, HTML_FIELDSET, HTML_FONT, HTML_FORM, HTML_FRAME, HTML_FRAMESET, HTML_H1, HTML_H2, HTML_H3, HTML_H4, HTML_H5, HTML_H6, HTML_HEAD, HTML_HR, HTML_HTML, HTML_I, HTML_IFRAME, HTML_IMG, HTML_INPUT, HTML_INS, HTML_ISINDEX, HTML_KBD, HTML_LABEL, HTML_LEGEND, HTML_LI, HTML_LINK, HTML_MAP, HTML_MENU, HTML_META, HTML_NEXTID, /* !!! */ HTML_NOFRAMES, HTML_NOSCRIPT, HTML_OBJECT, HTML_OL, HTML_OPTGROUP, HTML_OPTION, HTML_P, HTML_PARAM, HTML_PRE, HTML_Q, HTML_S, HTML_SAMP, HTML_SCRIPT, HTML_SELECT, HTML_SMALL, HTML_SPAN, HTML_STRIKE, HTML_STRONG, HTML_STYLE, HTML_SUB, HTML_SUP, HTML_TABLE, HTML_TBODY, HTML_TD, HTML_TEXTAREA, HTML_TFOOT, HTML_TH, HTML_THEAD, HTML_TITLE, HTML_TR, HTML_TT, HTML_U, HTML_UL, HTML_VAR, HTML_ELEMENTS /* This must be the last entry */ } HTMLElement; /* . Element Attribute Enumerations . Identifier is HTML_<element>_<attribute>. These must match the tables in HTMLPDTD.c! ( Attributes definition Macros ) */ /* Define an attribute as HTML__ */ #define HTML_ATTR(t,a) HTML_##t##_##a #define HTML_ATTRIBUTES(t) HTML_##t##_ATTRIBUTES /* ( A ) */ enum _HTML_A_Attributes { HTML_ATTR(A,ACCESSKEY) = 0, HTML_ATTR(A,CHARSET), HTML_ATTR(A,CLASS), HTML_ATTR(A,COORDS), HTML_ATTR(A,DIR), HTML_ATTR(A,HREF), HTML_ATTR(A,HREFLANG), HTML_ATTR(A,ID), HTML_ATTR(A,NAME), HTML_ATTR(A,REL), HTML_ATTR(A,REV), HTML_ATTR(A,SHAPE), HTML_ATTR(A,STYLE), HTML_ATTR(A,TABINDEX), HTML_ATTR(A,TARGET), HTML_ATTR(A,TYPE), HTML_ATTR(A,TITLE), HTML_ATTRIBUTES(A) }; /* ( APPLET - Deprecated ) */ enum _HTML_APPLET_Attributes { HTML_ATTR(APPLET,ALIGN) = 0, HTML_ATTR(APPLET,ALT), HTML_ATTR(APPLET,ARCHIVE), HTML_ATTR(APPLET,CLASS), HTML_ATTR(APPLET,CODE), HTML_ATTR(APPLET,CODEBASE), HTML_ATTR(APPLET,HEIGHT), HTML_ATTR(APPLET,HSPACE), HTML_ATTR(APPLET,ID), HTML_ATTR(APPLET,NAME), HTML_ATTR(APPLET,OBJECT), HTML_ATTR(APPLET,STYLE), HTML_ATTR(APPLET,TITLE), HTML_ATTR(APPLET,VSPACE), HTML_ATTR(APPLET,WIDTH), HTML_ATTRIBUTES(APPLET) }; /* ( AREA ) */ enum _HTML_AREA_Attributes { HTML_ATTR(AREA,ACCESSKEY) = 0, HTML_ATTR(AREA,ALT), HTML_ATTR(AREA,CLASS), HTML_ATTR(AREA,COORDS), HTML_ATTR(AREA,DIR), HTML_ATTR(AREA,HREF), HTML_ATTR(AREA,ID), HTML_ATTR(AREA,NAME), HTML_ATTR(AREA,NOHREF), HTML_ATTR(AREA,LANG), HTML_ATTR(AREA,SHAPE), HTML_ATTR(AREA,STYLE), HTML_ATTR(AREA,TABINDEX), HTML_ATTR(AREA,TARGET), HTML_ATTR(AREA,TITLE), HTML_ATTRIBUTES(AREA) }; /* ( BASE ) */ enum _HTML_BASE_Attributes { HTML_ATTR(BASE,HREF) = 0, HTML_ATTR(BASE,TARGET), HTML_ATTRIBUTES(BASE) }; /* ( BDO ) */ enum _HTML_BDO_Attributes { HTML_ATTR(BDO,CLASS) = 0, HTML_ATTR(BDO,DIR), HTML_ATTR(BDO,ID), HTML_ATTR(BDO,LANG), HTML_ATTR(BDO,STYLE), HTML_ATTR(BDO,TITLE), HTML_ATTRIBUTES(BDO) }; /* ( BLOCKQUOTE ) */ enum _HTML_BQ_Attributes { HTML_ATTR(BQ,CITE) = 0, HTML_ATTR(BQ,CLASS), HTML_ATTR(BQ,DIR), HTML_ATTR(BQ,ID), HTML_ATTR(BQ,LANG), HTML_ATTR(BQ,STYLE), HTML_ATTR(BQ,TITLE), HTML_ATTRIBUTES(BQ) }; /* ( BODY ) */ enum _HTML_BODY_Attributes { HTML_ATTR(BODY,ALINK) = 0, HTML_ATTR(BODY,BACKGROUND), HTML_ATTR(BODY,BGCOLOR), HTML_ATTR(BODY,CLASS), HTML_ATTR(BODY,DIR), HTML_ATTR(BODY,ID), HTML_ATTR(BODY,LANG), HTML_ATTR(BODY,LINK), HTML_ATTR(BODY,STYLE), HTML_ATTR(BODY,TEXT), HTML_ATTR(BODY,TITLE), HTML_ATTR(BODY,VLINK), HTML_ATTRIBUTES(BODY) }; /* ( BR ) */ enum _HTML_BR_Attributes { HTML_ATTR(BR,CLASS) = 0, HTML_ATTR(BR,CLEAR), HTML_ATTR(BR,ID), HTML_ATTR(BR,STYLE), HTML_ATTR(BR,TITLE), HTML_ATTRIBUTES(BR) }; /* ( BUTTON ) */ enum _HTML_BUTTON_Attributes { HTML_ATTR(BUTTON,ACCESSKEY) = 0, HTML_ATTR(BUTTON,CLASS), HTML_ATTR(BUTTON,DIR), HTML_ATTR(BUTTON,DISABLED), HTML_ATTR(BUTTON,ID), HTML_ATTR(BUTTON,LANG), HTML_ATTR(BUTTON,NAME), HTML_ATTR(BUTTON,STYLE), HTML_ATTR(BUTTON,TABINDEX), HTML_ATTR(BUTTON,TITLE), HTML_ATTR(BUTTON,TYPE), HTML_ATTR(BUTTON,VALUE), HTML_ATTRIBUTES(BUTTON) }; /* ( COL ) */ enum _HTML_COL_Attributes { HTML_ATTR(COL,CLASS) = 0, HTML_ATTR(COL,DIR), HTML_ATTR(COL,ID), HTML_ATTR(COL,LANG), HTML_ATTR(COL,SPAN), HTML_ATTR(COL,STYLE), HTML_ATTR(COL,TITLE), HTML_ATTR(COL,WIDTH), HTML_ATTRIBUTES(COL) }; /* ( DEL, INS ) */ enum _HTML_CHANGES_Attributes { HTML_ATTR(CHANGES,CITE) = 0, HTML_ATTR(CHANGES,CLASS), HTML_ATTR(CHANGES,DATETIME), HTML_ATTR(CHANGES,DIR), HTML_ATTR(CHANGES,ID), HTML_ATTR(CHANGES,LANG), HTML_ATTR(CHANGES,STYLE), HTML_ATTR(CHANGES,TITLE), HTML_ATTRIBUTES(CHANGES) }; /* ( FONT - Deprecated ) */ enum _HTML_FONT_Attributes { HTML_ATTR(FONT,CLASS) = 0, HTML_ATTR(FONT,COLOR), HTML_ATTR(FONT,DIR), HTML_ATTR(FONT,FACE), HTML_ATTR(FONT,ID), HTML_ATTR(FONT,LANG), HTML_ATTR(FONT,SIZE), HTML_ATTR(FONT,STYLE), HTML_ATTR(FONT,TITLE), HTML_ATTRIBUTES(FONT) }; /* ( FORM ) */ enum _HTML_FORM_Attributes { HTML_ATTR(FORM,ACCEPT) = 0, HTML_ATTR(FORM,ACCEPT_CHARSET), /* { "ACCEPT-CHARSET" } */ HTML_ATTR(FORM,ACTION), HTML_ATTR(FORM,CLASS), HTML_ATTR(FORM,DIR), HTML_ATTR(FORM,ENCTYPE), HTML_ATTR(FORM,ID), HTML_ATTR(FORM,LANG), HTML_ATTR(FORM,METHOD), HTML_ATTR(FORM,STYLE), HTML_ATTR(FORM,TARGET), HTML_ATTR(FORM,TITLE), HTML_ATTRIBUTES(FORM) }; /* ( FRAME ) */ enum _HTML_FRAME_Attributes { HTML_ATTR(FRAME,CLASS) = 0, HTML_ATTR(FRAME,FRAMEBORDER), HTML_ATTR(FRAME,ID), HTML_ATTR(FRAME,NAME), HTML_ATTR(FRAME,MARGINHEIGHT), HTML_ATTR(FRAME,MARGINWIDTH), HTML_ATTR(FRAME,NORESIZE), HTML_ATTR(FRAME,LONGDESC), HTML_ATTR(FRAME,SCROLLING), HTML_ATTR(FRAME,SRC), HTML_ATTR(FRAME,STYLE), HTML_ATTR(FRAME,TARGET), HTML_ATTR(FRAME,TITLE), HTML_ATTRIBUTES(FRAME) }; /* ( FRAMESET ) */ enum _HTML_FRAMESET_Attributes { HTML_ATTR(FRAMESET,CLASS) = 0, HTML_ATTR(FRAMESET,COLS), HTML_ATTR(FRAMESET,ID), HTML_ATTR(FRAMESET,ROWS), HTML_ATTR(FRAMESET,STYLE), HTML_ATTR(FRAMESET,TITLE), HTML_ATTRIBUTES(FRAMESET) }; /* ( Generic attributes ) */ enum _HTML_GEN_Attributes { HTML_ATTR(GEN,CLASS) = 0, HTML_ATTR(GEN,DIR), HTML_ATTR(GEN,ID), HTML_ATTR(GEN,LANG), HTML_ATTR(GEN,STYLE), HTML_ATTR(GEN,TITLE), HTML_ATTRIBUTES(GEN) }; /* ( BLOCK ) */ enum _HTML_BLOCK_Attributes { HTML_ATTR(BLOCK,ALIGN) = 0, HTML_ATTR(BLOCK,CLASS), HTML_ATTR(BLOCK,DIR), HTML_ATTR(BLOCK,ID), HTML_ATTR(BLOCK,LANG), HTML_ATTR(BLOCK,STYLE), HTML_ATTR(BLOCK,TITLE), HTML_ATTRIBUTES(BLOCK) }; /* ( HEAD ) */ enum _HTML_HEAD_Attributes { HTML_ATTR(HEAD,DIR) = 0, HTML_ATTR(HEAD,LANG), HTML_ATTR(HEAD,PROFILE), HTML_ATTRIBUTES(HEAD) }; /* ( HR ) */ enum _HTML_HR_Attributes { HTML_ATTR(HR,ALIGN) = 0, HTML_ATTR(HR,CLASS), HTML_ATTR(HR,DIR), HTML_ATTR(HR,ID), HTML_ATTR(HR,LANG), HTML_ATTR(HR,NOSHADE), HTML_ATTR(HR,SIZE), HTML_ATTR(HR,STYLE), HTML_ATTR(HR,TITLE), HTML_ATTR(HR,WIDTH), HTML_ATTRIBUTES(HR) }; /* ( HTML ) */ enum _HTML_HTML_Attributes { HTML_ATTR(HTML,DIR) = 0, HTML_ATTR(HTML,LANG), HTML_ATTR(HTML,VERSION), HTML_ATTRIBUTES(HTML) }; /* ( IFRAME ) */ enum _HTML_IFRAME_Attributes { HTML_ATTR(IFRAME,ALIGN) = 0, HTML_ATTR(IFRAME,CLASS), HTML_ATTR(IFRAME,FRAMEBORDER), HTML_ATTR(IFRAME,HEIGHT), HTML_ATTR(IFRAME,ID), HTML_ATTR(IFRAME,LONGDESC), HTML_ATTR(IFRAME,MARGINHEIGHT), HTML_ATTR(IFRAME,MARGINWIDTH), HTML_ATTR(IFRAME,NAME), HTML_ATTR(IFRAME,SCROLLING), HTML_ATTR(IFRAME,SRC), HTML_ATTR(IFRAME,STYLE), HTML_ATTR(IFRAME,TARGET), HTML_ATTR(IFRAME,TITLE), HTML_ATTR(IFRAME,WIDTH), HTML_ATTRIBUTES(IFRAME) }; /* ( IMG ) */ enum _HTML_IMG_Attributes { HTML_ATTR(IMG,ALIGN) = 0, HTML_ATTR(IMG,ALT), HTML_ATTR(IMG,BORDER), HTML_ATTR(IMG,CLASS), HTML_ATTR(IMG,DIR), HTML_ATTR(IMG,HEIGHT), HTML_ATTR(IMG,HSPACE), HTML_ATTR(IMG,ID), HTML_ATTR(IMG,ISMAP), HTML_ATTR(IMG,LANG), HTML_ATTR(IMG,LONGDESC), HTML_ATTR(IMG,SRC), HTML_ATTR(IMG,STYLE), HTML_ATTR(IMG,TITLE), HTML_ATTR(IMG,USEMAP), HTML_ATTR(IMG,VSPACE), HTML_ATTR(IMG,WIDTH), HTML_ATTRIBUTES(IMG) }; /* ( INPUT ) */ enum _HTML_INPUT_Attributes { HTML_ATTR(INPUT,ACCEPT) = 0, HTML_ATTR(INPUT,ACCESSKEY), HTML_ATTR(INPUT,ALIGN), HTML_ATTR(INPUT,ALT), HTML_ATTR(INPUT,CHECKED), HTML_ATTR(INPUT,CLASS), HTML_ATTR(INPUT,DIR), HTML_ATTR(INPUT,DISABLED), HTML_ATTR(INPUT,ID), HTML_ATTR(INPUT,LANG), HTML_ATTR(INPUT,MAXLENGTH), HTML_ATTR(INPUT,NAME), HTML_ATTR(INPUT,READONLY), HTML_ATTR(INPUT,SIZE), HTML_ATTR(INPUT,SRC), HTML_ATTR(INPUT,STYLE), HTML_ATTR(INPUT,TABINDEX), HTML_ATTR(INPUT,TITLE), HTML_ATTR(INPUT,TYPE), HTML_ATTR(INPUT,USEMAP), HTML_ATTR(INPUT,VALUE), HTML_ATTRIBUTES(INPUT) }; /* ( ) */ enum _HTML_ISINDEX_Attributes { HTML_ATTR(ISINDEX,CLASS) = 0, HTML_ATTR(ISINDEX,DIR), HTML_ATTR(ISINDEX,ID), HTML_ATTR(ISINDEX,LANG), HTML_ATTR(ISINDEX,PROMPT), HTML_ATTR(ISINDEX,STYLE), HTML_ATTR(ISINDEX,TITLE), HTML_ATTRIBUTES(ISINDEX) }; /* ( ) */ enum _HTML_LABEL_Attributes { HTML_ATTR(LABEL,ACCESSKEY) = 0, HTML_ATTR(LABEL,CLASS), HTML_ATTR(LABEL,DIR), HTML_ATTR(LABEL,FOR), HTML_ATTR(LABEL,ID), HTML_ATTR(LABEL,LANG), HTML_ATTR(LABEL,STYLE), HTML_ATTR(LABEL,TITLE), HTML_ATTRIBUTES(LABEL) }; /* ( ) */ enum _HTML_LEGEND_Attributes { HTML_ATTR(LEGEND,ACCESSKEY) = 0, HTML_ATTR(LEGEND,ALIGN), HTML_ATTR(LEGEND,CLASS), HTML_ATTR(LEGEND,DIR), HTML_ATTR(LEGEND,ID), HTML_ATTR(LEGEND,LANG), HTML_ATTR(LEGEND,STYLE), HTML_ATTR(LEGEND,TITLE), HTML_ATTRIBUTES(LEGEND) }; /* ( LI ) */ enum _HTML_LI_Attributes { HTML_ATTR(LI,CLASS) = 0, HTML_ATTR(LI,COMPACT), HTML_ATTR(LI,DIR), HTML_ATTR(LI,ID), HTML_ATTR(LI,LANG), HTML_ATTR(LI,STYLE), HTML_ATTR(LI,TITLE), HTML_ATTR(LI,TYPE), HTML_ATTR(LI,VALUE), HTML_ATTRIBUTES(LI) }; /* ( LINK ) */ enum _HTML_LINK_Attributes { HTML_ATTR(LINK,CHARSET) = 0, HTML_ATTR(LINK,CLASS), HTML_ATTR(LINK,DIR), HTML_ATTR(LINK,HREF), HTML_ATTR(LINK,HREFLANG), HTML_ATTR(LINK,ID), HTML_ATTR(LINK,LANG), HTML_ATTR(LINK,MEDIA), HTML_ATTR(LINK,REL), HTML_ATTR(LINK,REV), HTML_ATTR(LINK,STYLE), HTML_ATTR(LINK,TARGET), HTML_ATTR(LINK,TITLE), HTML_ATTR(LINK,TYPE), HTML_ATTRIBUTES(LINK) }; /* ( MAP ) */ enum _HTML_MAP_Attributes { HTML_ATTR(MAP,CLASS) = 0, HTML_ATTR(MAP,DIR), HTML_ATTR(MAP,ID), HTML_ATTR(MAP,LANG), HTML_ATTR(MAP,NAME), HTML_ATTR(MAP,STYLE), HTML_ATTR(MAP,TITLE), HTML_ATTRIBUTES(MAP) }; /* ( META ) */ enum _HTML_META_Attributes { HTML_ATTR(META,CONTENT) = 0, HTML_ATTR(META,DIR), HTML_ATTR(META,HTTP_EQUIV), /* { "HTTP-EQUIV" ) */ HTML_ATTR(META,LANG), HTML_ATTR(META,NAME), HTML_ATTR(META,SCHEME), HTML_ATTRIBUTES(META) }; /* ( NEXTID ) */ #define HTML_NEXTID_ATTRIBUTES 1 #define HTML_NEXTID_N 0 /* ( OBJECT ) */ enum _HTML_OBJECT_Attributes { HTML_ATTR(OBJECT,ALIGN) = 0, HTML_ATTR(OBJECT,ARCHIVE), HTML_ATTR(OBJECT,BORDER), HTML_ATTR(OBJECT,CLASS), HTML_ATTR(OBJECT,CLASSID), HTML_ATTR(OBJECT,CODEBASE), HTML_ATTR(OBJECT,CODETYPE), HTML_ATTR(OBJECT,DATA), HTML_ATTR(OBJECT,DECLARE), HTML_ATTR(OBJECT,DIR), HTML_ATTR(OBJECT,HEIGHT), HTML_ATTR(OBJECT,HSPACE), HTML_ATTR(OBJECT,ID), HTML_ATTR(OBJECT,LANG), HTML_ATTR(OBJECT,NAME), HTML_ATTR(OBJECT,STANDBY), HTML_ATTR(OBJECT,STYLE), HTML_ATTR(OBJECT,TABINDEX), HTML_ATTR(OBJECT,TITLE), HTML_ATTR(OBJECT,TYPE), HTML_ATTR(OBJECT,USEMAP), HTML_ATTR(OBJECT,VSPACE), HTML_ATTR(OBJECT,WIDTH), HTML_ATTRIBUTES(OBJECT) }; /* ( OL ) */ enum _HTML_OL_Attributes { HTML_ATTR(OL,CLASS) = 0, HTML_ATTR(OL,COMPACT), HTML_ATTR(OL,DIR), HTML_ATTR(OL,ID), HTML_ATTR(OL,LANG), HTML_ATTR(OL,START), HTML_ATTR(OL,STYLE), HTML_ATTR(OL,TITLE), HTML_ATTR(OL,TYPE), HTML_ATTRIBUTES(OL) }; /* ( OPTGROUP ) */ enum _HTML_OPTGROUP_Attributes { HTML_ATTR(OPTGROUP,CLASS) = 0, HTML_ATTR(OPTGROUP,DISABLED), HTML_ATTR(OPTGROUP,DIR), HTML_ATTR(OPTGROUP,ID), HTML_ATTR(OPTGROUP,LABEL), HTML_ATTR(OPTGROUP,LANG), HTML_ATTR(OPTGROUP,STYLE), HTML_ATTR(OPTGROUP,TITLE), HTML_ATTRIBUTES(OPTGROUP) }; /* ( OPTION ) */ enum _HTML_OPTION_Attributes { HTML_ATTR(OPTION,CLASS) = 0, HTML_ATTR(OPTION,DISABLED), HTML_ATTR(OPTION,DIR), HTML_ATTR(OPTION,ID), HTML_ATTR(OPTION,LABEL), HTML_ATTR(OPTION,LANG), HTML_ATTR(OPTION,SELECTED), HTML_ATTR(OPTION,STYLE), HTML_ATTR(OPTION,TITLE), HTML_ATTR(OPTION,VALUE), HTML_ATTRIBUTES(OPTION) }; /* ( PARAM ) */ enum _HTML_PARAM_Attributes { HTML_ATTR(PARAM,ID) = 0, HTML_ATTR(PARAM,NAME), HTML_ATTR(PARAM,TYPE), HTML_ATTR(PARAM,VALUE), HTML_ATTR(PARAM,VALUETYPE), HTML_ATTRIBUTES(PARAM) }; /* ( PRE ) */ enum _HTML_PRE_Attributes { HTML_ATTR(PRE,CLASS) = 0, HTML_ATTR(PRE,DIR), HTML_ATTR(PRE,ID), HTML_ATTR(PRE,LANG), HTML_ATTR(PRE,STYLE), HTML_ATTR(PRE,TITLE), HTML_ATTR(PRE,WIDTH), HTML_ATTRIBUTES(PRE) }; /* ( SCRIPT ) */ enum _HTML_SCRIPT_Attributes { HTML_ATTR(SCRIPT,CHARSET) = 0, HTML_ATTR(SCRIPT,DEFER), HTML_ATTR(SCRIPT,LANGUAGE), HTML_ATTR(SCRIPT,SRC), HTML_ATTR(SCRIPT,TYPE), HTML_ATTRIBUTES(SCRIPT) }; /* ( SELECT ) */ enum _HTML_SELECT_Attributes { HTML_ATTR(SELECT,CLASS) = 0, HTML_ATTR(SELECT,DIR), HTML_ATTR(SELECT,DISABLED), HTML_ATTR(SELECT,ID), HTML_ATTR(SELECT,LANG), HTML_ATTR(SELECT,MULTIPLE), HTML_ATTR(SELECT,NAME), HTML_ATTR(SELECT,SIZE), HTML_ATTR(SELECT,STYLE), HTML_ATTR(SELECT,TABINDEX), HTML_ATTR(SELECT,TITLE), HTML_ATTRIBUTES(SELECT) }; /* ( STYLE ) */ enum _HTML_STYLE_Attributes { HTML_ATTR(STYLE,DIR) = 0, HTML_ATTR(STYLE,LANG), HTML_ATTR(STYLE,MEDIA), HTML_ATTR(STYLE,TITLE), HTML_ATTR(STYLE,TYPE), HTML_ATTRIBUTES(STYLE) }; /* ( TABLE ) */ enum _HTML_TABLE_Attributes { HTML_ATTR(TABLE,ALIGN) = 0, HTML_ATTR(TABLE,BGCOLOR), HTML_ATTR(TABLE,BORDER), HTML_ATTR(TABLE,CELLPADDING), HTML_ATTR(TABLE,CELLSPACING), HTML_ATTR(TABLE,CLASS), HTML_ATTR(TABLE,DIR), HTML_ATTR(TABLE,FRAME), HTML_ATTR(TABLE,ID), HTML_ATTR(TABLE,LANG), HTML_ATTR(TABLE,RULES), HTML_ATTR(TABLE,SUMMARY), HTML_ATTR(TABLE,STYLE), HTML_ATTR(TABLE,TITLE), HTML_ATTR(TABLE,WIDTH), HTML_ATTRIBUTES(TABLE) }; /* ( TABLE Elements ) */ enum _HTML_TELE_Attributes { HTML_ATTR(TELE,ALIGN) = 0, HTML_ATTR(TELE,CHAR), HTML_ATTR(TELE,CHAROFF), HTML_ATTR(TELE,CLASS), HTML_ATTR(TELE,DIR), HTML_ATTR(TELE,ID), HTML_ATTR(TELE,LANG), HTML_ATTR(TELE,STYLE), HTML_ATTR(TELE,TITLE), HTML_ATTR(TELE,VALIGN), HTML_ATTRIBUTES(TELE) }; /* ( TD ) */ enum _HTML_TD_Attributes { HTML_ATTR(TD,ABBR) = 0, HTML_ATTR(TD,ALIGN), HTML_ATTR(TD,AXIS), HTML_ATTR(TD,BGCOLOR), HTML_ATTR(TD,CHAR), HTML_ATTR(TD,CHAROFF), HTML_ATTR(TD,CLASS), HTML_ATTR(TD,COLSPAN), HTML_ATTR(TD,DIR), HTML_ATTR(TD,ID), HTML_ATTR(TD,HEADERS), HTML_ATTR(TD,HEIGHT), HTML_ATTR(TD,LANG), HTML_ATTR(TD,NOWRAP), HTML_ATTR(TD,ROWSPAN), HTML_ATTR(TD,SCOPE), HTML_ATTR(TD,STYLE), HTML_ATTR(TD,TITLE), HTML_ATTR(TD,VALIGN), HTML_ATTR(TD,WIDTH), HTML_ATTRIBUTES(TD) }; /* ( TEXTAREA ) */ enum _HTML_TEXTAREA_Attributes { HTML_ATTR(TEXTAREA,CLASS) = 0, HTML_ATTR(TEXTAREA,COLS), HTML_ATTR(TEXTAREA,DIR), HTML_ATTR(TEXTAREA,DISABLED), HTML_ATTR(TEXTAREA,ID), HTML_ATTR(TEXTAREA,LANG), HTML_ATTR(TEXTAREA,NAME), HTML_ATTR(TEXTAREA,READONLY), HTML_ATTR(TEXTAREA,ROWS), HTML_ATTR(TEXTAREA,STYLE), HTML_ATTR(TEXTAREA,TABINDEX), HTML_ATTR(TEXTAREA,TITLE), HTML_ATTRIBUTES(TEXTAREA) }; /* ( TITLE ) */ enum _HTML_TITLE_Attributes { HTML_ATTR(TITLE,DIR) = 0, HTML_ATTR(TITLE,LANG), HTML_ATTRIBUTES(TITLE) }; /* ( UL ) */ enum _HTML_UL_Attributes { HTML_ATTR(UL,CLASS) = 0, HTML_ATTR(UL,COMPACT), HTML_ATTR(UL,DIR), HTML_ATTR(UL,ID), HTML_ATTR(UL,LANG), HTML_ATTR(UL,STYLE), HTML_ATTR(UL,TITLE), HTML_ATTR(UL,TYPE), HTML_ATTRIBUTES(UL) }; /* . The C Representation of the SGML DTD . */ extern SGML_dtd * HTML_dtd (void); extern BOOL HTML_setDtd (const SGML_dtd * dtd); /* . Utitity Functions . ( Start anchor element ) It is kinda convenient to have a particular routine for starting an anchor element, as everything else for HTML is simple anyway. */ extern void HTStartAnchor ( HTStructured * targetstream, const char * name, const char * href); /* ( Put image element ) This is the same idea but for images */ extern void HTMLPutImg (HTStructured *obj, const char *src, const char *alt, const char *align); /* ( Specify next ID to be used ) This is another convenience routine, for specifying the next ID to be used by an editor in the series z1. z2,... */ extern void HTNextID (HTStructured * targetStream, const char * s); /* */ #endif /* HTMLDTD_H */ /* @(#) $Id: HTMLPDTD.html,v 2.32 2025/01/06 10:48:50 kahan Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMemLog.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001636�07405520455�015545� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Generic String Management ! Memory Buffered Logging ! */ /* ** (c) COPYRIGHT MIT 199G. ** Please first read the full copyright statement in the file COPYRIGH. */ /* These functions provide functionality for memory buffered logging. This is usefull for tracking data read and written without affecting the timing of the network traffic. This module is implemented by HTMemLog.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMEMLOG_H #define HTMEMLOG_H /* . The Whole Deal . Too much to do right now. */ extern int HTMemLog_open (char * logName, size_t size, BOOL keepOpen); extern int HTMemLog_add (char * buf, size_t len); extern int HTMemLog_flush (void); extern void HTMemLog_close (void); extern HTTraceDataCallback HTMemLog_callback; /* */ #endif /* !HTMEMLOG_H */ /* @(#) $Id: HTMemLog.html,v 2.6 2025/05/14 02:10:44 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������libwww/Library/src/HTMemory.h�����������������������������������������������������������������������0100644�0000764�0000144�00000011504�07405520455�015630� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Dynamic Memory Handlers ! Dynamic Memory Handlers ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module defines any memory handler to be used by libwww for allocating and de-allocating dynamic memory. As dynamic memory may be a scarce resource, it is required that an application can handle memory exhaustion gracefully. This module provides an interface that covers the following situations: o Handling of allocation, reallocation and de-allocation of dynamic memory o Recovering from temporary lack of available memory o Panic handling in case a new allocation fails Note: The Library core provides a default set of memory handlers for allocating and de-allocating dynamic memory. In order to maintain a reasonable performance, they are not registered dynamically but assigned using C style macros. Hence, it is not possible to swap memory handler at run time but this was considered to be a reasonable trade-off. This module is implemented by HTMemory.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMEMORY_H #define HTMEMORY_H #include "HTUtils.h" /* . Allocation, Reallocation and De-allocation . The Library provides a default set of methods for handling dynamic memory. They are very basic and essentially identical to the C style malloc, calloc, realloc, and free: */ extern void* HTMemory_malloc(size_t size); extern void* HTMemory_calloc(size_t count, size_t size); extern void* HTMemory_realloc(void * ptr, size_t size); extern void HTMemory_free(void* ptr); /* ( Memory Macros ) The methods above are not referred directly in the Library. Instead we use a set of C style macros. If you don't wany any memory management beyond normal malloc and alloc then you can just use that instead of the HTMemory_* function. You can of course also provide your own methods as well. */ #define HT_MALLOC(size) HTMemory_malloc((size)) #define HT_CALLOC(count, size) HTMemory_calloc((count), (size)) #define HT_REALLOC(ptr, size) HTMemory_realloc((ptr), (size)) #define HT_FREE(pointer) {HTMemory_free((pointer));((pointer))=NULL;} /* . Memory Freer Functions . The dynamic memory freer functions are typically functions that are capable of freeing large chunks of memory. In case a new allocation fails, the allocation method looks for any registered freer functions to call. There can be multiple freer functions and after each call, the allocation method tries again to allocate the desired amount of dynamic memory. The freer functions are called in reverse order meaning that the last one registered gets called first. That way, it is easy to add temporary freer functions which then are guaranteed to be called first if a methods fails. ( Add a Freer Function ) You can add a freer function by using the following method. The Library may itself register a set of free functions during initialization. If the application does not register any freer functions then the Library looks how it can free internal memory. The freer function is passed the total number of bytes requested by the allocation. */ typedef void HTMemoryCallback(size_t size); extern BOOL HTMemoryCall_add (HTMemoryCallback * cbf); /* ( Delete a Freer Function ) Freer functions can be deleted at any time in which case they are not called anymore. */ extern BOOL HTMemoryCall_delete (HTMemoryCallback * cbf); extern BOOL HTMemoryCall_deleteAll (void); /* . Panic Handling . If the freer functions are not capable of de-allocation enough memory then the application must have an organized way of closing down. This is done using the panic handler. In the libwww, each allocation is tested and HT_OUTOFMEM is called if a NULL was returned. HT_OUTOFMEM is a macro which by default calls HTMemory_outofmem() but of course can point to any method. The default handler calls an exit function defined by the application in a call to HTMemory_setExit(). If the application has not defined an exit function, HTMemory_outofmem() prints an error message and calls exit(1). */ typedef void HTMemory_exitCallback(char *name, char *file, unsigned long line); extern void HTMemory_setExit(HTMemory_exitCallback * pExit); extern HTMemory_exitCallback * HTMemory_exit(void); /* ( Call the Exit Handler ) If an allocation fails then this function is called. If the application has registered its own panic handler then this is called directly from this function. Otherwise, the default behavior is to write a small message to stderr and then exit. */ #define outofmem(file, name) HT_OUTOFMEM(name) #define HT_OUTOFMEM(name) HTMemory_outofmem((name), __FILE__, __LINE__) extern void HTMemory_outofmem(char * name, char * file, unsigned long line); /* */ #endif /* HTMEMORY_H */ /* @(#) $Id: HTMemory.html,v 2.12 2025/05/14 02:10:45 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMerge.h������������������������������������������������������������������������0100644�0000764�0000144�00000001505�07405520455�015417� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Merge Stream ! Merge stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Merge stream can be used to merge multiple streams into a single target stream. The Merge stream does not prevent any of the streams from writing and no ordering is imposed. The main feature is basically that the free and abort methods can be called n times where n equals the number of feeds that put data to the stream. This module is implemented by HTMerge.c, and it is a part of the W3C Sample Code Library. */ #ifndef _HTMERGE_H #define _HTMERGE_H #include "HTStream.h" extern HTStream * HTMerge (HTStream * target, int feeds); #endif /* HTMERGE_H */ /* @(#) $Id: HTMerge.html,v 2.3 2025/05/14 02:10:45 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMethod.h�����������������������������������������������������������������������0100644�0000764�0000144�00000004052�07405520455�015600� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Request Access Methods ! Request Access Methods ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module keeps a list of valid methods to be performed on a request object, for example GET, HEAD, PUT, POST, DELETE, etc.&nbsp;You can assign which method to be performed on the request object directly or you can go through the Access module for higher level functions. This module is implemented by HTMethod.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMETHOD_H #define HTMETHOD_H /* NOTE: The anchor list of allowed methods is a bitflag, not at list! */ typedef enum { METHOD_INVALID = 0x0, METHOD_GET = 0x1, METHOD_HEAD = 0x2, METHOD_POST = 0x4, METHOD_PUT = 0x8, METHOD_PATCH = 0x10, METHOD_DELETE = 0x20, METHOD_TRACE = 0x40, METHOD_OPTIONS = 0x80, METHOD_LINK = 0x100, METHOD_UNLINK = 0x200 } HTMethod; /* ( Get Method Enumeration ) Gives the enumeration value of the method as a function of the (char *) name. */ extern HTMethod HTMethod_enum (const char * name); /* ( Get Method String ) The reverse of HTMethod_enum() */ extern const char * HTMethod_name (HTMethod method); /* ( Is Method "Safe"? ) If a method is safe, it doesn't produce any side effects on the server */ #define HTMethod_isSafe(me) ((me) & (METHOD_GET|METHOD_HEAD)) /* ( Does the Method Replace or Add to Metainformation ) Most methods override the current set of metainformation stored in an anchor. However, a few methods actually only add to the anchor metainformation. We have a small macro to make the distinction. */ #define HTMethod_addMeta(me) ((me) & (METHOD_TRACE | METHOD_OPTIONS)) /* ( Does a Method include Entity? ) Does a method include an entity to be sent from the client to the server? */ #define HTMethod_hasEntity(me) ((me) & (METHOD_PUT | METHOD_POST)) /* */ #endif /* HTMETHOD_H */ /* @(#) $Id: HTMethod.html,v 2.16 2025/05/14 02:10:45 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMulpar.h�����������������������������������������������������������������������0100644�0000764�0000144�00000003244�07405520455�015622� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MIME MULTIPART STREAM !MIME Multipart Stream Definition! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is a part of the W3C Sample Code Library. */ #ifndef HTMULPAR_H #define HTMULPAR_H #include "HTStream.h" #include "HTList.h" /* The MIME multipart stream is used to parse MIME multipart messages. It works a bit like a structured stream in that it has some methods to begin and end MIME body just as a structured stream has methods for beginning and ending tags. The HTMultipart stream is a subclass of a Generic Stream Object. As always, we don't have classes in basic C so we have to do this by hand! */ typedef struct _HTMultipart HTMultipart; typedef struct _HTMultipartClass { char * name; int (*flush) (HTMultipart * me); int (*_free) (HTMultipart * me); int (*abort) (HTMultipart * me, HTList * errorlist); int (*put_character)(HTMultipart * me, char ch); int (*put_string) (HTMultipart * me, const char * str); int (*put_block) (HTMultipart * me, const char * str, int len); /* See the Generic Stream Definition for an explanation of these methods. Note that they all have a HTMultipart object a the parameter, not a generic stream. This is to avoid incompatible pointer warnings */ int (*begin_part) (HTMultipart * me, const char * boundary); int (*end_part) (HTMultipart * me); int (*preamble) (HTMultipart * me, const char * pre); int (*epilogue) (HTMultipart * me, const char * epi); } HTMultipartClass; #endif /* @(#) $Id: HTMulpar.html,v 2.6 2025/05/14 02:10:46 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMulti.h������������������������������������������������������������������������0100644�0000764�0000144�00000003200�07405520456�015445� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Content Negotiation ! Content Negotation ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* As part of the HTTP content negotiation, a server must be able to match the preferences sent by the client in an HTTP request with the possible set of documents that it has avaiable for this URL. For example , it may have an English and a Danish version in which case it looks at the Accept-Language header and sees what the client prefers. The Library has a simple "Match" algorithm for finding the best as specified by the HTTP specification. As the content algorithm is part of the File Interface then all file access regardless of whether it is from a server or a client application will be able to content negotiotion. This module is implemented by HTMulti.c, and it is a part of the W3C Sample Code Library */ #ifndef HTMULTI_H #define HTMULTI_H #include "HTReq.h" /* This function is used when the best match among several possible documents is to be found as a function of the accept headers sent in the client request. . Set the default Welcome page . Set default file name for welcome page on each directory. */ extern void HTAddWelcome (char * welcome_name); /* . Content Negotiation Algorithm . This function looks for a set of bindings between a set of possible objects to be served on a request on the local file system. */ extern char * HTMulti (HTRequest * req, char * path, struct stat * stat_info); /* */ #endif /* HTMULTI_H */ /* @(#) $Id: HTMulti.html,v 2.17 2025/05/14 02:10:46 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMuxCh.h������������������������������������������������������������������������0100644�0000764�0000144�00000006211�07405520456�015404� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MUX Protocol ! The MUX Protocol ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module defines the read and write functions to and from the network. As we are having reentrant function and a smarter network I/O this will get very small :-) This module is implemented by HTMux.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMUXCHANNEL_H #define HTMUXCHANNEL_H typedef struct _HTMuxChannel HTMuxChannel; typedef struct _HTMuxSession HTMuxSession; typedef struct _HTMuxProtocol HTMuxProtocol; typedef unsigned char HTMuxSessionId; #include "HTMuxHeader.h" #include "HTChannl.h" #include "HTHost.h" #define INVSID 0 /* Invalid session id */ #define INVPID 0 /* Invalid protocol id */ /* . Mux Channel . */ extern HTMuxChannel * HTMuxChannel_new (HTHost * host); extern HTMuxChannel * HTMuxChannel_find (HTHost * host); extern BOOL HTMuxChannel_delete (HTMuxChannel * me); extern BOOL HTMuxChannel_deleteAll (void); extern HTNet * HTMuxChannel_net (HTMuxChannel * me); extern HTMuxSession * HTMuxChannel_findSession (HTMuxChannel * me, HTMuxSessionId sid); extern HTMuxSession * HTMuxChannel_findSessionFromNet (HTMuxChannel * me, HTNet * net); extern HTHost * HTMuxChannel_host (HTMuxChannel * muxch); extern int HTMuxChannel_sendControl (HTMuxChannel * muxch, HTMuxSessionId sid, HTMuxHeader opcode, int value, const void * param, int param_size); /* . Mux Session . */ typedef enum _HTMuxClose { MUX_S_END_READ = 0x1, MUX_S_END_WRITE = 0x2, MUX_S_END = 0x3 } HTMuxClose; extern HTMuxSessionId HTMuxSession_accept (HTMuxChannel * muxch, HTNet * net, HTProtocolId pid); extern HTMuxSessionId HTMuxSession_connect (HTMuxChannel * muxch, HTNet * net, HTProtocolId pid); extern int HTMuxSession_close (HTMuxChannel * muxch, HTMuxSessionId sid); extern HTMuxSession * HTMuxSession_register (HTMuxChannel * muxch, HTMuxSessionId sid, HTProtocolId pid); extern HTMuxSessionId HTMuxSession_id (HTMuxSession * session); extern HTProtocolId HTMuxSession_pid (HTMuxSession * session); extern HTNet * HTMuxSession_net (HTMuxSession * session); extern BOOL HTMuxSession_setClose (HTMuxChannel * muxch, HTMuxSession * session, HTMuxClose close); extern int HTMuxSession_credit (HTMuxSession * session); extern BOOL HTMuxSession_setCredit (HTMuxChannel * muxch, HTMuxSessionId sid, int credit); extern int HTMuxSession_fragment (HTMuxSession * session); extern BOOL HTMuxSession_setFragment (HTMuxChannel * muxch, HTMuxSessionId sid, int fragment); extern int HTMuxSession_disposeData (HTMuxSession * me, const char * buf, int len); /* . Mux Protocol . */ extern BOOL HTMuxProtocol_add (HTMuxChannel * muxch, HTProtocolId pid, const char * protocol); extern BOOL HTMuxProtocol_delete (HTMuxChannel * muxch, HTProtocolId pid); /* */ #endif /* @(#) $Id: HTMuxCh.html,v 2.5 2025/08/04 10:37:51 kahan Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMuxHeader.h��������������������������������������������������������������������0100644�0000764�0000144�00000004511�07405520456�016243� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MUX Header Definition ! MUX Header Definition ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Define the parts of a mux header as defined by the MUX draft specification. This is not finalized so be warned! This module is does not contain a .c file. It is a part of the W3C Sample Code Library. */ #ifndef HTMUXHEADER_H #define HTMUXHEADER_H /* . Byte Swapping . MUX is currently using little endian headers. */ #ifdef WORDS_BIGENDIAN #define HT_WORDSWAP(a) ( ((a) << 24) | \ (((a) << 8) & 0x00ff0000) | \ (((a) >> 8) & 0x0000ff00) | \ ((unsigned int)(a) >> 24) ) #else #define HT_WORDSWAP(a) ((a)) #endif /* . The MUX Header . Simple, huh? */ typedef unsigned int HTMuxHeader; /* ( Generic Header flags ) */ #define MUX_LONG_LENGTH 0x80000000 #define MUX_CONTROL 0x40000000 /* ( Data Header Flags ) */ #define MUX_FLAGS 0x3C000000 #define MUX_SYN 0x20000000 #define MUX_FIN 0x10000000 #define MUX_RST 0x08000000 #define MUX_PUSH 0x04000000 /* ( Control Header Opcodes ) */ #define MUX_OPCODES 0x3C000000 #define MUX_STRING 0x00000000 #define MUX_STACK 0x04000000 #define MUX_FRAGMENT 0x08000000 #define MUX_CREDIT 0x0C000000 /* ( Length and Session ID ) */ #define MUX_SESSION 0x03FC0000 #define MUX_LENGTH 0x0003FFFF /* . Macros for Byte Shifting . */ #define MUX_SET_SID(sid) ((sid) << 18) #define MUX_SET_LEN(len) ((len)) #define MUX_SET_PID MUX_SET_LEN #define MUX_SET_OPCODE(op) ((op) << 26) #define MUX_GET_SID(sid) (((sid) & MUX_SESSION) >> 18) #define MUX_GET_LEN(len) ((len) & MUX_LENGTH) #define MUX_GET_PID MUX_GET_LEN #define MUX_GET_OPCODE(op) ((op) & MUX_OPCODES >> 26) /* . Header Alignment . You can force 8 byte alignment by defining this to 1. Normally, we decide pr MUX segment whether we have to use a long header or not. */ #define LONG_LENGTH 0 /* 4 or 8 bytes header? */ #define MUX_IS_LONG(hdr) ((hdr) & MUX_LONG_LENGTH) #define MUX_ALIGN(len) ((len) + ((4-(len)%4) % 4)) #define MUX_LONG_ALIGN(len) ((len) + ((8-(len)%8) % 8)) /* . Default Values . */ #define DEFAULT_CREDIT 4096 /* */ #endif /* @(#) $Id: HTMuxHeader.html,v 2.3 2025/05/14 02:10:48 frystyk Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTMuxTx.h������������������������������������������������������������������������0100644�0000764�0000144�00000001574�07405520456�015454� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Buffered MUX Writer Stream ! Buffered MUX Writer Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The MUX Writer Stream is an output stream &nbsp;which knows how to write to a MUX channel. It is part of the Transport interface and may be registered as part of a Transport Object. In the default initialization module, you can find the HTTransportInit() function which sets up this stream as a default transport for handling unbuffered socket write operations. This module is implemented by HTMuxTx.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTMUXWRITE_H #define HTMUXWRITE_H /* */ #define MUX_BUFFER_SIZE 2048 extern HTOutput_new HTMuxBuffer_new; /* */ #endif /* @(#) $Id: HTMuxTx.html,v 2.3 2025/05/14 02:10:48 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNDir.h�������������������������������������������������������������������������0100644�0000764�0000144�00000005257�07405520456�015225� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww News/NNTP Browsing ! Generic News/NNTP Browsing ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This news browser generates listings for NNTP reponses. This module contains the protocol independent code and it produces the HTML object. It is only included if the NNTP. This module is implemented by HTNDir.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTNDIR_H #define HTNDIR_H #include "HTReq.h" /* . What Should the Listings Look Like? . You can set how the listings are to be sorted using the following flags. */ typedef enum _HTNewsDirKey { HT_NDK_NONE = 0, /* Unsorted */ HT_NDK_INDEX = 1, /* Sort by Message Number */ HT_NDK_DATE = 2, /* Sort by date */ HT_NDK_SUBJECT = 3, /* Sort by Subject */ HT_NDK_FROM = 4, /* Sort by Sender */ HT_NDK_GROUP = 5, /* Sort group listing */ HT_NDK_REFTHREAD = 6 /* Sort messages by date and thread Added by MP */ } HTNewsDirKey; /* . The News Listing Object . The news listing object handles the generation of a news listing. It is a bit like a stream in that it accept data, but it must be formatted in a special way which makes the normal stream architecture inadequate. ( Create a News Listing Object ) Creates a structured stream object and sets up the initial HTML stuff Returns the dir object if OK, else NULL */ typedef struct _HTNewsDir HTNewsDir; extern HTNewsDir * HTNewsDir_new (HTRequest * request, const char * title, HTNewsDirKey key, BOOL cache); /* ( Add a Line to the List ) This function accepts a news line. Everything except dir and nama can can be 0 or NULL. Returns YES if OK, else NO */ typedef struct _HTNewsNode HTNewsNode; extern HTNewsNode * HTNewsDir_addElement (HTNewsDir * dir, int index, char * subject, char * from, time_t date, char * name, int refs, HTList * refNames); extern HTNewsNode * HTNewsDir_addGroupElement (HTNewsDir * dir, char * group, BOOL tmplate); /* ( Check Whether Group Belongs to the Group Set ) Returns TRUE if group belongs to set, e.g. group "soc.rec.jokes" belongs to the set "soc.rec.*". Added by MP */ extern BOOL HTNewsDir_belongsToSet (HTNewsDir* dir, char* group); /* ( Free a News Listing Object ) If we are sorting then do the sorting and put out the list, else just append the end of the list. */ extern BOOL HTNewsDir_free (HTNewsDir * dir); /* */ #endif /* HTNDIR */ /* @(#) $Id: HTNDir.html,v 2.8 2025/05/14 02:10:50 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNet.h��������������������������������������������������������������������������0100644�0000764�0000144�00000047263�07405520456�015122� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTNet Class ! The Net Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Net class manages information related to a "thread" in libwww. As libwww threads are not really threads but a notion of using interleaved, non-blocking I/O for accessing data objects from the network (or local file system), they can be used on any platform with or without support for native threads. In the case where you have an application using real threads the Net class is simply a object maintaining links to all other objects involved in serving the request. If you are using the libwww pseudo threads then the Net object contains enough information to stop and start a request based on which BSD sockets are ready. In practise this is of course transparent to the application - this is just to explain the difference. When a Request object is passed to the Library , the core creates a new HTNet object per channel used by the request. In many cases a request only uses a single channel object but, for example, FTP requests use at least two - one for the control connection and one for the data connection. You can find more information about the libwww pseudo thread model in the Multithread Specifications. This module is implemented by HTNet.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTNET_H #define HTNET_H /* The HTNet object is the core of the request queue management. This object contains information about the socket descriptor, the input read buffer etc. required to identify and service a request. */ typedef struct _HTNet HTNet; #include "HTEvent.h" #include "HTReq.h" #include "HTResponse.h" #include "HTTrans.h" #include "HTHost.h" #include "HTProt.h" #include "HTChannl.h" #include "HTDNS.h" /* . Generic BEFORE and AFTER Filter Management . Filter functions can be registered to be called before and after a request has either been started or has terminated. The conditions for BEFORE and AFTER filters are not the same, and so we maintain them independently. Filters can be registered globally or locally. The global filters are registered directly by the Net Object (this module) and the local filters are registered by the HTRequest Object. However, both &nbsp;local and global filters use the same regisration mechanism which we provide here. ( Filter Ordering ) Filters can be registered by anyone and as they are an often used mechanism for introducing extensions in libwww, they are videly used to handle authentication, redirection, etc. Many filters can be registered at once and not all of the filters may know about the other filters. Therefore, it is difficult to specify an absolute ordering by which the filters should be called. Instead you can decide a relative order by which the filters should be called. The order works pretty much like the Unix priority mechanism running from HT_FILTER_FIRST to HT_FILTER_LAST having HT_FILTER_MIDDLE being the "normal" case. */ typedef enum _HTFilterOrder { HT_FILTER_FIRST = 0x0, /* 0 */ HT_FILTER_EARLY = 0x3FFF, /* 16383 */ HT_FILTER_MIDDLE = 0x7FFF, /* 32767 */ HT_FILTER_LATE = 0xBFFE, /* 49150 */ HT_FILTER_LAST = 0xFFFF /* 65535 */ } HTFilterOrder; /* In case multiple filters are registered with the same order then they are called in the inverse order they were registered.&nbsp; ( Filter URL Templates ) Both BEFORE and AFTER filters can be registered with a URL template in which case they are only called when the Request URL matches the template. A template is simply a string which is matched against the Request URL. The string can be terminated by a&nbsp;single "*" in which case all strings matching the template up til the "*" is considered a match. A template can be as short as the access scheme which enmables a filter for a specific access method only, for example "http//<star>". ( BEFORE Filters ) A BEFORE filter is called whenever we issue a request and they have been selected by the execution procedure. BEFORE filters are registered with a context and a filter order by which they are to be called and a URL template which may be NULL. In this case, the filter is called on every request. The mode can be used by anybody to pass an extra parameter to a filter. This is not really OO thinking - but hey - this is C ;-) */ typedef int HTNetBefore (HTRequest * request, void * param, int mode); /* You can add a BEFORE filter in the list provided by the caller. Several filters can be registered in which case they are called with the filter ordering in mind. */ extern BOOL HTNetCall_addBefore (HTList * list, HTNetBefore * before, const char * tmplate, void * param, HTFilterOrder order); /* You can also unregister all instances of a BEFORE filter from a list using the following function */ extern BOOL HTNetCall_deleteBefore (HTList * list, HTNetBefore * before); /* You get rid of all BEFORE filters using this function */ extern BOOL HTNetCall_deleteBeforeAll (HTList * list); /* The BEFORE filters are expected and called if appropriate every time we issue a new request. Libwww calls the BEFORE filters in the order specified at registration time. If a filter returns other than HT_OK then stop and return immediately. Otherwise return what the last filter returns. */ extern int HTNetCall_executeBefore (HTList * list, HTRequest * request); /* ( AFTER Filters ) An AFTER filter is called whenever we have terminated a request. That is, on the way out from the protocol module and back to the application. AFTER filters are registered with a context, a status, a filter order by which they are to be called and a URL template which may be NULL. The status of the request may determine which filter to call. The set of possible values are given below. An AFTER filter can be registered to handle one or more of the codes. HT_ERROR An error occured HT_LOADED The document was loaded HT_NO_DATA OK, but no data HT_NO_ACCESS The request could not be succeeded due to lack of credentials HT_NO_PROXY_ACCESS The request could not be succeeded due to lack of credentials for accessing an intermediate proxy HT_RETRY Retry request after at a later time HT_PERM_REDIRECT The request has been permanently redirected and we send back the new URL HT_TEMP_REDIRECT The request has been temporarily redirected and we send back the new URL HT_ALL All of above A Protocol module can also, in certain cases, return a HT_IGNORE in which case no filters are called */ typedef int HTNetAfter (HTRequest * request, HTResponse * response, void * param, int status); /* You can register a AFTER filter in the list provided by the caller. Several filters can be registered in which case they are called with the filter ordering in mind. */ extern BOOL HTNetCall_addAfter (HTList * list, HTNetAfter * after, const char * tmplate, void * param, int status, HTFilterOrder order); /* You can either unregister all filters registered for a given status using this function or the filter for all status codes. */ extern BOOL HTNetCall_deleteAfter (HTList * list, HTNetAfter * after); extern BOOL HTNetCall_deleteAfterStatus (HTList * list, int status); /* You can also delete all AFTER filters in list */ extern BOOL HTNetCall_deleteAfterAll (HTList * list); /* This function calls all the AFTER filters in the order specified at registration time and if it has the right status code and it's not HT_IGNORE. We also check for any template and whether it matches or not. If a filter returns other than HT_OK then stop and return immediately. Otherwise return what the last filter returns. */ extern int HTNetCall_executeAfter (HTList * list, HTRequest * request, int status); /* . Global BEFORE and AFTER Filter Management . Global filters are inspected on every request (they do not have to be called - only if the conditions match). You can also register filters locally in the Request object. Global BEFORE Filters These are the methods to handle global BEFORE Filters. */ extern BOOL HTNet_setBefore (HTList * list); extern HTList * HTNet_before (void); extern BOOL HTNet_addBefore (HTNetBefore * before, const char * tmplate, void * param, HTFilterOrder order); extern BOOL HTNet_deleteBefore (HTNetBefore * before); /* You can call both the local and the global BEFORE filters (if any) */ extern int HTNet_executeBeforeAll (HTRequest * request); /* Global AFTER Filters These are the methods to handle global AFTER Filters. */ extern BOOL HTNet_setAfter (HTList * list); extern HTList * HTNet_after (void); extern BOOL HTNet_addAfter (HTNetAfter * after, const char * tmplate, void * param, int status, HTFilterOrder order); extern BOOL HTNet_deleteAfter (HTNetAfter * after); extern BOOL HTNet_deleteAfterStatus (int status); /* You can call both the local and the global AFTER filters (if any) */ extern int HTNet_executeAfterAll (HTRequest * request, int status); /* . Socket Resource Management . The request queue ensures that no more than a fixed number of TCP connections are open at the same time. If more requests are handed to the Library, they are put into the pending queue and initiated when sockets become free. ( Number of Simultanous open TCP connections ) Set the max number of simultanous sockets. The default value is HT_MAX_SOCKETS which is 6. The number of persistent connections depend on this value as a deadlock can occur if all available sockets a persistent (see the DNS Manager for more information on setting the number of persistent connections). The number of persistent connections can never be more than the max number of sockets-2, so letting newmax=2 prevents persistent sockets. */ extern BOOL HTNet_setMaxSocket (int newmax); extern int HTNet_maxSocket (void); /* ( Socket Counters ) */ extern void HTNet_increaseSocket (void); extern void HTNet_decreaseSocket (void); extern int HTNet_availableSockets (void); /* ( Persistent Socket Counters ) */ extern void HTNet_increasePersistentSocket (void); extern void HTNet_decreasePersistentSocket (void); extern int HTNet_availablePersistentSockets (void); /* ( Any Ongoing Connections? ) Returns whether there are active requests. Idle persistent sockets do not count as active. */ extern BOOL HTNet_isIdle (void); /* ( List Active Queue ) Returns the list of active requests that are currently having an open connection. Returns list of HTNet objects or NULL if error. */ extern HTList *HTNet_activeQueue (void); extern BOOL HTNet_idle (void); /* ( Are we Active? ) We have some small functions that tell whether there are registered requests in the Net manager. There are tree queues: The active, the pending, and the persistent. The active queue is the set of requests that are actively sending or receiving data. The pending is the requests that we have registered but which are waiting for a free socket. The Persistent queue are requets that are waiting to use the same socket in order to save network resoures (if the server understands persistent connections). Active Requests? Returns whether there are requests in the active queue or not */ extern BOOL HTNet_idle (void); /* Registered Requests? Returns whether there are requests registered in any of the lists or not */ extern BOOL HTNet_isEmpty (void); extern int HTNet_count (void); /* ( List Pending Queue ) Returns the list of pending requests that are waiting to become active. Returns list of HTNet objects or NULL if error */ extern HTList *HTNet_pendingQueue (void); /* . Creation and Deletion Methods . The Net object is intended to live as long as the request is still active. In that regard it is very similar to the Request Object . However, the main difference is that a Net object represents a "thread" in the Library and a request may have multiple "threads" - an example is a FTP request which has a thread to handle the control connection and one to handle the data connections. ( Create a new Object ) If we have more than HTMaxActive connections already then put this into the pending queue, else start the request by calling the call back function registered with this access method. Returns YES if OK, else NO */ extern BOOL HTNet_newClient (HTRequest * request); /* You can create a new HTNet object as a new request to be handled. If we have more than HTMaxActive connections already then return NO. Returns YES if OK, else NO */ extern BOOL HTNet_newServer (HTRequest * request); /* And you can create a plain new HTNet object using the following method: */ extern HTNet * HTNet_new (HTHost * host); /* ( Duplicate an existing Object ) Creates a new HTNet object as a duplicate of the same request. Returns YES if OK, else NO. */ extern HTNet * HTNet_dup (HTNet * src); extern BOOL HTNet_deleteDup (HTNet * dup); /* ( Launch a Net Object ) Start a Net obejct by calling the protocol module. */ extern BOOL HTNet_start (HTNet * net); /* ( Call a Net Event Handler ) This functions lets the caller play event manager as it can calls any event handler with the event type and context passed to the function */ extern BOOL HTNet_execute (HTNet * net, HTEventType type); extern HTEvent * HTNet_event (HTNet * net); extern BOOL HTNet_setEventParam (HTNet * net, void * eventParam); extern void * HTNet_eventParam (HTNet * net); extern BOOL HTNet_setEventCallback(HTNet * net, HTEventCallback * cbf); extern HTEventCallback * HTNet_eventCallback(HTNet * net); /* ( Delete an Object ) Deletes the HTNet object from the list of active requests and calls any registered call back functions IF not the status is HT_IGNORE. This is used if we have internal requests that the app doesn't know about. We also see if we have pending requests that can be started up now when we have a socket free. The filters are called in the reverse order of which they were registered (last one first); */ extern BOOL HTNet_delete (HTNet * me, int status); /* ( Delete ALL HTNet Objects ) Deletes all HTNet object that might either be active or pending We DO NOT call the call back functions - A crude way of saying goodbye! */ extern BOOL HTNet_deleteAll (void); /* . Net Class Methods . ( Make an Object Wait ) Let a net object wait for a persistent socket. It will be launched from the HTNet_delete() function when the socket gets free. */ extern BOOL HTNet_wait (HTNet *net); /* ( Priority Management ) Each HTNet object is created with a priority which it inherits from the Request manager. However, in some stuations it is useful to be to change the current priority after the request has been started. These two functions allow you to do this. The effect will show up the first time (which might be imidiately) the socket blocks and control returns to the event loop. Also have a look at how you can do this before the request is issued in the request manager. */ extern HTPriority HTNet_priority (HTNet * net); extern BOOL HTNet_setPriority (HTNet * net, HTPriority priority); /* ( Persistent Connections ) You can set a Net object to handle persistent connections for example using HTTP, NNTP, or FTP. You can control whether a Net object supports persistent connections or not using this function. */ extern BOOL HTNet_persistent (HTNet * net); /* You can set or disable a Net object supporting persistent connections using this function: */ extern BOOL HTNet_setPersistent (HTNet * net, BOOL persistent, HTTransportMode mode); /* ( Kill one or more Requests ) Kill this request and all requests in the Pipeline When pipelining, it is not possible to kill a single request as we then loose track of where we are in the pipe. It is therefore necessary to kill the whole pipeline. */ extern BOOL HTNet_killPipe (HTNet * net); /* Kill a single Request This is not often used anymore, consider using the pipeline version above. Kill the request by calling the call back function with a request for closing the connection. Does not remove the object. This is done by HTNet_delete() function which is called by the load routine. Returns OK if success, NO on error. */ extern BOOL HTNet_kill (HTNet * me); /* Kill ALL Requests Kills all registered (active as well as pending) requests by calling the call back function with a request for closing the connection. We do not remove the HTNet object as it is done by HTNet_delete(). Returns OK if success, NO on error */ extern BOOL HTNet_killAll (void); /* ( Create Input and Output Streams ) You create the input stream and bind it to the channel using the following methods. Please read the description in the HTIOStream module on the parameters target, param, and mode. Both methods return YES if OK, else NO. */ #if 0 extern HTInputStream * HTNet_getInput (HTNet * net, HTStream * target, void * param, int mode); #endif extern HTOutputStream * HTNet_getOutput (HTNet * me, void * param, int mode); /* ( Net Context Descriptor ) Just like the request object, a net object can be assigned a context which keeps track of context dependent information. The Library does not use this information nor does it depend on it but it allows the application to customize a net object to specific uses. */ extern BOOL HTNet_setContext (HTNet * net, void * context); extern void * HTNet_context (HTNet * net); /* ( Socket Descriptor ) */ extern BOOL HTNet_setSocket (HTNet * net, SOCKET sockfd); extern SOCKET HTNet_socket (HTNet * net); /* ( Preemptive or Non-preemptive Access ) A access scheme is defined with a default for using either preemptive (blocking I/O) or non-premitve (non-blocking I/O). This is basically a result of the implementation of the protocol module itself. However, if non-blocking I/O is the default then some times it is nice to be able to set the mode to blocking instead. For example when loading the first document (the home page) then blocking can be used instead of non-blocking. */ extern BOOL HTNet_preemptive (HTNet * net); /* ( The Request Object ) The Request object is normally set up automatically but can be changed at a later time. */ extern BOOL HTNet_setRequest (HTNet * net, HTRequest * request); extern HTRequest * HTNet_request (HTNet * net); /* ( The Protocol Object ) */ extern BOOL HTNet_setProtocol (HTNet * net, HTProtocol * protocol); extern HTProtocol * HTNet_protocol (HTNet * net); /* ( The Transport Object ) The transport object is normally set up automatically but can be changed at a later time. */ extern BOOL HTNet_setTransport (HTNet * net, HTTransport * tp); extern HTTransport * HTNet_transport (HTNet * net); /* ( The Channel Object ) */ extern BOOL HTNet_setChannel (HTNet * net, HTChannel * channel); extern HTChannel * HTNet_channel (HTNet * net); /* ( The Host Object ) */ extern BOOL HTNet_setHost (HTNet * net, HTHost * host); extern HTHost * HTNet_host (HTNet * net); /* ( The DNS Object ) The DNS object keeps track of the DNS entries that we have already checked out. */ extern BOOL HTNet_setDns (HTNet * net, HTdns * dns); extern HTdns * HTNet_dns (HTNet * net); /* ( Target for Input Read Stream ) */ extern HTStream * HTNet_readStream(HTNet * net); extern BOOL HTNet_setReadStream (HTNet * net, HTStream * stream); /* ( Should we count Raw bytes? ) This functions can be used to determine whether bytes count should be managed at the low level read stream or at a higher level. If the data transfer equals the lifetime of a single document like for example in FTP or HTTP/1.0 then this may be a reasonable thing to do. */ extern BOOL HTNet_setRawBytesCount (HTNet * net, BOOL mode); extern BOOL HTNet_rawBytesCount (HTNet * net); /* */ #endif /* HTNET_H */ /* @(#) $Id: HTNet.html,v 2.57 2025/07/04 15:18:51 kahan Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNetMan.h�����������������������������������������������������������������������0100644�0000764�0000144�00000007366�07405520456�015556� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Private Net Definition ! Private Net Definition ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the private definition of the Net Class. Please look in the public Net Class for more documentation This module is implemented by HTNet.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTNETMAN_H #define HTNETMAN_H #include "HTNet.h" #include "HTDNS.h" #include "HTEvent.h" #include "HTProt.h" /* The HTNet object is the core of the request queue management. This object contains information about the socket descriptor, the input read buffer etc. required to identify and service a request. */ struct _HTNet { int hash; /* Hash value */ /* Link to other objects */ HTRequest * request; /* Link to request object */ HTHost * host; /* What we know about the remote host */ HTProtocol * protocol; /* Protocol to this request */ HTTransport * transport; /* Transport for this request */ int session; /* For progress notifications */ BOOL countRawBytes; /* If we should count raw bytes */ long bytesRead; /* Bytes in body */ long headerBytesRead; /* Bytes read in header */ long bytesWritten; /* Bytes written to network */ long headerBytesWritten; /* Bytes written in header */ #if 0 int retry; /* Counting attempts to connect */ int home; /* Current home if multiple */ #endif time_t connecttime; /* Used on multihomed hosts */ BOOL preemptive; /* Eff result from Request and Protocol */ HTEvent event; HTStream * readStream; /* host's input stream puts data here */ /* User specific stuff */ void * context; /* Protocol Specific context */ /* Eric's sleezoid cheat - should go to extra pipeline object */ HTEventType registeredFor; }; extern SOCKET HTNet_socket(HTNet * me); /* . Bytes Read Stats . ( Total Bytes Read ) */ #define HTNet_setBytesRead(me,l) ((me) ? (me->bytesRead=(l)) : -1) #define HTNet_bytesRead(me) ((me) ? (me)->bytesRead : -1) #define HTNet_addBytesRead(me,l) ((me) ? (me->bytesRead+=(l)) : -1) /* ( Header Bytes Read ) */ #define HTNet_setHeaderBytesRead(me,l) ((me) ? (me->headerBytesRead=(l)) :-1) #define HTNet_headerBytesRead(me) ((me) ? (me)->headerBytesRead : -1) #define HTNet_addHeaderBytesRead(me,l) ((me) ? (me->headerBytesRead+=(l)) : -1) /* . Bytes Written Stats . ( Total Bytes Written ) */ #define HTNet_setBytesWritten(me,l) ((me) ? (me->bytesWritten=(l)) :-1) #define HTNet_bytesWritten(me) ((me) ? (me)->bytesWritten : -1) #define HTNet_addBytesWritten(me,l) ((me) ? (me->bytesWritten+=(l)) : -1) /* ( Header Bytes Written ) */ #define HTNet_setHeaderBytesWritten(me,l) ((me) ? (me->headerBytesWritten=(l)) :-1) #define HTNet_headerBytesWritten(me) ((me) ? \ ((me)->headerBytesWritten==0 ? \ HTNet_bytesWritten(me) : \ (me)->headerBytesWritten) : -1) #define HTNet_addHeaderBytesWritten(me,l) ((me) ? (me->headerBytesWritten+=(l)) : -1) /* . Event Callbacks . */ extern BOOL HTNet_setEventParam(HTNet * net, void * eventParam); extern void* HTNet_eventParam(HTNet * net); extern BOOL HTNet_setEventCallback(HTNet * net, HTEventCallback * cbf); extern HTEventCallback * HTNet_eventCallback(HTNet * net); extern BOOL HTNet_setEventPriority(HTNet * net, HTPriority priority); extern HTPriority HTNet_eventPriority(HTNet * net); /* */ #endif /* HTNETMAN_H */ /* @(#) $Id: HTNetMan.html,v 2.25 2025/09/24 19:48:52 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNetTxt.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001337�07405520456�015612� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww CRLF Stripper Stream ! Network Telnet To Internal Character Text ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is a filter stream suitable for taking text from a socket and passing it into a stream which expects text in the local C representation. It does newline conversion. As usual, pass its output stream to it when creating it. This module is implemented by HTNetTxt.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTNETTXT_H #define HTNETTXT_H extern HTStream * HTNetToText (HTStream * target); #endif /* @(#) $Id: HTNetTxt.html,v 2.11 2025/02/14 04:00:10 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNews.h�������������������������������������������������������������������������0100644�0000764�0000144�00000002271�07405520456�015276� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww NNTP State Machine ! NNTP State Machine ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the News/NNTP client module that handles all communication with News/NNTP-servers. This module is implemented by HTNews.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTNEWS_H #define HTNEWS_H #include "HTProt.h" /* We define the max NNTP line as rather long as the result coming from a XOVER command needs it. If the line is longer then it is chopped, but we will almost have received the information we're looking for. */ #ifndef NEWS_PORT #define NEWS_PORT 119 /* See rfc977 */ #endif #define MAX_NEWS_LINE 4096 extern HTProtCallback HTLoadNews; /* ( Setting Number of Articles to Show ) You can set the number of news articles to be shown at a time. If you set the number to none (0) then all articles are shown at once. This is also the default behavior. */ extern BOOL HTNews_setMaxArticles (int new_max); extern int HTNews_maxArticles (void); /* */ #endif /* HTNEWS_H */ /* @(#) $Id: HTNews.html,v 2.29 2025/05/14 02:10:52 frystyk Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNewsLs.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001443�07405520456�015575� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww News/NNTP Listings ! News/NNTP Article and Group Listings ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module converts a generic News group listing to a HTML object This module is implemented by HTFTPDir.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTNEWSLS_H #define HTNEWSLS_H #include "HTStream.h" #include "HTFormat.h" #include "HTNet.h" extern HTConverter HTNewsList, HTNewsGroup; /* ( Newsgroup List Cache ) The news list cache uses a URL tree to store the information */ HTNetBefore HTNewsCache_before; HTNetAfter HTNewsCache_after; /* */ #endif /* HTNEWSLS_H */ /* @(#) $Id: HTNewsLs.html,v 2.7 2025/05/14 02:10:53 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNewsRq.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001407�07405520456�015601� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww NNTP REQUEST STREAM !NNTP Request Stream! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The NNTP Request stream generates a NNTP request header and writes it to the target which is normally a HTWriter stream. This module is implemented by HTNewsRq.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTNEWSREQ_H #define HTNEWSREQ_H #include "HTStream.h" #include "HTAccess.h" /* (Streams Definition) This stream makes a HTNews request header before it goes into transparent mode. */ extern HTStream * HTNewsPost_new (HTRequest * request, HTStream * target); #endif /* @(#) $Id: HTNewsRq.html,v 2.5 2025/05/14 02:10:53 frystyk Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTNoFree.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001376�07405520456�015545� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww No Free Stream !No Free Stream! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This stream is a throughline for all methods except FREE and ABORT. This means that it can be use to put ahead of streams that you don't want to be freed or aborted until you are redy to do it yourself. This module is implemented by HTNoFree.c, and it is a part of the W3C Sample Code Library. */ #ifndef _HTNOFREE_H #define _HTNOFREE_H #include "HTStream.h" extern HTStream * HTNoFreeStream_new (HTStream * target); extern int HTNoFreeStream_delete (HTStream * me); #endif /* HTNOFREE_H */ /* @(#) $Id: HTNoFree.html,v 2.1 2025/02/01 18:41:11 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTPEP.h��������������������������������������������������������������������������0100644�0000764�0000144�00000010761�07405520456�015011� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww PEP Engine ! PEP Engine ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The PEP Manager is a registry for PEP Protocols that follow the generic syntax defined by the HTTP PEP protocol headers. All PEP Protocols are registered at run-time in form of a PEP Module. A PEP Module consists of the following: protocol The name which is used to identify the protocol. BEFORE Filter When a new request is issued, the PEP Manager looks in the URL tree to see if we have any PEP information for this particular request. The search is based on the realm (if known) in which the request belongs and the URL itself. If a record is found then the PEP Manager calls the PEP Module in order to generate the PEP protocol headers. AFTER Filter After a request has terminated and the result was lack of required PEP protocol headers, the request should normally be repeated with a new set of PEP protocol headers. The AFTER filter is responsible for extracting the challenge from the HTTP response and store it in the URL tree, so that we next time we request the same URL we know that it is protected and we can ask the user for the appropriate PRP protocol headers. garbage collection The PEP information is stored in a URL Tree but as it doesn't know the format of the protocol specific parts, you must register a garbage collector (gc). The gc is called when node is deleted in the tree. Note: The PEP Manager itself consists of BEFORE and an AFTER filter - just like the PEP Modules. This means that any PEP Module also can be registered directly as a BEFORE and AFTER filter by the Net Manager. The reason for having the two layer model is that the PEP Manager maintains a single URL tree for storing PEP information for all PEP Protocols. A PEP Module has three resources, it can use when creating PEP protocol headers: o Handle the PEP protocol headers send from the remote party (typically in the form of a HTTP response. o Handle the PEP protocol headers which typically are to part of the next request. o Add information to the URL Tree This module is implemented by HTPEP.c (get it?), and it is a part of the W3C Sample Code Library. */ #ifndef HTPEP_H #define HTPEP_H #include "HTList.h" #include "HTReq.h" #include "HTUTree.h" typedef struct _HTPEPModule HTPEPModule; /* . PEP Module Registration . A PEP Protocol is registered by registering an PEP Module to in the PEP Manager. ( Add a PEP Module ) You can add a PEP protocol by using the following method. Each of the callback function must have the type as defined below. */ extern HTPEPModule * HTPEP_newModule(const char * protocol, HTNetBefore * before, HTNetAfter * after, HTUTree_gc * gc); /* ( Find a PEP Module ) */ extern HTPEPModule * HTPEP_findModule (const char * protocol); /* ( Delete a PEP Module ) */ extern BOOL HTPEP_deleteModule (const char * protocol); /* ( Delete ALL PEP modules ) */ extern BOOL HTPEP_deleteAllModules (void); /* . Handling the URL Tree . The PEP information is stored as URL Trees. &nbsp;The root of a URL Tree is identified by a hostname and a port number. Each URL Tree contains a set of templates and realms which can be used to predict what information to use in a hierarchical tree. The URL trees are automatically collected after some time so the application does not have to worry about freeing the trees. When a node in a tree is freed, the gc registered as part of the PEP Module is called. Server applications can have different PEP setups for each hostname and port number, they control. For example, a server with interfaces "www.foo.com" and "internal.foo.com" can have different protection setups for each interface. ( Add information to the Database ) Add a PEP information node to the database. If the entry is already found then it is replaced with the new one. The template must follow normal URI syntax but can include a wildcard Return YES if added (or replaced), else NO */ extern HTPEPModule * HTPEP_findModule (const char * name); /* . The PEP Manager Filters . As mentioned, the PEP Manager is itself a set of filters that can be registered by the Net manager. */ extern HTNetBefore HTPEP_beforeFilter; extern HTNetAfter HTPEP_afterFilter; /* */ #endif /* NOT HTPEP_H */ /* @(#) $Id: HTPEP.html,v 2.5 2025/05/14 02:10:54 frystyk Exp $ */ ���������������libwww/Library/src/HTParse.h������������������������������������������������������������������������0100644�0000764�0000144�00000011271�07405520456�015434� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww URI Management ! URI Management ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module contains code to parse URIs and various related things such as: o Parse a URI for tokens o Canonicalization of URIs o Search a URI for illegal characters in order to prevent security holes This module is implemented by HTParse.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTPARSE_H #define HTPARSE_H #include "HTEscape.h" /* . Parsing URIs . These functions can be used to get information in a URI. ( Parse a URI relative to another URI ) This returns those parts of a name which are given (and requested) substituting bits from the related name where necessary. The aName argument is the (possibly relative) URI to be parsed, the relatedName is the URI which the aName is to be parsed relative to. Passing an empty string means that the aName is an absolute URI. The following are flag bits which may be OR'ed together to form a number to give the 'wanted' argument to HTParse. As an example we have the URL: "/TheProject.html#news" */ #define PARSE_ACCESS 16 /* Access scheme, e.g. "HTTP" */ #define PARSE_HOST 8 /* Host name, e.g. "www.w3.org" */ #define PARSE_PATH 4 /* URL Path, e.g. "pub/WWW/TheProject.html" */ #define PARSE_VIEW 2 /* Fragment identifier, e.g. "news" */ #define PARSE_FRAGMENT PARSE_VIEW #define PARSE_ANCHOR PARSE_VIEW #define PARSE_PUNCTUATION 1 /* Include delimiters, e.g, "/" and ":" */ #define PARSE_ALL 31 /* where the format of a URI is as follows: "ACCESS :// HOST / PATH # ANCHOR" PUNCTUATION means any delimiter like '/', ':', '#' between the tokens above. The string returned by the function must be freed by the caller. */ extern char * HTParse (const char * aName, const char * relatedName, int wanted); /* ( Create a Relative (Partial) URI ) This function creates and returns a string which gives an expression of one address as related to another. Where there is no relation, an absolute address is retured. On entry, Both names must be absolute, fully qualified names of nodes (no anchor bits) On exit, The return result points to a newly allocated name which, if parsed by HTParse relative to relatedName, will yield aName. The caller is responsible for freeing the resulting name later. */ extern char * HTRelative (const char * aName, const char *relatedName); /* . Is a URL Relative or Absolute? . Search the URL and determine whether it is a relative or absolute URL. We check to see if there is a ":" before any "/", "?", and "#". If this is the case then we say it is absolute. Otherwise we say it is relative. */ extern BOOL HTURL_isAbsolute (const char * url); /* . URL Canonicalization . Canonicalization of URIs is a difficult job, but it saves a lot of down loads and double entries in the cache if we do a good job. A URI is allowed to contain the seqeunce xxx/../ which may be replaced by "" , and the seqeunce "/./" which may be replaced by "/". Simplification helps us recognize duplicate URIs. Thus, the following transformations are done: o /etc/junk/../fred becomes /etc/fred o /etc/junk/./fred becomes /etc/junk/fred but we should NOT change o http://fred.xxx.edu/../.. or o ../../albert.html In the same manner, the following prefixed are preserved: o ./<etc> o //<etc> In order to avoid empty URIs the following URIs become: o /fred/.. becomes /fred/.. o /fred/././.. becomes /fred/.. o /fred/.././junk/.././ becomes /fred/.. If more than one set of `://' is found (several proxies in cascade) then only the part after the last `://' is simplified. */ extern char *HTSimplify (char **filename); /* . Prevent Security Holes . In many telnet like protocols, it can be very dangerous to allow a full ASCII character set to be in a URI. Therefore we have to strip them out. HTCleanTelnetString() makes sure that the given string doesn't contain characters that could cause security holes, such as newlines in ftp, gopher, news or telnet URLs; more specifically: allows everything between hexadesimal ASCII 20-7E, and also A0-FE, inclusive. str the string that is *modified* if necessary. The string will be truncated at the first illegal character that is encountered. returns YES, if the string was modified. NO, otherwise. */ extern BOOL HTCleanTelnetString (char * str); /* */ #endif /* HTPARSE_H */ /* @(#) $Id: HTParse.html,v 2.39 2025/08/04 08:10:53 kahan Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTPlain.h������������������������������������������������������������������������0100644�0000764�0000144�00000000730�07405520456�015423� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww PLAIN TEXT STREAM !Plain text object! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is implemented by HTPlain.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTPLAIN_H #define HTPLAIN_H #include "HTFormat.h" extern HTConverter HTPlainPresent; #endif /* @(#) $Id: HTPlain.html,v 2.20 2025/05/14 02:10:55 frystyk Exp $ */ ����������������������������������������libwww/Library/src/HTProfil.h�����������������������������������������������������������������������0100644�0000764�0000144�00000011030�07405520456�015606� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Default Initialization ! Application Profiles ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* As mentioned in the Library Architecture, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing RFC 822 headers etc. but it must all be registered by the application before the core knows about it. You can either register the parts directly through the many initialization functions in the Initialization Interface or you can use these "precompiled" profiles which are set up to contain the featuers often used by the a specific type of application, for example a client, a server, a robot etc. This module helps the application programmer setting up all this functionality, but it is important to note that none of it is required in order to use the Library. All the profiles declared below superseed the Library core initialization function HTLibInit() which is defined in the HTLib module. This module is implemented by HTProfil.c, and it is a part of the W3C Sample Code Library. You can also have a look at the other Initialization modules. */ #ifndef HTPROF_H #define HTPROF_H #include "WWWLib.h" #include "WWWInit.h" /* . Client Application Profiles . We have a couple of different client application profiles suited to different types of clients. ( Traditional Client Application ) The first uses a non-blocking socket interface which enables the application to perform multiple requests simultanously - in everyday words called pseudo-threads. Besides that this profile contains typical filters for handling redirection, authentication, logging, and proxy servers. */ extern void HTProfile_newClient ( const char * AppName, const char * AppVersion); /* ( Simple HTML Client ) As above but furthermore contains the default libwww HTML parser */ extern void HTProfile_newHTMLClient ( const char * AppName, const char * AppVersion); /* ( Client without a Persistent Cache ) This is the same as above except that it doesn't start the persistent cache. */ extern void HTProfile_newNoCacheClient ( const char * AppName, const char * AppVersion); /* ( Simple HTML Client without Persistent Cache ) As above but furthermore contains the default libwww HTML parser */ extern void HTProfile_newHTMLNoCacheClient ( const char * AppName, const char * AppVersion); /* ( Preemptive (Blocking) Client ) Do not use preemptive profiles if you are doing PUT or POST requests. We also have a blocking (preemptive) version of the same client interface. The difference is that this version uses traditional blocking sockets and hence only one request can be performed at the same time. */ extern void HTProfile_newPreemptiveClient ( const char * AppName, const char * AppVersion); /* . Robot Application Profile . The robot profile contains much of the same functionality as the client, but it does contain less filters. For example, robots are normally not interested in performing automatic redirections or access authentication, and hence this is not part of the robot profile. */ extern void HTProfile_newRobot ( const char * AppName, const char * AppVersion); /* Do not use preemptive profiles if you are doing PUT or POST requests. As for the client interfacem we also have a blocking (preemptive) version of the same interface. The difference is that this version uses traditional blocking sockets and hence only one reques can be performed at the same time. */ extern void HTProfile_newPreemptiveRobot ( const char * AppName, const char * AppVersion); /* . Delete a Profile . This is a generic profile cleanup that should be used on all the profiles above. This will clean up the memory allocated by the profile and by the Library core itself. After calling this you can not call any Library function again. This call also supersedes the termination function for the Library core, HTLibTerminate() so that you don't have to call that after calling this function. */ extern void HTProfile_delete (void); /* */ #endif /* @(#) $Id: HTProfil.html,v 2.8 2025/07/12 10:44:41 kahan Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTProt.h�������������������������������������������������������������������������0100644�0000764�0000144�00000012302�07405520456�015302� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ /* W3C Sample Code Library libwww Protocol Class !The Protocol Class! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Protocol class defines an application level protocol (HTTP, FTP, Gopher, etc.) to be used by libwww. Note that access to the local file system also is considered to be an appliaction level protocol treated identically to for example the HTTP protocol. The Protocol class does only know about the application layer protocol and it relies on the Transport Class to do the actualt communication with the network, the local file system etc. The protocol class defines an access method for both a client and a server. A typical client application would probably only want to use the client method and a server only the server method. However, any application can use both which allows it to seemlessly to change between server and client profile as needed. All protocol modules are dynamically bound to an access scheme. Take for example the address http://www.w3.org which has the access scheme http and if we have a protocol module capable of handling HTTP then we can make the binding between http and this module. As mentioned in the introduction to this chapter, the Library already comes with a large set of protocol module, including HTTP so all we have to do in this case is to register the HTTP module to the Library as being capable of handling http URLs. Libwww comes with a default set of protocols including the ones mentioned above which can be initiated using the function HTProtocolInit() in HTInit module One special case is the support for access to WAIS databases. WAIS has its own code Library called freeWAIS which is required in order to directly access wais URLs. We shall not describe in describe in detail here how this can be enabled as it is described in the WWW-WAIS gateway. This module is implemented by HTProt.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTPROT_H #define HTPROT_H typedef struct _HTProtocol HTProtocol; typedef u_short HTProtocolId; #include "HTReq.h" #include "HTAnchor.h" #include "HTEvent.h" #include "HTTrans.h" /* An access scheme module takes as a parameter a socket (which is an invalid socket the first time the function is called), a request structure containing details of the request, and the action by which the (valid) socket was selected in the event loop. When the protocol class routine is called, the anchor element in the request is already valid (made valid by HTAccess). .Creation and Deletion Methods. (Add an Protocol) This functions registers a protocol module and binds it to a specific access acheme (the part before the first colon in a URL). For example, the HTTP &nbsp;client module is bound to http URLs. The callback function is the function to be called for loading. */ typedef int HTProtCallback (SOCKET, HTRequest *); extern BOOL HTProtocol_add (const char * name, const char * transport, HTProtocolId port, BOOL preemptive, HTProtCallback * client, HTProtCallback * server); /* (Delete a Protocol) This functions deletes a registered protocol module so that it can not be used for accessing a resource anymore. */ extern BOOL HTProtocol_delete (const char * name); /* (Remove ALL Registered Protocols) This is the garbage collection function. It is called by HTLibTerminate() */ extern BOOL HTProtocol_deleteAll (void); /* .Protocol Class Methods. (Find a Protocol Object) You can search the list of registered protocol objects as a function of the access acheme. If an access scheme is found then the protocol object is returned. */ extern HTProtocol * HTProtocol_find (HTRequest * request, const char * access); /* (Get the callback functions) You can get the callback functions registered together with a protocol object using the following methods. */ extern HTProtCallback * HTProtocol_client (HTProtocol * protocol); extern HTProtCallback * HTProtocol_server (HTProtocol * protocol); /* (Get the default Protocol ID) Each protocol is registered with a default protocol ID which is the default port number that this protocol is using. In the case of FTP it is 21, for HTTP, it is 80 and for NNTP it is 119. */ extern HTProtocolId HTProtocol_id (HTProtocol * protocol); /* (Get the Protocol Name) Get the protocol name that was registered when the protocol object was created */ extern const char * HTProtocol_name (HTProtocol * protocol); /* (Is Access Scheme Preemptive) Returns YES if the implementation of the access scheme supports preemptive access only. */ extern BOOL HTProtocol_preemptive (HTProtocol * protocol); /* (Binding to the Transport Class) An application protocol is registered together with a transport protocol in order to communicate with the thansport layer. */ extern BOOL HTProtocol_setTransport (HTProtocol * protoccol, const char * transport); extern const char * HTProtocol_transport (HTProtocol * protocol); /* */ #endif /* HTPROT_H */ /* @(#) $Id: HTProt.html,v 2.25 2025/12/01 13:07:07 kahan Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTProxy.h������������������������������������������������������������������������0100644�0000764�0000144�00000012420�07405520456�015500� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Proxies and Gateways ! Proxy and gateway Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module keeps a list of proxies and gateways to be contacted on a request in stead of requesting it directly from the origin server. The module replaces the old system of environment variables for gateways and proxies. However for backward compatibility there is a function that reads the environment variables at start up. Note that there is a difference between a proxy and a gateway - the difference is the way the URL is set up in the RequestLine of the HTTP request. If the original, full URL looks like "http://www.w3.org/test.html" then the result will for a proxy is "http://www.w3.org/test.html" and a gateway "/www.w3.org/test.html" The module is implemented by HTProxy.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTPROXY_H #define HTPROXY_H #include "HTList.h" /* . Registering a Proxy Server . A proxy server is registered with a corresponding access method, for example http, ftp etc. The `proxy' parameter should be a fully valid name, like http://proxy.w3.org:8001 but domain name is not required. If an entry exists for this access then delete it and use the new one. */ extern BOOL HTProxy_add (const char * access, const char * proxy); /* ( Registering a Proxy Using Regular Expressions ) Registers a proxy as the server to contact for any URL matching the regular expression. This requires that you have compiled with the HT_POSIX_REGEX flag, see the installation instructions. If you call this function without having compiled with the HT_POSIX_REGEX flag then you will essentially get the non-regex version.&nbsp;The name of the proxy should be a fully valid URL, like "http://proxy.w3.org:8001". Returns YES if OK, else NO */ extern BOOL HTProxy_addRegex (const char * regex, const char * proxy, int regex_flags); /* ( Deleting All Registered Proxies ) */ extern BOOL HTProxy_deleteAll (void); /* The remove function removes all registered proxies. This is automatically done in HTLibTerminate() . Registering a No Proxy Location . The noproxy list is a list of host names and domain names where we don't contact a proxy even though a proxy is in fact registered for this particular access method . When registering a noproxy item, you can specify a specific port for this access method in which case it isvalid only for requests to this port. If `port' is '0' then it applies to all ports and if `access' is NULL then it applies to to all access methods. Examples of host names are w3.org and www.close.com */ extern BOOL HTNoProxy_add (const char * host, const char * access, unsigned port); /* ( Registering a NoProxy Location Using Regular Expressions ) Registers a regular expression where URIs matching this expression should go directly and not via a proxy. Examples: http://<star>\.w3\.org and http://www\.noproxy\.com/<star> (I use <star> in order not interfere with C comments) This requires that you have compiled with the HT_POSIX_REGEX flag, see the installation instructions. If you call this function without having compiled with the HT_POSIX_REGEX flag then you will essentially get the non-regex version.&nbsp; */ extern BOOL HTNoProxy_addRegex (const char * regex, int regex_flags); /* ( Delete all Noproxy Destinations ) */ extern BOOL HTNoProxy_deleteAll (void); /* The remove function removes all entries in the list. This is automatically done in HTLibTerminate() ( Inverse the meaning of the NoProxy list ) Allows to change the value of a flag so that the NoProxy list is interpreted as if it were an OnlyProxy list. */ extern int HTProxy_NoProxyIsOnlyProxy (void); extern void HTProxy_setNoProxyIsOnlyProxy (int value); /* . Look for a Proxy server . This function evaluates the lists of registered proxies and if one is found for the actual access method and it is not registered in the `noproxy' list, then a URL containing the host to be contacted is returned to the caller. This string must be freed be the caller. */ extern char * HTProxy_find (const char * url); /* . Registering a gateway . A gateway is registered with a corresponding access method, for example http, ftp etc. The `gate' parameter should be a fully valid name, like http://gateway.w3.org:8001 but domain name is not required. If an entry exists for this access then delete it and use the new one. */ extern BOOL HTGateway_add (const char * access, const char * gate); extern BOOL HTGateway_deleteAll (void); /* The remove function removes all registered proxies. This is automatically done in HTLibTerminate() . Look for a Gateway . This function evaluates the lists of registered gateways and if one is found for the actual access method then it is returned and must be freed by the caller. */ extern char * HTGateway_find (const char * url); /* . Backwards Compability with Environment Variables . This function maintains backwards compatibility with the old environment variables and searches for the most common values: http, ftp, news, wais, and gopher */ extern void HTProxy_getEnvVar (void); /* */ #endif /* HTPROXY_H */ /* @(#) $Id: HTProxy.html,v 2.14 2025/02/29 14:25:59 kahan Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTRDF.h��������������������������������������������������������������������������0100644�0000764�0000144�00000022774�07405520456�015007� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww RDF Parser ! RDF Parser Based on Expat and SiRPAC ! Written and integrated into libwww by John Punin - thanks! This module is implemented by HTRDF.c, and is a part of the W3C Sample Code Library. This RDF parser is based on Janne Saarela's Java based SiRPAC and James Clark's expat XML parser which isincluded in the libwww CVS code base where I compile is as two libraries: libxmltok.a and libxmlparse.a. See the external modules that libwww works with for details. */ #ifndef HTRDF_H #define HTRDF_H #include "HTHash.h" #define RDFMS "http://www.w3.org/1999/02/22-rdf-syntax-ns#" #define RDFSCHEMA "http://www.w3.org/TR/WD-rdf-schema#" #define XMLSCHEMA "xml" /* . RDF Triple Class . */ typedef struct _HTTriple HTTriple; extern HTTriple * HTTriple_new (char * p, char * s, char * o); extern BOOL HTTriple_delete (HTTriple * me); extern void HTTriple_print (HTTriple * me); extern char * HTTriple_subject (HTTriple * me); extern char * HTTriple_predicate (HTTriple * me); extern char * HTTriple_object (HTTriple * me); /* . RDF Element Class . */ typedef struct _HTElement HTElement; extern HTElement * HTElement_new (char * sName, HTAssocList * al); extern HTElement * HTElement_new2 (char * sContent); extern BOOL HTElement_addData (HTElement *me, char * sContent); extern BOOL HTElement_delete (HTElement * me); extern BOOL HTElement_addChild (HTElement * me, HTElement * element); extern BOOL HTElement_addAttribute (HTElement * me, char * sName, char * sValue); extern BOOL HTElement_removeAttribute (HTElement * me, char * sName); extern char * HTElement_getAttribute (HTElement * me, char * sName); extern char * HTElement_getAttribute2 (HTElement * me, char * sNamespace, char * sName); extern BOOL HTElement_addTarget (HTElement * me, HTElement * element); extern HTElement * HTElement_target (HTElement * me); extern BOOL HTElement_instanceOfData (HTElement * me); /* . RDF Parser & Compiler Definition . These methods create and deletes an RDF Parser/Compiler (SIRPAC) ( Create and Delete Parser Instance ) */ typedef struct _HTRDFParser HTRDF; extern HTRDF * HTRDF_new (void); extern BOOL HTRDF_delete (HTRDF * me); /* ( Callback Handler Announcing a new RDF Parser Object ) When a RDF parser object is created, the stream checks to see if there are any callbacks registered which should be notified about the new stream instance. If that is the case then this callback is called and a pointer to the RDF parser passed along. The output stream is the target that was originally set for the request object before the request was issued. */ typedef void HTRDFCallback_new ( HTStream * me, HTRequest * request, HTFormat target_format, HTStream * target_stream, HTRDF * rdfparser, void * context); /* Register RDF Parser Creation Notification Callback @@@Should be handled via XML names spaces@@@ */ extern BOOL HTRDF_registerNewParserCallback (HTRDFCallback_new *, void * context); /* ( Callback Handler Announcing a new RDF Triple ) Handler announcing that a new triple has been generated. */ typedef void HTTripleCallback_new ( HTRDF * rdfp, HTTriple * t, void * context); /* Register RDF Triple Creation Notification Callback */ extern BOOL HTRDF_registerNewTripleCallback ( HTRDF * me, HTTripleCallback_new * cbf, void * context); /* ( Set Address ) Saves the name of the source document for later inspection if needed */ extern BOOL HTRDF_setSource (HTRDF * me, char * source); /* ( Resolve Symbolic References ) Go through the m_vResolveQueue and assign direct object reference for each symbolic reference */ extern BOOL HTRDF_resolve(HTRDF *me); /* ( Find Suitable Start Element ) Given an XML document (well-formed HTML, for example), look for a suitable element to start parsing from */ extern BOOL HTRDF_processXML(HTRDF *me, HTElement *root); /* ( Return the root element pointer. ) This requires the parsing has been already done. */ extern HTElement * HTRDF_root(HTRDF *me); /* ( Return the full namespace URI for a given prefix sPrefix. ) The default namespace is identified with xmlns prefix. The namespace of xmlns attribute is an empty string. */ extern char * HTRDF_namespace (HTRDF * me, char * sPrefix); /* ( Parsing Literal or Resource? ) Methods to determine whether we are parsing parseType="Literal" or parseType="Resource" */ extern BOOL HTRDF_parseLiteral(HTRDF *me); extern BOOL HTRDF_parseResource(HTRDF *me); /* ( Resolve Later ) Add the element e to the m_vResolveQueue to be resolved later. */ extern void HTRDF_resolveLater(HTRDF *me,HTElement *e); /* ( Register ID ) Add an element e to the Hashtable m_hIDtable which stores all nodes with an ID */ extern void HTRDF_registerID(HTRDF *me, char * sID,HTElement *e); /* ( Register Resource ) Add an element e to the Vector m_vResources which stores all nodes with an URI */ extern void HTRDF_registerResource(HTRDF *me,HTElement *e); /* ( Look for Node ) Look for a node by name sID from the Hashtable m_hIDtable of all registered IDs. */ extern HTElement *HTRDF_lookforNode(HTRDF *me, char * sID); /* ( If Element from RDF Schema? ) Check if the element e is from the namespace of the RDF schema by comparing only the beginning of the expanded element name with the canonical RDFMS URI */ extern BOOL HTRDF_isRDF(HTRDF *me, HTElement *ele); extern BOOL HTRDF_isRDFroot(HTRDF *me, HTElement *ele); /* ( Is the element a Description? ) */ extern BOOL HTRDF_isDescription(HTRDF *me, HTElement *ele); /* ( Is the element a Predicate? ) This method matches all properties but those from RDF namespace */ extern BOOL HTRDF_isTypedPredicate(HTRDF *me, HTElement *e); /* ( Is the element a Container? ) */ extern BOOL HTRDF_isContainer(HTRDF *me, HTElement *e); /* ( Is the element a Bag? ) */ extern BOOL HTRDF_isBag(HTRDF *me, HTElement *e); /* ( Is the element an Alternative? ) */ extern BOOL HTRDF_isAlternative(HTRDF *me, HTElement *e); /* ( Is the element a Sequence? ) */ extern BOOL HTRDF_isSequence(HTRDF *me, HTElement *e); /* ( Is the element a ListItem? ) */ extern BOOL HTRDF_isListItem (HTRDF *me, HTElement *e); /* ( Start processing an RDF/XML document instance from the root element rdf. ) */ extern BOOL HTRDF_processRDF(HTRDF *me, HTElement *ele); /* processDescription manages Description elements description The Description element itself inPredicate Is this is a nested description reificate Do we need to reificate createBag Do we create a bag container return An ID for the description */ extern char * HTRDF_processDescription ( HTRDF * me, HTElement * description, BOOL inPredicate, BOOL reificate, BOOL createBag); /* ( Manage the typedNode production in the RDF grammar. ) */ extern char * HTRDF_processTypedNode(HTRDF *me, HTElement *e); /* ( Special method to deal with rdf:resource attribute ) */ extern char * HTRDF_getResource(HTRDF *me,HTElement *e); /* ( Create a new reification ID ) Using a name part and an incremental counter m_iReificationCounter. */ extern char * HTRDF_newReificationID (HTRDF *me); /* ( Create a new triple ) and add it to the m_triples List */ extern void HTRDF_addTriple (HTRDF *me, char * sPredicate, char * sSubject, char * sObject); /* ( Create New Bag ) allows one to determine whether SiRPAC produces Bag instances for each Description block. The default setting is not to generate them. */ extern void HTRDF_createBags (HTRDF *me, BOOL b); /* ( Set Output Stream ) Set output stream for RDF parser */ extern void HTRDF_setOutputStream (HTRDF *me, HTStream *ostream); /* . RDF Converter Streams . A set of converter streams using the HTRDF Parser object ( RDF To Triple Converter ) This stream converter converts an RDF stream to triples that are passed to the application using the new triples callback handler. The RDF object itself can be obtained using the new RDF parser object callback */ extern HTConverter HTRDFParser_new; /* ( Print RDF Triple Converter ) This stream converter converts an RDF stream to triples and sends them downstrem as (predicate, subject, object). This can for example be used to print them out to stdout etc. */ extern HTConverter HTRDFToTriples; /* ( Parse a file of RDF ) This function parses a file of RDF in a synchronous, non-blocking way. In other words, the file is not asynchronously loaded. If new_triple_callback is NULL, the default triple handler is invoked. The context pointer will be available in the triple callback function. Returns YES if the file is successfully parsed; otherwise NO is returned and an error message is logged. */ extern BOOL HTRDF_parseFile (const char *file_name, HTTripleCallback_new * new_triple_callback, void *context); /* ( Parse a buffer of RDF ) This function parses a buffer of RDF in a synchronous, non-blocking way. If new_triple_callback is NULL, the default triple handler is invoked. The context pointer will be available in the triple callback function. Returns YES if the buffer is successfully parsed; otherwise NO is returned and an error message is logged. */ extern BOOL HTRDF_parseBuffer (const char *buffer, const char *buffer_name, int buffer_len, HTTripleCallback_new * new_triple_callback, void *context); /* */ #endif /* @(#) $Id: HTRDF.html,v 2.7 2025/08/30 13:01:57 barstow Exp $ */ ����libwww/Library/src/HTReader.h�����������������������������������������������������������������������0100644�0000764�0000144�00000002550�07405520456�015564� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library Socket Reader Stream ! Socket Reader Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Socket Reader Stream is an input stream &nbsp;which knows how to read from&nbsp;a BSD type socket. It is part of the Transport interface and may be registered as part of a Transport Object. The application can&nbsp;initialize this stream together with the HTWriter stream, for example. In the default initialization module, you can find the HTTransportInit() function which sets up this stream as a default transport for handling socket read operations. This module is implemented by HTReader.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTREADER_H #define HTREADER_H #include "HTIOStream.h" /* . Input Buffering . In order to optimize reading a channel, we bind a buffer to each channel object. The size of this buffer is a compromise between speed and memory. Here it is chosen as the default TCP High Water Mark (sb_hiwat) for receiving data. By default, we have chosen a value that equals the normal TCP High Water Mark (sb_hiwat) for receiving data. */ #define INPUT_BUFFER_SIZE 32*1024 /* . Read Stream . */ extern HTInput_new HTReader_new; /* */ #endif /* @(#) $Id: HTReader.html,v 2.6 2025/05/14 02:10:57 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTReq.h��������������������������������������������������������������������������0100644�0000764�0000144�00000114650�07405520456�015116� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Request Class ! The Request Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Libwww is based on a request/response paradigm and the Request class defines "an operation to be performed on a URL". The request object is the main entry point for an application to issue a request to the Library - all operations on a URL must use a Request object. The request object is application independent in that both servers and clients use the same Request class. Examples of requests passed to the Library are a client application issuing a GET request on a HTTP URL, or a server issuing a load on a local file URL. The only difference is that the client gets the input from a user whereas the server gets the input via the network. A request object is created with a default set of parameters which are applicable for many URL requests but the class defines a huge set of methods that an be used to customize a request for a particular purpose. Example of things that you can define is natural language, media types, what RFC 822 headers to use, whether the request should be refreshed from cache etc. Scroll down and see the set of parameters you can tune. A request object is registered in the library by issuing an operation on a URL - for example PUT, POST, or DELETE. You can find many higher level "request issuing functions" in the Access module - the methods defined by the Request class itself are very low level but can of course be used directly if needed. Whereas the lifetime of the URL (in form of an anchor) often is very long (for example as long as the application is running), the lifetime of a request is limited to the time it takes to service the request. The core does not automatically delete any request object created by the application - it is for the application to do. In many cases a request object can be deleted when any of the termination callback functions are called but the application may keep request objects around longer than that The Library can accept an unlimited number of simultaneous requests passed by the application. One of the main functions of the Library core is to handle any number of ongoing requests in an intelligent manner by limiting the number of active request to the fit the available resources as defined by the application. This is described in more detail in the HTNet module. This module is implemented by HTReqMan.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTREQ_H #define HTREQ_H typedef long HTRequestID; typedef struct _HTRequest HTRequest; #include "HTEvent.h" #include "HTList.h" #include "HTAssoc.h" #include "HTFormat.h" #include "HTStream.h" #include "HTError.h" #include "HTNet.h" #include "HTUser.h" #include "HTResponse.h" /* . Creation and Deletion Methods . The request object is intended to live as long as the request is still active, but can be deleted as soon as it has terminated, for example in one of the request termination callback functions as described in the Net Manager. Only the anchor object stays around after the request itself is terminated. ( Create new Object ) Creates a new request object with a default set of options -- in most cases it will need some information added which can be done using the methods in this module, but it will work as is for a simple request. */ extern HTRequest * HTRequest_new (void); /* ( Clear a Request Object ) Clears all protocol specific information so that the request object can be used for another request. It should be used with care as application specific information is not re-initialized. Returns YES if OK, else NO. */ extern BOOL HTRequest_clear (HTRequest * me); /* ( Create a duplicate ) Creates a new HTRequest object as a duplicate of the src request. Returns YES if OK, else NO */ extern HTRequest * HTRequest_dup (HTRequest * src); /* Create a duplicate for Internal use Creates a new HTRequest object as a duplicate of the src request. The difference to the HTRequest_dup function is that we don't copy the error_stack and other information that the application keeps in its copy of the request object. Otherwise it will be freed multiple times. Returns YES if OK, else NO */ extern HTRequest * HTRequest_dupInternal (HTRequest * src); extern BOOL HTRequest_setInternal (HTRequest * request, BOOL mode); extern BOOL HTRequest_internal (HTRequest * request); /* ( Delete Object ) This function deletes the object and cleans up the memory. */ extern void HTRequest_delete (HTRequest * request); /* . Issuing a Request . These are the "basic request methods" provided directly by the Request class. This is a very low level API as the caller must have set up the request object before passing it to libwww. There are two versions: one for issuing client requests and one for issuing server requests. You will probably most often use the client version, but, in fact, libwww can also deal with incoming connections. You can find many higher level issuing functions in the HTAccess module. If you like, you can of course use this directly! */ extern BOOL HTLoad (HTRequest * request, BOOL recursive); extern BOOL HTServe(HTRequest * request, BOOL recursive); /* . Killing a Request . This function kills this particular request, see HTNet module for a function that kills them all. If you know that you are pipelining requests (typically the case for GUI browsers, robots etc.) then it is often not enough to just kill a single request as the whole pipeline gets affected. Therefore, in that case you MUST call the HTHost_killPipe function instead, */ extern BOOL HTRequest_kill(HTRequest * request); /* Note that you can get to the HTHost object via the HTNet object which you can get by calling HTRequest_net(...). . Relations to Other Libwww Objects . The Request object is linked to a set of other libwww objects - here's how to get to these objects... ( Binding to an Anchor Object ) Every request object has an anchor associated with it. The anchor normally lives until the application terminates but a request object only lives as long as the request is being serviced. If the anchor that we have requested is a child anchor then we always load the parent anchor; after the load jump to the location. A child anchor is a an anchor which points to a subpart of the document (has a "#" in the URL). */ extern void HTRequest_setAnchor (HTRequest *request, HTAnchor *anchor); extern HTParentAnchor * HTRequest_anchor (HTRequest *request); extern HTChildAnchor * HTRequest_childAnchor (HTRequest * request); /* ( Binding to a User Profile ) Each request is associated with a User profile which contains information about the local host name, email address of the user, news server etc. A request object is created with a default "generic user" but can be assigned a specific user at any time. */ extern BOOL HTRequest_setUserProfile (HTRequest * request, HTUserProfile * up); extern HTUserProfile * HTRequest_userProfile (HTRequest * request); /* ( Binding to a Net Object ) If a request is actually going on the net then the Net Manager is contacted to handle the request. The Net manager creates a HTNEt object and links it to the Request object. You can get to the HTNet object using the following functions. */ extern HTNet * HTRequest_net (HTRequest * request); extern BOOL HTRequest_setNet (HTRequest * request, HTNet * net); /* Note that you can go from the HTNet object to the HTHost object by calling HTNet_host(...). ( Binding to a Response Object ) If a request is actually going on the net and we are getting a response back then we also create a HTResponse object and bind it to the request object. Once we know what to do with the response, we may transfer the information to the anchor object. */ extern HTResponse * HTRequest_response (HTRequest * request); extern BOOL HTRequest_setResponse (HTRequest * request, HTResponse * response); /* . Set the Method for the Request . The Method is the operation to be executed on the requested object. The default set if the set of operations defined by the HTTP protocol, that is "GET", "HEAD", "PUT", "POST", "LINK", "UNLINK", and "DELETE" but many of these can be used in other protocols as well. The important thing is to think of the requested element as an object on which you want to perform an operation. Then it is for the specific protocol implementation to try and carry this operation out. However, not all operations can be implemented (or make sense) in all protocols. Methods are handled by the Method Module, and the default value is "GET". */ extern void HTRequest_setMethod (HTRequest *request, HTMethod method); extern HTMethod HTRequest_method (HTRequest *request); /* . Priority Management . The request can be assigned an initial priority which then gets inherited by all HTNet objects and other requests objects created as a result of this one. You can also assign a separate priority to an indicidual HTNet object by using the methods in the Net manager. */ extern HTPriority HTRequest_priority (HTRequest * request); extern BOOL HTRequest_setPriority (HTRequest * request, HTPriority priority); /* . Pipelining Managament . Libwww supports HTTP/1.1 pipelining which greatly optimizes HTTP's behavior over TCP. libwww also tries very hard to minimize the number of TCP packets sent over the network. This is done by buffering outgoing requests until either a minimum amount of data has been collected or a timeout causes a flush to happen. The application can override the output buffering by explicit request a request object to be flushed. */ extern BOOL HTRequest_setFlush (HTRequest * me, BOOL mode); extern BOOL HTRequest_flush (HTRequest * me); /* ( Force the Pipeline to be Flushed Immediately ) Forcing a fluch immediatly is slightly different as this can be done in "retrospect". That is, if suddenly the application decides on performing a flush after the request was initiated then it can use this function to flush at a later time. */ extern int HTRequest_forceFlush (HTRequest * request); /* . Dealing with Request Error Messages . Errors are, like almost anything, kept in lists. An error list can be associated with a request using the following functions. In order to make life easier, there are also some easy mapping functions to the HTError object, so that you can add an error directly to a request object. */ extern HTList * HTRequest_error (HTRequest * request); extern void HTRequest_setError (HTRequest * request, HTList * list); extern void HTRequest_deleteAllErrors (HTRequest * request); /* These are the cover functions that go directly to the Error Object */ extern BOOL HTRequest_addError (HTRequest * request, HTSeverity severity, BOOL ignore, int element, void * par, unsigned int length, char * where); extern BOOL HTRequest_addSystemError (HTRequest * request, HTSeverity severity, int errornumber, BOOL ignore, char * syscall); /* . Max number of Retrys for a Down Load . Automatic reload can happen in two situations: o The server sends a redirection response o The document has expired In order to avoid the Library going into an infinite loop, it is necessary to keep track of the number of automatic reloads. Loops can occur if the server has a reload to the same document or if the server sends back a Expires header which has already expired. The default maximum number of automatic reloads is 6. */ extern BOOL HTRequest_setMaxRetry (int newmax); extern int HTRequest_maxRetry (void); extern int HTRequest_retrys (HTRequest * request); extern BOOL HTRequest_doRetry (HTRequest *request); extern BOOL HTRequest_addRetry (HTRequest * request); extern int HTRequest_AAretrys (HTRequest * request); extern BOOL HTRequest_addAARetry (HTRequest * request); /* . Set Max Forwards for TRACE methods . The TRACE method is used to invoke a remote, application-layer loop-back of the request message. The final recipient of the request SHOULD reflect the message received back to the client as the entity-body of a 200 (OK) response. The final recipient is either the origin server or the first proxy or gateway to receive a Max-Forwards value of zero (0) in the request. A TRACE request MUST NOT include an entity. */ extern BOOL HTRequest_setMaxForwards (HTRequest * request, int maxforwards); extern int HTRequest_maxForwards (HTRequest * request); /* . Preemptive or Non-preemptive Access . An access scheme is defined with a default for using either preemptive (blocking I/O) or non-preemptive (non-blocking I/O). This is basically a result of the implementation of the protocol module itself. However, if non-blocking I/O is the default then some times it is nice to be able to set the mode to blocking instead. For example, when loading the first document (the home page), blocking mode can be used instead of non-blocking. */ extern void HTRequest_setPreemptive (HTRequest *request, BOOL mode); extern BOOL HTRequest_preemptive (HTRequest *request); /* . Content Negotiation . When accessing the local file system, the Library is capable of performing content negotioation as described by the HTTP protocol. This is mainly for server applications, but some client applications might also want to use content negotiation when accessing the local file system. This method enables or disables content negotiation - the default value is ON. */ extern void HTRequest_setNegotiation (HTRequest *request, BOOL mode); extern BOOL HTRequest_negotiation (HTRequest *request); /* . Request Preconditions (HTTP If-* Headers) . Should this request use preconditions when doing a PUT or a POST? These are the "if-*" header fields that can be used to avoid version conflicts etc. The default is not to use any preconsitions (HT_NO_MATCH). The _THIS versions use etags and/or time stamps and the _ANY versions use the "*" header field value of the if-match and if-non-match header fields. */ typedef enum _HTPreconditions { HT_NO_MATCH = 0, HT_MATCH_THIS, HT_MATCH_ANY, HT_DONT_MATCH_THIS, HT_DONT_MATCH_ANY } HTPreconditions; extern void HTRequest_setPreconditions (HTRequest * me, HTPreconditions mode); extern HTPreconditions HTRequest_preconditions (HTRequest * me); /* . Local MIME header Parsers . MIMEParsers get their own type which is optimized for static and regex parser strings. */ typedef struct _HTMIMEParseSet HTMIMEParseSet; extern void HTRequest_setMIMEParseSet (HTRequest *request, HTMIMEParseSet * parseSet, BOOL local); extern HTMIMEParseSet * HTRequest_MIMEParseSet (HTRequest *request, BOOL * pLocal); /* . Which Default Protocol Header Fields To Use? . Libwww supports a large set of headers that can be sent along with a request (or a response for that matter). All headers can be either disabled or enabled using bit flags that are defined in the following. See also the section on how to extend the default set of supported header fields. ( General HTTP Header Mask ) There are a few header fields which have general applicability for both request and response mesages, but which do not apply to the communication parties or theentity being transferred. This mask enables and disables these headers. If the bit is not turned on they are not sent. */ typedef enum _HTGnHd { HT_G_CC = 0x1, HT_G_CONNECTION = 0x2, HT_G_DATE = 0x4, HT_G_PRAGMA_NO_CACHE= 0x8, HT_G_FORWARDED = 0x10, HT_G_MESSAGE_ID = 0x20, HT_G_MIME = 0x40, HT_G_TRAILER = 0x80, HT_G_TRANSFER = 0x100, HT_G_EXTRA_HEADERS = 0x200 } HTGnHd; #define DEFAULT_GENERAL_HEADERS \ HT_G_CONNECTION + HT_G_CC + HT_G_TRANSFER + HT_G_TRAILER + \ HT_G_EXTRA_HEADERS extern void HTRequest_setGnHd (HTRequest *request, HTGnHd gnhd); extern void HTRequest_addGnHd (HTRequest *request, HTGnHd gnhd); extern HTGnHd HTRequest_gnHd (HTRequest *request); /* ( Request Headers ) The request header fields allow the client to pass additional information about the request (and about the client itself) to the server. All headers are optional but the default value is all request headers if present except From and Pragma. */ typedef enum _HTRqHd { HT_C_ACCEPT_TYPE = 0x1, HT_C_ACCEPT_CHAR = 0x2, HT_C_ACCEPT_ENC = 0x4, HT_C_ACCEPT_TE = 0x8, HT_C_ACCEPT_LAN = 0x10, HT_C_AUTH = 0x20, /* Includes proxy authentication */ HT_C_EXPECT = 0x40, HT_C_FROM = 0x80, HT_C_HOST = 0x100, HT_C_IMS = 0x200, HT_C_IF_MATCH = 0x400, HT_C_IF_MATCH_ANY = 0x800, HT_C_IF_NONE_MATCH = 0x1000, HT_C_IF_NONE_MATCH_ANY=0x2000, HT_C_IF_RANGE = 0x4000, HT_C_IF_UNMOD_SINCE = 0x8000, HT_C_MAX_FORWARDS = 0x10000, HT_C_RANGE = 0x20000, HT_C_REFERER = 0x40000, HT_C_USER_AGENT = 0x80000 } HTRqHd; #define DEFAULT_REQUEST_HEADERS \ HT_C_ACCEPT_TYPE + HT_C_ACCEPT_CHAR + \ HT_C_ACCEPT_ENC + HT_C_ACCEPT_TE + HT_C_ACCEPT_LAN + HT_C_AUTH + \ HT_C_EXPECT + HT_C_HOST + HT_C_REFERER + HT_C_USER_AGENT extern void HTRequest_setRqHd (HTRequest *request, HTRqHd rqhd); extern void HTRequest_addRqHd (HTRequest *request, HTRqHd rqhd); extern HTRqHd HTRequest_rqHd (HTRequest *request); /* ( Response Headers ) The response header fields allow the server to pass additional information about the response (and about the server itself) to the client. All headers are optional. */ typedef enum _HTRsHd { HT_S_AGE = 0x1, HT_S_LOCATION = 0x2, HT_S_PROXY_AUTH = 0x4, HT_S_PUBLIC = 0x8, HT_S_RETRY_AFTER = 0x10, HT_S_SERVER = 0x20, HT_S_VARY = 0x40, HT_S_WARNING = 0x80, HT_S_WWW_AUTH = 0x100, HT_S_TRAILER = 0x200 } HTRsHd; #define DEFAULT_RESPONSE_HEADERS HT_S_SERVER extern void HTRequest_setRsHd (HTRequest * request, HTRsHd rshd); extern void HTRequest_addRsHd (HTRequest * request, HTRsHd rshd); extern HTRsHd HTRequest_rsHd (HTRequest * request); /* ( Entity Header Mask ) The entity headers contain information about the object sent in the HTTP transaction. See the Anchor module, for the storage of entity headers. This flag defines which headers are to be sent in a request together with an entity body. All headers are optional but the default value is ALL ENTITY HEADERS IF PRESENT */ typedef enum _HTEnHd { HT_E_ALLOW = 0x1, HT_E_CONTENT_BASE = 0x2, HT_E_CONTENT_ENCODING = 0x4, HT_E_CONTENT_LANGUAGE = 0x8, HT_E_CONTENT_LENGTH = 0x10, HT_E_CONTENT_LOCATION = 0x20, HT_E_CONTENT_MD5 = 0x40, HT_E_CONTENT_RANGE = 0x80, HT_E_CTE = 0x100, /* Content-Transfer-Encoding */ HT_E_CONTENT_TYPE = 0x200, HT_E_DERIVED_FROM = 0x400, HT_E_ETAG = 0x800, HT_E_EXPIRES = 0x1000, HT_E_LAST_MODIFIED = 0x2000, HT_E_LINK = 0x4000, HT_E_TITLE = 0x8000, HT_E_URI = 0x10000, HT_E_VERSION = 0x20000 } HTEnHd; #define DEFAULT_ENTITY_HEADERS 0xFFFFFFFF /* all */ extern void HTRequest_setEnHd (HTRequest *request, HTEnHd enhd); extern void HTRequest_addEnHd (HTRequest *request, HTEnHd enhd); extern HTEnHd HTRequest_enHd (HTRequest *request); /* . Extending The Default Set Of Header Fields . See also how to set up default header fields. There are three ways to extend the set of headers that are sent in a request: o A simple association list o A stream oriented approach where the stream (called a generator) has direct access to the outgoing stream. That is, it can add any header it likes. o HTTP extension mechanism which is a much better way for handling extensions. ( 1) Simple Association List ) Add the (name, value) and it will be converted into MIME header format as name: value. Do NOT add CRLF line termination - this is done by the HTTP header generator stream */ extern BOOL HTRequest_addExtraHeader (HTRequest * request, char * token, char * value); extern HTAssocList * HTRequest_extraHeader (HTRequest * request); extern BOOL HTRequest_deleteExtraHeaderAll (HTRequest * request); /* ( 2) Stream Oriented Header Generators ) Extra header information can be send along with a request using header generators. The text is sent as is so it must be preformatted with CRLF line terminators. You can also register MIME header parsers using the HTHeader module. */ extern void HTRequest_setGenerator (HTRequest *request, HTList *gens, BOOL override); extern HTList * HTRequest_generator (HTRequest *request, BOOL *override); /* ( 3) HTTP Extension Framework ) These association lists contain the information that we are to send as HTTP Extension Framework. This is not done yet but you can find some hints in the PEP module */ /* TBD */ /* . User And Application Preferences Using Accept Headers . The Accept family of headers is an important part of HTTP handling the format negotiation. The Library supports both a global set of accept headers that are used in all HTTP requests and a local set of accept headers that are used in specific requests only. The global ones are defined in the Format Manager. Each request can have its local set of accept headers that either are added to the global set or replaces the global set of accept headers. Non of the headers have to be set. If the global set is sufficient for all requests then this us perfectly fine. If the parameter "override" is set then only local accept headers are used, else both local and global headers are used. ( Content Types ) The local list of specific conversions which the format manager can do in order to fulfill the request. It typically points to a list set up on initialisation time for example by HTInit(). There is also a global list of conversions which contains a generic set of possible conversions. */ extern void HTRequest_setConversion (HTRequest *request, HTList *type, BOOL override); extern HTList * HTRequest_conversion (HTRequest *request); /* ( Content Encodings ) The list of encodings acceptable in the output stream. */ extern void HTRequest_setEncoding (HTRequest *request, HTList *enc, BOOL override); extern HTList * HTRequest_encoding (HTRequest *request); /* ( Transfer Encodings ) The list of transfer encodings acceptable in the output stream. */ extern void HTRequest_setTransfer (HTRequest *request, HTList *te, BOOL override); extern HTList * HTRequest_transfer (HTRequest *request); /* ( Content Languages ) The list of (human) language values acceptable in the response. The default is all languages. */ extern void HTRequest_setLanguage (HTRequest *request, HTList *lang, BOOL override); extern HTList * HTRequest_language (HTRequest *request); /* ( Content Charsets ) The list of charsets accepted by the application */ extern void HTRequest_setCharset (HTRequest *request, HTList *charset, BOOL override); extern HTList * HTRequest_charset (HTRequest *request); /* . HTTP Cache Validation and Cache Control . The Library has two concepts of caching: in memory and on file. When loading a document, this flag can be set in order to define who can give a response to the request. The memory buffer is considered to be equivalent to a history buffer. That is, it doesn't not follow the same expiration mechanism that is characteristic for a persistent file cache. You can also set the cache to run in disconnected mode - see the Cache manager for more details on how to do this. */ typedef enum _HTReload { HT_CACHE_OK = 0x0, /* Use any version available */ HT_CACHE_FLUSH_MEM = 0x1, /* Reload from file cache or network */ HT_CACHE_VALIDATE = 0x2, /* Validate cache entry */ HT_CACHE_END_VALIDATE = 0x4, /* End to end validation */ HT_CACHE_RANGE_VALIDATE = 0x8, HT_CACHE_FLUSH = 0x10, /* Force full reload */ HT_CACHE_ERROR = 0x20 /* An error occurred in the cache */ } HTReload; extern void HTRequest_setReloadMode (HTRequest *request, HTReload mode); extern HTReload HTRequest_reloadMode (HTRequest *request); /* . Default PUT name . When publishing to a server which doesn't accept a URL ending in "/", e.g, the default Overview, index page, you can use HTRequest_setAltPutName to setup the intended URL. If this variable is defined, it'll be used during the cache lookup and update operationsm, so that cache-wise, it will look as if we had published only to "/". */ extern char * HTRequest_defaultPutName (HTRequest * me); extern BOOL HTRequest_setDefaultPutName (HTRequest * me, char * name); extern BOOL HTRequest_deleteDefaultPutName (HTRequest * me); /* ( HTTP Cache Control Directives ) The cache control directives are all part of the cache control header and control the behavior of any intermediate cache between the user agent and the origin server. This association list is a list of the connection control directives that are to be sent as part of the Cache-Control header. */ extern BOOL HTRequest_addCacheControl (HTRequest * request, char * token, char *value); extern BOOL HTRequest_deleteCacheControlAll (HTRequest * request); extern HTAssocList * HTRequest_cacheControl (HTRequest * request); /* . Date and Time Stamp when Request was Issued . The start time when the request was issued may be of value to the cache validation mechanism as described by the HTTP/1.1 specification. The value is automatically set when creating the request headers and sending off the request. The time is a local time. */ extern time_t HTRequest_date (HTRequest * request); extern BOOL HTRequest_setDate (HTRequest * request, time_t date); /* . HTTP Expect Directives . The Expect request-header field is used to indicate that particular server behaviors are required by the client. A server that does not understand or is unable to comply with any of the expectation values in the Expect field of a request MUST respond with appropriate error status. */ extern BOOL HTRequest_addExpect (HTRequest * me, char * token, char * value); extern BOOL HTRequest_deleteExpect (HTRequest * me); extern HTAssocList * HTRequest_expect (HTRequest * me); /* . Partial Requests and Range Retrievals . Libwww can issue range requests in case we have already obtained a part of the entity body. Since all HTTP entities are represented in HTTP messages as sequences of bytes, the concept of a byte range is meaningful for any HTTP entity. (However, not all clients and servers need to support byte-range operations.) Byte range specifications in HTTP apply to the sequence of bytes in the entity-body (not necessarily the same as the message-body). A byte range operation may specify a single range of bytes, or a set of ranges within a single entity. */ extern BOOL HTRequest_addRange (HTRequest * request, char * unit, char * range); extern BOOL HTRequest_deleteRangeAll (HTRequest * request); extern HTAssocList * HTRequest_range (HTRequest * request); /* . HTTP Connection Control Request Directives . The connection control directives are all part of the connection header and control the behavior of this connection. This association list is a list of the connection control directives that are to be sent as part of the Connection header. */ extern BOOL HTRequest_addConnection (HTRequest * request, char * token, char * value); extern BOOL HTRequest_deleteConnection (HTRequest * request); extern HTAssocList * HTRequest_connection (HTRequest * request); /* . HTTP Access Authentication Credentials . When a access denied response is returned to the Library, for example from a remote HTTP server, this code is passed back to the application. The application can then decide whether a new request should be established or not. These two methods return the authentication information required to issue a new request, that is the new anchor and any list of keywords associated with this anchor. */ extern BOOL HTRequest_addCredentials (HTRequest * request, char * token, char * value); extern BOOL HTRequest_deleteCredentialsAll (HTRequest * request); extern HTAssocList * HTRequest_credentials (HTRequest * request); /* ( Realms ) The realm is normally set and used by the authentication filters. */ extern BOOL HTRequest_setRealm (HTRequest * request, char * realm); extern const char * HTRequest_realm (HTRequest * request); extern BOOL HTRequest_deleteRealm (HTRequest * me); /* . HTTP Referer Field . If this parameter is set then a `Referer: <parent address> can be generated in the request to the server, see Referer field in a HTTP Request */ extern void HTRequest_setParent (HTRequest *request, HTParentAnchor *parent); extern HTParentAnchor * HTRequest_parent (HTRequest *request); /* . Local BEFORE and AFTER Filters . The request object may have it's own before and after filters. These may override or suplement the global set in HTNet. The request object itself handles the list element, that is this should not be freed bu the caller. ( BEFORE Filters ) The BEFORE filters are called just after the request has been passed to the Library but before any request is issued over the network. A BEFORE can infact stop a request completely from being processed. Add a local BEFORE Filter You can add a local BEFORE filter for a single request so that the both the local and global BEFORE filters are called or you can replace the global filters with a local set. Note that the local set can be NULL. This can be used to effectively disable all BEFORE filters without unregistering the global ones. */ extern BOOL HTRequest_addBefore (HTRequest * request, HTNetBefore * filter, const char * tmplate, void * param, HTFilterOrder order, BOOL override); extern HTList * HTRequest_before (HTRequest * request, BOOL * override); /* Delete a Local BEFORE Filter You can delete a local BEFORE filter explicitly by passing the filter itself or you can delete all filters which are registered for a certain status code. */ extern BOOL HTRequest_deleteBefore (HTRequest * request, HTNetBefore * filter); extern BOOL HTRequest_deleteBeforeAll (HTRequest * request); /* ( AFTER Filters ) You can add a local AFTER filter for a single request so that the both the local and global AFTER filters are called or you can replace the global filters with a local set. Note that the local set can be NULL. This can be used to effectively disable all AFTER filters without unregistering the global ones. AFTER filters can be registered to handle a certain set of return values from the protocol modules, for example explicitly to handle redirection, authentication, etc. You can find all the available codes in the HTNet object description. Add a local AFTER Filter */ extern BOOL HTRequest_addAfter (HTRequest * request, HTNetAfter * filter, const char * tmplate, void * param, int status, HTFilterOrder order, BOOL override); extern HTList * HTRequest_after (HTRequest * request, BOOL * override); /* Delete an AFTER Filter You can delete a local AFTER filter explicitly by passing the filter itself or you can delete all filters which are registered for a certain status code. */ extern BOOL HTRequest_deleteAfter (HTRequest * request, HTNetAfter * filter); extern BOOL HTRequest_deleteAfterStatus (HTRequest * request, int status); extern BOOL HTRequest_deleteAfterAll (HTRequest * request); /* . Sending data from App to Network . Multiple Request objects can be connected in order to create a PostWeb for sending data from one location (source) to another (destination). Request objects are bound together by connecting the output stream of the source with the input stream of the destination requst. The connection can be done directly so that the output from the source is exactly what is sent to the destination or there can be a conversion between the two streams so that we can do conversions on the fly while copying data. This is in fact the way we use for building a proxy server. The Library supports two ways of posting a data object to a remote destination: Input comes from a socket descriptor or from memory. In the case where you want to copy a URL, for example from local file system or from a remote HTTP server then you must use the PostWeb design. This model operates by using at least two request objects which gets linked to eachother as part of the PostWeb model. However, if you are posting from memory, we only use one request object to perform the operation. In order to do this, the application must register a callback function that can be called when the HTTP client module is ready for accepting data. be included as part of the body and/or as extra metainformation. In the latter case you need to register a callback function of the following type using the methods provided in the next section. */ typedef int HTPostCallback (HTRequest * request, HTStream * target); extern void HTRequest_setPostCallback (HTRequest * request, HTPostCallback * cbf); extern HTPostCallback * HTRequest_postCallback (HTRequest * request); /* The Entity Anchor is either the anchor directly associated with the Request object or the post anchor associated with the object. The purpose of the entity anchor is if we are to send data to a remote server then we get the metainformation using the entity anchor. */ extern BOOL HTRequest_setEntityAnchor (HTRequest * request, HTParentAnchor * anchor); extern HTParentAnchor * HTRequest_entityAnchor (HTRequest * request); /* ( Input Stream ) The input stream is to be used to put data to the network. Normally each protocol sets the input stream in order to generate the protocol headers while making a request. */ extern void HTRequest_setInputStream (HTRequest * request, HTStream * input); extern HTStream *HTRequest_inputStream (HTRequest * request); /* ( Is This Request part of a Post Web? (Deprecated) ) Check to see if this request object is part of a Post Web. */ extern BOOL HTRequest_isPostWeb (HTRequest * request); /* ( Source of a Request ) A request may have a source in which is another request object that as output stream has the input stream of this request object. */ extern BOOL HTRequest_setSource (HTRequest * request, HTRequest * source); extern HTRequest * HTRequest_source (HTRequest * request); /* . Streams From Network to Application . ( Default Output Stream ) The output stream is to be used to put data down to as they come in from the network and back to the application. The default value is NULL which means that the stream goes to the user (display). */ extern void HTRequest_setOutputStream (HTRequest *request, HTStream *output); extern HTStream *HTRequest_outputStream (HTRequest *request); /* ( Default Output Stream Format ) The desired format of the output stream. This is used in the stream stack builder to determine which stream to plug in to deal with the data. If NULL, then WWW_PRESENT is default value. */ extern void HTRequest_setOutputFormat (HTRequest *request, HTFormat format); extern HTFormat HTRequest_outputFormat (HTRequest *request); /* ( Has Output Stream been Connected to Channel? (Deprecated) ) Has output stream been connected to the channel? If not then we must free it explicitly when deleting the request object */ extern void HTRequest_setOutputConnected (HTRequest * request, BOOL mode); extern BOOL HTRequest_outputConnected (HTRequest * request); /* ( Default Debug Stream ) All object bodies sent from the server with status codes different from 200 OK will be put down this stream. This can be used for redirecting body information in status codes different from "200 OK" to for example a debug window. If the value is NULL (default) then the stream is not set up. */ extern void HTRequest_setDebugStream (HTRequest *request, HTStream *debug); extern HTStream *HTRequest_debugStream (HTRequest *request); /* ( Default Debug Stream Format ) The desired format of the error stream. This can be used to get unconverted data etc. from the library. The default value if WWW_HTML as a character based only has one WWW_PRESENT. */ extern void HTRequest_setDebugFormat (HTRequest *request, HTFormat format); extern HTFormat HTRequest_debugFormat (HTRequest *request); /* . Context Swapping . In multi threaded applications it is often required to keep track of the context of a request so that when the Library returns a result of a request, it can be put into the context it was in before the request was first passed to the Library. This call back function allows the application to do this. */ typedef int HTRequestCallback (HTRequest * request, void *param); extern void HTRequest_setCallback (HTRequest *request, HTRequestCallback *cb); extern HTRequestCallback *HTRequest_callback (HTRequest *request); /* The callback function can be passed an arbitrary pointer (the void part) which can describe the context of the current request structure. If such context information is required then it can be set using the following methods: */ extern void HTRequest_setContext (HTRequest *request, void *context); extern void *HTRequest_context (HTRequest *request); /* . Should we Issue a full HTTP Request-URI? . In early versions of HTTP, the request sent to the remote server varies whether we use a proxy or go directly to the origin server. The default value is OFF but we use a full request if we are talking to a proxy server. */ extern void HTRequest_setFullURI (HTRequest *request, BOOL mode); extern BOOL HTRequest_fullURI (HTRequest *request); /* . Handling Proxies . In case we are using a proxy for this requst then we can register it together with the request object. That way we can find the proxy and look for authentication information, for example in the Authentication filter. The string is freed by the Request object on deletion. This is normally handled automatically by the proxy and gateway module */ extern BOOL HTRequest_setProxy (HTRequest * request, const char * proxy); extern char * HTRequest_proxy (HTRequest * request); extern BOOL HTRequest_deleteProxy (HTRequest * request); /* . Bytes Read or Written in a Request . This function returns the bytes read in the current request. For a deeper description of what the current request is, please read the user's guide. This function can be used in for example the HTAlert module to give the number of bytes read or written in a progress message. */ extern long HTRequest_bodyRead (HTRequest * request); extern long HTRequest_bodyWritten (HTRequest * request); /* You can also get the total number of bytes read or written including the headers */ extern long HTRequest_bytesRead (HTRequest * request); extern long HTRequest_bytesWritten (HTRequest * request); /* */ #endif /* HTREQ_H */ /* @(#) $Id: HTReq.html,v 2.68 2025/07/12 10:44:41 kahan Exp $ */ ����������������������������������������������������������������������������������������libwww/Library/src/HTReqMan.h�����������������������������������������������������������������������0100644�0000764�0000144�00000020073�07405520456�015545� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Private Request Definition ! Private Request Definition ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is the private part of the request object. It has the functions declarations that are private to the Library and that shouldn't be used by applications. The module has been separated from the old HTAccess module. See also the public part of the declarition in the HTReq Module. This module is implemented by HTReqMan.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTREQMAN_H #define HTREQMAN_H #include "HTReq.h" #include "HTList.h" #include "HTFormat.h" #include "HTAnchor.h" #include "HTMethod.h" #include "HTAABrow.h" #include "HTStream.h" #include "HTNet.h" #include "HTMIMPrs.h" /* When a request is handled, all kinds of things about it need to be passed along together with a request. It is intended to live as long as the request is still active, but can be deleted as soon as it has terminated. Only the anchor object stays around after the request itself is terminated. */ struct _HTRequest { BOOL internal; /* Does the app knows about this one? */ time_t date; /* Time stamp when the request was issued */ HTMethod method; BOOL flush; /* Should we flush immediately */ HTPriority priority; /* Priority for this request */ /* ( User Profile ) Each request can be assigned a user profile containing information about this host and the user issuing the request. */ HTUserProfile * userprofile; /* ( Net Object ) Each request is assigned a Net object which contains pointers to other objects handling the request. */ HTNet * net; /* Information about socket etc. */ /* ( Response Object ) When we start getting MIME headers in as a response we keep it in this object until we know what to do with it. */ HTResponse * response; /* ( Error Manager ) */ HTList * error_stack; /* List of errors */ /* ( Have many times do We Want to Try? ) */ int retrys; /* Number of automatic reloads */ int max_forwards; int AAretrys; /* Number of authentication retries */ /* ( Preemptive or Non-Preemptive load? ) Each protocol module is registered with a default behavior but if you have registered a protocol module for non-preemtive load you can override this by using the following flag. */ BOOL preemptive; /* ( Content Negotiation ) Normally, when we access the local file system we do content negotiation in order to find the most suited representation. However, you can turn this off by using the following flag. */ BOOL ContentNegotiation; /* ( Should we use preconditions? ) */ HTPreconditions preconditions; /* ( Headers and header information ) These are the masks that decides what headers to send. */ HTGnHd GenMask; HTRsHd ResponseMask; HTRqHd RequestMask; HTEnHd EntityMask; /* ( Local MIME Header Parsers ) Each request can be assigned its own MIME header parsers. */ HTMIMEParseSet * parseSet; BOOL pars_local; /* ( Accept headers ) These are the accept headers that we want to send out. */ HTList * conversions; BOOL conv_local; HTList * encodings; BOOL enc_local; HTList * tes; BOOL te_local; HTList * languages; BOOL lang_local; HTList * charsets; BOOL char_local; HTList * befores; BOOL befores_local; HTList * afters; BOOL afters_local; /* ( Are we using a Proxy? ) If so then we keep the name in this variable */ char * proxy; BOOL full_uri; /* ( Cache Control Directives ) This association list is a list of the cache control directives that are to be sent as part of the Cache-Control header. */ HTReload reload; HTAssocList * cache_control; /* ( Default PUT name ) Stores the default name when publishing to a "/" URL. */ char * default_put_name; /* ( Byte Ranges ) This association list is a list of the cache control directives that are to be sent as part of the Range header. */ HTAssocList * byte_ranges; /* ( Connection Control Directives ) This association list is a list of the connection control directives that are to be sent as part of the Connection header. */ HTAssocList * connection; /* ( Expect Directives ) The Expect request-header field is used to indicate that particular server behaviors are required by the client. A server that does not understand or is unable to comply with any of the expectation values in the Expect field of a request MUST respond with appropriate error status. */ HTAssocList * expect; /* ( Access Authentication Information ) The credentials list contains the information that we are to send as part of the Authorization header. The realm is if we already know that we need to generate credentials for a specific realm. */ char * realm; /* Current realm */ HTAssocList * credentials; /* Credentials received by server */ /* ( Request Header Extensibility ) 1) Simple Association List Add the (name, value) and it will be converted into MIME header format as name: value. DO NOT ADD CRLF line termination - this is done by the HTTP header generator stream */ HTAssocList * extra_headers; /* 2) Stream Oriented Header Generators A generator is a stream with direct access to the output stream */ HTList * generators; BOOL gens_local; /* 4) HTTP Extension Framework These association lists contain the information that we are to send as HTTP Extension Framework. */ HTAssocList * mandatory; HTAssocList * optional; /* ( Anchors ) */ HTParentAnchor * anchor; /* The Client anchor for this request */ HTChildAnchor * childAnchor; /* For element within the object */ HTParentAnchor * parentAnchor; /* For referer field */ /* ( Streams From Network to Application ) */ HTStream * output_stream; HTStream * orig_output_stream; HTFormat output_format; BOOL connected; HTStream * debug_stream; HTStream * orig_debug_stream; HTFormat debug_format; /* ( Streams From Application to Network ) */ HTStream * input_stream; HTFormat input_format; /* ( Callback Function for getting data down the Input Stream ) */ HTPostCallback * PostCallback; /* ( Context Swapping ) */ HTRequestCallback * callback; void * context; /* ( PostWeb Information (Not used anymore - don't use!) ) */ HTRequest * source; /* Source for request or itself */ HTParentAnchor * source_anchor; /* Source anchor or itself */ HTRequest * mainDestination; /* For the typical case */ HTList * destinations; /* List of related requests */ int destRequests; /* Number of destination requests */ int destStreams; /* Number of destination streams */ /* */ }; /* . Post Web Management . These functions are mainly used internally in the Library but there is no reason for them not to be public. */ extern BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest); extern BOOL HTRequest_removeDestination (HTRequest * dest); extern BOOL HTRequest_destinationsReady (HTRequest * me); extern BOOL HTRequest_linkDestination (HTRequest * dest); extern BOOL HTRequest_unlinkDestination (HTRequest * dest); extern BOOL HTRequest_removePostWeb (HTRequest * me); extern BOOL HTRequest_killPostWeb (HTRequest * me); #define HTRequest_mainDestination(me) \ ((me) && (me)->source ? (me)->source->mainDestination : NULL) #define HTRequest_isDestination(me) \ ((me) && (me)->source && (me) != (me)->source) #define HTRequest_isMainDestination(me) \ ((me) && (me)->source && \ (me) == (me)->source->mainDestination) #define HTRequest_isSource(me) \ ((me) && (me)->source && (me) == (me)->source) /* End of Declaration */ #endif /* HTREQMAN_H */ /* @(#) $Id: HTReqMan.html,v 2.45 2025/02/29 14:23:17 kahan Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTResMan.h�����������������������������������������������������������������������0100644�0000764�0000144�00000011163�07405520456�015547� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Private Request Definition ! Private Response Definition ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is the private part of the response object. It has the functions declarations that are private to the Library and that shouldn't be used by applications. See also the public part of the declarition in the HTResponse Module. This module is implemented by HTResMan.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTRESMAN_H #define HTRESMAN_H #include "HTResponse.h" #include "HTList.h" #include "HTFormat.h" #include "HTAnchor.h" #include "HTMethod.h" #include "HTAABrow.h" #include "HTStream.h" #include "HTNet.h" #include "HTMIMPrs.h" /* When a request is handled, all kinds of things about it need to be passed along together with a request. It is intended to live as long as the request is still active, but can be deleted as soon as it has terminated. Only the anchor object stays around after the request itself is terminated. */ struct _HTResponse { int hash; /* ( Redirection ) If we get a redirection back then we return the new destination for this request to the application using this anchor. */ HTAnchor * redirectionAnchor; /* Redirection URL */ /* ( Retry Request After ) If we get a response back saying that we have to retry the request after a certain amount of time then add this information here. Libwww does not retry the request automatically - this is for the application to do. */ time_t retry_after; /* Absolut time for a retry */ /* ( Access Authentication Information ) The challenge and the credentials entries are use by the authentication parsers and generators respectively. */ char * realm; /* Current realm */ char * scheme; /* Current scheme */ HTAssocList * challenge; /* Challenge received in response */ /* ( Connection Control Directives ) This association list is a list of the connection control directives that have been received in the response. */ HTAssocList * connection; /* ( Protocol Extension Protocol (PEP) Information ) These association lists contain the information that we have received in PEP headers in the response. */ HTAssocList * protocol; HTAssocList * protocol_info; HTAssocList * protocol_request; /* ( Cache Control Directives ) This association list is a list of the cache control directives that have been received as part of the response. We also keep track of whether the response si cachable or not. */ HTCachable cachable; BOOL cached; /* If anchor has inherited lists */ HTAssocList * cache_control; /* ( Range Requests ) We may get a partial response in which case we register the received ranges of the resource. */ HTAssocList * byte_ranges; /* ( Variants ) The response may be a negotiated response in which case we wanna know. This has significance for whether the object is cachable or not. */ HTAssocList * variants; /* ( Content Length ) We register the content length as thjis is of importance to all responses. The content length is&nbsp;a common way to figure out how many bytes we can expect. */ long int content_length; /* ( Content Type ) The Content type is important to know as we set of the stream pipe and do the format conversion. */ HTFormat content_type; HTAssocList * type_parameters; /* Type parameters (charset etc.) */ /* ( Content Encoding ) We register the content-encoding as it may affect the stream pipe as we set it up. */ HTList * content_encoding; /* ( Transfer Encoding ) The transfer encoding is likewise important when we set up the stream pipe. */ HTList * transfer_encoding; /* ( Content Transfer Encoding ) The content transfer encoding is likewise important when we set up the stream pipe. */ HTEncoding cte; /* ( Trailer ) The tailers are headers that come at the end */ HTAssocList * trailer; /* ( Original Reponse Header Values ) We store the&nbsp;original headers as they may become useful in many ways - for example in lazy parsing. */ HTAssocList * headers; /* The reason string furnished by the server, as some servers may send useful custom information in it */ char * reason; /* JK: HTTP reason string */ /* */ }; /* End of definition of HTResponse */ /* End of Declaration */ #endif /* HTRESMAN_H */ /* @(#) $Id: HTResMan.html,v 2.7 2025/10/30 10:04:23 kahan Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTResponse.h���������������������������������������������������������������������0100644�0000764�0000144�00000030243�07405520456�016160� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Response Class ! The Response Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The response object is created as a placeholder for the response received by the remote server. All filters can then use the information passed in the response and act appropriately. The response object is deleted automatically when the corresponding request object is deleted. We try and do some fancy tricks in order to do lazy parsing and reusing parsed values so that we can optimize the code. The Response object is created automatically when we start to receive metainformation (for example MIME headers) and is linked to the Request object. The Response object is also deleted automatically when the corresponding request object is deleted but it can of course be deleted before if this is desired. Note that if you are using non-blocking sockets then libwww behaves asynchronously as you may issue multiple requests and get back the responses in the order they appear on the net interface. This module is implemented by HTResponse.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTRESPONSE_H #define HTRESPONSE_H typedef struct _HTResponse HTResponse; #include "HTEvent.h" #include "HTList.h" #include "HTAssoc.h" #include "HTFormat.h" #include "HTUser.h" /* . Creating and Deleting Response Objects . The response obejct gets created when we start receiving a response from a remote server. ( Create Response Object ) Creates a new response object with a corresponding User Profile object. */ extern HTResponse * HTResponse_new (void); /* ( Delete Response Object ) This function deletes the object and cleans up the memory. */ extern BOOL HTResponse_delete (HTResponse * response); /* . Redirections . When a redirection response is returned to the Library, for example from a remote HTTP server, this code is passed back to the application. The application can then decide whether a new request should be established or not. These two methods return the redirection information required to issue a new request, that is the new anchor and any list of keywords associated with this anchor. */ extern HTAnchor * HTResponse_redirection (HTResponse * response); extern BOOL HTResponse_setRedirection (HTResponse * response, HTAnchor * anchor); /* . Retry Request After . Some services, for example HTTP, can in case they are unavailable at the time the request is issued send back a time and date stamp to the client telling when they are expected to back online. In case a request results in a HT_RETRY status, the application can use any time indicated in this field to retry the request at a later time. The Library does not initiate any request on its own - it's for the application to do. The time returned by this function is in calendar time or -1 if not available. */ extern time_t HTResponse_retryTime (HTResponse * response); extern BOOL HTResponse_setRetryTime (HTResponse * response, time_t retry); /* . HTTP Access Authentication Challanges . When a access denied response is returned to the Library, for example from a remote HTTP server, this code is passed back to the application. The application can then decide whether a new request should be established or not. These two methods return the authentication information required to issue a new request, that is the new anchor and any list of keywords associated with this anchor. */ extern BOOL HTResponse_addChallenge (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteChallengeAll (HTResponse * response); extern HTAssocList * HTResponse_challenge (HTResponse * response); /* ( Realms ) */ extern BOOL HTResponse_setRealm (HTResponse * response, char * realm); extern const char * HTResponse_realm (HTResponse * response); /* ( Access Authentication Schemes ) */ extern BOOL HTResponse_setScheme (HTResponse * response, char * scheme); extern const char * HTResponse_scheme (HTResponse * response); /* . HTTP Connection Control Directives . The connection control directives are all part of the connection header and control the behavior of this connection. The respose object contains the connection information that we have received in the response. */ extern BOOL HTResponse_addConnection (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteConnectionAll (HTResponse * response); extern HTAssocList * HTResponse_connection (HTResponse * response); /* . HTTP Extensions (PEP) . HTTP can be extended in several ways but traditionally it has been by using new headers. Here we present a new idea which provides a framework for describing extensions and their scope. This is only an idea an may be modified later! The implementation of the extensions can be found in the PEP module ( Protocol ) This association list is a list of the extension directives that were received as part of the response. */ extern BOOL HTResponse_addProtocol (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteProtocolAll (HTResponse * response); extern HTAssocList * HTResponse_protocol (HTResponse * response); /* ( Protocol Info ) This association list is a list of the extension directives that were received as part of the response. */ extern BOOL HTResponse_addProtocolInfo (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteProtocolInfoAll (HTResponse * response); extern HTAssocList * HTResponse_protocolInfo (HTResponse * response); /* ( Protocol Request ) This association list is a list of the extension directives that were received as part of the response. */ extern BOOL HTResponse_addProtocolRequest (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteProtocolRequestAll (HTResponse * response); extern HTAssocList * HTResponse_protocolRequest (HTResponse * response); /* . HTTP Cache Control Directives . This association list is a list of the cache control directives that have been received as part of the response. We also keep track of whether the response is cachable or not. */ extern BOOL HTResponse_addCacheControl (HTResponse * response, char * token, char *value); extern BOOL HTResponse_deleteCacheControlAll (HTResponse * response); extern HTAssocList * HTResponse_cacheControl (HTResponse * response); /* ( Is the response Cachable? ) The various cache-control headers and directives decides whether an object is cachable or not. Check these methods before starting caching! */ typedef enum _HTCachable { HT_NO_CACHE = 0, HT_CACHE_ALL = 1, HT_CACHE_ETAG = 2, HT_CACHE_NOT_MODIFIED = 3 } HTCachable; extern HTCachable HTResponse_isCachable (HTResponse * me); extern BOOL HTResponse_setCachable (HTResponse * me, HTCachable mode); /* ( The Response Enity Tag (etag) ) Return the etag if any */ extern char * HTResponse_etag (HTResponse * me); /* ( Has the Response been Cached? ) When we gc the response object we need to know whether the header lists have been inherited by other objects (the anchor object, for example) and hence shouldn't be deleted. We can tell the response object this by using the following method call */ extern BOOL HTResponse_isCached (HTResponse * me, BOOL mode); /* ( Some Cache-Control helper Methods ) Some useful helper functions for handling specific response cache directives */ extern time_t HTResponse_maxAge (HTResponse * response); extern BOOL HTResponse_mustRevalidate (HTResponse * response); extern char * HTResponse_noCache (HTResponse * response); /* ( Partial responses and Range Retrievals ) Libwww can issue range requests in case we have already obtained a part of the entity body. Since all HTTP entities are represented in HTTP messages as sequences of bytes, the concept of a byte range is meaningful for any HTTP entity. (However, not all clients and servers need to support byte-range operations.) Byte range specifications in HTTP apply to the sequence of bytes in the entity-body (not necessarily the same as the message-body). A byte range operation may specify a single range of bytes, or a set of ranges within a single entity. */ extern BOOL HTResponse_addRange (HTResponse * response, char * unit, char * range); extern BOOL HTResponse_deleteRangeAll (HTResponse * response); extern HTAssocList * HTResponse_range (HTResponse * response); /* ( Content Length ) We store the content length so that we have an idea of how many bytes to expect. */ extern long int HTResponse_length (HTResponse * response); extern void HTResponse_setLength (HTResponse * response, long int length); extern void HTResponse_addLength (HTResponse * response, long int deltalength); /* ( Content Type (Media type) ) We store the content-type of the response along with the charset, level and all other paramaters that may follow the content-type itself. */ extern HTFormat HTResponse_format (HTResponse * response); extern void HTResponse_setFormat (HTResponse * response, HTFormat format); /* The Response object stores all content type parameters (charset, level, etc.) in an Association list so here you will always be able to find them. We also have a few methods for the special cases: charset and level as they are often needed. */ extern HTAssocList * HTResponse_formatParam (HTResponse * response); extern BOOL HTResponse_addFormatParam (HTResponse * response, const char * name, const char * value); /* Charset parameter to Content-Type */ extern HTCharset HTResponse_charset (HTResponse * response); extern BOOL HTResponse_setCharset (HTResponse * response, HTCharset charset); /* Level parameter to Content-Type */ extern HTLevel HTResponse_level (HTResponse * response); extern BOOL HTResponse_setLevel (HTResponse * response, HTLevel level); /* ( Content Encodings ) The list of encodings that we have received in the response. */ extern HTList * HTResponse_encoding (HTResponse * response); extern BOOL HTResponse_addEncoding (HTResponse * response, HTEncoding enc); /* ( Transfer Encodings ) The list of encodings that we have received in the response. */ extern HTList * HTResponse_transfer (HTResponse * response); extern BOOL HTResponse_addTransfer (HTResponse * response, HTEncoding te); /* ( Content Transfer Encodings ) Any transfer encoding that we have received in the response. */ extern HTEncoding HTResponse_contentTransferEncoding (HTResponse * response); extern BOOL HTResponse_setContentTransferEncoding (HTResponse * response, HTEncoding cte); /* ( Vary Headers ) Any Vary header fields */ extern BOOL HTResponse_addVariant (HTResponse * me, char * token, char * value); extern BOOL HTResponse_deleteVariantAll (HTResponse * me); extern HTAssocList * HTResponse_variant (HTResponse * me); /* ( Trailers ) Any trailer header fields */ extern BOOL HTResponse_addTrailer (HTResponse * me, char * token, char * value); extern BOOL HTResponse_deleteTrailerAll (HTResponse * me); extern HTAssocList * HTResponse_trailer (HTResponse * me); /* ( Original Response Headers ) The MIME parser may add the original response headers as (name,value) pairs. The information may be picked up by the persistent cache manager. */ extern BOOL HTResponse_addHeader (HTResponse * response, char * token, char * value); extern BOOL HTResponse_deleteHeaderAll (HTResponse * response); extern HTAssocList * HTResponse_header (HTResponse * response); extern HTAssocList * HTResponse_handOverHeader (HTResponse * me); /* ( The HTTP reason string ) The string returned in the HTTP status line. Some servers send custom info in this string and applications may want to show it. */ extern char * HTResponse_reason (HTResponse * me); extern BOOL HTResponse_setReason (HTResponse * me, char * reason); /* */ #endif /* HTRESPONSE_H */ /* @(#) $Id: HTResponse.html,v 2.14 2025/12/19 11:21:29 kahan Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTRules.h������������������������������������������������������������������������0100644�0000764�0000144�00000006566�07405520456�015467� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Rule File Configuration manager ! Rule File Configuration Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The W3C Library provides this module for handling configuration files (a.k.a. rule files). Rule files can be used to initialize as much as the application desires including setting up new protocol modules etc. Also the rules file do not have to be a fil - it can be a database or any other way of storage information. This implementation is not used by the Library at all and is part of the Application interface. This module is implemented by HTRules.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTRULE_H #define HTRULE_H #include "HTList.h" #include "HTReq.h" #include "HTFormat.h" /* . Parse a Rule File . Parsing a whole rule file is done using a converter stream. This means that a rule file can come from anywhere, even accross the network. We have defined a special content type for rule files called WWW_RULES in HTFormat and made a file suffix binding for all files ending in ".conf" in the default initialization of the file suffix bindings module. The rule file parser comes in two variants: one that asks the user and one that doesn't. Needless to say that you have to be carefull with the latter one. You can also define HT_AUTOMATIC_RULES when compiling libwww to determine whether it is OK to parse a rule file without asking the user. */ extern HTConverter HTRules, HTRules_parseAutomatically; /* . Parse a single line from a Rule File . This routine may be used for loading configuration information from sources other than the rule file, for example INI files for X resources. config is a string in the syntax of a rule file line. */ extern BOOL HTRule_parseLine (HTList * list, const char * config); /* . Add a Rule to the List . This function adds a rule to the list of rules. The pattern is a 0-terminated string containing a single "*". equiv points to the equivalent string with * for the place where the text matched by * goes. */ typedef struct _HTRule HTRule; typedef enum _HTRuleOp { HT_Invalid, HT_Map, HT_Pass, HT_Fail, HT_DefProt, HT_Protect, HT_Exec, HT_Redirect, HT_UseProxy } HTRuleOp; extern BOOL HTRule_add (HTList * list, HTRuleOp op, const char * pattern, const char * replace); /* . Delete all Registered Rules . This function clears all rules registered */ extern BOOL HTRule_deleteAll (HTList *list); /* . Global Rules . Rules are handled as list as everything else that has to do with preferences. We provide two functions for getting and setting the global rules: */ extern HTList * HTRule_global(void); extern BOOL HTRule_setGlobal (HTList * list); extern BOOL HTRule_addGlobal (HTRuleOp op, const char * pattern, const char * replace); /* . Translate by rules . This function walks through the list of rules and translates the reference when matches are found. The list is traversed in order starting from the head of the list. It returns the address of the equivalent string allocated from the heap which the CALLER MUST FREE. If no translation occured, then it is a copy of the original. */ extern char * HTRule_translate (HTList * list, const char * token, BOOL ignore_case); /* */ #endif /* @(#) $Id: HTRules.html,v 2.37 2025/08/10 17:05:18 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTSChunk.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001732�07405520456�015556� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Stream to Chunk Converter ! Stream to Chunk Converter ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This stream converts a Stream obejct into a Chunk object. Chunks are dynamic streams so this is in other words a conversion from a stream based model to a dynamic data buffer model for handling a downloaded object. It is for the caller of this stream to free the chunk. If max_size is 0 then we use a default size, if -1 then there is no limit. This module is implemented by HTSChunk.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTSCHUNK_H #define HTSCHUNK_H #include "HTChunk.h" #include "HTStream.h" extern HTStream * HTStreamToChunk (HTRequest * request, HTChunk ** chunk, int max_size); /* End of definition module */ #endif /* HTSCHUNK_H */ /* @(#) $Id: HTSChunk.html,v 2.4 2025/05/14 02:11:03 frystyk Exp $ */ ��������������������������������������libwww/Library/src/HTSQL.h��������������������������������������������������������������������������0100644�0000764�0000144�00000006337�07405520456�015030� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww SQL API ! Simple SQL API ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module interacts with the MYSQL C client library to perform SQL operations. It is not intended as a complete SQL API but handles most of the typical error situations talking to an SQL server so that the caller doesn't have to think about it. This requires that you have linked against a MySQL library. See the installation instructions for details. This module is implemented by HTSQL.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTSQL_H #define HTSQL_H #include <mysql/mysql.h> /* . The HTSQL Object . */ typedef struct _HTSQL HTSQL; extern HTSQL * HTSQL_new (const char * host, const char * user, const char * pw, int flags); extern BOOL HTSQL_delete (HTSQL * me); /* . Handling the link to the Server . ( Open a connection to the SQL server ) */ extern BOOL HTSQL_connect (HTSQL * me); /* ( Close the link to the database ) */ extern BOOL HTSQL_close (HTSQL * me); /* ( You can get information about whom we are talking to by calling this function: ) */ extern BOOL HTSQL_version (HTSQL * me, char ** server, unsigned int * protocol_version, char ** server_version, char ** client_version); /* ( Selecting the current database ) */ extern BOOL HTSQL_selectDB (HTSQL * me, const char * db); /* ( Getting the raw MYSQL object ) After you have connected you can get the raw MYSQL object by calling this function */ extern MYSQL * HTSQL_getMysql (HTSQL * me); /* . SQL printf . When creating queries to send to the SQL server you need to generate a lot of SQL specific strings. This function knows most of the commonly used SQL ways of handling date and time string, escaping and quoting strings and how to write integers as strings. The function works pretty much as fprintf with the following possible format arguments: %s Writes a string as is. No quotation or escaping is performed. NULL is written as "null". %S Writes a string in quotes and escapes any special SQL characters. NULL is written as "null". %T Creates an SQL datetime stamp from a time_t variable looking like this YYYY-MM-DD HH:MM:SS. -1 is written as "null" %u Unsigned integer %l Unsigned long integer */ extern char * HTSQL_printf (char * buf, int length, char * fmt, ...); /* . Issuing a Query . You can issue a query using this function. If the connection to the server was dropped then it automatically tries to reconnect */ extern BOOL HTSQL_query (HTSQL * me, const char * query); /* Get information about the last inserted row's unique ID or how many rows were affected by the last query: */ extern int HTSQL_getLastInsertId (HTSQL * me); extern int HTSQL_GetAffectedRows (HTSQL * me); /* . Handle Query Results . Call this funciton to store the SQL query result */ extern MYSQL_RES * HTSQL_storeResult (HTSQL * me); /* When you are done with a query result then call this to clean up */ extern BOOL HTSQL_freeResult (MYSQL_RES * me); /* */ #endif /* @(#) $Id: HTSQL.html,v 2.1 2025/05/19 16:49:38 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTSQLLog.h�����������������������������������������������������������������������0100644�0000764�0000144�00000004760�07405520456�015470� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww SQL Log Class ! SQL Log Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This SQL based log class generates a SQL database and a set of tables storing the results of a request. The result is stored in different tables depending on whether it is information about the request or the resource returned. The module uses the simple libwww SQL interface This requires that you have linked against a MySQL library. See the installation instructions for details. This module is implemented by HTSQLLog.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTSQLLOG_H #define HTSQLLOG_H #include "HTReq.h" /* . Open and Close the Logs . Create a new SQLLog object and connect to the SQL server. */ typedef struct _HTSQLLog HTSQLLog; typedef enum _HTSQLLogFlags { HTSQLLOG_CLEAR_URIS_TABLE = 0x1, HTSQLLOG_CLEAR_LINKS_TABLE = 0x2, HTSQLLOG_CLEAR_REQUESTS_TABLE = 0x4, HTSQLLOG_CLEAR_RESOURCES_TABLE = 0x8, HTSQLLOG_DROP_URIS_TABLE = 0x10, HTSQLLOG_DROP_LINKS_TABLE = 0x20, HTSQLLOG_DROP_REQUESTS_TABLE = 0x40, HTSQLLOG_DROP_RESOURCES_TABLE = 0x80 } HTSQLLogFlags; extern HTSQLLog * HTSQLLog_open (const char * host, const char * user, const char * pw, const char * db, HTSQLLogFlags flags); /* . Close Connection to the SQL Server . Close the log file and delete the log object */ extern BOOL HTSQLLog_close (HTSQLLog * me); /* . Write Logdata to the Database . ( Add a Log Entry ) */ extern BOOL HTSQLLog_addEntry (HTSQLLog * me, HTRequest * request, int status); /* ( Add a Link Relationship Entry ) */ extern BOOL HTSQLLog_addLinkRelationship (HTSQLLog * me, const char * src_uri, const char * dst_uri, const char * link_type, const char * comment); /* . Options and Flags . ( Make URIs Relative to this Base ) Instead of inserting the absolute URI then you can log relative URIs instead which often saves a lot of space. Set the base URI using this function */ extern BOOL HTSQLLog_makeRelativeTo (HTSQLLog * me, const char * relative); /* ( How many times has this Log Object Been Accessed? ) This has nothing to do with the SQL database but merely returns the access count number to the log or -1 if error. */ extern int HTSQLLog_accessCount (HTSQLLog * me); /* */ #endif /* @(#) $Id: HTSQLLog.html,v 2.4 2025/05/19 16:49:40 frystyk Exp $ */ ����������������libwww/Library/src/HTSocket.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001773�07405520456�015620� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Identity Socket Read ! Identity Socket Read Method ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This function is an "identity" application protocol in that it reads data from the transport and passes it down stream without doing anything with it. It simply reads data and is a wrapper around a registered transport mechanism for reading from a socket. It provides a callback function for the event loop so that a socket can be loaded using non-blocking I/O. The function requires an open socket. It will typically be used in server applications or in a client application that can read directly from stdin. This module is implemented by HTSocket.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTSOCKET_H #define HTSOCKET_H #include "HTProt.h" extern HTProtCallback HTLoadSocket; /* */ /* */ #endif /* @(#) $Id: HTSocket.html,v 2.26 2025/05/14 02:11:05 frystyk Exp $ */ �����libwww/Library/src/HTStream.h�����������������������������������������������������������������������0100644�0000764�0000144�00000010103�07405520456�015606� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Generic Stream Class ! Generic Stream Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Stream class defines objects which accepts a sequence of characters. Streams may also have an output in which case multiple stream objects can be cascaded to build a stream pipe where the output of a stream is directed into the input of the next stream object "down the line". Of course, one of the main features of streams is that they can perform a data conversion on the data before piping it to the output. As multiple streams may be cascaded, the complete data conversion is then the sum of each individual data conversion performed by the stream objects being part of the stream pipe. It is not required that a stream has a target, it might as well be a black hole that just accepts data without ever giving it out again. The generic stream class is subclassed multiple places in the Library and a good example is the structured stream definition which creates a SGML object. All stream class methods return an integer status code telling whether the operation succeeded or not.. This is the way for a stream to pass control information upstream to the caller which may also be a stream. The general return codes from the methods are: o HT_WOULD_BLOCK o HT_ERROR o HT_OK o >0 - any return greater than 0 will result in that the return code will be parsed through all stream objects. This can be used to pass back information to the protocol modules, for example It is in general not relevant to return how much data has been written in the stream, as there often will be a relationship other than 1:1 between indata and outdata. However, it is important that a stream keeps state (either on the incoming data or the outgoing data stream) so that it can accept a HT_WOULD_BLOCK and continue at a later time when the blocking situation has stopped. This module is implemented by HTStream.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTSTREAM_H #define HTSTREAM_H #include "HTList.h" typedef struct _HTStream HTStream; typedef struct _HTStreamClass { char * name; /* This field is for diagnostics only */ int (*flush) (HTStream * me); /* The flush method is introduced in order to allow the stream to put any buffered data down the stream pipe but without taking the stream pipe down. It is for the stream to decide whether it has buffered data or not. In some situations, the stream might not want to send buffered data down the target as the date might be relevant for this stream only. */ int (*_free) (HTStream * me); /* The free method is like the flush method but it also frees the current stream object and all stream objects down stream. When the free method has been called, the whole stream pipe (not only this obejct) should not accept any more data. */ int (*abort) (HTStream * me, HTList * errorlist); /* The abort method should only be used if a stream is interrupted, for example by the user, or an error occurs. */ int (*put_character)(HTStream * me, char ch); int (*put_string) (HTStream * me, const char * str); int (*put_block) (HTStream * me, const char * str, int len); /* These methods are for actually putting data down the stream. It is important that the most efficient method is chosen (often put_block). There is no guarantee that a stream won't change method, for example from put_character to put_block */ } HTStreamClass; /* . Basic Utility Streams . These streams can be plugged in everywhere in a stream pipe. ( Black Hole Stream ) This stream simply absorbs data without doing anything what so ever. */ extern HTStream * HTBlackHole (void); /* ( Generic Error Stream ) The Error stream simply returns HT_ERROR on all methods. This can be used to stop a stream as soon as data arrives, for example from the network. */ extern HTStream * HTErrorStream (void); /* */ #endif /* HTSTREAM_H */ /* @(#) $Id: HTStream.html,v 2.24 2025/05/14 02:11:05 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTString.h�����������������������������������������������������������������������0100644�0000764�0000144�00000006105�07405520456�015630� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Generic String Management ! Generic String Management ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* These functions provide functionality for case-independent string comparison and allocations with copies etc. This module is implemented by HTString.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTSTRING_H #define HTSTRING_H /* . Dynamic String Manipulation . These two functions are dynamic versions of strcpy and strcat. They use malloc for allocating space for the string. If StrAllocCopy is called with a non-NULL dest, then this is freed before the new value is assigned so that only the last string created has to be freed by the user. If StrAllocCat is called with a NULL pointer as destination then it is equivalent to StrAllocCopy. */ #define StrAllocCopy(dest, src) HTSACopy (&(dest), src) #define StrAllocCat(dest, src) HTSACat (&(dest), src) extern char * HTSACopy (char **dest, const char *src); extern char * HTSACat (char **dest, const char *src); /* The next two functions take a variable number of strings and cats them together using dynamic memory. This is basically like a simple form for sprintf where the only argument is char *. One day we should turn this into a real dynamic sprintf(). */ extern char * StrAllocMCopy (char ** dest, ...); extern char * StrAllocMCat (char ** dest, ...); /* The last argument MUST be NULL as we otherwise don't know when the argument list stops. . Case-insensitive String Comparison . The usual routines (comp instead of cmp) had some problem. */ extern int strcasecomp (const char *a, const char *b); extern int strncasecomp (const char *a, const char *b, int n); /* . Tail String Comparison . Like strcmp, but match the tail of s2 (used for cookie domain comparison) */ extern int tailcomp(const char * s1, const char * s2); extern int tailcasecomp(const char * s1, const char * s2); /* . String Comparison with Wild Card Match . String comparison function for file names with one wildcard * in the template. Arguments are: tmpl is a template string to match the name against. agaist, may contain a single wildcard character * which matches zero or more arbitrary characters. name is the name to be matched agaist the template. Returns empty string ("") if perfect match, pointer to part matched by wildcard if any, or NULL if no match. This is basically the same as YES if match, else NO. */ extern char * HTStrMatch (const char * tmpl, const char * name); extern char * HTStrCaseMatch (const char * tmpl, const char * name); /* . Case-insensitive strstr . This works like strstr() but is not case-sensitive. */ extern char * HTStrCaseStr (char * s1, char * s2); /* . Strip white space off a string . Return value points to first non-white character, or to '/0' if none. All trailing white space is OVERWRITTEN with zero. */ extern char * HTStrip (char * s); /* */ #endif /* !HTSTRING_H */ /* @(#) $Id: HTString.html,v 2.38 2025/07/31 01:27:55 raff Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTStruct.h�����������������������������������������������������������������������0100644�0000764�0000144�00000004402�07405520456�015644� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Structured Stream Class ! Structured Stream Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Structured stream class defines objects which accepts a structured sequence of characters for eaxmple a SGML document. I'll rephrase that. A structured object is am ordered tree-structured arrangement of data which is representable as text. An example is the SGML parser which outputs to a Structured Object. A Structured object can output its contents to another Structured Object. It's a kind of typed stream. The architecure is largely Dan Conolly's. Elements and entities are passed to the sob by number, implying a knowledge of the DTD. The Structured Stream is a subclass of a Generic Stream Object. As always, we don't have classes in basic C so we have to do this by hand! This module is a part of the W3C Sample Code Library. */ #ifndef HTSTRUCT_H #define HTSTRUCT_H #include "HTStream.h" #include "HTList.h" /* */ typedef struct _HTStructured HTStructured; typedef struct _HTStructuredClass { char * name; int (*flush) (HTStructured * me); int (*_free) (HTStructured * me); int (*abort) (HTStructured * me, HTList * errorlist); int (*put_character)(HTStructured * me, char ch); int (*put_string) (HTStructured * me, const char * str); int (*put_block) (HTStructured * me, const char * str, int len); /* See the Generic Stream Definition for an explanation of these methods. Note that they all have a HTStructured object a the parameter, not a generic stream. This is to avoid incompatible pointer warnings */ void (*start_element)(HTStructured *me, int element_number, const BOOL * attribute_present, const char ** attribute_value); void (*end_element) (HTStructured * me, int element_number); void (*put_entity) (HTStructured * me, int entity_number); int (*unparsed_begin_element)(HTStructured * me, const char * str, int len); int (*unparsed_end_element)(HTStructured * me, const char * str, int len); int (*unparsed_entity)(HTStructured * me, const char * str, int len); } HTStructuredClass; #endif /* @(#) $Id: HTStruct.html,v 2.13 2025/01/06 15:38:47 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTStyle.h������������������������������������������������������������������������0100644�0000764�0000144�00000004125�07405520456�015462� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Stylesheet Manager ! Stylesheet Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Styles allow the translation between a logical property of a piece of text and its physical representation. A StyleSheet is a collection of styles, defining the translation necessary to represent a document. It is a linked list of styles. A stylesheet is a collection of styles - these styles can either come from over the net or they can be provided by the application as needed. The manager doesn't contain any styles - it only provides a mechanism for registering styles, looking them up and deleting them. That is, it doesn't have any idea of what a style actually looks like - as this is highly application dependent, it is not a good idea to provide this as common library code. This module is implemented by HTStyle.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTSTYLE_H #define HTSTYLE_H /* . Creating and Deleting a StyleSheet . A Stylesheet is a container containing multiple individual styles. You must therefore first create a stylesheet before you can create individual styles. */ typedef struct _HTStyleSheet HTStyleSheet; extern HTStyleSheet * HTStyleSheet_new (const char * name); extern BOOL HTStyleSheet_delete (HTStyleSheet * me); /* . Creating and Deleting Individual Styles . */ typedef struct _HTStyle HTStyle; extern HTStyle * HTStyle_new (const char * name, int element, void * context); extern BOOL HTStyle_delete (HTStyle * me); /* . Adding and Deleting Individual styles from Stylesheet . */ extern BOOL HTStyleSheet_addStyle (HTStyleSheet * me, HTStyle * style); extern BOOL HTStyleSheet_deleteStyle (HTStyleSheet * me, HTStyle * style); /* . Searching for a Specific Style . */ extern HTStyle * HTStyleSheet_findStyleWithName (HTStyleSheet * me, const char * name); extern HTStyle * HTStyleSheet_findStyleForElement (HTStyleSheet * me, int element); /* */ #endif /* HTSTYLE_H */ /* @(#) $Id: HTStyle.html,v 2.29 2025/01/06 15:38:48 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTCP.h��������������������������������������������������������������������������0100644�0000764�0000144�00000004422�07405520456�015010� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Socket Open and Close ! Socket Open and Close ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Socket Open and Close methods knows how to establish a BSD socket TCP connection and is part of the Transport interface. This module is implemented by HTTCP.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTCP_H #define HTTCP_H #include "HTReq.h" #include "HTNet.h" /* . Active Connection Establishment . This makes an active connect to the specified host. An HTNet Object is parsed in order to handle errors and other stuff. The default port might be overwritten by any port indication in the URL specified as <host>:<port> If it is a multihomed host (a host having multiple IP-addresses with the same host name) &nbsp;then HTDoConnect() measures the time it takes to connect and updates the calculated weights in the DNS object. */ extern int HTDoConnect (HTNet * net); /* . Passive Connection Establishment . This function makes an accept on a port. The net must contain a valid socket to accept on. If accept is OK then we duplicate the net object and assign the accepted socket to the newly created net object. The original Net object will keep accepting connections on the original socket, for example port 80 in the case of HTTP. The newly created Net object will be freed when the protocol module has finished. If the accepted net object pointer points to the net object itself, that is - the same object all along - then we reuse the same Net obejct; closes the original socket and replaces it wik the accepted one. This is a quick way of accepting a single connection. */ extern int HTDoAccept (HTNet * listen, HTNet * accept); /* . Listen on a Socket . Listens on the specified port described in the Net object. backlog is the number of connections that can be queued on the socket - you can use HT_BACKLOG for a platform dependent value (typically 5 on BSD and 32 on SVR4). Returns HT_ERROR or HT_OK. */ extern int HTDoListen (HTNet * net, HTNet * accept, int backlog); /* . Closing a socket . Closes a socket */ extern int HTDoClose (HTNet * net); /* */ #endif /* HTTCP_H */ /* @(#) $Id: HTTCP.html,v 2.44 2025/07/07 15:43:28 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTChunk.h�����������������������������������������������������������������������0100644�0000764�0000144�00000002244�07405520456�015556� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Chunked Transfer Encoding and Decoding ! Chunked Transfer Encoding and Decoding ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Chunked transfer encoding and decoding is new in HTTP/1.1. It allows applications to use persistent connections while not knowing the content length a priori to the response header is generated. Both the encoder and the decoder are of type HTCoder which is defined in the Stream Pipe Builder. This means that bot the encoder and the decoder are registered dynamically and called by the Stream Pipe Builder if required. Note: These streams are not set up by default. They must be registered by the application. You can use the default initialization function HTEncoderInit() function in the initialization interface. This module is implemented by HTTChunk.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTCHUNK_H #define HTTCHUNK_H #include "HTFormat.h" /* */ extern HTCoder HTChunkedDecoder, HTChunkedEncoder; /* */ #endif /* HTTCHUNK_H */ /* @(#) $Id: HTTChunk.html,v 2.4 2025/05/14 02:11:09 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTP.h���������������������������������������������������������������������������0100644�0000764�0000144�00000004433�07405520456�014707� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTTP Client ! Multi Threaded HyperText Tranfer Protocol Client Module ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the HTTP client module. This is actually a very small definition file as almost everything is set up elsewhere. This module is implemented by HTTP.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTP_H #define HTTP_H #include "HTProt.h" #include "HTStream.h" /* ( HTTP Client Connection Mode ) The HTTP client module supports various modes for communicating with HTTP servers. The mode are defined by the enumeration below. */ typedef enum _HTTPConnectionMode { HTTP_11_PIPELINING = 0x1, HTTP_11_NO_PIPELINING = 0x2, HTTP_11_MUX = 0x4, HTTP_FORCE_10 = 0x8 } HTTPConnectionMode; extern void HTTP_setConnectionMode (HTTPConnectionMode mode); extern HTTPConnectionMode HTTP_connectionMode (void); /* ( HTTP Write Delay of Content Bodies ) Because of the differences between HTTP/1.0 and HTTP/1.1, HTTP PUT and POST requests can not be dealt with in non-preemptive mode - they have to use timers and hence must be in preemptive mode. The default write mechanism used is first to write the headers and then wait for a period of time before writing the body. This often allows the server to respond before we start sending data accross the wire. If the write for some reason fails in a bad way then we try again, waiting a little bit longer this time as this may give the server enough time to think. The default wait periods are 2000ms for the first wait and 3000ms if that fails. These are rather conservative values but can be changed by using these functions. The second try value must be larger (or equal) to the first try value and the first try value must be larger than 20 ms. */ extern BOOL HTTP_setBodyWriteDelay (ms_t first_try, ms_t second_try); extern void HTTP_bodyWriteDelay (ms_t * first_try, ms_t * second_try); /* ( HTTP Event Handler ) The event handler is the actual HTTP client state machine taking care of the communication. */ extern HTProtCallback HTLoadHTTP; extern HTConverter HTTPStatus_new; #endif /* HTTP_H */ /* @(#) $Id: HTTP.html,v 2.40 2025/02/29 16:34:15 kahan Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPGen.h������������������������������������������������������������������������0100644�0000764�0000144�00000001716�07405520456�015342� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTTP General Header Stream ! HTTP General Header Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The HTTP General Header stream generates the general headers of a HTTP request or response and writes it to the target which is normally either a HTTP response stream or a HTTP request stream. This module is implemented by HTTPGen.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTPGEN_H #define HTTPGEN_H #include "HTStream.h" #include "HTReq.h" /* ( Streams Definition ) This stream makes a general HTTP header before it goes into transparent mode. If endHeader is YES then we send an empty CRLF in order to end the header. */ extern HTStream * HTTPGen_new (HTRequest * request, HTStream * target, BOOL endHeader, int version); /* */ #endif /* @(#) $Id: HTTPGen.html,v 2.7 2025/05/14 02:11:10 frystyk Exp $ */ ��������������������������������������������������libwww/Library/src/HTTPReq.h������������������������������������������������������������������������0100644�0000764�0000144�00000001566�07405520456�015363� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTTP REQUEST STREAM !HTTP Request Stream! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The HTTP Request stream generates a HTTP request header and writes it to the target which is normally a HTWriter stream. This module is implemented by HTTPReq.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTPREQ_H #define HTTPREQ_H #include "HTStream.h" #include "HTReq.h" /* (Streams Definition) This stream makes a HTTP request header before it goes into transparent mode. If endHeader is YES then we send an empty CRLF in order to end the header. */ extern HTStream * HTTPRequest_new (HTRequest * request, HTStream * target, BOOL endHeader, int version); /* */ #endif /* @(#) $Id: HTTPReq.html,v 2.13 2025/05/14 02:11:11 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPRes.h������������������������������������������������������������������������0100644�0000764�0000144�00000001603�07405520456�015355� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTTP RESPONSE STREAM !HTTP Response Stream! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The HTTP response stream generates a HTTP response header and writes it to the target which is normally a HTWriter stream. This module is implemented by HTTPRes.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTPRES_H #define HTTPRES_H #include "HTStream.h" #include "HTReq.h" /* (Streams Definition) This stream makes a server specific HTTP header before it goes into transparent mode. If endHeader is YES then we send an empty CRLF in order to end the header. */ extern HTStream * HTTPResponse_new (HTRequest * request, HTStream * target, BOOL endHeader, int version); /* */ #endif /* @(#) $Id: HTTPRes.html,v 2.8 2025/05/14 02:11:12 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPServ.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001076�07405520456�015547� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTTP SERVER !HTTP Server Module! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is actually a very small definition file as almost everything is set up elsewhere. This module is implemented by HTTPServ.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTPSERV_H #define HTTPSERV_H #include "HTProt.h" extern HTProtCallback HTServHTTP; #endif /* HTTPSERV_H */ /* @(#) $Id: HTTPServ.html,v 2.7 2025/05/14 02:11:12 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTPUtil.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001322�07405520456�015537� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTTP COMMON ! HTTP Communalities between Server and Client Module ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The HTTP client module and the server module has a few things in common which we keep in this file. */ #ifndef HTTPUTIL_H #define HTTPUTIL_H /* ( HTTP Version Management ) */ typedef enum _HTTPVersion { HTTP = 0, HTTP_09, HTTP_10, HTTP_11, HTTP_12 } HTTPVersion; /* ( Versions supported by HTTP ) */ #define HTTP_VERSION_10 "HTTP/1.0" #define HTTP_VERSION "HTTP/1.1" /* */ #endif /* @(#) $Id: HTTPUtil.html,v 2.7 2025/02/16 18:43:07 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTeXGen.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001544�07405520456�015516� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTML TO LATEX CONVERTER STREAM !LaTeX generator! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module converts a structured stream from HTML into LaTeX format. The conversion is mostly a 1:1 translation, but as the LaTeX compiler is much more strict than a typical HTML converter some typographical constraints are put on the translation. Only text is translated for the moment. This module is implemented by HTTeXGen.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTEXGEN_H #define HTTEXGEN_H #include "HTStruct.h" #include "HTFormat.h" /* .Conversion Module. The conversion module is defined as */ extern HTConverter HTMLToTeX; /* */ #endif /* @(#) $Id: HTTeXGen.html,v 2.19 2025/05/14 02:11:13 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTee.h��������������������������������������������������������������������������0100644�0000764�0000144�00000002323�07405520456�015075� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww T Stream !Tee stream! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Tee stream just writes everything you put into it into two other streams. One use (the only use?!) is for taking a cached copey on disk while loading the main copy, without having to wait for the disk copy to be finished and reread it. You can create a T stream using this method. Each stream returns a return value and in order to resolve conflicts in the return code you can specify a resolver callback function. Each time any of the data methods are called the resolver function is then called with the return codes from the two streams. The return code of the T stream itself will be the result of the resolver function. If you pass NULL as the resolver routine then a default resolver is used. This module is implemented by HTTee.c, and it is a part of the W3C Sample Code Library. */ #ifndef _HTTEE_H #define _HTTEE_H #include "HTStream.h" #include "HTArray.h" extern HTStream * HTTee (HTStream * s1, HTStream * s2, HTComparer * resolver); #endif /* HTTEE_H */ /* @(#) $Id: HTTee.html,v 2.16 2025/05/14 02:11:13 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTelnet.h�����������������������������������������������������������������������0100644�0000764�0000144�00000000755�07405520456�015622� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww TELNET, RLOGIN ETC. !Telnet and similar access methods! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is implemented by HTTelnet.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTELNET_H #define HTTELNET_H #include "HTProt.h" extern HTProtCallback HTLoadTelnet; #endif /* @(#) $Id: HTTelnet.html,v 2.24 2025/05/14 02:11:14 frystyk Exp $ */ �������������������libwww/Library/src/HTTimer.h������������������������������������������������������������������������0100644�0000764�0000144�00000007316�07405520456�015447� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Timer Class ! The Timer Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Timer class handles timers for libwww and the application. This works exactly as in X where you create a timer object with a callback function and a timeout. The callback will be called every time the timer expires. There are several timeouts that can be set in libwww: o The time we keep an idle persistent connection open. Here there are in fact two mechanisms depending on whether you use blocking or non-blocking sockets. The default is 60 secs. The timers can be accessed using the functions defined in the HTHost object o The idle time we want to wait when receiving a response from a server, that is, if it doesn't send anything in a number of secs. The default here is no timeout. It can be accessed in the HTHost object as well. o The timeout before we flush pending requests in a pipeline, the default here is 30 ms. It is also accessed in the HTHost object o The timeout before we start sending the body of a PUT or POST request. Normally we send the Expect: 100-continue header field but if the server doesn't send back a 100 Continue code then we upload the body anyway. The default is 2 secs and can be accessed in the HTTP module. */ #ifndef HTTIMER_H #define HTTIMER_H #include "wwwsys.h" #include "HTReq.h" typedef struct _HTTimer HTTimer; typedef int HTTimerCallback (HTTimer *, void *, HTEventType type); /* . Create and Delete Timers . The callback function is the function that is to be called when timer expires. */ extern HTTimer * HTTimer_new (HTTimer *, HTTimerCallback *, void *, ms_t millis, BOOL relative, BOOL repetitive); extern BOOL HTTimer_delete (HTTimer * timer); extern BOOL HTTimer_deleteAll (void); extern BOOL HTTimer_expireAll (void); /* . Dispatch Timer . Just do it */ extern int HTTimer_dispatch (HTTimer * timer); /* ( Get the next timer in line ) Dispatches all expired timers and optionally returns the time till the next one. */ extern int HTTimer_next (ms_t * pSoonest); /* ( Reset an already existing Repetitive Timer ) */ extern BOOL HTTimer_refresh(HTTimer * timer, ms_t now); /* . Get Information about a Timer Object . ( Absolute Time when This Timer Expires ) Absolute time in millies when this timer will expire */ extern ms_t HTTimer_expiresAbsolute (HTTimer * timer); /* ( Relative Time this Timer is running ) Gived the relative time in millies that this timer was registered with. For example, a relative timer set to expire in 20ms will return 20. */ #define HTTimer_getTime(t) HTTimer_expiresRelative(t) extern ms_t HTTimer_expiresRelative (HTTimer * timer); /* ( Has this Timer Expired? ) If so then it's time to call the dispatcher! */ extern BOOL HTTimer_hasTimerExpired (HTTimer * timer); /* ( What callback is this Timer Registered with? ) */ extern HTTimerCallback * HTTimer_callback (HTTimer * timer); /* ( Is this Time relative or Absolute? ) */ extern BOOL HTTimer_isRelative (HTTimer * timer); /* . Platform Specific Timers . On some platform, timers are supported via events or other OS specific mechanisms. You can make libwww can support these by registering a platform specific timer add and timer delete method. */ typedef BOOL HTTimerSetCallback (HTTimer * timer); extern BOOL HTTimer_registerSetTimerCallback (HTTimerSetCallback * cbf); extern BOOL HTTimer_registerDeleteTimerCallback (HTTimerSetCallback * cbf); /* */ #endif /* HTTIMER_H */ /* @(#) $Id: HTTimer.html,v 2.11 2025/06/30 21:05:13 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTTrans.h������������������������������������������������������������������������0100644�0000764�0000144�00000007141�07405520456�015452� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Transport Class ! The Transport Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Transport Class defines a transport as used by the HTChannel class to communicate with the network, the local file system etc. New transport objects may be registered at any time. This allows the application to easily hook in its own transport layers. The purpose of the HTTransport object is to contain transport dependent methods for opening and closing a connection to the transport and also to get an input stream and an output strean for reading and writing to the transport respectively. Note: The library core does not &nbsp;define any default transport objects - they are all considered part of the application. The library comes with a default set of transports which can be initiated using the function HTTransportInit() in HTInit module This module is implemented by HTTrans.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTTRANS_H #define HTTRANS_H /* . Creation and Deletion Methods . All transport interfaces are registered dynamically in libwww. This means that libwww is independent of the transport being used (TCP, for example), and you can therefore use libwww in any context you like. You have to specify a set of parameters in order for libwww to be able to use it. The transport class is defined as follows: */ typedef struct _HTTransport HTTransport; typedef enum _HTTransportMode { HT_TP_SINGLE = 0, /* One single request at a time */ HT_TP_PIPELINE = 1, /* Use pipelined requests */ HT_TP_INTERLEAVE = 2 /* Can we interleave requests? */ } HTTransportMode; #include "HTIOStream.h" #include "HTReq.h" /* ( Add a Transport ) A new transport can be registered at any time in the Library. You must specify a name ad the supported channel mode that the transport supports. Then you must also register two creation methods of an input and an output stream respectively. You can find the definition of the I/O streams in the HTIOStream module. */ extern BOOL HTTransport_add (const char * name, HTTransportMode mode, HTInput_new * get_input, HTOutput_new * get_output); /* ( Delete a Transport ) This functions deletes a registered protocol module so that it can not be used for accessing a resource anymore. */ extern BOOL HTTransport_delete (const char * name); /* ( Remove ALL Registered Transports ) This is the garbage collection function. It is called by HTLibTerminate() */ extern BOOL HTTransport_deleteAll (void); /* . Transport Class Methods . ( Find a Transport Protocol Object ) You can search the list of registered protocol objects as a function of the access acheme. If an access scheme is found then the protocol object is returned. */ extern HTTransport * HTTransport_find (HTRequest * request, const char * name); /* ( Supported Transort Modes ) A transport object is registered with the flow control mode that it supports. This mode describes whether we can issue multiple requests at the same time. */ extern HTTransportMode HTTransport_mode (HTTransport * tp); extern BOOL HTTransport_setMode (HTTransport * tp, HTTransportMode mode); /* ( Input and Output Stream Creation Methods ) */ struct _HTTransport { char * name; HTTransportMode mode; /* Flow mode supported */ HTInput_new * input_new; /* Input stream creation method */ HTOutput_new * output_new; /* Output stream creation method */ }; /* */ #endif /* HTTRANS_H */ /* @(#) $Id: HTTrans.html,v 2.8 2025/07/04 15:11:35 kahan Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUTree.h������������������������������������������������������������������������0100644�0000764�0000144�00000007245�07405520456�015414� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww URL Tress ! URL Trees ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* A URL tree is a hierarchical container class that is well suited for storing information about a URL hierarchy. The root of a URL tree is the hostname part of the URL, for example www.w3.org:8000.&nbsp;Client application can use URL trees to store what they know about remote servers, for example the access authentication, PICS labels and PEP modules required to access a specific URL from a remote server. However, URL trees can also be used on server side to contain information about the server tree, for example what parts of the tree is protected etc. There are three components of the URL tree which all can be searched for using the methods declared in this module. o The Tree itself o A URL Node which represents a hierarchy level in a URL o A URL Template which can span multiple nodes and are very similar to the realms known from for example Basic Access Authentication in HTTP. Typically, a URL tree will be empty when the application starts and as time goes by and we get to know more about the remote servers that we have access, the URL trees will contain more and more information. A nice feature about URL trees is that the application can interpolate information based on realms and templates. This gives the application a good chance of guessing what information (for example a set of credentials) should be appended to a new request. We do not currently distinguish between multiple access mechanisms, for example HTTP and FTP, however, URL trees are mostly used within the HTTP domain. URL Trees are often used by filters which stores information about remote services, Each filter can have its own URL tree&nbsp;or a URL tree can be shared among multiple filters. This module is implemented by HTUTree.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTUTREE_H #define HTUTREE_H #include "HTReq.h" /* . URL Trees . The three parts of a URL tree are called */ typedef struct _HTUTree HTUTree; typedef struct _HTURealm HTURealm; typedef struct _HTUTemplate HTUTemplate; /* ( Create a URL Tree ) Create a new authentication base Returns new object or NULL if error */ typedef int HTUTree_gc (void * context); extern HTUTree * HTUTree_new (const char * root, const char * host, int port, HTUTree_gc * gc); /* ( Delete a URL Tree ) Delete a complete server tree and everything within it. */ extern BOOL HTUTree_delete (const char * root, const char * host, int port); /* ( Delete ALL URL Trees ) Delete all information bases */ extern BOOL HTUTree_deleteAll (void); /* ( Find a URL Tree ) Find a authentication base. Return NULL if not found */ extern HTUTree * HTUTree_find (const char * root, const char * host, int port); /* . URL Nodes . */ extern void * HTUTree_findNode (HTUTree * tree, const char * realm, const char * path); /* */ extern BOOL HTUTree_addNode (HTUTree * tree, const char * realm, const char * path, void * context); /* */ extern BOOL HTUTree_replaceNode (HTUTree * tree, const char * realm, const char * path, void * context); /* */ extern BOOL HTUTree_deleteNode (HTUTree * tree, const char * realm, const char * path); /* */ #endif /* HTUTREE_H */ /* @(#) $Id: HTUTree.html,v 2.3 2025/05/14 02:11:15 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUU.h���������������������������������������������������������������������������0100644�0000764�0000144�00000001751�07405520456�014715� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww UU ENCODING AND DECODING !Encoding to Printable Characters! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* File module provides functions HTUU_encode() and HTUU_decode() which convert a buffer of bytes to/from RFC 1113 printable encoding format. This technique is similar to the familiar Unix uuencode format in that it maps 6 binary bits to one ASCII character (or more aptly, 3 binary bytes to 4 ASCII characters). However, RFC 1113 does not use the same mapping to printable characters as uuencode. This module is implemented by HTUU.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTUU_H #define HTUU_H extern int HTUU_encode (unsigned char * bufin, unsigned int nbytes, char * bufcoded); extern int HTUU_decode (char * bufcoded, unsigned char * bufplain, int outbufsize); #endif /* @(#) $Id: HTUU.html,v 2.14 2025/05/14 02:11:15 frystyk Exp $ */ �����������������������libwww/Library/src/HTUser.h�������������������������������������������������������������������������0100644�0000764�0000144�00000007537�07405520456�015312� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww User Profile Class ! The User Profile Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The User profile&nbsp;class manages what we know about a user on this host. This can for example be the FQDN of the host, the user's email address, the time zone, the news server etc. Note that this information does not correspond to the actual information for the host but instead represents "the information that the user wants to show the world". The user may use an arbitrary email address to be used in a HTTP request, for example. The application may assign a context to each use which gives the application to extend the use of this class. This module is implemented by HTUser.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTUSER_H #define HTUSER_H typedef struct _HTUserProfile HTUserProfile; /* . Creation and Deletion Methods . The application may create any number of user profile objects. By default the Library creates a generic user which is the default value used to initialize a Request object. This can be replaced by other user profiles at any point in time. ( Create a User Profile ) */ extern HTUserProfile * HTUserProfile_new (const char * name, void * context); /* ( Localize a User Profile ) Localize a user profile by filling in all the information that we can figure out automatically, for example the email address, news server etc. */ extern BOOL HTUserProfile_localize (HTUserProfile * up); /* ( Delete a User Profile ) */ extern BOOL HTUserProfile_delete (HTUserProfile * up); /* . User Profile Class Methods . ( Fully Qualified Domain Name (FQDN) ) The FQDN is a fully qualified domain name in that it contains both a local host name and the domain name. It turns out that this is in fact very difficult to obtain a FQDN on a variety of platforms. */ extern char * HTUserProfile_fqdn (HTUserProfile * up); extern BOOL HTUserProfile_setFqdn (HTUserProfile * up, const char * fqdn); /* ( User Email Address ) This is the email address that the user wants to send out for example as a "password" when using anonymous FTP access and as a "From" field in a HTTP request. */ extern char * HTUserProfile_email (HTUserProfile * up); extern BOOL HTUserProfile_setEmail (HTUserProfile * up, const char * email); /* ( News Server ) Control the news server that this user wishes to use */ extern char * HTUserProfile_news (HTUserProfile * host); extern BOOL HTUserProfile_setNews (HTUserProfile * host, const char * news); /* ( Location of Temporary Files ) Control the location for temporary files for this profile. The format must be in URL format which is different from local file syntax as URL syntaz always uses '/' as delimiters and also encoding of special characters. See the documentation on URLs for more information about URL syntax. */ extern char * HTUserProfile_tmp (HTUserProfile * host); extern BOOL HTUserProfile_setTmp (HTUserProfile * host, const char * tmp); /* ( Local Time Zone (in seconds) ) Another widely used piece information that is very hard toobtain is the local time zone. As we often must convert to and from GMT (Universal Time) we must have the correct time zone. If we for some reason guesses wrong then the user must change it manually. */ extern time_t HTUserProfile_timezone (HTUserProfile * up); extern BOOL HTUserProfile_setTimezone (HTUserProfile * up, time_t timezone); /* ( User Profile Context ) The applicatoin may have additional information that it wishes to assign to a user profile. It can do this using the user context which is handled as follows: */ extern void * HTUserProfile_context (HTUserProfile * up); extern BOOL HTUserProfile_setContext (HTUserProfile * up, void * context); /* */ #endif /* HTUser_H */ /* @(#) $Id: HTUser.html,v 2.4 2025/05/14 02:11:16 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTUtils.h������������������������������������������������������������������������0100644�0000764�0000144�00000025502�07405520456�015464� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Debug Information and General Purpose Macros ! Debug Information and General Purpose Macros ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is a part of the W3C Sample Code Library. See also the system dependent file sysdep module for system specific information. */ #ifndef HTUTILS_H #define HTUTILS_H /* . Destination for User Print Messages . You can send print messages to the user to various destinations depending on the type of your application. By default, on Unix the messages are sent to stdout using fprintf. If we are on MSWindows and have a windows applications then register a HTPrintCallback function. This is done with HTPrint_setCallback. It tells HTPrint to call a HTPrintCallback. If HTDEBUG is not defined then don't do any of the above. */ typedef int HTPrintCallback(const char * fmt, va_list pArgs); extern void HTPrint_setCallback(HTPrintCallback * pCall); extern HTPrintCallback * HTPrint_getCallback(void); extern int HTPrint(const char * fmt, ...); /* . Debug Message Control . This is the global flag for setting the WWWTRACE options. The verbose mode is no longer a simple boolean but a bit field so that it is possible to see parts of the output messages. */ #if defined(NODEBUG) || defined(NDEBUG) || defined(_NDEBUG) #undef HTDEBUG #else #ifndef HTDEBUG #define HTDEBUG 1 #endif /* HTDEBUG */ #endif /* ( C Preprocessor defines ) Make sure that the following macros are defined */ #ifndef __FILE__ #define __FILE__ "" #endif #ifndef __LINE__ #define __LINE__ 0L #endif /* ( Definition of the Global Trace Flag ) The global trace flag variable is available everywhere. */ #ifdef HTDEBUG #ifdef WWW_WIN_DLL extern int * WWW_TraceFlag; /* In DLLs, we need the indirection */ #define WWWTRACE (*WWW_TraceFlag) #else extern unsigned int WWW_TraceFlag; /* Global flag for all W3 trace */ #define WWWTRACE (WWW_TraceFlag) #endif /* WWW_WIN_DLL */ #else #define WWWTRACE 0 #endif /* HTDEBUG */ /* ( Select which Trace Messages to show ) Libwww has a huge set of trace messages and it is therefor a good idea to be able to select which ones to see for any particular trace. An easy way to set this is using the funtion HTSetTraceMessageMask. The WWWTRACE define outputs messages if verbose mode is active according to the following rules: */ typedef enum _HTTraceFlags { SHOW_UTIL_TRACE = 0x1, SHOW_APP_TRACE = 0x2, SHOW_CACHE_TRACE = 0x4, SHOW_SGML_TRACE = 0x8, SHOW_BIND_TRACE = 0x10, SHOW_THREAD_TRACE = 0x20, SHOW_STREAM_TRACE = 0x40, SHOW_PROTOCOL_TRACE = 0x80, SHOW_MEM_TRACE = 0x100, SHOW_URI_TRACE = 0x200, SHOW_AUTH_TRACE = 0x400, SHOW_ANCHOR_TRACE = 0x800, SHOW_PICS_TRACE = 0x1000, SHOW_CORE_TRACE = 0x2000, SHOW_MUX_TRACE = 0x4000, SHOW_SQL_TRACE = 0x8000, SHOW_XML_TRACE = 0x10000, SHOW_ALL_TRACE = (int) 0xFFFFFFFF } HTTraceFlags; /* The flags are made so that they can serve as a group flag for correlated trace messages, e.g. showing messages for SGML and HTML at the same time. */ #define UTIL_TRACE (WWWTRACE & SHOW_UTIL_TRACE) #define APP_TRACE (WWWTRACE & SHOW_APP_TRACE) #define CACHE_TRACE (WWWTRACE & SHOW_CACHE_TRACE) #define SGML_TRACE (WWWTRACE & SHOW_SGML_TRACE) #define BIND_TRACE (WWWTRACE & SHOW_BIND_TRACE) #define THD_TRACE (WWWTRACE & SHOW_THREAD_TRACE) #define STREAM_TRACE (WWWTRACE & SHOW_STREAM_TRACE) #define PROT_TRACE (WWWTRACE & SHOW_PROTOCOL_TRACE) #define MEM_TRACE (WWWTRACE & SHOW_MEM_TRACE) #define URI_TRACE (WWWTRACE & SHOW_URI_TRACE) #define AUTH_TRACE (WWWTRACE & SHOW_AUTH_TRACE) #define ANCH_TRACE (WWWTRACE & SHOW_ANCHOR_TRACE) #define PICS_TRACE (WWWTRACE & SHOW_PICS_TRACE) #define CORE_TRACE (WWWTRACE & SHOW_CORE_TRACE) #define MUX_TRACE (WWWTRACE & SHOW_MUX_TRACE) #define SQL_TRACE (WWWTRACE & SHOW_SQL_TRACE) #define XML_TRACE (WWWTRACE & SHOW_XML_TRACE) #define ALL_TRACE (WWWTRACE & SHOW_ALL_TRACE) /* ( Destination for Trace Messages ) You can send trace messages to various destinations depending on the type of your application. By default, on Unix the messages are sent to stderr using fprintf. If we are on MSWindows and have a windows applications then register a HTTraceCallback function. This is done with HTTrace_setCallback. It tells HTTrace to call a HTTraceCallback. If HTDEBUG is not defined then don't do any of the above. */ typedef int HTTraceCallback(const char * fmt, va_list pArgs); extern void HTTrace_setCallback(HTTraceCallback * pCall); extern HTTraceCallback * HTTrace_getCallback(void); /* The HTTRACE macro uses "_" as parameter separater instead of ",". This enables us to use a single macro instead of a macro for each number of arguments which we consider a more elegant and flexible solution. The implication is, however, that we can't have variables that start or end with an "_" if they are to be used in a trace message. */ #ifdef HTDEBUG #undef _ #define _ , #define HTTRACE(TYPE, FMT) \ do { if (TYPE) HTTrace(FMT); } while (0); extern int HTTrace(const char * fmt, ...); #else #define HTTRACE(TYPE, FMT) /* empty */ #endif /* HTDEBUG */ /* ( Data Trace Logging ) A similar mechanism exists for logging data, except that is adds a data and length argument to the trace call. Again, you can register your own callbacks if need be. */ typedef int HTTraceDataCallback(char * data, size_t len, char * fmt, va_list pArgs); extern void HTTraceData_setCallback(HTTraceDataCallback * pCall); extern HTTraceDataCallback * HTTraceData_getCallback(void); /* Again we use the same macro expansion mechanism as for HTTrace */ #ifdef HTDEBUG #define HTTRACEDATA(DATA, LEN, FMT) HTTraceData((DATA), (LEN), FMT) extern int HTTraceData(char * data, size_t len, char * fmt, ...); #else #define HTTRACEDATA(DATA, LEN, FMT) /* empty */ #endif /* HTDEBUG */ /* ( Debug Breaks ) Call this function and the program halts. We use the same macro expansion mechanism as for HTTrace */ extern void HTDebugBreak(char * file, unsigned long line, const char * fmt, ...); #ifdef HTDEBUG #define HTDEBUGBREAK(FMT) HTDebugBreak(__FILE__, __LINE__, FMT) #else #define HTDEBUGBREAK(FMT) /* empty */ #endif /* HTDEBUG */ /* . Macros for Function Declarations . These function prefixes are used by scripts and other tools and helps figuring out which functions are exported and which are not. See also the libwww style guide. */ #define PUBLIC /* Accessible outside this module */ #define PRIVATE static /* Accessible only within this module */ /* . Often used Interger Macros . ( Min and Max functions ) */ #ifndef HTMIN #define HTMIN(a,b) ((a) <= (b) ? (a) : (b)) #define HTMAX(a,b) ((a) >= (b) ? (a) : (b)) #endif /* ( Double abs function ) */ #ifndef HTDABS #define HTDABS(a) ((a) < 0.0 ? (-(a)) : (a)) #endif /* . Return Codes for Protocol Modules and Streams . Theese are the codes returned from the protocol modules, and the stream modules. Success are (>=0) and failure are (<0) */ #define HT_OK 0 /* Generic success */ #define HT_ALL 1 /* Used by Net Manager */ #define HT_CONTINUE 100 /* Continue an operation */ #define HT_UPGRADE 101 /* Switching protocols */ #define HT_LOADED 200 /* Everything's OK */ #define HT_CREATED 201 /* New object is created */ #define HT_ACCEPTED 202 /* Accepted */ #define HT_NO_DATA 204 /* OK but no data was loaded */ #define HT_RESET_CONTENT 205 /* Reset content */ #define HT_PARTIAL_CONTENT 206 /* Partial Content */ #define HT_MULTIPLE_CHOICES 300 /* Multiple choices */ #define HT_PERM_REDIRECT 301 /* Permanent redirection */ #define HT_FOUND 302 /* Found */ #define HT_SEE_OTHER 303 /* See other */ #define HT_NOT_MODIFIED 304 /* Not Modified */ #define HT_USE_PROXY 305 /* Use Proxy */ #define HT_PROXY_REDIRECT 306 /* Proxy Redirect */ #define HT_TEMP_REDIRECT 307 /* Temporary redirect */ #define HT_IGNORE 900 /* Ignore this in the Net manager */ #define HT_CLOSED 901 /* The socket was closed */ #define HT_PENDING 902 /* Wait for connection */ #define HT_RELOAD 903 /* If we must reload the document */ #define HT_ERROR -1 /* Generic failure */ #define HT_NO_ACCESS -401 /* Unauthorized */ #define HT_FORBIDDEN -403 /* Access forbidden */ #define HT_NOT_FOUND -404 /* Not found */ #define HT_NOT_ACCEPTABLE -406 /* Not Acceptable */ #define HT_NO_PROXY_ACCESS -407 /* Proxy Authentication Failed */ #define HT_CONFLICT -409 /* Conflict */ #define HT_LENGTH_REQUIRED -411 /* Length required */ #define HT_PRECONDITION_FAILED -412 /* Precondition failed */ #define HT_TOO_BIG -413 /* Request entity too large */ #define HT_URI_TOO_BIG -414 /* Request-URI too long */ #define HT_UNSUPPORTED -415 /* Unsupported */ #define HT_BAD_RANGE -416 /* Request Range not satisfiable */ #define HT_EXPECTATION_FAILED -417 /* Expectation Failed */ #define HT_REAUTH -418 /* Reauthentication required */ #define HT_PROXY_REAUTH -419 /* Proxy Reauthentication required */ #define HT_RETRY -503 /* If service isn't available */ #define HT_BAD_VERSION -505 /* Bad protocol version */ #define HT_INTERNAL -900 /* Weird -- should never happen. */ #define HT_WOULD_BLOCK -901 /* If we are in a select */ #define HT_INTERRUPTED -902 /* Note the negative value! */ #define HT_PAUSE -903 /* If we want to pause a stream */ #define HT_RECOVER_PIPE -904 /* Recover pipe line */ #define HT_TIMEOUT -905 /* Connection timeout */ #define HT_NO_HOST -906 /* Can't locate host */ /* . Upper- and Lowercase macros . The problem here is that toupper(x) is not defined officially unless isupper(x) is. These macros are CERTAINLY needed on #if defined(pyr) || define(mips) or BDSI platforms. For safefy, we make them mandatory. */ #ifndef TOLOWER #define TOLOWER(c) tolower((int) (c)) #define TOUPPER(c) toupper((int) (c)) #endif /* . Max and Min values for Integers and Floating Point . */ #ifdef FLT_EPSILON /* The ANSI C way define */ #define HT_EPSILON FLT_EPSILON #else #define HT_EPSILON 0.00000001 #endif /* . The local equivalents of CR and LF . We can check for these after net ascii text has been converted to the local representation. Similarly, we include them in strings to be sent as net ascii after translation. */ #define LF FROMASCII('\012') /* ASCII line feed LOCAL EQUIVALENT */ #define CR FROMASCII('\015') /* Will be converted to ^M for transmission */ /* . Library Dynamic Memory Magement . The Library has it's own dynamic memory API which is declared in memory management module. */ #include "HTMemory.h" /* */ #endif /* HT_UTILS.h */ /* @(#) $Id: HTUtils.html,v 2.92 2025/01/06 10:48:50 kahan Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTWAIS.h�������������������������������������������������������������������������0100644�0000764�0000144�00000002714�07405520456�015127� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww WAIS Gateway ! WAIS Gateway Interface ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module does not actually perform the WAIS protocol directly, but it does using one or more libraries of the freeWAIS distribution. The ui.a library came with the old free WAIS from TMC, the client.a and wais.a libraries are needed from the freeWAIS from CNIDR. If you include this module in the library, you must also o Compile the Library by including the --with-wais directive in the configure script. o Have the WAIS Library available The wais source files are parsed by a separate and independent module, HTWSRC. You can include HTWSRC without including direct wais using this module, and your WWW code will be able to read source files, and access WAIS indexes through a gateway. A WAIS-WWW gateway is just a normal Web server with a libwww compiled with this module. This module is implemented by HTWAIS.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTWAIS_H #define HTWAIS_H #include "HTEvent.h" /* . Control Flags . The number of lines handled from a WAIS search is determined by this variable. The default value is 100 (this is defined in the module) */ extern int HTMaxWAISLines; extern HTProtCallback HTLoadWAIS; /* */ #endif /* @(#) $Id: HTWAIS.html,v 2.27 2025/05/14 02:11:17 frystyk Exp $ */ ����������������������������������������������������libwww/Library/src/HTWSRC.h�������������������������������������������������������������������������0100644�0000764�0000144�00000002031�07405520456�015132� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww WAIS !WAIS Source file parser! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This converter returns a stream object into which a WAIS source file can be written. The result is put via a structured stream into whatever format was required for the output stream. See also: HTWAIS protocol interface module. This module is implemented by HTWSRC.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTWSRC_H #define HTWSRC_H #include "HTFormat.h" extern HTConverter HTWSRCConvert; /* .Escaping Strings. HTDeSlash takes out the invlaid characters in a URL path ELEMENT by converting them into hex-escaped characters. HTEnSlash does the reverse. Each returns a pointer to a newly allocated string which must eventually be freed by the caller. */ extern char * HTDeSlash (const char * str); extern char * HTEnSlash (const char * str); #endif /* @(#) $Id: HTWSRC.html,v 2.18 2025/05/14 02:11:17 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTWWWStr.h�����������������������������������������������������������������������0100644�0000764�0000144�00000014342�07405520456�015541� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww WWW String Utilities ! WWW Related String Management ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is like the generic string utility module but it contains more Web related string utility functions. Examples are functions that return a date string, a Message ID string etc. This module is implemented by HTWWWStr.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTWWWSTR_H #define HTWWWSTR_H #include "HTUser.h" #include "HTAtom.h" /* . MIME Parsing and other String Based Utilities . A bunch of "finding the next whatever" functions. ( Next word or quoted string ) This function returns a RFC822 word separated by space, comma, or semi-colons. pstr points to a string containing a word separated by white white space "," ";" or "=". The word can optionally be quoted using or "" Comments surrrounded by '(' ')' are filtered out. On exit, pstr has been moved to the first delimiter past the field THE STRING HAS BEEN MUTILATED by a 0 terminator. The function returns a pointer to the first word or NULL on error */ extern char * HTNextField (char** pstr); /* ( Next Name-value Pair ) This is the same as HTNextField but it does not look for '=' as a separator so if there is a name-value pair then both parts are returned. Returns a pointer to the first word or NULL on error */ extern char * HTNextPair (char ** pstr); /* ( Next Name-value Parameter ) This is the same as HTNextPair but it does not look for ',' as a separator so if there is a name-value pair then both parts are returned. Returns a pointer to the first word or NULL on error */ extern char * HTNextParam (char ** pstr); /* ( Next LWS Delimited Token ) A simpler version of the above that only looks for linear white space as the delimiter. */ extern char * HTNextLWSToken (char ** pstr); /* ( Find next "/" Delimited Segment ) This is the same as HTNextField but it includes "/" as a delimiter. Returns a pointer to the first segment or NULL on error */ extern char * HTNextSegment (char ** pstr); /* ( Next Comma Separated String (or Element) ) This is the same as HTNextPair but it does not look for anything else than ',' as separator Returns a pointer to the first word or NULL on error */ extern char * HTNextElement (char ** pstr); /* ( Next S-expression ) Find the next s-expression token from a string of characters. We return the name of this expression and the param points to the parameters. Note, that the string has been mutilated by a 0 terminator! */ extern char * HTNextSExp (char ** exp, char ** param); /* . Reading CRLF . The Library provides a default set of read routines that can handle the most common situations. However, before we start we make following definition is to make life easier when having a state machine looking for a <CRLF> sequence. */ typedef enum _HTEOLState { EOL_ERR = -1, EOL_BEGIN = 0, EOL_FCR, EOL_FLF, EOL_DOT, EOL_SCR, EOL_SLF, /* intermediate states */ EOL_END, EOL_FOLD, EOL_LINE } HTEOLState; /* . RFC1123 Date/Time Stamp String . Returns a string containing a date/time stamp string in RFC-1123 format. The string is in static memory so be aware! */ extern const char * HTDateTimeStr (time_t *calendar, BOOL local); /* . Date used for directory listings . Generates a date/time stamp string used in directory listings. There is nothing special about this format, it is just to make directory listings look alike. */ extern BOOL HTDateDirStr (time_t * time, char * str, int len); /* . Parse a Date/Time String . Converts a variety of different string representations of date time stamps in GMT to a local representation of localtime time_t. The local time zone is taken from the user profile information or directly from the system if NULL is passed as user profile . If the time is relative (for example in the Age header) then you can indicate whether it should be expanded to local time or not by using the expand argument. */ extern time_t HTParseTime (const char * str, HTUserProfile * up, BOOL expand); /* . Unique Message-ID String . The message ID string can for example be use as a RFC 822 header. The content is based on the information taken from the user profile which can be supplied by the application. */ extern const char * HTMessageIdStr (HTUserProfile * up); /* . Matching MIME Content-Types . Matches MIME constructions for content-types and others like them, for example "text/html", "text/plain". It can also match wild cards like "text/" and "/. We use instead of * in order note to make C like comments :-) */ extern BOOL HTMIMEMatch (HTAtom * tmplate, HTAtom * actual); /* . Converts an Integer to a String using Prefix . In computer-world 1K is 1024 bytes and 1M is 1024K -- however, sprintf() still formats in base-10. Therefore I output only until 999, and then start using the next unit. This doesn't work wrong, it's just a feature. The conversion is done in "str" which must be large enough to contain the result. */ extern void HTNumToStr (unsigned long n, char *str, int len); /* . Conversion between URLs and Local File Names . These are two functions that separate the URL naming syntax from platform dependent file naming schemes. If you are porting the code to a new platform, you probably have to do some translation here. ( Convert file URLs into a local representation ) The URL has already been translated through the rules in get_physical in HTAccess.c and all we need to do now is to map the path to a local representation, for example if must translate '/' to the ones that turn the wrong way ;-) Returns local file (that must be freed by caller) if OK, else NULL. */ extern char * HTWWWToLocal (const char * url, const char * base, HTUserProfile * up); /* ( Convert a local file name into a URL ) Generates a WWW URL name from a local file name or NULL if error. Returns URL (that must be freed by caller) if OK, else NULL. The access parameter can be used to indicate any special scheme used for local file access. If NULL then "file:" is used. */ extern char * HTLocalToWWW (const char * local, const char * access); /* */ #endif /* @(#) $Id: HTWWWStr.html,v 2.17 2025/03/24 16:26:57 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTWriter.h�����������������������������������������������������������������������0100644�0000764�0000144�00000002202�07405520456�015630� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Unbuffered Socket Writer Stream ! Unbuffered Socket Writer Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Socket Writer Stream is an output stream &nbsp;which knows how to write to a BSD type socket. It is part of the Transport interface and may be registered as part of a Transport Object. The application can&nbsp;initialize this stream together with the HTReader stream, for example. In the default initialization module, you can find the HTTransportInit() function which sets up this stream as a default transport for handling unbuffered socket write operations. See also the buffered writer stream. This module is implemented by HTWriter.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTWRITE_H #define HTWRITE_H #include "HTIOStream.h" /* */ extern HTOutput_new HTWriter_new; extern BOOL HTWriter_set (HTOutputStream * me, HTNet * net, HTChannel * ch, void * param, int mode); /* */ #endif /* @(#) $Id: HTWriter.html,v 2.23 2025/05/14 02:11:18 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTXML.h��������������������������������������������������������������������������0100644�0000764�0000144�00000004775�07405520456�015035� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Expat XML Parser Wrapper ! Expat XML Parser Wrapper ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is implemented by HTXML.c, and is a part of the W3C Sample Code Library. We use James Clark's expat XML parser which is very neat indeed. As the code doesn't come as a separate library, I included it in the libwww CVS code base where I compile is as two libraries: libxmltok.a and libxmlparse.a. See the external modules that libwww works with for details. Thanks so much to John Punin for writing this code! */ #ifndef HTXML_H #define HTXML_H #include "HTFormat.h" #include "HTStream.h" #ifdef HT_STRUCT_XML_STREAM #include "HTStruct.h" #include "SGML.h" #endif /* HT_STRUCT_XML_STREAM */ #include <xmlparse.h> /* . Libwww Stream Converter . This stream is a libwww converter which calls and creates a expat stream instance. In order to tell the application that a new stream instance has been created. */ extern HTConverter HTXML_new; /* . Callback Handler Announcing a new Expat Stream object . When a libwww to expat XML stream converter instance is created, the stream checks to see if there are any callbacks registered which should be notified about the new stream instance. If that is the case then this callback is called and a pointer to the XML parser passed along. The output stream is the target that was originally set for the request object before the request was issued. */ typedef void HTXMLCallback_new ( HTStream * me, HTRequest * request, HTFormat target_format, HTStream * target_stream, XML_Parser xmlparser, void * context); /* ( Register Creation notification Callback ) @@@Should be handled via XML names spaces@@@ */ extern BOOL HTXMLCallback_registerNew (HTXMLCallback_new *, void * context); /* . XML Expat Stream to Libwww Structured Stream . This is a stream that converts from the expat stream to a libwww structured stream. Again, the application can */ #ifdef HT_STRUCT_XML_STREAM extern BOOL HTXMLStructured_setHandlers( HTStream * me, XML_StartElementHandler start, XML_EndElementHandler end, XML_CharacterDataHandler char_data, XML_DefaultHandler def_handler); extern BOOL HTXMLStructured_setUserData (HTStream * me, void * user_data); extern HTStream * HTXMLStructured_new (const SGML_dtd * dtd, HTStructured * starget); #endif /* */ #endif /* @(#) $Id: HTXML.html,v 2.6 2025/08/30 11:36:41 kahan Exp $ */ ���libwww/Library/src/HTXParse.h�����������������������������������������������������������������������0100644�0000764�0000144�00000002613�07405520456�015564� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Callback Stream ! XParse: Module to get Unparsed Stream from libwww ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This version of the stream object is a hook for clients that want an unparsed stream from libwww. The HTXParse_put_* and HTXParse_write routines copy the content of the incoming buffer into a buffer that is realloced whenever necessary. This buffer is handed over to the client in HTXParse_free. See also HTFWriter for writing to C files. ( Bugs: ) o strings written must be less than buffer size. This module is implemented by HTXParse.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTXPARSE_H #define HTXPARSE_H #include "HTStream.h" #include "HTReader.h" #include "HTReq.h" typedef struct _HTXParseStruct HTXParseStruct; typedef void CallClient (HTXParseStruct * me); struct _HTXParseStruct { CallClient *call_client; int used; /* how much of the buffer is being used*/ BOOL finished; /* document loaded? */ int length; /* how long the buffer is */ char * buffer; /* storage in until client takes over */ char * content_type; HTRequest * request; /* the request structure */ }; extern HTConverter HTXParse; #endif /* End of declaration */ ���������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTZip.h��������������������������������������������������������������������������0100644�0000764�0000144�00000001406�07405520456�015123� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww ZLib Compress and Decompress Stream ! ZLib Compress and Decompress Stream ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides an interface to the zlib compress and decompress functions. It can be hooked inas as content encoding coder/decoder in libwww which allows for on-the-fly encoding/decoding. This module is implemented by HTZip.c, and it is a part of the W3C Sample Code Library. */ #ifndef HTZIP_H #define HTZIP_H #include "HTFormat.h" /* */ #ifdef HT_ZLIB extern HTCoder HTZLib_inflate; #endif /* End of definition module */ #endif /* HTZIP_H */ /* @(#) $Id: HTZip.html,v 2.5 2025/05/14 02:11:20 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HText.h��������������������������������������������������������������������������0100644�0000764�0000144�00000015500�07405520456�015161� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Rich Hypertext Object ! HyperText Object Builder ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the interface that &nbsp;you can use to build a parsed HTML object (called an hypertext object) as output of the libwww HTML parser. It is based on callback functions that the application can register as needed in order to get the various events out of the HTML parser. These are the different events that can be registered: o When parsing is about to start or terminate o When a chunk of plain text has been found o When a link has been found in some HTML element o When an HTML element is about to start or end o Handler for unparsed elements o Handler for unparsed entities Building an hypertext object can contain references to stylesheets. Libwww doesn't come with a stylesheet implementation but it does have a generic stylesheet manager which can be used for registering and looking up styles. As an example, you can see how the libwww robot uses the link callout whereas the Line Mode Browser has a complete implementation in the GridText module. */ #ifndef HTEXT_H #define HTEXT_H #include "HTAnchor.h" #include "HTStream.h" /* . The HText Object . The HText object is only known as a name to libwww - it isn't defined or used anywhere as an actual structure. The application can use the HText object to contain the information needed to build a parsed object - a hypertext object - as data arrives from the libwww HTML parser. When a HText object is to be created, this module calls out to any registered creation method and in turn uses the newly created HText object in every subsequent call to any registered callback routine as the HTML stream is parsed. */ typedef struct _HText HText; /* . Callback for Creating and Deleting an HText Object . When an HTML stream is created, the HTML parser checks to see if there are any callbacks registered for handling the HText object. If this is the case then the creation callback is called so that the application can create a new HText object. After that the various callbacks are called (if registered) as text comes in and gets parsed. */ typedef HText * HText_new ( HTRequest * request, HTParentAnchor * anchor, HTStream * output_stream); typedef BOOL HText_delete (HText * me); /* ( Register Creation/Deletion Callbacks ) */ extern BOOL HText_registerCDCallback (HText_new *, HText_delete *); extern BOOL HText_unregisterCDCallback (void); /* . Callback for Start and Terminate Parsing . The call sequence is the following: First HText_build is called with the status of HTEXT_BEGIN, then any combination of other append calls, and at the end HText_build is called with the termination status - if it terminated normally then the status is HTEXT_END, if the download was aborted the status is HTEXT_ABORT. */ typedef enum _HTextStatus { HTEXT_BEGIN, HTEXT_END, HTEXT_ABORT } HTextStatus; typedef void HText_build (HText * text, HTextStatus status); /* ( Register Start/End Callback ) */ extern BOOL HText_registerBuildCallback (HText_build *); extern BOOL HText_unregisterBuildCallback (void); /* . Callback for Handling Chunks of Text . THE STRING IS NOT ZERO-TERMINATED!!! When plain text is found then it can be passed to the application via this function. HTML text is already stripped for unneeded white space whereas literal text isn't. The text is of course to be taken "relative" to which element is is found within - this is not checked by the HTML parser but can be checked by the application by using the Element callback function. */ typedef void HText_addText ( HText * text, const char * buffer, int length); /* ( Register Text Callback ) */ extern BOOL HText_registerTextCallback (HText_addText *); extern BOOL HText_unregisterTextCallback (void); /* . Callback for Handling Hypertext Links . Whenever a link is found in the HTML stream, be it from an anchor element, an inlined image, etc. then it is picked up and this called out to this function with the parameters necessary to be able to see what type of link it is (the element and the name of the attribute where it was found). The element number and attribute number are integers that are defined by the HTML DTD used by the HTMl parser. The present and value arrays contains all the SGML attributes and values found in the element untouched. Again, the array is defined by the HTML DTD used by the HTML parser. */ typedef void HText_foundLink ( HText * text, int element_number, int attribute_number, HTChildAnchor * anchor, const BOOL * present, const char ** value); /* ( Register Link Callback ) */ extern BOOL HText_registerLinkCallback (HText_foundLink *); extern BOOL HText_unregisterLinkCallback (void); /* . Callback for Handling HTML Elements . Whenever an element is found in the HTML stream, be it an IMG element, a BODY element, etc. then it is picked up and this called out to this function with the parameters necessary to be able to see what type of element it is. The element number and attribute number are integers that are defined by the HTML DTD used by the HTMl parser. The present and value arrays contains all the SGML attributes and values found in the element untouched. Again, the array is defined by the HTML DTD used by the HTML parser. */ typedef void HText_beginElement ( HText * text, int element_number, const BOOL * present, const char ** value); typedef void HText_endElement ( HText * text, int element_number); /* ( Register HTML Element Callback ) */ extern BOOL HText_registerElementCallback (HText_beginElement *, HText_endElement *); extern BOOL HText_unregisterElementCallback (void); /* . Callback for Unparsed Elements . Whenever an element is found which is not known by the HTML DTD, then the information is passed to the unparsed element handlers. */ typedef void HText_unparsedBeginElement ( HText * HText, const char * buffer, int length); typedef void HText_unparsedEndElement ( HText * HText, const char * buffer, int length); /* ( Register Unparsed Element Callback ) */ extern BOOL HText_registerUnparsedElementCallback ( HText_unparsedBeginElement *, HText_unparsedEndElement *); extern BOOL HText_unregisterUnparsedElementCallback (void); /* . Callback for Unparsed Entity . Whenever an entity is found which is not known by the HTML DTD, then the information is passed to the default handler. */ typedef void HText_unparsedEntity ( HText * HText, const char * buffer, int length); /* ( Register Unparsed Entity Callback ) */ extern BOOL HText_registerUnparsedEntityCallback (HText_unparsedEntity *); extern BOOL HText_unregisterUnparsedEntityCallback (void); /* */ #endif /* HTEXT_H */ /* @(#) $Id: HText.html,v 2.32 2025/01/06 15:38:48 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/HTextImp.h�����������������������������������������������������������������������0100644�0000764�0000144�00000002704�07405520456�015631� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Internal Hypertext Object ! Internal implementation of Hypertext Object Builder ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* */ #ifndef HTEXTIMP_H #define HTEXTIMP_H #include "HTReq.h" #include "HTAnchor.h" #include "HText.h" /* */ typedef struct _HTextImp HTextImp; extern HTextImp * HTextImp_new ( HTRequest * request, HTParentAnchor *anchor, HTStream * output_stream); extern BOOL HTextImp_delete ( HTextImp * me); extern void HTextImp_build ( HTextImp * text, HTextStatus status); extern void HTextImp_addText ( HTextImp * me, const char * buffer, int length); extern void HTextImp_foundLink ( HTextImp * me, int element_number, int attribute_number, HTChildAnchor * anchor, const BOOL * present, const char ** value); extern void HTextImp_beginElement ( HTextImp * me, int element_number, const BOOL * present, const char ** value); extern void HTextImp_endElement ( HTextImp * me, int element_number); extern void HTextImp_unparsedBeginElement ( HTextImp * me, const char * buffer, int length); extern void HTextImp_unparsedEndElement ( HTextImp * me, const char * buffer, int length); extern void HTextImp_unparsedEntity ( HTextImp * me, const char * buffer, int length); /* */ #endif /* HTEXTIMP_H */ /* @(#) $Id: HTextImp.html,v 2.3 2025/01/06 15:38:48 frystyk Exp $ */ ������������������������������������������������������������libwww/Library/src/SGML.h���������������������������������������������������������������������������0100644�0000764�0000144�00000007016�07405520456�014672� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww SGML Parser ! SGML Parser ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The SGML parser is a state machine. It is called for every character of the input stream. The DTD data structure contains pointers to functions which are called to implement the actual effect of the text read. When these functions are called, the attribute structures pointed to by the DTD are valid, and the function is parsed a pointer to the curent tag structure, and an "element stack" which represents the state of nesting within SGML elements. See also the the generic Stream definition The following aspects are from Dan Connolly's suggestions: Binary search, Strcutured object scheme basically, SGML content enum type. This module is implemented by SGML.c, and it is a part of the W3C Sample Code Library. */ #ifndef SGML_H #define SGML_H #include "HTStream.h" #include "HTStruct.h" /* . SGML Content Types . */ typedef enum _SGMLContent{ SGML_EMPTY, /* no content */ SGML_LITERAL, /* character data. Recognized exact close tag only. Old www server compatibility only! Not SGML */ SGML_CDATA, /* character data. recognize </ only */ SGML_RCDATA, /* replaceable character data. recognize </ and &ref; */ SGML_MIXED, /* elements and parsed character data. recognize all markup */ SGML_ELEMENT /* any data found will be returned as an error*/ } SGMLContent; /* . Attribute Types . Describes the SGML tag attribute */ typedef struct _HTAttr { char * name; /* The (constant) name of the attribute */ /* Could put type info in here */ } HTAttr; extern char * HTAttr_name (HTAttr * attr); /* . Tag Structure Describing SGML Elements . name is the string which comes after the tag opener "<". attributes points to a zero-terminated array of attribute names. litteral determines how the SGML engine parses the charaters within the element. If set, tag openers are ignored except for that which opens a matching closing tag. */ typedef struct _HTTag { char * name; /* The name of the tag */ HTAttr * attributes; /* The list of acceptable attributes */ int number_of_attributes; /* Number of possible attributes */ SGMLContent contents; /* End only on end tag @@ */ } HTTag; extern char * HTTag_name (HTTag * tag); extern SGMLContent HTTag_content (HTTag * tag); extern int HTTag_attributes (HTTag * tag); extern char * HTTag_attributeName (HTTag * tag, int attribute_number); /* . DTD Information . Not the whole DTD, but all this parser uses of it. */ #define MAX_ATTRIBUTES 32 /* Max number of attributes per element */ typedef struct { HTTag * tags; /* Must be in strcmp order by name */ int number_of_tags; const char ** entity_names; /* Must be in strcmp order by name */ int number_of_entities; } SGML_dtd; extern HTTag * SGML_findTag (SGML_dtd * dtd, int element_number); extern char * SGML_findTagName (SGML_dtd * dtd, int element_number); extern SGMLContent SGML_findTagContents (SGML_dtd * dtd, int element_number); extern int SGML_findElementNumber(SGML_dtd *dtd, char *name_element); /* . Create an SGML Parser Instance . Create an SGML parser instance which converts a stream to a structured stream. */ extern HTStream * SGML_new (const SGML_dtd * dtd, HTStructured * target); /* */ #endif /* SGML_H */ /* @(#) $Id: SGML.html,v 2.30 2025/04/02 16:10:36 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWApp.h�������������������������������������������������������������������������0100644�0000764�0000144�00000012134�07405520456�015252� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Application Interface ! Application Interface ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* In addition top the basic W3C Sample Code Library WWWLib interface you may include the other interfaces&nbsp;depending on the needs of your application. However, it is not required and none of the files included below are ever used in the core part of the Library itself. Only if this file is included, the extra modules will get included in the linked object code. It is also possible to include only a subset of the files below if the functionality you are after is covered by them. This interface contains many application specific features including a set of default BEFORE and AFTER filters. */ #ifndef WWWAPP_H #define WWWAPP_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( Event Manager ) The core part of libwww only provides the hooks for the event manager. There is no event loop internal to the core part. Instead the application must provide the event loop in order to use either pseudo threads or real threads. If the application only uses blocking sockets without threads then it is not required to register any event loop at all. We provide a default implementation of an event loop which you can either take or get some ideas from. */ #include "HTEvtLst.h" /* ( Managing the Home Page ) This module provides some "make life easier" functions in order to get the application going. They help you generate the first anchor, also called the home anchor. It also contains a nice set of default WWW addresses. */ #include "HTHome.h" /* ( User Dialogs and Messages ) You can register a set of callback functions to handle user prompting, error messages, confimations etc. Here we give a set of functions that can be used on almost anu thinkable platform. If you want to provide your own platform dependent implementation then fine :-) */ #include "HTDialog.h" /* ( Load, Upload, and Search URLs ) Even though you may use the API for the HTRequest object directly in order to issue a request, you will probably find that in real life it is easier to use a higher level abstraction API. This API is provided by the HTAccess module where you will find all kind of functions for down loading a URL etc. */ #include "HTAccess.h" /* ( Rule File Management ) Another way to initialize applications is to use a rule file, also known as a configuration file. This is for example the case with the W3C httpd and the W3C Line Mode Browser. This module provides basic support for configuration file management and the application can use this is desired. The module is not referred to by the Library. Reading a rule file is implemented as a stream converter so that a rule file can come from anywhere, even across the network! */ #include "HTRules.h" /* ( Proxies and Gateways ) Applications do not have to provide native support for all protocols, they can in many situations rely on the support of proxies and gateways to help doing the job. Proxy servers are often used to carry client requests through a firewall where they can provide services like corporate caching and other network optimizations. Both Proxy servers and gateways can serve as "protocol translators" which can convert a request in the main Web protocol, HTTP, to an equivalent request in another protocol, for example NNTP, FTP, or Gopher. In case a proxy server or a gateway is available to the application, it can therefore by use of HTTP forward all requests to for example a proxy server which then handle the communications with the remote server, for example using FTP about the document and return it to the application (proxy client) using HTTP. */ #include "HTProxy.h" /* ( BEFORE and AFTER Filters ) Before a request has been issued and after it has terminated the application often has to do some action as a result of the request (and of the result of the request). The Client Profile Interface Library provides a set of standard BEFORE and AFTER filters to handle caching, redirection, authentication, logging etc. */ #include "HTFilter.h" /* ( Logging ) Often it is required to log the requests issued to the Library. This can either be the case if the application is a server or it can also be useful in a client application. This module provides a simple logging mechanism which can be enabled if needed. See also the SQL based logging module. */ #include "HTLog.h" /* ( History Management ) Another type of logging is keeping track of which documents a user has visited when browsing along on the Web. The Library history manager provides a basic set of functionality to keep track of a linear history list. */ #include "HTHist.h" /* End of application specific modules */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWApp.html,v 2.21 2025/05/24 19:39:40 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWCache.h�����������������������������������������������������������������������0100644�0000764�0000144�00000003321�07405520456�015533� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Persistent Cache Manager ! Declaration of W3C Sample Code Persistent Cache Manager ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Caching is a required part of any efficient Internet access applications as it saves bandwidth and improves access performance significantly in almost all types of accesses. The Library supports two different types of cache: The memory cache and the file cache. The two types differ in several ways which reflects their two main purposes: The memory cache is for short term storage of graphic objects whereas the file cache is for intermediate term storage of data objects. Often it is desirable to have both a memory and a file version of a cached document, so the two types do not exclude each other. The cache contains details of persietent files which contain the contents of remote documents. The existing cache manager is somewhat naive - especially in its garbage collection but it is just an example of how it can be done. More advanced implementations are welcome! */ #ifndef WWWCACHE_H #define WWWCACHE_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( Caching Manager ) The cache interface defines a persistent cache manager based on accessing files. */ #include "HTCache.h" /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWCache.html,v 2.8 2025/05/04 19:37:47 frystyk Exp $ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWCore.h������������������������������������������������������������������������0100644�0000764�0000144�00000020133�07405520456�015420� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Core Interface ! Declaration of W3C Sample Code Library Core Interface ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the basic include file for the core of the W3C Sample Code Library. The core part of the Library is designed as a set of registration modules with no real functionality in itself. Instead all the functionality comes when the application registeres the modules that provides a desired functionaly, for example accessing HTTP servers or the local file system. The Library has a special include file called WWWApp.h which contains all converters, protocol modules, and a lot of other "sugar" modules that can make the core a very powerful Web interface. You can include this one if the application is to use all the functionality of the Library. */ #ifndef WWWCORE_H #define WWWCORE_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( Generic Libwww Information ) This module contains some generic functions for getting the name and version of libwww. It also contains some global configuration options like if you can access the local file system, for example. */ #include "HTLib.h" /* ( The Request Class ) Libwww is based on a request/response paradigm and the Request class defines "an operation to be performed on a URL". The request object is the main entry point for an application to issue a request to the Library - all operations on a URL must use a Request object. */ #include "HTReq.h" /* ( Request Methods ) This module defines the set of methods that you can perform on a request, for example GET, HEAD, PUT, POST, DELETE, etc. */ #include "HTMethod.h" /* ( The Anchor (URL) Class ) An anchor represents a region of a hypertext document which is linked to another anchor in the same or a different document. Another name for anchors would be URLs as an anchor represents all we know about a URL - including where it points to and who points to it. */ #include "HTAnchor.h" /* ( The Link Class ) A Link represents the link between anchor objects. By keeping the link as a object and not as part of the anchor we are capable of handling link semantics in a much more organized way. For example, we can then search for link types among all the link objects that we have created. */ #include "HTLink.h" /* ( Parsing URLs ) This module contains code to parse URIs for the various components according to the URI syntax */ #include "HTParse.h" /* ( Escaping and Unescaping URLs ) URLs are written only with the graphic printable characters of the US-ASCII coded character set. All other characters must be escaped before they can be used in URLs. This module defines the methods required for escaping and unescaping the URLs. */ #include "HTEscape.h" /* ( URL Trees and Hierarchies ) A URL tree is a data class that can store all the information we know about a URL hierarchy. Typically, a URL hierarchy is what a client sees of a Web server but it can also be the view a server has of itself. A URL tree has the advantage that it can be searched using URLs or using realms. The letter is most useful to "guess" information about a remote URL that we haven't seen before. */ #include "HTUTree.h" /* ( Web Related String Functions ) This module is like the generic string utility module but it contains more Web related string utility functions. Examples are functions that return a date string, a Message ID string etc. */ #include "HTWWWStr.h" /* ( The User Profile Class ) The User profile&nbsp;class manages what we know about a user on this host. This can for example be the FQDN of the host, the user's email address, the time zone, the news server etc. */ #include "HTUser.h" /* ( The Event Class ) The Event Class defines any event manager to be used by libwww for handling events. */ #include "HTEvent.h" /* ( The Network Trace Handler ) The Network Trace Handler provides an easy mechanism for tracing memory problems. It gives a complete dump of all read and written information to and from the network */ #include "HTMemLog.h" /* ( The Error Class ) The Error class provides an easy API for registering errors ocurring while the Library serves a request. All errors are registered in an "error stack"&nbsp;in the Request object which allows for nested errors. */ #include "HTError.h" /* ( The Alert Class ) The Alert class defines a set of methods to be used by libwww to be used for passing prompts and message to a user. */ #include "HTAlert.h" /* ( The Format Manager ) The Format Manager is responsible for setting up the stream pipe from the Channel Object to the Request Object when data is arriving, for example as a response to s HTTP Get request. The Format Manager is also responsible for keeping track of the "preferences" of the application and/or user. It is an integral part of the Web and HTTP, that the client application can express its preferences as a set of "accept" headers in a HTTP request. */ #include "HTFormat.h" /* ( The Generic Stream Class ) The Stream class defines objects which accepts a sequence of characters. Streams may also have an output in which case multiple stream objects can be cascaded to build a stream pipe where the output of a stream is directed into the input of the next stream object "down the line". */ #include "HTStream.h" /* ( The Structured Stream Class ) The Structured stream class defines objects which accepts a structured sequence of characters for eaxmple a SGML document. I'll rephrase that. A structured object is am ordered tree-structured arrangement of data which is representable as text. An example is the SGML parser which outputs to a Structured Object. */ #include "HTStruct.h" /* ( No Free Stream ) This stream is a throughline for all methods except FREE and ABORT. This means that it can be use to put ahead of streams that you don't want to be freed or aborted until you are redy to do it yourself. */ #include "HTNoFree.h" /* ( The Input/output Stream Classes ) The I/O Stream class defines objects which accepts a sequence of characters to and from a transport */ #include "HTIOStream.h" /* ( The DNS Class ) The DNS Class defines generic access to &nbsp;the DNS system. It maintains a cache of all visited hosts so that subsequent connects to the same host doesn't imply a new request to the DNS every time. */ #include "HTDNS.h" /* ( The Host Class ) The Host class manages what we know about a remote host. This can for example be what type of host it is, and what version it is using. */ #include "HTHost.h" /* ( The Net Class ) The Net class manages information related to a "thread" in libwww. As libwww threads are not really threads but a notion of using interleaved, non-blocking I/O for accessing data objects from the network (or local file system), they can be used on any platform with or without support for native threads. */ #include "HTNet.h" /* ( Internet Functions ) This module has the common code for handling typical Internet functions like getting the name of the local host, getting the domain name and email address of user etc. */ #include "HTInet.h" /* ( The Transport Class ) The Transport Class defines a transport as used by the HTChannel class to communicate with the network, the local file system etc. New transport objects may be registered at any time. This allows the application to easily hook in its own transport layers. */ #include "HTTrans.h" /* ( The Protocol Class ) The Protocol class defines an application level protocol (HTTP, FTP, Gopher, etc.) to be used by libwww. Please note that access to the local file system also is considered to be an appliaction level protocol treated identically to for example the HTTP protocol. */ #include "HTProt.h" /* End of Core modules */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWCore.html,v 2.21 2025/02/07 18:31:24 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWDir.h�������������������������������������������������������������������������0100644�0000764�0000144�00000004311�07405520456�015246� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Directory Listings ! Declaration of W3C Sample Code Directory Listings ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the include file for the directory handling modules for parsing and presenting directory listings - often in the form of a HTML document. */ #ifndef WWWDIR_H #define WWWDIR_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( Directory listings ) The directory manager generates directory listings for FTP and HTTP requests. This module contains the protocol independent code and it produces the HTML object. It is only included if either the FTP or the File module is included. */ #include "HTDir.h" /* ( Icons ) No directory listings without icons! The WWWDir interface contains support for including references (URLs and ALT text tags) to icons in directory listings. The icons are selected as a function of the media type and the content encoding of the file in question. That is - you can set up icons for compressed files, postscript files etc. There is also a small set of specific icons representing directories etc. Note: Icons are not set up by default! You must enable them yourself. The Library distribution contains a small set of default icons which you can find at $(datadir)/www-icons, and they can be set up using the HTIconInit() initialization function in the WWWInit startup interface */ #include "HTIcons.h" /* ( File Descriptions ) Descriptions appearing in directory listings are produced by this module. This may be overridden by another module for those who which descriptions to come from somewhere else. It's only HTTP directory listings that contain a description field (if enabled by the Directory browsing module. */ #include "HTDescpt.h" /* End of DIR module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWDir.html,v 2.10 2025/05/04 19:37:48 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWFTP.h�������������������������������������������������������������������������0100644�0000764�0000144�00000002213�07405520456�015160� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww FTP CLIENT ! Declaration of W3C Sample Code FTP MODULE ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the include file for the basic FTP module that can be used together with the core of the W3C Sample Code Library. It contains all FTP specific modules which are required to compile and build the FTP DLL. */ #ifndef WWWFTP_H #define WWWFTP_H /* */ #ifdef __cplusplus extern "C" { #endif /* . System dependencies . The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* . Library Includes . ( The main FTP state machine ) */ #include "HTFTP.h" /* FTP client state machine */ /* ( The FTP Directory listing Management ) */ #include "HTFTPDir.h" /* Streams for parsing FTP output */ /* End of FTP module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWFTP.html,v 2.7 2025/05/04 19:37:49 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWFile.h������������������������������������������������������������������������0100644�0000764�0000144�00000005237�07405520456�015417� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Local File Access ! Declaration of W3C Sample Code Local File Access ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the module for accessing local files and directories. The module contans */ #ifndef WWWFILE_H #define WWWFILE_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( Access the Local File System ) The WWWFile interface provides a platform independent access scheme for local files. The local file access works exactly like any other access scheme, for example HTTP, in that the "file protocol" is independent of the underlying transport. This can be used to for example slide in a CVS transport layser underneath the file module without making any modifications to the file module itself. You can read more about the transport managament in the Transport Interface. */ #include "HTFile.h" /* ( Content Negotiation ) When accessing the local file system, you can enable content negotiation as described in the HTTP specification. &nbsp;The content negotiation algorithm is based on file suffixes as defined by the Bind manager. When looking for a file you do not have to specify a suffix. Instead this module looks for all alternatives with the same main name. For example, looking for the file Overview can result in any of the files (or directories) Overview.txt, Overview.html, Overview.ps etc. The selection algorithm is based on the values of the preferences for language, media type, encoding, etc. - exactly like a server would do with the accept headers. */ #include "HTMulti.h" /* ( File Suffix Binding ) This module sets up the binding between a file suffix and a media type, language, encoding etc. In a client application the suffixes are used in protocols that does not directly support media types etc., like FTP, and in server applications they are used to make the bindings between the server and the local file store that the server can serve to the rest of the world (well almost) */ #include "HTBind.h" /* . Default File Suffix Bindings . Register the default set of bindings between file suffixes and media types. This is used for example to guess the media type of a FTP URL of a local file URL. */ #include "HTBInit.h" /* End of FILE module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWFile.html,v 2.11 2025/07/04 15:08:14 kahan Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWGophe.h�����������������������������������������������������������������������0100644�0000764�0000144�00000002033�07405520456�015571� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww GOPHER CLIENT !Declaration of W3C Sample Code GOPHER MODULE! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the include file for the basic GOPHER module that can be used together with the core of the W3C Sample Code Library. It contains all GOPHER specific modules which are required to compile and build the GOPHER DLL. */ #ifndef WWWGOPHER_H #define WWWGOPHER_H /* */ #ifdef __cplusplus extern "C" { #endif /* .System dependencies. The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* .Library Includes. */ #include "HTGopher.h" /* GOPHER client state machine */ /* End of GOPHER module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWGophe.html,v 2.6 2025/05/04 19:37:50 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWHTML.h������������������������������������������������������������������������0100644�0000764�0000144�00000002165�07405520456�015301� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTML PARSER ! Declaration of W3C Sample Code HTML MODULE ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the include file for the basic HTML module that can be used together with libwww. It contains all HTML specific modules which are required to compile and use the default libwww HTML parser */ #ifndef WWWHTML_H #define WWWHTML_H /* */ #ifdef __cplusplus extern "C" { #endif /* . System dependencies . The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* . Library Includes . */ #include "HTMLPDTD.h" #include "SGML.h" #include "HTMLGen.h" #include "HTTeXGen.h" #include "HTPlain.h" #include "HTML.h" #include "HText.h" #include "HTHInit.h" #include "HTStyle.h" /* End of HTML module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWHTML.html,v 2.11 2025/02/22 23:29:45 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWHTTP.h������������������������������������������������������������������������0100644�0000764�0000144�00000007237�07405520456�015321� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww HTTP Client/Server Module ! Declaration of W3C Sample Code HTTP Module ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the include file for all HTTP access including the server side and the client side. It can be used together with the core of the W3C Sample Code Library. It contains all HTTP specific modules which are required to compile and build the HTTP DLL. */ #ifndef WWWHTTP_H #define WWWHTTP_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( Basic HTTP definitions and utilities ) A small set of very basic HTTP stuff */ #include "HTTPUtil.h" /* ( HTTP Client State Machine ) The client statue machine handles the client side of HTTP generating requests and parsing responses. */ #include "HTTP.h" /* ( HTTP Server State Machine ) The HTTP module also contains a very simple server module which can be used for experimenting but which is not a full blown server. */ #include "HTTPServ.h" /* HTTP server state machine */ /* ( General HTTP Header Stream ) The HTTP Request stream generates a HTTP request header and writes it to the target which is normally a HTWriter stream. */ #include "HTTPGen.h" /* ( Client-side Request Generator Stream ) The HTTP Request stream generates a HTTP request header and writes it to the target which is normally a HTWriter stream. */ #include "HTTPReq.h" /* ( Server-side Response Generator Stream ) The HTTP response stream generates a HTTP response header and writes it to the target which is normally a HTWriter stream. */ #include "HTTPRes.h" /* ( Chunked Encoding and Decoding ) Chunked transfer encoding and decoding is new in HTTP/1.1. It allows applications to use persistent connections while not knowing the content length a priori to the response header is generated. */ #include "HTTChunk.h" /* ( HTTP Extensions ) The PEP Manager is a registry for PEP Protocols that follow the generic syntax defined by the HTTP PEP protocol headers. All PEP Protocols are registered at run-time in form of a PEP Module. A PEP Module consists of the following: */ #include "HTPEP.h" /* ( Generic Authentication ) The Authentication Manager is a registry for Authentication Schemes that follow the generic syntax defined by the HTTP WWW-authenticate and Authorization headers. Currently, the only scheme defined is Basic Authentication, but Digest Authentication will soon follow. All Authentication Schemes are registered at run-time in form of an Authentication Module. An Authentication Module consists of the following: */ #include "HTAAUtil.h" /* ( Client Side Authentication ) Contains code for parsing challenges and creating credentials for basic and digest authentication schemes. See also the HTAAUtil module for how to handle other authentication schemes. */ #include "HTAABrow.h" /* ( HTTP Cookies ) The cookie module provides a simple HTTP Cookie handling mechanism. It really also is an excersize in showing how libwww can be extended with something like cookies in a modular manner. An important thing to note about this implementation is that it does not provide storage for cookies - this is left to the application as normally cookies have to be kept under lock. */ #include "HTCookie.h" /* End of HTTP module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWHTTP.html,v 2.14 2025/03/24 16:28:16 frystyk Exp $ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWInit.h������������������������������������������������������������������������0100644�0000764�0000144�00000003762�07405520456�015444� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Default Initialization ! Default Initialization Modules and Profiles ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* As mentioned in the Library Architecture, libwww consists of a small core and a large set of hooks for adding functionality. By itself, the core it not capable of performing any Web related tasks like accessing a HTTP server or parsing a HTML document. All this functionality must be registered by the application. This way, the core of libwww is kept application independent and can be used as the basic building block for any kind of Web application. The Library comes with a large set of default functions, for example for accessing HTTP and FTP servers, parsing MIME headers etc. This module helps the application programmer setting up all this functionality, but it is important to note that none of it is required in order to use libwww. */ #ifndef WWWINIT_H #define WWWINIT_H /* */ #ifdef __cplusplus extern "C" { #endif /* . Default Protocols, Transports, MIME Headers, Dialogs etc. . This module contains a large set of default initialization functions for protocol modules, stream converters, event managers etc. */ #include "HTInit.h" /* . Application Profiles . Application profiles are initialization functions that are "preset" to initialize the Library with the set of features often used in clients, servers, robots, and proxy servers. They are basically collections of the more detailed initialization functions that you can find later in this interface description. In many cases you do not need to use anything else than the profiles, but if you have more specific requirements then you can always fall back on using the initialization functions below or even werite your own extensions. */ #include "HTProfil.h" /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWInit.html,v 2.11 2025/03/30 22:31:58 frystyk Exp $ */ ��������������libwww/Library/src/WWWLib.h�������������������������������������������������������������������������0100644�0000764�0000144�00000003653�07405520456�015246� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Basic libwww Interface ! Basic Libwww Interface ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the basic include files and the core include files necessary in order to use the W3C Sample Code Library. It contains all core specific modules which are required to compile and build the Library. No converter streams or protocol modules are included in this file as they are for the application to set up. The Library has a special include file called WWWApp.h which contains all converters and protocol modules known to the Library. You can include this one if the application is to use all the functionality of the Library. */ #ifndef WWWLIB_H #define WWWLIB_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* . General Utilities . The Basic Utility interface is mostly container modules, dynamic strings and other stuff that you can't live without when building applications. The modules are used by the core part of the W3C Sample Code Library but can also be used by the application. */ #include "WWWUtil.h" /* . Core Modules . This is the basic include file for the core of the W3C Sample Code Library. The core part of the Library is designed as a set of registration modules with no real functionality in itself. Instead all the functionality comes when the application registeres the modules that provides a desired functionaly, for example accessing HTTP servers or the local file system. */ #include "WWWCore.h" /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWLib.html,v 2.29 2025/05/04 19:37:52 frystyk Exp $ */ �������������������������������������������������������������������������������������libwww/Library/src/WWWMIME.h������������������������������������������������������������������������0100644�0000764�0000144�00000006122�07405520456�015261� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MIME and RFC822 ! Declaration of W3C Sample Code MIME and RFC822 ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the module for basic RFC822/MIME parsing that can be used together with the core of the W3C Sample Code Library. It contains all MIME specific modules which are required to compile and build the MIME DLL. */ #ifndef WWWMIME_H #define WWWMIME_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( MIME Entity Header Parsing ) The libwww MIME parsers are completely generic in that they don't know about any particular headers - they are all registered at run-time by the application. There are two parsers: the first is for parsing MIME headers and the second is for parsing MIME footers. They are both converters that can be set up using the HTConverterInit function in the libwww setup module There is also a default set of the headers defined by the HTTP/1.1 specification which can be initialized using the HTMIMEInit() function in the libwww setup module. */ #include "HTMIME.h" /* Generic MIME parser */ #include "HTHeader.h" /* Header parser registration */ /* ( MIME Entity Header Generation ) When sending a MIME entity along with a request, for example using NNTP or HTTP, the entity headers are generated by the MIME generator stream. This stream will be added to the output stream pipe in order to decorate the outgoing request. */ #include "HTMIMERq.h" /* MIME request generator */ /* ( Default MIME Header Parsers ) The Library's MIME parser is divided into two parts: A generic MIME parser that knows how to unwrap all RFC822 headers and specialized header parsers that knows how to parse Content-Length, for example. This is the default set of the specialized MIME header parsers that can be registered as part of the generic MIME. Note that these functions are not registered by default - they must be registered by the application. This can be done using the HTMIMEInit() function in the WWWInit interface. Of course this can also be used to register new headers that are not represented below - or if you want to replace a default parser then this is also very easy. */ #include "HTMIMImp.h" /* ( Multipart MIME Parsing and Generation ) Libwww supports MIME multipart generation and parsing using two streams. The parser stream is a converter that can be setup for"converting" the MIME body parts into separate documents. The MIME multipart stream parser can be set up by using the HTConverterInit function in the libwww setup module. */ #include "HTBound.h" /* Multipart MIME parser */ #include "HTMulpar.h" /* Multipart MIME generator stream */ /* End of MIME modules */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWMIME.html,v 2.11 2025/05/14 02:11:22 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWMux.h�������������������������������������������������������������������������0100644�0000764�0000144�00000001426�07405520456�015305� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww MUX Transport ! Declaration of W3C Sample Code Library MUX Transport ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* */ #ifndef WWWMUX_H #define WWWMUX_H /* */ #ifdef __cplusplus extern "C" { #endif /* . System dependencies . The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* */ #include "HTMuxCh.h" #include "HTMuxTx.h" #include "HTDemux.h" /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWMux.html,v 2.4 2025/07/22 19:25:52 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWNews.h������������������������������������������������������������������������0100644�0000764�0000144�00000003330�07405520456�015444� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww News/NNTP Client ! Declaration of W3C Sample Code News/NNTP Client ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This application interface defines a News client which &nbsp;can be used together with the Library core.The module itself is not part of the Library core. It may be registered by the application if wanted. The application may also use the application profiles to initialize this module. */ #ifndef WWWNEWS_H #define WWWNEWS_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( NNTP Protocol State machine ) The state machine handles requests and responses to an NNTP server according to the NNTP specifications. */ #include "HTNews.h" /* ( News Request Stream ) The request stream generates a request which may or may not include a message body to be posted to the server */ #include "HTNewsRq.h" /* ( News Response Stream for Messages and group Listings ) The News response streams parses the output from an NNTP server. The two formats understood are News groups and News articles. */ #include "HTNewsLs.h" /* ( Presentation of News Listings in HTML ) When the output has been received then we convert it to HTML by parsing it through the following stream. */ #include "HTNDir.h" /* End of News module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWNews.html,v 2.7 2025/05/04 19:37:55 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWSQL.h�������������������������������������������������������������������������0100644�0000764�0000144�00000003170�07405520456�015171� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww SQL Interface ! W3C Sample Code Library libwww SQL Interface ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module is an easy to use interface to SQL databases. It contains both a generic interface and some specific examples of how this can be used to connect a Web client to an SQL server. This requires that you have linked against the MySQL library. See the installation instructions for details. */ #ifndef WWWSQL_H #define WWWSQL_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( Basic SQL Interface ) This module interacts with the MYSQL C client library to perform SQL operations. It is not intended as a complete SQL API but handles most of the typical error situations talking to an SQL server so that the caller doesn't have to think about it. */ #ifdef HT_MYSQL #include "HTSQL.h" #endif /* ( SQL Client Side Logging ) This SQL based log class generates a SQL database and a set of tables storing the results of a request. The result is stored in different tables depending on whether it is information about the request or the resource returned. */ #ifdef HT_MYSQL #include "HTSQLLog.h" #endif /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* WWWSQL_H */ /* @(#) $Id: WWWSQL.html,v 2.1 2025/05/24 19:39:40 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWStream.h����������������������������������������������������������������������0100644�0000764�0000144�00000007155�07405520456�015774� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Streams ! Declaration of W3C Sample Code Library Streams ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The stream part of the Library is a set of streams that can be used in many contexts throughout the Library. It also contains conversions between streams and other memory containers, for example Chunks. */ #ifndef WWWSTREAM_H #define WWWSTREAM_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( Content Length Counter ) This stream also buffers the result to find out the content length. If a maximum buffer limit is reached Content-Length is calculated for logs but it is not sent to the client -- rather the buffer is flushed right away. */ #include "HTConLen.h" /* Content Length Counter */ /* ( File Writer Streams ) This module contains a set of basic file writer streams that are used to dump data objects to disk at various places within the Library core. Most notably, we use these streams in the Format Manager in order to handle external presenters, for example post script viewers etc. These streams can of course also be used in other contexts by the application. */ #include "HTFWrite.h" #include "HTFSave.h" /* ( Content Guess Stream ) This interface provides functionality for guessing unknown media types from magic words. The stream is a one that reads first a chunk of stuff, tries to figure out the format, and calls HTStreamStack(). This is a kind of lazy-evaluation of HTStreamStack(). This could be extended arbitrarily to recognize all the possible file formats in the world, if someone only had time to do it. */ #include "HTGuess.h" /* Guess stream */ /* ( Tee Stream ) The Tee stream just writes everything you put into it into two oter streams. One use (the only use?!) is for taking a cached copey on disk while loading the main copy, without having to wait for the disk copy to be finished and reread it. */ #include "HTTee.h" /* ( Merge Stream ) The Merge stream can be used to merge multiple streams into a single target stream. The Merge stream does not prevent any of the streams from writing and no ordering is imposed. The main feature is basically that the free and abort methods can be called n times where n equals the number of feeds that put data to the stream. */ #include "HTMerge.h" /* ( Stream to Chunk Conversion ) If you do not like the stream model in libwww, then you can use this stream to convert a stream object into a Chunk object which is a dynamic character string buffer in memory. */ #include "HTSChunk.h" /* ( Stream to Memory Object Conversion ) This version of the stream object is a hook for clients that want an unparsed stream from libwww. The HTXParse_put_* and HTXParse_write routines copy the content of the incoming buffer into a buffer that is realloced whenever necessary. This buffer is handed over to the client in HTXParse_free. */ #include "HTXParse.h" /* External parse stream */ #include "HTEPtoCl.h" /* Client callbacks */ /* ( Network Telnet To Internal Character Text ) This is a filter stream suitable for taking text from a socket and passing it into a stream which expects text in the local C representation. */ #include "HTNetTxt.h" /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWStream.html,v 2.10 2025/02/14 04:00:10 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWTelnt.h�����������������������������������������������������������������������0100644�0000764�0000144�00000002177�07405520456�015626� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww TELNET, RLOGIN, AND TN3270 CLIENTS !Declaration of W3C Sample Code Telnet, rlogin, and TN3270 MODULE! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the include file for the basic Telnet, rlogin, and TN3270 module that can be used together with the core of the W3C Sample Code Library. It contains all Telnet, rlogin, and TN3270 specific modules which are required to compile and build the Telnet, rlogin, and TN3270 DLL. */ #ifndef WWWTELNET_H #define WWWTELNET_H /* */ #ifdef __cplusplus extern "C" { #endif /* .System dependencies. The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* .Library Includes. */ #include "HTTelnet.h" /* TELNET client state machine */ /* End of TELNET module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWTelnt.html,v 2.6 2025/05/04 19:37:56 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWTrans.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001763�07405520456�015627� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Transports ! Declaration of W3C Sample Code Library Transports ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* */ #ifndef WWWTRANS_H #define WWWTRANS_H /* */ #ifdef __cplusplus extern "C" { #endif /* . System dependencies . The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* . Transport Modules . These are the transports describing this interface ( Local File Transport ) */ #include "HTANSI.h" #include "HTLocal.h" /* ( BSD Socket Transport ) */ #include "HTTCP.h" #include "HTSocket.h" #include "HTReader.h" #include "HTWriter.h" #include "HTBufWrt.h" /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWTrans.html,v 2.5 2025/05/04 19:37:57 frystyk Exp $ */ �������������libwww/Library/src/WWWUtil.h������������������������������������������������������������������������0100644�0000764�0000144�00000007007�07405520456�015452� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww Basic Utilities ! Declaration of W3C Sample Code Library Basic Utilities ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Basic Utility modules are mostly container modules, dynamic strings and other stuff that you can't live without when building applications. The modules are used by the core part of the W3C Sample Code Library but can also be used by the application. See also the main Library include file called WWWLib.h which contains all converters and protocol modules known to the Library. You can include this one if the application is to use all the functionality of the Library. */ #ifndef WWWUTIL_H #define WWWUTIL_H /* */ #ifdef __cplusplus extern "C" { #endif /* . System dependencies . The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* . Library Includes . ( Basic Macros etc ) This module includes file contains things we need everywhere, generally macros for declarations, booleans, etc. */ #include "HTUtils.h" /* ( Dynamic Arrays ) This module implements a flexible array of pointers. It is a general utility module. An array is a structure which may be extended. These routines create and append data to arrays, automatically reallocating them as necessary. It is garanteed that the last entry in an array is NULL */ #include "HTArray.h" /* ( Association Lists ) This is a small module build on top of the HTList module that provides a way to store Name-Value pairs in an easy way. */ #include "HTAssoc.h" /* ( Atoms ) Atoms are strings which are given representative pointer values so that they can be stored more efficiently, and comparisons for equality done more efficiently. The pointer values are in fact entries into a hash table. */ #include "HTAtom.h" /* ( Dynamic Strings ) A Chunk is a block wise expandable array of type (char *) and is a sort of apology for real strings in C. Chunks make it easier to handle dynamic strings of unknown size. It is often faster than using the String Copy Routines. */ #include "HTChunk.h" /* ( Linked Lists ) This module provides the functionality for managing a generic list of data objects. The module is implemented as a single linked list using the scheme first in - last out (FILO). */ #include "HTList.h" /* ( Dymamic Memory Management ) This module defines any memory handler to be used by libwww for allocating and de-allocating dynamic memory. As dynamic memory may be a scarce resource, it is required that an application can handle memory exhaustion gracefully. */ #include "HTMemory.h" /* ( String Utilities ) Routines for dynamic arrays of characters include string copy, case insensitive comparison etc. */ #include "HTString.h" /* ( UU encode and decode ) File module provides functions functions for uuencode and decode strings which convert a buffer of bytes to/from RFC 1113 printable encoding format. This technique is similar to the familiar Unix uuencode format in that it maps 6 binary bits to one ASCII character (or more aptly, 3 binary bytes to 4 ASCII characters). However, RFC 1113 does not use the same mapping to printable characters as uuencode. */ #include "HTUU.h" /* End of utility modules */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWUtil.html,v 2.12 2025/05/04 19:37:57 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWWAIS.h������������������������������������������������������������������������0100644�0000764�0000144�00000002023�07405520456�015271� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww WAIS CLIENT ! Declaration of W3C Sample Code WAIS MODULE ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the include file for the basic WAIS module that can be used together with the core of the W3C Sample Code Library. It contains all WAIS specific modules which are required to compile and build the WAIS DLL. */ #ifndef WWWWAIS_H #define WWWWAIS_H /* */ #ifdef __cplusplus extern "C" { #endif /* . System dependencies . The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* . Library Includes . */ #include "HTWAIS.h" /* WAIS client state machine */ /* End of WAIS module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWWAIS.html,v 2.8 2025/05/04 19:37:58 frystyk Exp $ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWXML.h�������������������������������������������������������������������������0100644�0000764�0000144�00000002540�07405520456�015172� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww XML/RDF Module ! Declaration of W3C Sample Code XML/RDF Module ! */ /* ** (c) COPYRIGHT MIT 1999. ** Please first read the full copyright statement in the file COPYRIGH. */ /* Thanks so much to John Punin for writing this code! We use James Clark's expat XML parser which is very neat indeed. As the code doesn't come as a separate library, I included it in the libwww CVS code base where I compile is as two libraries: libxmltok.a and libxmlparse.a. See the external modules that libwww works with for details. */ #ifndef WWWXML_H #define WWWXML_H /* */ #ifdef __cplusplus extern "C" { #endif /* . System dependencies . The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( The Libwww Expat Wrapper Stream ) */ #ifdef HT_EXPAT #include "HTXML.h" #endif /* HT_EXPAT */ /* ( The RDF Parser Using The XML Parser ) This RDF parser is based on Janne Saarela's Java based SiRPAC and James Clark's expat XML parser */ #ifdef HT_EXPAT #include "HTRDF.h" #endif /* HT_EXPAT */ /* End of XML module */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWXML.html,v 2.3 2025/04/18 20:24:41 frystyk Exp $ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/WWWZip.h�������������������������������������������������������������������������0100644�0000764�0000144�00000002006�07405520456�015271� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* W3C Sample Code Library libwww ZLib Streams ! W3C Sample Code Library libwww ZLib Streams ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The stream part of the Library is a set of streams that can be used to encode/decode, or compress/decompress content. Many of the streams are based on zlib which is a freely available compression library. */ #ifndef WWWZIP_H #define WWWZIP_H /* */ #ifdef __cplusplus extern "C" { #endif /* ( System dependencies ) The wwwsys.h file includes system-specific include files and flags for I/O to network and disk. The only reason for this file is that the Internet world is more complicated than Posix and ANSI. */ #include "wwwsys.h" /* ( GZip Compression / Decompression ) This stream can encode / decode gzipped content. */ #include "HTZip.h" /* */ #ifdef __cplusplus } /* end extern C definitions */ #endif #endif /* @(#) $Id: WWWZip.html,v 2.5 2025/05/24 19:39:40 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/Makefile.in����������������������������������������������������������������������0100644�0000764�0000144�00000072475�07405520525�016034� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ subdirs = @subdirs@ LDFLAGS = -version-info "1:0:1" lib_LTLIBRARIES = libwwwutils.la libwwwcore.la libwwwtrans.la libwwwstream.la libwwwcache.la libwwwdir.la libwwwfile.la libwwwftp.la libwwwgopher.la libwwwmime.la libwwwhttp.la libwwwnews.la libwwwtelnet.la libwwwhtml.la libwwwapp.la libwwwinit.la libwwwmux.la @WWWXML@ @WWWZIP@ @WWWWAIS@ @WWWSQL@ EXTRA_LTLIBRARIES = libwwwxml.la libwwwzip.la libwwwwais.la libwwwsql.la SUBDIRS = SSL windows vms # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .txt icondir = @icondir@ CPPFLAGS := $(CPPFLAGS) -DW3C_ICONS=\"$(icondir)\" libwwwutils_la_SOURCES = WWWUtil.h HTArray.h HTArray.c HTAssoc.h HTAssoc.c HTAtom.h HTAtom.c HTBTree.h HTBTree.c HTChunk.h HTChunk.c HTHash.h HTHash.c HTList.h HTList.c HTMemory.h HTMemory.c HTString.h HTString.c HTTrace.c HTUtils.h HTUU.h HTUU.c libwwwcore_la_SOURCES = WWWCore.h HTAlert.h HTAlert.c HTAncMan.h HTAnchor.c HTAnchor.h HTChannl.h HTChannl.c HTDNS.h HTDNS.c HTError.h HTError.c HTEscape.h HTEscape.c HTEvent.h HTEvent.c HTFormat.c HTFormat.h HTHost.h HTHstMan.h HTHost.c HTInet.h HTInet.c HTLib.h HTLib.c HTLink.h HTLink.c HTMemLog.h HTMemLog.c HTMethod.h HTMethod.c HTNet.h HTNetMan.h HTNet.c HTNoFree.h HTNoFree.c HTParse.h HTParse.c HTProt.h HTProt.c HTReq.h HTReqMan.h HTReqMan.c HTResponse.h HTResMan.h HTResponse.c HTStream.h HTIOStream.h HTStream.c HTStruct.h HTTCP.h HTTCP.c HTTimer.h HTTimer.c HTTrans.h HTTrans.c HTUTree.h HTUTree.c HTUser.h HTUser.c HTWWWStr.h HTWWWStr.c libwwwtrans_la_SOURCES = WWWTrans.h HTANSI.h HTANSI.c HTBufWrt.h HTBufWrt.c HTLocal.h HTLocal.c HTReader.h HTReader.c HTSocket.h HTSocket.c HTWriter.h HTWriter.c libwwwstream_la_SOURCES = WWWStream.h HTConLen.h HTConLen.c HTEPtoCl.h HTEPtoCl.c HTFSave.h HTFSave.c HTFWrite.h HTFWrite.c HTGuess.h HTGuess.c HTMerge.h HTMerge.c HTNetTxt.h HTNetTxt.c HTSChunk.h HTSChunk.c HTTee.h HTTee.c HTXParse.h HTXParse.c libwwwcache_la_SOURCES = WWWCache.h HTCache.h HTCache.c libwwwfile_la_SOURCES = WWWFile.h HTBInit.h HTBInit.c HTBind.h HTBind.c HTFile.h HTFile.c HTMulti.h HTMulti.c libwwwftp_la_SOURCES = WWWFTP.h HTFTP.h HTFTP.c HTFTPDir.h HTFTPDir.c libwwwgopher_la_SOURCES = WWWGophe.h HTGopher.h HTGopher.c libwwwmime_la_SOURCES = WWWMIME.h HTBound.h HTBound.c HTHeader.h HTHeader.c HTMIME.h HTMIME.c HTMIMPrs.h HTMIMPrs.c HTMIMERq.h HTMIMERq.c HTMIMImp.h HTMIMImp.c HTMulpar.h libwwwhttp_la_SOURCES = WWWHTTP.h HTTPUtil.h HTAABrow.h HTAABrow.c HTAAUtil.h HTAAUtil.c HTCookie.h HTCookie.c HTDigest.h HTDigest.c HTTChunk.h HTTChunk.c HTTP.h HTTP.c HTTPGen.h HTTPGen.c HTTPReq.h HTTPReq.c HTTPRes.h HTTPRes.c HTTPServ.h HTTPServ.c HTPEP.h HTPEP.c libwwwhttp_la_DEPENDENCIES = ../../modules/md5/libmd5.la libwwwnews_la_SOURCES = WWWNews.h HTNDir.h HTNDir.c HTNews.h HTNews.c HTNewsLs.h HTNewsLs.c HTNewsRq.h HTNewsRq.c libwwwtelnet_la_SOURCES = WWWTelnt.h HTTelnet.h HTTelnet.c libwwwwais_la_SOURCES = WWWWAIS.h HTWAIS.h HTWAIS.c HTWSRC.h HTWSRC.c libwwwwais_la_LDFLAGS = -rpath $(libdir) libwwwhtml_la_SOURCES = WWWHTML.h HTMLPDTD.h HTMLPDTD.c SGML.h SGML.c HTMLGen.h HTMLGen.c HTTeXGen.h HTTeXGen.c HTPlain.h HTPlain.c HTML.h HTML.c HText.h HTextImp.h HText.c HTHInit.h HTHInit.c HTStyle.h HTStyle.c libwwwdir_la_SOURCES = WWWDir.h HTIcons.h HTIcons.c HTDescpt.h HTDescpt.c HTDir.h HTDir.c libwwwapp_la_SOURCES = WWWApp.h HTAccess.h HTAccess.c HTDialog.h HTDialog.c HTEvtLst.h HTEvtLst.c HTFilter.h HTFilter.c HTHist.h HTHist.c HTInit.h HTInit.c HTHome.h HTHome.c HTLog.h HTLog.c HTProxy.h HTProxy.c HTRules.h HTRules.c libwwwinit_la_SOURCES = WWWInit.h HTProfil.h HTProfil.c libwwwmux_la_SOURCES = WWWMux.h HTDemux.h HTDemux.c HTMuxCh.h HTMuxCh.c HTMuxHeader.h HTMuxTx.h HTMuxTx.c libwwwxml_la_SOURCES = WWWXML.h HTRDF.h HTRDF.c HTXML.h HTXML.c libwwwxml_la_DEPENDENCIES = ../../modules/expat/xmltok/libxmltok.la ../../modules/expat/xmlparse/libxmlparse.la libwwwxml_la_LDFLAGS = -rpath $(libdir) libwwwzip_la_SOURCES = WWWZip.h HTZip.h HTZip.h HTZip.c libwwwzip_la_LDFLAGS = -rpath $(libdir) libwwwsql_la_SOURCES = WWWSQL.h HTSQL.h HTSQL.c HTSQLLog.h HTSQLLog.h HTSQLLog.c libwwwsql_la_LDFLAGS = -rpath $(libdir) INCLUDES = -I/usr/local/include -I${top_srcdir}/modules/md5 -I${top_srcdir}/modules/expat/xmlparse BUILT_SOURCES = wwwsys.h HTAABrow.h HTAAUtil.h HTANSI.h HTAccess.h HTAlert.h HTAncMan.h HTAnchor.h HTArray.h HTAssoc.h HTAtom.h HTBInit.h HTBTree.h HTBind.h HTBind.h HTBound.h HTBufWrt.h HTCache.h HTChannl.h HTChunk.h HTConLen.h HTCookie.h HTDNS.h HTDemux.h HTDescpt.h HTDialog.h HTDigest.h HTDir.h HTEPtoCl.h HTError.h HTEscape.h HTEvent.h HTEvtLst.h HTFSave.h HTFTP.h HTFTPDir.h HTFWrite.h HTFile.h HTFilter.h HTFormat.h HTGopher.h HTGuess.h HTHInit.h HTHash.h HTHeader.h HTHist.h HTHome.h HTHost.h HTHstMan.h HTIOStream.h HTIcons.h HTInet.h HTInit.h HTLib.h HTLink.h HTList.h HTLocal.h HTLog.h HTMIME.h HTMIMERq.h HTMIMImp.h HTMIMPrs.h HTML.h HTMLGen.h HTMLPDTD.h HTMemLog.h HTMemory.h HTMerge.h HTMethod.h HTMulpar.h HTMulti.h HTMuxCh.h HTMuxHeader.h HTMuxTx.h HTNDir.h HTNet.h HTNetMan.h HTNetTxt.h HTNews.h HTNewsLs.h HTNewsRq.h HTNoFree.h HTPEP.h HTParse.h HTPlain.h HTProfil.h HTProt.h HTProxy.h HTRDF.h HTReader.h HTReq.h HTReqMan.h HTResMan.h HTResponse.h HTRules.h HTSChunk.h HTSQL.h HTSQLLog.h HTSocket.h HTStream.h HTString.h HTStruct.h HTStyle.h HTTCP.h HTTChunk.h HTTP.h HTTPGen.h HTTPReq.h HTTPRes.h HTTPServ.h HTTPUtil.h HTTeXGen.h HTTee.h HTTelnet.h HTTimer.h HTTrans.h HTUTree.h HTUU.h HTUser.h HTUtils.h HTWAIS.h HTWSRC.h HTWWWStr.h HTWriter.h HTXML.h HTXParse.h HTZip.h HText.h HTextImp.h SGML.h WWWApp.h WWWCache.h WWWCore.h WWWDir.h WWWFTP.h WWWFile.h WWWGophe.h WWWHTML.h WWWHTTP.h WWWInit.h WWWLib.h WWWMIME.h WWWMux.h WWWNews.h WWWSQL.h WWWStream.h WWWTelnt.h WWWTrans.h WWWUtil.h WWWWAIS.h WWWXML.h WWWZip.h pkginclude_HEADERS = $(BUILT_SOURCES) DOCS := $(wildcard *.html) EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. LIBS = @LIBS@ libwwwxml_la_LIBADD = libwwwxml_la_OBJECTS = HTRDF.lo HTXML.lo libwwwzip_la_LIBADD = libwwwzip_la_OBJECTS = HTZip.lo libwwwwais_la_LIBADD = libwwwwais_la_OBJECTS = HTWAIS.lo HTWSRC.lo libwwwsql_la_LIBADD = libwwwsql_la_OBJECTS = HTSQL.lo HTSQLLog.lo libwwwutils_la_LDFLAGS = libwwwutils_la_LIBADD = libwwwutils_la_OBJECTS = HTArray.lo HTAssoc.lo HTAtom.lo HTBTree.lo \ HTChunk.lo HTHash.lo HTList.lo HTMemory.lo HTString.lo HTTrace.lo \ HTUU.lo libwwwcore_la_LDFLAGS = libwwwcore_la_LIBADD = libwwwcore_la_OBJECTS = HTAlert.lo HTAnchor.lo HTChannl.lo HTDNS.lo \ HTError.lo HTEscape.lo HTEvent.lo HTFormat.lo HTHost.lo HTInet.lo \ HTLib.lo HTLink.lo HTMemLog.lo HTMethod.lo HTNet.lo HTNoFree.lo \ HTParse.lo HTProt.lo HTReqMan.lo HTResponse.lo HTStream.lo HTTCP.lo \ HTTimer.lo HTTrans.lo HTUTree.lo HTUser.lo HTWWWStr.lo libwwwtrans_la_LDFLAGS = libwwwtrans_la_LIBADD = libwwwtrans_la_OBJECTS = HTANSI.lo HTBufWrt.lo HTLocal.lo HTReader.lo \ HTSocket.lo HTWriter.lo libwwwstream_la_LDFLAGS = libwwwstream_la_LIBADD = libwwwstream_la_OBJECTS = HTConLen.lo HTEPtoCl.lo HTFSave.lo \ HTFWrite.lo HTGuess.lo HTMerge.lo HTNetTxt.lo HTSChunk.lo HTTee.lo \ HTXParse.lo libwwwcache_la_LDFLAGS = libwwwcache_la_LIBADD = libwwwcache_la_OBJECTS = HTCache.lo libwwwdir_la_LDFLAGS = libwwwdir_la_LIBADD = libwwwdir_la_OBJECTS = HTIcons.lo HTDescpt.lo HTDir.lo libwwwfile_la_LDFLAGS = libwwwfile_la_LIBADD = libwwwfile_la_OBJECTS = HTBInit.lo HTBind.lo HTFile.lo HTMulti.lo libwwwftp_la_LDFLAGS = libwwwftp_la_LIBADD = libwwwftp_la_OBJECTS = HTFTP.lo HTFTPDir.lo libwwwgopher_la_LDFLAGS = libwwwgopher_la_LIBADD = libwwwgopher_la_OBJECTS = HTGopher.lo libwwwmime_la_LDFLAGS = libwwwmime_la_LIBADD = libwwwmime_la_OBJECTS = HTBound.lo HTHeader.lo HTMIME.lo HTMIMPrs.lo \ HTMIMERq.lo HTMIMImp.lo libwwwhttp_la_LDFLAGS = libwwwhttp_la_LIBADD = libwwwhttp_la_OBJECTS = HTAABrow.lo HTAAUtil.lo HTCookie.lo HTDigest.lo \ HTTChunk.lo HTTP.lo HTTPGen.lo HTTPReq.lo HTTPRes.lo HTTPServ.lo \ HTPEP.lo libwwwnews_la_LDFLAGS = libwwwnews_la_LIBADD = libwwwnews_la_OBJECTS = HTNDir.lo HTNews.lo HTNewsLs.lo HTNewsRq.lo libwwwtelnet_la_LDFLAGS = libwwwtelnet_la_LIBADD = libwwwtelnet_la_OBJECTS = HTTelnet.lo libwwwhtml_la_LDFLAGS = libwwwhtml_la_LIBADD = libwwwhtml_la_OBJECTS = HTMLPDTD.lo SGML.lo HTMLGen.lo HTTeXGen.lo \ HTPlain.lo HTML.lo HText.lo HTHInit.lo HTStyle.lo libwwwapp_la_LDFLAGS = libwwwapp_la_LIBADD = libwwwapp_la_OBJECTS = HTAccess.lo HTDialog.lo HTEvtLst.lo HTFilter.lo \ HTHist.lo HTInit.lo HTHome.lo HTLog.lo HTProxy.lo HTRules.lo libwwwinit_la_LDFLAGS = libwwwinit_la_LIBADD = libwwwinit_la_OBJECTS = HTProfil.lo libwwwmux_la_LDFLAGS = libwwwmux_la_LIBADD = libwwwmux_la_OBJECTS = HTDemux.lo HTMuxCh.lo HTMuxTx.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(pkginclude_HEADERS) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/HTAABrow.P .deps/HTAAUtil.P .deps/HTANSI.P \ .deps/HTAccess.P .deps/HTAlert.P .deps/HTAnchor.P .deps/HTArray.P \ .deps/HTAssoc.P .deps/HTAtom.P .deps/HTBInit.P .deps/HTBTree.P \ .deps/HTBind.P .deps/HTBound.P .deps/HTBufWrt.P .deps/HTCache.P \ .deps/HTChannl.P .deps/HTChunk.P .deps/HTConLen.P .deps/HTCookie.P \ .deps/HTDNS.P .deps/HTDemux.P .deps/HTDescpt.P .deps/HTDialog.P \ .deps/HTDigest.P .deps/HTDir.P .deps/HTEPtoCl.P .deps/HTError.P \ .deps/HTEscape.P .deps/HTEvent.P .deps/HTEvtLst.P .deps/HTFSave.P \ .deps/HTFTP.P .deps/HTFTPDir.P .deps/HTFWrite.P .deps/HTFile.P \ .deps/HTFilter.P .deps/HTFormat.P .deps/HTGopher.P .deps/HTGuess.P \ .deps/HTHInit.P .deps/HTHash.P .deps/HTHeader.P .deps/HTHist.P \ .deps/HTHome.P .deps/HTHost.P .deps/HTIcons.P .deps/HTInet.P \ .deps/HTInit.P .deps/HTLib.P .deps/HTLink.P .deps/HTList.P \ .deps/HTLocal.P .deps/HTLog.P .deps/HTMIME.P .deps/HTMIMERq.P \ .deps/HTMIMImp.P .deps/HTMIMPrs.P .deps/HTML.P .deps/HTMLGen.P \ .deps/HTMLPDTD.P .deps/HTMemLog.P .deps/HTMemory.P .deps/HTMerge.P \ .deps/HTMethod.P .deps/HTMulti.P .deps/HTMuxCh.P .deps/HTMuxTx.P \ .deps/HTNDir.P .deps/HTNet.P .deps/HTNetTxt.P .deps/HTNews.P \ .deps/HTNewsLs.P .deps/HTNewsRq.P .deps/HTNoFree.P .deps/HTPEP.P \ .deps/HTParse.P .deps/HTPlain.P .deps/HTProfil.P .deps/HTProt.P \ .deps/HTProxy.P .deps/HTRDF.P .deps/HTReader.P .deps/HTReqMan.P \ .deps/HTResponse.P .deps/HTRules.P .deps/HTSChunk.P .deps/HTSQL.P \ .deps/HTSQLLog.P .deps/HTSocket.P .deps/HTStream.P .deps/HTString.P \ .deps/HTStyle.P .deps/HTTCP.P .deps/HTTChunk.P .deps/HTTP.P \ .deps/HTTPGen.P .deps/HTTPReq.P .deps/HTTPRes.P .deps/HTTPServ.P \ .deps/HTTeXGen.P .deps/HTTee.P .deps/HTTelnet.P .deps/HTTimer.P \ .deps/HTTrace.P .deps/HTTrans.P .deps/HTUTree.P .deps/HTUU.P \ .deps/HTUser.P .deps/HTWAIS.P .deps/HTWSRC.P .deps/HTWWWStr.P \ .deps/HTWriter.P .deps/HTXML.P .deps/HTXParse.P .deps/HTZip.P \ .deps/HText.P .deps/SGML.P SOURCES = $(libwwwxml_la_SOURCES) $(libwwwzip_la_SOURCES) $(libwwwwais_la_SOURCES) $(libwwwsql_la_SOURCES) $(libwwwutils_la_SOURCES) $(libwwwcore_la_SOURCES) $(libwwwtrans_la_SOURCES) $(libwwwstream_la_SOURCES) $(libwwwcache_la_SOURCES) $(libwwwdir_la_SOURCES) $(libwwwfile_la_SOURCES) $(libwwwftp_la_SOURCES) $(libwwwgopher_la_SOURCES) $(libwwwmime_la_SOURCES) $(libwwwhttp_la_SOURCES) $(libwwwnews_la_SOURCES) $(libwwwtelnet_la_SOURCES) $(libwwwhtml_la_SOURCES) $(libwwwapp_la_SOURCES) $(libwwwinit_la_SOURCES) $(libwwwmux_la_SOURCES) OBJECTS = $(libwwwxml_la_OBJECTS) $(libwwwzip_la_OBJECTS) $(libwwwwais_la_OBJECTS) $(libwwwsql_la_OBJECTS) $(libwwwutils_la_OBJECTS) $(libwwwcore_la_OBJECTS) $(libwwwtrans_la_OBJECTS) $(libwwwstream_la_OBJECTS) $(libwwwcache_la_OBJECTS) $(libwwwdir_la_OBJECTS) $(libwwwfile_la_OBJECTS) $(libwwwftp_la_OBJECTS) $(libwwwgopher_la_OBJECTS) $(libwwwmime_la_OBJECTS) $(libwwwhttp_la_OBJECTS) $(libwwwnews_la_OBJECTS) $(libwwwtelnet_la_OBJECTS) $(libwwwhtml_la_OBJECTS) $(libwwwapp_la_OBJECTS) $(libwwwinit_la_OBJECTS) $(libwwwmux_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s .txt $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libwwwxml.la: $(libwwwxml_la_OBJECTS) $(libwwwxml_la_DEPENDENCIES) $(LINK) $(libwwwxml_la_LDFLAGS) $(libwwwxml_la_OBJECTS) $(libwwwxml_la_LIBADD) $(LIBS) libwwwzip.la: $(libwwwzip_la_OBJECTS) $(libwwwzip_la_DEPENDENCIES) $(LINK) $(libwwwzip_la_LDFLAGS) $(libwwwzip_la_OBJECTS) $(libwwwzip_la_LIBADD) $(LIBS) libwwwwais.la: $(libwwwwais_la_OBJECTS) $(libwwwwais_la_DEPENDENCIES) $(LINK) $(libwwwwais_la_LDFLAGS) $(libwwwwais_la_OBJECTS) $(libwwwwais_la_LIBADD) $(LIBS) libwwwsql.la: $(libwwwsql_la_OBJECTS) $(libwwwsql_la_DEPENDENCIES) $(LINK) $(libwwwsql_la_LDFLAGS) $(libwwwsql_la_OBJECTS) $(libwwwsql_la_LIBADD) $(LIBS) libwwwutils.la: $(libwwwutils_la_OBJECTS) $(libwwwutils_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwutils_la_LDFLAGS) $(libwwwutils_la_OBJECTS) $(libwwwutils_la_LIBADD) $(LIBS) libwwwcore.la: $(libwwwcore_la_OBJECTS) $(libwwwcore_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwcore_la_LDFLAGS) $(libwwwcore_la_OBJECTS) $(libwwwcore_la_LIBADD) $(LIBS) libwwwtrans.la: $(libwwwtrans_la_OBJECTS) $(libwwwtrans_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwtrans_la_LDFLAGS) $(libwwwtrans_la_OBJECTS) $(libwwwtrans_la_LIBADD) $(LIBS) libwwwstream.la: $(libwwwstream_la_OBJECTS) $(libwwwstream_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwstream_la_LDFLAGS) $(libwwwstream_la_OBJECTS) $(libwwwstream_la_LIBADD) $(LIBS) libwwwcache.la: $(libwwwcache_la_OBJECTS) $(libwwwcache_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwcache_la_LDFLAGS) $(libwwwcache_la_OBJECTS) $(libwwwcache_la_LIBADD) $(LIBS) libwwwdir.la: $(libwwwdir_la_OBJECTS) $(libwwwdir_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwdir_la_LDFLAGS) $(libwwwdir_la_OBJECTS) $(libwwwdir_la_LIBADD) $(LIBS) libwwwfile.la: $(libwwwfile_la_OBJECTS) $(libwwwfile_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwfile_la_LDFLAGS) $(libwwwfile_la_OBJECTS) $(libwwwfile_la_LIBADD) $(LIBS) libwwwftp.la: $(libwwwftp_la_OBJECTS) $(libwwwftp_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwftp_la_LDFLAGS) $(libwwwftp_la_OBJECTS) $(libwwwftp_la_LIBADD) $(LIBS) libwwwgopher.la: $(libwwwgopher_la_OBJECTS) $(libwwwgopher_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwgopher_la_LDFLAGS) $(libwwwgopher_la_OBJECTS) $(libwwwgopher_la_LIBADD) $(LIBS) libwwwmime.la: $(libwwwmime_la_OBJECTS) $(libwwwmime_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwmime_la_LDFLAGS) $(libwwwmime_la_OBJECTS) $(libwwwmime_la_LIBADD) $(LIBS) libwwwhttp.la: $(libwwwhttp_la_OBJECTS) $(libwwwhttp_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwhttp_la_LDFLAGS) $(libwwwhttp_la_OBJECTS) $(libwwwhttp_la_LIBADD) $(LIBS) libwwwnews.la: $(libwwwnews_la_OBJECTS) $(libwwwnews_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwnews_la_LDFLAGS) $(libwwwnews_la_OBJECTS) $(libwwwnews_la_LIBADD) $(LIBS) libwwwtelnet.la: $(libwwwtelnet_la_OBJECTS) $(libwwwtelnet_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwtelnet_la_LDFLAGS) $(libwwwtelnet_la_OBJECTS) $(libwwwtelnet_la_LIBADD) $(LIBS) libwwwhtml.la: $(libwwwhtml_la_OBJECTS) $(libwwwhtml_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwhtml_la_LDFLAGS) $(libwwwhtml_la_OBJECTS) $(libwwwhtml_la_LIBADD) $(LIBS) libwwwapp.la: $(libwwwapp_la_OBJECTS) $(libwwwapp_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwapp_la_LDFLAGS) $(libwwwapp_la_OBJECTS) $(libwwwapp_la_LIBADD) $(LIBS) libwwwinit.la: $(libwwwinit_la_OBJECTS) $(libwwwinit_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwinit_la_LDFLAGS) $(libwwwinit_la_OBJECTS) $(libwwwinit_la_LIBADD) $(LIBS) libwwwmux.la: $(libwwwmux_la_OBJECTS) $(libwwwmux_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libwwwmux_la_LDFLAGS) $(libwwwmux_la_OBJECTS) $(libwwwmux_la_LIBADD) $(LIBS) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgincludedir) @list='$(pkginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p"; \ $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) list='$(pkginclude_HEADERS)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkgincludedir)/$$p; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-libLTLIBRARIES install-exec: install-exec-recursive install-data-am: install-pkgincludeHEADERS install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS uninstall: uninstall-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(pkgincludedir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool uninstall-pkgincludeHEADERS \ install-pkgincludeHEADERS install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Generating the .h files using the " @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/���������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405521135�014762� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTResponse.P���������������������������������������������������������������0100644�0000764�0000144�00000015013�07405520743�017136� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTResponse.lo HTResponse.o : HTResponse.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTHeader.h HTResponse.h HTEvent.h HTReq.h HTFormat.h \ HTStream.h HTAnchor.h HTLink.h HTMethod.h HTError.h HTNet.h HTTrans.h \ HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUser.h \ HTLib.h HTWWWStr.h HTResMan.h HTAABrow.h HTUTree.h HTMIMPrs.h HTResponse.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTHeader.h : HTResponse.h : HTEvent.h : HTReq.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTLib.h : HTWWWStr.h : HTResMan.h : HTAABrow.h : HTUTree.h : HTMIMPrs.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTArray.P������������������������������������������������������������������0100644�0000764�0000144�00000013457�07405520674�016433� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTArray.lo HTArray.o : HTArray.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTArray.h HTArray.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTArray.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTAssoc.P������������������������������������������������������������������0100644�0000764�0000144�00000013561�07405520675�016422� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAssoc.lo HTAssoc.o : HTAssoc.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTAssoc.h HTList.h HTArray.h HTAssoc.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTAssoc.h : HTList.h : HTArray.h : �����������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTAtom.P�������������������������������������������������������������������0100644�0000764�0000144�00000013553�07405520676�016254� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAtom.lo HTAtom.o : HTAtom.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTList.h HTArray.h HTAtom.h HTAtom.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTList.h : HTArray.h : HTAtom.h : �����������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTBTree.P������������������������������������������������������������������0100644�0000764�0000144�00000013505�07405520677�016353� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTBTree.lo HTBTree.o : HTBTree.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTBTree.h HTArray.h HTBTree.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTBTree.h : HTArray.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTChunk.P������������������������������������������������������������������0100644�0000764�0000144�00000013457�07405520700�016413� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTChunk.lo HTChunk.o : HTChunk.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTChunk.h HTChunk.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTChunk.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTHash.P�������������������������������������������������������������������0100644�0000764�0000144�00000013553�07405520701�016224� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTHash.lo HTHash.o : HTHash.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTHash.h HTList.h HTArray.h HTHash.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTHash.h : HTList.h : HTArray.h : �����������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTList.P�������������������������������������������������������������������0100644�0000764�0000144�00000013477�07405520702�016262� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTList.lo HTList.o : HTList.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTList.h HTArray.h HTList.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTList.h : HTArray.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMemory.P�����������������������������������������������������������������0100644�0000764�0000144�00000013507�07405520703�016612� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMemory.lo HTMemory.o : HTMemory.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTList.h HTArray.h HTMemory.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTList.h : HTArray.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTString.P�����������������������������������������������������������������0100644�0000764�0000144�00000013465�07405520704�016614� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTString.lo HTString.o : HTString.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTString.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTrace.P������������������������������������������������������������������0100644�0000764�0000144�00000013431�07405520705�016376� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTrace.lo HTTrace.o : HTTrace.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTTrace.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTUU.P���������������������������������������������������������������������0100644�0000764�0000144�00000013435�07405520705�015675� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTUU.lo HTUU.o : HTUU.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTUU.h HTUU.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTUU.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTAlert.P������������������������������������������������������������������0100644�0000764�0000144�00000015205�07405520707�016412� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAlert.lo HTAlert.o : HTAlert.c WWWLib.h wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTAlert.c : WWWLib.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTAnchor.P�����������������������������������������������������������������0100644�0000764�0000144�00000014701�07405520712�016551� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAnchor.lo HTAnchor.o : HTAnchor.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h \ HTResponse.h HTEvent.h HTReq.h HTError.h HTNet.h HTTrans.h HTIOStream.h \ HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUser.h HTParse.h \ HTEscape.h HTWWWStr.h HTAncMan.h HTAnchor.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTParse.h : HTEscape.h : HTWWWStr.h : HTAncMan.h : ���������������������������������������������������������������libwww/Library/src/.deps/HTChannl.P�����������������������������������������������������������������0100644�0000764�0000144�00000014565�07405520713�016553� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTChannl.lo HTChannl.o : HTChannl.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTAlert.h HTReq.h HTEvent.h HTFormat.h HTStream.h \ HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h HTNet.h \ HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTChannl.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTAlert.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : �������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTDNS.P��������������������������������������������������������������������0100644�0000764�0000144�00000014663�07405520714�015774� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTDNS.lo HTDNS.o : HTDNS.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTParse.h HTEscape.h HTAlert.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTUser.h HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h \ HTProt.h HTTimer.h HTDNS.h HTHstMan.h HTDNS.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTParse.h : HTEscape.h : HTAlert.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTHstMan.h : �����������������������������������������������������������������������������libwww/Library/src/.deps/HTError.P������������������������������������������������������������������0100644�0000764�0000144�00000014613�07405520715�016435� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTError.lo HTError.o : HTError.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTInet.h HTReq.h HTEvent.h HTFormat.h HTStream.h \ HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h HTNet.h \ HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h \ HTHstMan.h HTError.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTInet.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTHstMan.h : ���������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTEscape.P�����������������������������������������������������������������0100644�0000764�0000144�00000013465�07405520716�016551� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTEscape.lo HTEscape.o : HTEscape.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTEscape.h HTEscape.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTEscape.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTEvent.P������������������������������������������������������������������0100644�0000764�0000144�00000014533�07405520717�016430� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTEvent.lo HTEvent.o : HTEvent.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTEvent.h HTReq.h HTFormat.h HTStream.h HTAnchor.h \ HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h HTNet.h HTTrans.h \ HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTEvent.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTEvent.h : HTReq.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTFormat.P�����������������������������������������������������������������0100644�0000764�0000144�00000014623�07405520721�016572� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTFormat.lo HTFormat.o : HTFormat.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTStream.h HTWWWStr.h HTUser.h HTFWrite.h HTReq.h \ HTEvent.h HTFormat.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTFormat.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTStream.h : HTWWWStr.h : HTUser.h : HTFWrite.h : HTReq.h : HTEvent.h : HTFormat.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : �������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTHost.P�������������������������������������������������������������������0100644�0000764�0000144�00000014771�07405520724�016266� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTHost.lo HTHost.o : HTHost.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTParse.h HTEscape.h HTAlert.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTUser.h HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h \ HTProt.h HTTimer.h HTDNS.h HTNetMan.h HTTPUtil.h HTTCP.h HTHstMan.h HTHost.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTParse.h : HTEscape.h : HTAlert.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTNetMan.h : HTTPUtil.h : HTTCP.h : HTHstMan.h : �������libwww/Library/src/.deps/HTInet.P�������������������������������������������������������������������0100644�0000764�0000144�00000014743�07405520725�016250� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTInet.lo HTInet.o : HTInet.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTParse.h HTEscape.h HTAlert.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTUser.h HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h \ HTProt.h HTTimer.h HTDNS.h HTNetMan.h HTInet.h HTHstMan.h HTInet.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTParse.h : HTEscape.h : HTAlert.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTNetMan.h : HTInet.h : HTHstMan.h : �����������������������������libwww/Library/src/.deps/HTLib.P��������������������������������������������������������������������0100644�0000764�0000144�00000014577�07405520726�016065� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTLib.lo HTLib.o : HTLib.c WWWUtil.h wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h HTString.h \ HTUU.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTEvent.h HTReq.h \ HTFormat.h HTStream.h HTError.h HTNet.h HTTrans.h HTIOStream.h \ HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUser.h HTUTree.h \ HTLib.h HTLib.c : WWWUtil.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTFormat.h : HTStream.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTUTree.h : HTLib.h : ���������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTLink.P�������������������������������������������������������������������0100644�0000764�0000144�00000014641�07405520727�016245� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTLink.lo HTLink.o : HTLink.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h \ HTResponse.h HTEvent.h HTReq.h HTError.h HTNet.h HTTrans.h HTIOStream.h \ HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUser.h HTParse.h \ HTEscape.h HTAncMan.h HTLink.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTParse.h : HTEscape.h : HTAncMan.h : �����������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMemLog.P�����������������������������������������������������������������0100644�0000764�0000144�00000014647�07405520730�016530� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMemLog.lo HTMemLog.o : HTMemLog.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTInet.h HTReq.h HTEvent.h HTList.h HTArray.h HTAssoc.h \ HTFormat.h HTStream.h HTAtom.h HTAnchor.h WWWUtil.h HTChunk.h \ HTString.h HTUU.h HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h \ HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h \ HTDNS.h HTHstMan.h HTMemLog.h HTMemLog.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTInet.h : HTReq.h : HTEvent.h : HTList.h : HTArray.h : HTAssoc.h : HTFormat.h : HTStream.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTChunk.h : HTString.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTHstMan.h : HTMemLog.h : �����������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMethod.P�����������������������������������������������������������������0100644�0000764�0000144�00000013515�07405520731�016562� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMethod.lo HTMethod.o : HTMethod.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTMethod.h HTMethod.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTMethod.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTNet.P��������������������������������������������������������������������0100644�0000764�0000144�00000014713�07405520733�016073� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTNet.lo HTNet.o : HTNet.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTProt.h HTReq.h HTEvent.h HTFormat.h HTStream.h \ HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h HTNet.h \ HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTTimer.h HTDNS.h HTAlert.h \ HTParse.h HTEscape.h HTHstMan.h HTNetMan.h HTNet.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTProt.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTTimer.h : HTDNS.h : HTAlert.h : HTParse.h : HTEscape.h : HTHstMan.h : HTNetMan.h : �����������������������������������������������������libwww/Library/src/.deps/HTNoFree.P�����������������������������������������������������������������0100644�0000764�0000144�00000013537�07405520734�016527� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTNoFree.lo HTNoFree.o : HTNoFree.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTStream.h HTList.h HTArray.h HTNoFree.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTStream.h : HTList.h : HTArray.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTParse.P������������������������������������������������������������������0100644�0000764�0000144�00000013763�07405520736�016426� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTParse.lo HTParse.o : HTParse.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTParse.h HTEscape.h HTParse.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTParse.h : HTEscape.h : �������������libwww/Library/src/.deps/HTProt.P�������������������������������������������������������������������0100644�0000764�0000144�00000014611�07405520737�016272� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTProt.lo HTProt.o : HTProt.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTParse.h HTEscape.h HTTrans.h HTIOStream.h \ HTList.h HTArray.h HTStream.h HTChannl.h HTHost.h HTReq.h HTEvent.h \ HTAssoc.h HTFormat.h HTAtom.h HTAnchor.h WWWUtil.h HTChunk.h HTUU.h \ HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h HTNet.h HTProt.h \ HTDNS.h HTTimer.h HTProt.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTParse.h : HTEscape.h : HTTrans.h : HTIOStream.h : HTList.h : HTArray.h : HTStream.h : HTChannl.h : HTHost.h : HTReq.h : HTEvent.h : HTAssoc.h : HTFormat.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTChunk.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTProt.h : HTDNS.h : HTTimer.h : �����������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTReqMan.P�����������������������������������������������������������������0100644�0000764�0000144�00000015143�07405520741�016525� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTReqMan.lo HTReqMan.o : HTReqMan.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTParse.h HTEscape.h HTNoFree.h HTStream.h HTAlert.h \ HTReq.h HTEvent.h HTFormat.h HTAnchor.h HTLink.h HTMethod.h \ HTResponse.h HTUser.h HTError.h HTNet.h HTTrans.h HTIOStream.h \ HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTNetMan.h HTHeader.h \ HTLib.h HTReqMan.h HTAABrow.h HTUTree.h HTMIMPrs.h HTReqMan.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTParse.h : HTEscape.h : HTNoFree.h : HTStream.h : HTAlert.h : HTReq.h : HTEvent.h : HTFormat.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTNetMan.h : HTHeader.h : HTLib.h : HTReqMan.h : HTAABrow.h : HTUTree.h : HTMIMPrs.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTStream.P�����������������������������������������������������������������0100644�0000764�0000144�00000013537�07405520744�016605� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTStream.lo HTStream.o : HTStream.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTStream.h HTList.h HTArray.h HTStream.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTStream.h : HTList.h : HTArray.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTCP.P��������������������������������������������������������������������0100644�0000764�0000144�00000015367�07405520745�016004� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTCP.lo HTTCP.o : HTTCP.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTReqMan.h \ HTAABrow.h HTMIMPrs.h HTHeader.h HTNetMan.h HTTCP.h HTTCP.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTNetMan.h : HTTCP.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTimer.P������������������������������������������������������������������0100644�0000764�0000144�00000015325�07405520746�016431� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTimer.lo HTTimer.o : HTTimer.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTReqMan.h \ HTAABrow.h HTMIMPrs.h HTHeader.h HTTimer.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTrans.P������������������������������������������������������������������0100644�0000764�0000144�00000014615�07405520747�016442� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTrans.lo HTTrans.o : HTTrans.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTParse.h HTEscape.h HTReq.h HTEvent.h HTFormat.h \ HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTUser.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTTrans.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTParse.h : HTEscape.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : �������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTUTree.P������������������������������������������������������������������0100644�0000764�0000144�00000014561�07405520751�016372� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTUTree.lo HTUTree.o : HTUTree.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTUTree.h HTReq.h HTEvent.h HTFormat.h HTStream.h \ HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h HTNet.h \ HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUTree.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTUTree.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : �����������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTUser.P�������������������������������������������������������������������0100644�0000764�0000144�00000014607�07405520752�016266� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTUser.lo HTUser.o : HTUser.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTInet.h HTReq.h HTEvent.h HTFormat.h HTStream.h \ HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h HTNet.h \ HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h \ HTHstMan.h HTUser.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTInet.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTHstMan.h : �������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTWWWStr.P�����������������������������������������������������������������0100644�0000764�0000144�00000014725�07405520754�016530� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTWWWStr.lo HTWWWStr.o : HTWWWStr.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTParse.h HTEscape.h HTInet.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTUser.h HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h \ HTProt.h HTTimer.h HTDNS.h HTHstMan.h HTWWWStr.h HTWWWStr.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTParse.h : HTEscape.h : HTInet.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTHstMan.h : HTWWWStr.h : �������������������������������������������libwww/Library/src/.deps/HTANSI.P�������������������������������������������������������������������0100644�0000764�0000144�00000015231�07405520756�016100� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTANSI.lo HTANSI.o : HTANSI.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTNetMan.h HTANSI.h HTANSI.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTNetMan.h : HTANSI.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTBufWrt.P�����������������������������������������������������������������0100644�0000764�0000144�00000015301�07405520757�016556� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTBufWrt.lo HTBufWrt.o : HTBufWrt.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTNetMan.h \ HTWriter.h HTBufWrt.h HTBufWrt.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTNetMan.h : HTWriter.h : HTBufWrt.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTLocal.P������������������������������������������������������������������0100644�0000764�0000144�00000015207�07405520760�016376� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTLocal.lo HTLocal.o : HTLocal.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTLocal.h HTLocal.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTLocal.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTReader.P�����������������������������������������������������������������0100644�0000764�0000144�00000015251�07405520761�016546� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTReader.lo HTReader.o : HTReader.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTNetMan.h \ HTReader.h HTReader.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTNetMan.h : HTReader.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTSocket.P�����������������������������������������������������������������0100644�0000764�0000144�00000015511�07405520762�016574� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTSocket.lo HTSocket.o : HTSocket.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWTrans.h HTANSI.h \ HTLocal.h HTTCP.h HTSocket.h HTReader.h HTWriter.h HTBufWrt.h \ HTNetMan.h HTSocket.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : HTNetMan.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTWriter.P�����������������������������������������������������������������0100644�0000764�0000144�00000015251�07405520763�016622� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTWriter.lo HTWriter.o : HTWriter.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTNetMan.h \ HTWriter.h HTWriter.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTNetMan.h : HTWriter.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTConLen.P�����������������������������������������������������������������0100644�0000764�0000144�00000015215�07405520765�016526� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTConLen.lo HTConLen.o : HTConLen.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTConLen.h HTConLen.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTConLen.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTEPtoCl.P�����������������������������������������������������������������0100644�0000764�0000144�00000013537�07405520765�016503� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTEPtoCl.lo HTEPtoCl.o : HTEPtoCl.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTStream.h HTList.h HTArray.h HTEPtoCl.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTStream.h : HTList.h : HTArray.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTFSave.P������������������������������������������������������������������0100644�0000764�0000144�00000015267�07405520767�016365� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTFSave.lo HTFSave.o : HTFSave.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTBind.h HTFWrite.h \ HTFSave.h HTFSave.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTBind.h : HTFWrite.h : HTFSave.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTFWrite.P�����������������������������������������������������������������0100644�0000764�0000144�00000015215�07405520770�016544� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTFWrite.lo HTFWrite.o : HTFWrite.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTFWrite.h HTFWrite.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTFWrite.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTGuess.P������������������������������������������������������������������0100644�0000764�0000144�00000015411�07405520771�016431� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTGuess.lo HTGuess.o : HTGuess.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWLib.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWFile.h HTFile.h \ HTMulti.h HTBind.h HTBInit.h HTGuess.h HTGuess.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWLib.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWFile.h : HTFile.h : HTMulti.h : HTBind.h : HTBInit.h : HTGuess.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMerge.P������������������������������������������������������������������0100644�0000764�0000144�00000013763�07405520772�016413� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMerge.lo HTMerge.o : HTMerge.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTMerge.h HTStream.h HTMerge.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTMerge.h : HTStream.h : �������������libwww/Library/src/.deps/HTNetTxt.P�����������������������������������������������������������������0100644�0000764�0000144�00000013617�07405520773�016601� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTNetTxt.lo HTNetTxt.o : HTNetTxt.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTStream.h HTList.h HTArray.h HTNetTxt.h HTNetTxt.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTStream.h : HTList.h : HTArray.h : HTNetTxt.h : �����������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTSChunk.P�����������������������������������������������������������������0100644�0000764�0000144�00000015215�07405520774�016543� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTSChunk.lo HTSChunk.o : HTSChunk.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTSChunk.h HTSChunk.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTSChunk.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTee.P��������������������������������������������������������������������0100644�0000764�0000144�00000013747�07405520775�016076� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTee.lo HTTee.o : HTTee.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTTee.h HTStream.h HTTee.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTTee.h : HTStream.h : �������������������������libwww/Library/src/.deps/HTXParse.P�����������������������������������������������������������������0100644�0000764�0000144�00000015301�07405520776�016550� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTXParse.lo HTXParse.o : HTXParse.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTXParse.h \ HTReader.h HTEPtoCl.h HTXParse.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTXParse.h : HTReader.h : HTEPtoCl.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTCache.P������������������������������������������������������������������0100644�0000764�0000144�00000016065�07405521002�016340� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTCache.lo HTCache.o : HTCache.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWTrans.h HTANSI.h \ HTLocal.h HTTCP.h HTSocket.h HTReader.h HTWriter.h HTBufWrt.h WWWApp.h \ HTEvtLst.h HTHome.h WWWLib.h HTDialog.h HTAccess.h HTRules.h HTProxy.h \ HTFilter.h HTLog.h HTHist.h HTCache.h HTCache.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : WWWApp.h : HTEvtLst.h : HTHome.h : WWWLib.h : HTDialog.h : HTAccess.h : HTRules.h : HTProxy.h : HTFilter.h : HTLog.h : HTHist.h : HTCache.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTIcons.P������������������������������������������������������������������0100644�0000764�0000144�00000015233�07405521003�016405� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTIcons.lo HTIcons.o : HTIcons.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTIcons.h WWWLib.h HTIcons.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTIcons.h : WWWLib.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTDescpt.P�����������������������������������������������������������������0100644�0000764�0000144�00000014537�07405521005�016564� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTDescpt.lo HTDescpt.o : HTDescpt.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTFormat.h HTStream.h HTList.h HTArray.h HTAtom.h \ HTAnchor.h WWWUtil.h HTAssoc.h HTChunk.h HTUU.h HTLink.h HTMethod.h \ HTResponse.h HTEvent.h HTReq.h HTError.h HTNet.h HTTrans.h HTIOStream.h \ HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUser.h HTDescpt.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTFormat.h : HTStream.h : HTList.h : HTArray.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTAssoc.h : HTChunk.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTDir.P��������������������������������������������������������������������0100644�0000764�0000144�00000016003�07405521006�016047� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTDir.lo HTDir.o : HTDir.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWFile.h HTFile.h \ HTMulti.h HTBind.h HTBInit.h WWWHTML.h HTMLPDTD.h SGML.h HTMLGen.h \ HTTeXGen.h HTPlain.h HTML.h HText.h HTHInit.h WWWLib.h HTStyle.h \ HTIcons.h HTDescpt.h HTDir.h HTDir.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWFile.h : HTFile.h : HTMulti.h : HTBind.h : HTBInit.h : WWWHTML.h : HTMLPDTD.h : SGML.h : HTMLGen.h : HTTeXGen.h : HTPlain.h : HTML.h : HText.h : HTHInit.h : WWWLib.h : HTStyle.h : HTIcons.h : HTDescpt.h : HTDir.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTBInit.P������������������������������������������������������������������0100644�0000764�0000144�00000015233�07405521010�016335� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTBInit.lo HTBInit.o : HTBInit.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTFormat.h HTStream.h HTList.h HTArray.h HTAtom.h HTAnchor.h \ WWWUtil.h HTAssoc.h HTChunk.h HTString.h HTUU.h HTLink.h HTMethod.h \ HTResponse.h HTEvent.h HTReq.h HTError.h HTNet.h HTTrans.h HTIOStream.h \ HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUser.h HTBind.h \ HTBInit.h WWWCore.h HTLib.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h \ HTMemLog.h HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTBInit.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTFormat.h : HTStream.h : HTList.h : HTArray.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTAssoc.h : HTChunk.h : HTString.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTBind.h : HTBInit.h : WWWCore.h : HTLib.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTBind.P�������������������������������������������������������������������0100644�0000764�0000144�00000014635�07405521012�016213� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTBind.lo HTBind.o : HTBind.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTEvent.h \ HTReq.h HTFormat.h HTStream.h HTError.h HTNet.h HTTrans.h HTIOStream.h \ HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUser.h HTParse.h \ HTEscape.h HTBind.h HTBind.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTFormat.h : HTStream.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTParse.h : HTEscape.h : HTBind.h : ���������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTFile.P�������������������������������������������������������������������0100644�0000764�0000144�00000016063�07405521013�016214� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTFile.lo HTFile.o : HTFile.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWDir.h HTDir.h \ HTIcons.h WWWLib.h HTDescpt.h WWWTrans.h HTANSI.h HTLocal.h HTTCP.h \ HTSocket.h HTReader.h HTWriter.h HTBufWrt.h HTReqMan.h HTAABrow.h \ HTMIMPrs.h HTHeader.h HTBind.h HTMulti.h HTFile.h HTFile.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWDir.h : HTDir.h : HTIcons.h : WWWLib.h : HTDescpt.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTBind.h : HTMulti.h : HTFile.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMulti.P������������������������������������������������������������������0100644�0000764�0000144�00000015263�07405521015�016432� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMulti.lo HTMulti.o : HTMulti.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTMulti.h HTBind.h \ HTFile.h HTMulti.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTMulti.h : HTBind.h : HTFile.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTFTP.P��������������������������������������������������������������������0100644�0000764�0000144�00000016473�07405521021�015772� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTFTP.lo HTFTP.o : HTFTP.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWStream.h \ HTConLen.h HTFWrite.h HTFSave.h HTGuess.h HTTee.h HTMerge.h HTSChunk.h \ HTXParse.h HTReader.h HTEPtoCl.h HTNetTxt.h WWWTrans.h HTANSI.h \ HTLocal.h HTTCP.h HTSocket.h HTWriter.h HTBufWrt.h WWWFile.h HTFile.h \ HTMulti.h HTBind.h HTBInit.h HTReqMan.h HTAABrow.h HTMIMPrs.h \ HTHeader.h HTNetMan.h HTFTPDir.h HTFTP.h HTFTP.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWStream.h : HTConLen.h : HTFWrite.h : HTFSave.h : HTGuess.h : HTTee.h : HTMerge.h : HTSChunk.h : HTXParse.h : HTReader.h : HTEPtoCl.h : HTNetTxt.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTWriter.h : HTBufWrt.h : WWWFile.h : HTFile.h : HTMulti.h : HTBind.h : HTBInit.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTNetMan.h : HTFTPDir.h : HTFTP.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTFTPDir.P�����������������������������������������������������������������0100644�0000764�0000144�00000015703�07405521022�016425� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTFTPDir.lo HTFTPDir.o : HTFTPDir.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWDir.h HTDir.h \ HTIcons.h WWWLib.h HTDescpt.h WWWTrans.h HTANSI.h HTLocal.h HTTCP.h \ HTSocket.h HTReader.h HTWriter.h HTBufWrt.h HTFTPDir.h HTFTP.h HTFTPDir.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWDir.h : HTDir.h : HTIcons.h : WWWLib.h : HTDescpt.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : HTFTPDir.h : HTFTP.h : �������������������������������������������������������������libwww/Library/src/.deps/HTGopher.P�����������������������������������������������������������������0100644�0000764�0000144�00000016241�07405521024�016561� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTGopher.lo HTGopher.o : HTGopher.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWHTML.h \ HTMLPDTD.h SGML.h HTMLGen.h HTTeXGen.h HTPlain.h HTML.h HText.h \ HTHInit.h WWWLib.h HTStyle.h WWWDir.h HTDir.h HTIcons.h HTDescpt.h \ WWWTrans.h HTANSI.h HTLocal.h HTTCP.h HTSocket.h HTReader.h HTWriter.h \ HTBufWrt.h HTNetMan.h HTGopher.h HTGopher.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWHTML.h : HTMLPDTD.h : SGML.h : HTMLGen.h : HTTeXGen.h : HTPlain.h : HTML.h : HText.h : HTHInit.h : WWWLib.h : HTStyle.h : WWWDir.h : HTDir.h : HTIcons.h : HTDescpt.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : HTNetMan.h : HTGopher.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTBound.P������������������������������������������������������������������0100644�0000764�0000144�00000015401�07405521026�016403� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTBound.lo HTBound.o : HTBound.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTMerge.h \ HTReqMan.h HTAABrow.h HTMIMPrs.h HTHeader.h HTBound.h HTBound.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTMerge.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTBound.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTHeader.P�����������������������������������������������������������������0100644�0000764�0000144�00000014701�07405521027�016527� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTHeader.lo HTHeader.o : HTHeader.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTParse.h HTEscape.h HTReq.h HTEvent.h HTList.h \ HTArray.h HTAssoc.h HTFormat.h HTStream.h HTAtom.h HTAnchor.h WWWUtil.h \ HTChunk.h HTUU.h HTLink.h HTMethod.h HTResponse.h HTUser.h HTError.h \ HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h \ HTDNS.h HTHeader.h HTMIMPrs.h HTHeader.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTParse.h : HTEscape.h : HTReq.h : HTEvent.h : HTList.h : HTArray.h : HTAssoc.h : HTFormat.h : HTStream.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTChunk.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTUser.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTHeader.h : HTMIMPrs.h : ���������������������������������������������������������������libwww/Library/src/.deps/HTMIME.P�������������������������������������������������������������������0100644�0000764�0000144�00000015603�07405521031�016063� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMIME.lo HTMIME.o : HTMIME.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTReqMan.h \ HTAABrow.h HTMIMPrs.h HTHeader.h HTNetMan.h HTTee.h HTConLen.h \ HTMerge.h WWWCache.h HTCache.h WWWLib.h HTMIME.h HTMIME.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTNetMan.h : HTTee.h : HTConLen.h : HTMerge.h : WWWCache.h : HTCache.h : WWWLib.h : HTMIME.h : �����������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMIMPrs.P�����������������������������������������������������������������0100644�0000764�0000144�00000014623�07405521032�016445� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMIMPrs.lo HTMIMPrs.o : HTMIMPrs.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTMIMPrs.h HTHeader.h HTResponse.h HTEvent.h \ HTReq.h HTList.h HTArray.h HTAssoc.h HTFormat.h HTStream.h HTAtom.h \ HTAnchor.h WWWUtil.h HTChunk.h HTUU.h HTLink.h HTMethod.h HTError.h \ HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h \ HTDNS.h HTUser.h HTMIMPrs.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTMIMPrs.h : HTHeader.h : HTResponse.h : HTEvent.h : HTReq.h : HTList.h : HTArray.h : HTAssoc.h : HTFormat.h : HTStream.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTChunk.h : HTUU.h : HTLink.h : HTMethod.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : �������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMIMERq.P�����������������������������������������������������������������0100644�0000764�0000144�00000015441�07405521033�016370� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMIMERq.lo HTMIMERq.o : HTMIMERq.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTAncMan.h \ HTNetMan.h HTReqMan.h HTAABrow.h HTMIMPrs.h HTHeader.h HTMIMERq.h HTMIMERq.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTAncMan.h : HTNetMan.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTMIMERq.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMIMImp.P�����������������������������������������������������������������0100644�0000764�0000144�00000015301�07405521035�016423� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMIMImp.lo HTMIMImp.o : HTMIMImp.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTHeader.h \ HTTPUtil.h HTMIMImp.h HTMIMImp.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTHeader.h : HTTPUtil.h : HTMIMImp.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTAABrow.P�����������������������������������������������������������������0100644�0000764�0000144�00000015407�07405521040�016451� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAABrow.lo HTAABrow.o : HTAABrow.c WWWLib.h wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTAAUtil.h \ HTAABrow.h HTDigest.h ../../modules/md5/md5.h HTAABrow.c : WWWLib.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTAAUtil.h : HTAABrow.h : HTDigest.h : ../../modules/md5/md5.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTAAUtil.P�����������������������������������������������������������������0100644�0000764�0000144�00000015215�07405521041�016453� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAAUtil.lo HTAAUtil.o : HTAAUtil.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTAAUtil.h HTAAUtil.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTAAUtil.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTCookie.P�����������������������������������������������������������������0100644�0000764�0000144�00000016077�07405521043�016556� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTCookie.lo HTCookie.o : HTCookie.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWHTTP.h \ HTTPUtil.h HTTP.h HTTPServ.h HTTPGen.h HTTPReq.h HTTPRes.h HTTChunk.h \ HTPEP.h HTAAUtil.h HTAABrow.h HTCookie.h WWWLib.h WWWMIME.h HTMIME.h \ HTHeader.h HTMIMERq.h HTMIMImp.h HTBound.h HTMulpar.h HTCookie.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWHTTP.h : HTTPUtil.h : HTTP.h : HTTPServ.h : HTTPGen.h : HTTPReq.h : HTTPRes.h : HTTChunk.h : HTPEP.h : HTAAUtil.h : HTAABrow.h : HTCookie.h : WWWLib.h : WWWMIME.h : HTMIME.h : HTHeader.h : HTMIMERq.h : HTMIMImp.h : HTBound.h : HTMulpar.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTDigest.P�����������������������������������������������������������������0100644�0000764�0000144�00000015327�07405521044�016562� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTDigest.lo HTDigest.o : HTDigest.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWLib.h \ WWWUtil.h HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h \ HTChunk.h HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h \ HTEvent.h HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h \ HTResponse.h HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h \ HTHost.h HTProt.h HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h \ HTWWWStr.h HTMemLog.h HTAlert.h HTStruct.h HTNoFree.h HTInet.h \ HTHstMan.h HTDigest.h ../../modules/md5/md5.h HTDigest.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWLib.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTDigest.h : ../../modules/md5/md5.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTChunk.P�����������������������������������������������������������������0100644�0000764�0000144�00000015215�07405521045�016534� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTChunk.lo HTTChunk.o : HTTChunk.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTTChunk.h HTTChunk.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTTChunk.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTP.P���������������������������������������������������������������������0100644�0000764�0000144�00000016131�07405521047�015663� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTP.lo HTTP.o : HTTP.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTHeader.h \ HTMIMERq.h HTReqMan.h HTAABrow.h HTMIMPrs.h HTNetMan.h HTTPUtil.h \ HTTPReq.h HTTP.h WWWStream.h HTConLen.h HTFWrite.h HTFSave.h HTGuess.h \ HTTee.h HTMerge.h HTSChunk.h HTXParse.h HTReader.h HTEPtoCl.h \ HTNetTxt.h HTTP.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTHeader.h : HTMIMERq.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTNetMan.h : HTTPUtil.h : HTTPReq.h : HTTP.h : WWWStream.h : HTConLen.h : HTFWrite.h : HTFSave.h : HTGuess.h : HTTee.h : HTMerge.h : HTSChunk.h : HTXParse.h : HTReader.h : HTEPtoCl.h : HTNetTxt.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTPGen.P������������������������������������������������������������������0100644�0000764�0000144�00000015273�07405521051�016316� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTPGen.lo HTTPGen.o : HTTPGen.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTHeader.h \ HTTPUtil.h HTTPReq.h HTTPGen.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTHeader.h : HTTPUtil.h : HTTPReq.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTPReq.P������������������������������������������������������������������0100644�0000764�0000144�00000015271�07405521053�016334� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTPReq.lo HTTPReq.o : HTTPReq.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTTPGen.h \ HTTPUtil.h HTTPReq.h HTTPReq.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTTPGen.h : HTTPUtil.h : HTTPReq.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTPRes.P������������������������������������������������������������������0100644�0000764�0000144�00000015321�07405521054�016333� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTPRes.lo HTTPRes.o : HTTPRes.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTNetMan.h \ HTTPGen.h HTTPUtil.h HTTPRes.h HTTPRes.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTNetMan.h : HTTPGen.h : HTTPUtil.h : HTTPRes.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTPServ.P�����������������������������������������������������������������0100644�0000764�0000144�00000015407�07405521055�016527� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTPServ.lo HTTPServ.o : HTTPServ.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTHeader.h \ HTMIMERq.h HTNetMan.h HTTPUtil.h HTTPRes.h HTTPServ.h HTTPServ.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTHeader.h : HTMIMERq.h : HTNetMan.h : HTTPUtil.h : HTTPRes.h : HTTPServ.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTPEP.P��������������������������������������������������������������������0100644�0000764�0000144�00000015173�07405521056�015771� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTPEP.lo HTPEP.o : HTPEP.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTPEP.h HTPEP.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTPEP.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTNDir.P�������������������������������������������������������������������0100644�0000764�0000144�00000015631�07405521061�016174� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTNDir.lo HTNDir.o : HTNDir.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWHTML.h \ HTMLPDTD.h SGML.h HTMLGen.h HTTeXGen.h HTPlain.h HTML.h HText.h \ HTHInit.h WWWLib.h HTStyle.h HTNews.h HTNewsLs.h HTNDir.h HTNDir.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWHTML.h : HTMLPDTD.h : SGML.h : HTMLGen.h : HTTeXGen.h : HTPlain.h : HTML.h : HText.h : HTHInit.h : WWWLib.h : HTStyle.h : HTNews.h : HTNewsLs.h : HTNDir.h : �������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTNews.P�������������������������������������������������������������������0100644�0000764�0000144�00000016357�07405521063�016264� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTNews.lo HTNews.o : HTNews.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWStream.h \ HTConLen.h HTFWrite.h HTFSave.h HTGuess.h HTTee.h HTMerge.h HTSChunk.h \ HTXParse.h HTReader.h HTEPtoCl.h HTNetTxt.h WWWTrans.h HTANSI.h \ HTLocal.h HTTCP.h HTSocket.h HTWriter.h HTBufWrt.h HTReqMan.h \ HTAABrow.h HTMIMPrs.h HTHeader.h HTNewsRq.h HTAccess.h HTNewsLs.h \ HTNews.h HTNews.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWStream.h : HTConLen.h : HTFWrite.h : HTFSave.h : HTGuess.h : HTTee.h : HTMerge.h : HTSChunk.h : HTXParse.h : HTReader.h : HTEPtoCl.h : HTNetTxt.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTWriter.h : HTBufWrt.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTNewsRq.h : HTAccess.h : HTNewsLs.h : HTNews.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTNewsLs.P�����������������������������������������������������������������0100644�0000764�0000144�00000015271�07405521064�016556� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTNewsLs.lo HTNewsLs.o : HTNewsLs.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTNDir.h HTNews.h \ HTNewsLs.h HTNewsLs.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTNDir.h : HTNews.h : HTNewsLs.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTNewsRq.P�����������������������������������������������������������������0100644�0000764�0000144�00000015441�07405521065�016562� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTNewsRq.lo HTNewsRq.o : HTNewsRq.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTReqMan.h \ HTAABrow.h HTMIMPrs.h HTHeader.h HTMIMERq.h HTNewsRq.h HTAccess.h HTNewsRq.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTMIMERq.h : HTNewsRq.h : HTAccess.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTTelnet.P�����������������������������������������������������������������0100644�0000764�0000144�00000015251�07405521067�016577� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTelnet.lo HTTelnet.o : HTTelnet.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTTelnet.h \ HTNetMan.h HTTelnet.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTTelnet.h : HTNetMan.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMLPDTD.P�����������������������������������������������������������������0100644�0000764�0000144�00000013637�07405521070�016330� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMLPDTD.lo HTMLPDTD.o : HTMLPDTD.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTMLPDTD.h HTStruct.h HTStream.h HTList.h HTArray.h SGML.h HTMLPDTD.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTMLPDTD.h : HTStruct.h : HTStream.h : HTList.h : HTArray.h : SGML.h : �������������������������������������������������������������������������������������������������libwww/Library/src/.deps/SGML.P���������������������������������������������������������������������0100644�0000764�0000144�00000013727�07405521072�015654� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SGML.lo SGML.o : SGML.c /usr/include/assert.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTString.h HTChunk.h SGML.h HTStream.h HTList.h HTArray.h \ HTStruct.h SGML.c : /usr/include/assert.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTString.h : HTChunk.h : SGML.h : HTStream.h : HTList.h : HTArray.h : HTStruct.h : �����������������������������������������libwww/Library/src/.deps/HTMLGen.P������������������������������������������������������������������0100644�0000764�0000144�00000014665�07405521073�016313� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMLGen.lo HTMLGen.o : HTMLGen.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTMLPDTD.h HTStruct.h HTStream.h HTList.h HTArray.h SGML.h \ HTFormat.h HTAtom.h HTAnchor.h WWWUtil.h HTAssoc.h HTChunk.h HTString.h \ HTUU.h HTLink.h HTMethod.h HTResponse.h HTEvent.h HTReq.h HTError.h \ HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h \ HTDNS.h HTUser.h HTMLGen.h HTMLGen.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTMLPDTD.h : HTStruct.h : HTStream.h : HTList.h : HTArray.h : SGML.h : HTFormat.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTAssoc.h : HTChunk.h : HTString.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTMLGen.h : ���������������������������������������������������������������������������libwww/Library/src/.deps/HTTeXGen.P�����������������������������������������������������������������0100644�0000764�0000144�00000014673�07405521074�016503� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTTeXGen.lo HTTeXGen.o : HTTeXGen.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTTeXGen.h HTStruct.h HTStream.h HTList.h HTArray.h \ HTFormat.h HTAtom.h HTAnchor.h WWWUtil.h HTAssoc.h HTChunk.h HTString.h \ HTUU.h HTLink.h HTMethod.h HTResponse.h HTEvent.h HTReq.h HTError.h \ HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h \ HTDNS.h HTUser.h HTMLPDTD.h SGML.h HTTeXGen.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTTeXGen.h : HTStruct.h : HTStream.h : HTList.h : HTArray.h : HTFormat.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTAssoc.h : HTChunk.h : HTString.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTMLPDTD.h : SGML.h : ���������������������������������������������������������������������libwww/Library/src/.deps/HTPlain.P������������������������������������������������������������������0100644�0000764�0000144�00000014665�07405521075�016416� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTPlain.lo HTPlain.o : HTPlain.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTStyle.h HTPlain.h HTFormat.h HTStream.h HTList.h HTArray.h \ HTAtom.h HTAnchor.h WWWUtil.h HTAssoc.h HTChunk.h HTString.h HTUU.h \ HTLink.h HTMethod.h HTResponse.h HTEvent.h HTReq.h HTError.h HTNet.h \ HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h \ HTUser.h HTextImp.h HText.h HTPlain.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTStyle.h : HTPlain.h : HTFormat.h : HTStream.h : HTList.h : HTArray.h : HTAtom.h : HTAnchor.h : WWWUtil.h : HTAssoc.h : HTChunk.h : HTString.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTextImp.h : HText.h : ���������������������������������������������������������������������������libwww/Library/src/.deps/HTML.P���������������������������������������������������������������������0100644�0000764�0000144�00000015551�07405521077�015660� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTML.lo HTML.o : HTML.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWHTML.h \ HTMLPDTD.h SGML.h HTMLGen.h HTTeXGen.h HTPlain.h HTML.h HText.h \ HTHInit.h WWWLib.h HTStyle.h HTextImp.h HTML.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWHTML.h : HTMLPDTD.h : SGML.h : HTMLGen.h : HTTeXGen.h : HTPlain.h : HTML.h : HText.h : HTHInit.h : WWWLib.h : HTStyle.h : HTextImp.h : �������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HText.P��������������������������������������������������������������������0100644�0000764�0000144�00000015223�07405521100�016127� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HText.lo HText.o : HText.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HText.h HTextImp.h HText.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HText.h : HTextImp.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTHInit.P������������������������������������������������������������������0100644�0000764�0000144�00000015433�07405521101�016346� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTHInit.lo HTHInit.o : HTHInit.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTHInit.h WWWLib.h \ HTML.h HTMLPDTD.h SGML.h HTPlain.h HTTeXGen.h HTMLGen.h HTHInit.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTHInit.h : WWWLib.h : HTML.h : HTMLPDTD.h : SGML.h : HTPlain.h : HTTeXGen.h : HTMLGen.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTStyle.P������������������������������������������������������������������0100644�0000764�0000144�00000013733�07405521101�016434� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTStyle.lo HTStyle.o : HTStyle.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h HTStyle.h HTStyle.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTStyle.h : �������������������������������������libwww/Library/src/.deps/HTAccess.P�����������������������������������������������������������������0100644�0000764�0000144�00000016073�07405521104�016540� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTAccess.lo HTAccess.o : HTAccess.c WWWUtil.h wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h HTString.h \ HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h HTFormat.h \ HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h HTError.h \ HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h HTTimer.h \ HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h HTAlert.h \ HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWStream.h HTConLen.h \ HTFWrite.h HTFSave.h HTGuess.h HTTee.h HTMerge.h HTSChunk.h HTXParse.h \ HTReader.h HTEPtoCl.h HTNetTxt.h HTProxy.h HTRules.h HTReqMan.h \ HTAABrow.h HTMIMPrs.h HTHeader.h HTAccess.h HTAccess.c : WWWUtil.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWStream.h : HTConLen.h : HTFWrite.h : HTFSave.h : HTGuess.h : HTTee.h : HTMerge.h : HTSChunk.h : HTXParse.h : HTReader.h : HTEPtoCl.h : HTNetTxt.h : HTProxy.h : HTRules.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTAccess.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTDialog.P�����������������������������������������������������������������0100644�0000764�0000144�00000016171�07405521106�016537� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTDialog.lo HTDialog.o : HTDialog.c WWWLib.h wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWApp.h HTEvtLst.h \ HTHome.h HTDialog.h HTAccess.h HTRules.h HTProxy.h HTFilter.h HTLog.h \ HTHist.h WWWHTTP.h HTTPUtil.h HTTP.h HTTPServ.h HTTPGen.h HTTPReq.h \ HTTPRes.h HTTChunk.h HTPEP.h HTAAUtil.h HTAABrow.h HTCookie.h HTDialog.c : WWWLib.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWApp.h : HTEvtLst.h : HTHome.h : HTDialog.h : HTAccess.h : HTRules.h : HTProxy.h : HTFilter.h : HTLog.h : HTHist.h : WWWHTTP.h : HTTPUtil.h : HTTP.h : HTTPServ.h : HTTPGen.h : HTTPReq.h : HTTPRes.h : HTTChunk.h : HTPEP.h : HTAAUtil.h : HTAABrow.h : HTCookie.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTEvtLst.P�����������������������������������������������������������������0100644�0000764�0000144�00000015361�07405521110�016554� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTEvtLst.lo HTEvtLst.o : HTEvtLst.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTReqMan.h \ HTAABrow.h HTMIMPrs.h HTHeader.h HTEvtLst.h HTEvtLst.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTReqMan.h : HTAABrow.h : HTMIMPrs.h : HTHeader.h : HTEvtLst.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTFilter.P�����������������������������������������������������������������0100644�0000764�0000144�00000016073�07405521111�016562� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTFilter.lo HTFilter.o : HTFilter.c WWWLib.h wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWCache.h \ HTCache.h WWWHTTP.h HTTPUtil.h HTTP.h HTTPServ.h HTTPGen.h HTTPReq.h \ HTTPRes.h HTTChunk.h HTPEP.h HTAAUtil.h HTAABrow.h HTCookie.h HTLog.h \ HTAccess.h HTProxy.h HTRules.h HTFilter.h HTFilter.c : WWWLib.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWCache.h : HTCache.h : WWWHTTP.h : HTTPUtil.h : HTTP.h : HTTPServ.h : HTTPGen.h : HTTPReq.h : HTTPRes.h : HTTChunk.h : HTPEP.h : HTAAUtil.h : HTAABrow.h : HTCookie.h : HTLog.h : HTAccess.h : HTProxy.h : HTRules.h : HTFilter.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTHist.P�������������������������������������������������������������������0100644�0000764�0000144�00000014553�07405521112�016246� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTHist.lo HTHist.o : HTHist.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h HTUtils.h \ HTMemory.h HTAnchor.h WWWUtil.h HTArray.h HTAssoc.h HTList.h HTAtom.h \ HTChunk.h HTString.h HTUU.h HTLink.h HTMethod.h HTResponse.h HTEvent.h \ HTReq.h HTFormat.h HTStream.h HTError.h HTNet.h HTTrans.h HTIOStream.h \ HTChannl.h HTHost.h HTProt.h HTTimer.h HTDNS.h HTUser.h HTHist.h HTHist.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : HTUtils.h : HTMemory.h : HTAnchor.h : WWWUtil.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : HTLink.h : HTMethod.h : HTResponse.h : HTEvent.h : HTReq.h : HTFormat.h : HTStream.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTUser.h : HTHist.h : �����������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTInit.P�������������������������������������������������������������������0100644�0000764�0000144�00000021217�07405521114�016237� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTInit.lo HTInit.o : HTInit.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTInit.h WWWLib.h \ WWWApp.h HTEvtLst.h HTHome.h HTDialog.h HTAccess.h HTRules.h HTProxy.h \ HTFilter.h HTLog.h HTHist.h WWWTrans.h HTANSI.h HTLocal.h HTTCP.h \ HTSocket.h HTReader.h HTWriter.h HTBufWrt.h WWWHTTP.h HTTPUtil.h HTTP.h \ HTTPServ.h HTTPGen.h HTTPReq.h HTTPRes.h HTTChunk.h HTPEP.h HTAAUtil.h \ HTAABrow.h HTCookie.h WWWFile.h HTFile.h HTMulti.h HTBind.h HTBInit.h \ WWWFTP.h HTFTP.h HTFTPDir.h WWWGophe.h HTGopher.h WWWTelnt.h HTTelnet.h \ WWWNews.h HTNews.h HTNewsRq.h HTNewsLs.h HTNDir.h WWWMIME.h HTMIME.h \ HTHeader.h HTMIMERq.h HTMIMImp.h HTBound.h HTMulpar.h WWWHTML.h \ HTMLPDTD.h SGML.h HTMLGen.h HTTeXGen.h HTPlain.h HTML.h HText.h \ HTHInit.h HTStyle.h WWWStream.h HTConLen.h HTFWrite.h HTFSave.h \ HTGuess.h HTTee.h HTMerge.h HTSChunk.h HTXParse.h HTEPtoCl.h HTNetTxt.h \ WWWDir.h HTDir.h HTIcons.h HTDescpt.h WWWCache.h HTCache.h WWWXML.h \ HTXML.h ../../modules/expat/xmlparse/xmlparse.h HTRDF.h HTHash.h \ WWWZip.h HTZip.h HTInit.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTInit.h : WWWLib.h : WWWApp.h : HTEvtLst.h : HTHome.h : HTDialog.h : HTAccess.h : HTRules.h : HTProxy.h : HTFilter.h : HTLog.h : HTHist.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : WWWHTTP.h : HTTPUtil.h : HTTP.h : HTTPServ.h : HTTPGen.h : HTTPReq.h : HTTPRes.h : HTTChunk.h : HTPEP.h : HTAAUtil.h : HTAABrow.h : HTCookie.h : WWWFile.h : HTFile.h : HTMulti.h : HTBind.h : HTBInit.h : WWWFTP.h : HTFTP.h : HTFTPDir.h : WWWGophe.h : HTGopher.h : WWWTelnt.h : HTTelnet.h : WWWNews.h : HTNews.h : HTNewsRq.h : HTNewsLs.h : HTNDir.h : WWWMIME.h : HTMIME.h : HTHeader.h : HTMIMERq.h : HTMIMImp.h : HTBound.h : HTMulpar.h : WWWHTML.h : HTMLPDTD.h : SGML.h : HTMLGen.h : HTTeXGen.h : HTPlain.h : HTML.h : HText.h : HTHInit.h : HTStyle.h : WWWStream.h : HTConLen.h : HTFWrite.h : HTFSave.h : HTGuess.h : HTTee.h : HTMerge.h : HTSChunk.h : HTXParse.h : HTEPtoCl.h : HTNetTxt.h : WWWDir.h : HTDir.h : HTIcons.h : HTDescpt.h : WWWCache.h : HTCache.h : WWWXML.h : HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : HTRDF.h : HTHash.h : WWWZip.h : HTZip.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTHome.P�������������������������������������������������������������������0100644�0000764�0000144�00000015225�07405521115�016227� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTHome.lo HTHome.o : HTHome.c WWWLib.h wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTHome.h HTHome.c : WWWLib.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTHome.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTLog.P��������������������������������������������������������������������0100644�0000764�0000144�00000015217�07405521116�016062� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTLog.lo HTLog.o : HTLog.c WWWLib.h wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTLog.h HTLog.c : WWWLib.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTLog.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTProxy.P������������������������������������������������������������������0100644�0000764�0000144�00000016171�07405521117�016463� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTProxy.lo HTProxy.o : HTProxy.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWHTTP.h \ HTTPUtil.h HTTP.h HTTPServ.h HTTPGen.h HTTPReq.h HTTPRes.h HTTChunk.h \ HTPEP.h HTAAUtil.h HTAABrow.h HTCookie.h WWWLib.h WWWApp.h HTEvtLst.h \ HTHome.h HTDialog.h HTAccess.h HTRules.h HTProxy.h HTFilter.h HTLog.h \ HTHist.h HTProxy.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWHTTP.h : HTTPUtil.h : HTTP.h : HTTPServ.h : HTTPGen.h : HTTPReq.h : HTTPRes.h : HTTChunk.h : HTPEP.h : HTAAUtil.h : HTAABrow.h : HTCookie.h : WWWLib.h : WWWApp.h : HTEvtLst.h : HTHome.h : HTDialog.h : HTAccess.h : HTRules.h : HTProxy.h : HTFilter.h : HTLog.h : HTHist.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTRules.P������������������������������������������������������������������0100644�0000764�0000144�00000015437�07405521121�016433� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTRules.lo HTRules.o : HTRules.c WWWLib.h wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWFile.h HTFile.h \ HTMulti.h HTBind.h HTBInit.h HTProxy.h HTRules.h HTRules.c : WWWLib.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWFile.h : HTFile.h : HTMulti.h : HTBind.h : HTBInit.h : HTProxy.h : HTRules.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTProfil.P�����������������������������������������������������������������0100644�0000764�0000144�00000021305�07405521123�016565� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTProfil.lo HTProfil.o : HTProfil.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWCache.h \ HTCache.h WWWLib.h WWWStream.h HTConLen.h HTFWrite.h HTFSave.h \ HTGuess.h HTTee.h HTMerge.h HTSChunk.h HTXParse.h HTReader.h HTEPtoCl.h \ HTNetTxt.h HTInit.h WWWApp.h HTEvtLst.h HTHome.h HTDialog.h HTAccess.h \ HTRules.h HTProxy.h HTFilter.h HTLog.h HTHist.h WWWTrans.h HTANSI.h \ HTLocal.h HTTCP.h HTSocket.h HTWriter.h HTBufWrt.h WWWHTTP.h HTTPUtil.h \ HTTP.h HTTPServ.h HTTPGen.h HTTPReq.h HTTPRes.h HTTChunk.h HTPEP.h \ HTAAUtil.h HTAABrow.h HTCookie.h WWWFile.h HTFile.h HTMulti.h HTBind.h \ HTBInit.h WWWFTP.h HTFTP.h HTFTPDir.h WWWGophe.h HTGopher.h WWWTelnt.h \ HTTelnet.h WWWNews.h HTNews.h HTNewsRq.h HTNewsLs.h HTNDir.h WWWMIME.h \ HTMIME.h HTHeader.h HTMIMERq.h HTMIMImp.h HTBound.h HTMulpar.h \ WWWHTML.h HTMLPDTD.h SGML.h HTMLGen.h HTTeXGen.h HTPlain.h HTML.h \ HText.h HTHInit.h HTStyle.h WWWDir.h HTDir.h HTIcons.h HTDescpt.h \ WWWXML.h HTXML.h ../../modules/expat/xmlparse/xmlparse.h HTRDF.h \ HTHash.h WWWZip.h HTZip.h HTProfil.h WWWInit.h HTProfil.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWCache.h : HTCache.h : WWWLib.h : WWWStream.h : HTConLen.h : HTFWrite.h : HTFSave.h : HTGuess.h : HTTee.h : HTMerge.h : HTSChunk.h : HTXParse.h : HTReader.h : HTEPtoCl.h : HTNetTxt.h : HTInit.h : WWWApp.h : HTEvtLst.h : HTHome.h : HTDialog.h : HTAccess.h : HTRules.h : HTProxy.h : HTFilter.h : HTLog.h : HTHist.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTWriter.h : HTBufWrt.h : WWWHTTP.h : HTTPUtil.h : HTTP.h : HTTPServ.h : HTTPGen.h : HTTPReq.h : HTTPRes.h : HTTChunk.h : HTPEP.h : HTAAUtil.h : HTAABrow.h : HTCookie.h : WWWFile.h : HTFile.h : HTMulti.h : HTBind.h : HTBInit.h : WWWFTP.h : HTFTP.h : HTFTPDir.h : WWWGophe.h : HTGopher.h : WWWTelnt.h : HTTelnet.h : WWWNews.h : HTNews.h : HTNewsRq.h : HTNewsLs.h : HTNDir.h : WWWMIME.h : HTMIME.h : HTHeader.h : HTMIMERq.h : HTMIMImp.h : HTBound.h : HTMulpar.h : WWWHTML.h : HTMLPDTD.h : SGML.h : HTMLGen.h : HTTeXGen.h : HTPlain.h : HTML.h : HText.h : HTHInit.h : HTStyle.h : WWWDir.h : HTDir.h : HTIcons.h : HTDescpt.h : WWWXML.h : HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : HTRDF.h : HTHash.h : WWWZip.h : HTZip.h : HTProfil.h : WWWInit.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTDemux.P������������������������������������������������������������������0100644�0000764�0000144�00000015277�07405521124�016430� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTDemux.lo HTDemux.o : HTDemux.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTMuxHeader.h \ HTMuxCh.h HTDemux.h HTDemux.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTMuxHeader.h : HTMuxCh.h : HTDemux.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMuxCh.P������������������������������������������������������������������0100644�0000764�0000144�00000016223�07405521126�016364� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMuxCh.lo HTMuxCh.o : HTMuxCh.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWTrans.h HTANSI.h \ HTLocal.h HTTCP.h HTSocket.h HTReader.h HTWriter.h HTBufWrt.h \ WWWStream.h HTConLen.h HTFWrite.h HTFSave.h HTGuess.h HTTee.h HTMerge.h \ HTSChunk.h HTXParse.h HTEPtoCl.h HTNetTxt.h HTMuxTx.h HTMuxHeader.h \ HTDemux.h HTMuxCh.h HTMuxCh.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : WWWStream.h : HTConLen.h : HTFWrite.h : HTFSave.h : HTGuess.h : HTTee.h : HTMerge.h : HTSChunk.h : HTXParse.h : HTEPtoCl.h : HTNetTxt.h : HTMuxTx.h : HTMuxHeader.h : HTDemux.h : HTMuxCh.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTMuxTx.P������������������������������������������������������������������0100644�0000764�0000144�00000015567�07405521127�016440� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTMuxTx.lo HTMuxTx.o : HTMuxTx.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWTrans.h HTANSI.h \ HTLocal.h HTTCP.h HTSocket.h HTReader.h HTWriter.h HTBufWrt.h \ HTMuxHeader.h HTMuxCh.h HTMuxTx.h HTMuxTx.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : HTMuxHeader.h : HTMuxCh.h : HTMuxTx.h : �����������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTRDF.P��������������������������������������������������������������������0100644�0000764�0000144�00000021271�07405521134�015751� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTRDF.lo HTRDF.o : HTRDF.c WWWLib.h wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h WWWInit.h HTInit.h \ WWWApp.h HTEvtLst.h HTHome.h HTDialog.h HTAccess.h HTRules.h HTProxy.h \ HTFilter.h HTLog.h HTHist.h WWWTrans.h HTANSI.h HTLocal.h HTTCP.h \ HTSocket.h HTReader.h HTWriter.h HTBufWrt.h WWWHTTP.h HTTPUtil.h HTTP.h \ HTTPServ.h HTTPGen.h HTTPReq.h HTTPRes.h HTTChunk.h HTPEP.h HTAAUtil.h \ HTAABrow.h HTCookie.h WWWFile.h HTFile.h HTMulti.h HTBind.h HTBInit.h \ WWWFTP.h HTFTP.h HTFTPDir.h WWWGophe.h HTGopher.h WWWTelnt.h HTTelnet.h \ WWWNews.h HTNews.h HTNewsRq.h HTNewsLs.h HTNDir.h WWWMIME.h HTMIME.h \ HTHeader.h HTMIMERq.h HTMIMImp.h HTBound.h HTMulpar.h WWWHTML.h \ HTMLPDTD.h SGML.h HTMLGen.h HTTeXGen.h HTPlain.h HTML.h HText.h \ HTHInit.h HTStyle.h WWWStream.h HTConLen.h HTFWrite.h HTFSave.h \ HTGuess.h HTTee.h HTMerge.h HTSChunk.h HTXParse.h HTEPtoCl.h HTNetTxt.h \ WWWDir.h HTDir.h HTIcons.h HTDescpt.h WWWCache.h HTCache.h WWWXML.h \ HTXML.h ../../modules/expat/xmlparse/xmlparse.h HTRDF.h HTHash.h \ WWWZip.h HTZip.h HTProfil.h HTRDF.c : WWWLib.h : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : WWWInit.h : HTInit.h : WWWApp.h : HTEvtLst.h : HTHome.h : HTDialog.h : HTAccess.h : HTRules.h : HTProxy.h : HTFilter.h : HTLog.h : HTHist.h : WWWTrans.h : HTANSI.h : HTLocal.h : HTTCP.h : HTSocket.h : HTReader.h : HTWriter.h : HTBufWrt.h : WWWHTTP.h : HTTPUtil.h : HTTP.h : HTTPServ.h : HTTPGen.h : HTTPReq.h : HTTPRes.h : HTTChunk.h : HTPEP.h : HTAAUtil.h : HTAABrow.h : HTCookie.h : WWWFile.h : HTFile.h : HTMulti.h : HTBind.h : HTBInit.h : WWWFTP.h : HTFTP.h : HTFTPDir.h : WWWGophe.h : HTGopher.h : WWWTelnt.h : HTTelnet.h : WWWNews.h : HTNews.h : HTNewsRq.h : HTNewsLs.h : HTNDir.h : WWWMIME.h : HTMIME.h : HTHeader.h : HTMIMERq.h : HTMIMImp.h : HTBound.h : HTMulpar.h : WWWHTML.h : HTMLPDTD.h : SGML.h : HTMLGen.h : HTTeXGen.h : HTPlain.h : HTML.h : HText.h : HTHInit.h : HTStyle.h : WWWStream.h : HTConLen.h : HTFWrite.h : HTFSave.h : HTGuess.h : HTTee.h : HTMerge.h : HTSChunk.h : HTXParse.h : HTEPtoCl.h : HTNetTxt.h : WWWDir.h : HTDir.h : HTIcons.h : HTDescpt.h : WWWCache.h : HTCache.h : WWWXML.h : HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : HTRDF.h : HTHash.h : WWWZip.h : HTZip.h : HTProfil.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/src/.deps/HTXML.P��������������������������������������������������������������������0100644�0000764�0000144�00000015321�07405521135�015776� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTXML.lo HTXML.o : HTXML.c wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h WWWUtil.h \ HTUtils.h HTMemory.h HTArray.h HTAssoc.h HTList.h HTAtom.h HTChunk.h \ HTString.h HTUU.h WWWCore.h HTLib.h HTUser.h HTReq.h HTEvent.h \ HTFormat.h HTStream.h HTAnchor.h HTLink.h HTMethod.h HTResponse.h \ HTError.h HTNet.h HTTrans.h HTIOStream.h HTChannl.h HTHost.h HTProt.h \ HTTimer.h HTDNS.h HTParse.h HTEscape.h HTUTree.h HTWWWStr.h HTMemLog.h \ HTAlert.h HTStruct.h HTNoFree.h HTInet.h HTHstMan.h HTXML.h \ ../../modules/expat/xmlparse/xmlparse.h HTXML.c : wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : WWWUtil.h : HTUtils.h : HTMemory.h : HTArray.h : HTAssoc.h : HTList.h : HTAtom.h : HTChunk.h : HTString.h : HTUU.h : WWWCore.h : HTLib.h : HTUser.h : HTReq.h : HTEvent.h : HTFormat.h : HTStream.h : HTAnchor.h : HTLink.h : HTMethod.h : HTResponse.h : HTError.h : HTNet.h : HTTrans.h : HTIOStream.h : HTChannl.h : HTHost.h : HTProt.h : HTTimer.h : HTDNS.h : HTParse.h : HTEscape.h : HTUTree.h : HTWWWStr.h : HTMemLog.h : HTAlert.h : HTStruct.h : HTNoFree.h : HTInet.h : HTHstMan.h : HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Library/Makefile�����������������������������������������������������������������������������0100644�0000764�0000144�00000023603�07405520567�014633� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = src User Examples External cvs2sql # Test mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������libwww/Library/Makefile.in��������������������������������������������������������������������������0100644�0000764�0000144�00000023223�07405520524�015227� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = src User Examples External cvs2sql # Test mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Library/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Library distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Library/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/������������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520574�013260� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/CVS/��������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517376�013721� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/CVS/Root����������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517376�014565� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/CVS/Repository����������������������������������������������������������������������0100644�0000764�0000144�00000000020�07405517376�016010� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/CVS/Entries�������������������������������������������������������������������������0100644�0000764�0000144�00000000210�07405517376�015243� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.3/Thu Aug 8 12:36:01 1996// /Makefile.am/1.8/Sat Feb 7 23:59:42 1998// /Overview.html/1.34/Mon May 4 19:38:24 1998// D ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/CVS/Entries.Log���������������������������������������������������������������������0100644�0000764�0000144�00000000031�07405517377�015765� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/User//// A D/src//// �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/�������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520574�014176� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/CVS/���������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517376�014637� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/CVS/Root�����������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517376�015503� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/CVS/Repository�����������������������������������������������������������������0100644�0000764�0000144�00000000025�07405517376�016733� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/CVS/Entries��������������������������������������������������������������������0100644�0000764�0000144�00000001432�07405517376�016170� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.2/Thu Apr 18 01:42:06 1996// /AboutNewsServers.html/1.13/Sun Feb 16 18:44:04 1997// /CommandLine.html/1.21/Sun Mar 22 21:39:52 1998// /Commands.html/1.15/Mon Dec 9 03:25:56 1996// /Config.html/1.5/Mon Dec 9 03:25:59 1996// /Customisation.html/1.12/Mon Dec 9 03:26:01 1996// /EnvVariables.html/1.12/Sun Feb 16 18:44:05 1997// /Features.html/1.22/Thu Apr 23 00:30:09 1998// /Installation.html/1.15/Tue May 5 00:56:21 1998// /Installation_VMS.html/1.6/Sun Mar 10 21:55:16 1996// /Installation_VMS_NewTCP.html/1.10/Mon Dec 9 03:26:09 1996// /Internals.html/1.11/Sun Feb 16 18:44:07 1997// /Makefile.am/1.3/Fri Apr 12 17:50:42 1996// /NewsServer.html/1.8/Mon Dec 9 03:26:15 1996// /Overview.html/1.10/Sun May 3 19:49:57 1998// /QuickGuide.html/1.12/Mon Dec 9 03:26:21 1996// D ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/CVS/Entries.Log����������������������������������������������������������������0100644�0000764�0000144�00000000016�07405517376�016705� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/Patch//// ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Patch/�������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517377�015244� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Patch/CVS/���������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517377�015677� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Patch/CVS/Root�����������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517376�016542� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Patch/CVS/Repository�����������������������������������������������������������0100644�0000764�0000144�00000000033�07405517376�017771� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Patch �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Patch/CVS/Entries��������������������������������������������������������������0100644�0000764�0000144�00000000137�07405517377�017231� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Overview.html/1.18/Mon May 4 14:47:13 1998// /lmb_3.1_1.fix/1.1/Mon Oct 16 17:37:44 1995// D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Patch/Overview.html������������������������������������������������������������0100644�0000764�0000144�00000006123�06523352361�017725� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 25-Jan-1996 --> <TITLE>Known Bugs in Line Mode Browser</TITLE> </HEAD> <BODY> <P> <A HREF="/"><IMG BORDER="0" ALT="W3C" SRC="../../../Icons/WWW/w3c_home"></A> <A HREF="/"><IMG BORDER="0" ALT="LMB" SRC="../../../Icons/WWW/LMB48x"></A> <IMG BORDER="0" ALT="BUG" SRC="../../../Icons/WWW/Bug48x"> <H1> Known Bugs in Line Mode Browser </H1> <P> The list of known bugs are in reverse chronological order. Please report bugs or bug-fixes to <A HREF="mailto:libwww@w3.org">libwww@w3.org</A> noting the version of the Line Mode Browser and the Library and what caused the bug to appear. <PRE> ./www -version </PRE> <P> The provided patches are relative to the <CODE>WWW</CODE> directory in the distribution tree. In order to apply a patch, do the following in the <CODE>WWW</CODE> directory: <OL> <LI> Download the patch, for example <EM>lmb-1.fix</EM> <LI> Invoke the patch command by typing <PRE> patch &lt; lmb-1.fix </PRE> <LI> Rebuild the code by typing <PRE> make clobber ./BUILD linemode </PRE> </OL> <P> You should only apply patches under the section with <B>same</B> version number as your current version. You can see the current version of this software by looking into the version file. Please also make sure that this version is the same as for the <A HREF="../../../Library/">version of the W3C Sample Code Library</A> <P> <HR> <H2> Version 3.1 </H2> <DL> <DT> <A HREF="lmb_3.1_1.fix">Problem running from scripts or as a cron job</A> <DD> Version 3.1 of the Line Mode Browser registers STDIN as an channel for user input. If the browser is run as a cron job then STDIN comes from <CODE>/dev/null</CODE> which always returns ready for reading in a select call. Line Mode browser then thinks that the user has interrupted the request and exists. </DL> <H2> On the Wish list </H2> <DL> <DT> Better error reporting <DD> Difficult when many possible paths have been tried. Save log of attempts? Portability of error message generation? <DT> Command wanted: Append <DD> to a given file a hypertext reference to the document. <DT> Anchors in paper prints <DD> If the user needs to print out documents when following links, instead of inserting anchor numbers, insert page numbers of the destination nodes, as they would appear in the printed document. Do this by first following the links with no output on the screen, reading all the files into the buffer and calculating the page numbers. Then go through the path again, with output directed to the printer, inserting the corresponding page numbers rather than the anchor numbers. <DT> Deal with lists within lists <DD> This is a part of having a better HTML parser <DT> Style sheets <DD> Nested style sheets like everybody is asking for </DL> <P> <HR> <ADDRESS> <A HREF="/#BernersLee">Tim BL</A>, and <A HREF="/#Frystyk">Henrik Frystyk</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, October 1995 </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Patch/lmb_3.1_1.fix������������������������������������������������������������0100644�0000764�0000144�00000013110�06040514150�017274� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=================================================================== RCS file: /afs/w3.org/hypertext/WWW/LineMode/Repository/Implementation/HTBrowse.c,v retrieving revision 1.66 diff -c -r1.66 HTBrowse.c *** 1.66 2025/07/14 23:14:08 --- LineMode/Implementation/HTBrowse.c 2025/10/16 15:46:01 *************** *** 81,86 **** --- 81,88 ---- #define COM_HELP_FILE "http://www.w3.org/hypertext/WWW/LineMode/Defaults/CommandLine.html" #endif + #define C_HELP "http://www.w3.org/hypertext/WWW/LineMode/Defaults/Commands.html" + #ifndef DEFAULT_OUTPUT_FILE #define DEFAULT_OUTPUT_FILE "www-out" #endif *************** *** 188,193 **** --- 190,196 ---- PRIVATE int OldTraceFlag = SHOW_ALL_TRACE; PRIVATE BOOL Blocking = NO; /* Use multithreaded */ PRIVATE FILE * output = NULL; + PRIVATE int loadstat; #ifdef VMS #ifdef __DECC *************** *** 309,315 **** } #endif /* CATCH_SIG */ ! /* Display Help screen Help_screen ** ------------------- ** Produce a help screen, displaying the current document address and --- 312,318 ---- } #endif /* CATCH_SIG */ ! #if 0 /* Display Help screen Help_screen ** ------------------- ** Produce a help screen, displaying the current document address and *************** *** 400,406 **** printf("\n"); free(current_address); } /* End of help_screen */ ! /* Reference_List ** -------------- --- 403,409 ---- printf("\n"); free(current_address); } /* End of help_screen */ ! #endif /* Reference_List ** -------------- *************** *** 610,620 **** sprintf(msg, "The destination is already related to the source with a %s method, continue?", metstr); confirm = HTConfirm(msg); free(msg); ! } else ! HTAnchor_link((HTAnchor *) src, (HTAnchor *) dest, NULL, method); if (confirm) { *actreq = Thread_new(YES); /* This is the source */ status = HTCopyAnchor((HTAnchor *) src, *actreq); } free(this_addr); --- 613,624 ---- sprintf(msg, "The destination is already related to the source with a %s method, continue?", metstr); confirm = HTConfirm(msg); free(msg); ! } if (confirm) { *actreq = Thread_new(YES); /* This is the source */ + /* HTAnchor_removeAllLinks((HTAnchor *) src); */ + HTAnchor_link((HTAnchor *) src, (HTAnchor *) dest, NULL, method); status = HTCopyAnchor((HTAnchor *) src, *actreq); } free(this_addr); *************** *** 696,702 **** char * other_words; /* Second word and following */ BOOL is_index = HTAnchor_isIndex(HTMainAnchor); BOOL found = YES; ! int loadstat = HT_INTERNAL; if (!fgets(choice, RESPONSE_LENGTH, stdin)) /* Read User Input */ return EVENT_QUIT; /* Exit if EOF */ --- 700,706 ---- char * other_words; /* Second word and following */ BOOL is_index = HTAnchor_isIndex(HTMainAnchor); BOOL found = YES; ! loadstat = HT_INTERNAL; if (!fgets(choice, RESPONSE_LENGTH, stdin)) /* Read User Input */ return EVENT_QUIT; /* Exit if EOF */ *************** *** 817,828 **** break; case '?': ! help_screen(); break; case 'H': if (Check_User_Input("HELP")) { /* help menu, ..*/ ! help_screen(); /*!! or a keyword search ? */ } else if (Check_User_Input("HOME")) { /* back HOME */ if (!HTHistory_canBacktrack()) { HText_scrollTop(HTMainText); --- 821,836 ---- break; case '?': ! *actreq = Thread_new(YES); ! (*actreq)->BlockingIO = YES; ! loadstat = HTLoadAbsolute(MANUAL, *actreq); break; case 'H': if (Check_User_Input("HELP")) { /* help menu, ..*/ ! *actreq = Thread_new(YES); ! (*actreq)->BlockingIO = YES; ! loadstat = HTLoadAbsolute(C_HELP, *actreq); } else if (Check_User_Input("HOME")) { /* back HOME */ if (!HTHistory_canBacktrack()) { HText_scrollTop(HTMainText); *************** *** 1532,1539 **** /* Test of putting non-interactive mode into the event loop as well */ reqlist = HTList_new(); HTList_addObject(reqlist, (void *) request); ! HTEvent_RegisterTTY( STDIN_FILENO, request, (SockOps)FD_READ, ! NewEventHandler, 1) ; HTHistory_record((HTAnchor *) home_anchor); /* Setup history */ return_status = HTEventLoop(request, home_anchor, (keywords && *keywords) ? keywords : NULL); --- 1540,1553 ---- /* Test of putting non-interactive mode into the event loop as well */ reqlist = HTList_new(); HTList_addObject(reqlist, (void *) request); ! #ifdef STDIN_FILENO ! if (isatty(STDIN_FILENO)) { ! HTEvent_RegisterTTY(STDIN_FILENO, request, (SockOps)FD_READ, ! NewEventHandler, 1); ! } ! #else ! HTEvent_RegisterTTY(0, request, (SockOps)FD_READ, NewEventHandler, 1); ! #endif HTHistory_record((HTAnchor *) home_anchor); /* Setup history */ return_status = HTEventLoop(request, home_anchor, (keywords && *keywords) ? keywords : NULL); *************** *** 1572,1578 **** theEventState = EventHandler( &newrqp); if (theEventState == EVENT_TERM) ! theEventState = HTEventRequestTerminate( newrqp, theEventState) ; if (!HTEventCheckState( newrqp, theEventState)) /* returned EVENT_QUIT */ return HT_OK; else --- 1586,1592 ---- theEventState = EventHandler( &newrqp); if (theEventState == EVENT_TERM) ! theEventState = HTEventRequestTerminate( newrqp, loadstat); if (!HTEventCheckState( newrqp, theEventState)) /* returned EVENT_QUIT */ return HT_OK; else ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/.cvsignore���������������������������������������������������������������������0100644�0000764�0000144�00000000025�06135316756�016174� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile Makefile.in �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/AboutNewsServers.html����������������������������������������������������������0100644�0000764�0000144�00000011770�06301652564�020347� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 14-Oct-1995 --> <NEXTID N="z2"> <TITLE>How News servers work, and how to find one</TITLE> </HEAD> <BODY> <P> <A HREF="/"></A> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <H1> About news servers and NNTP </H1> <P> This explains what an NNTP server is, and why if you haven't got one you can't just use someone else's. <H2> How news is distributed </H2> <P> Internet news, (or "Usenet news"), is distributed using a completely different protocol to either electronic mail or normal W3 "HTTP" servers. The Network News Transfer Protocol "NNTP" has the effect of broadcasting every message to (basically) every site, in contrast to email protocols which send messages to specific sites, and HTTP, which only transfers the information on demand by the reader. <P> An NNTP server is set up by its system manager to know about some (at least one) nearby servers. With these servers, there is an arrangement that they will pass news to each other. Sometimes this arrangement is limited to certain news groups. Articles can be passed in both directions, and the servers compare article message-id headers to see whether they have any new news for each other. <P> (There are other protocols for communicating between servers, over dial-up lines for example, when there is no Internet connectivity. That is why there are many people who have no access to Internet can read and post news.) <H2> Running an NNTP server </H2> <P> An NNTP server manager decides which parts of the news group hierarchy he will take, and finds another server administrator who is willing to feed news to him: his "news feed". Many administrators for example exclude the "alt.*" groups. The decision to take NNTP news involves allocating a lot of disk space to keep all the articles until they expire (typically in a few weeks). Some organizations feel it is an inappropriate use of their machines to store articles on strange topics. This is why, even if you do have a news server, you may not have access to some groups. <P> Sometimes there are conditions attached to the news feed, which forbid for example commercial use being made of the data, or it being passed on by any other way than NNTP. <P> NNTP is much more efficient than HTTP for the case of articles which are going to be very widely read, because an article is only transferred once onto each site. Then, someone reads it, the WWW client only has to retrieve it from the local server, and not from the server where it started. NNTP servers will only allow local clients to access them directly, as to allow everyone in the world to access the same NNTP server would destroy this efficiency, and could lead to disastrous loads on the net and on that server. This is why you can't use just anyone's NNTP server. We get a lot of queries asking whether people can use ours. Sorry, you can't. <P> It may be that on your site there is already an NNTP server. Smart sites just give it an alias "news". If anyone on your site is reading Internet news then you could find how they have configured their new reader. <P> If you don't have an NNTP server on site, then someone is going to have to install it and arrange for a news feed from somewhere close. <P> When you have found one, then <A HREF="NewsServer.html" NAME="z1"><A HREF="NewsServer.html" NAME="z1">configure your WWW client to use it.</A></A> <H2> An alternative </H2> <P> If you really can't, for some reason, run an NNTP server on your site, you may find a friendly nearby site which will run an HTTP/NNTP gateway for you. This means running the cern_httpd with a small configuration file which allows anyone (or rather, anyone in your domain) to use it as a proxy for news: URLs. That is easy. Then, you configure your client to use that proxy for news. That should be easy too. The disadvantage is that you can't currently post news through the proxy. <H2> Exception </H2> <P> There are some specialist news groups which are set up locally, and which it is not worth distributing via the general system. In this case, the administrators, instead of feeding the news into the NNTP network, just enable clients to connect from anywhere. <P> This doesn't scale very well, and in fact it would be more appropriate for them to run an HTTP server (or run an NNTP server and a server such as cern_httpd running as an HTTP/NNTP gateway). However, for these specialist groups, a URL of the form <PRE> nntp://host.dom.ain/news.group </PRE> <P> has been defined and will be available in future releases of the <A HREF="/">W3C Sample Code Library</A> version 3.0 or later. <P> <HR> <ADDRESS> <A HREF="/#BernersLee">Tim BL</A>, and <A HREF="/#Frystyk">Henrik Frystyk</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, <P> @(#) $Id: AboutNewsServers.html,v 1.13 2025/02/16 18:44:04 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������libwww/LineMode/User/CommandLine.html���������������������������������������������������������������0100644�0000764�0000144�00000024555�06505302450�017251� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 29-Jan-1996 --> <NEXTID N="z29"> <TITLE>Command Line Syntax for the Line Mode browser</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x" WIDTH="48" HEIGHT="48" BORDER="0"></A> <IMG BORDER="0" ALT="MANUAL" SRC="../../Icons/WWW/doc48x"> <H1> Command Line Syntax </H1> <P> The generic syntax is: <PRE> www [ <A HREF="#z19" NAME="z20">options</A> ] [ <A HREF="#z16"NAME="z14">docaddress</A> [ <A HREF="#z17" NAME="z18">keywords</A> ]] </PRE> <P> <IMG BORDER="0" SRC="../../Icons/32x32/caution" ALT="NOTE"> Please note that some of the command line options have been moved to the new <A HREF="../../ComLine/">Command Line Tool</A>. <P> With no arguments, and if the <A HREF="../../resources.html" >Line Mode Browser</A> has not been <A HREF="Customisation.html">customized</A> then it automatically tries the following locations: <OL> <LI> ~/WWW/default.html <LI> /usr/local/lib/WWW/default.html <LI> http://www.w3.org/ </OL> <H2> <A NAME="z19">Options</A> </H2> <P> The order of the options is not important and options can in fact be specified on either side of any <A HREF="#z16"NAME="z14">docaddress</A>. Currently available options are:- <H3> Getting Help </H3> <DL> <DT> <B>-help</B> or <B>-?</B> <DD> Load this file from directly into the browser <DT> <B>-v [ a | b | c | g | p | s | t | u ] </B> <DD> Verbose mode: Gives a running commentary on the program's attempts to read data in various ways. This can also be turned on and off during normal execution, see <A HREF="Commands.html" NAME="z21">Existing Commands</A>. As the amount of verbose output from the Browser and the Library is substantial, the <CODE>-v</CODE> option can now be followed by zero, one or more of the following flags (without space) in order to differentiate the verbose output generated: <UL> <LI> <B>a</B>: Anchor relevant information <LI> <B>b</B>: Bindings to local file system <LI> <B>c</B>: Cache trace <LI> <B>g</B>: SGML trace <LI> <B>p</B>: Protocol module information <LI> <B>s</B>: SGML/HTML relevant information <LI> <B>t</B>: Thread trace <LI> <B>u</B>: URI relevant information </UL> <P> The <CODE>-v</CODE> option without any appended options shows all trace messages. An example is <PRE> -vpt </PRE> <P> showing <EM>thread</EM> and <EM>protocol</EM> trace messages <DT> <B>-version</B> <DD> Prints out the version number of the software, and the version number of the WWW library, and exits. </DL> <H3> Main Modes of execution </H3> <DL> <DT> <B>-</B> <DD> A minus sign with no trailing characters indicates that the program will accept<A HREF="/"> HTML format</A> input from the standard input. This allows www to be used as a filter from html to plain text for example. Relative links in the input are parsed as though the address of the document was that of the home page (or docaddress if specified). Implies non-interactive mode. <DT> <B>-h</B> host <DD> Establish a telnet connection to the remote host specified. This implies a "secure mode" execution where all references to the local file system are canceled. <DT> <B>-listrefs</B> <DD> Adds a list of the addresses of all documents references to the end of the HTML file. This mode forces non-interactive mode. <DT> <B>-n</B> <DD> Non-interactive mode. Outputs the formatted document to the standard output, then exits. Pages are delimited with form feed (FF) characters. <DT> <B>-o</B> [ file ] <DD> Redirects output to specified file. The default value is "www-out". This mode forced non-interactive mode <DT> <A NAME="single"><B>-single</B></A> <DD> Singlethreaded mode. If this flag is set then the browser uses blocking, non interruptible I/O in interactive mode. Non-interactive mode always uses blocking I/O. </DL> <H3> Data format conversions (non-interactive) </H3> <DL> <DT> <A NAME="z28"><B>-reformat</B></A> <DD> The output is to be in HTML, "canonicalized" so that line breaks will be put in common places. Comments, processing instructions, etc, will be stripped. This feature allows HTML files produced by different editors to be compared. <DT> <B>-raw</B> <DD> This command line option returns the output completely untouched <EM>exactly</EM> as it is received by the protocol module. For example, in the case of FTP, this format returns raw ASCII objects for directory listings; for HTTP, everything including the header is returned, for Gopher, a raw ASCII object is returned for a menu etc. <DT> <B>-source</B> <DD> Display the original source (without any MIME-headers) of a document instead of parsing it. <DT> <B>-from</B> [ format ] <DD> Only if the Line mode Browser is executed as a filter (using the "-" option), this option indicates the desired input format. The default value is "text/html". <DT> <B>-to</B> [ format ] <DD> Format is the output format for www. Default value is "www/present" but may be changed according to the HTTP-specifications. Two common output formats are "www/source" that is the source without MIME-headers and "www/mime" that is the source with the MIME-header if any. Though also "text/latex" is possible which generates a LaTeX version of the (HTML) document. This can then be compiled using latex and put out as Postscript. Default value is presenting the output to the user. </DL> <H3> Screen options </H3> <DL> <DT> <B>-p</B> [ n ] <DD> where "n" is a number, specifies the page length. If "n" is not specified then the page is set to length infinite (useful for printouts). Default page size is 24 or is automatically set on some systems. <DT> <B>-w</B> [ n ] <DD> where n is a number, specifies the page width in columns. The default is 78, 79 or 80 depending on the system. (v1.0 or later) </DL> <H3> Anchor formats </H3> <DL> <DT> <B>-a</B> &lt;format&gt; <DD> Specifies the printf-style format string to be used when printing references. Must contain the two characters "%d" where the numbers should occur. Be sure to escape or quote any special characters you use. For example under Unix: <PRE> www -a \&lt;%d\&gt; </PRE> <PRE> www -a "(Type %d)" </PRE> <DT> <B>-na</B> <DD> Hides anchor positions in the text. Useful, when printing out the document. The option can also be used together with the <CODE>-p</CODE> option with no number specified (infinite page length). </DL> <H3> Directory Listings </H3> <DL> <DT> <B>-d</B> 1*( t | b | r | n | s | y ) <DD> This directive can be used to modify the directory listing layout. More than one option can be specified but they might be mutually exclusive. The following options are available (withour space): <UL> <LI> <B>t</B>: Place any readme file at the top of the list (default) <LI> <B>b</B>: Place any readme file at the bottom of the list <LI> <B>r</B>: Ignore any readme file <LI> <B>n</B>: Directory listings are not allowed <LI> <B>s</B>: Directory listings are only allowed in the directories where a file ".www_browsable" is located. The content of the file is of no importance. <LI> <B>y</B>: Directory listings are always allowed (default) </UL> <P> An example is <PRE> -dts </PRE> <P> makes selective directory listings and places a README file at the top </DL> <H3> Persistent Cache </H3> <DL> <DT> <B>-nocache</B> <DD> Disables the persistent cache. By default the cache is used so use this flag if you really don't want it. <DT> <B>-disconnected</B> <DD> Sets the persistent cache to run in disconnected mode. That is, if the object is not already cached then we don't go get it. <DT> <B>-x</B> 1*( i | n | a ) <DD> There are various ways of handling Expires header when met in a history list or in a local cache. Either it can be <B>I</B>gnored all together, the user can be <B>N</B>otified with a warning, or the document can be reloaded <B>A</B>utomatically. The default action is to ignore expired documents. <DT> <B>-r</B> &lt;file&gt; <DD> Rule file, a.k.a. <A HREF="/">configuration file</A>. If this is specified, a rule file may be used to map URLs, and to set up other aspects of the behavior of the browser. Many rule files may be given with successive -r options, and a default rule file name may be given using the <B>WWW_CONFIG</B> environment variable. <DT> <B>-timeout</B> &lt;n&gt; <DD> Timeout in milli-seconds on sockets </DL> <H3> Configuration Options </H3> <DL> <DT> <B>-l</B> [ file ] <DD> Specifies a log file with a list of visited documents. The default value is "www-log" <DT> <B>-r</B> &lt;file&gt; <DD> Rule file, a.k.a. <A HREF="/">configuration file</A>. If this is specified, a rule file may be used to map URLs, and to set up other aspects of the behavior of the browser. Many rule files may be given with successive -r options, and a default rule file name may be given using the <B>WWW_CONFIG</B> environment variable. <DT> <B>-timeout</B> &lt;n&gt; <DD> Timeout in milli-seconds on sockets </DL> <H2> <A NAME="z16">docaddress</A> </H2> <P> If present, the next argument (docaddress) is the <A HREF="/">hypertext address</A> , of the document at which you want to start browsing. You may want to define an alias for www followed by name of your favorite index. <H2> <A NAME="z17">keywords</A> </H2> <P> Any further command line arguments are taken as keywords. The first argument must refer to an index in this case. The index is searched for entries matching the keywords, and a list of matching entries is displayed. <P> <HR> <ADDRESS> <A HREF="/#Frystyk">Henrik Frystyk Nielsen</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>,<BR> @(#) $Id: CommandLine.html,v 1.21 2025/03/22 21:39:52 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Commands.html������������������������������������������������������������������0100644�0000764�0000144�00000017120�06252703304�016614� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Line Mode Browser Commands</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x" WIDTH="48" HEIGHT="48" BORDER="0"></A> <IMG BORDER="0" ALT="MANUAL" SRC="../../Icons/WWW/doc48x"> <H1> Line Mode Browser Commands </H1> <P> The following commands are available at the prompt within <A HREF="../../resources.html">WWW Line Mode Browser</A> when used in interactive mode. Not all of them are applicable at all times, but the online help shows which commands can be used at a particular moment. All commands may be abbreviated and case is not significant. As an example, you can type "<A HREF="#put">put</A>" as: <PRE> pu, put, Put, PUT, etc. </PRE> <P> If the browser is run in "multi threaded" mode, then you can type in a new command at all times. You do not have to wait until a command is terminated. All requests can be interrupted by hitting 'z' (or 'Z') and then return: <PRE> <B>z</B> &lt;RETURN&gt; </PRE> <P> When run in single threaded mode using the <A HREF="/#single">-single</A> command line option, it is not possible to interrupt a request. <H3> Getting Help and Information </H3> <DL> <DT> <B>help</B>, <B>?</B> <DD> Gives a list of available commands depending on the context, the version number of the www program, and the <A HREF="/">hypertext address</A>, (or URL) of the document you are reading. <DT> <B>manual</B> <DD> Jumps directly to the master document of the online manual. <DT> <B>verbose</B> <DD> Toggles verbose mode (for maintenance purposes) <DT> <B>which</B> <DD> Shows the title and location of the current document </DL> <H3> Getting around in a document </H3> <DL> <DT> <B>&lt;return&gt;</B> <DD> Just hitting Return displays the next page (if any) of the current document. <DT> <B>top</B>, <B>bottom</B> <DD> Goes to the top or the bottom of the current document <DT> <B>up</B>, <B>down</B> <DD> Scrolls up or down one page in the current document. </DL> <H3> Load a Document </H3> <DL> <DT> <B>&lt;number&gt;</B> <DD> Typing a number by itself follows the corresponding reference from the currently displayed document. <DT> <B>back</B> <DD> Goes back to the document you were reading before. <DT> <B>forward</B> <DD> Goes to the next document in the history list if any. <DT> <B>goto</B> &lt;address&gt; <DD> Goes to the document represented by the given hypertext address, which is interpreted relatively to the current document. <DT> <B>home</B> <DD> Goes back to the first document you were reading. </DL> <H3> Search a Document </H3> <DL> <DT> <B>find</B>, <B>keyword</B> &lt;keywords&gt; <DD> Queries the current index with the supplied keywords (separated by blanks). The interpretation of the keywords depends on the particular information server you're looking at. In most cases, it will search a database for entries matching the keywords, and will display the results with possibly links to further details. For more complex queries, instructions should be present in the cover page. The "Find" (or "Keywords") command can be omitted if the first keyword does not conflict with another www command. </DL> <H3> Find out information about a Document </H3> <DL> <DT> <A NAME="options">options</A> <DD> Issues a request on the current document using the HTTP OPTIONS method. </DL> <H3> Upload a Document to a remote server </H3> <P> In version 3.1 and later of the Line Mode Browser you can send a document to a remote HTTP server using PUT or POST. <DL> <DT> <A NAME="put"><B>put</B></A> <DD> Put the current document to a remote HTTP server using the PUT method. <PRE> put Destination: http://www.my.server </PRE> <DT> <A NAME="post"><B>post</B></A> <DD> Post the current document to a remote HTTP server using the POST method. The syntax is the same as for PUT. </DL> <H3> Delete a Document on a remote server </H3> <P> You can also use the DELETE method in the Line Mode browser to remove a document on a remote HTTP server. <DL> <DT> <A NAME="delete"><B>delete</B></A> <DD> Deletes the curent document on a remote HTTP server using the DELETE method. </DL> <H3> Killer Features </H3> <DL> <DT> <B>clear</B> <DD> Clears the history list <DT> <B>list</B> <DD> Gives a numbered list of the links from the current document, giving the title of the target documents if it is known otherwise the URL To follow a link, type the number by itself as above. By using <A NAME="z9" HREF="#z11">source</A>, only the URL's are displayed. <DT> <B>quit</B>, <B>exit</B> <DD> Leaves the application. <DT> <B>recall</B> [ n ] <DD> Without a parameter (n), "recall" gives a numbered list of the documents you have visited. To select one, type "recall" followed by the number. <DT> <B>refresh</B> <DD> Refresh the screen but does not cause freshness validation of any kind <DT> <A NAME="z11"><B>source</B></A> <DD> Followed by another command, causes raw source to be generated for that command but without any MIME headers wrapped around it. </DL> <H3> Persistent Cache Management </H3> <DL> <DT> <B>flush</B> <DD> Flushes the persistent cache by deleting all entries on disk <DT> <B>validate</B> <DD> Validates the current document with the nearest cache or at the origin server <DT> <B>revalidate</B> <DD> End-validates the current document by forcing validation of all caches and at the origin server <DT> <B>reload</B> <DD> Forces a full reload of the document regardless of whether the object might already be in either the memory cache or in the local file cache. </DL> <H3> On Unix versions, the following extra commands are available: </H3> <DL> <DT> <B>print</B> <DD> Prints the current document, without the numbered document references. A background www is launched to do that, and its output is piped to the command defined by the environment variable WWW_PRINT_COMMAND ("lpr" by default). Can be used with <A NAME="z12" HREF="#z11">source</A> . <DT> <B>&gt;</B> &lt;file&gt; <DD> Saves the current document to the given file, without the numbered document references. A background www is launched to do that. If the file exists, a "&gt;!" will overwrite it. Can be used with <A NAME="z13" HREF="#z11">source</A> . <DT> <B>&gt;&gt;</B> &lt;file&gt; <DD> Appends the current document to the given file without the numbered links. Can be used with <A NAME="z14" HREF="#z11">source</A>. <DT> <B>|</B> &lt;command&gt; <DD> Pipes the current document to the given command, without the numbered document references. A background www is launched to do that. Can be used with <A NAME="z15" HREF="#z11">source</A> . <DT> <B>!</B> &lt;command&gt; <DD> Executes the given shell command without leaving www. <DT> <B>cd</B>, <B>lcd</B> &lt;directory&gt; <DD> Changes the local working directory. "! cd directory" won't do this because it applies to a subshell. </DL> <P> <HR> <ADDRESS> <A HREF="/#BernersLee">Tim BL</A>, and <A HREF="/#Frystyk">Henrik Frystyk Nielsen</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, <P> @(#) $Id: Commands.html,v 1.15 2025/12/09 03:25:56 jigsaw Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Config.html��������������������������������������������������������������������0100644�0000764�0000144�00000001056�06252703307�016264� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Setting up Rule Files</TITLE> </HEAD> <BODY> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <H1> Setting up Rule Files </H1> <P> This is descibed in detail in the <A HREF="/">Library User's Guide</A> <P> <HR> <ADDRESS> Henrik Frystyk, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, <P> @(#) $Id: Config.html,v 1.5 2025/12/09 03:25:59 jigsaw Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Customisation.html�������������������������������������������������������������0100644�0000764�0000144�00000006700�06252703311�017714� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 8-Oct-1995 --> <TITLE>Customizing Line Mode Browser</TITLE> </HEAD> <BODY> <P> <A HREF="/"></A> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <H1> Customizing Line Mode Browser </H1> <P> Customizing <A HREF="../../resources.html">Line Mode Browser</A>'s behavior is done with environment variables or their equivalent depending on the platform. "<A HREF="EnvVariables.html">Environment variable</A>" is a Unix term. On VMS you should use a <A HREF="Installation_VMS.html#3">logical name</A>. <P> A list of things you can customize with environment variables (or local equivalents) is described below. The Line Mode Browser can furthermore be set up to use either a <A HREF="../../Daemon/User/Proxies/Proxies.html">proxy server or a gateway</A>. <P> <H2> <A NAME="9">WWW_HOME</A> </H2> <P> The address of the first document to start with if you run www without a document name on the command line. For example, you can set it to <PRE> http://www.w3.org </PRE> <P> if you want to always use the home page on the W3C welcome page. <P> If no <CODE>WWW_HOME</CODE> variable is set the Line Mode Browser then it automaticly tries the following locations: <OL> <LI> ~/WWW/default.html <LI> /usr/local/lib/WWW/default.html <LI> http://www.w3.org/default.html </OL> <P> If you are installing www without privileges, you may not be able to install the home page, and so you will have to set <CODE>WWW_HOME</CODE> to point to a local copy of the file, or to our server. <P> You can customize www to start at a page of your choice. You can write your own page, or use someone else's. All you have to do is to set the environment variable <CODE>WWW_HOME</CODE> to the www address of your preferred home page. (When you are using www, you can see what an address looks like by typing help when you are reading a document - it tells you the address of that node). <H2> <A NAME="z14">WWW_CONFIG</A> </H2> <P> If defined, must be the name of a local file which contains configuration information including rules, presentation recipes, etc. If configuration files are also specified using the <A HREF="/#z11">-r option</A>, they are loaded first. <H2> NNTPSERVER </H2> <P> See how to set up a <A NAME="5" HREF="NewsServer.html">news server's address</A> for the Line Mode Browser and why you can't use other <A HREF="AboutNewsServers.html">sites' newsserver</A>. <H2> <A NAME="12">WWW_PRINT_COMMAND</A> </H2> <P> Unix only. A quoted printf-style format string for the system command you wish to invoke with the www PRINT command. This should contain one <CODE>%s</CODE> marker where www should put the name of the document to be printed. The default is <PRE> www -n -na -p66 '%s' | lpr </PRE> <P> (The single quotes around the <CODE>%s</CODE> are necessary in case the address contains shell metacharacters.) When you define this variable, you may of course have to enclose the whole thing in double quotes, e.g. <PRE> setenv WWW_PRINT_COMMAND "www -n -na -p66 '%s' | lpr" </PRE> <P> <HR> <ADDRESS> <A HREF="/#BernersLee">Tim BL</A>, and <A HREF="/#Frystyk">Henrik Frystyk</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, <P> @(#) $Id: Customisation.html,v 1.12 2025/12/09 03:26:01 jigsaw Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������libwww/LineMode/User/EnvVariables.html��������������������������������������������������������������0100644�0000764�0000144�00000002245�06301652565�017445� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 8-Oct-1995 --> <NEXTID N="z19"> <TITLE>Environment Variables</TITLE> </HEAD> <BODY> <P> <A HREF="/"></A> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <H1> Environment Variables </H1> <P> Environment variables are used for <A HREF="Customisation.html">customizing the Line Mode Browser</A> and the <A HREF="/">W3C Sample Code Library</A> for a particular user's requirements. Under unix, environment variables are strings of the form: <PRE> name=value </PRE> <P> They are used to pass information to programs to modify how they should run. The UNIX kernel never looks at these strings - their intepretation is up to the various applications. <P> <HR> <ADDRESS> <A HREF="/#BernersLee">Tim BL</A>, and <A HREF="/#Frystyk">Henrik Frystyk</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, <P> @(#) $Id: EnvVariables.html,v 1.12 2025/02/16 18:44:05 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Features.html������������������������������������������������������������������0100644�0000764�0000144�00000051477�06517505621�016654� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Change History of Line Mode Browser</TITLE> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000"> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <H1> Change History of Line Mode Browser </H1> <P> <HR> Improvements made to the <A HREF="../../resources.html">Line Mode Browser</A> are listed in reverse chronological order. (See also the <A HREF="/"> bug list</A> and the separate documentation for the &nbsp;<A HREF="http://delonline.cern.ch/disk$user/duns/doc/vms/distribution.html">VMS version</A>). <P> <IMG BORDER="0" SRC="../../Icons/32x32/caution" ALT="NOTE"> Many changes to this product stem directly from changes to libwww, and are documented in the <A HREF="/">W3C Sample Code Library</A>. <H2> Line Mode Browser 3.1, November 14 1995 </H2> <P> Official release. <H2> Line Mode Browser 3.1 Prerelease 3, November 13 </H2> <P> The browser has been adapted to support the new <A HREF="../../Library/src/HTEvent.html">Event Interface</A> <H2> Line Mode Browser 3.1 Prerelease 2, November 1 </H2> <H3> New Features and Interfaces </H3> <UL> <LI> Introduction of the commands "PUT" and "POST" for sending data from either the local file system of a remote HTTP server to a remote wHTTP server - try it, it's fun :-) </UL> <H2> Line Mode Browser 3.1 Prerelease 1, May 20 </H2> <P> As usual most of the functionality in the Line Mode Browser comes from the Library, but there are some things that deserve to be mentioned: <H3> New Features and Interfaces </H3> <UL> <LI> Added the -single flag so that it can run in singlethreaded mode <LI> refresh screen is now improved <LI> Introduced `-cacheroot' as command line option <LI> Added STREAM_TRACE to command line option <LI> Changed SGML trace to `g' instead of `s' </UL> <H3> Bug Fixes </H3> <UL> <LI> No more coredump if HTMainText=NULL! <LI> command line option -listrefs now works again </UL> <H2> Line Mode Browser 3.1 Prerelease, November 1 </H2> <H3> New Features and Interfaces </H3> <UL> <LI> Introduction of the commands "PUT" and "POST" for sending data from either the local file system of a remote HTTP server to a remote wHTTP server - try it, it's fun :-) </UL> <P> <HR> <IMG BORDER="0" SRC="../../Icons/32x32/caution" ALT="NOTE"> CERN terminated its direct engagement in the World-Wide Web with the release of Library version 3.0 and Line Mode Browser 3.0. The code is now developed and maintained at W3C. <HR> <H2> 3.0 Prerelease 2, Dec 2 1994 </H2> <UL> <LI> The browser is now much more stable and has the same amount of functionality as the previous version 2.15 </UL> <H2> 3.0 Prerelease 1, Nov 26 1994 </H2> <UL> <LI> Interruptible I/O - hit 'z RETURN' and the current load terminates <LI> You can at any time initiate a new load or any other command by simply start typing. </UL> <P> <HR> <H2> 2.15 on November 25 1994 </H2> <P> As always, most of the added features in the Line Mode Browser are a result of changes to the W3C Sample Code Library. However, the following new features deserve to be mentioned: <UL> <LI> Introduced a more sophisticated verbose mode that takes parameter after the -v option. This feature is implemented due to an excessive amount of verbose output from the Library and the Browser. The -v option can now be followed by none, one, or more of the following characters: <DL> <DT> a <DD> Anchor relevant information <DT> p <DD> Protocol Modules <DT> s <DD> SGML/HTML information <DT> u <DD> URI management </DL> <P> The <CODE>-v</CODE> flag alone turns on all trace messages. This feature is a result of a more advanced TRACE management in the W3C Sample Code Library <LI> LineMode Browser now supports direct WAIS access. If it is compiled with the same WAIS flags in the Makefile as the CERN server then it can access a WAIS server directly. <LI> New command line feature: -m <method> where <method> is one of <UL> <LI> GET <LI> HEAD </UL> <P> This will later get extended to also include other HTTP methods <LI> Cyrillic support added for Line Mode Browser. This is a patch from Anton Tropashko, agl@glas2.glas.apc.org <LI> Bug where the Browser prompted the user a UserID and Password in non-interactive mode fixed. Now non-interactive <EM>really</EM> means non-interactive. <LI> The common BUILD for the Line Mode Browser, the CERN Server and the Library of common code now accepts a command line option: <PRE> BUILD linemode | daemon | library </PRE> <P> to build a specific component. The default action is to build all three parts. BUILD is now also provided in a Bourne Shell version </UL> <P> <HR> <H2> 2.14 on November 1994 </H2> <UL> <LI> Added <A HREF="/#z28" NAME="z1">-reformat</A> option to allow www to be used for generating HTML in cannonical form for running diffs, putting into code managemenst systems, etc. <LI> The Browser now understands the "ALT" tag in <A HREF="../../MarkUp/HTMLPlus/htmlplus_21.html">HTML Inlined Images</A> <LI> Loads the <A HREF="/"> Command Line Help</A> if called with the parameter "-?" or "-help". <LI> Bug in understanding "-p" and "-w" with and without spaces between the number fixed. </UL> <P> <HR> <H2> 2.13 </H2> <UL> <LI> This release of the Line Mode Browser is mainly a debugged version that is brought up to date with the WWW library version 2.15. For the changes in the Client side of the Library, see <A HREF="../../Library/User/History.html" NAME="z16">Changes to W3 Common Library</A> . See also <A HREF="Commands.html" NAME="z17">existing commands</A> and <A HREF="/" NAME="z18">command line syntax</A> . <LI> Using the save function "&gt;" now checks if file exists. Use "!&gt;" to overwrite it. All save functions now put up an output stream instead of making a system call. <LI> The -from command line option can be used in filter mode (using a "-") in order to specify the input format. <LI> In Non-interactive mode, no third party programs are called through "save & execute". If the Browser finds gets an unknown format, the result is put onto standard output. </UL> <H2> 2.10 </H2> <UL> <LI> Millions of things which seem to have slipped past this list in versions 2.x to s.09, inclduing the rule file, firing off X applications for graphics files, etc etc. See the library change list. </UL> <H2> 1.4a </H2> <UL> <LI> REFRESH command refreshes current document </UL> <H2> 11 Dec 92: 1.4 </H2> <UL> <LI> <A HREF="/#z8" NAME="z14"> -version command line option included</A> . <LI> Compiled for many machines with library version 1.1. </UL> <H2> Dec 92 1.3c </H2> <UL> <LI> Makefile for rs6000 fixed. (rs6000 cc does not have good -o flag). Binary available for rs6000 again. <LI> -version option on command line for quick version check </UL> <H2> 16 Oct 92: Version 1.3a </H2> <UL> <LI> <A HREF="Commands.html#6" NAME="12">SOURCE</A> command prefix allows printing, pipiping etc postscript source without formatting. SOURCE PRINT prints a postscript file. SOURCE &gt; allows the original source to be saved. <LI> <A HREF="/#7" NAME="11">-listrefs</A> option allow noninteractive output to be followed by lists of addresses of documents referred to. <LI> MANUAL command takes a hypertext jump straight to the latest version of the online manual. (HELP is still local slightly context-sensitive help). </UL> <H2> Oct 92 version 1.2l </H2> <UL> <LI> Bug in Gopher access removed. <LI> Now uses common code library </UL> <H2> version 1.2k </H2> <UL> <LI> Default port number changed to 80 ****. </UL> <H2> 18 May 92 version 1.2h </H2> <UL> <LI> PS command added to print document on local printer attached to a terminal. Special compilation flag SLAVE_PRINTER. <LI> BUG FIX: Crashes on some machines only fixed (malloc length error on HTTP.c.) </UL> <H2> version 1.2f </H2> <UL> <LI> Bug fix: telnet under unix: -l option was put AFTER the host name. Fixed 27-Mar-92. </UL> <H2> Version 1.2e </H2> <UL> <LI> New command: 'Verbose' toggles verbose mode on/off as per '-v' command switch. <LI> New command: for Unix, 'cd' or 'lcd' changes the local working directory (as in FTP clients). <LI> Command input handled more efficiently. Should use readline() in the future, with completion on anchor names.. <LI> Some minor bug fixes. </UL> <H2> Version 1.2d </H2> <UL> <LI> COMMENT tag introduced for future use only. <LI> Speed improvement: Use of a hash table for document names improves load time especially of documents with many links. </UL> <H2> Version 1.2c </H2> <UL> <LI> Bug fix: unknown tags without attributes caused text to be skipped until the end of the next tag. This lead to missing information (like phone numbers! ) in CERN yellow pages listing and a strange format for the xfind server. </UL> <H2> Version 1.2b </H2> <P> Release includes a few strict C bug fixes for the Mac, and adds makefile for pc-nfs. <H2> Version 1.2a </H2> <UL> <LI> Feature: the -source option makes www load the unparsed source from HTML servers. See <A HREF="/#5" NAME="9">details</A> ... <LI> Tags MENU and DIR introduced for future use. <LI> Bug fix: The style was not set until a style change occured: therefore, formatting of any text before a heading etc was wrong (no paragraph spacing, indents, etc). <LI> Bug fix: Newlines in HTML source are not taken as blanks if they follow other white space. This caused initial blanks on some paragraphs when a newline followed a tag. </UL> <H2> Feb 12 1992: Version 1.2 </H2> <UL> <LI> Binaries generated for unix and vms hosts, for general announcement. Code fixes for compilation on the various platforms. </UL> <H2> Version 1.1c </H2> <UL> <LI> www can be used as a filter: The - option (a dash by itself) makes it take HTML data from stdin. See<A HREF="/#4" NAME="8">details</A> <LI> FTP directories contain pointers back to their parent directory. <LI> Bug fix: News access didn't work on little-endian machines (VAX etc). <LI> Bug fix: VMS descrip.mms file was not complete. </UL> <H2> Version 1.1b </H2> <UL> <LI> Bug fix: when using the "&gt;" and "|" commands in www on a document whose name contained shell metacharacters, it failed. <LI> Bug fix: HTBrowse.h missing from source release. </UL> <H2> Version 1.1a </H2> <UL> <LI> Bug fix: news server address always taken as "cernvax" : see <A HREF="NewsServer.html" NAME="6">documentation</A> </UL> <H2> January 1992 Version 1.1 </H2> <UL> <LI> "Gopher" protocol added to allow access to those campus-wide systems using that protocol. <LI> "Telnet:" access added for information system which don't have a server at all; <LI> Allows gateways to be defined for arbitrary new (or old) naming schemes, eg setenv WWW_wais_GATEWAY //node:port/ <LI> Bug fixes: the -n option didn't work properly in v1.0 </UL> <H2> Version 1.0 (released as alpha test only) </H2> <UL> <LI> New archiecture, more modularity. <LI> "News" access added: picks up news using NNTP as the NeXT W3 browser does. <LI> Forward and reverse scrolling. <LI> "Next" and "Previous" commands added to allow to move to next article in a list. <LI> Bug fix: Searches are now only allowed on indexes. </UL> <H2> Version 14a </H2> <UL> <LI> Logfile option -l, and -h allows remote usage to be logged. (Existed in version 14, but bug in that log file was all one line!) <LI> If telnet used, default logfile /usr/adm/www-log- is used even though no -l logfileroot is specified. </UL> <H2> November 1991 version 0.14 </H2> <UL> <LI> The `Recall' command now displays references as `R 1', `R 2', etc. instead of just `1', `2', etc. so the user is reminded to type `R &lt;number&gt;'. <LI> An out-of-range reference number will launch a keyword search if applicable. For instance, in the phone book, you can now type directly `3755' instead of `K 3755'. <LI> New command : `(G)OTO &lt;address&gt;' jumps to the document specified by its hypertext address. The address may be absolute or relative to the current node. <LI> Clear screen after user input for NEWLIB and VM. NEWLIB-special source put in. VM version defaults to home page on //w3.org. <LI> Entity handling ., . and . put in for text and TITLE fields. <LI> Bug fix: CR now ignored in remote FTP files which used to be displayed double-spaced. <LI> Bug fix: tabs in plain text were displayed as newlines! Now to next multiple of 8 columns. </UL> <H2> version 0.12 </H2> <UL> <LI> -a xxx <A HREF="/#2" NAME="5">option</A> now allows the anchor format to be specified. The old -a option for anchor supression is renamed -na. <LI> Bug fix: occasional crash when going "back". <LI> Bug fix with the -n command line option. In non interactive mode the prompt was still produced. <LI> Now treats '\r' characters as '\n' characters. <LI> Reproduces last line of page at the top of the next page if a paragraph is split between them. <LI> Bug fix in FTP handling as for NeXTStep editor. (Could not access some sites). <LI> HTTP host addresses may now contain a port number after a colon to override the default. </UL> <H2> 15 November 2025 version 0.11 </H2> <UL> <LI> You can read the address of the current document in the HELP information. <LI> MVS and VM only: Line width reduced to 78 characters. </UL> <H2> November 91 version 0.10 </H2> <UL> <LI> Bug fix for TOP commmand. Now functions correctly, and data is only buffered and formatted when the user requires more text, hence saving time. <LI> Can pick up on the users home environment, to display a certain intial page. Set variable (on VMS, logical name) WWW_HOME to the full hypertext of the file or index you want to start with. <LI> Keyword search accepts longer strings. <LI> On VMS, VMS files may be accessed. The WWW address is still unix-like, with slashes, and is converted into VMS syntax by the browser. VMS users can now write their own hypertext and keep it on VMS, though it will only be readable (at the moment) from VMS machines. </UL> <H2> November 91 version 0.9 </H2> <UL> <LI> Bug fix in anonymous FTP. The first version with a-ftp access. </UL> <H2> 24 May 91 version 0.8 </H2> <UL> <LI> Page size selection now works with -p (bug in version 0.7) <LI> Styles have been made more compact, plain text uses all 80 columns. <LI> Bug fix: Missing loop end condidtion caused crash when listing some documents <LI> Files with suffixes other than .HTML are treated as plain text. </UL> <H2> 21 May 91 version 0.7 </H2> <UL> <LI> Parameters avaliable on the command line :- </UL> <DL> <DT> -v <DD> Shows trace comments, including the pathways taken to locate a file. <DT> -n <DD> Makes the program non interactive with the user. No prompts are shown, and after the node is displayed it exits the program <DT> -p <DD> Turns off the paging. The page size can be selected by adding the value immediately after the 'p'. <DT> -a <DD> Stops positions of anchors being shown in the text. </DL> <UL> <LI> These options are particulary useful when redirecting the input into either a file or to the printer. They can also be used in any order on the command line, as long as 'WWW' is the first arguement. <LI> When the recall command is used to view what files have been visited, the titles of the files are used, rather than the file name. If there is no title then the file name is used. </UL> <H2> 14 May 91 </H2> <UL> <LI> The function HTOpen() called from HTAccess has been changed so that it takes two parameters instead of one. This extra one being a pointer to an address where the format style is stored as an integer. The translations of the integers to the formats can be seen in WWW.h. At the momment this extra parameter is not used but will be in the near future so that more files can be accessed. </UL> <H2> 10 May 91 </H2> <UL> <LI> WWW now reads the formatted text into a double linked buffer one screen full at a time and then produces it on the screen. This enables checking of documents so that splitting of small paragraphs or titles does not occur at the bottom of the screen. <LI> An option is offered to return to the top of the present document being viewed. <LI> Tim added the necessary code so that WWW can now access remote files using anonymous FTP. </UL> <H2> 17 April 91 </H2> <UL> <LI> Modified WWW so that it is also executable on the SUN machines., i.e. using ordinary C. <LI> First version realeased on PRIAM, for testing by a few users, to gain feedback. <LI> Accepts keywords with the execute command. </UL> <H2> 8 April 91 </H2> <UL> <LI> Keywords can be entered on the command line. <LI> The input file is copied into a buffer as soon as it is opened, so that the input channel is closed as soon as possible and the server freed. The first 23 lines of the document are read into the buffer and produced onto the screen. As soon as this is done, the remaining file is read into the buffer so the input channel is closed. </UL> <H2> 7 March 91 </H2> <UL> <LI> Created an array called 'string_space' which is filled with blank spaces to be used for printing out margins etc. This method of printing a string was found to be faster than individually printing spaces. <LI> A history mechanism has been included so that a list of all the documents viewed are stored so that the user can refer back to them using the BACK, HOME and RECALL commands. <LI> Changed code so that the browser can handle text which contains long words which exceed the allowed line length on their own. This is just done by continuing the word on the following line. <LI> Read titles and headings into a buffer before outputting so that in cases where the title has a word longer than the allowed line length can be dealt with (for example above).This could also be useful in helping to solve the above problem. Maybe extend the length of headings. </UL> <H2> 5 March 91 </H2> <UL> <LI> Handles a "LISTING" tag by treating it in the same way as an "XMP" tag. This is because, in the case of the line mode browser, the screen is limited to 80 columns and so the browser is unable to work with the 132 columns which the "LISTING" tag normally expects. <LI> Handles an "ADDRESS" tag, which left justifies the text. </UL> <H2> 27 Feb 91 </H2> <UL> <LI> Lists and the help menu are not so spread out, as before. <LI> The browser works with file numbers rather than the file pointers. <LI> Tidied up paging, with the last line of a page repeated at top of next. <LI> Deals with tags within anchors. </UL> <H2> 11 Feb 91 </H2> <UL> <LI> HTTP access to cernvm server, including FIND and NEWS tested. <LI> Browser can be executed by 'WWW' , 'YP' (yellow pages), 'XNEWS', or 'FIND'. <LI> "PLAINTEXT" tag added. Prints out the node exactly as it finds it in the file. <LI> Prompt only contains appropriate options, as does the help message. <LI> Keyword search option added. </UL> <H2> Before Feb 91 </H2> <UL> <LI> Text formatting and line wrapping completed to a reasonable standard. <LI> Removed section of program where 'r' has to be entered in order to select a reference. <LI> When no hypertext references have been found, the browser informs the user, and doesn't offer the list option in the help menu. <LI> Produces an error message if the user tries to select a reference or menu, when no references have been found. <LI> Records whether an anchor is a NAME or an HREF. <LI> Stop **** END **** (now [End]) appearing in the wrong places. This problem appears due to the lines in the html file being too long, so this causes an error in the 'C' run time. <LI> Handles a glossary. </UL> <P> <HR> <ADDRESS> <A HREF="/#BernersLee">Tim BL</A>, and <A HREF="/#Frystyk">Henrik Frystyk</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>,<BR> @(#) $Id: Features.html,v 1.22 2025/04/23 00:30:09 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Installation.html��������������������������������������������������������������0100644�0000764�0000144�00000001705�06523461665�017532� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Installation Guide for Line Mode Browser</TITLE> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000"> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x" WIDTH="48" HEIGHT="48" BORDER="0"></A> <H1> Installation Guide </H1> <P> The Line Mode Browser is now an integral part of <A HREF="/">libwww - the W3C sample Library</A> and <A HREF="/">installs together with libwww</A>. After you have compiled and installed the libwww package including the line mode browser, you can <A HREF="Customisation.html">customize</A> it as you like. <P> <HR> <ADDRESS> <A HREF="/">Henrik Frystyk Nielsen</A>,<BR> @(#) $Id: Installation.html,v 1.15 2025/05/05 00:56:21 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������libwww/LineMode/User/Installation_VMS.html����������������������������������������������������������0100644�0000764�0000144�00000007541�06120647704�020254� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HEAD> <TITLE>Installation_VMS -- /LineMode</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 8-Oct-1995 --> <NEXTID N="8"> </HEAD> <BODY> <H1>Installation under VMS</H1>To install under VMS, get the files WWW.EXE and SETUP.COM from sources described below. To set up the commands, put the command <PRE> $ @[...]SETUP </PRE>into your LOGIN.COM, or the system SYLOGIN.COM. This command file assumes you have left all the distributed files in the same directory as itself. <H2><A NAME=3>Customization using logical names</A></H2> Under VMS, the home page may be defined using the logical name WWW_HOME. You should define this to be the full address of the document which you want to be displayed when www is invoked without parameters. For example, <PRE> $ DEFINE/SYSTEM WWW_HOME "file://myvax/sys$library/default.html" </PRE>Note that the www address you must set it to is still in unix-like format (with slashes instead of :: : [.])Users may of course override the system logical name with their own. If no logical name is defined, the VMS browser will default to picking up the default page from our server, document http://www.w3.org./default.html.<P> The other <A NAME=4 HREF="Customisation.html">customization variables</A> may be defined in the same way.<P> Accessing VMS files<P> If you are making you own home page, or any other documentation, you will probably want to store it on your VMS machine. The www program has the ability, if running under VMS, to access VMS files. the document name for a VMS file is simply the filename, but:<P> The host name must be the name of the machine WITHOUT any domain name on it, e.g. //vxcrna/<P> The filename is written with each punctuation converted into a single slash. Examples are <PRE> Document identifier Filename file://vxcrna/sys$www_home vxcrna::sys$home </PRE> <H2><A NAME=1>Availability of .EXE files</A></H2>Versions are available for any of the following implementations of TCP/IP which you may have installed on your system: Digital's UCX, Wollongongs's WIN/TCP, or SRI's Multinet. If you are on the High Energy Physics DECnet, the versions are currently (Jan 92) available compiled in directories as follows: <DL> <DT>Wollongong WIN_TCP <DD> none - see <A NAME=6 HREF="Installation_VMS_NewTCP.html#2">recompiling</A> . <DT>Multinet <DD> vxcrna::disk$oc1:[timbl.www.multinet.works] <DT>Digital's UCX <DD> vxcrna::disk$oc1:[timbl.www.ucx.works] <DT>CMU TCP <DD> none - see <A NAME=5 HREF="Installation_VMS_NewTCP.html#1">recompiling</A> . </DL> If you are not on HEPnet, but can pick up binary files from w3.org using FTP, then you will find executables in the /pub/www/bin/vms, as files www_ucx.exe or www_multinet.exe. Remember to transfer in binary mode. Pick one and rename it to www.exe <H2><A NAME=z7>Rebuilding from source</A></H2>You may have to do this if your sharable libraries are not compatible with those for which the .EXE file was built. If there is a version incompatability, then you get an explicit message about sharable library versions when you try to run www.<P> If you have utilities for uncompressing and untarring the main source file, then you could remake the distribution from source.<P> Another way of getting the sources up can be used if you happen to have access to an untrix machine on the same DECnet as your vax. FTP the source tar file over to the ultrix machine, uncompress it and untar it, then copy over the descrip.mms in LineMode/src/vms. In there you'll find all the commands to copy the sources from a unix machine (PRIAM:: in that instance -- you'll have to edit it) and rebuild the .exe. <P> When you remake the exe, you must specifify <PRE> MMS/MACRO=(MULTINET=1) or MMS/MACRO=(WIN_TCP=1) or MMS/MACRO=(UCX=1) </PRE> to get the right version for Multinet, Wollongong TCP or DEC/UCX respectively. <ADDRESS><A HREF="/#BernersLee">Tim BL</A>, </BODY> </HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Installation_VMS_NewTCP.html���������������������������������������������������0100644�0000764�0000144�00000004733�06252703321�021426� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Installation for VMS</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 8-Oct-1995 --> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <H1>Installation Guide for VMS</H1> This is how to get the sources for <A HREF="../../resources.html">www</A> and recompile them. You need to do this if you have a shareable library incompatibility with the distributed executable. <H2>Changing to a new TCP/IP version</H2> Do this bit if your TCP/IP system is not SRI/Multinet, DEC/UCX or whatever they call it now, or Wollongong TCP/IP.<P> You might need to change something in sysdep.h which is the system specific include file, and in descrip.mms, the makefile. If you do, please mail me the changes.<P> Look for all occurences of "MULTINET", "UCX" or "WIN_TCP" and add a "CMU_TEK" or whatever where necessary. The same goes for decsrip.mms. This will need to pass the CMU_TEK option onto the c compiler in the CFLAGS macro, and also use different libraries for the link. Changes to other files will probably not be necessary.<P> [The program uses the socket library in a very standard way - no tricks. You just have to get the include files from the right place and fix the macros for NETREAD etc to whatever CMU-TEK calls the socket read() function. It can't call it read() because that's in the VMS unix library already for file access. You notice that under some systems the read does a socket_read or a real read depending on whether the socket number is small (unix) or large (VMS channel=socket). I don't know what CMU-TEK does but I'm interested to know If you don't know either, try compiling for say WIN_TCP and see what's undefined and mail me] If you do this, let me know how you get on, please!<P> <H2>Compiling</H2> One way, if you have a unix (sultrix?) system with DECnet is to unwrap the tar file on that system.<P> Then copy WWW/LineMode/src/vms/descrip.mms across to VMS. Edit descrip.mms so that all the references to $(U)"/userd/tbl/hypertext are changed to point to the decnet address of the files you have unwrapped on the unix system. Then run mms with /macro=(u=HOST::, cmu_tek=1) -- whatever your unix HOST is -- and it will pickup all the files from your unix system.<P> The other way is to uncompress/untar it on under VMS, if you have a tool to do that, and just run mms/macro=(cmu_tek=1). <ADDRESS><A HREF="/#BernersLee">Tim BL</A>, </BODY> </HTML> �������������������������������������libwww/LineMode/User/Internals.html�����������������������������������������������������������������0100644�0000764�0000144�00000003604�06301652567�017025� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 18-Oct-1995 --> <TITLE>Internals -- Line Mode Browser</TITLE> </HEAD> <BODY> <P> <A HREF="/"></A> <A HREF="../../resources.html"> <IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <IMG BORDER="0" ALT="Internals" SRC="../../Icons/WWW/internals48x"> <H1> Line Mode Browser Internals </H1> <P> The <A HREF="../../resources.html">Line Mode Browser</A> is built directly on top of the the <A HREF="/">W3C Sample Code Library</A> and is mainly a test tool for the Library. <P> As the <A HREF="/">W3C Sample Code Library</A> is a generic, platform independent library, the Line Mode Browser must contain the presentation specific code. The few extra modules this includes are: <DL> <DT> <A HREF="../src/HTBrowse.html">HTBrowse</A> <DD> This module is the main module in the browser and it is the doing the shell command analysis, prompts and command line handling etc. <DT> <A HREF="../src/GridText.html">GridText</A> <DD> The <CODE>GridText</CODE> module is the <A HREF="../../Library/User/Guide/Presentation.html">graphic object</A>. This assumes fixed-width characters (hence "grid"). This module has the basic functions of a hypertext object plus some extra interface to the HTBrowse module. <DT> <A HREF="../src/GridStyle.html">GridStyle</A> <DD> The <CODE>GridStyle</CODE> module is the Line Mode Browser management of static stylesheets. <DT> <A HREF="../src/DefaultStyles.c">DefaultStyles.c</A> <DD> This module is the default set of formats for displaying text in each style. </DL> <P> <HR> <ADDRESS> Tim BL, and <A HREF="/#Frystyk">Henrik Frystyk</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, <P> @(#) $Id: Internals.html,v 1.11 2025/02/16 18:44:07 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Makefile.am��������������������������������������������������������������������0100644�0000764�0000144�00000000221�06133513762�016220� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/NewsServer.html����������������������������������������������������������������0100644�0000764�0000144�00000005521�06252703327�017165� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 8-Oct-1995 --> <NEXTID N="z3"> <TITLE>Defining the address of your news server for WWW</TITLE> </HEAD> <BODY> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <H1> Defining a News Server </H1> <P> To be able to read news, the <A HREF="../../resources.html">Line Mode Browser (www)</A> needs the address of a <A HREF="AboutNewsServers.html" NAME="z2">news server</A>. This is a machine which runs the NNTP protocol. If you already use internet news on your site, you will have one of these. There are several ways you can tell <EM>www</EM>which news server to use. <P> Note you may also have your machine enabled as being authorized to pick up news from the news server by that server's system manager. <H2> For a NeXT </H2> <P> The NeXT defaults are read, looking for a value for "NewsHost" for application name "WorldWideWeb", then for a global default, then for application named "News". <H2> All other cases </H2> <P> On all other platforms (?) you can do one of the following in order to define a news server. <H3> Set an environment variable </H3> <P> You can set the environment variable <B>NNTPSERVER</B> to be the internet address of the server. As a n example, you can do this in your <EM>.login</EM> file, or your <EM>.cshrc</EM> file. (On VMS, use a logical name, on VM/CMS, the CENV globalv table). <H3> Use a file </H3> <P> The file <EM>/usr/local/lib/rn/server</EM> will be read if it exists and no environment variable is defined. It should contain the single line containing the name of the news server. This filename may be overridden at compile time by defining the SERVER_FILE symbol to be the quoted string. <H3> At Compile Time </H3> <P> If you are installing www for several people, you can set the default by defining the variable <EM>DEFAULT_NEWS_HOST</EM> to be the quoted string of the server name on the command line for the compilation of the HTNews.c module For example, use the option (check your own compiler's command line syntax) <PRE> -DDEFAULT_NEWS_HOST="mynewshost.domain" </PRE> <H3> Use a domain name alias </H3> <P> If no other default news host is found, the software looks for a machine with name or alias "news" in the local domain. If your domain has a single news server which you would like to use as a default, and the person in charge of the domain name registration agrees, then make an alias "news" for the server. This will have the management advantage that the administration can move the news server without any trouble later. <P> <HR> <ADDRESS> <A HREF="/#BernersLee">Tim BL</A>, Henrik Frystyk Nielsen, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, <P> @(#) $Id: NewsServer.html,v 1.8 2025/12/09 03:26:15 jigsaw Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Overview.html������������������������������������������������������������������0100644�0000764�0000144�00000004170�06523145145�016666� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 2-Nov-1995 --> <TITLE>W3C Line Mode Browser Documentation</TITLE> </HEAD> <BODY> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" SRC="../../Icons/WWW/LMB48x" ALT="LMB"></A> <IMG BORDER="0" SRC="../../Icons/WWW/doc48x" WIDTH="48" HEIGHT="48" ALT="Documentation"> <H1> W3C Line Mode Browser Documentation </H1> <P> This is a list of what you will find of documentation describing the W3C Line Mode Browser. <DL> <DT> <A HREF="/"><IMG BORDER="0" ALT="INSTALL" SRC="../../Icons/WWW/install48x"></A> <B>Installation Guide</B> <DD> The installation description follows exactly the installation for the W3C Sample Code Library <DT> <A HREF="/"><IMG BORDER="0" SRC="../../Icons/WWW/relnotes48x" ALT="RELEASE"></A> <B>Release Notes</B> <DD> The release notes for the Line Mode browser is part of the Library release notes <DT> <A HREF="QuickGuide.html"><IMG BORDER="0" SRC="../../Icons/WWW/startup48x" ALT="QUICKGUIDE"></A> <B>Get Started</B> <DD> A quick quide describing how to get started writing an application <DT> <A HREF="Commands.html"><IMG BORDER="0" ALT="CMD" SRC="../../Icons/WWW/doc48x"></A> <B>Commands</B> <DD> Describing the commands in interactive mode <DT> <A HREF="/"><IMG BORDER="0" ALT="CMDLINE" SRC="../../Icons/WWW/doc48x"></A> <B>Command Line Options</B> <DD> Describing the command line options <DT> <A HREF="Internals.html"><IMG BORDER="0" ALT="Internals" SRC="../../Icons/WWW/internals48x"></A> <B>Internals</B> <DD> A detailed list of modules describing the internals of the browser <DT> <A HREF="../../Library/User/Patch/Overview.html"><IMG BORDER="0" SRC="../../Icons/WWW/Bug48x" ALT="BUGS"></A> <B>Known Bugs</B> <DD> Listing what we already know is wrong </DL> <P> <HR> <ADDRESS> <A HREF="/">Henrik Frystyk Nielsen</A>,<BR> @(#) $Id: Overview.html,v 1.10 2025/05/03 19:49:57 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/QuickGuide.html����������������������������������������������������������������0100644�0000764�0000144�00000003356�06252703335�017117� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 14-Oct-1995 --> <NEXTID N="z10"> <TITLE>Quick Guide for W3C Line Mode Browser</TITLE> </HEAD> <BODY> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="LMB" SRC="../../Icons/WWW/LMB48x"></A> <IMG BORDER="0" ALT="MANUAL" SRC="../../Icons/WWW/startup48x"> <H1> Quick Guide for W3C Line Mode Browser </H1> <P> If executed in Interactive mode, the World-Wide Web Line Mode browser allows you to find information by following references and/or by using keywords. In Non-Interactive mode, the browser is capable of fetching and converting documents and be used as a filter. <H2> Follow the Links </H2> <P> References are numbers in [brackets] after particular phrases. Type the number and RETURN in order to follow the link. <H2> Search </H2> <P> Some documents are indexes. These contain little text, but allow you to search for information with keywords. Type "find", "f", or "keywords" (space) and the keywords. For example, "f sgml examples" searches the index for items with keywords SGML and EXAMPLE. You can only use the "find" command when it is present in the prompt. You can omit the "find" or "f" if the first keyword doesn't conflict with <A NAME="3" HREF="Commands.html">existing commands</A>. <H2> More Information </H2> <UL> <LI> <A HREF="Commands.html">Commands</A> <LI> <A HREF="/">Command Line Syntax</A> </UL> <P> <HR> <ADDRESS> <A HREF="/#BernersLee">Tim BL</A>, and <A HREF="/#Frystyk">Henrik Frystyk</A>, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, <P> @(#) $Id: QuickGuide.html,v 1.12 2025/12/09 03:26:21 jigsaw Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Makefile�����������������������������������������������������������������������0100644�0000764�0000144�00000014036�07405520574�015637� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign LineMode/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign LineMode/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/User/Makefile.in��������������������������������������������������������������������0100644�0000764�0000144�00000013441�07405520526�016240� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign LineMode/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign LineMode/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/��������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07422617423�014046� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/CVS/����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517400�014474� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/CVS/Root������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517377�015355� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/CVS/Repository������������������������������������������������������������������0100644�0000764�0000144�00000000024�07405517377�016604� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/CVS/Entries���������������������������������������������������������������������0100644�0000764�0000144�00000001270�07405517400�016025� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.4/Thu Apr 18 01:42:10 1996// /ConView.c/1.2/Wed Nov 25 15:52:01 1998// /DefaultStyles.c/1.10/Thu Jun 24 19:41:04 1999// /DefaultStyles.c.classic/1.2/Fri May 19 02:07:33 1995// /DefaultStyles.c.modern/1.2/Fri May 19 02:07:34 1995// /GridStyle.c/1.17/Thu Jun 24 19:41:04 1999// /GridStyle.html/1.10/Thu Jun 24 19:41:04 1999// /GridText.c/1.53/Fri Aug 4 10:47:40 2000// /GridText.html/1.18/Mon Jul 31 09:19:51 2000// /HTBrowse.c/1.184/Fri Jul 28 10:09:48 2000// /HTBrowse.html/1.12/Thu May 14 02:11:34 1998// /HTFont.html/1.3/Thu Jun 24 19:41:04 1999// /Makefile.am/1.31/Fri Aug 4 09:48:37 2000// /a_stdio.g/1.1/Mon Sep 26 07:58:23 1994// /a_stdio.h/1.3/Tue Mar 21 16:30:51 1995// D ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/CVS/Entries.Log�����������������������������������������������������������������0100644�0000764�0000144�00000000034�07405517400�016542� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/vms//// A D/windows//// ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520574�014654� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/CVS/������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517400�015301� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/CVS/Root��������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517400�016145� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/CVS/Repository��������������������������������������������������������������0100644�0000764�0000144�00000000030�07405517400�017371� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/CVS/Entries�����������������������������������������������������������������0100644�0000764�0000144�00000000575�07405517400�016641� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.3/Mon Aug 5 17:23:36 1996// /Makefile.am/1.4/Mon Jan 4 16:59:06 1999// /build_multinet.com/1.3/Tue Jul 12 14:52:12 1994// /build_multinet.com_alpha/1.3/Tue Jul 12 14:52:15 1994// /build_ucx.com/1.2/Tue Jul 12 14:52:17 1994// /build_ucx.com_alpha/1.2/Tue Jul 12 14:52:19 1994// /descrip.mms/1.4/Tue Jul 12 14:52:21 1994// /setup.com/1.1/Tue Mar 1 10:40:13 1994// D �����������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/Makefile��������������������������������������������������������������������0100644�0000764�0000144�00000014061�07405520575�016314� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = descrip.mms build_multinet.com setup.com mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign LineMode/src/vms/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode/src/vms distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign LineMode/src/vms/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/.cvsignore������������������������������������������������������������������0100644�0000764�0000144�00000000050�06201427030�016626� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile *.h .www_browsable Makefile.in ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/Makefile.am�����������������������������������������������������������������0100644�0000764�0000144�00000000226�06644171532�016705� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign EXTRA_DIST = \ descrip.mms \ build_multinet.com \ setup.com ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/build_multinet.com����������������������������������������������������������0100644�0000764�0000144�00000002433�05610527034�020365� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$ WRITE SYS$OUTPUT "Creating WWW LineMode for "MULTINET" on "VAX"." $ WRITE SYS$OUTPUT "=================================================" $ IF "''F$SEARCH("[--.VAX.MULTINET]*.*")'" .EQS. "" THEN CREATE/DIR [--.VAX.MULTINET] $ copy []setup.com [--.VAX.MULTINET]setup.com $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,MULTINET)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/obj=[--.VAX.MULTINET]HTBROWSE.obj [-]HTBrowse.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,MULTINET)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/obj=[--.VAX.MULTINET]GRIDTEXT.obj [-]GridText.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,MULTINET)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/obj=[--.VAX.MULTINET]DEFAULTSTYLES.obj [-]DefaultStyles.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,MULTINET)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/obj=[--.VAX.MULTINET]GRIDSTYLE.obj [-]GridStyle.c $ link /exe=[--.VAX.MULTINET]www.exe [--.VAX.MULTINET]HTBrowse.obj, [--.VAX.MULTINET]GridText.obj, [--.VAX.MULTINET]DefaultStyles.obj, [--.VAX.MULTINET]GridStyle.obj, [---.LIBRARY.VAX.MULTINET]wwwlib/lib, [---.LIBRARY.VAX.MULTINET]wwwlib.opt/opt $ continue $ continue �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/build_multinet.com_alpha����������������������������������������������������0100644�0000764�0000144�00000002643�05610527037�021540� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$ WRITE SYS$OUTPUT "Creating WWW LineMode for "MULTINET" on "ALPHA"." $ WRITE SYS$OUTPUT "=================================================" $ IF "''F$SEARCH("[--.ALPHA.MULTINET]*.*")'" .EQS. "" THEN CREATE/DIR [--.ALPHA.MULTINET] $ copy []setup.com [--.ALPHA.MULTINET]setup.com $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,MULTINET)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/Standard=VAXC/Prefix=ANSI/obj=[--.ALPHA.MULTINET]HTBROWSE.obj [-]HTBrowse.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,MULTINET)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/Standard=VAXC/Prefix=ANSI/obj=[--.ALPHA.MULTINET]GRIDTEXT.obj [-]GridText.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,MULTINET)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/Standard=VAXC/Prefix=ANSI/obj=[--.ALPHA.MULTINET]DEFAULTSTYLES.obj [-]DefaultStyles.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,MULTINET)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/Standard=VAXC/Prefix=ANSI/obj=[--.ALPHA.MULTINET]GRIDSTYLE.obj [-]GridStyle.c $ link /exe=[--.ALPHA.MULTINET]www.exe [--.ALPHA.MULTINET]HTBrowse.obj, [--.ALPHA.MULTINET]GridText.obj, [--.ALPHA.MULTINET]DefaultStyles.obj, [--.ALPHA.MULTINET]GridStyle.obj, [---.LIBRARY.ALPHA.MULTINET]wwwlib/lib, [---.LIBRARY.ALPHA.MULTINET]wwwli- b.opt/opt $ continue $ continue ���������������������������������������������������������������������������������������������libwww/LineMode/src/vms/build_ucx.com���������������������������������������������������������������0100644�0000764�0000144�00000002274�05610527041�017324� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$ WRITE SYS$OUTPUT "Creating WWW LineMode for "UCX" on "VAX"." $ WRITE SYS$OUTPUT "=================================================" $ IF "''F$SEARCH("[--.VAX.UCX]*.*")'" .EQS. "" THEN CREATE/DIR [--.VAX.UCX] $ copy []setup.com [--.VAX.UCX]setup.com $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,UCX)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/obj=[--.VAX.UCX]HTBROWSE.obj [-]HTBrowse.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,UCX)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/obj=[--.VAX.UCX]GRIDTEXT.obj [-]GridText.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,UCX)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/obj=[--.VAX.UCX]DEFAULTSTYLES.obj [-]DefaultStyles.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,UCX)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/obj=[--.VAX.UCX]GRIDSTYLE.obj [-]GridStyle.c $ link /exe=[--.VAX.UCX]www.exe [--.VAX.UCX]HTBrowse.obj, [--.VAX.UCX]GridText.obj, [--.VAX.UCX]DefaultStyles.obj, [--.VAX.UCX]GridStyle.obj, [---.LIBRARY.VAX.UCX]wwwlib/lib, [---.LIBRARY.VAX.UCX]wwwlib.opt/opt $ continue $ continue ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/build_ucx.com_alpha���������������������������������������������������������0100644�0000764�0000144�00000002476�05610527043�020477� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$ WRITE SYS$OUTPUT "Creating WWW LineMode for "UCX" on "ALPHA"." $ WRITE SYS$OUTPUT "=================================================" $ IF "''F$SEARCH("[--.ALPHA.UCX]*.*")'" .EQS. "" THEN CREATE/DIR [--.ALPHA.UCX] $ copy []setup.com [--.ALPHA.UCX]setup.com $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,UCX)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/Standard=VAXC/Prefix=ALL/obj=[--.ALPHA.UCX]HTBROWSE.obj [-]HTBrowse.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,UCX)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/Standard=VAXC/Prefix=ALL/obj=[--.ALPHA.UCX]GRIDTEXT.obj [-]GridText.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,UCX)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/Standard=VAXC/Prefix=ALL/obj=[--.ALPHA.UCX]DEFAULTSTYLES.obj [-]DefaultStyles.c $ cc /DEFINE=(VMS,DEBUG,RULES,ACCESS_AUTH,VL="""2.14vms2""" ,UCX)/INC=([---.Library.Implementation],[---.Library.Implementation.vms])/Standard=VAXC/Prefix=ALL/obj=[--.ALPHA.UCX]GRIDSTYLE.obj [-]GridStyle.c $ link /exe=[--.ALPHA.UCX]www.exe [--.ALPHA.UCX]HTBrowse.obj, [--.ALPHA.UCX]GridText.obj, [--.ALPHA.UCX]DefaultStyles.obj, [--.ALPHA.UCX]GridStyle.obj, [---.LIBRARY.ALPHA.UCX]wwwlib/lib, [---.LIBRARY.ALPHA.UCX]wwwlib.opt/opt $ continue $ continue ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/descrip.mms�����������������������������������������������������������������0100644�0000764�0000144�00000016571�05610527045�017026� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������! Make WorldWideWeb LineMode Browser under VMS ! ======================================================= ! ! History: ! 07 Sep 93 MD Created for version 2.06 of linemode browser (www) ! 06 Nov 93 MD Changed to run in [.vms] directory ! 28 Feb 94 (MD) Changed for version 2.15 of library ! - added DECC, LIST flags ! - added ALPHA flag ! - generates obj directory structure... ! ! Bugs: ! The dependencies are anything but complete - they were ! just enough to allow the files to be compiled. ! ! Instructions: ! Use the correct command line for your TCP/IP implementation, ! inside the [.VMS] directory: ! ! $ MMS/MACRO=(MULTINET=1) for Multinet ! $ MMS/MACRO=(WIN_TCP=1) for Wollongong TCP/IP ! $ MMS/MACRO=(UCX=1) for DEC/UCX ! $ MMS/MACRO=(DECNET=1) for socket emulation over DECnet ! ! To compile with debug mode: ! ! $ MMS/MACRO=(DEBUG=1) Debug Flag on ! $ MMS/MACRO=(LIST=1) Produce Listing Files ! ! To compile for DECC use: ! ! $ MMS/MACRO=(DECC=1) for DECC only. Generates .OLB ! ! But to compile for ALPHA use: ! target dir ! $ MMS/MACRO=(ALPHA=1) on ALPHA (implies DECC) [.ALPHA.MULTINET] ! ! If you are on HEP net and want to build using the really latest sources on ! DXCERN:: then define an extra macro U=DXCERN::, e.g. ! ! $ MMS/MACRO=(MULTINET=1, U=DXCERN::) for Multinet ! ! This will copy the sources from DXCERN as necessary. You can also try ! ! $ MMS/MACRO=(U=DXCERN::) descrip.mms ! ! to update this file. ! ! SRC = [-] VMS = [] WWW_INCL = [---.Library.Implementation] WWW_VMS = [---.Library.Implementation.vms] .INCLUDE $(SRC)Version.make ! debug flags .IFDEF DEBUG DEBUGFLAGS = /DEBUG/NOOPT LFLAGS = /DEBUG .ENDIF .IFDEF ALPHA ALPHA_EXT=_ALPHA MACH=ALPHA DECC=1 .ELSE ALPHA_EXT= MACH=VAX .ENDIF .IFDEF DECC .IFDEF UCX CQUALDECC=/Standard=VAXC/Prefix=ALL .ELSE CQUALDECC=/Standard=VAXC/Prefix=ANSI .ENDIF .ELSE CQUALDECC= .ENDIF .IFDEF LIST CLIST=/LIST/SHOW=ALL .ELSE CLIST= .ENDIF .IFDEF MAP LMAP=/MAP=$(MMS$TARGET_NAME)/FULL .ELSE LMAP= .ENDIF ! extra defines .IFDEF NORULES EXTRADEFINES = VMS,DEBUG,ACCESS_AUTH,VL="""$(VL)""" .ELSE EXTRADEFINES = VMS,DEBUG,RULES,ACCESS_AUTH,VL="""$(VL)""" .ENDIF .IFDEF UCX TCP=UCX .ENDIF .IFDEF MULTINET TCP=MULTINET .ENDIF .IFDEF WIN_TCP TCP=WIN_TCP .ENDIF .IFDEF DECNET TCP=DECNET .ENDIF .IFDEF TCP .ELSE TCP=MULTINET .ENDIF ! now exe points at [--.machine.tcp layer] EXE=[--.$(MACH).$(TCP)] WWW_LIB=[---.LIBRARY.$(MACH).$(TCP)] CFLAGS = $(DEBUGFLAGS)/DEFINE=($(EXTRADEFINES),$(TCP))/INC=($(WWW_INCL),$(WWW_VMS))$(CQUALDECC)$(CLIST) WWW_LIBS = $(WWW_LIB)wwwlib/lib SETUP_FILES = $(LIB)setup.com VMS_FILES = $(SRC)version.make $(VMS)setup.com $(VMS)descrip.mms WWW_OBJECTS = $(EXE)HTBrowse.obj, $(EXE)GridText.obj, - $(EXE)DefaultStyles.obj, $(EXE)GridStyle.obj WWW_HEADERS = $(SRC)HTBrowse.h, $(SRC)GridText.h, $(SRC)HTFont.h, - $(SRC)GridStyle.h !___________________________________________________________________ .FIRST @ WRITE SYS$OUTPUT "Creating WWW LineMode for "$(TCP)" on "$(MACH)"." @ WRITE SYS$OUTPUT "=================================================" @ IF "''F$SEARCH("$(EXE)*.*")'" .EQS. "" - THEN CREATE/DIR $(EXE) !___________________________________________________________________ ! ALL executables exe : $(VMS_FILES) $(EXE)setup.com www $(VMS)build_$(TCP).com$(ALPHA_EXT) @ continue exe_only : $(EXE)setup.com www @ continue $(VMS)build_$(TCP).com$(ALPHA_EXT) : $(VMS)descrip.mms mms/noaction/from_sources/out=$(VMS)build_$(TCP).com$(ALPHA_EXT)/macro=($(TCP)=1,$(MACH)=1) exe_only $(EXE)setup.com : $(VMS)setup.com copy $(VMS)setup.com $(EXE)setup.com !___________________________________________________________________ ! WWW EXE (LineMode Browser) www : $(WWW_HEADERS) $(EXE)www.exe @ continue $(EXE)www.exe : $(WWW_OBJECTS) link $(LFLAGS)$(LMAP)/exe=$(EXE)www.exe $(WWW_OBJECTS), $(WWW_LIBS), $(WWW_LIB)wwwlib.opt/opt !_____________________________ HTBrowse $(EXE)HTBrowse.obj : $(SRC)HTBrowse.c $(SRC)HTBrowse.h $(SRC)GridText.h $(SRC)Version.make - $(WWW_INCL)HTUtils.h $(WWW_INCL)HTAccess.h cc $(CFLAGS)/obj=$*.obj $(SRC)HTBrowse.c .IFDEF U $(SRC)HTBrowse.c : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/HTBrowse.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/HTBrowse.c" - $(SRC)HTBrowse.c $(SRC)HTBrowse.h : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/HTBrowse.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/HTBrowse.h" - $(SRC)HTBrowse.h .ENDIF !_____________________________ GridText $(EXE)GridText.obj : $(SRC)GridText.c $(SRC)GridText.h $(SRC)GridStyle.h - $(WWW_INCL)HTAnchor.h $(WWW_INCL)HTStyle.h cc $(CFLAGS)/obj=$*.obj $(SRC)GridText.c .IFDEF U $(SRC)GridText.c : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/GridText.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/GridText.c" - $(SRC)GridText.c $(SRC)GridText.h : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/GridText.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/GridText.h" - $(SRC)GridText.h .ENDIF !_____________________________ GridStyle $(EXE)GridStyle.obj : $(SRC)GridStyle.c $(SRC)GridStyle.h - $(WWW_INCL)HTAnchor.h $(WWW_INCL)HTStyle.h cc $(CFLAGS)/obj=$*.obj $(SRC)GridStyle.c .IFDEF U $(SRC)GridStyle.c : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/GridStyle.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/GridStyle.c" - $(SRC)GridStyle.c $(SRC)GridStyle.h : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/GridStyle.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/GridStyle.h" - $(SRC)GridStyle.h .ENDIF !_____________________________ DefaultStyles $(EXE)DefaultStyles.obj : $(SRC)DefaultStyles.c - $(WWW_INCL)HTStyle.h cc $(CFLAGS)/obj=$*.obj $(SRC)DefaultStyles.c .IFDEF U $(SRC)DefaultStyles.c : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/DefaultStyles.c" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/DefaultStyles.c" - $(SRC)DefaultStyles.c .ENDIF ! ______________________________ separate header files .IFDEF U $(SRC)HTFont.h : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/HTFont.h" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/HTFont.h" - $(SRC)HTFont.h .ENDIF ! ______________________________ The version file .IFDEF U $(SRC)Version.make : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/Version.make" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/Version.make" - $(SRC)Version.make @- write sys$output "Please rebuild with new Version file" @- exit 2 ! Error .ENDIF ! _____________________________VMS SPECIAL FILES: ! latest version of this one: .IFDEF U $(VMS)descrip.mms : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/vms/descrip.mms" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/vms/descrip.mms" - $(VMS)descrip.mms @- write sys$output "Please rebuild with new MMS file" @- exit 2 ! Error $(VMS)setup.com : $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/vms/setup.com" copy $(U)"/userd/tbl/hypertext/WWW-duns/LineMode/Implementation/vms/setup.com" - $(VMS)setup.com .ENDIF ���������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/setup.com�������������������������������������������������������������������0100644�0000764�0000144�00000000143�05534615615�016511� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$ THIS_PATH = F$Element (0, "]", F$Environment ("PROCEDURE")) + "]" $ www :== $ 'THIS_PATH'www.exe �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/vms/Makefile.in�����������������������������������������������������������������0100644�0000764�0000144�00000013461�07405520526�016720� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = descrip.mms build_multinet.com setup.com mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign LineMode/src/vms/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode/src/vms distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign LineMode/src/vms/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/.cvsignore����������������������������������������������������������������������0100644�0000764�0000144�00000000056�06135316762�016046� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������*.h .www_browsable .deps Makefile.in Makefile ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/ConView.c�����������������������������������������������������������������������0100644�0000764�0000144�00000001261�06627023641�015560� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "WWWLib.h" #include "HTBrowse.h" PRIVATE int WeHaveAView = 0; struct _HTView { FILE * outFile; }; PRIVATE HTView TheOnlyView; PUBLIC HTView * HTView_create(char* name, int rows, int cols, LineMode * pLm) { if (WeHaveAView) return 0; WeHaveAView = 1; TheOnlyView.outFile = stdout; return &TheOnlyView; } PUBLIC BOOL HTView_destroy(HTView * pView) { if (!WeHaveAView || pView != &TheOnlyView) return NO; WeHaveAView = 0; return YES; } PUBLIC int OutputData(HTView * pView, const char * fmt, ...) { int ret; va_list pArgs; va_start(pArgs, fmt); ret = vfprintf(pView->outFile, fmt, pArgs); va_end(pArgs); return ret; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/DefaultStyles.c�����������������������������������������������������������������0100644�0000764�0000144�00000010261�06734504720�016777� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DefaultStyles.c ** A REAL STYLE SHEET FOR THE CHARACTER GRID BROWSER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** ** The dimensions are all in characters! */ #include "WWWLib.h" #include "HTFont.h" #include "HTStyle.h" #include "GridStyle.h" /* try this -- GridText.h */ #include "GridText.h" /* Tab arrays: */ PRIVATE HTTabStop tabs_8[] = { { 0, 8 }, {0, 16}, {0, 24}, {0, 32}, {0, 40}, { 0, 48 }, {0, 56}, {0, 64}, {0, 72}, {0, 80}, { 0, 88 }, {0, 96}, {0, 104}, {0, 112}, {0, 120}, { 0, 128 }, {0, 136}, {0, 144}, {0, 152}, {0, 160}, {0, 168}, {0, 176}, {0, 0 } /* Terminate */ }; #ifdef NOT_USED PRIVATE HTTabStop tabs_16[] = { { 0, 16 }, {0, 32}, {0, 48}, {0, 64}, {0, 80}, {0, 96}, {0, 112}, {0, 0 } /* Terminate */ }; #endif PRIVATE HTTabStop tabs_24[] = { {0, 24}, {0, 48}, /* 3 columns */ {0, 0 } /* Terminate */ }; /* Template: ** link to next, name, tag, tagtype, ** font, size, colour, superscript, anchor id, ** indents: (1st,l,r), justific, lineheight, descent, tabs, ** word wrap, HT_FREE format, space: before, after, flags. */ PRIVATE HTStyle HTStyleNormal = { 0, "Normal", "P", HT_FONT, 1.0, HT_BLACK, 0, 0, 3, 3, 0, HT_LEFT, 1, 0, tabs_8, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleList = { &HTStyleNormal, "List", "UL", HT_FONT, 1.0, HT_BLACK, 0, 0, 6, 6, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleMenu = { &HTStyleList, "Menu", "MENU", HT_FONT, 1.0, HT_BLACK, 0, 0, 1, 1, 0, HT_LEFT, 1, 0, 0, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleDirect = { &HTStyleMenu, "Dir", "DIR", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_24, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleGlossary = { &HTStyleDirect, "Glossary", "DL", HT_FONT, 1.0, HT_BLACK, 0, 0, 2, 25, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleGlossaryCompact = { &HTStyleGlossary, "GlossaryCompact", "DLC", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 24, 0, HT_LEFT, 1, 0, 0, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleExample = { &HTStyleGlossaryCompact, "Example", "XMP", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStylePreformatted = { &HTStyleExample, "Preformatted", "PRE", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleListing = { &HTStylePreformatted, "Listing", "LISTING", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStyleAddress = { &HTStyleListing, "Address", "ADDRESS", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_RIGHT, 1, 0, 0, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStyleBlockQuote = { &HTStyleAddress, "BlockQuote", "BLOCKQUOTE", HT_FONT, 1.0, HT_BLACK, 0, 0, 7, 5, 5, HT_LEFT, 1, 0, 0, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading1 = { &HTStyleBlockQuote, "Heading1", "H1", HT_FONT+HT_CAPITALS+HT_BOLD, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_CENTER, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading2 = { &HTStyleHeading1, "Heading2", "H2", HT_FONT+HT_CAPITALS, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading3 = { &HTStyleHeading2, "Heading3", "H3", HT_FONT+HT_BOLD, 1.0, HT_BLACK, 0, 0, 2, 2, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading4 = { &HTStyleHeading3, "Heading4", "H4", HT_FONT, 1.0, HT_BLACK, 0, 0, 4, 4, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading5 = { &HTStyleHeading4, "Heading5", "H5", HT_FONT, 1.0, HT_BLACK, 0, 0, 6, 6, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading6 = { &HTStyleHeading5, "Heading6", "H6", HT_FONT, 1.0, HT_BLACK, 0, 0, 8, 8, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading7 = { &HTStyleHeading6, "Heading7", "H7", HT_FONT, 1.0, HT_BLACK, 0, 0, 10, 10, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; /* Style sheet points to the last in the list: */ PRIVATE HTStyleSheet sheet = { "default.style", &HTStyleHeading7 }; /* sheet */ PUBLIC HTStyleSheet * styleSheet = &sheet; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/DefaultStyles.c.classic���������������������������������������������������������0100644�0000764�0000144�00000010121�05756776545�020435� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DefaultStyles.c ** A REAL STYLE SHEET FOR THE CHARACTER GRID BROWSER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** ** The dimensions are all in characters! */ #include "GridStyle.h" #include "HTFont.h" /* Tab arrays: */ PRIVATE HTTabStop tabs_8[] = { { 0, 8 }, {0, 16}, {0, 24}, {0, 32}, {0, 40}, { 0, 48 }, {0, 56}, {0, 64}, {0, 72}, {0, 80}, { 0, 88 }, {0, 96}, {0, 104}, {0, 112}, {0, 120}, { 0, 128 }, {0, 136}, {0, 144}, {0, 152}, {0, 160}, {0, 168}, {0, 176}, {0, 0 } /* Terminate */ }; #ifdef NOT_USED PRIVATE HTTabStop tabs_16[] = { { 0, 16 }, {0, 32}, {0, 48}, {0, 64}, {0, 80}, {0, 96}, {0, 112}, {0, 0 } /* Terminate */ }; #endif PRIVATE HTTabStop tabs_24[] = { {0, 24}, {0, 48}, /* 3 columns */ {0, 0 } /* Terminate */ }; /* Template: ** link to next, name, tag, tagtype, ** font, size, colour, superscript, anchor id, ** indents: (1st,l,r), justific, lineheight, descent, tabs, ** word wrap, free format, space: before, after, flags. */ PRIVATE HTStyle HTStyleNormal = { 0, "Normal", "P", HT_FONT, 1.0, HT_BLACK, 0, 0, 3, 3, 0, HT_LEFT, 1, 0, tabs_8, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleList = { &HTStyleNormal, "List", "UL", HT_FONT, 1.0, HT_BLACK, 0, 0, 6, 6, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleMenu = { &HTStyleList, "Menu", "MENU", HT_FONT, 1.0, HT_BLACK, 0, 0, 1, 1, 0, HT_LEFT, 1, 0, 0, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleDirect = { &HTStyleMenu, "Dir", "DIR", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_24, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleGlossary = { &HTStyleDirect, "Glossary", "DL", HT_FONT, 1.0, HT_BLACK, 0, 0, 2, 25, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleGlossaryCompact = { &HTStyleGlossary, "GlossaryCompact", "DLC", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 24, 0, HT_LEFT, 1, 0, 0, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleExample = { &HTStyleGlossaryCompact, "Example", "XMP", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStylePreformatted = { &HTStyleExample, "Preformatted", "PRE", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleListing = { &HTStylePreformatted, "Listing", "LISTING", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStyleAddress = { &HTStyleListing, "Address", "ADDRESS", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_RIGHT, 1, 0, 0, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStyleBlockQuote = { &HTStyleAddress, "BlockQuote", "BLOCKQUOTE", HT_FONT, 1.0, HT_BLACK, 0, 0, 7, 5, 5, HT_LEFT, 1, 0, 0, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading1 = { &HTStyleBlockQuote, "Heading1", "H1", HT_FONT+HT_CAPITALS+HT_BOLD, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_CENTER, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading2 = { &HTStyleHeading1, "Heading2", "H2", HT_FONT+HT_BOLD, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading3 = { &HTStyleHeading2, "Heading3", "H3", HT_FONT+HT_CAPITALS, 1.0, HT_BLACK, 0, 0, 2, 2, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading4 = { &HTStyleHeading3, "Heading4", "H4", HT_FONT, 1.0, HT_BLACK, 0, 0, 4, 4, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading5 = { &HTStyleHeading4, "Heading5", "H5", HT_FONT, 1.0, HT_BLACK, 0, 0, 6, 6, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading6 = { &HTStyleHeading5, "Heading6", "H6", HT_FONT, 1.0, HT_BLACK, 0, 0, 8, 8, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading7 = { &HTStyleHeading6, "Heading7", "H7", HT_FONT, 1.0, HT_BLACK, 0, 0, 10, 10, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; /* Style sheet points to the last in the list: */ PRIVATE HTStyleSheet sheet = { "default.style", &HTStyleHeading7 }; /* sheet */ PUBLIC HTStyleSheet * styleSheet = &sheet; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/DefaultStyles.c.modern����������������������������������������������������������0100644�0000764�0000144�00000010107�05756776546�020305� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DefaultStyles.c ** A REAL STYLE SHEET FOR THE CHARACTER GRID BROWSER ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** ** The dimensions are all in characters! */ #include "GridStyle.h" #include "HTFont.h" /* Tab arrays: */ PRIVATE HTTabStop tabs_8[] = { { 0, 8 }, {0, 16}, {0, 24}, {0, 32}, {0, 40}, { 0, 48 }, {0, 56}, {0, 64}, {0, 72}, {0, 80}, { 0, 88 }, {0, 96}, {0, 104}, {0, 112}, {0, 120}, { 0, 128 }, {0, 136}, {0, 144}, {0, 152}, {0, 160}, {0, 168}, {0, 176}, {0, 0 } /* Terminate */ }; #ifdef NOT_USED PRIVATE HTTabStop tabs_16[] = { { 0, 16 }, {0, 32}, {0, 48}, {0, 64}, {0, 80}, {0, 96}, {0, 112}, {0, 0 } /* Terminate */ }; #endif PRIVATE HTTabStop tabs_24[] = { {0, 24}, {0, 48}, /* 3 columns */ {0, 0 } /* Terminate */ }; /* Template: ** link to next, name, tag, tagtype, ** font, size, colour, superscript, anchor id, ** indents: (1st,l,r), justific, lineheight, descent, tabs, ** word wrap, free format, space: before, after, flags. */ PRIVATE HTStyle HTStyleNormal = { 0, "Normal", "P", HT_FONT, 1.0, HT_BLACK, 0, 0, 4, 4, 0, HT_LEFT, 1, 0, tabs_8, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleList = { &HTStyleNormal, "List", "UL", HT_FONT, 1.0, HT_BLACK, 0, 0, 8, 12, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleMenu = { &HTStyleList, "Menu", "MENU", HT_FONT, 1.0, HT_BLACK, 0, 0, 4, 4, 0, HT_LEFT, 1, 0, 0, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleDirect = { &HTStyleMenu, "Dir", "DIR", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_24, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleGlossary = { &HTStyleDirect, "Glossary", "DL", HT_FONT, 1.0, HT_BLACK, 0, 0, 4, 10, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleGlossaryCompact = { &HTStyleGlossary, "GlossaryCompact", "DLC", HT_FONT, 1.0, HT_BLACK, 0, 0, 4, 10, 0, HT_LEFT, 1, 0, 0, YES, YES, 0, 0, 0 }; PRIVATE HTStyle HTStyleExample = { &HTStyleGlossaryCompact, "Example", "XMP", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStylePreformatted = { &HTStyleExample, "Preformatted", "PRE", HT_FONT, 1.0, HT_BLACK, 0, 0, 4, 4, 0, HT_LEFT, 1, 0, tabs_8, NO, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleListing = { &HTStylePreformatted, "Listing", "LISTING", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStyleAddress = { &HTStyleListing, "Address", "ADDRESS", HT_FONT, 1.0, HT_BLACK, 0, 0, 4, 6, 0, HT_LEFT, 1, 0, 0, NO, NO, 0, 0, 0 }; PRIVATE HTStyle HTStyleBlockQuote = { &HTStyleAddress, "BlockQuote", "BLOCKQUOTE", HT_FONT, 1.0, HT_BLACK, 0, 0, 12, 8, 8, HT_LEFT, 1, 0, 0, NO, NO, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading1 = { &HTStyleBlockQuote, "Heading1", "H1", HT_FONT+HT_CAPITALS+HT_BOLD, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading2 = { &HTStyleHeading1, "Heading2", "H2", HT_FONT, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 1, 0 }; PRIVATE HTStyle HTStyleHeading3 = { &HTStyleHeading2, "Heading3", "H3", HT_FONT+HT_CAPITALS, 1.0, HT_BLACK, 0, 0, 2, 2, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading4 = { &HTStyleHeading3, "Heading4", "H4", HT_FONT, 1.0, HT_BLACK, 0, 0, 2, 2, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading5 = { &HTStyleHeading4, "Heading5", "H5", HT_FONT, 1.0, HT_BLACK, 0, 0, 2, 2, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading6 = { &HTStyleHeading5, "Heading6", "H6", HT_FONT, 1.0, HT_BLACK, 0, 0, 2, 2, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; PRIVATE HTStyle HTStyleHeading7 = { &HTStyleHeading6, "Heading7", "H7", HT_FONT, 1.0, HT_BLACK, 0, 0, 2, 2, 0, HT_LEFT, 1, 0, 0, YES, YES, 1, 0, 0 }; /* Style sheet points to the last in the list: */ PRIVATE HTStyleSheet sheet = { "default.style", &HTStyleHeading7 }; /* sheet */ PUBLIC HTStyleSheet * styleSheet = &sheet; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/GridStyle.c���������������������������������������������������������������������0100644�0000764�0000144�00000016122�06734504720�016117� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTStyle.c ** STYLE IMPLEMENTATION FOR HYPERTEXT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** ** Styles allow the translation between a logical property ** of a piece of text and its physical representation. ** ** A StyleSheet is a collection of styles, defining the ** translation necessary to ** represent a document. It is a linked list of styles. */ #include "WWWLib.h" #include "HTUtils.h" #include "GridStyle.h" /* #include "HTStyle.h" */ /* Local definition of style ** ------------------------- */ /* The Style Structure ** ------------------- */ #if 0 /* DEFINED IN GridStyle.h */ typedef double HTCoord; typedef int HTColor; typedef struct { short kind; /* only NX_LEFTTAB implemented*/ HTCoord position; /* x coordinate for stop */ } HTTabStop; typedef long int HTLMFont; /* For now */ #define HT_NON_BREAK_SPACE ((char)1) /* For now */ #define HT_FONT 0 #define HT_CAPITALS 1 #define HT_BOLD 2 #define HT_UNDERLINE 4 #define HT_INVERSE 8 #define HT_DOUBLE 0x10 #define HT_BLACK 0 #define HT_WHITE 1 struct _HTStyle { /* Style management information */ struct _HTStyle *next; /* Link for putting into stylesheet */ char * name; /* Style name */ char * SGMLTag; /* Tag name to start */ /* Character attributes (a la NXRun) */ HTFont font; /* Font id */ HTCoord fontSize; /* The size of font, not independent */ HTColor color; /* text gray of current run */ int superscript; /* superscript (-sub) in points */ HTAnchor *anchor; /* Anchor id if any, else zero */ /* Paragraph Attribtes (a la NXTextStyle) */ HTCoord indent1st; /* how far first line in paragraph is * indented */ HTCoord leftIndent; /* how far second line is indented */ HTCoord rightIndent; /* (Missing from NeXT version */ short alignment; /* quad justification */ HTCoord lineHt; /* line height */ HTCoord descentLine; /* descender bottom from baseline */ HTTabStop *tabs; /* array of tab stops, 0 terminated */ BOOL wordWrap; /* Yes means wrap at space not char */ BOOL HT_FREEFormat; /* Yes means \n is just white space */ HTCoord spaceBefore; /* Omissions from NXTextStyle */ HTCoord spaceAfter; int paraFlags; /* Paragraph flags, bits as follows: */ #define PARA_KEEP 1 /* Do not break page within this paragraph */ #define PARA_WITH_NEXT 2 /* Do not break page after this paragraph */ #define HT_JUSTIFY 0 /* For alignment */ #define HT_LEFT 1 #define HT_RIGHT 2 #define HT_CENTER 3 }; #endif /* DEFINED IN GridStyle.h */ /* Create a new style */ PUBLIC HTStyle* HTStyleNew (void) { HTStyle *style; if ((style = (HTStyle *) HT_CALLOC(1, sizeof(HTStyle))) == NULL) HT_OUTOFMEM("HTStyleNew"); return style; } /* Create a new style with a name */ PUBLIC HTStyle* HTStyleNewNamed (const char * name) { HTStyle * self = HTStyleNew(); StrAllocCopy(self->name, name); return self; } /* Free a style */ PUBLIC HTStyle * HTStyleFree (HTStyle * self) { if (self->name) HT_FREE(self->name); if (self->SGMLTag) HT_FREE(self->SGMLTag); HT_FREE(self); return 0; } /* Make a style from an element number */ #ifdef HTML2_ONLY PUBLIC HTStyle * HTModfyStyle (HTStyle * old, void * nesting, int element_number) { HTStyle * s; if ((s = (HTStyle *) HT_MALLOC(sizeof(*s))) == NULL) HT_OUTOFMEM("new style"); *s = *old; switch(element_number) { case HTML_UL: case HTML_OL: break; deault: break; } return s; } #endif /* StyleSheet Functions ** ==================== */ /* Searching for styles: */ HTStyle * HTStyleNamed (HTStyleSheet * self, const char * name) { HTStyle * scan; for (scan=self->styles; scan; scan=scan->next) if (0==strcmp(scan->name, name)) return scan; HTTRACE(SGML_TRACE, "StyleSheet: No style named `%s'\n" _ name); return 0; } /* Add a style to a sheet ** ---------------------- */ HTStyleSheet * HTStyleSheetAddStyle (HTStyleSheet * self, HTStyle * style) { style->next = 0; /* The style will go on the end */ if (!self->styles) { self->styles = style; } else { HTStyle * scan; for(scan=self->styles; scan->next; scan=scan->next); /* Find end */ scan->next=style; } return self; } /* Remove the given object from a style sheet if it exists */ HTStyleSheet * HTStyleSheetRemoveStyle (HTStyleSheet * self, HTStyle * style) { if (self->styles == style) { self->styles = style->next; return self; } else { HTStyle * scan; for(scan = self->styles; scan; scan = scan->next) { if (scan->next == style) { scan->next = style->next; return self; } } } return 0; } /* Create new style sheet */ HTStyleSheet * HTStyleSheetNew (void) { HTStyleSheet * style; if ((style = (HTStyleSheet *) HT_CALLOC(1, sizeof(HTStyleSheet))) == NULL) HT_OUTOFMEM("HTStyleSheetNew"); return style; } /* Free off a style sheet pointer */ HTStyleSheet * HTStyleSheetFree (HTStyleSheet * self) { HTStyle * style; while((style=self->styles)!=0) { self->styles = style->next; HTStyleFree(style); } HT_FREE(self); return 0; } /* Read a stylesheet from a typed stream ** ------------------------------------- ** ** Reads a style sheet from a stream. If new styles have the same names ** as existing styles, they replace the old ones without changing the ids. */ #ifdef NEXT_SUPRESS /* Only on the NeXT */ HTStyleSheet * HTStyleSheetRead(HTStyleSheet * self, NXStream * stream) { int numStyles; int i; HTStyle * style; char styleName[80]; NXScanf(stream, " %d ", &numStyles); HTTRACE(SGML_TRACE, "Stylesheet: Reading %d styles\n" _ numStyles); for (i=0; i<numStyles; i++) { NXScanf(stream, "%s", styleName); style = HTStyleNamed(self, styleName); if (!style) { style = HTStyleNewNamed(styleName); (void) HTStyleSheetAddStyle(self, style); } (void) HTStyleRead(style, stream); if (SGML_TRACE) HTStyleDump(style); } return self; } /* Write a stylesheet to a typed stream ** ------------------------------------ ** ** Writes a style sheet to a stream. */ HTStyleSheet * HTStyleSheetWrite(HTStyleSheet * self, NXStream * stream) { int numStyles = 0; HTStyle * style; for(style=self->styles; style; style=style->next) numStyles++; NXPrintf(stream, "%d\n", numStyles); HTTRACE(SGML_TRACE, "StyleSheet: Writing %d styles\n" _ numStyles); for (style=self->styles; style; style=style->next) { NXPrintf(stream, "%s ", style->name); (void) HTStyleWrite(style, stream); } return self; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/GridStyle.html������������������������������������������������������������������0100644�0000764�0000144�00000013063�06734504720�016642� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>HTStyle: Style management for libwww</TITLE> </HEAD> <BODY> <H1> Style Definition for Hypertext </H1> <PRE> /* **(c) COPYRIGHT MIT 1995. **Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> Styles allow the translation between a logical property of a piece of text and its physical representation. <P> A StyleSheet is a collection of styles, defining the translation necessary to represent a document. It is a linked list of styles. <H2> Overriding this module </H2> <P> Why is the style structure declared in the HTStyle.h module, instead of having the user browser define the structure, and the HTStyle routines just use sizeof() for copying? <P> It's not obvious whether HTStyle.c should be common code. It's useful to have common code for loading style sheets, especially if the movement toward standard style sheets gets going. <P> If it IS common code, then both the hypertext object and HTStyle.c must know the structure of a style, so HTStyle.h is a suitable place to put that. HTStyle.c has to be compiled with a knowledge of the <P> It we take it out of the library, then of course HTStyle could be declared as an undefined structure. The only references to it are in the structure-flattening code HTML.c and HTPlain.c, which only use HTStypeNamed(). <P> You can in any case override this function in your own code, which will prevent the HTStyle from being loaded. You will be able to redefine your style structure in this case without problems, as no other moule needs to know it. <PRE> #ifndef GridStyle_H #define GridStyle_H #include "HText.h" #include "HTFont.h" #include "HTStyle.h" typedef double HTCoord; typedef int HTColor; /* Sorry about the US spelling! */ typedef struct { short kind; /* only NX_LEFTTAB implemented*/ HTCoord position; /* x coordinate for stop */ } HTTabStop; #define STYLE_NAME_LENGTH 80 /* @@@@@@@@@@@ */ </PRE> <H2> The Style Structure </H2> <PRE> struct _HTStyle { /* Style management information */ struct _HTStyle * next; /* Link for putting into stylesheet */ char * name; /* Style name */ char * SGMLTag; /* Tag name to start */ /*Character attributes(a la NXRun) */ HTFont font; /* Font id */ HTCoord fontSize; /* The size of font, not independent */ HTColor color; /* text gray of current run */ int superscript; /* superscript (-sub) in points */ HTAnchor*anchor;/* Anchor id if any, else zero */ /* Paragraph Attribtes(a la NXTextStyle) */ HTCoord indent1st; /* how far 1st line is indented */ HTCoord leftIndent; /* how far second line is indented */ HTCoord rightIndent; /* (Missing from NeXT version */ short alignment; /* quad justification */ HTCoord lineHt; /* line height */ HTCoord descentLine; /* descender bottom from baseline */ HTTabStop *tabs; /* array of tab stops, 0 terminated */ BOOL wordWrap; /* Yes means wrap at space not char */ BOOL freeFormat; /* Yes means \n is just white space */ HTCoord spaceBefore; /* Omissions from NXTextStyle */ HTCoord spaceAfter; int paraFlags; /* Paragraph flags, bits as follows: */ }; #define PARA_KEEP 1 /* Do not break page within this paragraph */ #define PARA_WITH_NEXT 2 /* Do not break page after this paragraph */ #define HT_JUSTIFY 0 /* For alignment */ #define HT_LEFT 1 #define HT_RIGHT 2 #define HT_CENTER 3 #ifdef NOT_IN_GRIDSTYLE </PRE> <H2> Style Creation </H2> <H3> HtStyleModify </H3> <P> This routine is passed the style for a particular SGML nesting state, and the element number of a new element whithin that state. The routine returns a suitable style for text within the new element. It is passed a popinter tothe nesting state so that it can link the style back to the nesting state for later manipulation of the SGML nesting tree. <PRE> extern HTStyle * HTStyleModify (HTStyle * style, HTNesting * nesting, int element_number); /* Style functions: */ extern HTStyle * HTStyleNew (void); extern HTStyle * HTStyleNewNamed (const char * name); extern HTStyle * HTStyleFree (HTStyle * self); #endif /* Style Sheet */ struct _HTStyleSheet { char * name; HTStyle * styles; }; #ifdef NOT_IN_GRIDSTYLE /* Stylesheet functions: */ extern HTStyleSheet * HTStyleSheetNew (void); extern HTStyleSheet * HTStyleSheetFree (HTStyleSheet * self); extern HTStyle * HTStyleNamed (HTStyleSheet * self, const char * name); extern HTStyle * HTStyleMatching (HTStyleSheet *self, HTStyle * style); extern HTStyleSheet * HTStyleSheetAddStyle (HTStyleSheet * self, HTStyle * style); extern HTStyleSheet * HTStyleSheetRemoveStyle (HTStyleSheet * self, HTStyle * style); #define CLEAR_POINTER ((void *)-1) /* Pointer value means "clear me" */ #endif /* NOT IN GRIDSTYLE */ #endif /* GRIDSTYLE_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: GridStyle.html,v 1.10 2025/06/24 19:41:04 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/GridText.c����������������������������������������������������������������������0100644�0000764�0000144�00000065723�07142517514�015755� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* GridText.c ** CHARACTER GRID HYPERTEXT OBJECT ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: GridText.c,v 1.53 2025/08/04 10:47:40 kahan Exp $ ** ** This is the definition of the HyperDoc object and the HText interface ** which is used in the current Library HTML parser */ #include <assert.h> #include "WWWLib.h" #include "WWWCache.h" #include "WWWApp.h" #include "WWWHTML.h" #include "HTBrowse.h" #include "HTFont.h" #include "GridStyle.h" #include "GridText.h" /* HWL 18/7/94: applied patch from agl@glas2.glas.apc.org (Anton Tropashko) */ #ifdef CYRILLIC #include "a_stdio.h" #endif #define MAX_LINE HTScreenWidth /* No point in accumulating more */ #define LOADED_LIMIT 40 #ifdef CURSES #define DISPLAY_LINES (HTScreenHeight) #define TITLE_LINES 0 #else #define DISPLAY_LINES (HTScreenHeight - 2) /* Exclude prompt line */ #define TITLE_LINES 1 #endif struct _HTStream { /* only know it as object */ const HTStreamClass * isa; /* ... */ }; /* From default style sheet: */ extern HTStyleSheet * styleSheet; /* Default or overridden */ /* Exports */ PUBLIC HText * HTMainText = 0; /* Equivalent of main window */ PUBLIC HTParentAnchor * HTMainAnchor = 0; /* Anchor for HTMainText */ typedef struct _line { struct _line *next; struct _line *prev; short unsigned offset; /* Implicit initial spaces */ short unsigned size; /* Number of characters */ BOOL split_after; /* Can we split after? */ BOOL bullet; /* Do we bullet? */ char data[1]; /* Space for terminator at least! */ } HTLine; #define LINE_SIZE(l) (sizeof(HTLine)+(l)) /* allow for terminator */ typedef struct _TextAnchor { struct _TextAnchor * next; int number; /* For user interface */ int start; /* Characters */ int extent; /* Characters */ HTChildAnchor * anchor; } TextAnchor; /* Notes on struct _Htext: ** next_line is valid iff state is false. ** top_of_screen line means the line at the top of the screen ** or just under the title if there is one. */ struct _HText { HTParentAnchor * node_anchor; char * title; HTLine * last_line; int lines; /* Number of them */ int chars; /* Number of them */ TextAnchor * first_anchor; /* Singly linked list */ TextAnchor * last_anchor; int last_anchor_number; /* user number */ TextAnchor * current_anchor; /* For Internal use: */ HTStyle * style; /* Current style */ int display_on_the_fly; /* Lines left */ BOOL all_pages; /* Loop on the fly */ int top_of_screen; /* Line number */ HTLine * top_of_screen_line; /* Top */ HTLine * next_line; /* Bottom + 1 */ int permissible_split; /* in last line */ BOOL in_line_1; /* of paragraph */ BOOL stale; /* Must refresh */ HTStream* target; /* Output stream */ HTStreamClass targetClass; /* Output routines */ LineMode * pLm; }; PRIVATE HTTabStop tabs_8[] = { { 0, 8 }, {0, 16}, {0, 24}, {0, 32}, {0, 40}, { 0, 48 }, {0, 56}, {0, 64}, {0, 72}, {0, 80}, { 0, 88 }, {0, 96}, {0, 104}, {0, 112}, {0, 120}, { 0, 128 }, {0, 136}, {0, 144}, {0, 152}, {0, 160}, {0, 168}, {0, 176}, {0, 0 } /* Terminate */ }; #define PUTC(c) (*text->targetClass.put_character)(text->target, c) #define PUTS(s) (*text->targetClass.put_string)(text->target, s) /* Boring static variable used for moving cursor across */ #define SPACES(n) (&space_string[HTScreenWidth - (n)]) /* String containing blank spaces only */ PRIVATE char * space_string; PRIVATE HTStyle default_style = { 0, "(Unstyled)", "", (HTFont)0, 1.0, HT_BLACK, 0, 0, 0, 0, 0, HT_LEFT, 1, 0, tabs_8, NO, NO, 0, 0, 0 }; PUBLIC void clear_screen (void); /* Forward */ PRIVATE HTList * loaded_texts; /* A list of all those in memory */ /* Creation Method ** --------------- ** ** Interactive version ** */ extern LineMode * Context_getLineMode(HTRequest * request); PUBLIC HText * LMHText_new ( HTRequest * request, HTParentAnchor * anchor, HTStream *outstrm) { HTLine * line; HText * self; if ((self = (HText *) HT_CALLOC(1, sizeof(*self))) == NULL) /* HT_OUTOFMEM("HText"); */ return self; self->pLm = Context_getLineMode(request); if (!loaded_texts) loaded_texts = HTList_new(); HTList_addObject(loaded_texts, self); if (HTList_count(loaded_texts) >= LOADED_LIMIT) { HTTRACE(CACHE_TRACE, "MemoryCache. Freeing off cached doc.\n"); HText_free((HText *)HTList_removeFirstObject(loaded_texts)); } if ((line = self->last_line = (HTLine *) HT_MALLOC(LINE_SIZE(MAX_LINE))) == NULL) HT_OUTOFMEM("HText_New"); line->next = line->prev = line; line->offset = line->size = 0; self->lines = self->chars = 0; self->title = 0; self->first_anchor = self->last_anchor = self->current_anchor = 0; self->style = &default_style; self->top_of_screen = 0; self->node_anchor = anchor; self->last_anchor_number = 0; /* Numbering of them for references */ self->stale = YES; self->target = NULL; HTAnchor_setDocument(anchor, (void *) self); clear_screen(); HTMainText = self; HTMainAnchor = anchor; self->display_on_the_fly = DISPLAY_LINES; self->all_pages = NO; /* One page at a time on the fly */ if (!space_string) { /* Make a blank line */ char *p; if ((space_string = (char *) HT_MALLOC(HTScreenWidth+1)) == NULL) HT_OUTOFMEM("HText_New"); for (p=space_string; p<space_string+HTScreenWidth; p++) *p = ' '; /* Used for printfs later */ space_string[HTScreenWidth] = '\0'; } return self; } /* Creation Method 2 ** --------------- ** ** Non-interative OR interactive if stream is NULL ** Stream is assumed open and left open. */ PUBLIC HText * LMHText_new2 (HTRequest * request, HTParentAnchor * anchor, HTStream * stream) { HText * me = LMHText_new(request, anchor, stream); if (stream) { me->target = stream; me->targetClass = *stream->isa; /* copy action procedures */ me->all_pages = YES; /* Display whole file on the fly */ } return me; } /* Free a data object ** ------------------ ** Removes the data object from the anchor */ PUBLIC void hyper_free (HText * self) { if (self) { while (1) { /* Free off line array */ HTLine * last = self->last_line; if (last) { last->next->prev = last->prev; last->prev->next = last->next; self->last_line = last->prev; if (last == self->last_line) break; HT_FREE(last); } else break; } while (self->first_anchor) { /* Free off anchor array */ TextAnchor * last = self->first_anchor; self->first_anchor = last->next; HT_FREE(last); } if (self == HTMainText) HTMainText = NULL; HT_FREE(self->last_line); HT_FREE(self); } } /* Free Entire Text ** ---------------- */ PUBLIC void HText_free (HText * self) { if (self) { HTAnchor_setDocument(self->node_anchor, NULL); hyper_free(self); } } PUBLIC BOOL LMHText_delete (HText * self) { if (self) { HTAnchor_setDocument(self->node_anchor, NULL); hyper_free(self); return YES; } return NO; } /* ** Free all registered hypertext documents in memory */ PUBLIC BOOL HText_freeAll (void) { if (loaded_texts) { HTList * cur = loaded_texts; HText * pres; while ((pres = (HText *) HTList_nextObject(cur))) HText_free(pres); HTList_delete(loaded_texts); return YES; } return NO; } /* Display Methods ** --------------- */ /* Clear the screen (on screen-mode systems) ** ---------------- */ PUBLIC void clear_screen (void) { if (WWWTRACE) return; /* in trace mode, don't clear trace away */ #ifdef CURSES if (w_text != NULL) { wmove(w_text,0,0); wclear(w_text); } #endif /* Not CURSES */ if (HTMainText) HTMainText->stale = YES; } /* Output a line ** ------------- */ PRIVATE void display_line (HText * text, HTLine * line) { #ifdef CURSES int y, x; waddstr(w_text, SPACES(line->offset)); waddstr(w_text, line->data); getyx(w_text, y, x); if (y < DISPLAY_LINES-1) { wmove(w_text, ++y, 0); } #else if (!text->target) { #ifdef CYRILLIC /* HWL 18/7/94: applied patch from agl@glas2.glas.apc.org (Anton Tropashko) */ a_print(SPACES(line->offset),H,stdout); a_print(line->data,H,stdout); fputc('\n',stdout); #else OutputData(LineMode_getView(text->pLm), "%s%s\n", SPACES(line->offset), line->data); #endif } else { PUTS(SPACES(line->offset)); PUTS(line->data); PUTC('\n'); } #endif } /* Output the title line ** --------------------- */ PRIVATE void display_title (HText * text) { const char * title = HTAnchor_title(text->node_anchor); char percent[20], format[20]; if (text->lines > (DISPLAY_LINES-1)) { #ifdef NOPE sprintf(percent, " (p%d of %d)", (text->top_of_screen/(DISPLAY_LINES-1)) + 1, (text->lines-1)/(DISPLAY_LINES-1) + 1); sprintf(percent, " (%d%%)", 100*(text->top_of_screen+DISPLAY_LINES-1)/ /* Seen */ (text->lines)); /* Total */ #else sprintf(percent, " (%d/%d)", text->top_of_screen+DISPLAY_LINES-1, /* Seen */ text->lines); /* Total */ #endif } else { percent[0] = 0; /* Null string */ } sprintf(format, "%%%d.%ds%%s\n", /* Generate format string */ (int)(HTScreenWidth-strlen(percent)), (int)(HTScreenWidth-strlen(percent)) ); #ifdef CURSES mvwprintw(w_top, 0, 0, format, title, percent); wrefresh(w_top); #else if (!text->target) OutputData(LineMode_getView(text->pLm), format, title, percent); else { char * line; if ((line = (char *) HT_MALLOC(HTScreenWidth+10)) == NULL) HT_OUTOFMEM("display_titile"); sprintf(line, format, title, percent); PUTS(line); HT_FREE(line); } #endif } /* Fill the screen with blank after the file ** -------------------------- */ PRIVATE void fill_screen (HText * text, int n) { if (n<=0 || n>1000) return; /* Large value means no pagination */ if (text->target) return; #ifdef CURSES waddstr(w_text, end_mark); wclrtobot(w_text); wrefresh(w_text); #else #ifndef VIOLA if (!text->target) OutputData(LineMode_getView(text->pLm), "%s\n", end_mark); else { PUTS(end_mark); PUTC('\n'); } n--; for (; n; n--) { if (!text->target) OutputData(LineMode_getView(text->pLm), "\n"); else PUTC('\n'); } #endif #endif /* Not CURSES */ } /* Output a page ** ------------- */ PRIVATE void display_page (HText * text, int line_number) { HTLine * line = text->last_line->prev; int i; const char * title = HTAnchor_title(text->node_anchor); int lines_of_text = title ? (DISPLAY_LINES-TITLE_LINES) : DISPLAY_LINES; int last_screen = text->lines - lines_of_text; /* Constrain the line number to be within the document */ if (text->lines <= lines_of_text) line_number = 0; else if (line_number>last_screen) line_number = last_screen; else if (line_number < 0) line_number = 0; for(i=0, line = text->last_line->next; /* Find line */ i<line_number && (line!=text->last_line); i++, line=line->next) /* Loop */ assert(line->next != NULL); while((line!=text->last_line) && (line->size==0)) { /* Skip blank lines */ assert(line->next != NULL); line = line->next; line_number ++; } /* Can we just scroll to it? */ #ifndef VM /* No scrolling */ if (!text->stale && (line_number>=text->top_of_screen) && (line_number < text->top_of_screen + DISPLAY_LINES)) { /* Yes */ lines_of_text = line_number - text->top_of_screen; line = text->next_line; text->top_of_screen = line_number; #ifdef CURSES scrollok(w_text, TRUE); for (i = 0; i < lines_of_text; i++) { scroll(w_text); } #endif } else #endif { clear_screen(); /* No */ text->top_of_screen = line_number; if (title) display_title(text); } /* Bug: when we scroll to a part slightly futher down a page which previously fitted all on one screen including the [End], the code below will add an extra [End] to the screen, giving a total of two, one underneath the other. */ /* print it */ if (line) { for(i=0; (i< lines_of_text) && (line != text->last_line); i++) { assert(line != NULL); display_line(text, line); line = line->next; } fill_screen(text, lines_of_text - i); } text->next_line = line; /* Line after screen */ text->stale = NO; /* Display is up-to-date */ } /* Object Building methods ** ----------------------- ** ** These are used by a parser to build the text in an object */ PUBLIC void HText_beginAppend (HText * text) { text->permissible_split = 0; text->in_line_1 = YES; } /* Add a new line of text ** ---------------------- ** ** On entry, ** ** split is zero for newline function, else number of characters ** before split. ** text->display_on_the_fly ** may be set to indicate direct output of the finished line. ** text->all_pages ** if set indicates all pages are to be done on the fly. ** On exit, ** A new line has been made, justified according to the ** current style. Text after the split (if split nonzero) ** is taken over onto the next line. ** ** If display_on_the_fly is set, then it is decremented and ** the finished line is displayed. */ #define new_line(text) split_line(text, 0) PRIVATE void split_line (HText * text, int split) { HTStyle * style = text->style; int spare; int indent = (int) (text->in_line_1 ? text->style->indent1st : text->style->leftIndent); /* Make new line */ HTLine * previous = text->last_line; HTLine * line; if ((line = (HTLine *) HT_MALLOC(LINE_SIZE(MAX_LINE))) == NULL) HT_OUTOFMEM("split_line"); text->lines++; previous->next->prev = line; line->prev = previous; line->next = previous->next; previous->next = line; text->last_line = line; line->size = 0; line->offset = 0; /* Split at required point */ if (split) { /* Delete space at "split" splitting line */ char * p; previous->data[previous->size] = 0; for (p = &previous->data[split]; *p; p++) if (*p != ' ') break; strcpy(line->data, p); line->size = strlen(line->data); previous->size = split; } while ((previous->size > 0) && (previous->data[previous->size-1] == ' ')) /* Strip trailers */ previous->size--; if ((previous = (HTLine *) HT_REALLOC(previous, LINE_SIZE(previous->size)))==NULL) HT_OUTOFMEM("split_line"); previous->prev->next = previous; /* Link in new line */ previous->next->prev = previous; /* Could be same node of course */ /* Terminate finished line for printing */ previous->data[previous->size] = 0; /* Align left, right or center */ spare = (int) (HTScreenWidth - style->rightIndent + style->leftIndent - previous->size); /* @@ first line indent */ switch (style->alignment) { case HT_CENTER : previous->offset = previous->offset + indent + spare/2; break; case HT_RIGHT : previous->offset = previous->offset + indent + spare; break; case HT_LEFT : case HT_JUSTIFY : /* Not implemented */ default: previous->offset = previous->offset + indent; break; } /* switch */ text->chars = text->chars + previous->size + 1; /* 1 for the line */ text->in_line_1 = NO; /* unless caller sets it otherwise */ /* If displaying as we go, output it: */ if (text->display_on_the_fly) { if (text->display_on_the_fly == DISPLAY_LINES) { /* First line */ if (previous->size == 0) { text->top_of_screen++; /* Scroll white space off top */ return; } if (HTAnchor_title(text->node_anchor)) { /* Title exists */ display_title(text); text->display_on_the_fly--; } } display_line(text, previous); text->display_on_the_fly--; /* Loop to top of next page? */ if (!text->display_on_the_fly && text->all_pages) { PUTS("\f\n"); /* Form feed on its own line a la rfc1111 */ text->display_on_the_fly = DISPLAY_LINES; } } } /* split_line */ /* Allow vertical blank space ** -------------------------- */ PRIVATE void blank_lines (HText * text, int newlines) { if (text->last_line->size == 0) { /* No text on current line */ HTLine * line = text->last_line->prev; while ((line!=text->last_line) && (line->size == 0)) { if (newlines==0) break; newlines--; /* Don't bother: already blank */ line = line->prev; } } else { newlines++; /* Need also to finish this line */ } for(;newlines;newlines--) { new_line(text); } text->in_line_1 = YES; } /* New paragraph in current style ** ------------------------------ ** See also: setStyle. */ PUBLIC void HText_appendParagraph (HText * text) { int after = (int) text->style->spaceAfter; int before = (int) text->style->spaceBefore; blank_lines(text, after>before ? after : before); } /* Set Style ** --------- ** ** Does not filter unnecessary style changes. */ PUBLIC void HText_setStyle (HText * text, HTStyle * style) { int after, before; if (!style) return; /* Safety */ after = (int) text->style->spaceAfter; before = (int) style->spaceBefore; HTTRACE(SGML_TRACE, "Rendering... Change to style %s\n" _ style->name); blank_lines (text, after>before ? after : before); text->style = style; } /* Append a character to the text object ** ------------------------------------- */ PUBLIC void HText_appendCharacter (HText * text, char ch) { HTLine * line = text->last_line; HTStyle * style = text->style; int indent = (int)(text->in_line_1 ? style->indent1st : style->leftIndent); /* New Line */ if (ch == '\n') { new_line(text); text->in_line_1 = YES; /* First line of new paragraph */ return; } /* Tabs */ if (ch == '\t') { HTTabStop * tab; int target; /* Where to tab to */ int here = line->size + line->offset +indent; if (style->tabs) { /* Use tab table */ for (tab = style->tabs; tab->position <= here; tab++) if (!tab->position) { new_line(text); return; } target = (int) tab->position; } else if (text->in_line_1) { /* Use 2nd indent */ if (here >= style->leftIndent) { new_line(text); /* wrap */ return; } else { target = (int) style->leftIndent; } } else { /* Default tabs align with left indent mod 8 */ #ifdef DEFAULT_TABS_8 target = ((line->offset + line->size + 8) & (-8)) + style->leftIndent; #else new_line(text); return; #endif } if (target > HTScreenWidth - style->rightIndent) { new_line(text); return; } else { text->permissible_split = line->size; /* Can split here */ if (line->size == 0) line->offset = line->offset + target - here; else for(; here<target; here++) { line->data[line->size++] = ' '; /* Put character into line */ } return; } /*NOTREACHED*/ } /* if tab */ if (ch==' ') { text->permissible_split = line->size; /* Can split here */ } /* Check for end of line */ if (indent + line->offset + line->size + style->rightIndent >= HTScreenWidth) { if (style->wordWrap) { if(text->permissible_split > line->size) /* HENRIK 21/02-94 */ text->permissible_split = line->size; split_line(text, text->permissible_split); if (ch==' ') return; /* Ignore space causing split */ } else new_line(text); } /* Insert normal characters */ if (ch == HT_NON_BREAK_SPACE) { ch = ' '; } { HTLine * line = text->last_line; /* May have changed */ HTFont font = style->font; line->data[line->size++] = /* Put character into line */ font & HT_CAPITALS ? TOUPPER(ch) : ch; if (font & HT_DOUBLE) /* Do again if doubled */ HText_appendCharacter(text, HT_NON_BREAK_SPACE); /* NOT a permissible split */ } } PUBLIC void HText_appendText (HText * text, const char * str) { const char * p; for(p=str; *p; p++) { HText_appendCharacter(text, *p); } } PUBLIC void HText_endAppend (HText * text) { new_line(text); if (text->display_on_the_fly) { /* Not finished? */ fill_screen(text, text->display_on_the_fly); /* Finish it */ text->display_on_the_fly = 0; text->next_line = text->last_line; /* Bug fix after EvA 920117 */ text->stale = NO; } } /* Anchor handling ** --------------- */ /* Start an anchor field */ PUBLIC void LMHText_beginAnchor (HText * text, int elem_num, int attr_num, HTChildAnchor * anc, const BOOL *present, const char **value) { char marker[100]; TextAnchor * a; /* this is because it's called as link callback */ if (elem_num != HTML_A) return; if ((a = (TextAnchor *) HT_MALLOC(sizeof(*a))) == NULL) HT_OUTOFMEM("HText_beginAnchor"); a->start = text->chars + text->last_line->size; a->extent = 0; if (text->last_anchor) { text->last_anchor->next = a; } else { text->first_anchor = a; } a->next = 0; a->anchor = anc; text->last_anchor = a; text->current_anchor = a; if (HTAnchor_followMainLink((HTAnchor*)anc)) { a->number = ++(text->last_anchor_number); } else { a->number = 0; } } PUBLIC void LMHText_endAnchor (HText * text) { TextAnchor * a = text->current_anchor; char marker[100]; if (!a) /* </A> without <A> */ return; if (a->number && display_anchors) { /* If it goes somewhere */ sprintf(marker, end_reference, a->number); HText_appendText(text, marker); } a->extent = text->chars + text->last_line->size - a->start; text->current_anchor = 0; } /* LMHText_addText() satisfies HText callback requirement. */ PUBLIC void LMHText_addText (HText * text, const char * str, int length) { const char * p; int i; for (i=0,p=str; i<length; ++i,++p) { HText_appendCharacter(text, *p); } } /* IMAGES */ PUBLIC void HText_appendImage ( HText * text, HTChildAnchor * anc, const char * alt, const char * alignment, BOOL isMap) { HText_appendText(text, alt? alt : "[IMAGE]"); } PUBLIC void HText_appendObject (HText * text, int element_number, const BOOL * present, const char ** value) { } PUBLIC void HText_appendLink (HText * text, HTChildAnchor * anchor, const BOOL * present, const char ** value) { } /* Return the anchor associated with this node */ PUBLIC HTParentAnchor * HText_nodeAnchor (HText * text) { return text->node_anchor; } /* GridText specials ** ================= */ /* Return the anchor with index N ** ** The index corresponds to the number we print in the anchor. */ PUBLIC HTChildAnchor * HText_childNumber (HText * text, int number) { TextAnchor * a; for (a = text->first_anchor; a; a = a->next) { if (a->number == number) return a->anchor; } return (HTChildAnchor *)0; /* Fail */ } PUBLIC void HText_setStale (HText * text) { if (text) text->stale = YES; } PUBLIC void HText_refresh (HText * text) { if (text && text->stale) display_page(text, text->top_of_screen); } PUBLIC int HText_sourceAnchors (HText * text) { return (text ? text->last_anchor_number : -1); } PUBLIC BOOL HText_canScrollUp (HText * text) { return (text && text->top_of_screen != 0); } PUBLIC BOOL HText_canScrollDown (HText * text) { return (text && (text->top_of_screen + DISPLAY_LINES - (text->title ? TITLE_LINES : 0)) < text->lines); } /* Scroll actions */ PUBLIC void HText_scrollTop (HText * text) { display_page(text, 0); } PUBLIC void HText_scrollDown (HText * text) { display_page(text, text->top_of_screen + DISPLAY_LINES -1); } PUBLIC void HText_scrollUp (HText * text) { display_page(text, text->top_of_screen - DISPLAY_LINES +1); } PUBLIC void HText_scrollBottom (HText * text) { display_page(text, text->lines - DISPLAY_LINES +1); } /* Browsing functions ** ================== */ /* Bring to front and highlight it */ PRIVATE int line_for_char (HText * text, int char_num) { int line_number =0; int characters = 0; HTLine * line = text->last_line->next; for(;;) { if (line == text->last_line) return 0; /* Invalid */ characters = characters + line->size + 1; if (characters > char_num) return line_number; line_number ++; line = line->next; } } PUBLIC BOOL HText_select (HText * text) { if (text) { HTMainText = text; HTMainAnchor = text->node_anchor; display_page(text, text->top_of_screen); return YES; } HTTRACE(SGML_TRACE, "Rendering... Nothing to select!\n"); return NO; } PUBLIC BOOL HText_selectAnchor (HText * text, HTChildAnchor * anchor) { TextAnchor * a; for(a=text->first_anchor; a; a=a->next) { if (a->anchor == anchor) break; } if (!a) { HTTRACE(SGML_TRACE, "Rendering... No such anchor in this text!\n"); return NO; } if (text != HTMainText) { /* Comment out by ??? */ HTMainText = text; /* Put back in by tbl 921208 */ HTMainAnchor = text->node_anchor; } { int l = line_for_char(text, a->start); HTTRACE(SGML_TRACE, "Rendering... Selecting anchor [%d] at char %d, line %d\n" _ a->number _ a->start _ l); if ( !text->stale && (l >= text->top_of_screen) && ( l < text->top_of_screen + DISPLAY_LINES-1)) return YES; display_page(text, l - (DISPLAY_LINES/3)); /* Scroll to it */ } return YES; } /* Editing functions - NOT IMPLEMENTED ** ================= ** ** These are called from the application. There are many more functions ** not included here from the orginal text object. */ /* Style handling: */ /* Apply this style to the selection */ PUBLIC void HText_applyStyle (HText * me, HTStyle * style) { } /* Update all text with changed style. */ PUBLIC void HText_updateStyle (HText * me, HTStyle * style) { } /* Return style of selection */ PUBLIC HTStyle * HText_selectionStyle ( HText * me, HTStyleSheet * sheet) { return 0; } /* Paste in styled text */ PUBLIC void HText_replaceSel ( HText * me, const char * aString, HTStyle * aStyle) { } /* Apply this style to the selection and all similarly formatted text ** (style recovery only) */ PUBLIC void HTextApplyToSimilar (HText * me, HTStyle * style) { } /* Select the first unstyled run. ** (style recovery only) */ PUBLIC void HTextSelectUnstyled (HText * me, HTStyleSheet * sheet) { } /* Anchor handling: */ PUBLIC void HText_unlinkSelection (HText * me) { } PUBLIC HTAnchor * HText_referenceSelected (HText * me) { return 0; } #ifdef CURSES PUBLIC int HText_getTopOfScreen (HText * text) { return text->top_of_screen; } PUBLIC int HText_getLines (HText * text) { return text->lines; } #endif PUBLIC HTAnchor * HText_linkSelTo (HText * me, HTAnchor * anchor) { return 0; } /* HTML callback functions */ PUBLIC void LMHText_beginElement (HText * text, int elem_num, const BOOL * present, const char ** value) { return; } PUBLIC void LMHText_endElement (HText * text, int elem_num) { switch (elem_num) { case HTML_A: LMHText_endAnchor (text); break; default: break; } return; } ���������������������������������������������libwww/LineMode/src/GridText.html�������������������������������������������������������������������0100644�0000764�0000144�00000004164�07141242267�016466� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Style Management for Line Mode Browser</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 4-Jul-1996 --> </HEAD> <BODY> <H1>Style Definition for Hypertext</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module defines the HText functions referenced from the HTML module in the <A HREF="http://www.w3.org/Library/">W3C Sample Code Library</A>. <PRE> #include "WWWLib.h" #include "HText.h" extern HTChildAnchor * HText_childNumber (HText * text, int n); /* delete a hyper doc object with interfering with any anchors */ extern void hyperfree (HText * me); /* Is there any file left? */ extern BOOL HText_canScrollUp (HText * text); extern BOOL HText_canScrollDown (HText * text); /* Move display within window */ extern void HText_scrollUp (HText * text); /* One page */ extern void HText_scrollDown (HText * text); /* One page */ extern void HText_scrollTop (HText * text); extern void HText_scrollBottom (HText * text); extern int HText_sourceAnchors (HText * text); extern void HText_setStale (HText * text); extern void HText_refresh (HText * text); #ifdef CURSES extern int HText_getTopOfScreen (HText * text); extern int HText_getLines (HText * text); #endif </PRE> <H2> Delete All Documents in Memory </H2> This is typically called at clean up time just before exiting the application. <PRE> extern BOOL HText_freeAll (void); </PRE> <H2> Callbacks </H2> These functions are invoked as callbacks from the HText interface. <PRE> extern HText* LMHText_new (HTRequest * req, HTParentAnchor * anchor,HTStream * output_stream); extern HText* LMHText_new2 (HTRequest * req, HTParentAnchor * anchor,HTStream * output_stream); extern void HText_free (HText * self); extern BOOL LMHText_delete (HText * self); extern void LMHText_addText (HText * text, const char * str, int length); extern void LMHText_appendText (HText * text, const char * str); extern void LMHText_beginAnchor (HText *text, int elem_num, int attr_num, HTChildAnchor* anc, const BOOL* present, const char** value); </PRE> End of declaration </BODY> </HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/HTBrowse.c����������������������������������������������������������������������0100644�0000764�0000144�00000174721�07140255754�015722� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTBrowse.c ** HYPERTEXT BROWSER FOR DUMB TERMINALS ** ** (c) COPRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTBrowse.c,v 1.184 2025/07/28 10:09:48 kahan Exp $ ** ** Authors: ** NP: Nicola Pellow Tech.Student CERN 1990-91 ** TBL: Tim Berners-Lee CERN (timbl@w3.org) ** JFG: Jean-Francois Groff, Cooperant CERN 1991-92 (jfg@dxcern.cern.ch) ** DR: Dudu Rashty +972-2-584848 <RASHTY@hujivms.bitnet> ** MD: Mark Donszelmann, DELPHI CERN, (duns@vxdeop.cern.ch) ** HFN: Henrik Frystyk Nielsen, MIT, (frystyk@w3.org) ** ** History: ** ** 4 Dec 90: Written from scratch (NP) ** 11 Feb 91: Code written by TBL so that the browser could be linked with ** code produced by Bernd Pollermann, enabling access to the ** data on CERNVM. This involved changing the code to handle file ** numbers rather than file pointers. ** 18 Mar 91: The feature of history mechanism was included, enabling a ** record of previous nodes visited to be kept. ** 6 Apr 91: When a node is accessed, it is immediately read into a ** buffer, in an unformatted state, as soon as the connection is ** made, so that the server is freed as quickly as possible. ** The program now also uses the additional modules HTBufferFile.c ** and HTBufferFile.h. ** 17 Apr 91: Can be used on machines running ANSI C and ordinary C. ** 10 May 91: Formatted text is stored in a linked list buffer which allows ** scrolling and better page breaks in the middle of text. ** Code incorporated by Tim BL, to enable anonymous FTP. ** 21 May 91: Accepts various parameters on the command line. ** 19 Aug 91: Currently available in Unix, VAX/VMS and MVS environments. ** 21 Nov 91: Character grid uses new architecture. (TBL) ** added -w option, new commands, print, ** ... See Features.html for further details ** 16 Jan 92: Put in VIOLA-compatible options - see \017 characters. ** \017 and \016 bracket user-selectable input. ** 27 Feb 92: New handling of user input, enhanced command syntax. (JFG) ** 18 May 92: PS command see ifdef SLAVE_PRINTER (DR/TBL) ** 6 Oct 92: Painful recovery from someone(?)'s attept to pretty print.(TBL) ** Please see coding style guide before changing indentation etc! ** Mar 93: Force on HTFile's HTDirAccess and HTDirReadme flags. ** 3 Nov 93: (MD) Changed vms into VMS ** (MD) Assigne OUTPUT in main, not at initialize (VMS only) ** ** Compilation-time macro options ** ** REF_MARK Printf string to be used for printing anchor numbers ** END_MARK String to be used to denote the end of a document */ #include "WWWLib.h" #include "WWWMIME.h" #include "WWWCache.h" #include "WWWApp.h" #include "WWWTrans.h" #include "WWWInit.h" #include "GridText.h" /* Hypertext definition */ #include "HTBrowse.h" /* Things exported, short names */ #include "CSLApp.h" /* the PICApp library should provide everything the app needs */ #include "CSLL.h" #include "CSUser.h" #include "CSUsrLst.h" #ifndef W3C_VERSION #define W3C_VERSION "Unspecified" #endif #define APP_NAME "W3CLineMode" #define APP_VERSION W3C_VERSION /* Default page for "Manual" command */ #define MANUAL "http://www.w3.org/LineMode/User/QuickGuide.html" /* Default page for "help" command */ #define C_HELP "http://www.w3.org/LineMode/User/Commands.html" /* Default page for "-help" command line option */ #define L_HELP "http://www.w3.org/LineMode/User/CommandLine.html" #define DEFAULT_OUTPUT_FILE "www.out" #define DEFAULT_RULE_FILE "www.conf" #define DEFAULT_LOG_FILE "www.log" #define DEFAULT_MEMLOG "www.mem" #define DEFAULT_USERLIST_FILE "PICSusrs.html" #if 0 #define HT_MEMLOG #endif #define PROMPT "%s" #define REF_MARK "[%d]" #define END_MARK "[END]" #define SCREEN_WIDTH 79 /* Default width of the screen */ #define MIN_SCREEN_WIDTH 10 #define MAX_SCREEN_WIDTH 150 #define SCREEN_HEIGHT 24 /* Default number of lines */ #define MIN_SCREEN_HEIGHT 5 #define MAX_SCREEN_HEIGHT 200 #define MAX_HISTORY 20 /* Don't list more than this in list */ #define RESPONSE_LENGTH 1024 /* Maximum length of users response */ #define SHOW_MSG (WWWTRACE || HTAlert_interactive()) #define CHECK_INPUT(a, b) (!strncasecomp ((a), (b), strlen((b)))) #define DEFAULT_I_TIMEOUT 1000 /* Interactive timeout in millies */ #define DEFAULT_NI_TIMEOUT 10000 /* Non-interactive timeout in millies */ #define DEFAULT_FORMAT WWW_PRESENT #if defined(__svr4__) #define CATCH_SIG #endif /* HWL 18/7/94: applied patch from agl@glas2.glas.apc.org (Anton Tropashko) */ #ifdef CYRILLIC #include "a_stdio.h" struct ARc arc; #endif /* Screen size parameters */ PUBLIC int HTScreenWidth = SCREEN_WIDTH; /* By default */ PUBLIC int HTScreenHeight = -1; /* -1 = Undefined */ /* Anchor specific information */ PUBLIC BOOL display_anchors = YES; /* Show anchors in text? */ PUBLIC char * start_reference = NULL; /* Format for start anchor */ PUBLIC char * end_reference = REF_MARK; /* for end anchor */ PUBLIC char * reference_mark = "[%d] "; /* for reference lists */ PUBLIC char * end_mark = END_MARK; /* Format string for [End] */ typedef enum _LMFlags { LM_FILTER = 0x1, LM_REFS = 0x2, LM_REFORMAT = 0x4, LM_PREEMTIVE= 0x8 } LMFlags; struct _LineMode { HTRequest * console; /* For user input */ HTParentAnchor * anchor; HTList * active; /* List of acitve contexts */ HTList * presenters; HTHistory * history; /* History list */ char * cwd; /* Current dir URL */ char * rules; char * logfile; HTLog * log; char * outputfile; char * host; int trace; int timer; HTFormat format; /* Input format from console */ LMFlags flags; HTView * pView; char * userList; CSUser_t * pCSUser; BOOL noPICSPasswords; }; typedef enum _LMState { LM_UPDATE = 0x1, LM_NO_UPDATE= 0x2, LM_DONE = 0x4, LM_INACTIVE = 0x8, LM_IGNORE = 0x10 } LMState; typedef struct _Context { LMState state; HTRequest * request; LineMode * lm; HTParentAnchor * source; /* The source if we are using PUT or POST */ } Context; PRIVATE int scan_command (SOCKET s, void * param, HTEventType type); PRIVATE HTEvent * ConsoleEvent = NULL; #ifndef WWW_WIN_WINDOW PRIVATE FILE * OUTPUT = NULL; #endif PRIVATE InputParser_t parse_command; InputParser_t * PInputParser = &parse_command; /* Net callback handlers */ PRIVATE HTNetBefore MemoryCacheFilter; PRIVATE HTNetAfter terminate_handler; /* additions for browser update */ extern HText * HTMainText; extern HTParentAnchor * HTMainAnchor; extern void LMHText_beginElement (HText * text, int elem_num, const BOOL * present, const char ** value); extern void LMHText_endElement (HText * text, int elem_num); /* ------------------------------------------------------------------------- */ PUBLIC int HTWatch(int id, void * obj, const char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); fprintf(stderr, "id: %x obj: %p: ", id, obj); return vfprintf(stderr, fmt, pArgs); } /* Create a Context Object ** ----------------------- */ PRIVATE Context * Context_new (LineMode *lm, HTRequest *request, LMState state) { Context * me; if ((me = (Context *) HT_CALLOC(1, sizeof (Context))) == NULL) HT_OUTOFMEM("Context_new"); me->state = state; me->request = request; me->lm = lm; HTRequest_setContext(request, (void *) me); HTList_addObject(lm->active, (void *) me); return me; } /* Delete a Context Object ** ----------------------- */ PRIVATE BOOL Context_delete (Context * old) { HT_FREE(old); return YES; } PUBLIC LineMode * Context_getLineMode(HTRequest * request) { return ((Context *) HTRequest_context(request))->lm; } /* ** This function creates a new request object and adds it to the global ** list of active threads */ CSDisposition_callback PICSCallback; PRIVATE HTRequest * Thread_new (LineMode * lm, BOOL Interactive, LMState state) { HTRequest * newreq = HTRequest_new(); if (!lm) return NULL; Context_new(lm, newreq, state); if (Interactive) HTRequest_setConversion(newreq, lm->presenters, NO); if (lm->flags & LM_PREEMTIVE) HTRequest_setPreemptive(newreq, YES); HTRequest_addRqHd(newreq, HT_C_HOST); CSApp_registerReq(newreq, lm->pCSUser, PICSCallback, CSApp_callOnBad, (void *)lm); return newreq; } /* ** This function deletes all unused request objects */ PRIVATE void Thread_cleanup (LineMode * lm) { if (lm && lm->active) { HTList * cur = lm->active; Context * pres; while ((pres = (Context *) HTList_nextObject(cur))) { if (pres->state&LM_DONE && pres->state&LM_INACTIVE) { if ((HTList_removeObject(lm->active, pres)) == NO) HTTRACE(APP_TRACE, "NOT FOUND\n"); HTRequest_delete(pres->request); Context_delete(pres); cur = lm->active; } } } } /* ** This function deletes the whole list of active threads. */ PRIVATE void Thread_deleteAll (LineMode * lm) { if (lm && lm->active) { HTList * cur = lm->active; Context * pres; while ((pres = (Context *) HTList_nextObject(cur))) { if (pres->request) { HTRequest_delete(pres->request); Context_delete(pres); } } HTList_delete(lm->active); lm->active = NULL; } } /* Create a Line Mode Object ** ------------------------- */ PRIVATE LineMode * LineMode_new (void) { LineMode * me; if ((me = (LineMode *) HT_CALLOC(1, sizeof(LineMode))) == NULL) HT_OUTOFMEM("LineMode_new"); me->cwd = HTGetCurrentDirectoryURL(); me->active = HTList_new(); me->console = HTRequest_new(); Context_new(me, me->console, LM_UPDATE); me->trace = SHOW_ALL_TRACE; me->timer = -1; me->pCSUser = 0; if (!(me->pView = HTView_create("'nother Window", 25, 80, me))) return 0; return me; } /* Delete a Line Mode Object ** ------------------------- */ PRIVATE BOOL LineMode_delete (LineMode * lm) { if (lm) { Thread_deleteAll(lm); HTPresentation_deleteAll(lm->presenters); HTHistory_delete(lm->history); HT_FREE(lm->cwd); if (lm->log) HTLog_close(lm->log); if (lm->pCSUser) CSLoadedUser_remove(lm->pCSUser); HTView_destroy(lm->pView); #ifndef WWW_WIN_WINDOW if (OUTPUT && OUTPUT != stdout) fclose(OUTPUT); #endif HText_freeAll(); /* Free all loaded documents */ HT_FREE(lm); return YES; } return NO; } PUBLIC HTRequest * LineMode_getConsole(LineMode * pLm) { return pLm->console; } PUBLIC HTView * LineMode_getView(LineMode * pLm) { return pLm ? pLm->pView : 0; } PRIVATE BOOL LineMode_load(LineMode * lm, HTParentAnchor * anchor, char * url, BOOL preemptive, HTRequest ** pPReq) { char * fullURL; HTParentAnchor * pAnchor; *pPReq = Thread_new(lm, YES, LM_UPDATE); if (preemptive) HTRequest_setPreemptive(*pPReq, YES); if (anchor) return HTLoadRelative(url, anchor, *pPReq); fullURL = HTParse(url, lm->cwd, PARSE_ALL); pAnchor = (HTParentAnchor *) HTAnchor_findAddress(fullURL); HT_FREE(fullURL); return HTLoadAnchor((HTAnchor *) pAnchor, *pPReq); } PRIVATE void Cleanup (LineMode * me, int status) { if (HTAlert_interactive()) /* Terminate with a LF if not interactive */ OutputData(me->pView, "\n"); CSLoadedUser_deleteAll(); CSApp_unregisterApp(); LineMode_delete(me); HTProfile_delete(); #ifdef HT_MEMLOG HTMemLog_close(); #endif #ifdef VMS exit(status ? status : 1); #else exit(status ? status : 0); #endif } /* ** Get size of the output screen. Stolen from less. */ PRIVATE void scrsize (int * p_height, int * p_width) { #if defined(HAVE_IOCTL) && defined(HAVE_WINSIZE) && defined(TIOCGWINSZ) register char *s; /* int ioctl(); - henrik */ struct winsize w; if (ioctl(2, TIOCGWINSZ, &w) == 0 && w.ws_row > 0) *p_height = w.ws_row; else if ((s = getenv("LINES")) != NULL) *p_height = atoi(s); else *p_height = SCREEN_HEIGHT; if (ioctl(2, TIOCGWINSZ, &w) == 0 && w.ws_col > 0) *p_width = w.ws_col; else if ((s = getenv("COLUMNS")) != NULL) *p_width = atoi(s); else *p_width = 80; #else *p_height = SCREEN_HEIGHT; *p_width = SCREEN_WIDTH; #endif /* HAVE_IOCTL && HAVE_WINSIZE */ } #ifdef CATCH_SIG #include <signal.h> /* SetSignal ** This function sets up signal handlers. This might not be necessary to ** call if the application has its own handlers. */ PRIVATE void SetSignal (void) { /* On some systems (SYSV) it is necessary to catch the SIGPIPE signal ** when attemting to connect to a remote host where you normally should ** get `connection refused' back */ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { HTTRACE(APP_TRACE, "HTSignal.... Can't catch SIGPIPE\n"); } else { HTTRACE(APP_TRACE, "HTSignal.... Ignoring SIGPIPE\n"); } #ifdef HT_MEMLOG HTMemLog_flush(); #endif } #endif /* CATCH_SIG */ /* Print version information ** ------------------------- */ PRIVATE void VersionInfo (LineMode * lm) { HTView * pView = lm ? lm->pView : NULL; OutputData(pView, "\n\nW3C Reference Software\n\n"); OutputData(pView, "\tW3C Line Mode Browser version %s.\n", APP_VERSION); OutputData(pView, "\tW3C Reference Library version %s.\n\n",HTLib_version()); OutputData(pView, "Please send feedback to <libwww@w3.org>\n"); } /* Reference_List ** -------------- ** Print out a list of HyperText References from current document */ PRIVATE void Reference_List (LineMode * lm, BOOL titles) { int refs = HText_sourceAnchors(HTMainText); if (refs <= 0) { OutputData(lm->pView, "\n\nThere are no references from this document.\n\n"); } else { int cnt; OutputData(lm->pView, "\n*** References from this document ***\n"); for (cnt=1; cnt<=refs; cnt++) { HTLink * link = HTAnchor_mainLink((HTAnchor*)HText_childNumber(HTMainText,cnt)); HTAnchor * dest = HTLink_destination(link); HTParentAnchor * parent = HTAnchor_parent(dest); char * address = HTAnchor_address(dest); const char * title = titles ? HTAnchor_title(parent) : NULL; OutputData(lm->pView, reference_mark, cnt); OutputData(lm->pView, "%s%s\n", ((HTAnchor*)parent!=dest) && title ? "in " : "", (char *)(title ? title : address)); HT_FREE(address); } #ifndef WWW_WIN_WINDOW fflush(OUTPUT); #endif } } /* History_List ** ------------ ** Display a history list of nodes visited during the session. */ PRIVATE void History_List (LineMode * lm) { int current = HTHistory_position(lm->history); int max = HTHistory_count(lm->history); int cnt; OutputData(lm->pView, "\n Documents you have visited: "); if (max > MAX_HISTORY) { max = MAX_HISTORY; OutputData(lm->pView, "(truncated)\n"); } else OutputData(lm->pView, "\n"); for (cnt=1; cnt<=max; cnt++) { HTAnchor *anchor = HTHistory_list(lm->history, cnt); char *address = HTAnchor_address(anchor); HTParentAnchor *parent = HTAnchor_parent(anchor); const char *title = HTAnchor_title(parent); OutputData(lm->pView, "%s R %d\t%s%s\n", (cnt==current) ? "*" : " ", cnt, ((HTAnchor*)parent!=anchor) && title ? "in " : "", title ? title : address); HT_FREE(address); } OutputData(lm->pView, "\n"); } /* Prompt for answer and get text back. Reply text is either NULL on ** error or a dynamic string which the caller must HT_FREE. */ PRIVATE char * AskUser (HTRequest * request, const char * Msg, const char * deflt) { char buffer[200]; char *reply = NULL; HTPrint("%s ", Msg ? Msg : "UNKNOWN"); if (deflt) HTPrint("(RETURN for [%s]) ", deflt); #ifndef NO_STDIO if (!fgets(buffer, 200, stdin)) return NULL; /* NULL string on error, Henrik */ buffer[strlen(buffer)-1] = '\0'; /* Overwrite newline */ if (*buffer) StrAllocCopy(reply, buffer); else if (deflt) StrAllocCopy(reply, deflt); #endif return reply; } PRIVATE BOOL confirm (HTRequest * request, const char * Msg) { char response[4]; HTPrint("%s (y/n) ", Msg ? Msg : "UNKNOWN"); #ifndef NO_STDIO if (fgets(response, 4, stdin)) /* get reply, max 3 chars */ #endif { char *ptr = response; while (*ptr) { if (*ptr == '\n') { *ptr = '\0'; break; } *ptr = TOUPPER(*ptr); ptr++; } return (!strcmp(response, "YES") || !strcmp(response, "Y")) ? YES : NO; } return NO; } /* MakeCommandLine ** --------------- ** Generate the Prompt line and flush it to the user */ PRIVATE void MakeCommandLine (LineMode * lm, BOOL is_index) { /* First Line */ if (HTAnchor_hasChildren(HTMainAnchor)) { int refs = HText_sourceAnchors(HTMainText); if (refs>1) OutputData(lm->pView, "1-%d, ", refs); else OutputData(lm->pView, "1, "); } if (HText_canScrollUp(HTMainText)) { OutputData(lm->pView, "Top, "); OutputData(lm->pView, "Up, "); } if (HText_canScrollDown(HTMainText)) { OutputData(lm->pView, "BOttom, "); OutputData(lm->pView, "Down or <RETURN> for more,"); } /* Second Line */ OutputData(lm->pView, "\n"); if (HTHistory_canBacktrack(lm->history)) OutputData(lm->pView, "Back, "); if (HTHistory_canForward(lm->history)) OutputData(lm->pView, "Forward, "); if (is_index) OutputData(lm->pView, "FIND <keywords>, "); OutputData(lm->pView, "Quit, or Help: "); fflush(stdout); /* For use to flush out the prompt */ return; } /* ** PUT the current document to the destination specified by the user ** Returns the result of the load function. */ PRIVATE int PutAnchor (LineMode * lm, HTRequest * request) { char * dest = AskUser(request, "Destination: ", NULL); /* ** If user has typed a destination then create a new request object and ** start the PUT operation. The destination is taken relative to the ** current location. */ if (dest) { HTRequest * new_request = Thread_new(lm, YES, LM_UPDATE); HTPutDocumentRelative(HTMainAnchor, dest, HTMainAnchor, new_request); HT_FREE(dest); } return YES; } /* ** Delete the current document. */ PRIVATE int DeleteAnchor (LineMode * lm, HTRequest * request) { int status = HT_INTERNAL; BOOL doit = confirm(request, "Delete the current document?"); if (doit) { HTRequest * new_request = Thread_new(lm, YES, LM_UPDATE); status = HTDeleteAnchor((HTAnchor *) HTMainAnchor, new_request); } return status; } /* ** This function puts up a stream to a file in order to save a document. This ** is activated by '>', '>>' or '>!' from the prompt line. */ PRIVATE BOOL SaveOutputStream (HTRequest * req, char * This, char * Next) { FILE *fp; char *fname; char *fmode; /* Checks if file exists. Can be overruled by using '>!' */ if (*(This+1) == '>') { /* Append to file */ fmode = "ab"; fname = *(This+2) ? (This+2) : Next; } else if (*(This+1) == '!') { fmode = "wb"; /* Overwrite file */ fname = *(This+2) ? (This+2) : Next; } else { /* File name follows */ fmode = "wb"; fname = *(This+1) ? (This+1) : Next; if (fname) { /* See if file exists */ if ((fp = fopen(fname, "r")) != NULL) { fclose(fp); if (!confirm(req, "File exists - overwrite?")) return NO; } } } if (!fname) /* No file name given */ return NO; if ((fp = fopen(fname, fmode)) == NULL) { if (SHOW_MSG) HTPrint("Can't access file (%s)\n", fname); return NO; } HTRequest_setOutputStream(req, HTFWriter_new(req, fp, NO)); if (SHOW_MSG) HTPrint("Saving to file `%s\'\n", fname); return (HTLoadAnchor((HTAnchor*) HTMainAnchor, req) != HT_WOULD_BLOCK); } CSError_t LoadedUsersCallback(CSUser_t * pCSUser, int index, void * pVoid) { LineMode * lm = (LineMode *)pVoid; OutputData(lm->pView, "%d: %s\n", index, CSUser_name(pCSUser)); return CSError_OK; } CSError_t UserListCallback(char * username, char * url, int index, void * pVoid) { LineMode * lm = (LineMode *)pVoid; OutputData(lm->pView, "%d: %s %s\n", index, username, url); return CSError_OK; } PRIVATE BOOL ShowPICSUsers(LineMode * lm) { OutputData(lm->pView, "Loaded users:\n"); CSLoadedUser_enum(&LoadedUsersCallback, (void *)lm); OutputData(lm->pView, "Listed users:\n"); CSUserList_enum(&UserListCallback, (void *)lm); return YES; } PRIVATE int PICS_userCallback(CSUser_t * pCSUser, void * pVoid) { LineMode * lm = (LineMode *)pVoid; char * userName; char * password = NULL; HTAlertCallback *cbf; int ret; HTAlertPar * reply; if (lm->noPICSPasswords) { lm->pCSUser = pCSUser; return 0; } if (!(cbf = HTAlert_find(HT_A_USER_PW))) return -1; reply = HTAlert_newReply(); userName = CSUser_name(pCSUser); if ((ret = (*cbf)(lm->console, HT_A_USER_PW, HT_MSG_NULL, userName, NULL, reply))) { userName = HTAlert_replyMessage(reply); password = HTAlert_replySecret(reply); } HTAlert_deleteReply(reply); if (!ret) { HTPrint("PICS set user *canceled*.\n"); return -1; } ret = -1; if (!userName) HTPrint("PICS cannot set to no name.\n"); else if (CSUser_checkPassword(pCSUser, password) == NO) HTPrint("PICS password was not valid.\n"); else { ret = 0; lm->pCSUser = pCSUser; } HT_FREE(userName); HT_FREE(password); return ret; } PRIVATE BOOL SetPICSUser(LineMode * lm, char * userName) { char * password = NULL; HTAlertCallback *cbf; BOOL ret; HTAlertPar * reply; if (!(cbf = HTAlert_find(HT_A_USER_PW))) return NO; reply = HTAlert_newReply(); if ((ret = (*cbf)(lm->console, HT_A_USER_PW, HT_MSG_NULL, userName, NULL, reply))) { userName = HTAlert_replyMessage(reply); password = HTAlert_replySecret(reply); } HTAlert_deleteReply(reply); if (!ret) { HTPrint("PICS set user *canceled*.\n"); return NO; } ret = NO; if (!userName) HTPrint("Canceled.\n"); else if (!(lm->pCSUser = CSApp_registerUserByName(userName, password))) { char * url; if ((url = CSUserList_findURL(userName)) == NULL) HTPrint("PICS user \"%s\" is unknown.\n", userName); else if (!CSLoadedUser_load(url, lm->cwd)) HTPrint("Can't load PICS user \"%s\".\n", userName); else if ((CSLoadedUser_find(userName)) == NO) HTPrint("PICS user \"%s\" not found in \"%s\".\n", userName, url); else if (!(lm->pCSUser = CSApp_registerUserByName(userName, password))) HTPrint("Failed to set PICS user to \"%s\".\n", userName); ret = YES; HT_FREE(url); } HT_FREE(userName); HT_FREE(password); return ret; } PRIVATE BOOL LoadPICSUser(LineMode * lm, char * url) { CSUser_t * pCSUser; if (!(pCSUser = CSLoadedUser_load(url, lm->cwd))) return NO; lm->pCSUser = pCSUser; return YES; } CSError_t PICSCallback(HTRequest* pReq, CSLabel_t * pCSLabel, CSUser_t * pCSUser, CSError_t disposition, void * pVoid) { LineMode * lm = (LineMode *)pVoid; char * mesg; switch (disposition) { case CSError_RATING_RANGE: { char * labelStr = CSLabel_getRatingStr(pCSLabel); char * userStr = CSUser_getRatingStr(pCSUser); char * anchorStr = HTAnchor_address((HTAnchor*)HTRequest_anchor(pReq)); OutputData(lm->pView, "PICS user %s is not allowed to see document: %s\n", CSUser_name(pCSUser), anchorStr); OutputData(lm->pView, " %s's \"%s\" rating for service %s (%s) did not include %s\n", CSUser_name(pCSUser), CSLabel_getRatingName(pCSLabel), CSLabel_getServiceName(pCSLabel), userStr, labelStr); HT_FREE(userStr); HT_FREE(labelStr); HT_FREE(anchorStr); } return disposition; case CSError_BUREAU_NONE: mesg="label bureau was not contacted"; break; case CSError_RATING_VALUE: mesg="value"; break; case CSError_RATING_MISSING: mesg="rating not found"; break; case CSError_SINGLELABEL_MISSING: mesg="no single-labels found"; break; case CSError_SERVICE_MISSING: mesg="service not available";break; case CSError_SERVICE_NONE: mesg="no services available for document"; break; case CSError_RATING_NONE: mesg="no ratings in a service"; break; case CSError_BAD_DATE: mesg="labels were out of date"; break; default:HTPrint("PICSCallback: odd error code: %d\n", disposition); return disposition; } OutputData(lm->pView, "PICS disallowed document: %s\n", mesg); return disposition; } /* ------------------------------------------------------------------------- */ /* EVENT FUNCTIONS */ /* ------------------------------------------------------------------------- */ /* parse_command ** ------------ ** Given the user's input, deal with it as necessary. ** Any Command which works returns from the routine. If nothing ** works then a search or error message down at the bottom. ** ** Returns HT_ERROR Error has occured or we quit ** HT_OK Call back was OK */ PRIVATE int parse_command (char* choice, SOCKET s, HTRequest *req, HTEventType type) { char * the_choice=NULL; /* preserved user command */ char * token=NULL; /* First word of command */ char * this_command; /* token and following */ char * next_word; /* Second word */ char * other_words; /* Second word and following */ BOOL is_index = HTAnchor_isIndex(HTMainAnchor); BOOL found = YES; BOOL OutSource = NO; /* Output source, YES/NO */ int status = YES; HTRequest * cur_req = NULL; Context * cur_context = NULL; LineMode * lm = NULL; cur_req = req; cur_context = (Context *) HTRequest_context(req); lm = cur_context->lm; StrAllocCopy (the_choice, choice); /* Remember it as is, */ if (*the_choice && the_choice[strlen(the_choice)-1] == '\n') /* final \n */ the_choice[strlen(the_choice)-1] = '\0'; token = strtok (choice, " \t\n\r"); /* Tokenize user input */ this_command = the_choice; if (token) { next_word = strtok (NULL, " \t\n\r"); other_words = the_choice + (next_word - choice); } else goto down; /* Empty input : scroll down */ /* Process Command */ loop: switch (TOUPPER(*token)) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { int ref_num; sscanf(token,"%d",&ref_num); if (ref_num>0 && ref_num<=HText_sourceAnchors(HTMainText)) { HTChildAnchor *source = HText_childNumber(HTMainText, ref_num); if (source) { HTLink * link = HTAnchor_mainLink((HTAnchor *) source); HTAnchor * destination = HTLink_destination(link); req = Thread_new(lm, YES, LM_UPDATE); /* Continous browsing, so we want Referer field */ HTRequest_setParent(req, HTAnchor_parent((HTAnchor*)source)); HTLoadAnchor(destination, req); } else { status = NO; /* No anchor */ } } else { if (SHOW_MSG) HTPrint("Warning: Invalid Reference Number: (%d)\n", ref_num); } } break; case 'B': if (CHECK_INPUT("BACK", token)) { /* Return to previous node */ if (HTHistory_canBacktrack(lm->history)) { req = Thread_new(lm, YES, LM_NO_UPDATE); status = HTLoadAnchor(HTHistory_back(lm->history), req); } else { OutputData(lm->pView, "\nThis is the first document in history list\n"); } } else if (CHECK_INPUT("BOTTOM", token)) { /* Scroll to bottom */ HText_scrollBottom(HTMainText); } else if (CHECK_INPUT("BYE", token)) { /* Quit program? */ HTNet_killAll(); /* Kill all requests */ status = NO; } else found = NO; break; case 'C': #ifdef HAVE_CHDIR if (CHECK_INPUT("CD", token)) { /* Change working directory ? */ goto lcd; } else #endif /* HAVE_CHDIR */ if (CHECK_INPUT("CLEAR", token)) { /* Clear History list */ HTHistory_removeFrom(lm->history, 1); } else found = NO; break; case 'D': if (CHECK_INPUT("DELETE", token)) { /* DELETE */ status = DeleteAnchor(lm, req); } else if (CHECK_INPUT("DOWN", token)) { /* Scroll down one page */ down: if (HText_canScrollDown(HTMainText)) HText_scrollDown(HTMainText); } else found = NO; break; case 'E': if (CHECK_INPUT("EDIT", token)) { status = PutAnchor(lm, req); } else if (CHECK_INPUT("EXIT", token)) { /* Quit program? */ HTNet_killAll(); /* Kill all requests */ status = NO; } else found = NO; break; case 'F': /* Keyword search ? */ if (is_index && CHECK_INPUT("FIND", token)) { find: { if (next_word) { req = Thread_new(lm, YES, LM_UPDATE); status = HTSearchString(other_words, (HTAnchor *) HTMainAnchor, req); } } } else if (CHECK_INPUT("FLUSH", token)) { /* Flush file cache */ if (confirm(req, "Flush Persistent Cache?") == YES) HTCache_flushAll(); } else if (CHECK_INPUT("FORWARD", token)) { if (HTHistory_canForward(lm->history)) { req = Thread_new(lm, YES, LM_NO_UPDATE); status = HTLoadAnchor(HTHistory_forward(lm->history), req); } else { OutputData(lm->pView, "\nThis is the last document in history list.\n"); } } else found = NO; break; case 'G': if (CHECK_INPUT("GOTO", token)) { /* GOTO */ if (next_word) status = LineMode_load(lm, HTMainAnchor, next_word, NO, &req); } else found = NO; break; case '?': status = LineMode_load(lm, HTMainAnchor, C_HELP, YES, &req); break; case 'H': if (CHECK_INPUT("HELP", token)) { /* help menu, ..*/ status = LineMode_load(lm, HTMainAnchor, C_HELP, YES, &req); } else if (CHECK_INPUT("HOME", token)) { /* back HOME */ if (!HTHistory_canBacktrack(lm->history)) { HText_scrollTop(HTMainText); } else { req = Thread_new(lm, YES, LM_NO_UPDATE); status = HTLoadAnchor(HTHistory_find(lm->history, 1), req); } } else found = NO; break; case 'K': /* Keyword search ? */ if (is_index && CHECK_INPUT("KEYWORDS", token)) { goto find; } else found = NO; break; case 'L': if (CHECK_INPUT("LIST", token)) { /* List of references ? */ Reference_List(lm, !OutSource); } #ifdef HAVE_CHDIR else if (CHECK_INPUT ("LCD", token)) { /* Local change dir ? */ lcd: if (!next_word) { /* Missing argument */ OutputData(lm->pView, "\nName of the new local directory missing.\n"); } else if (chdir (next_word)) { /* failed : say why */ OutputData(lm->pView, "\n "); perror (next_word); } else { /* Success : display new local directory */ #ifdef HAVE_GETCWD OutputData(lm->pView, "\nLocal directory is now:\n %s\n", getcwd (choice, sizeof(choice))); #else #ifdef HAVE_GETWD OutputData(lm->pView, "\nLocal directory is now:\n %s\n", (char *) getwd (choice)); #else #error "This platform doesn't support getwd or getcwd" if (SHOW_MSG) HTPrint("This platform doesn't support getwd or getcwd\n"); #endif /* HAVE_GETWD */ #endif /* HAVE_GETCWD */ } } #endif /* HAVE_CHDIR */ else if (CHECK_INPUT("LUSER", token)) { /* List of references ? */ if (next_word) { LoadPICSUser(lm, next_word); } else { HTPrint("URL needed\n"); } } else found = NO; break; case 'M': if (CHECK_INPUT("MANUAL", token)) { /* Read User manual */ status = LineMode_load(lm, HTMainAnchor, MANUAL, YES, &req); } else found = NO; break; case 'O': if (CHECK_INPUT("OPTIONS", token)) { /* OPTIONS method */ req = Thread_new(lm, YES, LM_NO_UPDATE); status = HTOptionsAnchor((HTAnchor*) (HTMainAnchor ? HTMainAnchor:lm->anchor), req); } else found = NO; break; case 'P': if (CHECK_INPUT("POST", token)) { status = PutAnchor(lm, req); } #ifdef HAVE_SYSTEM else if (!lm->host && CHECK_INPUT("PRINT", token)) { char * address = HTAnchor_address((HTAnchor *) HTMainAnchor); char * command; char * tmplate = (char *) getenv("WWW_PRINT_COMMAND"); int result; if (!tmplate) tmplate = "www -n -na -p66 '%s' | lpr"; if ((command = (char *) HT_MALLOC(strlen(address)+strlen(tmplate)+20)) == NULL) HT_OUTOFMEM("command"); sprintf(command, tmplate, address); result = system(command); HT_FREE(address); HT_FREE(command); if (result) OutputData(lm->pView, " %s\n returns %d\n", command, result); } #endif /* this command prints the entire current text to the terminal's printer; at the end it displays the top of the text */ #ifdef SLAVE_PRINTER #define SLAVE_PRINTER_ON "\033\133\065\151" #define SLAVE_PRINTER_OFF "\033\133\064\151" else if (CHECK_INPUT("PS", token)) { OutputData(lm->pView, "%s",SLAVE_PRINTER_ON); OutputData(lm->pView, "\f"); /* Form feed for new page */ HText_scrollTop(HTMainText); while(HText_canScrollDown(HTMainText)) { HText_scrollDown(HTMainText); } OutputData(lm->pView, "\f"); /* Form feed for new page */ OutputData(lm->pView, "%s",SLAVE_PRINTER_OFF); HText_scrollTop(HTMainText); } #endif else if (CHECK_INPUT("PUT", token)) { status = PutAnchor(lm, req); } else found = NO; break; case 'Q': /* Quit program ? */ if (CHECK_INPUT("QUIT", token)) { /* JFG 9/7/92, following a complaint of 'q' mis-typed for '1'. JFG Then made optional because I hate it !!! TBL made it only affect remote logged on users. 921122 */ if (lm->host && (strcasecomp(token, "quit") != 0) ) { OutputData(lm->pView, "\n Please type \"quit\" in full to leave www.\n"); } else { HTNet_killAll(); /* Kill all requests */ status = NO; } } else found = NO; break; case 'R': if (CHECK_INPUT("RECALL", token)) { if (HTHistory_count(lm->history) <= 1) { OutputData(lm->pView, "\n No other documents to recall.\n"); } else { /* Previous node number exists, or does the user just */ /* require a list of nodes visited? */ if (next_word) { int cnt; if ((cnt = atoi(next_word)) > 0) { req = Thread_new(lm, YES, LM_NO_UPDATE); status = HTLoadAnchor(HTHistory_find(lm->history,cnt), req); } else { if (SHOW_MSG) HTPrint("Bad command (%s), for list of commands type help\n", this_command); } } else { History_List(lm); } } } else if (CHECK_INPUT("REFRESH", token)) { HText_setStale(HTMainText); /* Force refresh */ HText_refresh(HTMainText); /* Refresh screen */ } else if (CHECK_INPUT("REVALIDATE", token)) { req = Thread_new(lm, YES, LM_NO_UPDATE); /* ** Add a end-to-end validator to the request */ HTRequest_setReloadMode(req, HT_CACHE_END_VALIDATE); status = HTLoadAnchor((HTAnchor*) (HTMainAnchor ? HTMainAnchor : lm->anchor), req); } else if (CHECK_INPUT("RELOAD", token)) { req = Thread_new(lm, YES, LM_NO_UPDATE); /* ** Make sure that we do a complete flush of the cache */ HTRequest_setReloadMode(req, HT_CACHE_FLUSH); status = HTLoadAnchor((HTAnchor*) (HTMainAnchor ? HTMainAnchor : lm->anchor), req); } else found = NO; break; case 'S': /* TBL 921009 */ if (CHECK_INPUT("SOURCE", token)) { /* Apply to source */ if (next_word) { OutSource = YES; /* Load and print as source */ token = next_word; /* Move up one word */ next_word = strtok (NULL, " \t\n\r"); this_command = the_choice + (token - choice); other_words = the_choice + (next_word - choice); goto loop; /* Go treat as before */ } } else if (CHECK_INPUT("SET", token)) { /* config */ HTList * rules = HTRule_global(); HTRule_parseLine(rules, other_words); } else found = NO; break; case 'T': if (CHECK_INPUT("TOP", token)) { /* Return to top */ HText_scrollTop(HTMainText); } else found = NO; break; case 'U': if (CHECK_INPUT("UP", token)) { /* Scroll up one page */ HText_scrollUp(HTMainText); } else if (CHECK_INPUT("USER", token)) { if (next_word) { if (!strcasecomp(next_word, "?")) { ShowPICSUsers(lm); SetPICSUser(lm, 0); } else { SetPICSUser(lm, next_word); } } else { SetPICSUser(lm, 0); } } else found = NO; break; case 'V': if (CHECK_INPUT("VALIDATE", token)) { /* Cache validate */ req = Thread_new(lm, YES, LM_NO_UPDATE); /* ** Add a validator to the request */ HTRequest_setReloadMode(req, HT_CACHE_VALIDATE); status = HTLoadAnchor((HTAnchor*) (HTMainAnchor ? HTMainAnchor : lm->anchor), req); } else if (CHECK_INPUT("VERBOSE", token)) { /* Switch verbose mode */ WWWTRACE = WWWTRACE ? 0 : lm->trace; OutputData(lm->pView, "\n Verbose mode %s.\n", WWWTRACE ? "ON":"OFF"); } else if (CHECK_INPUT("VERSION", token)) { /* Version */ VersionInfo(lm); } else found = NO; break; case 'W': if (CHECK_INPUT("WHICH", token)) { /* Show title/URL of current page */ HTView * pView = lm ? lm->pView : NULL; char * current_address = HTAnchor_address((HTAnchor *) HTMainAnchor); const char * title = HTAnchor_title(HTMainAnchor); if (title) OutputData(pView, "\n\nYou are reading\n\t`%s\'\nwith address\n\t%s\n\n", title, current_address); } else found = NO; break; case 'Z': HText_setStale(HTMainText); /* Force refresh */ HText_refresh(HTMainText); /* Refresh screen */ HTNet_killAll(); /* Kill all requests */ break; case '>': if (!lm->host) { HText *curText = HTMainText; /* Remember current main vindow */ req = Thread_new(lm, NO, LM_NO_UPDATE); HTRequest_setReloadMode(req, HT_CACHE_FLUSH_MEM); if (OutSource) HTRequest_setOutputFormat(req, WWW_SOURCE); SaveOutputStream(req, token, next_word); HText_select(curText); } break; #ifdef GOT_PIPE case '|': if (!lm->host) { /* Local only!!!! */ char * address = HTAnchor_address((HTAnchor *) HTMainAnchor); char * command; int result; if ((command = (char *) HT_MALLOC(strlen(address) +strlen(this_command)+30)) == NULL) HT_OUTOFMEM("command"); sprintf(command, "www %s \"%s\" %s", OutSource ? "-source" : "-n -na -p", address,this_command); OutputData(lm->pView, "Command: %s\n", command); result = system(command); if (result) OutputData(lm->pView, " %s returns %d\n", command, result); HT_FREE(command); HT_FREE(address); } break; #endif #ifdef HAVE_SYSTEM case '!': if (!lm->host) { /* Local only! */ int result; if (SHOW_MSG) HTPrint("Executing `%s\'\n", this_command); result = system(strchr(this_command, '!') + 1); if (result) OutputData(lm->pView, " %s returns %d\n", strchr(this_command, '!') + 1, result); } break; #endif /* HAVE_SYSTEM */ default: found = NO; break; } /* Switch on 1st character */ if (!found) { if (is_index && *token) { /* No commands, search keywords */ next_word = other_words = this_command; found = YES; goto find; } else { if (SHOW_MSG) HTPrint("Bad command (%s), for list of commands type help\n", this_command); } } MakeCommandLine(lm, is_index); HT_FREE(the_choice); /* ** If we have created a new Request and is to update the history list then ** we can set the inactive bit on this request object. */ if (cur_req == req) cur_context->state |= LM_NO_UPDATE; else cur_context->state |= LM_INACTIVE; return (status==YES) ? HT_OK : HT_ERROR; } /* readConsole ** ----------- ** non-blocking read of the WIN32 console. EGP */ #ifdef WWW_WIN_CONSOLE PUBLIC BOOL readConsole(HANDLE conIn, char* buf, int len, int* pRed) { DWORD recordIndex, bufferIndex, toRead, red; PINPUT_RECORD pInput; /* grab the pending input records (keystrokes plus other garbage). */ GetNumberOfConsoleInputEvents(conIn, &toRead); if (len < (int)toRead) /* we'll get the rest on the next pass(es). */ toRead = len; if ((pInput = (PINPUT_RECORD) HT_MALLOC(toRead * sizeof(INPUT_RECORD))) == NULL) /* room for n input records */ return (FALSE); ReadConsoleInput(conIn, pInput, toRead, &red); for (recordIndex = bufferIndex = 0; recordIndex < red; recordIndex++) { /* grab all keydown events */ #if 1 KEY_EVENT_RECORD keyEvent = pInput[recordIndex].Event.KeyEvent; /* only used if EventType == KEY_EVENT */ if (pInput[recordIndex].EventType == KEY_EVENT && keyEvent.bKeyDown) { while (keyEvent.wRepeatCount && keyEvent.uChar.AsciiChar) { /* stuff the buffer with the keys */ buf[bufferIndex] = keyEvent.uChar.AsciiChar; if (buf[bufferIndex] == '\r') buf[bufferIndex] = '\n'; if (buf[bufferIndex] == '\b') OutputData(lm->pView, "\b "); OutputData(lm->pView, "%c", buf[bufferIndex]); bufferIndex++; keyEvent.wRepeatCount--; } } #else if (pInput[recordIndex].EventType == KEY_EVENT && pInput[recordIndex].Event.KeyEvent.bKeyDown) { while (pInput[recordIndex].Event.KeyEvent.wRepeatCount && pInput[recordIndex].Event.KeyEvent.uChar.AsciiChar) { /* stuff the buffer with the keys */ buf[bufferIndex] = pInput[recordIndex].Event.KeyEvent.uChar.AsciiChar; if (buf[bufferIndex] == '\r') buf[bufferIndex] = '\n'; if (buf[bufferIndex] == '\b') OutputData(lm->pView, "\b "); OutputData(lm->pView, "%c", buf[bufferIndex]); bufferIndex++; pInput[recordIndex].Event.KeyEvent.wRepeatCount--; } } #endif } HT_FREE(pInput); *pRed = bufferIndex; /* actual characters stuck into buffer */ return (TRUE); } #endif /* WWW_WIN_CONSOLE */ /* bufferInput ** ----------- ** Read available characters from buf into stat. buf maybe bigger or ** smaller than stat. */ PUBLIC int bufferInput (char* buf, int len, SOCKET s, HTRequest * req, HTEventType type) { static char stat[RESPONSE_LENGTH]; static int iStat = 0; static int ignoreNext = 0; int iBuf; for (iBuf = 0; iBuf < len; iBuf++) { switch (buf[iBuf]) { case '\r': case '\n': if (ignoreNext) ignoreNext = 0; else { int ret; stat[iStat] = 0; iStat = 0; if ((ret = (*PInputParser)(stat, s, req, type)) != HT_OK) return (ret); } break; case '\b': if (iStat) /* don't worry about ignoreNext as iStat will be 0*/ iStat--; break; default: if (!ignoreNext) stat[iStat++] = buf[iBuf]; } if (iStat == sizeof(stat)) { HTPrint("Read Console... BUFFER OVERRUN\n"); iStat = 0; ignoreNext = 1; } } return (HT_OK); } /* timeout_handler ** --------------- ** This function is registered to handle timeout in select eventloop */ PRIVATE int timeout_handler (SOCKET s, void * param, HTEventType type) { if (!HTAlert_interactive()) { HTRequest * req = (HTRequest *) param; Context * context = (Context *) HTRequest_context(req); LineMode * lm = context->lm; if (SHOW_MSG) HTPrint("Request timed out"); HTNet_killAll(); Cleanup(lm, -1); } if (HTNet_count() > 0) if (SHOW_MSG) HTPrint("."); return 0; } PRIVATE int scan_command (SOCKET s, void * param, HTEventType type) { HTRequest * req = (HTRequest *)param; /* buf happens to == eatText's buffer but not neccesary */ static char buf[RESPONSE_LENGTH]; #ifdef WWW_MSWINDOWS int red; int ret; #endif /* Handle any timeout here */ if (type == HTEvent_TIMEOUT) return timeout_handler (s, param, type); #ifdef WWW_MSWINDOWS while(1) { #ifdef WWW_WIN_CONSOLE if (!readConsole((HANDLE)s, buf, sizeof(buf), &red)) { HTTRACE(PROT_TRACE, "Read Console... READ ERROR\n"); return HT_ERROR; } #endif /* WWW_WIN_CONSOLE */ if (!red) return (HT_OK); ret = bufferInput(buf, red, s, req, type); if (ret != HT_OK) return (ret); } #else /* WWW_MSWINDOWS */ if (!fgets(buf, sizeof(buf), stdin)) /* Read User Input */ return HT_ERROR; /* Exit if EOF */ return ((*PInputParser)(buf, s, req, type)); #endif /* !WWW_MSWINOWS */ } /* terminate_handler ** ----------------- ** This function is registered to handle the result of the request */ PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { Context * context = (Context *) HTRequest_context(request); LineMode * lm; BOOL is_index; if (!context) return HT_OK; lm = context->lm; if (context->state == LM_IGNORE) return HT_OK; if (CSApp_unregisterReq(request) == NO && lm->pCSUser) HTPrint("PICS request not found\n"); is_index = HTAnchor_isIndex(HTMainAnchor); if (status == HT_LOADED) { /* Should we output a command line? */ if (HTAlert_interactive()) { HText_setStale(HTMainText); MakeCommandLine(lm, is_index); } else { if (lm->flags & LM_REFS) Reference_List(lm, NO); Cleanup(lm, 0); } /* Record new history if we have not moved around in the old one */ if (context->state & LM_UPDATE) HTHistory_replace(lm->history, (HTAnchor *) HTMainAnchor); /* Now generate the new prompt line as a function of the result */ if (!HText_canScrollDown(HTMainText) && !HTAnchor_hasChildren(HTMainAnchor) && !is_index && (!HTHistory_canBacktrack(lm->history))) { return HT_OK; } } else { /* No page loaded so sit around and wait for a go command */ /* was MakeCommandLine(lm, is_index); */ /* ** stolen from above */ if (HTAlert_interactive()) { /* HText_setStale(HTMainText); */ MakeCommandLine(lm, is_index); } else { if (lm->flags & LM_REFS) Reference_List(lm, NO); Cleanup(lm, 0); } } context->state |= LM_DONE; Thread_cleanup(lm); if (!HTAlert_interactive()) Cleanup(lm, -1); return HT_OK; } /* ** Check the Memory Cache (History list) BEFORE filter ** --------------------------------------------------- ** Check if document is already loaded. The user can define whether ** the history list should follow normal expiration or work as a ** traditional history list where expired documents are not updated. ** We don't check for anything but existence proof of a document ** associated with the anchor as the definition is left to the application */ PRIVATE int MemoryCacheFilter (HTRequest * request, void * param, int mode) { HTReload validation = HTRequest_reloadMode(request); HTParentAnchor * anchor = HTRequest_anchor(request); void * document = HTAnchor_document(anchor); /* ** We only check the memory cache if it's a GET method */ if (HTRequest_method(request) != METHOD_GET) { HTTRACE(APP_TRACE, "Mem Cache... We only check GET methods\n"); return HT_OK; } /* ** If we are asked to flush the persistent cache then there is no reason ** to do anything here - we're flushing it anyway. Also if no document ** then just exit from this filter. */ if (!document || validation > HT_CACHE_FLUSH_MEM) { HTTRACE(APP_TRACE, "Mem Cache... No fresh document...\n"); return HT_OK; } /* ** If we have a document object associated with this anchor then we also ** have the object in the history list. Depending on what the user asked, ** we can add a cache validator */ if (document && validation != HT_CACHE_FLUSH_MEM) { HTParentAnchor * parent = HTRequest_anchor(request); HTChildAnchor * child = HTRequest_childAnchor(request); HText * document = HTAnchor_document(parent); HTTRACE(APP_TRACE, "Mem Cache... Document %p already in memory\n" _ document); /* ** Make sure that we have selected the HText object. This is normally ** done by the HText interface but must be repeated here. */ if (child && (HTAnchor *) child != (HTAnchor *) parent) HText_selectAnchor(document, child); else HText_select(document); return HT_LOADED; } return HT_OK; } /* ------------------------------------------------------------------------- */ /* MAIN PROGRAM */ /* ------------------------------------------------------------------------- */ int main (int argc, char ** argv) { int status = 0; int arg; /* Index into argv */ HTChunk * keywords = NULL; /* From command line */ int keycnt = 0; HTRequest * request = NULL; LineMode * lm; char * picsUser = NULL; #ifndef WWW_WIN_WINDOW OUTPUT = stdout; #endif /* Starts Mac GUSI socket library */ #ifdef GUSI GUSISetup(GUSIwithSIOUXSockets); GUSISetup(GUSIwithInternetSockets); #endif #ifdef __MWERKS__ /* STR */ InitGraf((Ptr) &qd.thePort); InitFonts(); InitWindows(); InitMenus(); TEInit(); InitDialogs(nil); InitCursor(); SIOUXSettings.asktosaveonclose = false; argc=ccommand(&argv); #endif /* HWL 18/7/94: patch from agl@glas2.glas.apc.org (Anton Tropashko) */ #ifdef CYRILLIC arc.locale=0; arc.encoding=0; arc.i_encoding=0; doinull(); #endif #ifdef HT_MEMLOG HTMemLog_open(DEFAULT_MEMLOG, 8192, YES); HTTraceData_setCallback(HTMemLog_callback); #endif /* Initiate W3C Reference Library with a client profile */ HTProfile_newClient(APP_NAME, APP_VERSION); /* It's confusing to have progress notofications in linemode browser */ HTAlert_deleteOpcode(HT_A_PROGRESS); /* Add the default HTML parser to the set of converters */ { HTList * converters = HTFormat_conversion(); HTMLInit(converters); } /* Create a new Line Mode object */ lm = LineMode_new(); request = Thread_new(lm, NO, LM_UPDATE); /* Scan command Line for parameters */ for (arg=1; arg<argc ; arg++) { if (*argv[arg] == '-') { /* - alone => filter */ if (argv[arg][1] == '\0') { lm->flags |= LM_FILTER; HTAlert_setInteractive(NO); /* non-interactive */ } else if (!strcmp(argv[arg], "-n")) { HTAlert_setInteractive(NO); /* from -- Initial represntation (only with filter) */ } else if (!strcmp(argv[arg], "-from")) { lm->format = (arg+1 < argc && *argv[arg+1] != '-') ? HTAtom_for(argv[++arg]) : WWW_HTML; HTAlert_setInteractive(NO); /* to -- Final representation */ } else if (!strcmp(argv[arg], "-to")) { HTFormat format = (arg+1 < argc && *argv[arg+1] != '-') ? HTAtom_for(argv[++arg]) : DEFAULT_FORMAT; HTRequest_setOutputFormat(request, format); HTAlert_setInteractive(NO); /* reformat html */ } else if (!strcmp(argv[arg], "-reformat")) { HTRequest_setOutputFormat(request, WWW_HTML); lm->flags |= LM_REFORMAT; HTAlert_setInteractive(NO); /* List References */ } else if (!strncmp(argv[arg], "-list", 5)) { lm->flags |= LM_REFS; HTAlert_setInteractive(NO); /* original output */ } else if (!strcmp(argv[arg], "-raw")) { HTRequest_setOutputFormat(request, WWW_RAW); HTAlert_setInteractive(NO); /* source please */ } else if (!strcmp(argv[arg], "-source")) { HTRequest_setOutputFormat(request, WWW_SOURCE); HTAlert_setInteractive(NO); /* HEAD method */ } else if (!strcasecomp(argv[arg], "-head")) { HTRequest_setMethod(request, METHOD_HEAD); HTRequest_setOutputFormat(request, WWW_MIME); HTAlert_setInteractive(NO); /* output filename */ } else if (!strcmp(argv[arg], "-o")) { lm->outputfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_OUTPUT_FILE; HTAlert_setInteractive(NO); /* print version and exit */ } else if (!strcmp(argv[arg], "-version")) { VersionInfo(lm); Cleanup(lm, 0); /* -? or -help: show the command line help page */ } else if (!strcmp(argv[arg],"-?") || !strcmp(argv[arg],"-help")) { lm->anchor = (HTParentAnchor *) HTAnchor_findAddress(L_HELP); keycnt = 1; #ifdef CYRILLIC /* HWL 18/7/94: applied patch from agl@glas2.glas.apc.org (Anton Tropashko) */ } else if (!strcmp(argv[arg], "-koi2alt")) { doia2k(); OutputData(lm->pView, "Ahak2a!"); #endif /* Page size */ } else if (!strncmp(argv[arg], "-p", 2)) { if (*(argv[arg]+2)) { if (sscanf(argv[arg]+2, "%d", &HTScreenHeight) < 1) HTScreenHeight = -1; else { if(HTScreenHeight < MIN_SCREEN_HEIGHT) HTScreenHeight = MIN_SCREEN_HEIGHT; if(HTScreenHeight > MAX_SCREEN_HEIGHT) HTScreenHeight = MAX_SCREEN_HEIGHT; } } else if (arg+1 < argc && *argv[arg+1] != '-') { if (sscanf(argv[++arg], "%d", &HTScreenHeight) < 1) HTScreenHeight = -1; else { if(HTScreenHeight < MIN_SCREEN_HEIGHT) HTScreenHeight = MIN_SCREEN_HEIGHT; if(HTScreenHeight > MAX_SCREEN_HEIGHT) HTScreenHeight = MAX_SCREEN_HEIGHT; } } /* Page width */ } else if (!strncmp(argv[arg], "-w", 2)) { if (*(argv[arg]+2)) { if (sscanf(argv[arg]+2, "%d", &HTScreenWidth) < 1) HTScreenWidth = SCREEN_WIDTH; } else if (arg+1 < argc && *argv[arg+1] != '-') { if (sscanf(argv[++arg], "%d", &HTScreenWidth) < 1) HTScreenWidth = SCREEN_WIDTH; } if(HTScreenWidth < MIN_SCREEN_WIDTH) HTScreenWidth = MIN_SCREEN_WIDTH; if(HTScreenWidth > MAX_SCREEN_WIDTH) HTScreenWidth = MAX_SCREEN_WIDTH; /* Telnet from */ } else if (!strcmp(argv[arg], "-h")) { if (arg+1 < argc && *argv[arg+1] != '-') { lm->host = argv[++arg]; /* Use host name */ HTLib_setSecure(YES); /* No easy access */ } /* log file */ } else if (!strcmp(argv[arg], "-l")) { lm->logfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_LOG_FILE; /* rule file */ } else if (!strcmp(argv[arg], "-r")) { lm->rules = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_RULE_FILE; /* timeout -- Change the default request timeout */ } else if (!strcmp(argv[arg], "-timeout")) { int timeout = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : -1; if (timeout > 0) lm->timer = timeout; /* PICS user */ } else if (!strcmp(argv[arg], "-u")) { picsUser = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : "user"; } else if (!strcmp(argv[arg], "-unp")) { lm->noPICSPasswords = 1; #if 0 /* old version of user list file, still works when enabeled here */ /* PICS user list */ } else if (!strcmp(argv[arg], "-ul")) { picsUserList = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : "users.url"; #endif /* PICS user list */ } else if (!strcmp(argv[arg], "-ul")) { lm->userList = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_USERLIST_FILE; /* PICS mode */ } else if (!strcmp(argv[arg], "-pics")) { lm->userList = DEFAULT_USERLIST_FILE; /* preemptive or non-preemptive access */ } else if (!strcmp(argv[arg], "-single")) { HTRequest_setPreemptive(request, YES); lm->flags |= LM_PREEMTIVE; /* Disconnected operation */ } else if (!strncmp(argv[arg], "-discon", 7)) { HTCacheMode_setDisconnected(HT_DISCONNECT_NORMAL); /* Disable the cache */ } else if (!strncmp(argv[arg], "-nocache", 8)) { HTCacheMode_setEnabled(NO); /* Handling of Expire (cache) */ } else if (!strncmp(argv[arg], "-x", 2)) { char *p = argv[arg]+2; for(;*p;p++) { switch (argv[arg][2]) { case 'i': HTCacheMode_setExpires(HT_EXPIRES_IGNORE); break; case 'n': HTCacheMode_setExpires(HT_EXPIRES_NOTIFY); break; case 'a': HTCacheMode_setExpires(HT_EXPIRES_AUTO); break; default: if (SHOW_MSG) HTPrint("Bad parameter (%s) for option -x\n", argv[arg]); break; } } /* Anchor format */ } else if (!strcmp(argv[arg], "-a")) { if (arg+1 < argc && *argv[arg+1] != '-') end_reference = argv[++arg]; /* New representation */ /* Anchor format */ } else if (!strcmp(argv[arg], "-ar")) { if (arg+1 < argc && *argv[arg+1] != '-') reference_mark = argv[++arg]; /* Change representation */ /* Anchor format */ } else if (!strcmp(argv[arg], "-as")) { if (arg+1 < argc && *argv[arg+1] != '-') start_reference = argv[++arg]; /* Change representation */ /* No anchors */ } else if (!strcmp(argv[arg], "-na")) { display_anchors = NO; #ifndef NO_DIR_OPTIONS } else if (!strncmp(argv[arg], "-d", 2)) { char *p = argv[arg]+2; for(;*p;p++) { switch (argv[arg][2]) { case 'r':HTFile_setDirReadme(HT_DIR_README_NONE); break; case 't':HTFile_setDirReadme(HT_DIR_README_TOP); break; case 'b':HTFile_setDirReadme(HT_DIR_README_BOTTOM);break; case 'n':HTFile_setDirAccess(HT_DIR_FORBID); break; case 's':HTFile_setDirAccess(HT_DIR_SELECTIVE); break; case 'y':HTFile_setDirAccess(HT_DIR_OK); break; default: if (SHOW_MSG) HTPrint("Bad parameter (%s) in -d option\n", argv[arg]); } } #endif #ifdef WWWTRACE /* trace flags */ } else if (!strncmp(argv[arg], "-v", 2)) { lm->trace = HTSetTraceMessageMask(argv[arg]+2); #endif } else { if (SHOW_MSG) HTPrint("Bad Argument (%s)\n", argv[arg]); } } else { /* If no leading `-' then check for main argument */ if (!keycnt) { char * ref = HTParse(argv[arg], lm->cwd, PARSE_ALL); lm->anchor = HTAnchor_parent(HTAnchor_findAddress(ref)); keycnt = 1; HT_FREE(ref); } else { /* Check for successive keyword arguments */ char *escaped = HTEscape(argv[arg], URL_XALPHAS); if (keycnt++ <= 1) keywords = HTChunk_new(128); else HTChunk_putc(keywords, ' '); HTChunk_puts(keywords, HTStrip(escaped)); HT_FREE(escaped); } } } #ifdef CATCH_SIG SetSignal(); #endif /* Set up HText interface callbacks */ if (HTAlert_interactive () ) { /* interactive mode */ if (!HText_registerCDCallback (LMHText_new, LMHText_delete)) { HTPrint("HText new/delete callback registration failed.\n"); exit (1); } } else { /* non-interactive mode */ if (!HText_registerCDCallback (LMHText_new2, LMHText_delete)) { HTPrint("HText new/delete callback registration failed.\n"); exit (1); } } if (!HText_registerTextCallback (LMHText_addText)) { HTPrint("HText addText callback registration failed.\n"); exit (2); } if (!HText_registerLinkCallback (LMHText_beginAnchor)) { HTPrint("HText link callback registration failed.\n"); exit (3); } if (!HText_registerElementCallback ( LMHText_beginElement, LMHText_endElement)) { HTPrint("HText element callback registration failed.\n"); exit (3); } /* Make home page address */ if (!lm->anchor) lm->anchor = HTHomeAnchor(); /* Do we need list of presenters? (external viewers) */ if (HTAlert_interactive()) { lm->presenters = HTList_new(); HTPresenterInit(lm->presenters); HTRequest_setConversion(request, lm->presenters, NO); } else { /* ** Add default content decoder. We insert a through line as it doesn't ** matter that we get an encoding that we don't know when not in ** interactive mode. In interactive mode, we ask the user. */ HTFormat_addCoding("*", HTIdentityCoding, HTIdentityCoding, 0.3); } if (HTScreenHeight == -1) { /* Default page size */ if (HTAlert_interactive()) scrsize(&HTScreenHeight, &HTScreenWidth); else HTScreenHeight = 999999; } /* Disable free directory browsing when using telnet host */ if (lm->host && HTFile_dirAccess() == HT_DIR_OK) HTFile_setDirAccess(HT_DIR_SELECTIVE); /* Open output file */ if (!HTAlert_interactive()) { #ifndef WWW_WIN_WINDOW if (lm->outputfile) { if ((OUTPUT = fopen(lm->outputfile, "wb")) == NULL) { if (SHOW_MSG) HTPrint("Can't open `%s'\\n", lm->outputfile); OUTPUT = stdout; } } HTRequest_setOutputStream(request, HTFWriter_new(request, OUTPUT, YES)); #endif /* ** To reformat HTML, just put it through a parser running ** into a regenerator tbl 940613 */ if (lm->flags & LM_REFORMAT) { HTStructured * html = HTMLGenerator(request, NULL, WWW_HTML, HTRequest_outputFormat(request), HTRequest_outputStream(request)); HTRequest_setOutputStream(request, SGML_new(HTML_dtd(), html)); } } /* Log file specifed? */ if (lm->logfile) { lm->log = HTLog_open(lm->logfile, YES, YES); if (lm->log) HTNet_addAfter(HTLogFilter, NULL, lm->log, HT_ALL, HT_FILTER_LATE); } /* Just convert formats */ if (lm->flags & LM_FILTER) { #ifdef STDIN_FILENO HTRequest_setAnchor(request, (HTAnchor *) lm->anchor); HTRequest_setPreemptive(request, YES); HTLoadSocket(STDIN_FILENO, request); #endif Cleanup(lm, 0); } /* Set timeout on sockets */ if (lm->timer < 0) { lm->timer = HTAlert_interactive() ? DEFAULT_I_TIMEOUT : DEFAULT_NI_TIMEOUT; } /* Set the DNS cache timeout */ HTDNS_setTimeout(3600); /* Rule file specified? */ if (lm->rules) { char * rules = HTParse(lm->rules, lm->cwd, PARSE_ALL); if (!HTLoadRules(rules)) if (SHOW_MSG) HTPrint("Can't access rules\n"); HT_FREE(rules); } /* Set up PICS machinary */ CSApp_registerApp(PICSCallback, CSApp_callOnBad, PICS_userCallback, (void *)lm); /* Add our own filter to update the history list */ HTNet_addBefore(MemoryCacheFilter, NULL, NULL, HT_FILTER_EARLY); HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Should we load a PICS user profile? */ if (picsUser && !LoadPICSUser(lm, picsUser)) HTPrint("Unable to load PICS user \"%s\".\n", picsUser); /* PICS user list specified? */ if (lm->userList) LoadPICSUser(lm, lm->userList); /* request was registered in Thread_new before command line parsing loaded the PICS user, so re-register to give it the correct user */ CSApp_unregisterReq(request); CSApp_registerReq(request, lm->pCSUser, PICSCallback, CSApp_callOnBad, (void *)lm); /* Start the request */ if (keywords) status = HTSearchAnchor(keywords, (HTAnchor *) lm->anchor, request); else status = HTLoadAnchor((HTAnchor *) lm->anchor, request); if (keywords) HTChunk_delete(keywords); if (status != YES) { if (SHOW_MSG) HTPrint("Couldn't load home page\n"); CSApp_unregisterDefaultUser(); CSApp_unregisterApp(); Cleanup(lm, -1); } /* Set up the rest if we are in interactive mode */ if (HTAlert_interactive()) { /* Start History manager */ lm->history = HTHistory_new(); /* ** Register STDIN as the user socket IF not STDIN is connected to ** /dev/null or other non-terminal devices */ ConsoleEvent = HTEvent_new(scan_command, lm->console, HT_PRIORITY_MAX, lm->timer); #ifdef STDIN_FILENO if (isatty(STDIN_FILENO)) { HTEventList_register(STDIN_FILENO, HTEvent_READ, ConsoleEvent); } #else HTEventList_register(GetStdHandle(STD_INPUT_HANDLE), HTEvent_READ, ConsoleEvent); #endif } /* Go into the event loop... */ HTEventList_loop(request); /* Only gets here if event loop fails */ Cleanup(lm, 0); return 0; } �����������������������������������������������libwww/LineMode/src/HTBrowse.html�������������������������������������������������������������������0100644�0000764�0000144�00000003210�06526451326�016424� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Main Module for Line Mode Browser</TITLE> </HEAD> <BODY> <H1>Main Module for Line Mode Browser</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module defines the global variables etc. for the Line Mode Browser. The module is implemented by <A HREF="HTBrowse.c">HTBrowse.c</A>, and it is a part of the <A HREF="http://www.w3.org/LineMode/">Line Mode Browser</A>. <P> <PRE> #ifndef HTBROWSE_H #define HTBROWSE_H extern int HTScreenWidth; extern int HTScreenHeight; /* Anchor specific information */ extern BOOL display_anchors; /* Show anchors in text? */ extern char * start_reference; /* Format for start anchor */ extern char * end_reference; /* for end anchor */ extern char * reference_mark; /* for reference lists */ extern char * end_mark; /* Format string for [End] */ typedef struct _LineMode LineMode; typedef struct _HTView HTView; extern int OutputData(HTView * pView, const char * fmt, ...); #endif /* HTBROWSE_H */ /* for access to windows app's windows procedures */ typedef int InputParser_t (char* buf, SOCKET s, HTRequest * req, HTEventType type); extern InputParser_t * PInputParser; PUBLIC int bufferInput (char* buf, int len, SOCKET s, HTRequest * req, HTEventType type); extern LineMode * Context_getLineMode(HTRequest * request); extern HTRequest * LineMode_getConsole(LineMode * pLm); extern HTView * LineMode_getView(LineMode * pLm); extern HTView * HTView_create(char* name, int rows, int cols, LineMode * pLm); extern BOOL HTView_destroy(HTView * pView); </PRE> End of HTBrowse Declaration </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/HTFont.html���������������������������������������������������������������������0100644�0000764�0000144�00000001242�06734504720�016072� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>The portable font concept</TITLE> </HEAD> <BODY> <H1>The portable font concept</H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This is the Line mode browser version <PRE> #ifndef HTFONT_H #define HTFONT_H typedef long int HTLMFont; /* For now */ typedef long int HTFont; /* For now as well */ #define HT_NON_BREAK_SPACE ((char)1) /* For now */ #define HT_FONT 0 #define HT_CAPITALS 1 #define HT_BOLD 2 #define HT_UNDERLINE 4 #define HT_INVERSE 8 #define HT_DOUBLE 0x10 #define HT_BLACK 0 #define HT_WHITE 1 #endif /* HTFONT_H */ </PRE> End of HTFont </BODY> </HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/Makefile.am���������������������������������������������������������������������0100644�0000764�0000144�00000004604�07142510565�016101� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. bin_PROGRAMS = www www_LDADD = \ $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la \ $(top_builddir)/PICS-client/src/libpics.la \ -lm @LIBWWWXML@ @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ @A_STDIO@ SUBDIRS = windows vms INCLUDES = \ -I$(srcdir)/../../Library/src \ -I$(top_srcdir)/modules/expat/xmlparse \ -I$(srcdir)/../../PICS-client/src # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .g .h .html .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif .g.c: -$(RM) $(srcdir)/$(*F).c $(LN_S) $(srcdir)/$(*F).g $(srcdir)/$(*F).c www_SOURCES = \ HTBrowse.c GridText.c ConView.c \ GridStyle.c DefaultStyles.c BUILT_SOURCES = \ HTBrowse.h GridStyle.h GridText.h \ HTFont.h a_stdio.c EXTRA_www_SOURCES = \ a_stdio.g \ a_stdio.h DOCS := $(wildcard *.html) inc: $(BUILT_SOURCES) @echo Generated built sources PURIFY_CACHE = @PURIFY_CACHE@ purify: $(www_OBJECTS) $(www_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(www_OBJECTS) \ ../../Library/src/.libs/libwww.a -lm $(LIBS) # need the WAIS library and the cyrrilic support! EXTRA_DIST = \ $(BUILT_SOURCES) \ $(DOCS) \ DefaultStyles.c.classic \ DefaultStyles.c.modern ����������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/a_stdio.g�����������������������������������������������������������������������0100644�0000764�0000144�00000013330�05641477437�015647� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* $Id: a_stdio.g,v 1.1 2025/09/26 07:58:23 howcome Exp $ // AGL(C) 1994 */ #include <stdio.h> #include "a_stdio.h" static char e_null[] = { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF }; static char alt2koi8[] = { 0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE, 0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1, 0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xBF, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xB0, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE, 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1, 0xB3, 0xA3, 0xB2, 0xB1, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0x9B }; static char koi82alt[] = { 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xFF, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xF1, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xD3, 0xF3, 0xF2, 0xF0, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xCB, 0xEE, 0xA0, 0xA1, 0xE6, 0xA4, 0xA5, 0xE4, 0xA3, 0xE5, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xEF, 0xE0, 0xE1, 0xE2, 0xE3, 0xA6, 0xA2, 0xEC, 0xEB, 0xA7, 0xE8, 0xED, 0xE9, 0xE7, 0xEA, 0x9E, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83, 0x95, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x9F, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82, 0x9C, 0x9B, 0x87, 0x98, 0x9D, 0x99, 0x97, 0x9A }; static char strip8[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F }; static char *encode,*i_encode=alt2koi8; int enctype=1,i_enctype; int do_null() { encode=e_null; enctype=0; return 0; } int do_k2a() { encode=koi82alt;enctype=1; return 0; } int do_a2k() { encode=alt2koi8;enctype=2; return 0; } int do_strip8() { encode=strip8; enctype=3; return 0; } int do_enc(int _) { if(_<4) switch(_) { case 0: do_null(); break; case 1: do_k2a(); break; case 2: do_a2k (); break; case 3: do_strip8(); break; } return enctype; } int doienc(int _) { if(_<2) { i_enctype=_; switch(_) { case 0: i_encode=e_null; do_null(); break; case 1: i_encode=alt2koi8; do_k2a(); break; }} return i_enctype; } int doinull() { doienc(0); return 0; } int doia2k() { doienc(1); return 0; } #define PRINT(par1,par2,cond) int a_print(char *str, int _, FILE *fp) { register int i; if(str==0) return 1; for(;*str!='\0' && _>0;++str,--_) { if((i=(int)*str)<0) i=encode[i+128]; else /* for signed chars*/ if(i>127) i=encode[i-128]; /* for unsigned chars */ if(fputc(i,fp)==EOF) return 0; } return 1; } PRINT(int _,, *str!='\0') PRINT(int size, int nmemb, size*nmemb > 0) int awrite(const void *str, int size, int nmemb, FILE *fp) { register int i, _=size*nmemb; if(str==0) return 0; for(;_ > 0;++str,--_) { if((i=(int)*(char*)str)<0) i=encode[i+128]; else /* for signed chars */ if(i>127) i=encode[i-128]; /* for unsigned chars */ if(fputc(i,fp)==EOF) return (size*nmemb-_)/size; } return nmemb; } int aputc(char ch, FILE *fp) { register int i; if((i=(int)ch)<0) i=encode[i+128]; else /* for signed chars */ if(i>127) i=encode[i-128]; /* for unsigned chars */ if(fputc(i,fp)==EOF) return EOF; return ch; } char *agets(char *str, int _, FILE *fp) { char *pc=str; register int i,j=0; if(fgets(str,_,fp)==0) return 0; for(;*str!='\0' && j<_;++j,++pc) { if((i=(int)*pc)<0) *str++=i_encode[i+128]; else /* for signed chars */ if(i>127) *str++=i_encode[i-128]; /* for unsigned chars */ else /* if(isalnum(i)||isspace(i)||ispunct(i)) *str++=i; else */ if(i>0 && i<10) { if(j>0) --str; continue; } else *str++=i; } *str='\0'; return str; } int anprint(char *str, int psize, FILE *fp) { if(fwrite(str,psize,1,fp)!=1) return 0; return 1; } /*void a_translate(char *str, int _) { for(register int i;*str!='\0' && _>0;++str,--_) { if((i=(int)*str)<0) i=encode[i+128]; else // for signed chars if(i>127) i=encode[i-128]; // for unsigned chars *str=i; } }*/ /* EOF $Id: a_stdio.g,v 1.1 2025/09/26 07:58:23 howcome Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/a_stdio.h�����������������������������������������������������������������������0100644�0000764�0000144�00000001264�05733577473�015656� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* a_stdio.h, from agl@glas2.glas.apc.org (Anton Tropashko) // patch applied by HWL 18/7/94 */ #ifndef A_STDIO_H #define A_STDIO_H #include <stdio.h> #define H 64000 int a_print(char *, int, FILE *fp); char *agets(char *, int psize, FILE *fp); int aputc(char, FILE *); int awrite(const void *str, int size, int nmemb, FILE *fp); int anprint(char *str, int psize, FILE *fp); int do_null(),do_k2a(),do_a2k(),do_strip8(),do_enc(int),doienc(int); int doinull(),doia2k(); int a_spawn(char *argv[], char *f_stdin, char *f_stdout, char *f_stderr); struct ARc { int locale, encoding, i_encoding; /*public: ARc() { locale=0; encoding=0; i_encoding=0; }*/ }; extern struct ARc arc; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520574�015541� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/CVS/��������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�016167� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/CVS/Root����������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517400�017032� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/CVS/Repository����������������������������������������������������������0100644�0000764�0000144�00000000034�07405517400�020262� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/CVS/Entries�������������������������������������������������������������0100644�0000764�0000144�00000001075�07405517401�017523� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.2/Thu Apr 18 01:42:18 1996// /Makefile.am/1.5/Tue Nov 3 23:03:20 1998// /lib.c/1.1/Sun Nov 5 21:20:38 1995// /lib.h/1.1/Sun Nov 5 21:20:39 1995// /scroll.c/1.2/Sun Dec 3 01:10:22 1995// /scroll.h/1.2/Sun Dec 3 01:10:24 1995// /www.c/1.15/Tue Oct 27 17:29:04 1998// /www.def/1.2/Mon Nov 20 18:50:44 1995// /www.dsp/1.1/Wed Oct 28 18:17:25 1998/-kb/ /www.ico/1.1/Sun Nov 5 21:20:35 1995// /www.mak/1.6/Wed Oct 28 18:17:25 1998/-kb/ /www.rc/1.4/Thu Mar 21 00:09:54 1996// /www32.def/1.2/Mon Nov 20 18:50:49 1995// /wwwrc.h/1.3/Wed Feb 14 00:44:07 1996// D �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/Makefile����������������������������������������������������������������0100644�0000764�0000144�00000014144�07405520574�017202� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DEF := $(wildcard *.def) MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = $(DEF) $(MAK) $(WIN) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu LineMode/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu LineMode/src/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/.cvsignore��������������������������������������������������������������0100644�0000764�0000144�00000000025�06135316772�017535� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/Makefile.am�������������������������������������������������������������0100644�0000764�0000144�00000000307�06617705670�017600� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DEF := $(wildcard *.def) MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = \ $(DEF) \ $(MAK) \ $(WIN) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/lib.c�������������������������������������������������������������������0100644�0000764�0000144�00000011321�06047225246�016445� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #include <windows.h> #include <string.h> #include "commdlg.h" //#include "ctrl.h" #include "lib.h" #define MAXLEN_TEMPSTR 81 int NEAR Lib_FindStringInTable(HINSTANCE hInstance, char* lookFor, int startId, WORD wTableLen) { char szBuffer[MAXLEN_TEMPSTR]; WORD wCount; for (wCount = 0; wCount < wTableLen; wCount++) { LoadString(hInstance, startId + wCount, szBuffer, sizeof(szBuffer)); if (!strcmp(szBuffer, lookFor)) return (wCount); } return (-1); //not found } // end of Lib_FindStringInTable() int NEAR Font_SetupInfo(FontInfo_t* pFont) { // setup default font information pFont->hFont = 0; pFont->rgbFGColor = RGB(0, 0, 0); pFont->logFont.lfHeight = 12; pFont->logFont.lfWidth = 0; pFont->logFont.lfEscapement = 0; pFont->logFont.lfOrientation = 0; pFont->logFont.lfWeight = 0; pFont->logFont.lfItalic = 0; pFont->logFont.lfUnderline = 0; pFont->logFont.lfStrikeOut = 0; pFont->logFont.lfCharSet = OEM_CHARSET; pFont->logFont.lfOutPrecision = OUT_DEFAULT_PRECIS; pFont->logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; pFont->logFont.lfQuality = DEFAULT_QUALITY; pFont->logFont.lfPitchAndFamily = FIXED_PITCH | FF_MODERN; lstrcpy(pFont->logFont.lfFaceName, "FixedSys"); return (0); } void NEAR Font_DestroyInfo(FontInfo_t* pFont) { DeleteObject(pFont->hFont); } //--------------------------------------------------------------------------- // VOID NEAR Lib_FillComboBox(HINSTANCE hInstance, HWND hCtrlWnd, int nIDString, // WORD NEAR *npTable, WORD wTableLen, // WORD wCurrentSetting) // // Description: // Fills the given combo box with strings from the resource // table starting at nIDString. Associated items are // added from given table. The combo box is notified of // the current setting. // // Parameters: // HINSTANCE hInstance // handle to application instance // // HWND hCtrlWnd // handle to combo box control // // int nIDString // first resource string id // // WORD NEAR *npTable // near point to table of associated values // // WORD wTableLen // length of table // // WORD wCurrentSetting // current setting (for combo box selection) // //--------------------------------------------------------------------------- void NEAR Lib_FillComboBox(HINSTANCE hInstance, HWND hCtrlWnd, int nIDString, DWORD NEAR *npTable, WORD wTableLen, DWORD wCurrentSetting) { char szBuffer[MAXLEN_TEMPSTR]; WORD wCount, wPosition; for (wCount = 0; wCount < wTableLen; wCount++) { // load the string from the string resources and // add it to the combo box LoadString(hInstance, nIDString + wCount, szBuffer, sizeof(szBuffer)); wPosition = LOWORD(SendMessage(hCtrlWnd, CB_ADDSTRING, 0, (LPARAM) (LPSTR) szBuffer)); // use item data to store the actual table value SendMessage(hCtrlWnd, CB_SETITEMDATA, (WPARAM) wPosition, (LPARAM) (LONG) *(npTable + wCount)); // if this is our current setting, select it if (*(npTable + wCount) == wCurrentSetting) SendMessage(hCtrlWnd, CB_SETCURSEL, (WPARAM) wPosition, 0); } } // end of Lib_FillComboBox() //--------------------------------------------------------------------------- // VOID NEAR Lib_ModalDialogBoxParam( HINSTANCE hInstance, // LPCSTR lpszTemplate, HWND hWnd, // DLGPROC lpDlgProc, LPARAM lParam ) // // Description: // It is a simple utility function that simply performs the // MPI and invokes the dialog box with a DWORD paramter. // // Parameters: // similar to that of DialogBoxParam() with the exception // that the lpDlgProc is not a procedure instance // //--------------------------------------------------------------------------- int NEAR Lib_ModalDialogBoxParam(HINSTANCE hInstance, LPCSTR lpszTemplate, HWND hWnd, DLGPROC lpDlgProc, LPARAM lParam) { DLGPROC lpProcInstance; int ret; lpProcInstance = (DLGPROC)MakeProcInstance((FARPROC)lpDlgProc, hInstance); ret = DialogBoxParam(hInstance, lpszTemplate, hWnd, lpProcInstance, lParam); FreeProcInstance((FARPROC)lpProcInstance); return (ret); } // end of Lib_ModalDialogBoxParam() int NEAR Lib_SelectWorkingFont(HWND hWnd, FontInfo_t NEAR* pFont) { CHOOSEFONT cfTTYFont ; cfTTYFont.lStructSize = sizeof(CHOOSEFONT); cfTTYFont.hwndOwner = hWnd; cfTTYFont.hDC = 0; cfTTYFont.rgbColors = pFont->rgbFGColor; cfTTYFont.lpLogFont = &pFont->logFont; cfTTYFont.Flags = CF_SCREENFONTS | CF_FIXEDPITCHONLY | CF_EFFECTS | CF_INITTOLOGFONTSTRUCT; cfTTYFont.lCustData = 0; cfTTYFont.lpfnHook = 0; cfTTYFont.lpTemplateName = 0; cfTTYFont.hInstance = GETHINST(hWnd); if (ChooseFont(&cfTTYFont)) { pFont->rgbFGColor = cfTTYFont.rgbColors ; return (TRUE); // ResetTTYScreen( GetParent( hWnd ), pXtra) ; } return (FALSE); } // end of Lib_SelectWorkingFont() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/lib.h�������������������������������������������������������������������0100644�0000764�0000144�00000001740�06047225247�016457� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ // data structures typedef struct { HFONT hFont ; LOGFONT logFont ; DWORD rgbFGColor ; } FontInfo_t; // macros ( for easier readability ) #ifdef _WIN32 #define GETHINST(x) ((HINSTANCE)GetWindowLong(x, GWL_HINSTANCE)) #else #define GETHINST(x) ((HINSTANCE) GetWindowWord(x, GWW_HINSTANCE)) #endif #define SET_PROP( x, y, z ) SetProp( x, MAKEINTATOM( y ), z ) #define GET_PROP( x, y ) GetProp( x, MAKEINTATOM( y ) ) #define REMOVE_PROP( x, y ) RemoveProp( x, MAKEINTATOM( y ) ) // CRT mappings to NT API #define _fmemset memset #define _fmemmove memmove //Lib_ int NEAR Lib_FindStringInTable(HINSTANCE hInstance, char* lookFor, int startId, WORD wTableLen); int NEAR Font_SetupInfo(FontInfo_t* pFont); void NEAR Font_DestroyInfo(FontInfo_t* pFont); void NEAR Lib_FillComboBox(HINSTANCE, HWND, int, DWORD NEAR *, WORD, DWORD); int NEAR Lib_ModalDialogBoxParam(HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM); int NEAR Lib_SelectWorkingFont(HWND hWnd, FontInfo_t NEAR* pFont); ��������������������������������libwww/LineMode/src/windows/scroll.c����������������������������������������������������������������0100644�0000764�0000144�00000031607�06060174376�017210� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* scroll.c implements the Scroll library. See the header, scroll.h, for the app interface. The Scroll library provides a simple tty interface to a Windows app. This app is similar to a console app except that it runs as a Windows program and has the full Windows API available to it. */ /* I, Eric Prud'hommeaux, grant unlimited use of this code to the WWW consortium. I retain the copyright ownership and expect to be contacted for licencing if the Scroll library or the library interface are used in any commercial products or ventures. Also, please contact me if for a CURSES version of this. eric@apocalypse.org */ #include <windows.h> #include <string.h> #include "lib.h" #include "scroll.h" //private functions int scroll_MoveCursor(ScrollInfo_t* pScroll) { if (pScroll->cursorState & Scroll_cursorShow) SetCaretPos((pScroll->nColumn * pScroll->xChar) - pScroll->xOffset, (pScroll->nRow * pScroll->yChar) - pScroll->yOffset); return ( TRUE ) ; } //public functions int Scroll_SetupInfo(ScrollInfo_t* pScroll, int maxRows, int maxCols) { pScroll->xSize = 0; pScroll->ySize = 0; pScroll->xScroll = 0; pScroll->yScroll = 0; pScroll->xOffset = 0; pScroll->yOffset = 0; pScroll->nColumn = 0; pScroll->nRow = 0; pScroll->maxRows = maxRows; pScroll->maxCols = maxCols; pScroll->cursorState = Scroll_cursorHide; pScroll->maxTrackSize.x = (int)0x0; pScroll->maxTrackSize.y = (int)0x0; // clear screen space // GPF here means no memory was allocated by caller _fmemset(pScroll->screenBuf, ' ', pScroll->maxRows * pScroll->maxCols); return (0); } void Scroll_DestroyInfo(ScrollInfo_t* pScroll) { return; } int Scroll_WriteControl(ScrollInfo_t* pScroll, HWND hWnd, Scroll_control2_t control, int x, int y) { switch (control) { case Scroll_control_null: return (0); case Scroll_control_CR: pScroll->nColumn = 0; scroll_MoveCursor(pScroll); return (0); case Scroll_control_LF: if (pScroll->nRow++ == pScroll->maxRows - 1) { memmove(pScroll->screenBuf, pScroll->screenBuf + pScroll->maxCols, (pScroll->maxRows - 1) * pScroll->maxCols); memset(pScroll->screenBuf + (pScroll->maxRows - 1) * pScroll->maxCols, ' ', pScroll->maxCols); InvalidateRect(hWnd, 0, FALSE); pScroll->nRow--; } scroll_MoveCursor(pScroll); return (0); case Scroll_control_BS: if (pScroll->nColumn > 0) pScroll->nColumn--; if (pScroll->control | Scroll_control_BSbegetsSpace) { *(pScroll->screenBuf + pScroll->nRow * pScroll->maxCols + pScroll->nColumn) = ' '; InvalidateRect(hWnd, 0, FALSE); } scroll_MoveCursor(pScroll); return (0); case Scroll_control_Bell: MessageBeep(0); return (0); case Scroll_control_Tab: { int curTab; curTab = pScroll->nColumn/8; curTab++; pScroll->nColumn = curTab * 8; if (pScroll->nColumn >= pScroll->maxCols) { Scroll_WriteControl(pScroll, hWnd, Scroll_control_CR, 0, 0); Scroll_WriteControl(pScroll, hWnd, Scroll_control_LF ,0 ,0); } else scroll_MoveCursor(pScroll); } return (0); case Scroll_control_clearEol: memset(pScroll->screenBuf + (pScroll->nRow)*pScroll->maxCols + pScroll->nColumn, ' ', pScroll->maxCols - pScroll->nColumn); InvalidateRect(hWnd, 0, FALSE); return (0); case Scroll_control_goto: pScroll->nColumn = x; pScroll->nRow = y; scroll_MoveCursor(pScroll); return (0); case Scroll_control_normal: return (0); case Scroll_control_bold: return (0); case Scroll_control_inverse: return (0); default: //undefined request return (1); } } int Scroll_writeLiteral(ScrollInfo_t* pScroll, HWND hWnd, LPSTR lpBlock, int nLength) { int i ; RECT rect ; int Scroll_writeInterpreted(ScrollInfo_t* pScroll, HWND hWnd, LPSTR lpBlock, int nLength); for (i = 0 ; i < nLength; i++) { *(pScroll->screenBuf + pScroll->nRow * pScroll->maxCols + pScroll->nColumn) = lpBlock[i]; rect.left = (pScroll->nColumn * pScroll->xChar) - pScroll->xOffset; rect.right = rect.left + pScroll->xChar; rect.top = (pScroll->nRow * pScroll->yChar) - pScroll->yOffset; rect.bottom = rect.top + pScroll->yChar; InvalidateRect(hWnd, &rect, FALSE); // Line wrap if (pScroll->nColumn < pScroll->maxCols - 1) pScroll->nColumn++; else if (pScroll->control & Scroll_control_autoWrap) { if (pScroll->control & Scroll_control_crBegetsLf) Scroll_writeInterpreted(pScroll, hWnd, "\r", 1); else Scroll_writeInterpreted(pScroll, hWnd, "\r\n", 2); } } return (TRUE); } // interpretable keycodes #define SCROLL_BELL 0x07 #define SCROLL_BS 0x08 #define SCROLL_TAB 0x09 #define SCROLL_LF 0x0A #define SCROLL_CR 0x0D int Scroll_writeInterpreted(ScrollInfo_t* pScroll, HWND hWnd, LPSTR lpBlock, int nLength) { int i ; for (i = 0 ; i < nLength; i++) { switch (lpBlock[i]) { case SCROLL_BELL: Scroll_WriteControl(pScroll, hWnd, Scroll_control_Bell, 0, 0); break ; case SCROLL_BS: Scroll_WriteControl(pScroll, hWnd, Scroll_control_BS, 0, 0); break; case SCROLL_TAB: Scroll_WriteControl(pScroll, hWnd, Scroll_control_Tab, 0, 0); break; case SCROLL_CR: Scroll_WriteControl(pScroll, hWnd, Scroll_control_CR, 0, 0); if (pScroll->control & Scroll_control_crBegetsLf) Scroll_WriteControl(pScroll, hWnd, Scroll_control_LF, 0, 0); break; case SCROLL_LF: if (pScroll->control & Scroll_control_lfBegetsCr) Scroll_WriteControl(pScroll, hWnd, Scroll_control_CR, 0, 0); Scroll_WriteControl(pScroll, hWnd, Scroll_control_LF, 0, 0); break ; default: Scroll_writeLiteral(pScroll, hWnd, lpBlock+i, 1); break; } } return (TRUE); } // end of Scroll_writeInterpreted() int Scroll_WriteBlock(ScrollInfo_t* pScroll, HWND hWnd, LPSTR lpBlock, int nLength) { if (pScroll->control & Scroll_control_literal) return (Scroll_writeLiteral(pScroll, hWnd, lpBlock, nLength)); else return (Scroll_writeInterpreted(pScroll, hWnd, lpBlock, nLength)); } int Scroll_SetSize(ScrollInfo_t* pScroll, HWND hWnd, WORD wVertSize, WORD wHorzSize) { int nScrollAmt ; pScroll->ySize = (int) wVertSize ; pScroll->yScroll = max(0, (pScroll->maxRows * pScroll->yChar) - pScroll->ySize); nScrollAmt = min(pScroll->yScroll, pScroll->yOffset ) - pScroll->yOffset; ScrollWindow(hWnd, 0, -nScrollAmt, 0, 0); pScroll->yOffset = pScroll->yOffset + nScrollAmt; SetScrollPos(hWnd, SB_VERT, pScroll->yOffset, FALSE); SetScrollRange(hWnd, SB_VERT, 0, pScroll->yScroll, TRUE); pScroll->xSize = (int) wHorzSize ; pScroll->xScroll = max(0, (pScroll->maxCols * pScroll->xChar) - pScroll->xSize); nScrollAmt = min(pScroll->xScroll, pScroll->xOffset) - pScroll->xOffset; ScrollWindow(hWnd, 0, -nScrollAmt, 0, 0); pScroll->xOffset = pScroll->xOffset + nScrollAmt; SetScrollPos(hWnd, SB_HORZ, pScroll->xOffset, FALSE); SetScrollRange(hWnd, SB_HORZ, 0, pScroll->xScroll, TRUE); InvalidateRect(hWnd, 0, TRUE); return (TRUE); } // end of Scroll_SetSize() int Scroll_SetVert(ScrollInfo_t* pScroll, HWND hWnd, WORD wScrollCmd, WORD wScrollPos) { int nScrollAmt ; switch (wScrollCmd) { case SB_TOP: nScrollAmt = -pScroll->yOffset ; break ; case SB_BOTTOM: nScrollAmt = pScroll->yScroll - pScroll->yOffset ; break ; case SB_PAGEUP: nScrollAmt = -pScroll->ySize ; break ; case SB_PAGEDOWN: nScrollAmt = pScroll->ySize ; break ; case SB_LINEUP: nScrollAmt = -pScroll->yChar ; break ; case SB_LINEDOWN: nScrollAmt = pScroll->yChar ; break ; case SB_THUMBPOSITION: nScrollAmt = wScrollPos - pScroll->yOffset ; break ; default: return ( FALSE ) ; } if ((pScroll->yOffset + nScrollAmt) > pScroll->yScroll) nScrollAmt = pScroll->yScroll - pScroll->yOffset ; if ((pScroll->yOffset + nScrollAmt) < 0) nScrollAmt = -pScroll->yOffset ; ScrollWindow( hWnd, 0, -nScrollAmt, 0, 0 ) ; pScroll->yOffset = pScroll->yOffset + nScrollAmt ; SetScrollPos( hWnd, SB_VERT, pScroll->yOffset, TRUE ) ; return ( TRUE ) ; } // end of Scroll_SetVert() int Scroll_SetHorz(ScrollInfo_t* pScroll, HWND hWnd, WORD wScrollCmd, WORD wScrollPos) { int nScrollAmt ; switch (wScrollCmd) { case SB_TOP: nScrollAmt = -pScroll->xOffset ; break ; case SB_BOTTOM: nScrollAmt = pScroll->xScroll - pScroll->xOffset ; break ; case SB_PAGEUP: nScrollAmt = -pScroll->xSize ; break ; case SB_PAGEDOWN: nScrollAmt = pScroll->xSize ; break ; case SB_LINEUP: nScrollAmt = -pScroll->xChar ; break ; case SB_LINEDOWN: nScrollAmt = pScroll->xChar ; break ; case SB_THUMBPOSITION: nScrollAmt = wScrollPos - pScroll->xOffset ; break ; default: return ( FALSE ) ; } if ((pScroll->xOffset + nScrollAmt) > pScroll->xScroll) nScrollAmt = pScroll->xScroll - pScroll->xOffset ; if ((pScroll->xOffset + nScrollAmt) < 0) nScrollAmt = -pScroll->xOffset ; ScrollWindow( hWnd, -nScrollAmt, 0, 0, 0 ) ; pScroll->xOffset = pScroll->xOffset + nScrollAmt ; SetScrollPos( hWnd, SB_HORZ, pScroll->xOffset, TRUE ) ; return ( TRUE ) ; } // end of Scroll_SetHorz() int Scroll_SetFocus(HWND hWnd, ScrollInfo_t* pScroll) { if (!(pScroll->cursorState & Scroll_cursorShow)) { CreateCaret(hWnd, 0, pScroll->xChar, pScroll->yChar); ShowCaret(hWnd); pScroll->cursorState |= Scroll_cursorShow; } scroll_MoveCursor(pScroll); return (TRUE); } // end of Scroll_SetFocus() int Scroll_KillFocus(HWND hWnd, ScrollInfo_t* pScroll) { if (pScroll->cursorState & Scroll_cursorShow) { HideCaret(hWnd); DestroyCaret(); pScroll->cursorState &= ~Scroll_cursorShow; } return (TRUE); } // end of Scroll_KillFocus() int Scroll_Paint(ScrollInfo_t* pScroll, FontInfo_t* pFont, HWND hWnd, CursorState_t cursorState) { int nRow, nCol, nEndRow, nEndCol, nCount, nHorzPos, nVertPos ; HDC hDC ; HFONT hOldFont ; PAINTSTRUCT ps ; RECT rect ; hDC = BeginPaint( hWnd, &ps ) ; hOldFont = SelectObject( hDC, pFont->hFont ) ; SetTextColor( hDC, pFont->rgbFGColor ) ; SetBkColor( hDC, GetSysColor( COLOR_WINDOW ) ) ; rect = ps.rcPaint ; nRow = min(pScroll->maxRows - 1, max(0, (rect.top + pScroll->yOffset) / pScroll->yChar)); nEndRow = min(pScroll->maxRows - 1, ((rect.bottom + pScroll->yOffset - 1) / pScroll->yChar)); nCol = min(pScroll->maxCols - 1, max(0, (rect.left + pScroll->xOffset) / pScroll->xChar)); nEndCol = min(pScroll->maxCols - 1, ((rect.right + pScroll->xOffset - 1) / pScroll->xChar)); nCount = nEndCol - nCol + 1 ; for (; nRow <= nEndRow; nRow++) { nVertPos = (nRow * pScroll->yChar) - pScroll->yOffset ; nHorzPos = (nCol * pScroll->xChar) - pScroll->xOffset ; rect.top = nVertPos ; rect.bottom = nVertPos + pScroll->yChar ; rect.left = nHorzPos ; rect.right = nHorzPos + pScroll->xChar * nCount ; SetBkMode( hDC, OPAQUE ) ; ExtTextOut( hDC, nHorzPos, nVertPos, ETO_OPAQUE | ETO_CLIPPED, &rect, (LPSTR)( pScroll->screenBuf + nRow * pScroll->maxCols + nCol ), nCount, 0 ) ; } SelectObject( hDC, hOldFont ) ; EndPaint( hWnd, &ps ) ; if (cursorState | Scroll_cursorShow) scroll_MoveCursor(pScroll); return ( TRUE ) ; } // end of Scroll_Paint() int Scroll_ResetScreen(HWND hWnd, ScrollInfo_t* pScroll, FontInfo_t* pFont) { HDC hDC ; TEXTMETRIC tm ; RECT rect; if (0 != pFont->hFont) DeleteObject( pFont->hFont ) ; pFont->hFont = CreateFontIndirect( &pFont->logFont ) ; hDC = GetDC(hWnd); SelectObject(hDC, pFont->hFont); GetTextMetrics(hDC, &tm); ReleaseDC(hWnd, hDC); pScroll->xChar = tm.tmAveCharWidth; pScroll->yChar = tm.tmHeight + tm.tmExternalLeading; rect.left = 0; rect.top = 0; rect.right = pScroll->xChar * pScroll->maxCols; rect.bottom = pScroll->yChar * pScroll->maxRows; AdjustWindowRect(&rect, GetWindowLong(hWnd, GWL_STYLE), TRUE); pScroll->maxTrackSize.x = rect.right - rect.left; pScroll->maxTrackSize.y = rect.bottom - rect.top; // pScroll->maxTrackSize.x = pScroll->xChar * pScroll->maxCols + 2*GetSystemMetrics(SM_CXFRAME) + GetSystemMetrics(SM_CXVSCROLL); // pScroll->maxTrackSize.y = pScroll->yChar * pScroll->maxRows + 2*GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYHSCROLL); // a slimy hack to force the scroll position, region to // be recalculated based on the new character sizes // SendMessage(hWnd, WM_SIZE, SIZENORMAL, (LPARAM)MAKELONG(rcWindow.right - rcWindow.left, rcWindow.bottom - rcWindow.top)); // Scroll_SetSize(pScroll, hWnd, (WORD)(rcWindow.bottom - rcWindow.top), (WORD)(rcWindow.right - rcWindow.left)); Scroll_SetSize(pScroll, hWnd, (WORD)pScroll->maxTrackSize.y, (WORD)pScroll->maxTrackSize.x); return (TRUE); } // end of Scroll_ResetScreen() �������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/scroll.h����������������������������������������������������������������0100644�0000764�0000144�00000004315�06060174400�017175� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* scroll.h - This header represents the interface to the Scroll library. The Scroll library provides a simple tty interface to a Windows app. This app is similar to a console app except that it runs as a Windows program and has the full Windows API available to it. */ /* I, Eric Prud'hommeaux, grant unlimited use of this code to the WWW consortium. I retain the copyright ownership and expect to be contacted for licencing if the Scroll library or the library interface are used in any commercial products or ventures. Also, please contact me if for a CURSES version of this. eric@apocalypse.org */ typedef enum {Scroll_control_crBegetsLf = 0x01, Scroll_control_lfBegetsCr = 0x02, Scroll_control_BSbegetsSpace = 0x04, Scroll_control_autoWrap = 0x08, Scroll_control_literal = 0x10} Scroll_control_t; typedef enum {Scroll_control_null, Scroll_control_CR, Scroll_control_LF, Scroll_control_BS, Scroll_control_Tab, Scroll_control_Bell, Scroll_control_clearEol, Scroll_control_goto, Scroll_control_normal, Scroll_control_bold, Scroll_control_inverse } Scroll_control2_t; typedef enum {Scroll_cursorHide = 0, Scroll_cursorShow = 1, Scroll_cursorWait = 2, Scroll_cursorNormal = 3} CursorState_t; typedef struct { int xSize, ySize, xScroll, yScroll, xOffset, yOffset, nColumn, nRow, xChar, yChar, maxRows, maxCols; Scroll_control_t control; BYTE* screenBuf; POINT maxTrackSize; CursorState_t cursorState; } ScrollInfo_t; //Scroll_ int Scroll_SetupInfo(ScrollInfo_t* pScroll, int maxRows, int maxCols); void Scroll_DestroyInfo(ScrollInfo_t* pScroll); int Scroll_WriteControl(ScrollInfo_t* pScroll, HWND hWnd, Scroll_control2_t control, int x, int y); int Scroll_WriteBlock(ScrollInfo_t* pScroll, HWND, LPSTR, int); int Scroll_SetSize(ScrollInfo_t*, HWND, WORD, WORD); int Scroll_SetVert(ScrollInfo_t*, HWND, WORD, WORD); int Scroll_SetHorz(ScrollInfo_t*, HWND, WORD, WORD); int Scroll_SetFocus(HWND, ScrollInfo_t*); int Scroll_KillFocus(HWND, ScrollInfo_t*); int Scroll_Paint(ScrollInfo_t* pScroll, FontInfo_t* pFont, HWND hWnd, CursorState_t cursorState); int Scroll_ResetScreen(HWND hWnd, ScrollInfo_t* pScroll, FontInfo_t* pFont); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/www.c�������������������������������������������������������������������0100644�0000764�0000144�00000056537�06615401340�016535� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <windows.h> #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdarg.h> #include "lib.h" #include "scroll.h" #include "wwwrc.h" #include "WWWLib.h" #include "HTReqMan.h" #include "../HTBrowse.h" #define VERSIONSTR "v0.1 beta" //update this version for each release // monitor size #define MAXROWS 25 #define MAXCOLS 80 struct _HTView { HWND hWnd; char * name; ScrollInfo_t * pScrollInfo; FontInfo_t * pFontInfo; int rows; int cols; LineMode * pLm; }; char WWWClassName[] = "WWWClass"; char VersionText[] = "WWW.EXE "VERSIONSTR"."; HINSTANCE HInstance; HTView * PMonitorView = 0; HTView * PDataView = 0; extern HTRequest * LineMode_getConsole(LineMode * pLm); typedef struct { /* default */ int zeroPad; /* 0 */ int leftJustify; /* 0 */ int showSign; /* 0 */ int width; /* -1 */ int precision; /* -1 */ char size; /* 0 */ int iArgs; /* 0 */ } Crack_format_t; /* = -2 */ #define Crack_format_INIT {0, 0, 0, -1, -1, 0, 0} typedef struct { int freeMe; char * ptr; int ptrLen; int index; char terminate; Crack_format_t format; } Crack_t; #define Crack_INIT {0, 0, 0, 0, 0, Crack_format_INIT} PRIVATE int _readInt(char * ptr, int * pDest) { int i; int ret = 0; for (i = 0; ptr[i] >= '0' && ptr[i] <= '9'; i++) { ret *= 10; ret += ptr[i]; } if (!i) return 0; *pDest = i; return i; } PRIVATE int Crack_next(Crack_t * pCrack, char * fmt, va_list pArgs) { int innastring = 0; int scanIndex = pCrack->index; int used; static char shortRet[50]; char sprintFmt[20]; switch (fmt[scanIndex]) { case 0: return 0; case '%': scanIndex++; /* check for modifiers */ if (fmt[scanIndex] == '0') { pCrack->format.zeroPad = -1; scanIndex++; } if (fmt[scanIndex] == '-') { pCrack->format.leftJustify = -1; scanIndex++; } if (fmt[scanIndex] == '+') { pCrack->format.showSign = -1; scanIndex++; } if ((used = _readInt(fmt+scanIndex, &pCrack->format.width)) > 0) scanIndex += used; if (fmt[scanIndex] == '.') { scanIndex++; if ((used = _readInt(fmt+scanIndex, &pCrack->format.precision)) > 0) scanIndex += used; else pCrack->format.precision = 0; } if (fmt[scanIndex] == 'h' || fmt[scanIndex] == 'l' || fmt[scanIndex] == 'L') { pCrack->format.size = fmt[scanIndex]; scanIndex++; } /* time for the format */ switch (fmt[scanIndex]) { case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': strncpy(sprintFmt, fmt+pCrack->index, scanIndex+1-pCrack->index); sprintFmt[scanIndex+1-pCrack->index] = 0; if (!(pCrack->ptr = (char *)malloc(pCrack->format.width + pCrack->format.precision+20))) return 0; pCrack->freeMe = 1; switch (pCrack->format.size) { case 0: pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(int*)(pArgs+pCrack->format.iArgs)); pCrack->format.iArgs += sizeof(int); break; case 'h': pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(short int*)(pArgs+pCrack->format.iArgs)); pCrack->format.iArgs += sizeof(short int); break; case 'l': pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(long int*)(pArgs+pCrack->format.iArgs)); pCrack->format.iArgs += sizeof(long int); break; default: free(pCrack->ptr); goto FMTSTRING; /* invalid arg combo */ } pCrack->index = scanIndex+1; return 1; case 'e': case 'E': case 'f': case 'g': case 'G': strncpy(sprintFmt, fmt+pCrack->index, scanIndex+1-pCrack->index); sprintFmt[scanIndex+1-pCrack->index] = 0; if (!(pCrack->ptr = (char *)malloc(pCrack->format.width + pCrack->format.precision+20))) return 0; pCrack->freeMe = 1; switch (pCrack->format.size) { case 0: pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(double*)(pArgs+pCrack->format.iArgs)); pCrack->format.iArgs += sizeof(double); break; case 'L': pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(long double*)(pArgs+pCrack->format.iArgs)); pCrack->format.iArgs += sizeof(long double); break; default: free(pCrack->ptr); goto FMTSTRING; /* invalid arg combo */ } pCrack->index = scanIndex+1; return 1; case 'c': shortRet[0] = *(char *)(pArgs+pCrack->format.iArgs); pCrack->ptr = shortRet; pCrack->freeMe = 0; pCrack->ptrLen = 1; pCrack->format.iArgs += sizeof(char); pCrack->index = scanIndex+1; return 1; case 's': pCrack->ptr = *(char **)(pArgs+pCrack->format.iArgs); pCrack->freeMe = 0; pCrack->ptrLen = strlen(pCrack->ptr); pCrack->format.iArgs += sizeof(char *); pCrack->index = scanIndex+1; return 1; case 'p': pCrack->ptr = shortRet; pCrack->freeMe = 0; pCrack->ptrLen = sprintf(shortRet, "%p", *(void **)(pArgs+pCrack->format.iArgs)); pCrack->format.iArgs += sizeof(void *); pCrack->index = scanIndex+1; return 1; case 'n': return 0; case '%': shortRet[0] = '%'; pCrack->ptr = shortRet; pCrack->freeMe = 0; pCrack->ptrLen = 1; pCrack->index = scanIndex+1; return 1; } } FMTSTRING: while (fmt[scanIndex] && fmt[scanIndex] != '%') scanIndex++; pCrack->ptr = fmt+pCrack->index; pCrack->freeMe = 0; pCrack->ptrLen = scanIndex - pCrack->index; pCrack->index = scanIndex; return 1; } PUBLIC int TextToAWindow(HTView * pView, const char * fmt, va_list pArgs) { Crack_t crack = Crack_INIT; int totalLen = 0; while (Crack_next(&crack, fmt, pArgs)) { totalLen += crack.ptrLen; Scroll_WriteBlock(pView->pScrollInfo, pView->hWnd, (LPSTR)crack.ptr, crack.ptrLen); if (crack.freeMe) free(crack.ptr); } return (totalLen); } PUBLIC int OutputConsole(const char* fmt, va_list pArgs) { return (TextToAWindow(PMonitorView, fmt, pArgs)); } PUBLIC int OutputData(HTView * pView, const char * fmt, ...) { va_list pArgs; int len; va_start(pArgs, fmt); len = TextToAWindow(pView ? pView : PMonitorView, fmt, pArgs); va_end(pArgs); return (len); } #ifndef _WIN32 typedef MINMAXINFO FAR* LPMINMAXINFO; #endif #ifdef _WIN32 #define WINCALLBACK CALLBACK #else #define WINCALLBACK CALLBACK _export #endif LRESULT WINCALLBACK monitorWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static int sized = 0; HTView * pView = (HTView *)GetWindowLong(hWnd, 0); /* valid for all events except for WM_CREATE */ switch (uMsg) { case WM_USER+1: //we just got a data set return (0); case WM_CREATE: { HMENU hMenu = GetMenu(hWnd); pView = (HTView *)((CREATESTRUCT *)lParam)->lpCreateParams; SetWindowLong(hWnd, 0, (long)pView); // pView->pScrollInfo->control = Scroll_control_autoWrap | Scroll_control_crBegetsLf | Scroll_control_lfBegetsCr | Scroll_control_BSbegetsSpace;// | Scroll_control_literal; Scroll_ResetScreen(hWnd, pView->pScrollInfo, pView->pFontInfo); MoveWindow(hWnd, 0, 0, pView->pScrollInfo->maxTrackSize.x, pView->pScrollInfo->maxTrackSize.y, FALSE); return (0); } #define USEMINMAX #ifdef USEMINMAX case WM_GETMINMAXINFO: { LPMINMAXINFO pMax = (LPMINMAXINFO)lParam; if (pView) pMax->ptMaxTrackSize = pView->pScrollInfo->maxTrackSize; } break; #endif case WM_COMMAND: switch ((WORD) wParam) { // case IDM_CRBEGETSLF: // pView->pScrollInfo->control ^= Scroll_control_crBegetsLf; // CheckMenuItem(GetMenu(hWnd), (UINT)IDM_CRBEGETSLF, (pView->pScrollInfo->control & Scroll_control_crBegetsLf) ? MF_CHECKED : MF_UNCHECKED); // break; case IDM_FONT: if (Lib_SelectWorkingFont(hWnd, pView->pFontInfo)) Scroll_ResetScreen(hWnd, pView->pScrollInfo, pView->pFontInfo) ; return (TRUE); break; case IDM_ABOUT: while (MessageBox(hWnd, "It's a program, all right?", "About LineMode", MB_OKCANCEL) != IDOK); break; case IDM_EXIT: PostMessage(hWnd, WM_CLOSE, 0, 0L); break ; } break; case WM_PAINT: Scroll_Paint(pView->pScrollInfo, pView->pFontInfo, hWnd, Scroll_cursorShow); break ; case WM_SIZE: { static int recursing = 0; RECT rect; LONG style; WORD xScroll = GetSystemMetrics(SM_CXVSCROLL); WORD yScroll = GetSystemMetrics(SM_CYHSCROLL); if (recursing == 1) return (0); rect.left = 0; rect.top = 0; rect.right = LOWORD(lParam)+xScroll-1; rect.bottom = HIWORD(lParam)+yScroll-1; style = GetWindowLong(hWnd, GWL_STYLE); AdjustWindowRect(&rect, style, TRUE); if (style & (WS_VSCROLL | WS_HSCROLL) && rect.right-rect.left == pView->pScrollInfo->maxTrackSize.x && rect.bottom-rect.top == pView->pScrollInfo->maxTrackSize.y) { recursing = 1; Scroll_SetSize(pView->pScrollInfo, hWnd, (WORD)(HIWORD(lParam)+yScroll), (WORD)(LOWORD(lParam)+xScroll)); recursing = 0; } else Scroll_SetSize(pView->pScrollInfo, hWnd, HIWORD(lParam), LOWORD(lParam)); return (0); } break ; case WM_HSCROLL: #ifdef _WIN32 Scroll_SetHorz(pView->pScrollInfo, hWnd, LOWORD(wParam), HIWORD(wParam)); #else Scroll_SetHorz(pView->pScrollInfo, hWnd, (WORD) wParam, LOWORD(lParam)); #endif break ; case WM_VSCROLL: #ifdef _WIN32 Scroll_SetVert(pView->pScrollInfo, hWnd, LOWORD(wParam), HIWORD(wParam)); #else Scroll_SetVert(pView->pScrollInfo, hWnd, (WORD) wParam, LOWORD(lParam)); #endif break ; case WM_CHAR: { #ifdef _WIN32 BYTE bOut = LOBYTE(LOWORD(wParam)); #else BYTE bOut = LOBYTE(wParam); #endif if (pView->pLm && bufferInput(&bOut, 1, 0, LineMode_getConsole(pView->pLm), 0) == -1) PostMessage(hWnd, WM_QUIT, 0, 0); Scroll_WriteBlock(pView->pScrollInfo, hWnd, &bOut, 1); } break ; case WM_SETFOCUS: Scroll_SetFocus(hWnd, pView->pScrollInfo); break ; case WM_KILLFOCUS: Scroll_KillFocus(hWnd, pView->pScrollInfo); break ; case WM_DESTROY: { Scroll_DestroyInfo(pView->pScrollInfo); Font_DestroyInfo(pView->pFontInfo); PostMessage(hWnd, WM_QUIT, 0, 0); } break ; default: return (DefWindowProc(hWnd, uMsg, wParam, lParam)); } return 0L; } // end of monitorWndProc() int makeArgcArgv(HINSTANCE hInstance, char*** pArgv, char* commandLine) { int argc; static char* argv[20]; static char argv0[256]; char* ptr = commandLine; char lookFor = 0; enum {nowAt_start, nowAt_text} nowAt; *pArgv = argv; argc = 0; GetModuleFileName(hInstance, argv0, sizeof(argv0)); argv[argc++] = argv0; for (nowAt = nowAt_start;;) { if (!*ptr) return (argc); if (lookFor) { if (*ptr == lookFor) { nowAt = nowAt_start; lookFor = 0; *ptr = 0; /* remove the quote */ } else if (nowAt == nowAt_start) { argv[argc++] = ptr; nowAt = nowAt_text; } ptr++; continue; } if (*ptr == ' ' || *ptr == '\t') { *ptr = 0; ptr++; nowAt = nowAt_start; continue; } if ((*ptr == '\'' || *ptr == '\"' || *ptr == '`') && nowAt == nowAt_start) { lookFor = *ptr; nowAt = nowAt_start; ptr++; continue; } if (nowAt == nowAt_start) { argv[argc++] = ptr; nowAt = nowAt_text; } ptr++; } } extern int main(int, char**); extern HTView * HTView_create(char* name, int rows, int cols, LineMode * pLm); extern BOOL HTView_destroy(HTView * pView); int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { int argc; char** argv; WNDCLASS wc = { 0, //UINT style monitorWndProc, //WNDPROC lpfnWndProc 0, //int cbClsExtra sizeof(long), //int cbWndExtra - HTRequest* and LineMode* hInstance, //HINSTANCE hInstance - fill in later LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WWW)), //HICON hIcon LoadCursor(NULL, IDC_ARROW), //HCURSOR hCursor (HBRUSH)(COLOR_WINDOW+1), //HBRUSH hbrBackground MAKEINTRESOURCE(IDM_SNP), //LPCSTR lpszMenuName WWWClassName}; //LPCSTR lpszClassName RegisterClass(&wc); // don't check error as class may be laying around from previously use if (!(PMonitorView = HTView_create("WWW Console", 50, 80, 0))) return (0); HTTrace_setCallback(&OutputConsole); argc = makeArgcArgv(hInstance, &argv, lpszCmdLine); main(argc, argv); HTView_destroy(PMonitorView); PMonitorView = 0; return (0); } PUBLIC HTView * HTView_create(char* name, int rows, int cols, LineMode * pLm) { HTView * pView; DWORD style; static nextX = 0; static nextY = 0; if ((pView = (HTView *)HT_CALLOC(1, sizeof(HTView))) == NULL || (pView->pScrollInfo = (ScrollInfo_t *)HT_CALLOC(1, sizeof(ScrollInfo_t))) == NULL || (pView->pFontInfo = (FontInfo_t *)HT_CALLOC(1, sizeof(FontInfo_t))) == NULL || (pView->pScrollInfo->screenBuf = (char *)HT_CALLOC(rows * cols, sizeof(char))) == NULL) HT_OUTOFMEM("HTView"); pView->rows = pView->pScrollInfo->maxRows = rows; pView->cols = pView->pScrollInfo->maxCols = cols; pView->pScrollInfo->control = Scroll_control_crBegetsLf|Scroll_control_lfBegetsCr|Scroll_control_autoWrap|Scroll_control_BSbegetsSpace; if (Font_SetupInfo(pView->pFontInfo) || Scroll_SetupInfo(pView->pScrollInfo, rows, cols)) return (0); style = WS_CAPTION | WS_VISIBLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; style |= PMonitorView ? WS_POPUPWINDOW : WS_POPUPWINDOW; pView->pLm = pLm; // pView->hWnd = CreateWindow(WWWClassName, pView->name, style, CW_USEDEFAULT, CW_USEDEFAULT, pView->hWnd = CreateWindow(WWWClassName, pView->name, style, nextX, nextY, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, HInstance, (LPVOID)pView); nextX += 400; nextY += 100; return pView; } PUBLIC BOOL HTView_destroy(HTView * pView) { DestroyWindow(pView->hWnd); Scroll_DestroyInfo(pView->pScrollInfo); Font_DestroyInfo(pView->pFontInfo); return YES; } /* ------------------------------------------------------------------------- */ /* This was copied from HTDialog.c, will be put into resource or something */ /* ** Dialog Messages */ PRIVATE char *HTDialogs[HT_MSG_ELEMENTS] = {HT_MSG_ENGLISH_INITIALIZER}; /* ** All errors that are not strictly HTTP errors but originates from, e.g., ** the FTP protocol all have element numbers > HTERR_HTTP_CODES_END, i.e., ** they should be placed after the blank line */ PRIVATE HTErrorMessage HTErrors[HTERR_ELEMENTS] = {HTERR_ENGLISH_INITIALIZER}; /* ------------------------------------------------------------------------- */ #if 0 typedef enum {Dialog_PROMPT, Dialog_CONFIRM, Dialog_Passwd, Dialog_UserPasswd} Dialog_type; #endif typedef struct { HTRequest * request; HTAlertOpcode op; int msgnum; const char * dfault; void * input; HTAlertPar * reply; int type; char * buf; size_t bufLen; WPARAM * pWParam; } DialogParms; BOOL PASCAL AlertDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { DialogParms * pParms = (DialogParms *)GetProp(hDlg, MAKEINTATOM(0x100)); switch (uMsg) { case WM_INITDIALOG: { pParms = (DialogParms *)lParam; SetProp(hDlg, MAKEINTATOM(0x100), (HANDLE)pParms); SetDlgItemText(hDlg, IDC_PROMPT1, HTDialogs[pParms->msgnum]); if (pParms->type == IDD_CONFIRM || pParms->type == IDD_PROMPT) { } if (pParms->type == IDD_PROMPT) { if (pParms->dfault) SetDlgItemText(hDlg, IDC_TEXT, pParms->dfault); } if (pParms->type == IDD_PASSWD || pParms->type == IDD_USERPASSWD) { if (pParms->dfault) SetDlgItemText(hDlg, IDC_USER, pParms->dfault); } return TRUE; } case WM_COMMAND: *pParms->pWParam = LOWORD(wParam); switch (LOWORD(wParam)) { case IDOK: if (pParms->type == IDD_PROMPT) { char space[256]; GetDlgItemText(hDlg, IDC_TEXT, space, sizeof(space) - 1); HTAlert_setReplyMessage(pParms->reply, space); } if (pParms->type == IDD_PASSWD || pParms->type == IDD_USERPASSWD) { char space[256]; GetDlgItemText(hDlg, IDC_PASSWD, space, sizeof(space) - 1); HTAlert_setReplySecret(pParms->reply, space); } if (pParms->type == IDD_USERPASSWD) { char space[256]; GetDlgItemText(hDlg, IDC_USER, space, sizeof(space) - 1); HTAlert_setReplyMessage(pParms->reply, space); } EndDialog(hDlg, TRUE); return (TRUE); case IDCANCEL: EndDialog(hDlg, TRUE); return (TRUE); } break; case WM_DESTROY: RemoveProp(hDlg, MAKEINTATOM(0x100)); break ; } return (FALSE); } // AlertDialogProc() PRIVATE int DialogParms_do(HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply, int resource, WPARAM * pWParam, HTRequest * pRequest) { int ret; HTView * pView; DialogParms * pParms; pView = LineMode_getView(Context_getLineMode(pRequest)); if ((pParms = (DialogParms *)HT_CALLOC(1, sizeof(DialogParms))) == NULL) HT_OUTOFMEM("DialogParms"); pParms->request = request; pParms->op = op; pParms->msgnum = msgnum; pParms->dfault = dfault; pParms->input = input; pParms->reply = reply; pParms->type = resource; pParms->pWParam = pWParam; ret = Lib_ModalDialogBoxParam(HInstance, MAKEINTRESOURCE(resource), pView->hWnd, (DLGPROC)AlertDialogProc, (LPARAM)pParms); HT_FREE(pParms); return ret; } PUBLIC BOOL HTProgress (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { static int inside = 0; char space[256]; HTView * pView; pView = LineMode_getView(Context_getLineMode(request)); if (!request) { if (WWWTRACE) HTTrace("HTProgress.. Bad argument\n"); return NO; } switch (op) { case HT_PROG_DNS: sprintf(space, "Looking up %s\n", (char *) input); break; case HT_PROG_CONNECT: sprintf(space, "Contacting host...\n"); break; case HT_PROG_ACCEPT: sprintf(space, "Waiting for connection...\n"); break; case HT_PROG_READ: { long cl = HTAnchor_length(HTRequest_anchor(request)); if (cl > 0) { long b_read = HTRequest_bodyRead(request); double pro = (double) b_read/cl*100; char buf[10]; HTNumToStr((unsigned long) cl, buf, 10); sprintf(space, "Read (%d%% of %s)\n", (int) pro, buf); } else sprintf(space, "Reading...\n"); } break; case HT_PROG_WRITE: if (HTRequest_isPostWeb(request)) { HTParentAnchor *anchor=HTRequest_anchor(HTRequest_source(request)); long cl = HTAnchor_length(anchor); if (cl > 0) { long b_write = HTRequest_bytesWritten(request); double pro = (double) b_write/cl*100; char buf[10]; HTNumToStr((unsigned long) cl, buf, 10); sprintf(space, "Written (%d%% of %s)\n", (int) pro, buf); } else sprintf(space, "Writing...\n"); } else return YES; break; case HT_PROG_DONE: sprintf(space, "Finished\n"); break; case HT_PROG_OTHER: sprintf(space, "Waiting for HT_FREE socket...\n"); break; default: sprintf(space, "UNKNOWN PROGRESS STATE\n"); break; } if (inside) return YES; inside = 1; MessageBox(pView->hWnd, space, "HTProgress", MB_OK); inside = 0; return YES; } PUBLIC BOOL HTError_print (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { HTList *cur = (HTList *) input; HTError *pres; HTErrorShow showmask = HTError_show(); HTChunk *msg = NULL; int code; if (WWWTRACE) HTTrace("HTError..... Generating message\n"); if (!request || !cur) return NO; while ((pres = (HTError *) HTList_nextObject(cur))) { int index = HTError_index(pres); if (HTError_doShow(pres)) { if (!msg) { HTSeverity severity = HTError_severity(pres); msg = HTChunk_new(128); if (severity == ERR_WARN) HTChunk_puts(msg, "Warning: "); else if (severity == ERR_NON_FATAL) HTChunk_puts(msg, "Non Fatal Error: "); else if (severity == ERR_FATAL) HTChunk_puts(msg, "Fatal Error: "); else if (severity == ERR_INFO) HTChunk_puts(msg, "Information: "); else { if (WWWTRACE) HTTrace("HTError..... Unknown Classification of Error (%d)...\n", severity); HTChunk_delete(msg); return NO; } /* Error number */ if ((code = HTErrors[index].code) > 0) { char buf[10]; sprintf(buf, "%d ", code); HTChunk_puts(msg, buf); } } else HTChunk_puts(msg, "\nReason: "); HTChunk_puts(msg, HTErrors[index].msg); /* Error message */ if (showmask & HT_ERR_SHOW_PARS) { /* Error parameters */ int length; int cnt; char *pars = (char *) HTError_parameter(pres, &length); if (length && pars) { HTChunk_puts(msg, " ("); for (cnt=0; cnt<length; cnt++) { char ch = *(pars+cnt); if (ch < 0x20 || ch >= 0x7F) HTChunk_putc(msg, '#'); else HTChunk_putc(msg, ch); } HTChunk_puts(msg, ") "); } } if (showmask & HT_ERR_SHOW_LOCATION) { /* Error Location */ HTChunk_puts(msg, "This occured in "); HTChunk_puts(msg, HTError_location(pres)); HTChunk_putc(msg, '\n'); } /* ** Make sure that we don't get this error more than once even ** if we are keeping the error stack from one request to another */ HTError_setIgnore(pres); /* If we only are show the most recent entry then break here */ if (showmask & HT_ERR_SHOW_FIRST) break; } } if (msg) { HTChunk_putc(msg, '\n'); HTTrace("WARNING: %s\n", HTChunk_data(msg)); HTChunk_delete(msg); } return YES; } PUBLIC BOOL HTConfirm (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { WPARAM wParam = 0; int ret; ret = DialogParms_do(request, op, msgnum, dfault, input, reply, IDD_CONFIRM, &wParam, request); return wParam == IDOK; } PUBLIC BOOL HTPrompt (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { WPARAM wParam = 0; int ret; ret = DialogParms_do(request, op, msgnum, dfault, input, reply, IDD_PROMPT, &wParam, request); return wParam == IDOK; } PUBLIC BOOL HTPromptPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { WPARAM wParam = 0; int ret; ret = DialogParms_do(request, op, msgnum, dfault, input, reply, IDD_PASSWD, &wParam, request); return wParam == IDOK; } PUBLIC BOOL HTPromptUsernameAndPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { WPARAM wParam = 0; int ret; ret = DialogParms_do(request, op, msgnum, dfault, input, reply, IDD_USERPASSWD, &wParam, request); return wParam == IDOK; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/www.def�����������������������������������������������������������������0100644�0000764�0000144�00000000437�06054147004�017036� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;----------------------------------- ; WinCom app module definition file ;----------------------------------- ;exetype snpterm DESCRIPTION 'S&P Comstock terminal program' EXETYPE WINDOWS PROTMODE STUB 'WINSTUB.EXE' HEAPSIZE 20480 EXPORTS monitorWndProc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/www.dsp�����������������������������������������������������������������0100644�0000764�0000144�00000014620�06615657665�017113� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Microsoft Developer Studio Project File - Name="www" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 5.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=www - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "www.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "www.mak" CFG="www - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "www - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "www - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE # Begin Project # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "www - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\WinRel" # PROP BASE Intermediate_Dir ".\WinRel" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\..\Bin\Release" # PROP Intermediate_Dir ".\Release" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR /YX /c # ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\Library\src" /I "..\..\..\PICS-client\src" /I "..\..\..\Library\External" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WWW_WIN_ASYNC" /D "WWW_WIN_DLL" /YX /FD /c # SUBTRACT CPP /Fr # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 !ELSEIF "$(CFG)" == "www - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\WinDebug" # PROP BASE Intermediate_Dir ".\WinDebug" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\..\Bin\Debug" # PROP Intermediate_Dir ".\Debug" # ADD BASE CPP /nologo /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /c # ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\Library\src" /I "..\..\..\PICS-client\src" /I "..\..\..\Library\External" /D "_DEBUG" /D "DEBUG" /D "WIN32" /D "_WINDOWS" /D "WWW_WIN_ASYNC" /D "WWW_WIN_DLL" /YX /FD /c # SUBTRACT CPP /Fr # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 # ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 !ENDIF # Begin Target # Name "www - Win32 Release" # Name "www - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" # Begin Source File SOURCE=..\DefaultStyles.c # End Source File # Begin Source File SOURCE=..\GridStyle.c # End Source File # Begin Source File SOURCE=..\GridText.c # End Source File # Begin Source File SOURCE=..\..\..\Library\src\HTBInit.c # End Source File # Begin Source File SOURCE=..\HTBrowse.c # End Source File # Begin Source File SOURCE=..\..\..\Library\src\HTHInit.c # End Source File # Begin Source File SOURCE=..\..\..\Library\src\HTInit.c # End Source File # Begin Source File SOURCE=..\..\..\Library\src\HTML.c # End Source File # Begin Source File SOURCE=..\..\..\Library\src\HTMLPDTD.c # End Source File # Begin Source File SOURCE=..\..\..\Library\src\HTPlain.c # End Source File # Begin Source File SOURCE=..\..\..\Library\src\HTProfil.c # End Source File # Begin Source File SOURCE=.\lib.c # End Source File # Begin Source File SOURCE=..\..\..\Bin\pics.lib # End Source File # Begin Source File SOURCE=.\scroll.c # End Source File # Begin Source File SOURCE=.\www.c # End Source File # Begin Source File SOURCE=.\www.rc !IF "$(CFG)" == "www - Win32 Release" !ELSEIF "$(CFG)" == "www - Win32 Debug" !ENDIF # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwapp.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwcache.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwcore.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwdir.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwdll.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwfile.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwftp.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwgophe.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwhtml.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwhttp.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwmime.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwnews.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwstream.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwtelnt.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwtrans.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwutils.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwwais.lib # End Source File # Begin Source File SOURCE=..\..\..\Bin\wwwzip.lib # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # End Target # End Project ����������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/www.ico�����������������������������������������������������������������0100644�0000764�0000144�00000002076�06047225243�017057� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����è��&��� �����0����(��� ���@���������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�������������������������������������������������������������������������������������������������������������������������������������������������wwwwwwwwwwwwwww������������������������������������``�f``�����`�`�f`��`���������������`��������������`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿâ â1aÀ0 É2LÉ2L“™†a™Ÿ‡áøÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(��� ���@��������������������������������ÿÿÿ���������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿâ ó1yù1ñýÁü‡ƒüƒþ ‰þ0Œ<þ8„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/www.mak�����������������������������������������������������������������0100644�0000764�0000144�00000212020�06615657665�017067� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Microsoft Developer Studio Generated NMAKE File, Based on www.dsp !IF "$(CFG)" == "" CFG=www - Win32 Release !MESSAGE No configuration specified. Defaulting to www - Win32 Release. !ENDIF !IF "$(CFG)" != "www - Win32 Release" && "$(CFG)" != "www - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "www.mak" CFG="www - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "www - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "www - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "www - Win32 Release" OUTDIR=.\..\..\..\Bin\Release INTDIR=.\Release # Begin Custom Macros OutDir=.\..\..\..\Bin\Release # End Custom Macros !IF "$(RECURSE)" == "0" ALL : "$(OUTDIR)\www.exe" !ELSE ALL : "$(OUTDIR)\www.exe" !ENDIF CLEAN : -@erase "$(INTDIR)\DefaultStyles.obj" -@erase "$(INTDIR)\GridStyle.obj" -@erase "$(INTDIR)\GridText.obj" -@erase "$(INTDIR)\HTBInit.obj" -@erase "$(INTDIR)\HTBrowse.obj" -@erase "$(INTDIR)\HTHInit.obj" -@erase "$(INTDIR)\HTInit.obj" -@erase "$(INTDIR)\HTML.obj" -@erase "$(INTDIR)\HTMLPDTD.obj" -@erase "$(INTDIR)\HTPlain.obj" -@erase "$(INTDIR)\HTProfil.obj" -@erase "$(INTDIR)\lib.obj" -@erase "$(INTDIR)\scroll.obj" -@erase "$(INTDIR)\vc50.idb" -@erase "$(INTDIR)\www.obj" -@erase "$(INTDIR)\www.res" -@erase "$(OUTDIR)\www.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" "$(INTDIR)" : if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" CPP_PROJ=/nologo /ML /W3 /GX /O2 /I "..\..\..\Library\src" /I\ "..\..\..\PICS-client\src" /I "..\..\..\Library\External" /D "NDEBUG" /D\ "WIN32" /D "_WINDOWS" /D "WWW_WIN_ASYNC" /D "WWW_WIN_DLL"\ /Fp"$(INTDIR)\www.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c CPP_OBJS=.\Release/ CPP_SBRS=. MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 RSC_PROJ=/l 0x409 /fo"$(INTDIR)\www.res" /d "NDEBUG" BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\www.bsc" BSC32_SBRS= \ LINK32=link.exe LINK32_FLAGS=wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:no\ /pdb:"$(OUTDIR)\www.pdb" /machine:I386 /out:"$(OUTDIR)\www.exe" LINK32_OBJS= \ "$(INTDIR)\DefaultStyles.obj" \ "$(INTDIR)\GridStyle.obj" \ "$(INTDIR)\GridText.obj" \ "$(INTDIR)\HTBInit.obj" \ "$(INTDIR)\HTBrowse.obj" \ "$(INTDIR)\HTHInit.obj" \ "$(INTDIR)\HTInit.obj" \ "$(INTDIR)\HTML.obj" \ "$(INTDIR)\HTMLPDTD.obj" \ "$(INTDIR)\HTPlain.obj" \ "$(INTDIR)\HTProfil.obj" \ "$(INTDIR)\lib.obj" \ "$(INTDIR)\scroll.obj" \ "$(INTDIR)\www.obj" \ "$(INTDIR)\www.res" \ "..\..\..\Bin\pics.lib" \ "..\..\..\Bin\wwwapp.lib" \ "..\..\..\Bin\wwwcache.lib" \ "..\..\..\Bin\wwwcore.lib" \ "..\..\..\Bin\wwwdir.lib" \ "..\..\..\Bin\wwwdll.lib" \ "..\..\..\Bin\wwwfile.lib" \ "..\..\..\Bin\wwwftp.lib" \ "..\..\..\Bin\wwwgophe.lib" \ "..\..\..\Bin\wwwhtml.lib" \ "..\..\..\Bin\wwwhttp.lib" \ "..\..\..\Bin\wwwmime.lib" \ "..\..\..\Bin\wwwnews.lib" \ "..\..\..\Bin\wwwstream.lib" \ "..\..\..\Bin\wwwtelnt.lib" \ "..\..\..\Bin\wwwtrans.lib" \ "..\..\..\Bin\wwwutils.lib" \ "..\..\..\Bin\wwwwais.lib" \ "..\..\..\Bin\wwwzip.lib" "$(OUTDIR)\www.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "www - Win32 Debug" OUTDIR=.\..\..\..\Bin\Debug INTDIR=.\Debug # Begin Custom Macros OutDir=.\..\..\..\Bin\Debug # End Custom Macros !IF "$(RECURSE)" == "0" ALL : "$(OUTDIR)\www.exe" !ELSE ALL : "$(OUTDIR)\www.exe" !ENDIF CLEAN : -@erase "$(INTDIR)\DefaultStyles.obj" -@erase "$(INTDIR)\GridStyle.obj" -@erase "$(INTDIR)\GridText.obj" -@erase "$(INTDIR)\HTBInit.obj" -@erase "$(INTDIR)\HTBrowse.obj" -@erase "$(INTDIR)\HTHInit.obj" -@erase "$(INTDIR)\HTInit.obj" -@erase "$(INTDIR)\HTML.obj" -@erase "$(INTDIR)\HTMLPDTD.obj" -@erase "$(INTDIR)\HTPlain.obj" -@erase "$(INTDIR)\HTProfil.obj" -@erase "$(INTDIR)\lib.obj" -@erase "$(INTDIR)\scroll.obj" -@erase "$(INTDIR)\vc50.idb" -@erase "$(INTDIR)\vc50.pdb" -@erase "$(INTDIR)\www.obj" -@erase "$(INTDIR)\www.res" -@erase "$(OUTDIR)\www.exe" -@erase "$(OUTDIR)\www.ilk" -@erase "$(OUTDIR)\www.pdb" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" "$(INTDIR)" : if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" CPP_PROJ=/nologo /MLd /W3 /Gm /GX /Zi /Od /I "..\..\..\Library\src" /I\ "..\..\..\PICS-client\src" /I "..\..\..\Library\External" /D "_DEBUG" /D\ "DEBUG" /D "WIN32" /D "_WINDOWS" /D "WWW_WIN_ASYNC" /D "WWW_WIN_DLL"\ /Fp"$(INTDIR)\www.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c CPP_OBJS=.\Debug/ CPP_SBRS=. MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 RSC_PROJ=/l 0x409 /fo"$(INTDIR)\www.res" /d "_DEBUG" BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\www.bsc" BSC32_SBRS= \ LINK32=link.exe LINK32_FLAGS=wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes\ /pdb:"$(OUTDIR)\www.pdb" /debug /machine:I386 /out:"$(OUTDIR)\www.exe" LINK32_OBJS= \ "$(INTDIR)\DefaultStyles.obj" \ "$(INTDIR)\GridStyle.obj" \ "$(INTDIR)\GridText.obj" \ "$(INTDIR)\HTBInit.obj" \ "$(INTDIR)\HTBrowse.obj" \ "$(INTDIR)\HTHInit.obj" \ "$(INTDIR)\HTInit.obj" \ "$(INTDIR)\HTML.obj" \ "$(INTDIR)\HTMLPDTD.obj" \ "$(INTDIR)\HTPlain.obj" \ "$(INTDIR)\HTProfil.obj" \ "$(INTDIR)\lib.obj" \ "$(INTDIR)\scroll.obj" \ "$(INTDIR)\www.obj" \ "$(INTDIR)\www.res" \ "..\..\..\Bin\pics.lib" \ "..\..\..\Bin\wwwapp.lib" \ "..\..\..\Bin\wwwcache.lib" \ "..\..\..\Bin\wwwcore.lib" \ "..\..\..\Bin\wwwdir.lib" \ "..\..\..\Bin\wwwdll.lib" \ "..\..\..\Bin\wwwfile.lib" \ "..\..\..\Bin\wwwftp.lib" \ "..\..\..\Bin\wwwgophe.lib" \ "..\..\..\Bin\wwwhtml.lib" \ "..\..\..\Bin\wwwhttp.lib" \ "..\..\..\Bin\wwwmime.lib" \ "..\..\..\Bin\wwwnews.lib" \ "..\..\..\Bin\wwwstream.lib" \ "..\..\..\Bin\wwwtelnt.lib" \ "..\..\..\Bin\wwwtrans.lib" \ "..\..\..\Bin\wwwutils.lib" \ "..\..\..\Bin\wwwwais.lib" \ "..\..\..\Bin\wwwzip.lib" "$(OUTDIR)\www.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ENDIF .c{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << !IF "$(CFG)" == "www - Win32 Release" || "$(CFG)" == "www - Win32 Debug" SOURCE=..\DefaultStyles.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_DEFAU=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "..\gridstyle.h"\ "..\htfont.h"\ "$(INTDIR)\DefaultStyles.obj" : $(SOURCE) $(DEP_CPP_DEFAU) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_DEFAU=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "..\gridstyle.h"\ "..\htfont.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_DEFAU=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\DefaultStyles.obj" : $(SOURCE) $(DEP_CPP_DEFAU) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\GridStyle.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_GRIDS=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "$(INTDIR)\GridStyle.obj" : $(SOURCE) $(DEP_CPP_GRIDS) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_GRIDS=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_GRIDS=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\GridStyle.obj" : $(SOURCE) $(DEP_CPP_GRIDS) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\GridText.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_GRIDT=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaccess.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htcache.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdialog.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htevtlst.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htfilter.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthist.h"\ "..\..\..\library\src\hthome.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htlog.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htproxy.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htrules.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwapp.h"\ "..\..\..\library\src\wwwcache.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "..\gridstyle.h"\ "..\gridtext.h"\ "..\htbrowse.h"\ "..\htfont.h"\ "$(INTDIR)\GridText.obj" : $(SOURCE) $(DEP_CPP_GRIDT) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_GRIDT=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaccess.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htcache.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdialog.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htevtlst.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htfilter.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthist.h"\ "..\..\..\library\src\hthome.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htlog.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htproxy.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htrules.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwapp.h"\ "..\..\..\library\src\wwwcache.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "..\a_stdio.h"\ "..\gridstyle.h"\ "..\gridtext.h"\ "..\htbrowse.h"\ "..\htfont.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_GRIDT=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\GridText.obj" : $(SOURCE) $(DEP_CPP_GRIDT) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\..\..\Library\src\HTBInit.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_HTBIN=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htbinit.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "$(INTDIR)\HTBInit.obj" : $(SOURCE) $(DEP_CPP_HTBIN) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_HTBIN=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htbinit.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_HTBIN=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\HTBInit.obj" : $(SOURCE) $(DEP_CPP_HTBIN) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\HTBrowse.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_HTBRO=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaabrow.h"\ "..\..\..\library\src\htaautil.h"\ "..\..\..\library\src\htaccess.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htansi.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htbinit.h"\ "..\..\..\library\src\htbound.h"\ "..\..\..\library\src\htbufwrt.h"\ "..\..\..\library\src\htcache.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htconlen.h"\ "..\..\..\library\src\htdescpt.h"\ "..\..\..\library\src\htdialog.h"\ "..\..\..\library\src\htdir.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htevtlst.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htfile.h"\ "..\..\..\library\src\htfilter.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htftp.h"\ "..\..\..\library\src\htftpdir.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\htgopher.h"\ "..\..\..\library\src\htguess.h"\ "..\..\..\library\src\htheader.h"\ "..\..\..\library\src\hthinit.h"\ "..\..\..\library\src\hthist.h"\ "..\..\..\library\src\hthome.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\hticons.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htinit.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htlocal.h"\ "..\..\..\library\src\htlog.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmerge.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htmime.h"\ "..\..\..\library\src\htmimerq.h"\ "..\..\..\library\src\htmimimp.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htmulpar.h"\ "..\..\..\library\src\htmulti.h"\ "..\..\..\library\src\htndir.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htnews.h"\ "..\..\..\library\src\htnewsls.h"\ "..\..\..\library\src\htnewsrq.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htpep.h"\ "..\..\..\library\src\htplain.h"\ "..\..\..\library\src\htprofil.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htproxy.h"\ "..\..\..\library\src\htreader.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htrules.h"\ "..\..\..\library\src\htschunk.h"\ "..\..\..\library\src\htsocket.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httchunk.h"\ "..\..\..\library\src\httcp.h"\ "..\..\..\library\src\httee.h"\ "..\..\..\library\src\httelnet.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\http.h"\ "..\..\..\library\src\httpgen.h"\ "..\..\..\library\src\httpreq.h"\ "..\..\..\library\src\httpres.h"\ "..\..\..\library\src\httpserv.h"\ "..\..\..\library\src\httputil.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwriter.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\htxparse.h"\ "..\..\..\library\src\htzip.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwapp.h"\ "..\..\..\library\src\wwwcache.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwdir.h"\ "..\..\..\library\src\wwwfile.h"\ "..\..\..\library\src\wwwftp.h"\ "..\..\..\library\src\wwwgophe.h"\ "..\..\..\library\src\wwwhtml.h"\ "..\..\..\library\src\wwwhttp.h"\ "..\..\..\library\src\wwwinit.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwmime.h"\ "..\..\..\library\src\wwwnews.h"\ "..\..\..\library\src\wwwstream.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwtelnt.h"\ "..\..\..\library\src\wwwtrans.h"\ "..\..\..\library\src\wwwutil.h"\ "..\..\..\library\src\wwwzip.h"\ "..\..\..\pics-client\src\cslapp.h"\ "..\..\..\pics-client\src\csll.h"\ "..\..\..\pics-client\src\cslutils.h"\ "..\..\..\pics-client\src\csuser.h"\ "..\..\..\pics-client\src\csusrlst.h"\ "..\gridtext.h"\ "..\htbrowse.h"\ "$(INTDIR)\HTBrowse.obj" : $(SOURCE) $(DEP_CPP_HTBRO) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_HTBRO=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaabrow.h"\ "..\..\..\library\src\htaautil.h"\ "..\..\..\library\src\htaccess.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htansi.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htbinit.h"\ "..\..\..\library\src\htbound.h"\ "..\..\..\library\src\htbufwrt.h"\ "..\..\..\library\src\htcache.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htconlen.h"\ "..\..\..\library\src\htdescpt.h"\ "..\..\..\library\src\htdialog.h"\ "..\..\..\library\src\htdir.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htevtlst.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htfile.h"\ "..\..\..\library\src\htfilter.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htftp.h"\ "..\..\..\library\src\htftpdir.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\htgopher.h"\ "..\..\..\library\src\htguess.h"\ "..\..\..\library\src\htheader.h"\ "..\..\..\library\src\hthinit.h"\ "..\..\..\library\src\hthist.h"\ "..\..\..\library\src\hthome.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\hticons.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htinit.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htlocal.h"\ "..\..\..\library\src\htlog.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmerge.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htmime.h"\ "..\..\..\library\src\htmimerq.h"\ "..\..\..\library\src\htmimimp.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htmulpar.h"\ "..\..\..\library\src\htmulti.h"\ "..\..\..\library\src\htndir.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htnews.h"\ "..\..\..\library\src\htnewsls.h"\ "..\..\..\library\src\htnewsrq.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htpep.h"\ "..\..\..\library\src\htplain.h"\ "..\..\..\library\src\htprofil.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htproxy.h"\ "..\..\..\library\src\htreader.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htrules.h"\ "..\..\..\library\src\htschunk.h"\ "..\..\..\library\src\htsocket.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httchunk.h"\ "..\..\..\library\src\httcp.h"\ "..\..\..\library\src\httee.h"\ "..\..\..\library\src\httelnet.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\http.h"\ "..\..\..\library\src\httpgen.h"\ "..\..\..\library\src\httpreq.h"\ "..\..\..\library\src\httpres.h"\ "..\..\..\library\src\httpserv.h"\ "..\..\..\library\src\httputil.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\HTWAIS.h"\ "..\..\..\library\src\htwriter.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\htxparse.h"\ "..\..\..\library\src\htzip.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwapp.h"\ "..\..\..\library\src\wwwcache.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwdir.h"\ "..\..\..\library\src\wwwfile.h"\ "..\..\..\library\src\wwwftp.h"\ "..\..\..\library\src\wwwgophe.h"\ "..\..\..\library\src\wwwhtml.h"\ "..\..\..\library\src\wwwhttp.h"\ "..\..\..\library\src\wwwinit.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwmime.h"\ "..\..\..\library\src\wwwnews.h"\ "..\..\..\library\src\wwwstream.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwtelnt.h"\ "..\..\..\library\src\wwwtrans.h"\ "..\..\..\library\src\wwwutil.h"\ "..\..\..\library\src\WWWWAIS.h"\ "..\..\..\library\src\wwwzip.h"\ "..\..\..\pics-client\src\cslapp.h"\ "..\..\..\pics-client\src\csll.h"\ "..\..\..\pics-client\src\cslutils.h"\ "..\..\..\pics-client\src\csuser.h"\ "..\..\..\pics-client\src\csusrlst.h"\ "..\a_stdio.h"\ "..\gridtext.h"\ "..\htbrowse.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_HTBRO=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\HTBrowse.obj" : $(SOURCE) $(DEP_CPP_HTBRO) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\..\..\Library\src\HTHInit.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_HTHIN=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthinit.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htplain.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "$(INTDIR)\HTHInit.obj" : $(SOURCE) $(DEP_CPP_HTHIN) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_HTHIN=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthinit.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htplain.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_HTHIN=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\HTHInit.obj" : $(SOURCE) $(DEP_CPP_HTHIN) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\..\..\Library\src\HTInit.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_HTINI=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaabrow.h"\ "..\..\..\library\src\htaautil.h"\ "..\..\..\library\src\htaccess.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htansi.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htbound.h"\ "..\..\..\library\src\htbufwrt.h"\ "..\..\..\library\src\htcache.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htconlen.h"\ "..\..\..\library\src\htdescpt.h"\ "..\..\..\library\src\htdialog.h"\ "..\..\..\library\src\htdir.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htevtlst.h"\ "..\..\..\library\src\htfile.h"\ "..\..\..\library\src\htfilter.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htftp.h"\ "..\..\..\library\src\htftpdir.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\htgopher.h"\ "..\..\..\library\src\htguess.h"\ "..\..\..\library\src\htheader.h"\ "..\..\..\library\src\hthist.h"\ "..\..\..\library\src\hthome.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\hticons.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htinit.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htlocal.h"\ "..\..\..\library\src\htlog.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmerge.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htmime.h"\ "..\..\..\library\src\htmimerq.h"\ "..\..\..\library\src\htmimimp.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htmulpar.h"\ "..\..\..\library\src\htmulti.h"\ "..\..\..\library\src\htndir.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htnews.h"\ "..\..\..\library\src\htnewsls.h"\ "..\..\..\library\src\htnewsrq.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htpep.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htproxy.h"\ "..\..\..\library\src\htreader.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htrules.h"\ "..\..\..\library\src\htschunk.h"\ "..\..\..\library\src\htsocket.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httchunk.h"\ "..\..\..\library\src\httcp.h"\ "..\..\..\library\src\httee.h"\ "..\..\..\library\src\httelnet.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\http.h"\ "..\..\..\library\src\httpgen.h"\ "..\..\..\library\src\httpreq.h"\ "..\..\..\library\src\httpres.h"\ "..\..\..\library\src\httpserv.h"\ "..\..\..\library\src\httputil.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwriter.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\htxparse.h"\ "..\..\..\library\src\htzip.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwapp.h"\ "..\..\..\library\src\wwwcache.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwdir.h"\ "..\..\..\library\src\wwwfile.h"\ "..\..\..\library\src\wwwftp.h"\ "..\..\..\library\src\wwwgophe.h"\ "..\..\..\library\src\wwwhtml.h"\ "..\..\..\library\src\wwwhttp.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwmime.h"\ "..\..\..\library\src\wwwnews.h"\ "..\..\..\library\src\wwwstream.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwtelnt.h"\ "..\..\..\library\src\wwwtrans.h"\ "..\..\..\library\src\wwwutil.h"\ "..\..\..\library\src\wwwzip.h"\ "$(INTDIR)\HTInit.obj" : $(SOURCE) $(DEP_CPP_HTINI) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_HTINI=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaabrow.h"\ "..\..\..\library\src\htaautil.h"\ "..\..\..\library\src\htaccess.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htansi.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htbound.h"\ "..\..\..\library\src\htbufwrt.h"\ "..\..\..\library\src\htcache.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htconlen.h"\ "..\..\..\Library\src\HTDemux.h"\ "..\..\..\library\src\htdescpt.h"\ "..\..\..\library\src\htdialog.h"\ "..\..\..\library\src\htdir.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htevtlst.h"\ "..\..\..\library\src\htfile.h"\ "..\..\..\library\src\htfilter.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htftp.h"\ "..\..\..\library\src\htftpdir.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\htgopher.h"\ "..\..\..\library\src\htguess.h"\ "..\..\..\library\src\htheader.h"\ "..\..\..\library\src\hthist.h"\ "..\..\..\library\src\hthome.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\hticons.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htinit.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htlocal.h"\ "..\..\..\library\src\htlog.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmerge.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htmime.h"\ "..\..\..\library\src\htmimerq.h"\ "..\..\..\library\src\htmimimp.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htmulpar.h"\ "..\..\..\library\src\htmulti.h"\ "..\..\..\Library\src\HTMuxCh.h"\ "..\..\..\Library\src\HTMuxHeader.h"\ "..\..\..\Library\src\HTMuxTx.h"\ "..\..\..\library\src\htndir.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htnews.h"\ "..\..\..\library\src\htnewsls.h"\ "..\..\..\library\src\htnewsrq.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htpep.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htproxy.h"\ "..\..\..\library\src\htreader.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htrules.h"\ "..\..\..\library\src\htschunk.h"\ "..\..\..\library\src\htsocket.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httchunk.h"\ "..\..\..\library\src\httcp.h"\ "..\..\..\library\src\httee.h"\ "..\..\..\library\src\httelnet.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\http.h"\ "..\..\..\library\src\httpgen.h"\ "..\..\..\library\src\httpreq.h"\ "..\..\..\library\src\httpres.h"\ "..\..\..\library\src\httpserv.h"\ "..\..\..\library\src\httputil.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\HTWAIS.h"\ "..\..\..\library\src\htwriter.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\htxparse.h"\ "..\..\..\library\src\htzip.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwapp.h"\ "..\..\..\library\src\wwwcache.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwdir.h"\ "..\..\..\library\src\wwwfile.h"\ "..\..\..\library\src\wwwftp.h"\ "..\..\..\library\src\wwwgophe.h"\ "..\..\..\library\src\wwwhtml.h"\ "..\..\..\library\src\wwwhttp.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwmime.h"\ "..\..\..\Library\src\WWWMux.h"\ "..\..\..\library\src\wwwnews.h"\ "..\..\..\library\src\wwwstream.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwtelnt.h"\ "..\..\..\library\src\wwwtrans.h"\ "..\..\..\library\src\wwwutil.h"\ "..\..\..\library\src\WWWWAIS.h"\ "..\..\..\library\src\wwwzip.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_HTINI=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\HTInit.obj" : $(SOURCE) $(DEP_CPP_HTINI) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\..\..\Library\src\HTML.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_HTML_=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwhtml.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "$(INTDIR)\HTML.obj" : $(SOURCE) $(DEP_CPP_HTML_) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_HTML_=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwhtml.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_HTML_=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\HTML.obj" : $(SOURCE) $(DEP_CPP_HTML_) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\..\..\Library\src\HTMLPDTD.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_HTMLP=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwsys.h"\ "$(INTDIR)\HTMLPDTD.obj" : $(SOURCE) $(DEP_CPP_HTMLP) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_HTMLP=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwsys.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_HTMLP=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\HTMLPDTD.obj" : $(SOURCE) $(DEP_CPP_HTMLP) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\..\..\Library\src\HTPlain.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_HTPLA=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htplain.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "$(INTDIR)\HTPlain.obj" : $(SOURCE) $(DEP_CPP_HTPLA) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_HTPLA=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htext.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htplain.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\htstyle.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_HTPLA=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\HTPlain.obj" : $(SOURCE) $(DEP_CPP_HTPLA) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=..\..\..\Library\src\HTProfil.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_HTPRO=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaabrow.h"\ "..\..\..\library\src\htaautil.h"\ "..\..\..\library\src\htaccess.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htansi.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htbinit.h"\ "..\..\..\library\src\htbound.h"\ "..\..\..\library\src\htbufwrt.h"\ "..\..\..\library\src\htcache.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htconlen.h"\ "..\..\..\library\src\htdescpt.h"\ "..\..\..\library\src\htdialog.h"\ "..\..\..\library\src\htdir.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htevtlst.h"\ "..\..\..\library\src\htfile.h"\ "..\..\..\library\src\htfilter.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htftp.h"\ "..\..\..\library\src\htftpdir.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\htgopher.h"\ "..\..\..\library\src\htguess.h"\ "..\..\..\library\src\htheader.h"\ "..\..\..\library\src\hthinit.h"\ "..\..\..\library\src\hthist.h"\ "..\..\..\library\src\hthome.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\hticons.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htinit.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htlocal.h"\ "..\..\..\library\src\htlog.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmerge.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htmime.h"\ "..\..\..\library\src\htmimerq.h"\ "..\..\..\library\src\htmimimp.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htmulpar.h"\ "..\..\..\library\src\htmulti.h"\ "..\..\..\library\src\htndir.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htnews.h"\ "..\..\..\library\src\htnewsls.h"\ "..\..\..\library\src\htnewsrq.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htpep.h"\ "..\..\..\library\src\htplain.h"\ "..\..\..\library\src\htprofil.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htproxy.h"\ "..\..\..\library\src\htreader.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htrules.h"\ "..\..\..\library\src\htschunk.h"\ "..\..\..\library\src\htsocket.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httchunk.h"\ "..\..\..\library\src\httcp.h"\ "..\..\..\library\src\httee.h"\ "..\..\..\library\src\httelnet.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\http.h"\ "..\..\..\library\src\httpgen.h"\ "..\..\..\library\src\httpreq.h"\ "..\..\..\library\src\httpres.h"\ "..\..\..\library\src\httpserv.h"\ "..\..\..\library\src\httputil.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwriter.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\htxparse.h"\ "..\..\..\library\src\htzip.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwapp.h"\ "..\..\..\library\src\wwwcache.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwdir.h"\ "..\..\..\library\src\wwwfile.h"\ "..\..\..\library\src\wwwftp.h"\ "..\..\..\library\src\wwwgophe.h"\ "..\..\..\library\src\wwwhtml.h"\ "..\..\..\library\src\wwwhttp.h"\ "..\..\..\library\src\wwwinit.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwmime.h"\ "..\..\..\library\src\wwwnews.h"\ "..\..\..\library\src\wwwstream.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwtelnt.h"\ "..\..\..\library\src\wwwtrans.h"\ "..\..\..\library\src\wwwutil.h"\ "..\..\..\library\src\wwwzip.h"\ "$(INTDIR)\HTProfil.obj" : $(SOURCE) $(DEP_CPP_HTPRO) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_HTPRO=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaabrow.h"\ "..\..\..\library\src\htaautil.h"\ "..\..\..\library\src\htaccess.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htansi.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htbinit.h"\ "..\..\..\library\src\htbound.h"\ "..\..\..\library\src\htbufwrt.h"\ "..\..\..\library\src\htcache.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htconlen.h"\ "..\..\..\library\src\htdescpt.h"\ "..\..\..\library\src\htdialog.h"\ "..\..\..\library\src\htdir.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htevtlst.h"\ "..\..\..\library\src\htfile.h"\ "..\..\..\library\src\htfilter.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htftp.h"\ "..\..\..\library\src\htftpdir.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\htgopher.h"\ "..\..\..\library\src\htguess.h"\ "..\..\..\library\src\htheader.h"\ "..\..\..\library\src\hthinit.h"\ "..\..\..\library\src\hthist.h"\ "..\..\..\library\src\hthome.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\hticons.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htinit.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htlocal.h"\ "..\..\..\library\src\htlog.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmerge.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htmime.h"\ "..\..\..\library\src\htmimerq.h"\ "..\..\..\library\src\htmimimp.h"\ "..\..\..\library\src\html.h"\ "..\..\..\library\src\htmlgen.h"\ "..\..\..\library\src\htmlpdtd.h"\ "..\..\..\library\src\htmulpar.h"\ "..\..\..\library\src\htmulti.h"\ "..\..\..\library\src\htndir.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htnews.h"\ "..\..\..\library\src\htnewsls.h"\ "..\..\..\library\src\htnewsrq.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htpep.h"\ "..\..\..\library\src\htplain.h"\ "..\..\..\library\src\htprofil.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htproxy.h"\ "..\..\..\library\src\htreader.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htrules.h"\ "..\..\..\library\src\htschunk.h"\ "..\..\..\library\src\htsocket.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httchunk.h"\ "..\..\..\library\src\httcp.h"\ "..\..\..\library\src\httee.h"\ "..\..\..\library\src\httelnet.h"\ "..\..\..\library\src\httexgen.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\http.h"\ "..\..\..\library\src\httpgen.h"\ "..\..\..\library\src\httpreq.h"\ "..\..\..\library\src\httpres.h"\ "..\..\..\library\src\httpserv.h"\ "..\..\..\library\src\httputil.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\HTWAIS.h"\ "..\..\..\library\src\htwriter.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\htxparse.h"\ "..\..\..\library\src\htzip.h"\ "..\..\..\library\src\sgml.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwapp.h"\ "..\..\..\library\src\wwwcache.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwdir.h"\ "..\..\..\library\src\wwwfile.h"\ "..\..\..\library\src\wwwftp.h"\ "..\..\..\library\src\wwwgophe.h"\ "..\..\..\library\src\wwwhtml.h"\ "..\..\..\library\src\wwwhttp.h"\ "..\..\..\library\src\wwwinit.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwmime.h"\ "..\..\..\library\src\wwwnews.h"\ "..\..\..\library\src\wwwstream.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwtelnt.h"\ "..\..\..\library\src\wwwtrans.h"\ "..\..\..\library\src\wwwutil.h"\ "..\..\..\library\src\WWWWAIS.h"\ "..\..\..\library\src\wwwzip.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_HTPRO=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\HTProfil.obj" : $(SOURCE) $(DEP_CPP_HTPRO) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF SOURCE=.\lib.c DEP_CPP_LIB_C=\ ".\lib.h"\ "$(INTDIR)\lib.obj" : $(SOURCE) $(DEP_CPP_LIB_C) "$(INTDIR)" SOURCE=.\scroll.c DEP_CPP_SCROL=\ ".\lib.h"\ ".\scroll.h"\ "$(INTDIR)\scroll.obj" : $(SOURCE) $(DEP_CPP_SCROL) "$(INTDIR)" SOURCE=.\www.c !IF "$(CFG)" == "www - Win32 Release" DEP_CPP_WWW_C=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaabrow.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\htheader.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htmimprs.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htreqman.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "..\htbrowse.h"\ ".\lib.h"\ ".\scroll.h"\ "$(INTDIR)\www.obj" : $(SOURCE) $(DEP_CPP_WWW_C) "$(INTDIR)" !ELSEIF "$(CFG)" == "www - Win32 Debug" DEP_CPP_WWW_C=\ "..\..\..\library\external\regex.h"\ "..\..\..\library\src\htaabrow.h"\ "..\..\..\library\src\htalert.h"\ "..\..\..\library\src\htanchor.h"\ "..\..\..\library\src\htarray.h"\ "..\..\..\library\src\htassoc.h"\ "..\..\..\library\src\htatom.h"\ "..\..\..\library\src\htbind.h"\ "..\..\..\library\src\htchannl.h"\ "..\..\..\library\src\htchunk.h"\ "..\..\..\library\src\htdns.h"\ "..\..\..\library\src\hterror.h"\ "..\..\..\library\src\htescape.h"\ "..\..\..\library\src\htevent.h"\ "..\..\..\library\src\htformat.h"\ "..\..\..\library\src\htfwrite.h"\ "..\..\..\library\src\htheader.h"\ "..\..\..\library\src\hthost.h"\ "..\..\..\library\src\hthstman.h"\ "..\..\..\library\src\htinet.h"\ "..\..\..\library\src\htiostream.h"\ "..\..\..\library\src\htlib.h"\ "..\..\..\library\src\htlink.h"\ "..\..\..\library\src\htlist.h"\ "..\..\..\library\src\htmemlog.h"\ "..\..\..\library\src\htmemory.h"\ "..\..\..\library\src\htmethod.h"\ "..\..\..\library\src\htmimprs.h"\ "..\..\..\library\src\htnet.h"\ "..\..\..\library\src\htparse.h"\ "..\..\..\library\src\htprot.h"\ "..\..\..\library\src\htreq.h"\ "..\..\..\library\src\htreqman.h"\ "..\..\..\library\src\htresponse.h"\ "..\..\..\library\src\htstream.h"\ "..\..\..\library\src\htstring.h"\ "..\..\..\library\src\htstruct.h"\ "..\..\..\library\src\httimer.h"\ "..\..\..\library\src\httrans.h"\ "..\..\..\library\src\htuser.h"\ "..\..\..\library\src\htutils.h"\ "..\..\..\library\src\htutree.h"\ "..\..\..\library\src\htuu.h"\ "..\..\..\library\src\htwwwstr.h"\ "..\..\..\library\src\windows\config.h"\ "..\..\..\library\src\wwwcore.h"\ "..\..\..\library\src\wwwlib.h"\ "..\..\..\library\src\wwwsys.h"\ "..\..\..\library\src\wwwutil.h"\ "..\htbrowse.h"\ ".\lib.h"\ ".\scroll.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ NODEP_CPP_WWW_C=\ "..\..\..\library\src\HTVMSUtils.h"\ "$(INTDIR)\www.obj" : $(SOURCE) $(DEP_CPP_WWW_C) "$(INTDIR)" !ENDIF SOURCE=.\www.rc DEP_RSC_WWW_R=\ ".\WWW.ICO"\ "$(INTDIR)\www.res" : $(SOURCE) $(DEP_RSC_WWW_R) "$(INTDIR)" $(RSC) $(RSC_PROJ) $(SOURCE) !ENDIF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/www.rc������������������������������������������������������������������0100644�0000764�0000144�00000010604�06124117122�016675� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//Microsoft Developer Studio generated resource script. // #include "wwwrc.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #define APPSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APPSTUDIO_HIDDEN_SYMBOLS ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "wwwrc.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#define APPSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n" "#undef APPSTUDIO_HIDDEN_SYMBOLS\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Menu // IDM_WWW MENU DISCARDABLE BEGIN MENUITEM "&Fonts...", IDM_FONT MENUITEM "A&bout...", IDM_ABOUT MENUITEM "&Quit", IDM_EXIT END ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_WWW ICON DISCARDABLE "WWW.ICO" ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_PROMPT DIALOG DISCARDABLE 0, 0, 187, 50 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Input needed..." FONT 8, "MS Sans Serif" BEGIN EDITTEXT IDC_TEXT,1,18,181,12,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,131,33,50,14 PUSHBUTTON "Cancel",IDCANCEL,78,34,50,14 LTEXT "Static",IDC_PROMPT1,2,4,180,8 END IDD_CONFIRM DIALOG DISCARDABLE 0, 0, 187, 50 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Please confirm..." FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "Yes",IDOK,93,33,50,14 PUSHBUTTON "No",IDCANCEL,31,33,50,14 LTEXT "Static",IDC_PROMPT1,2,4,183,25 END IDD_PASSWD DIALOG DISCARDABLE 0, 0, 187, 50 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Authorization needed..." FONT 8, "MS Sans Serif" BEGIN EDITTEXT IDC_PASSWD,45,18,137,12,ES_PASSWORD | ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,131,33,50,14 PUSHBUTTON "Cancel",IDCANCEL,78,34,50,14 LTEXT "Static",IDC_PROMPT1,2,4,180,8 LTEXT "password:",IDC_STATIC,8,18,33,8 END IDD_USERPASSWD DIALOG DISCARDABLE 0, 0, 187, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Identity needed..." FONT 8, "MS Sans Serif" BEGIN EDITTEXT IDC_USER,36,18,146,12,ES_AUTOHSCROLL EDITTEXT IDC_PASSWD,34,33,145,12,ES_PASSWORD | ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,129,44,50,14 PUSHBUTTON "Cancel",IDCANCEL,76,45,50,14 LTEXT "Static",IDC_PROMPT1,2,4,180,8 LTEXT "user name:",IDC_STATIC,0,20,36,8 LTEXT "password:",IDC_STATIC,0,33,32,8 END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO DISCARDABLE BEGIN IDD_PROMPT, DIALOG BEGIN RIGHTMARGIN, 185 END IDD_CONFIRM, DIALOG BEGIN RIGHTMARGIN, 185 TOPMARGIN, 4 END IDD_PASSWD, DIALOG BEGIN RIGHTMARGIN, 185 END IDD_USERPASSWD, DIALOG BEGIN RIGHTMARGIN, 185 END END #endif // APSTUDIO_INVOKED #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED ����������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/www32.def���������������������������������������������������������������0100644�0000764�0000144�00000000074�06054147011�017176� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DESCRIPTION 'Console for LineMode WWW browser' PROTMODE ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/wwwrc.h�����������������������������������������������������������������0100644�0000764�0000144�00000004153�06110230127�017043� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by www.rc // #define IDS_DEFMODE 1 #define IDD_PROMPTBOX 101 #define IDD_BAUDRATE 103 #define IDD_CONFIRM 103 #define IDD_WAITQUERY 104 #define IDM_FONT 106 #define IDM_CONNECT 0x100 #define IDM_DISCONNECT 0x101 #define IDM_INFO 0x103 #define IDM_RESET 0x105 #define IDM_EXIT 0x106 #define IDM_COMM 0x107 #define IDM_ABOUT 0x108 #define IDM_SNP 300 #define IDM_WWW 300 #define IDI_SNP 400 #define IDI_WWW 400 #define IDC_BAUDRATE 1000 #define IDC_COUNTDOWN 1001 #define IDC_SYMBOL 1002 #define IDC_TEXT 1003 #define IDC_PASSWD 1008 #define IDD_PROMPT 1009 #define IDD_PASSWD 1010 #define IDD_USERPASSWD 1011 #define IDC_USER 1011 #define IDC_PROMPT1 1012 #define IDM_LOCALECHO 40002 #define IDM_CRBEGETSLF 40003 #define IDM_DIPSLAYNEWS 40004 #define IDM_ENABLEPARSER 40005 #define IDM_RTUNIDS 40006 #define IDM_NORMAL 40007 #define IDM_SHOWALLPARSED 40008 #define IDM_SHOWALLSENT 40009 #define IDM_TERMINAL 40010 #define IDC_STATIC -1 #define IDC_PROMPT -1 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40012 #define _APS_NEXT_CONTROL_VALUE 1013 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/windows/Makefile.in�������������������������������������������������������������0100644�0000764�0000144�00000013544�07405520526�017607� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DEF := $(wildcard *.def) MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = $(DEF) $(MAK) $(WIN) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu LineMode/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu LineMode/src/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/Makefile������������������������������������������������������������������������0100644�0000764�0000144�00000041233�07405520574�015507� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ bin_PROGRAMS = www www_LDADD = $(top_builddir)/Library/src/libwwwinit.la $(top_builddir)/Library/src/libwwwapp.la $(top_builddir)/Library/src/libwwwhtml.la $(top_builddir)/Library/src/libwwwtelnet.la $(top_builddir)/Library/src/libwwwnews.la $(top_builddir)/Library/src/libwwwhttp.la $(top_builddir)/Library/src/libwwwmime.la $(top_builddir)/Library/src/libwwwgopher.la $(top_builddir)/Library/src/libwwwftp.la $(top_builddir)/Library/src/libwwwfile.la $(top_builddir)/Library/src/libwwwdir.la $(top_builddir)/Library/src/libwwwcache.la $(top_builddir)/Library/src/libwwwstream.la $(top_builddir)/Library/src/libwwwmux.la $(top_builddir)/Library/src/libwwwtrans.la $(top_builddir)/Library/src/libwwwcore.la $(top_builddir)/Library/src/libwwwutils.la $(top_builddir)/PICS-client/src/libpics.la -lm ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la ${top_builddir}/modules/md5/libmd5.la SUBDIRS = windows vms INCLUDES = -I$(srcdir)/../../Library/src -I$(top_srcdir)/modules/expat/xmlparse -I$(srcdir)/../../PICS-client/src # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .g .h .html www_SOURCES = HTBrowse.c GridText.c ConView.c GridStyle.c DefaultStyles.c BUILT_SOURCES = HTBrowse.h GridStyle.h GridText.h HTFont.h a_stdio.c EXTRA_www_SOURCES = a_stdio.g a_stdio.h DOCS := $(wildcard *.html) PURIFY_CACHE = /tmp/purify.cache # need the WAIS library and the cyrrilic support! EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) DefaultStyles.c.classic DefaultStyles.c.modern mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = bin_PROGRAMS = www$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../.. CPPFLAGS = LDFLAGS = LIBS = -ldl www_OBJECTS = HTBrowse.o GridText.o ConView.o GridStyle.o \ DefaultStyles.o www_DEPENDENCIES = $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la \ $(top_builddir)/PICS-client/src/libpics.la www_LDFLAGS = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/ConView.P .deps/DefaultStyles.P .deps/GridStyle.P \ .deps/GridText.P .deps/HTBrowse.P .deps/a_stdio.P SOURCES = $(www_SOURCES) $(EXTRA_www_SOURCES) OBJECTS = $(www_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .g .h .html .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu LineMode/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: www$(EXEEXT): $(www_OBJECTS) $(www_DEPENDENCIES) @rm -f www$(EXEEXT) $(LINK) $(www_LDFLAGS) $(www_OBJECTS) $(www_LDADD) $(LIBS) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu LineMode/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-recursive all-am: Makefile $(PROGRAMS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ distclean-tags distclean-depend distclean-generic \ clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif .g.c: -$(RM) $(srcdir)/$(*F).c $(LN_S) $(srcdir)/$(*F).g $(srcdir)/$(*F).c inc: $(BUILT_SOURCES) @echo Generated built sources purify: $(www_OBJECTS) $(www_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(www_OBJECTS) \ ../../Library/src/.libs/libwww.a -lm $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/HTBrowse.h����������������������������������������������������������������������0100644�0000764�0000144�00000003004�07405520457�015707� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Main Module for Line Mode Browser !Main Module for Line Mode Browser! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module defines the global variables etc. for the Line Mode Browser. The module is implemented by HTBrowse.c, and it is a part of the Line Mode Browser. */ #ifndef HTBROWSE_H #define HTBROWSE_H extern int HTScreenWidth; extern int HTScreenHeight; /* Anchor specific information */ extern BOOL display_anchors; /* Show anchors in text? */ extern char * start_reference; /* Format for start anchor */ extern char * end_reference; /* for end anchor */ extern char * reference_mark; /* for reference lists */ extern char * end_mark; /* Format string for [End] */ typedef struct _LineMode LineMode; typedef struct _HTView HTView; extern int OutputData(HTView * pView, const char * fmt, ...); #endif /* HTBROWSE_H */ /* for access to windows app's windows procedures */ typedef int InputParser_t (char* buf, SOCKET s, HTRequest * req, HTEventType type); extern InputParser_t * PInputParser; PUBLIC int bufferInput (char* buf, int len, SOCKET s, HTRequest * req, HTEventType type); extern LineMode * Context_getLineMode(HTRequest * request); extern HTRequest * LineMode_getConsole(LineMode * pLm); extern HTView * LineMode_getView(LineMode * pLm); extern HTView * HTView_create(char* name, int rows, int cols, LineMode * pLm); extern BOOL HTView_destroy(HTView * pView); /* End of HTBrowse Declaration */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/GridStyle.h���������������������������������������������������������������������0100644�0000764�0000144�00000012635�07405520457�016132� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* HTStyle: Style management for libwww ! Style Definition for Hypertext ! */ /* **(c) COPYRIGHT MIT 1995. **Please first read the full copyright statement in the file COPYRIGH. */ /* Styles allow the translation between a logical property of a piece of text and its physical representation. A StyleSheet is a collection of styles, defining the translation necessary to represent a document. It is a linked list of styles. . Overriding this module . Why is the style structure declared in the HTStyle.h module, instead of having the user browser define the structure, and the HTStyle routines just use sizeof() for copying? It's not obvious whether HTStyle.c should be common code. It's useful to have common code for loading style sheets, especially if the movement toward standard style sheets gets going. If it IS common code, then both the hypertext object and HTStyle.c must know the structure of a style, so HTStyle.h is a suitable place to put that. HTStyle.c has to be compiled with a knowledge of the It we take it out of the library, then of course HTStyle could be declared as an undefined structure. The only references to it are in the structure-flattening code HTML.c and HTPlain.c, which only use HTStypeNamed(). You can in any case override this function in your own code, which will prevent the HTStyle from being loaded. You will be able to redefine your style structure in this case without problems, as no other moule needs to know it. */ #ifndef GridStyle_H #define GridStyle_H #include "HText.h" #include "HTFont.h" #include "HTStyle.h" typedef double HTCoord; typedef int HTColor; /* Sorry about the US spelling! */ typedef struct { short kind; /* only NX_LEFTTAB implemented*/ HTCoord position; /* x coordinate for stop */ } HTTabStop; #define STYLE_NAME_LENGTH 80 /* @@@@@@@@@@@ */ /* . The Style Structure . */ struct _HTStyle { /* Style management information */ struct _HTStyle * next; /* Link for putting into stylesheet */ char * name; /* Style name */ char * SGMLTag; /* Tag name to start */ /*Character attributes(a la NXRun) */ HTFont font; /* Font id */ HTCoord fontSize; /* The size of font, not independent */ HTColor color; /* text gray of current run */ int superscript; /* superscript (-sub) in points */ HTAnchor*anchor;/* Anchor id if any, else zero */ /* Paragraph Attribtes(a la NXTextStyle) */ HTCoord indent1st; /* how far 1st line is indented */ HTCoord leftIndent; /* how far second line is indented */ HTCoord rightIndent; /* (Missing from NeXT version */ short alignment; /* quad justification */ HTCoord lineHt; /* line height */ HTCoord descentLine; /* descender bottom from baseline */ HTTabStop *tabs; /* array of tab stops, 0 terminated */ BOOL wordWrap; /* Yes means wrap at space not char */ BOOL freeFormat; /* Yes means \n is just white space */ HTCoord spaceBefore; /* Omissions from NXTextStyle */ HTCoord spaceAfter; int paraFlags; /* Paragraph flags, bits as follows: */ }; #define PARA_KEEP 1 /* Do not break page within this paragraph */ #define PARA_WITH_NEXT 2 /* Do not break page after this paragraph */ #define HT_JUSTIFY 0 /* For alignment */ #define HT_LEFT 1 #define HT_RIGHT 2 #define HT_CENTER 3 #ifdef NOT_IN_GRIDSTYLE /* . Style Creation . ( HtStyleModify ) This routine is passed the style for a particular SGML nesting state, and the element number of a new element whithin that state. The routine returns a suitable style for text within the new element. It is passed a popinter tothe nesting state so that it can link the style back to the nesting state for later manipulation of the SGML nesting tree. */ extern HTStyle * HTStyleModify (HTStyle * style, HTNesting * nesting, int element_number); /* Style functions: */ extern HTStyle * HTStyleNew (void); extern HTStyle * HTStyleNewNamed (const char * name); extern HTStyle * HTStyleFree (HTStyle * self); #endif /* Style Sheet */ struct _HTStyleSheet { char * name; HTStyle * styles; }; #ifdef NOT_IN_GRIDSTYLE /* Stylesheet functions: */ extern HTStyleSheet * HTStyleSheetNew (void); extern HTStyleSheet * HTStyleSheetFree (HTStyleSheet * self); extern HTStyle * HTStyleNamed (HTStyleSheet * self, const char * name); extern HTStyle * HTStyleMatching (HTStyleSheet *self, HTStyle * style); extern HTStyleSheet * HTStyleSheetAddStyle (HTStyleSheet * self, HTStyle * style); extern HTStyleSheet * HTStyleSheetRemoveStyle (HTStyleSheet * self, HTStyle * style); #define CLEAR_POINTER ((void *)-1) /* Pointer value means "clear me" */ #endif /* NOT IN GRIDSTYLE */ #endif /* GRIDSTYLE_H */ /* @(#) $Id: GridStyle.html,v 1.10 2025/06/24 19:41:04 frystyk Exp $ */ ���������������������������������������������������������������������������������������������������libwww/LineMode/src/GridText.h����������������������������������������������������������������������0100644�0000764�0000144�00000003675�07405520457�015762� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Style Management for Line Mode Browser !Style Definition for Hypertext! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module defines the HText functions referenced from the HTML module in the W3C Sample Code Library. */ #include "WWWLib.h" #include "HText.h" extern HTChildAnchor * HText_childNumber (HText * text, int n); /* delete a hyper doc object with interfering with any anchors */ extern void hyperfree (HText * me); /* Is there any file left? */ extern BOOL HText_canScrollUp (HText * text); extern BOOL HText_canScrollDown (HText * text); /* Move display within window */ extern void HText_scrollUp (HText * text); /* One page */ extern void HText_scrollDown (HText * text); /* One page */ extern void HText_scrollTop (HText * text); extern void HText_scrollBottom (HText * text); extern int HText_sourceAnchors (HText * text); extern void HText_setStale (HText * text); extern void HText_refresh (HText * text); #ifdef CURSES extern int HText_getTopOfScreen (HText * text); extern int HText_getLines (HText * text); #endif /* . Delete All Documents in Memory . This is typically called at clean up time just before exiting the application. */ extern BOOL HText_freeAll (void); /* . Callbacks . These functions are invoked as callbacks from the HText interface. */ extern HText* LMHText_new (HTRequest * req, HTParentAnchor * anchor,HTStream * output_stream); extern HText* LMHText_new2 (HTRequest * req, HTParentAnchor * anchor,HTStream * output_stream); extern void HText_free (HText * self); extern BOOL LMHText_delete (HText * self); extern void LMHText_addText (HText * text, const char * str, int length); extern void LMHText_appendText (HText * text, const char * str); extern void LMHText_beginAnchor (HText *text, int elem_num, int attr_num, HTChildAnchor* anc, const BOOL* present, const char** value); /* End of declaration */ �������������������������������������������������������������������libwww/LineMode/src/HTFont.h������������������������������������������������������������������������0100644�0000764�0000144�00000001144�07405520457�015357� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The portable font concept !The portable font concept! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This is the Line mode browser version */ #ifndef HTFONT_H #define HTFONT_H typedef long int HTLMFont; /* For now */ typedef long int HTFont; /* For now as well */ #define HT_NON_BREAK_SPACE ((char)1) /* For now */ #define HT_FONT 0 #define HT_CAPITALS 1 #define HT_BOLD 2 #define HT_UNDERLINE 4 #define HT_INVERSE 8 #define HT_DOUBLE 0x10 #define HT_BLACK 0 #define HT_WHITE 1 #endif /* HTFONT_H */ /* End of HTFont */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/Makefile.in���������������������������������������������������������������������0100644�0000764�0000144�00000040501�07405520526�016106� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ bin_PROGRAMS = www www_LDADD = $(top_builddir)/Library/src/libwwwinit.la $(top_builddir)/Library/src/libwwwapp.la $(top_builddir)/Library/src/libwwwhtml.la $(top_builddir)/Library/src/libwwwtelnet.la $(top_builddir)/Library/src/libwwwnews.la $(top_builddir)/Library/src/libwwwhttp.la $(top_builddir)/Library/src/libwwwmime.la $(top_builddir)/Library/src/libwwwgopher.la $(top_builddir)/Library/src/libwwwftp.la $(top_builddir)/Library/src/libwwwfile.la $(top_builddir)/Library/src/libwwwdir.la $(top_builddir)/Library/src/libwwwcache.la $(top_builddir)/Library/src/libwwwstream.la $(top_builddir)/Library/src/libwwwmux.la $(top_builddir)/Library/src/libwwwtrans.la $(top_builddir)/Library/src/libwwwcore.la $(top_builddir)/Library/src/libwwwutils.la $(top_builddir)/PICS-client/src/libpics.la -lm @LIBWWWXML@ @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ @A_STDIO@ SUBDIRS = windows vms INCLUDES = -I$(srcdir)/../../Library/src -I$(top_srcdir)/modules/expat/xmlparse -I$(srcdir)/../../PICS-client/src # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .g .h .html www_SOURCES = HTBrowse.c GridText.c ConView.c GridStyle.c DefaultStyles.c BUILT_SOURCES = HTBrowse.h GridStyle.h GridText.h HTFont.h a_stdio.c EXTRA_www_SOURCES = a_stdio.g a_stdio.h DOCS := $(wildcard *.html) PURIFY_CACHE = @PURIFY_CACHE@ # need the WAIS library and the cyrrilic support! EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) DefaultStyles.c.classic DefaultStyles.c.modern mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = bin_PROGRAMS = www$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ www_OBJECTS = HTBrowse.o GridText.o ConView.o GridStyle.o \ DefaultStyles.o www_DEPENDENCIES = $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la \ $(top_builddir)/PICS-client/src/libpics.la www_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/ConView.P .deps/DefaultStyles.P .deps/GridStyle.P \ .deps/GridText.P .deps/HTBrowse.P .deps/a_stdio.P SOURCES = $(www_SOURCES) $(EXTRA_www_SOURCES) OBJECTS = $(www_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .g .h .html .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu LineMode/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: www$(EXEEXT): $(www_OBJECTS) $(www_DEPENDENCIES) @rm -f www$(EXEEXT) $(LINK) $(www_LDFLAGS) $(www_OBJECTS) $(www_LDADD) $(LIBS) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu LineMode/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-recursive all-am: Makefile $(PROGRAMS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ distclean-tags distclean-depend distclean-generic \ clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif .g.c: -$(RM) $(srcdir)/$(*F).c $(LN_S) $(srcdir)/$(*F).g $(srcdir)/$(*F).c inc: $(BUILT_SOURCES) @echo Generated built sources purify: $(www_OBJECTS) $(www_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(www_OBJECTS) \ ../../Library/src/.libs/libwww.a -lm $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/.deps/��������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405521235�015053� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/.deps/HTBrowse.P����������������������������������������������������������������0100644�0000764�0000144�00000033604�07405521233�016672� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTBrowse.o: HTBrowse.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h \ ../../Library/src/WWWMIME.h ../../Library/src/HTMIME.h \ ../../Library/src/HTHeader.h ../../Library/src/HTMIMERq.h \ ../../Library/src/HTMIMImp.h ../../Library/src/HTBound.h \ ../../Library/src/HTMulpar.h ../../Library/src/WWWCache.h \ ../../Library/src/HTCache.h ../../Library/src/WWWApp.h \ ../../Library/src/HTEvtLst.h ../../Library/src/HTHome.h \ ../../Library/src/HTDialog.h ../../Library/src/HTAccess.h \ ../../Library/src/HTRules.h ../../Library/src/HTProxy.h \ ../../Library/src/HTFilter.h ../../Library/src/HTLog.h \ ../../Library/src/HTHist.h ../../Library/src/WWWTrans.h \ ../../Library/src/HTANSI.h ../../Library/src/HTLocal.h \ ../../Library/src/HTTCP.h ../../Library/src/HTSocket.h \ ../../Library/src/HTReader.h ../../Library/src/HTWriter.h \ ../../Library/src/HTBufWrt.h ../../Library/src/WWWInit.h \ ../../Library/src/HTInit.h ../../Library/src/WWWHTTP.h \ ../../Library/src/HTTPUtil.h ../../Library/src/HTTP.h \ ../../Library/src/HTTPServ.h ../../Library/src/HTTPGen.h \ ../../Library/src/HTTPReq.h ../../Library/src/HTTPRes.h \ ../../Library/src/HTTChunk.h ../../Library/src/HTPEP.h \ ../../Library/src/HTAAUtil.h ../../Library/src/HTAABrow.h \ ../../Library/src/HTCookie.h ../../Library/src/WWWFile.h \ ../../Library/src/HTFile.h ../../Library/src/HTMulti.h \ ../../Library/src/HTBind.h ../../Library/src/HTBInit.h \ ../../Library/src/WWWFTP.h ../../Library/src/HTFTP.h \ ../../Library/src/HTFTPDir.h ../../Library/src/WWWGophe.h \ ../../Library/src/HTGopher.h ../../Library/src/WWWTelnt.h \ ../../Library/src/HTTelnet.h ../../Library/src/WWWNews.h \ ../../Library/src/HTNews.h ../../Library/src/HTNewsRq.h \ ../../Library/src/HTNewsLs.h ../../Library/src/HTNDir.h \ ../../Library/src/WWWHTML.h ../../Library/src/HTMLPDTD.h \ ../../Library/src/SGML.h ../../Library/src/HTMLGen.h \ ../../Library/src/HTTeXGen.h ../../Library/src/HTPlain.h \ ../../Library/src/HTML.h ../../Library/src/HText.h \ ../../Library/src/HTHInit.h ../../Library/src/HTStyle.h \ ../../Library/src/WWWStream.h ../../Library/src/HTConLen.h \ ../../Library/src/HTFWrite.h ../../Library/src/HTFSave.h \ ../../Library/src/HTGuess.h ../../Library/src/HTTee.h \ ../../Library/src/HTMerge.h ../../Library/src/HTSChunk.h \ ../../Library/src/HTXParse.h ../../Library/src/HTEPtoCl.h \ ../../Library/src/HTNetTxt.h ../../Library/src/WWWDir.h \ ../../Library/src/HTDir.h ../../Library/src/HTIcons.h \ ../../Library/src/HTDescpt.h ../../Library/src/WWWXML.h \ ../../Library/src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h \ ../../Library/src/HTRDF.h ../../Library/src/HTHash.h \ ../../Library/src/WWWZip.h ../../Library/src/HTZip.h \ ../../Library/src/HTProfil.h GridText.h HTBrowse.h \ ../../PICS-client/src/CSLApp.h ../../PICS-client/src/CSLUtils.h \ ../../PICS-client/src/CSLL.h ../../PICS-client/src/CSUser.h \ ../../PICS-client/src/CSUsrLst.h HTBrowse.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ../../Library/src/WWWMIME.h : ../../Library/src/HTMIME.h : ../../Library/src/HTHeader.h : ../../Library/src/HTMIMERq.h : ../../Library/src/HTMIMImp.h : ../../Library/src/HTBound.h : ../../Library/src/HTMulpar.h : ../../Library/src/WWWCache.h : ../../Library/src/HTCache.h : ../../Library/src/WWWApp.h : ../../Library/src/HTEvtLst.h : ../../Library/src/HTHome.h : ../../Library/src/HTDialog.h : ../../Library/src/HTAccess.h : ../../Library/src/HTRules.h : ../../Library/src/HTProxy.h : ../../Library/src/HTFilter.h : ../../Library/src/HTLog.h : ../../Library/src/HTHist.h : ../../Library/src/WWWTrans.h : ../../Library/src/HTANSI.h : ../../Library/src/HTLocal.h : ../../Library/src/HTTCP.h : ../../Library/src/HTSocket.h : ../../Library/src/HTReader.h : ../../Library/src/HTWriter.h : ../../Library/src/HTBufWrt.h : ../../Library/src/WWWInit.h : ../../Library/src/HTInit.h : ../../Library/src/WWWHTTP.h : ../../Library/src/HTTPUtil.h : ../../Library/src/HTTP.h : ../../Library/src/HTTPServ.h : ../../Library/src/HTTPGen.h : ../../Library/src/HTTPReq.h : ../../Library/src/HTTPRes.h : ../../Library/src/HTTChunk.h : ../../Library/src/HTPEP.h : ../../Library/src/HTAAUtil.h : ../../Library/src/HTAABrow.h : ../../Library/src/HTCookie.h : ../../Library/src/WWWFile.h : ../../Library/src/HTFile.h : ../../Library/src/HTMulti.h : ../../Library/src/HTBind.h : ../../Library/src/HTBInit.h : ../../Library/src/WWWFTP.h : ../../Library/src/HTFTP.h : ../../Library/src/HTFTPDir.h : ../../Library/src/WWWGophe.h : ../../Library/src/HTGopher.h : ../../Library/src/WWWTelnt.h : ../../Library/src/HTTelnet.h : ../../Library/src/WWWNews.h : ../../Library/src/HTNews.h : ../../Library/src/HTNewsRq.h : ../../Library/src/HTNewsLs.h : ../../Library/src/HTNDir.h : ../../Library/src/WWWHTML.h : ../../Library/src/HTMLPDTD.h : ../../Library/src/SGML.h : ../../Library/src/HTMLGen.h : ../../Library/src/HTTeXGen.h : ../../Library/src/HTPlain.h : ../../Library/src/HTML.h : ../../Library/src/HText.h : ../../Library/src/HTHInit.h : ../../Library/src/HTStyle.h : ../../Library/src/WWWStream.h : ../../Library/src/HTConLen.h : ../../Library/src/HTFWrite.h : ../../Library/src/HTFSave.h : ../../Library/src/HTGuess.h : ../../Library/src/HTTee.h : ../../Library/src/HTMerge.h : ../../Library/src/HTSChunk.h : ../../Library/src/HTXParse.h : ../../Library/src/HTEPtoCl.h : ../../Library/src/HTNetTxt.h : ../../Library/src/WWWDir.h : ../../Library/src/HTDir.h : ../../Library/src/HTIcons.h : ../../Library/src/HTDescpt.h : ../../Library/src/WWWXML.h : ../../Library/src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../../Library/src/HTRDF.h : ../../Library/src/HTHash.h : ../../Library/src/WWWZip.h : ../../Library/src/HTZip.h : ../../Library/src/HTProfil.h : GridText.h : HTBrowse.h : ../../PICS-client/src/CSLApp.h : ../../PICS-client/src/CSLUtils.h : ../../PICS-client/src/CSLL.h : ../../PICS-client/src/CSUser.h : ../../PICS-client/src/CSUsrLst.h : ����������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/.deps/GridText.P����������������������������������������������������������������0100644�0000764�0000144�00000023114�07405521234�016723� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GridText.o: GridText.c /usr/include/assert.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ ../../Library/src/WWWLib.h ../../Library/src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h \ ../../Library/src/WWWCache.h ../../Library/src/HTCache.h \ ../../Library/src/WWWApp.h ../../Library/src/HTEvtLst.h \ ../../Library/src/HTHome.h ../../Library/src/HTDialog.h \ ../../Library/src/HTAccess.h ../../Library/src/HTRules.h \ ../../Library/src/HTProxy.h ../../Library/src/HTFilter.h \ ../../Library/src/HTLog.h ../../Library/src/HTHist.h \ ../../Library/src/WWWHTML.h ../../Library/src/HTMLPDTD.h \ ../../Library/src/SGML.h ../../Library/src/HTMLGen.h \ ../../Library/src/HTTeXGen.h ../../Library/src/HTPlain.h \ ../../Library/src/HTML.h ../../Library/src/HText.h \ ../../Library/src/HTHInit.h ../../Library/src/HTStyle.h HTBrowse.h \ HTFont.h GridStyle.h GridText.h GridText.c : /usr/include/assert.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ../../Library/src/WWWCache.h : ../../Library/src/HTCache.h : ../../Library/src/WWWApp.h : ../../Library/src/HTEvtLst.h : ../../Library/src/HTHome.h : ../../Library/src/HTDialog.h : ../../Library/src/HTAccess.h : ../../Library/src/HTRules.h : ../../Library/src/HTProxy.h : ../../Library/src/HTFilter.h : ../../Library/src/HTLog.h : ../../Library/src/HTHist.h : ../../Library/src/WWWHTML.h : ../../Library/src/HTMLPDTD.h : ../../Library/src/SGML.h : ../../Library/src/HTMLGen.h : ../../Library/src/HTTeXGen.h : ../../Library/src/HTPlain.h : ../../Library/src/HTML.h : ../../Library/src/HText.h : ../../Library/src/HTHInit.h : ../../Library/src/HTStyle.h : HTBrowse.h : HTFont.h : GridStyle.h : GridText.h : ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/.deps/ConView.P�����������������������������������������������������������������0100644�0000764�0000144�00000020265�07405521235�016550� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ConView.o: ConView.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h HTBrowse.h ConView.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : HTBrowse.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/.deps/GridStyle.P���������������������������������������������������������������0100644�0000764�0000144�00000020505�07405521235�017101� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GridStyle.o: GridStyle.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h GridStyle.h \ ../../Library/src/HText.h HTFont.h ../../Library/src/HTStyle.h GridStyle.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : GridStyle.h : ../../Library/src/HText.h : HTFont.h : ../../Library/src/HTStyle.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/.deps/DefaultStyles.P�����������������������������������������������������������0100644�0000764�0000144�00000020555�07405521235�017770� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DefaultStyles.o: DefaultStyles.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h HTFont.h \ ../../Library/src/HTStyle.h GridStyle.h ../../Library/src/HText.h \ GridText.h DefaultStyles.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : HTFont.h : ../../Library/src/HTStyle.h : GridStyle.h : ../../Library/src/HText.h : GridText.h : ���������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/src/a_stdio.c�����������������������������������������������������������������������0120777�0000764�0000144�00000000000�07405521231�017547� 2./a_stdio.g�����������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/.cvsignore��������������������������������������������������������������������������0100644�0000764�0000144�00000000025�06202357461�015247� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/Makefile.am�������������������������������������������������������������������������0100644�0000764�0000144�00000000211�06467172556�015315� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) SUBDIRS = src User ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/Overview.html�����������������������������������������������������������������������0100644�0000764�0000144�00000005063�06523414460�015751� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>WWW - The Libwww Line Mode Browser</TITLE> <LINK rel=STYLESHEET href="../StyleSheets/Area/Overview.css" type="text/css"> </HEAD> <BODY BGCOLOR="#ffffff"> <P> <A HREF="../../resources.html"></A> <IMG BORDER="0" ALT="LMB" SRC="../Icons/WWW/LMB48x"> <H1> WWW - The Libwww Line Mode Browser </H1> <P> <DIV class="intro"> The www is an example application that comes with libwww - the <A HREF="/">W3C Sample Code Library</A>. It is a character based Web browser developed for use on terminals. It uses the libwww HTTP/1.1 implementation including a full HTTP/1.1 persistent cache, history lists etc. <UL> <LI> <A HREF="/">Documentation Overview</A> <LI> <A HREF="/">Release Notes</A> <LI> <A HREF="/">Installation Guide</A> and <A HREF="User/Customisation.html">Customization</A> <LI> <A HREF="User/Commands.html">Commands</A> and a <A HREF="User/QuickGuide.html">Quick User Guide</A> <LI> <A HREF="/">Command Line Options</A> <LI> <A HREF="User/Features.html">Change History</A> and <A HREF="User/Internals.html">Internals</A> <LI> <A HREF="User/Patch/">Known Bugs and Patches</A> </UL> </DIV> <P> <HR> <H2> The Basics </H2> <DL> <DT> Authors <DD> <A HREF="/">Henrik Frystyk Nielsen</A>, <A HREF="/#BernersLee">Tim Berners-Lee</A>, and <A HREF="/#Pellow">Nicola Pellow</A> <DT> Status <DD> Used as an example application for the <A HREF="/">W3C Sample Code Library</A> <DT> Plans <DD> New releases follow the releases of <A HREF="/">libwww</A> with no exception. <DT> Platforms <DD> It runs on the <A HREF="/">same platforms as libwww</A> <DT> Getting the Source Code <DD> The www tool comes as an integral part of the <A HREF="/">libwww distribution package</A>. <DT> Forums <DD> Discussions on libwww and its example applications take place on <B>&lt;www-lib@w3.org</B>&gt; (<A HREF="http://lists.w3.org/Archives/Public/www-lib/">archives</A>). See the <A HREF="/">documentation for how to subscribe</A>. </DL> <P> <HR> <ADDRESS> <A HREF="/">Henrik Frystyk Nielsen</A>,<BR> @(#) $Id: Overview.html,v 1.34 2025/05/04 19:38:24 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/Makefile����������������������������������������������������������������������������0100644�0000764�0000144�00000023545�07405520574�014726� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = src User mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu LineMode/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu LineMode/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������libwww/LineMode/Makefile.in�������������������������������������������������������������������������0100644�0000764�0000144�00000023165�07405520526�015326� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = src User mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu LineMode/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = LineMode distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu LineMode/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/���������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520573�013575� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/CVS/�����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�014224� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/CVS/Root�������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517401�015070� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/CVS/Repository�������������������������������������������������������������������0100644�0000764�0000144�00000000023�07405517401�016316� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/CVS/Entries����������������������������������������������������������������������0100644�0000764�0000144�00000000265�07405517401�015560� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Sat Apr 20 16:50:49 1996// /Activity.html/1.4/Thu May 14 02:11:40 1998// /Makefile.am/1.1/Sat Apr 20 16:50:50 1996// /Overview.html/1.4/Sun Feb 16 18:44:14 1997// D �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/CVS/Entries.Log������������������������������������������������������������������0100644�0000764�0000144�00000000143�07405517402�016274� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/Data//// A D/HTUtils//// A D/LablPars//// A D/RatPars//// A D/User//// A D/bin//// A D/src//// �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Data/����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�014442� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Data/CVS/������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�015075� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Data/CVS/Root��������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517401�015741� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Data/CVS/Repository��������������������������������������������������������������0100644�0000764�0000144�00000000030�07405517401�017165� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Data ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Data/CVS/Entries�����������������������������������������������������������������0100644�0000764�0000144�00000000002�07405517401�016416� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520573�014513� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/CVS/������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517402�015143� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/CVS/Root��������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517401�016006� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/CVS/Repository��������������������������������������������������������������0100644�0000764�0000144�00000000030�07405517401�017232� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/CVS/Entries�����������������������������������������������������������������0100644�0000764�0000144�00000001164�07405517402�016476� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Sat Apr 20 16:50:52 1996// /Bugs.html/1.3/Sun Feb 16 18:44:20 1997// /CSLabel.html/1.2/Mon May 4 19:38:36 1998// /CSMacRed.html/1.2/Mon May 4 19:38:37 1998// /CSUser.html/1.2/Mon May 4 19:38:38 1998// /Files.html/1.2/Mon Dec 9 03:30:26 1996// /HTFuncs.html/1.2/Mon Dec 9 03:30:28 1996// /Intrface.html/1.2/Mon Dec 9 03:30:30 1996// /Makefile.am/1.1/Sat Apr 20 16:50:53 1996// /Overview.html/1.3/Sun Feb 16 18:44:21 1997// /Parsing.html/1.2/Mon Dec 9 03:30:35 1996// /ReleaseNotes.html/1.3/Sun Feb 16 18:44:21 1997// /Simple.html/1.2/Mon Dec 9 03:30:40 1996// /Using.html/1.3/Sun Feb 16 18:44:22 1997// D ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Makefile��������������������������������������������������������������������0100644�0000764�0000144�00000014047�07405520573�016156� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign PICS-client/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = PICS-client/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign PICS-client/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/.cvsignore������������������������������������������������������������������0100644�0000764�0000144�00000000025�06136212754�016504� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Bugs.html�������������������������������������������������������������������0100644�0000764�0000144�00000001413�06301652604�016270� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML><HEAD> <TITLE>Known Bugs in W3C Sample Code Library</TITLE> <!-- Changed by: Eric Prud'hommeaux, 24-Mar-1996 --> </HEAD><BODY><P><A HREF="/"></A> <A HREF="/"><IMG BORDER="0" SRC="../../Icons/WWW/PICS48x.gif" ALT="PICS"></A> <H1>Known Bugs and Patches in W3C PICS Distribution</H1> The list of known bugs are in reverse chronological order. Please report bugs or bug-fixes to <A HREF="mailto:libpics@w3.org">libpics@w3.org</A> noting the version of the Library and what caused the bug to appear. <P> </DL><P> <HR> <ADDRESS>Eric Prud'hommeuax, <A HREF="mailto:libpics@w3.org">libpics@w3.org</A>, March 96 </ADDRESS></BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/CSLabel.html����������������������������������������������������������������0100644�0000764�0000144�00000215541�06523414474�016655� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<PRE> #include "wwwsys.h" /*#include "HTUtils.h" */ #include "HTList.h" #include "HTString.h" #include "CSParse.h" #include "CSLL.h" #include "CSLLSt.h" #define GetCSLabel(A) ((A)->target.pCSLabel) #define SETNEXTSTATE(target, subState) \ pCSParse->pTargetObject = target; \ pCSParse->currentSubState = subState; /* C H A R A C T E R S E T V A L I D A T I O N */ /* The BNF for PICS labels describes the valid character ranges for each of * the label fields. Defining NO_CHAR_TEST will disable the tedious checking * of these ranges for a slight performance increase. */ #ifdef NO_CHAR_TEST #define charSetOK(A, B, C) #define CHECK_CAR_SET(A) #define SET_CHAR_SET(A) #else /* !NO_CHAR_TEST */ typedef enum {CharSet_ALPHAS = 1, CharSet_DIGITS = 2, CharSet_PLUSMINUS = 4, CharSet_FORSLASH = 8, CharSet_EXTENS = 0x10, CharSet_BASE64_EXTRAS = 0x20, CharSet_DATE_EXTRAS = 0x40, CharSet_URL_EXTRAS = 0x80, /* ------------------ BNF names are combinations of the above ------------------- */ CharSet_NUMBER = CharSet_DIGITS | CharSet_PLUSMINUS, CharSet_ALPHANUMPM = CharSet_ALPHAS | CharSet_DIGITS | CharSet_PLUSMINUS, CharSet_TRANSMIT_NAME = CharSet_ALPHANUMPM | CharSet_FORSLASH, CharSet_EXT_ALPHANUM = CharSet_ALPHANUMPM | CharSet_EXTENS, CharSet_BASE64 = CharSet_ALPHAS | CharSet_DIGITS | CharSet_BASE64_EXTRAS, CharSet_URL = CharSet_ALPHAS | CharSet_DIGITS | CharSet_URL_EXTRAS, CharSet_DATE = CharSet_DIGITS | CharSet_DATE_EXTRAS, CharSet_EXT_DATA = CharSet_DATE | CharSet_URL | CharSet_NUMBER | CharSet_EXT_ALPHANUM } CharSet_t; PRIVATE BOOL charSetOK(CSParse_t * pCSParse, char * checkMe, CharSet_t set); #define CHECK_CAR_SET(A) \ if (!charSetOK(pCSParse, token, A)) \ return StateRet_ERROR_BAD_CHAR; #define SET_CHAR_SET(A) pCSLabel->targetCharSet = A; #endif /* !NO_CHAR_TEST */ /* C S L L S t a t e */ /* This holds label list data and the methods to view it. All application * interface is intended to go through these methods. See User/Parsing.html */ struct CSLabel_s { CSLLData_t * pCSLLData; LabelError_t * pCurrentLabelError; LabelOptions_t * pCurrentLabelOptions; Extension_t * pCurrentExtension; ExtensionData_t * pCurrentExtensionData; ServiceInfo_t * pCurrentServiceInfo; Label_t * pCurrentLabel; int currentLabelNumber; HTList * pCurrentLabelTree; SingleLabel_t * pCurrentSingleLabel; LabelRating_t * pCurrentLabelRating; Range_t * pCurrentRange; #ifndef NO_CHAR_TEST CharSet_t targetCharSet; #endif LabelTargetCallback_t * pLabelTargetCallback; LLErrorHandler_t * pLLErrorHandler; }; /* forward references to parser functions */ PRIVATE TargetObject_t LabelList_targetObject; PRIVATE TargetObject_t ServiceInfo_targetObject; PRIVATE TargetObject_t ServiceNoRat_targetObject; PRIVATE TargetObject_t ServiceError_targetObject; PRIVATE TargetObject_t Label_targetObject; PRIVATE TargetObject_t LabelError_targetObject; PRIVATE TargetObject_t LabelTree_targetObject; PRIVATE TargetObject_t SingleLabel_targetObject; PRIVATE TargetObject_t LabelRating_targetObject; PRIVATE TargetObject_t LabelRatingRange_targetObject; PRIVATE TargetObject_t Extension_targetObject; PRIVATE TargetObject_t ExtensionData_targetObject; PRIVATE TargetObject_t Awkward_targetObject; PRIVATE Check_t hasToken; PRIVATE Check_t LabelList_getVersion; PRIVATE Check_t ServiceInfo_getServiceId; PRIVATE Check_t error_getExpl; PRIVATE Check_t getOption; PRIVATE Check_t getOptionValue; PRIVATE Check_t LabelRating_getId; PRIVATE Check_t LabelRating_getValue; PRIVATE Check_t LabelRatingRange_get; PRIVATE Check_t isQuoted; PRIVATE Check_t Extension_getURL; PRIVATE Check_t ExtensionData_getData; PRIVATE Open_t LabelList_open; PRIVATE Open_t ServiceInfo_open; PRIVATE Open_t error_open; PRIVATE Open_t Label_open; PRIVATE Open_t LabelTree_open; PRIVATE Open_t SingleLabel_open; PRIVATE Open_t LabelRating_open; PRIVATE Open_t LabelRatingRange_open; PRIVATE Open_t Awkward_open; PRIVATE Open_t Extension_open; PRIVATE Open_t ExtensionData_open; PRIVATE Close_t LabelList_close; PRIVATE Close_t ServiceInfo_close; PRIVATE Close_t error_close; PRIVATE Close_t Label_close; PRIVATE Close_t LabelTree_close; PRIVATE Close_t SingleLabel_close; PRIVATE Close_t LabelRating_close; PRIVATE Close_t LabelRatingRange_close; PRIVATE Close_t Awkward_close; PRIVATE Close_t Extension_close; PRIVATE Close_t ExtensionData_close; PRIVATE Destroy_t LabelList_destroy; PRIVATE Destroy_t ServiceInfo_destroy; PRIVATE Destroy_t Label_destroy; PRIVATE Destroy_t LabelTree_destroy; PRIVATE Destroy_t SingleLabel_destroy; PRIVATE Destroy_t LabelRating_destroy; PRIVATE Destroy_t LabelRatingRange_destroy; PRIVATE Destroy_t Awkward_destroy; PRIVATE Destroy_t error_destroy; PRIVATE Destroy_t Extension_destroy; PRIVATE Destroy_t ExtensionData_destroy; PRIVATE Prep_t ServiceInfo_clearOpts; PRIVATE Prep_t LabelRating_next; PRIVATE Prep_t Extension_mandatory; PRIVATE Prep_t Extension_next; PRIVATE Prep_t ExtensionData_next; PRIVATE Prep_t SingleLabel_doClose; PRIVATE Prep_t Label_doClose; PRIVATE TargetChangeCallback_t targetChangeCallback; PRIVATE ParseErrorHandler_t parseErrorHandler; /* CSParse_doc states */ /* L A B E L L I S T P A R S E R S T A T E S */ /* This contains all the states in the BNF for PICS labels. * See User/Parsing.html for details. */ PRIVATE StateToken_t LabelList_stateTokens[] = { /* A: fresh LabelList C: expect end */ { "open",<A NAME="LabelList_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelList_A">LabelList, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"get version",<A NAME="LabelList_A"> SubState_A</A>, Punct_WHITE, &<A HREF="#LabelList_getVersion">LabelList_getVersion</A>, 0, 0, 0, &<A HREF="#ServiceInfo_N">ServiceInfo, SubState_N</A>, 0, 0}, {"end of list",<A NAME="LabelList_C"> SubState_C</A>, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#LabelList_A">LabelList, SubState_A</A>, Command_MATCHANY|Command_CLOSE, 0} }; PRIVATE TargetObject_t LabelList_targetObject = {"LabelList", &<A HREF="#LabelList_open">LabelList_open</A>, &<A HREF="#LabelList_close">LabelList_close</A>, &<A HREF="#LabelList_destroy">LabelList_destroy</A>, LabelList_stateTokens, raysize(LabelList_stateTokens), CSLLTC_LIST}; PRIVATE StateToken_t ServiceInfo_stateTokens[] = { /* A: fresh ServiceInfo B: has service id C: needs option value D: call from Awkward or NoRat to close E: call from Awkward to re-enter F: call from Awkward to handle no-ratings error */ { "open",<A NAME="ServiceInfo_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ServiceInfo_A">ServiceInfo, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "error w/o id",<A NAME="ServiceInfo_A"> SubState_A</A>, Punct_LPAREN, 0, "error", 0, 0, &<A HREF="#ServiceNoRat_N">ServiceNoRat, SubState_N</A>, 0, 0}, { "service id", SubState_A, Punct_WHITE, &<A HREF="#ServiceInfo_getServiceId">ServiceInfo_getServiceId</A>, 0, 0, 0, &<A HREF="#ServiceInfo_B">ServiceInfo, SubState_B</A>, 0, 0}, { "service error",<A NAME="ServiceInfo_B"> SubState_B</A>, Punct_LPAREN, 0, "error", 0, 0, &<A HREF="#ServiceError_N">ServiceError, SubState_N</A>, 0, 0}, { "service option", SubState_B, Punct_WHITE, &<A HREF="#getOption">getOption</A>, 0, 0, 0, &<A HREF="#ServiceInfo_C">ServiceInfo, SubState_C</A>, 0, 0}, {"service extension", SubState_B, Punct_LPAREN, 0, "extension", 0, 0, &<A HREF="#Extension_N">Extension, SubState_N</A>, 0, 0}, { "label-mark close", SubState_B, Punct_RPAREN, 0, "l", "labels", 0, &<A HREF="#LabelList_C">LabelList, SubState_C</A>, Command_CLOSE|Command_CHAIN, 0}, { "label-mark", SubState_B, Punct_WHITE|Punct_LPAREN, 0, "l", "labels", 0, &<A HREF="#Label_N">Label, SubState_N</A>, Command_CHAIN, &<A HREF="#ServiceInfo_clearOpts">ServiceInfo_clearOpts</A>}, { "option value",<A NAME="ServiceInfo_C"> SubState_C</A>, Punct_WHITE, &<A HREF="#getOptionValue">getOptionValue</A>, 0, 0, 0, &<A HREF="#ServiceInfo_B">ServiceInfo, SubState_B</A>, 0, 0}, { "close",<A NAME="ServiceInfo_D"> SubState_D</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelList_C">LabelList, SubState_C</A>, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0}, { "re-enter",<A NAME="ServiceInfo_E"> SubState_E</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ServiceInfo_N">ServiceInfo, SubState_N</A>, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0}, { "to no-rat",<A NAME="ServiceInfo_F"> SubState_F</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ServiceInfo_G">ServiceInfo, SubState_G</A>, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0}, { "no-rat opener",<A NAME="ServiceInfo_G"> SubState_G</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ServiceNoRat_N">ServiceNoRat, SubState_N</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0} }; PRIVATE TargetObject_t ServiceInfo_targetObject = {"ServiceInfo", ServiceInfo_open, &<A HREF="#ServiceInfo_close">ServiceInfo_close</A>, &<A HREF="#ServiceInfo_destroy">ServiceInfo_destroy</A>, ServiceInfo_stateTokens, raysize(ServiceInfo_stateTokens), CSLLTC_SERVICE}; PRIVATE StateToken_t Label_stateTokens[] = { /* A: fresh SingleLabel C: route to Awkward from LabelTree and LabelError D: from Awkward to LabelError */ { "open",<A NAME="Label_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Label_A">Label, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "single label mark",<A NAME="Label_A"> SubState_A</A>, Punct_WHITE, 0, "l", "labels", 0, &<A HREF="#Label_A">Label, SubState_A</A>, 0, 0}, /* stick around */ { "tree label mark", SubState_A, Punct_LPAREN, 0, "l", "labels", 0, &<A HREF="#LabelTree_N">LabelTree, SubState_N</A>, 0, 0}, { "start tree", SubState_A, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#LabelTree_N">LabelTree, SubState_N</A>, 0, 0}, { "label error", SubState_A, Punct_LPAREN, 0, "error", 0, 0, &<A HREF="#LabelError_N">LabelError, SubState_N</A>, 0, 0}, {"SingleLabel option", SubState_A, Punct_WHITE, &<A HREF="#getOption">getOption</A>, 0, 0, 0, &<A HREF="#SingleLabel_N">SingleLabel, SubState_N</A>, Command_CHAIN, 0}, { "label extension", SubState_A, Punct_LPAREN, 0, "extension", 0, 0, &<A HREF="#SingleLabel_N">SingleLabel, SubState_N</A>, Command_CHAIN, 0}, { "ratings", SubState_A, Punct_LPAREN, 0, "r", "ratings", 0, &<A HREF="#SingleLabel_N">SingleLabel, SubState_N</A>, Command_CHAIN, 0}, { "to awkward",<A NAME="Label_C"> SubState_C</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Awkward_A">Awkward, SubState_A</A>, Command_MATCHANY|Command_CLOSE, 0}, { "awkward to error",<A NAME="Label_D"> SubState_D</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Label_E">Label, SubState_E</A>, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0}, { "error channel",<A NAME="Label_E"> SubState_E</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelError_N">LabelError, SubState_N</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0} }; PRIVATE TargetObject_t Label_targetObject = {"Label", &<A HREF="#Label_open">Label_open</A>, &<A HREF="#Label_close">Label_close</A>, &<A HREF="#Label_destroy">Label_destroy</A>, Label_stateTokens, raysize(Label_stateTokens), CSLLTC_LABEL}; PRIVATE StateToken_t LabelTree_stateTokens[] = { /* A: LabelTrees have no state */ { "open",<A NAME="LabelTree_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelTree_A">LabelTree, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "label error",<A NAME="LabelTree_A"> SubState_A</A>, Punct_LPAREN, 0, "error", 0, 0, &<A HREF="#LabelError_N">LabelError, SubState_N</A>, 0, 0}, {"SingleLabel option", SubState_A, Punct_WHITE, &<A HREF="#getOption">getOption</A>, 0, 0, 0, &<A HREF="#SingleLabel_N">SingleLabel, SubState_N</A>, Command_CHAIN, 0}, { "ratingword", SubState_A, Punct_LPAREN, 0, "r", "ratings", 0, &<A HREF="#SingleLabel_N">SingleLabel, SubState_N</A>, Command_CHAIN, 0}, { "end of tree", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#Label_C">Label, SubState_C</A>, Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t LabelTree_targetObject = {"LabelTree", &<A HREF="#LabelTree_open">LabelTree_open</A>, &<A HREF="#LabelTree_close">LabelTree_close</A>, &<A HREF="#LabelTree_destroy">LabelTree_destroy</A>, LabelTree_stateTokens, raysize(LabelTree_stateTokens), CSLLTC_LABTREE}; PRIVATE StateToken_t SingleLabel_stateTokens[] = { /* A: fresh SingleLabel B: needs option value */ { "open",<A NAME="SingleLabel_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#SingleLabel_A">SingleLabel, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"label extension",<A NAME="SingleLabel_A"> SubState_A</A>, Punct_LPAREN, 0, "extension", 0, 0, &<A HREF="#Extension_N">Extension, SubState_N</A>, 0, 0}, { "label option", SubState_A, Punct_WHITE, &<A HREF="#getOption">getOption</A>, 0, 0, 0, &<A HREF="#SingleLabel_B">SingleLabel, SubState_B</A>, 0, 0}, { "ratingword", SubState_A, Punct_LPAREN, 0, "r", "ratings", 0, &<A HREF="#LabelRating_N">LabelRating, SubState_N</A>, 0, 0}, { "option value",<A NAME="SingleLabel_B"> SubState_B</A>, Punct_WHITE, &<A HREF="#getOptionValue">getOptionValue</A>, 0, 0, 0, &<A HREF="#SingleLabel_A">SingleLabel, SubState_A</A>, 0, 0} }; PRIVATE TargetObject_t SingleLabel_targetObject = {"SingleLabel", &<A HREF="#SingleLabel_open">SingleLabel_open</A>, &<A HREF="#SingleLabel_close">SingleLabel_close</A>, &<A HREF="#SingleLabel_destroy">SingleLabel_destroy</A>, SingleLabel_stateTokens, raysize(SingleLabel_stateTokens), CSLLTC_SINGLE}; PRIVATE StateToken_t LabelRating_stateTokens[] = { /* A: looking for transmit name B: looking for value C: return from range (either creates a new rating or ends) D: close and re-open */ { "open",<A NAME="LabelRating_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelRating_A">LabelRating, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "id before value",<A NAME="LabelRating_A"> SubState_A</A>, Punct_WHITE, &<A HREF="#LabelRating_getId">LabelRating_getId</A>, 0, 0, 0, &<A HREF="#LabelRating_B">LabelRating, SubState_B</A>, 0, 0}, { "id before range", SubState_A, Punct_LPAREN, &<A HREF="#LabelRating_getId">LabelRating_getId</A>, 0, 0, 0, &<A HREF="#LabelRatingRange_N">LabelRatingRange, SubState_N</A>, 0, 0}, { "value next",<A NAME="LabelRating_B"> SubState_B</A>, Punct_WHITE, &<A HREF="#LabelRating_getValue">LabelRating_getValue</A>, 0, 0, 0, &<A HREF="#LabelRating_D">LabelRating, SubState_D</A>, 0, 0}, /* opener must close last rating first */ { "value close", SubState_B, Punct_RPAREN, &<A HREF="#LabelRating_getValue">LabelRating_getValue</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#LabelRating_next">LabelRating_next</A>}, { "close",<A NAME="LabelRating_C"> SubState_C</A>, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#LabelRating_next">LabelRating_next</A>}, {"value after range", SubState_C, Punct_WHITE|Punct_LPAREN, &<A HREF="#hasToken">hasToken</A>, 0, 0, 0, &<A HREF="#LabelRating_D">LabelRating, SubState_D</A>, Command_CHAIN, 0}, /* opener must close last rating first */ { "re-enter",<A NAME="LabelRating_D"> SubState_D</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelRating_N">LabelRating, SubState_N</A>, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t LabelRating_targetObject = {"LabelRating", &<A HREF="#LabelRating_open">LabelRating_open</A>, &<A HREF="#LabelRating_close">LabelRating_close</A>, &<A HREF="#LabelRating_destroy">LabelRating_destroy</A>, LabelRating_stateTokens, raysize(LabelRating_stateTokens), CSLLTC_RATING}; PRIVATE StateToken_t LabelRatingRange_stateTokens[] = { { "open",<A NAME="LabelRatingRange_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelRatingRange_A">LabelRatingRange, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "range data",<A NAME="LabelRatingRange_A"> SubState_A</A>, Punct_WHITE, &<A HREF="#LabelRatingRange_get">LabelRatingRange_get</A>, 0, 0, 0, &<A HREF="#LabelRatingRange_A">LabelRatingRange, SubState_A</A>, 0, 0}, {"range close", SubState_A, Punct_RPAREN, &<A HREF="#LabelRatingRange_get">LabelRatingRange_get</A>, 0, 0, 0, &<A HREF="#LabelRating_C">LabelRating, SubState_C</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t LabelRatingRange_targetObject = {"LabelRatingRange", &<A HREF="#LabelRatingRange_open">LabelRatingRange_open</A>, &<A HREF="#LabelRatingRange_close">LabelRatingRange_close</A>, &<A HREF="#LabelRatingRange_destroy">LabelRatingRange_destroy</A>, LabelRatingRange_stateTokens, raysize(LabelRatingRange_stateTokens), CSLLTC_RANGE}; /* Awkward assumes that the current Label has been closed. It decides whether to chain to LabelTree, Label, or ServiceInfo */ PRIVATE StateToken_t Awkward_stateTokens[] = { { "open",<A NAME="Awkward_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Awkward_A">Awkward, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "start tree",<A NAME="Awkward_A"> SubState_A</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#LabelTree_N">LabelTree, SubState_N</A>, 0, 0}, { "label error", SubState_A, Punct_LPAREN, 0, "error", 0, 0, &<A HREF="#Awkward_B">Awkward, SubState_B</A>, 0, 0}, { "label option", SubState_A, Punct_WHITE, &<A HREF="#getOption">getOption</A>, 0, 0, 0, &<A HREF="#Label_N">Label, SubState_N</A>, Command_CHAIN, 0}, {"label extension", SubState_A, Punct_LPAREN, 0, "extension", 0, 0, &<A HREF="#Label_N">Label, SubState_N</A>, Command_CHAIN, 0}, { "rating", SubState_A, Punct_LPAREN, 0, "r", "ratings", 0, &<A HREF="#Label_N">Label, SubState_N</A>, Command_CHAIN, 0}, { "new service id", SubState_A, Punct_WHITE, &<A HREF="#isQuoted">isQuoted</A>, 0, 0, 0, &<A HREF="#ServiceInfo_E">ServiceInfo, SubState_E</A>, Command_CHAIN, 0}, { "close", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#ServiceInfo_D">ServiceInfo, SubState_D</A>, Command_CHAIN, 0}, /* close of LabelList */ { "req-denied",<A NAME="Awkward_B"> SubState_B</A>, Punct_WHITE, 0, "request-denied", 0, 0, &<A HREF="#Label_D">Label, SubState_D</A>, Command_CHAIN, 0}, { "req-denied close", SubState_B, Punct_RPAREN, 0, "request-denied", 0, 0, &<A HREF="#Label_D">Label, SubState_D</A>, Command_CHAIN, 0}, { "not-labeled", SubState_B, Punct_WHITE, 0, "not-labeled", 0, 0, &<A HREF="#Label_D">Label, SubState_D</A>, Command_CHAIN, 0}, {"not-labeled close", SubState_B, Punct_RPAREN, 0, "not-labeled", 0, 0, &<A HREF="#Label_D">Label, SubState_D</A>, Command_CHAIN, 0}, { "no-ratings", SubState_B, Punct_WHITE, 0, "no-ratings", 0, 0, &<A HREF="#ServiceInfo_F">ServiceInfo, SubState_F</A>, Command_CHAIN, 0}, { "no-ratings close", SubState_B, Punct_RPAREN, 0, "no-ratings", 0, 0, &<A HREF="#ServiceInfo_F">ServiceInfo, SubState_F</A>, Command_CHAIN, 0} }; PRIVATE TargetObject_t Awkward_targetObject = {"Awkward", &<A HREF="#Awkward_open">Awkward_open</A>, &<A HREF="#Awkward_close">Awkward_close</A>, &<A HREF="#Awkward_destroy">Awkward_destroy</A>, Awkward_stateTokens, raysize(Awkward_stateTokens), 0}; /* error parsing states */ PRIVATE StateToken_t ServiceNoRat_stateTokens[] = { { "open",<A NAME="ServiceNoRat_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ServiceNoRat_A">ServiceNoRat, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "no-ratings",<A NAME="ServiceNoRat_A"> SubState_A</A>, Punct_WHITE, 0, "no-ratings", 0, 0, &<A HREF="#ServiceNoRat_B">ServiceNoRat, SubState_B</A>, 0, 0}, { "no-ratings close", SubState_A, Punct_RPAREN, 0, "no-ratings", 0, 0, &<A HREF="#ServiceInfo_D">ServiceInfo, SubState_D</A>, Command_CLOSE|Command_CHAIN, 0}, { "explanation",<A NAME="ServiceNoRat_B"> SubState_B</A>, Punct_WHITE, &<A HREF="#error_getExpl">error_getExpl</A>, 0, 0, 0, &<A HREF="#ServiceNoRat_B">ServiceNoRat, SubState_B</A>, 0, 0}, {"explanation close", SubState_B, Punct_RPAREN, &<A HREF="#error_getExpl">error_getExpl</A>, 0, 0, 0, &<A HREF="#ServiceInfo_D">ServiceInfo, SubState_D</A>, Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t ServiceNoRat_targetObject = {"ServiceNoRat", &<A HREF="#error_open">error_open</A>, &<A HREF="#error_close">error_close</A>, &<A HREF="#error_destroy">error_destroy</A>, ServiceNoRat_stateTokens, raysize(ServiceNoRat_stateTokens), CSLLTC_NORAT}; PRIVATE StateToken_t ServiceError_stateTokens[] = { { "open",<A NAME="ServiceError_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ServiceError_A">ServiceError, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "req-denied",<A NAME="ServiceError_A"> SubState_A</A>, Punct_WHITE, 0, "request-denied", 0, 0, &<A HREF="#ServiceError_B">ServiceError, SubState_B</A>, 0, 0}, { "req-denied close", SubState_A, Punct_RPAREN, 0, "request-denied", 0, 0, &<A HREF="#ServiceInfo_D">ServiceInfo, SubState_D</A>, Command_CLOSE|Command_CHAIN, 0}, { "service-unavail", SubState_A, Punct_WHITE, 0,"service-unavailable", 0, 0, &<A HREF="#ServiceError_B">ServiceError, SubState_B</A>, 0, 0}, {"service-unavail close", SubState_A, Punct_RPAREN, 0,"service-unavailable", 0, 0, &<A HREF="#ServiceInfo_D">ServiceInfo, SubState_D</A>, Command_CLOSE|Command_CHAIN, 0}, { "explanation",<A NAME="ServiceError_B"> SubState_B</A>, Punct_WHITE, &<A HREF="#error_getExpl">error_getExpl</A>, 0, 0, 0, &<A HREF="#ServiceError_B">ServiceError, SubState_B</A>, 0, 0}, { "explanation close", SubState_B, Punct_RPAREN, &<A HREF="#error_getExpl">error_getExpl</A>, 0, 0, 0, &<A HREF="#ServiceInfo_D">ServiceInfo, SubState_D</A>, Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t ServiceError_targetObject = {"ServiceError", &<A HREF="#error_open">error_open</A>, &<A HREF="#error_close">error_close</A>, &<A HREF="#error_destroy">error_destroy</A>, ServiceError_stateTokens, raysize(ServiceError_stateTokens), CSLLTC_SRVERR}; PRIVATE StateToken_t LabelError_stateTokens[] = { { "open",<A NAME="LabelError_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelError_A">LabelError, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "req-denied",<A NAME="LabelError_A"> SubState_A</A>, Punct_WHITE, 0, "request-denied", 0, 0, &<A HREF="#LabelError_B">LabelError, SubState_B</A>, 0, 0}, { "req-denied close", SubState_A, Punct_RPAREN, 0, "request-denied", 0, 0, &<A HREF="#Label_C">Label, SubState_C</A>, Command_CLOSE|Command_CHAIN, 0}, { "not-labeled", SubState_A, Punct_WHITE, 0, "not-labeled", 0, 0, &<A HREF="#LabelError_B">LabelError, SubState_B</A>, 0, 0}, {"not-labeled close", SubState_A, Punct_RPAREN, 0, "not-labeled", 0, 0, &<A HREF="#Label_C">Label, SubState_C</A>, Command_CLOSE|Command_CHAIN, 0}, { "explanation",<A NAME="LabelError_B"> SubState_B</A>, Punct_WHITE, &<A HREF="#error_getExpl">error_getExpl</A>, 0, 0, 0, &<A HREF="#LabelError_B">LabelError, SubState_B</A>, 0, 0}, {"explanation close", SubState_B, Punct_RPAREN, &<A HREF="#error_getExpl">error_getExpl</A>, 0, 0, 0, &<A HREF="#Label_C">Label, SubState_C</A>, Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t LabelError_targetObject = {"LabelError", &<A HREF="#error_open">error_open</A>, &<A HREF="#error_close">error_close</A>, &<A HREF="#error_destroy">error_destroy</A>, LabelError_stateTokens, raysize(LabelError_stateTokens), CSLLTC_LABERR}; PRIVATE StateToken_t Extension_stateTokens[] = { /* A: looking for mand/opt B: looking for URL C: back from ExtensionData */ { "open",<A NAME="Extension_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Extension_A">Extension, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "mandatory",<A NAME="Extension_A"> SubState_A</A>, Punct_WHITE, 0, "mandatory", 0, 0, &<A HREF="#Extension_B">Extension, SubState_B</A>, 0, &<A HREF="#Extension_mandatory">Extension_mandatory</A>}, { "optional", SubState_A, Punct_WHITE, 0, "optional", 0, 0, &<A HREF="#Extension_B">Extension, SubState_B</A>, 0, 0}, { "URL",<A NAME="Extension_B"> SubState_B</A>, Punct_WHITE, &<A HREF="#Extension_getURL">Extension_getURL</A>, 0, 0, 0, &<A HREF="#ExtensionData_N">ExtensionData, SubState_N</A>, 0, 0}, { "URL open", SubState_B, Punct_LPAREN, &<A HREF="#Extension_getURL">Extension_getURL</A>, 0, 0, 0, &<A HREF="#ExtensionData_N">ExtensionData, SubState_N</A>, Command_CHAIN|Command_NOTOKEN, 0}, { "URL close", SubState_B, Punct_RPAREN, &<A HREF="#Extension_getURL">Extension_getURL</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Extension_next">Extension_next</A>}, { "more data",<A NAME="Extension_C"> SubState_C</A>, Punct_WHITE|Punct_LPAREN|Punct_RPAREN, &<A HREF="#hasToken">hasToken</A>, 0, 0, 0, &<A HREF="#ExtensionData_N">ExtensionData, SubState_N</A>, Command_CHAIN, 0}, { "nest", SubState_C, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#ExtensionData_N">ExtensionData, SubState_N</A>, Command_CHAIN, 0}, { "close", SubState_C, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Extension_next">Extension_next</A>} }; PRIVATE TargetObject_t Extension_targetObject = {"Extension", &<A HREF="#Extension_open">Extension_open</A>, &<A HREF="#Extension_close">Extension_close</A>, &<A HREF="#Extension_destroy">Extension_destroy</A>, Extension_stateTokens, raysize(Extension_stateTokens), CSLLTC_EXTEN}; PRIVATE StateToken_t ExtensionData_stateTokens[] = { /* A: looking for data B: back from recursive ExtensionData (identical to Extension B) */ { "open",<A NAME="ExtensionData_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ExtensionData_A">ExtensionData, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "lparen",<A NAME="ExtensionData_A"> SubState_A</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#ExtensionData_N">ExtensionData, SubState_N</A>, 0, 0}, { "close", SubState_A, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#ExtensionData_next">ExtensionData_next</A>}, { "data", SubState_A, Punct_WHITE, &<A HREF="#ExtensionData_getData">ExtensionData_getData</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#ExtensionData_next">ExtensionData_next</A>}, {"data punct", SubState_A, Punct_LPAREN|Punct_RPAREN, &<A HREF="#ExtensionData_getData">ExtensionData_getData</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE|Command_CHAIN|Command_NOTOKEN, &<A HREF="#ExtensionData_next">ExtensionData_next</A>}, { "more data",<A NAME="ExtensionData_B"> SubState_B</A>, Punct_WHITE|Punct_LPAREN|Punct_RPAREN, &<A HREF="#hasToken">hasToken</A>, 0, 0, 0, &<A HREF="#ExtensionData_N">ExtensionData, SubState_N</A>, Command_CHAIN, 0}, { "nest", SubState_B, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#ExtensionData_N">ExtensionData, SubState_N</A>, Command_CHAIN, 0}, { "close", SubState_B, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#ExtensionData_next">ExtensionData_next</A>} }; PRIVATE TargetObject_t ExtensionData_targetObject = {"ExtensionData", &<A HREF="#ExtensionData_open">ExtensionData_open</A>, &<A HREF="#ExtensionData_close">ExtensionData_close</A>, &<A HREF="#ExtensionData_destroy">ExtensionData_destroy</A>, ExtensionData_stateTokens, raysize(ExtensionData_stateTokens), CSLLTC_EXTDATA}; /* CSParse_doc end */ /* S T A T E A S S O C I A T I O N - associate a CSLabel with the label list data The label list data is kept around until all states referencing it are destroyed */ typedef struct { CSLabel_t * pCSLabel; CSLLData_t * pCSLLData; } CSLabelAssoc_t; PRIVATE HTList * CSLabelAssocs = 0; PRIVATE void CSLabelAssoc_add(CSLabel_t * pCSLabel, CSLLData_t * pCSLLData) { CSLabelAssoc_t * pElement; if ((pElement = (CSLabelAssoc_t *) HT_CALLOC(1, sizeof(CSLabelAssoc_t))) == NULL) HT_OUTOFMEM("CSLabelAssoc_t"); pElement->pCSLabel = pCSLabel; pElement->pCSLLData = pCSLLData; if (!CSLabelAssocs) CSLabelAssocs = HTList_new(); HTList_appendObject(CSLabelAssocs, (void *)pElement); } PRIVATE CSLabelAssoc_t * CSLabelAssoc_findByData(CSLLData_t * pCSLLData) { HTList * assocs = CSLabelAssocs; CSLabelAssoc_t * pElement; while ((pElement = (CSLabelAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSLLData == pCSLLData) return pElement; return 0; } PRIVATE CSLabelAssoc_t * CSLabelAssoc_findByState(CSLabel_t * pCSLabel) { HTList * assocs = CSLabelAssocs; CSLabelAssoc_t * pElement; while ((pElement = (CSLabelAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSLabel == pCSLabel) return pElement; return 0; } PRIVATE void CSLabelAssoc_removeByState(CSLabel_t * pCSLabel) { CSLabelAssoc_t * pElement = CSLabelAssoc_findByState(pCSLabel); if (!pElement) return; HTList_removeObject(CSLabelAssocs, (void *)pElement); HT_FREE(pElement); } /* P R I V A T E C O N S T R U C T O R S / D E S T R U C T O R S */ /* These serve the public constructors */ PRIVATE LabelError_t * LabelError_new(void) { LabelError_t * me; if ((me = (LabelError_t *) HT_CALLOC(1, sizeof(LabelError_t))) == NULL) HT_OUTOFMEM("LabelError_t"); me->explanations = HTList_new(); return me; } PRIVATE void LabelError_free(LabelError_t * me) { char * explanation; if (!me) return; while ((explanation = (char *) HTList_removeLastObject(me->explanations))) HT_FREE(explanation); HT_FREE(me); } PRIVATE LabelOptions_t * LabelOptions_new(LabelOptions_t * pParentLabelOptions) { LabelOptions_t * me; if ((me = (LabelOptions_t *) HT_CALLOC(1, sizeof(LabelOptions_t))) == NULL) HT_OUTOFMEM("LabelOptions_t"); me->pParentLabelOptions = pParentLabelOptions; return me; } PRIVATE void LabelOptions_free(LabelOptions_t * me) { char * comment; DVal_clear(&me->at); SVal_clear(&me->by); SVal_clear(&me->complete_label); BVal_clear(&me->generic); SVal_clear(&me->fur); SVal_clear(&me->MIC_md5); DVal_clear(&me->on); SVal_clear(&me->signature_PKCS); DVal_clear(&me->until); while ((comment = HTList_removeLastObject(me->comments))) HT_FREE(comment); HT_FREE(me); } PRIVATE ExtensionData_t * ExtensionData_new(void) { ExtensionData_t * me; if ((me = (ExtensionData_t *) HT_CALLOC(1, sizeof(ExtensionData_t))) == NULL) HT_OUTOFMEM("ExtensionData_t"); return me; } PRIVATE void ExtensionData_free(ExtensionData_t * me) { ExtensionData_t * pExtensionData; while ((pExtensionData = (ExtensionData_t *) HTList_removeLastObject(me->moreData))) ExtensionData_free(pExtensionData); HT_FREE(me->text); HT_FREE(me); } PRIVATE Extension_t * Extension_new(void) { Extension_t * me; if ((me = (Extension_t *) HT_CALLOC(1, sizeof(Extension_t))) == NULL) HT_OUTOFMEM("Extension_t"); return me; } PRIVATE void Extension_free(Extension_t * me) { ExtensionData_t * pExtensionData; while ((pExtensionData = (ExtensionData_t *) HTList_removeLastObject(me->extensionData))) ExtensionData_free(pExtensionData); SVal_clear(&me->url); HT_FREE(me); } PRIVATE LabelRating_t * LabelRating_new(void) { LabelRating_t * me; if ((me = (LabelRating_t *) HT_CALLOC(1, sizeof(LabelRating_t))) == NULL) HT_OUTOFMEM("LabelRating_t"); /* don't initialize HTList me->ranges as it may be just a value */ return me; } PRIVATE void LabelRating_free(LabelRating_t * me) { Range_t * pRange; while ((pRange = (Range_t *) HTList_removeLastObject(me->ranges))) HT_FREE(pRange); SVal_clear(&me->identifier); HT_FREE(me); } PRIVATE SingleLabel_t * SingleLabel_new(LabelOptions_t * pLabelOptions, LabelOptions_t * pParentLabelOptions) { SingleLabel_t * me; if ((me = (SingleLabel_t *) HT_CALLOC(1, sizeof(SingleLabel_t))) == NULL) HT_OUTOFMEM("SingleLabel_t"); me->labelRatings = HTList_new(); me->pLabelOptions = pLabelOptions ? pLabelOptions : LabelOptions_new(pParentLabelOptions); return me; } PRIVATE void SingleLabel_free(SingleLabel_t * me) { LabelRating_t * pLabelRating; while ((pLabelRating = (LabelRating_t *) HTList_removeLastObject(me->labelRatings))) LabelRating_free(pLabelRating); LabelOptions_free(me->pLabelOptions); HT_FREE(me); } PRIVATE Label_t * Label_new(void) { Label_t * me; if ((me = (Label_t *) HT_CALLOC(1, sizeof(Label_t))) == NULL) HT_OUTOFMEM("Label_t"); /* dont initialize HTList me->singleLabels */ return me; } PRIVATE void Label_free(Label_t * me) { SingleLabel_t * pSingleLabel; if (me->pSingleLabel) SingleLabel_free(me->pSingleLabel); else /* if both of these are (erroneously) defined, mem checkers will pick it up */ while ((pSingleLabel = (SingleLabel_t *) HTList_removeLastObject(me->singleLabels))) SingleLabel_free(pSingleLabel); LabelError_free(me->pLabelError); HT_FREE(me); } PRIVATE ServiceInfo_t * ServiceInfo_new() { ServiceInfo_t * me; if ((me = (ServiceInfo_t *) HT_CALLOC(1, sizeof(ServiceInfo_t))) == NULL) HT_OUTOFMEM("ServiceInfo_t"); me->labels = HTList_new(); me->pLabelOptions = LabelOptions_new(0); return me; } PRIVATE void ServiceInfo_free(ServiceInfo_t * me) { Label_t * pLabel; while ((pLabel = (Label_t *) HTList_removeLastObject(me->labels))) Label_free(pLabel); SVal_clear(&me->rating_service); LabelOptions_free(me->pLabelOptions); LabelError_free(me->pLabelError); HT_FREE(me); } PRIVATE CSLLData_t * CSLLData_new(void) { CSLLData_t * me; if ((me = (CSLLData_t *) HT_CALLOC(1, sizeof(CSLLData_t))) == NULL) HT_OUTOFMEM("CSLLData_t"); me->serviceInfos = HTList_new(); return me; } PRIVATE void CSLLData_free(CSLLData_t * me) { ServiceInfo_t * pServiceInfo; if (CSLabelAssoc_findByData(me)) return; while ((pServiceInfo = (ServiceInfo_t *) HTList_removeLastObject(me->serviceInfos))) ServiceInfo_free(pServiceInfo); FVal_clear(&me->version); LabelError_free(me->pLabelError); HT_FREE(me); } /* P U B L I C C O N S T R U C T O R S / D E S T R U C T O R S */ PUBLIC CSLabel_t * CSLabel_new(CSLLData_t * pCSLLData, LabelTargetCallback_t * pLabelTargetCallback, LLErrorHandler_t * pLLErrorHandler) { CSLabel_t * me; if ((me = (CSLabel_t *) HT_CALLOC(1, sizeof(CSLabel_t))) == NULL) HT_OUTOFMEM("CSLabel_t"); me->pCSLLData = pCSLLData; me->pLabelTargetCallback = pLabelTargetCallback; me->pLLErrorHandler = pLLErrorHandler; CSLabelAssoc_add(me, pCSLLData); return me; } PUBLIC CSLabel_t * CSLabel_copy(CSLabel_t * old) { CSLabel_t * me = CSLabel_new(old->pCSLLData, old->pLabelTargetCallback, old->pLLErrorHandler); memcpy(me, old, sizeof(CSLabel_t)); return me; } PUBLIC void CSLabel_free(CSLabel_t * me) { CSLLData_t * pCSLLData = me->pCSLLData; CSLabelAssoc_removeByState(me); HT_FREE(me); CSLLData_free(pCSLLData); } PUBLIC CSLLData_t * CSLabel_getCSLLData(CSLabel_t * me) {return me->pCSLLData;} PUBLIC LabelError_t * CSLabel_getLabelError(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabelError;} PUBLIC LabelOptions_t * CSLabel_getLabelOptions(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabelOptions;} PUBLIC ServiceInfo_t * CSLabel_getServiceInfo(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentServiceInfo;} PUBLIC char * CSLabel_getServiceName(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentServiceInfo ? SVal_value(&pCSLabel->pCurrentServiceInfo->rating_service): 0;} PUBLIC Label_t * CSLabel_getLabel(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabel;} PUBLIC int CSLabel_getLabelNumber(CSLabel_t * pCSLabel) {return pCSLabel->currentLabelNumber;} PUBLIC SingleLabel_t * CSLabel_getSingleLabel(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentSingleLabel;} PUBLIC LabelRating_t * CSLabel_getLabelRating(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabelRating;} PUBLIC char * CSLabel_getRatingName(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabelRating ? SVal_value(&pCSLabel->pCurrentLabelRating->identifier): 0;} PUBLIC Range_t * CSLabel_getLabelRatingRange(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentRange;} PUBLIC char * CSLabel_getRatingStr(CSLabel_t * pCSLabel) { HTChunk * pChunk; HTList * ranges; Range_t * curRange; FVal_t fVal; int count = 0; fVal = CSLabel_getLabelRating(pCSLabel)->value; if (FVal_initialized(&fVal)) return FVal_toStr(&fVal); pChunk = HTChunk_new(20); ranges = CSLabel_getLabelRating(pCSLabel)->ranges; while ((curRange = (Range_t *) HTList_nextObject(ranges))) { char * ptr; count++; ptr = Range_toStr(curRange); if (count > 1) HTChunk_puts(pChunk, " "); HTChunk_puts(pChunk, ptr); HT_FREE(ptr); } return HTChunk_toCString(pChunk); } PUBLIC CSParse_t * CSParse_newLabel(LabelTargetCallback_t * pLabelTargetCallback, LLErrorHandler_t * pLLErrorHandler) { CSParse_t * me = CSParse_new(); me->pParseContext->engineOf = &CSParse_targetParser; me->pParseContext->pTargetChangeCallback = &targetChangeCallback; me->pParseContext->pParseErrorHandler = &parseErrorHandler; me->target.pCSLabel = CSLabel_new(CSLLData_new(), pLabelTargetCallback, pLLErrorHandler); me->pTargetObject = &LabelList_targetObject; me->currentSubState = SubState_N; return me; } PUBLIC CSLabel_t * CSParse_getLabel(CSParse_t * me) { return (me->target.pCSLabel); } PUBLIC BOOL CSParse_deleteLabel(CSParse_t * pCSParse) { CSLabel_t * me = GetCSLabel(pCSParse); CSLLData_free(CSLabel_getCSLLData(me)); CSLabel_free(me); CSParse_delete(pCSParse); return YES; } /* D E F A U L T P A R S I N G H A N D L E R S */ PRIVATE StateRet_t targetChangeCallback(CSParse_t * pCSParse, TargetObject_t * pTargetObject, CSParseTC_t target, BOOL closed, void * pVoid) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pLabelTargetCallback) return (*pCSLabel->pLabelTargetCallback)(pCSLabel, pCSParse, (CSLLTC_t)target, closed, pVoid); return StateRet_OK; } PRIVATE StateRet_t parseErrorHandler(CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pLLErrorHandler) return (*pCSLabel->pLLErrorHandler)(pCSLabel, pCSParse, token, demark, errorCode); return errorCode; } /* CSParse_doc methods */ /* P A R S I N G S T A T E F U N C T I O N S */ #ifndef NO_CHAR_TEST PRIVATE BOOL charSetOK(CSParse_t * pCSParse, char * checkMe, CharSet_t set) { for (;*checkMe;checkMe++) { if (set & CharSet_ALPHAS && ((*checkMe >= 'A' && *checkMe <= 'Z') || (*checkMe >= 'a' && *checkMe <= 'z'))) continue; if (set & CharSet_DIGITS && ((*checkMe >= '0' && *checkMe <= '9') || *checkMe == '.')) continue; if (set & CharSet_PLUSMINUS && ((*checkMe == '+' || *checkMe == '-'))) continue; if (set & CharSet_FORSLASH && *checkMe == '/') continue; if (set & CharSet_BASE64_EXTRAS && ((*checkMe == '+' || *checkMe == '/' || *checkMe == '='))) continue; if (set & CharSet_DATE_EXTRAS && (*checkMe == '.' || *checkMe == ':' || *checkMe == '-' || *checkMe == 'T')) continue; /* RFC1738:2.1:"+.-","#%",";/"?:@=&" 2.2:"$-_.+!*'()," */ if (set & CharSet_URL_EXTRAS && (*checkMe == ':' || *checkMe == '?' || *checkMe == '#' || *checkMe == '%' || *checkMe == '/' || *checkMe == '.' || *checkMe == '-' || *checkMe == '_' || *checkMe == '\\')) continue; /* '.' | ' ' | ',' | ';' | ':' | '&' | '=' | '?' | '!' | '*' | '~' | '@' | '#' */ if (set & CharSet_EXTENS && (*checkMe == '.' || *checkMe == ' ' || *checkMe == ',' || *checkMe == ';' || *checkMe == ':' || *checkMe == '&' || *checkMe == '=' || *checkMe == '?' || *checkMe == '!' || *checkMe == '*' || *checkMe == '~' || *checkMe == '@' || *checkMe == '#' || *checkMe == '\''|| *checkMe == '/' || *checkMe == '-')) continue; pCSParse->pParseContext->pTokenError = checkMe; return FALSE; } return TRUE; } #endif /* !NO_CHAR_TEST */ PRIVATE StateRet_t <A NAME="isQuoted">isQuoted</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { ParseContext_t * pParseContext = pCSParse->pParseContext; if (!pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; return StateRet_OK; } PRIVATE StateRet_t <A NAME="hasToken">hasToken</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { return token ? StateRet_OK : StateRet_WARN_NO_MATCH; } #if 0 PRIVATE StateRet_t <A NAME="clearToken">clearToken</A>(CSParse_t * pCSParse, char * token, char demark) { HTChunk_clear(pCSParse->token); return StateRet_OK; } #endif /* getOption - see if token matches an option. This may be called by: ServiceInfo: add option to existent options, pCurrentLabelError is set by ServiceInfo_open Label: kick off SingleLabel - SingleLabel_new(), pCurrentLabelError is 0 SingleLabel: add another option to existent options, pCurrentLabelError is set by SingleLabel_open */ #define CSOffsetOf(s,m) (size_t)&(((s *)0)->m) #define CHECK_OPTION_TOKEN_BVAL1(text, pointer) \ if (!strcasecomp(token, text)) {\ pCSParse->pParseContext->valTarget.pTargetBVal = pointer;\ pCSParse->pParseContext->valType = ValType_BVAL;\ break;\ } #define CHECK_OPTION_TOKEN_FVAL1(text, pointer) \ if (!strcasecomp(token, text)) {\ pCSParse->pParseContext->valTarget.pTargetFVal = pointer;\ pCSParse->pParseContext->valType = ValType_FVAL;\ break;\ } #define CHECK_OPTION_TOKEN_SVAL1(text, pointer, charSet) \ if (!strcasecomp(token, text)) {\ pCSParse->pParseContext->valTarget.pTargetSVal = pointer;\ pCSParse->pParseContext->valType = ValType_SVAL;\ SET_CHAR_SET(charSet)\ break;\ } #define CHECK_OPTION_TOKEN_DVAL1(text, pointer) \ if (!strcasecomp(token, text)) {\ pCSParse->pParseContext->valTarget.pTargetDVal = pointer;\ pCSParse->pParseContext->valType = ValType_DVAL;\ break;\ } PRIVATE StateRet_t <A NAME="getOption">getOption</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); LabelOptions_t * me = pCSLabel->pCurrentLabelOptions; if (!token) return StateRet_WARN_NO_MATCH; if (!me) me = pCSLabel->pCurrentLabelOptions = LabelOptions_new(pCSLabel->pCurrentServiceInfo->pLabelOptions); /* match token against legal options */ pCSParse->pParseContext->valType = ValType_NONE; /* use valType to flag a match */ do { /* fake do loop for break statements (to religiously avoid the goto) */ CHECK_OPTION_TOKEN_DVAL1("at", &me->at) CHECK_OPTION_TOKEN_SVAL1("by", &me->by, CharSet_EXT_ALPHANUM) CHECK_OPTION_TOKEN_SVAL1("complete_label", &me->complete_label, CharSet_URL) CHECK_OPTION_TOKEN_SVAL1("full", &me->complete_label, CharSet_URL) CHECK_OPTION_TOKEN_SVAL1("for", &me->fur, CharSet_URL) CHECK_OPTION_TOKEN_BVAL1("generic", &me->generic) CHECK_OPTION_TOKEN_BVAL1("gen", &me->generic) CHECK_OPTION_TOKEN_SVAL1("MIC-md5", &me->MIC_md5, CharSet_BASE64) CHECK_OPTION_TOKEN_SVAL1("md5", &me->MIC_md5, CharSet_BASE64) CHECK_OPTION_TOKEN_DVAL1("on", &me->on) CHECK_OPTION_TOKEN_SVAL1("signature-PKCS", &me->signature_PKCS, CharSet_BASE64) CHECK_OPTION_TOKEN_DVAL1("until", &me->until) CHECK_OPTION_TOKEN_DVAL1("exp", &me->until) if (!strcasecomp(token, "comment")) { pCSParse->pParseContext->valTarget.pTargetList = &me->comments; pCSParse->pParseContext->valType = ValType_COMMENT; break; } } while (0); if (pCSParse->pParseContext->valType == ValType_NONE) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; return StateRet_OK; } PRIVATE StateRet_t <A NAME="getOptionValue">getOptionValue</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); switch (pCSParse->pParseContext->valType) { case ValType_BVAL: BVal_readVal(pCSParse->pParseContext->valTarget.pTargetBVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_FVAL: CHECK_CAR_SET(CharSet_NUMBER) FVal_readVal(pCSParse->pParseContext->valTarget.pTargetFVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_SVAL: CHECK_CAR_SET(pCSLabel->targetCharSet) SVal_readVal(pCSParse->pParseContext->valTarget.pTargetSVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_DVAL: CHECK_CAR_SET(CharSet_DATE) DVal_readVal(pCSParse->pParseContext->valTarget.pTargetDVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_COMMENT: CHECK_CAR_SET(CharSet_EXT_ALPHANUM) { char * ptr = 0; StrAllocCopy(ptr, token); HTList_appendObject(*pCSParse->pParseContext->valTarget.pTargetList, (void *)ptr); } break; default: break; } return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelList_open">LabelList_open</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelList_getVersion">LabelList_getVersion</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { static const char versionPrefix[] = "PICS-"; CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (!token) return StateRet_WARN_NO_MATCH; if (strncasecomp(token, versionPrefix, sizeof(versionPrefix)-1)) return StateRet_WARN_NO_MATCH; token += sizeof(versionPrefix)-1; CHECK_CAR_SET(CharSet_NUMBER) FVal_readVal(&pCSLabel->pCSLLData->version, token); return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelList_close">LabelList_close</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_DONE; } PRIVATE void LabelList_destroy(CSParse_t * pCSParse) { } PRIVATE StateRet_t <A NAME="ServiceInfo_open">ServiceInfo_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentServiceInfo = ServiceInfo_new(); pCSLabel->currentLabelNumber = 0; HTList_appendObject(pCSLabel->pCSLLData->serviceInfos, (void *)pCSLabel->pCurrentServiceInfo); pCSLabel->pCurrentLabelOptions = pCSLabel->pCurrentServiceInfo->pLabelOptions; return StateRet_OK; } PRIVATE StateRet_t <A NAME="ServiceInfo_getServiceId">ServiceInfo_getServiceId</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_URL) SVal_readVal(&pCSLabel->pCurrentServiceInfo->rating_service, token); return StateRet_OK; } PRIVATE StateRet_t <A NAME="ServiceInfo_close">ServiceInfo_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentServiceInfo = 0; return StateRet_OK; } PRIVATE void ServiceInfo_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList_removeObject(pCSLabel->pCSLLData->serviceInfos, (void *)pCSLabel->pCurrentServiceInfo); ServiceInfo_free(pCSLabel->pCurrentServiceInfo); pCSLabel->pCurrentServiceInfo = 0; } PRIVATE StateRet_t <A NAME="ServiceInfo_clearOpts">ServiceInfo_clearOpts</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabelOptions = 0; /* needed to flag new SingleLabel started by option */ return StateRet_OK; } PRIVATE StateRet_t <A NAME="Label_open">Label_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabel = Label_new(); pCSLabel->currentLabelNumber++; HTList_appendObject(pCSLabel->pCurrentServiceInfo->labels, (void*)pCSLabel->pCurrentLabel); return StateRet_OK; } PRIVATE StateRet_t <A NAME="Label_close">Label_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabel = 0; return StateRet_OK; } PRIVATE void Label_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList_removeObject(pCSLabel->pCurrentServiceInfo->labels, pCSLabel->pCurrentLabel); Label_free(pCSLabel->pCurrentLabel); pCSLabel->pCurrentLabel = 0; } PRIVATE StateRet_t <A NAME="LabelTree_open">LabelTree_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCSLLData->hasTree = 1; pCSLabel->pCurrentLabelTree = pCSLabel->pCurrentLabel->singleLabels = HTList_new(); return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelTree_close">LabelTree_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); /* Label_close(pCSParse, token, demark); */ pCSLabel->pCurrentLabelTree = 0; return StateRet_OK; } PRIVATE void LabelTree_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); SingleLabel_t * pSingleLabel; while ((pSingleLabel = (SingleLabel_t *) HTList_removeLastObject(pCSLabel->pCurrentLabel->singleLabels))) SingleLabel_free(pSingleLabel); HTList_delete(pCSLabel->pCurrentLabel->singleLabels); pCSLabel->pCurrentLabel->singleLabels = 0; } PRIVATE StateRet_t <A NAME="SingleLabel_open">SingleLabel_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentSingleLabel = SingleLabel_new(pCSLabel->pCurrentLabelOptions, pCSLabel->pCurrentServiceInfo->pLabelOptions); if (pCSLabel->pCurrentLabel->singleLabels) HTList_appendObject(pCSLabel->pCurrentLabel->singleLabels, (void*)pCSLabel->pCurrentSingleLabel); else pCSLabel->pCurrentLabel->pSingleLabel = pCSLabel->pCurrentSingleLabel; pCSLabel->pCurrentLabelOptions = pCSLabel->pCurrentSingleLabel->pLabelOptions; return StateRet_OK; } PRIVATE StateRet_t <A NAME="SingleLabel_close">SingleLabel_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentSingleLabel = 0; return StateRet_OK; } PRIVATE void SingleLabel_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pCurrentLabel->pSingleLabel) pCSLabel->pCurrentLabel->pSingleLabel = 0; else HTList_removeObject(pCSLabel->pCurrentLabel->singleLabels, (void *)pCSLabel->pCurrentSingleLabel); SingleLabel_free(pCSLabel->pCurrentSingleLabel); pCSLabel->pCurrentSingleLabel = 0; } PRIVATE StateRet_t <A NAME="LabelRating_open">LabelRating_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (!pCSLabel->pCurrentSingleLabel) /* switched from label to rating on "r" rather than <option> */ SingleLabel_open(pCSParse, token, demark); pCSLabel->pCurrentLabelRating = LabelRating_new(); HTList_appendObject(pCSLabel->pCurrentSingleLabel->labelRatings, (void*)pCSLabel->pCurrentLabelRating); pCSLabel->pCurrentLabelOptions = 0; return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelRating_getId">LabelRating_getId</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_TRANSMIT_NAME) SVal_readVal(&pCSLabel->pCurrentLabelRating->identifier, token); return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelRating_getValue">LabelRating_getValue</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; FVal_readVal(&pCSLabel->pCurrentLabelRating->value, token); return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelRating_close">LabelRating_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabelRating = 0; return StateRet_OK; } PRIVATE void LabelRating_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList_removeObject(pCSLabel->pCurrentSingleLabel->labelRatings, (void *)pCSLabel->pCurrentLabelRating); LabelRating_free(pCSLabel->pCurrentLabelRating); pCSLabel->pCurrentLabelRating = 0; } PRIVATE StateRet_t <A NAME="LabelRating_next">LabelRating_next</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); SingleLabel_doClose(pCSParse, token, demark); if (pCSLabel->pCurrentLabelTree) { SETNEXTSTATE(<A HREF="#LabelTree_A">LabelTree_targetObject, SubState_A</A>); } else { Label_doClose(pCSParse, token, demark); SETNEXTSTATE(<A HREF="#Awkward_A">Awkward_targetObject, SubState_A</A>); } return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelRatingRange_open">LabelRatingRange_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentRange = 0; pCSLabel->pCurrentLabelRating->ranges = HTList_new(); return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelRatingRange_get">LabelRatingRange_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); LabelRating_t * pLabelRating = pCSLabel->pCurrentLabelRating; Range_t * me; char * ptr, * backPtr; if (!token) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; if ((me = (Range_t *) HT_CALLOC(1, sizeof(Range_t))) == NULL) HT_OUTOFMEM("Range_t"); /* me = Range_new(); */ HTList_appendObject(pLabelRating->ranges, (void *)me); backPtr = ptr = token; while (*ptr) { if (*ptr == ':') { *ptr = 0; ptr++; break; } ptr++; } FVal_readVal(&me->min, backPtr); if (*ptr) FVal_readVal(&me->max, ptr); return StateRet_OK; } PRIVATE StateRet_t <A NAME="LabelRatingRange_close">LabelRatingRange_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentRange = 0; return StateRet_OK; } PRIVATE void LabelRatingRange_destroy(CSParse_t * pCSParse) { } PRIVATE StateRet_t <A NAME="Awkward_open">Awkward_open</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t <A NAME="Awkward_close">Awkward_close</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE void Awkward_destroy(CSParse_t * pCSParse) { } PRIVATE StateRet_t <A NAME="error_open">error_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabelError = LabelError_new(); if (pCSLabel->pCurrentLabel) pCSLabel->pCurrentLabel->pLabelError = pCSLabel->pCurrentLabelError; else pCSLabel->pCurrentServiceInfo->pLabelError = pCSLabel->pCurrentLabelError; return StateRet_OK; } PRIVATE StateRet_t <A NAME="error_getExpl">error_getExpl</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; char * explaination = 0; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_EXT_ALPHANUM) StrAllocCopy(explaination, token); HTList_appendObject(pCSLabel->pCurrentLabelError->explanations, explaination); return StateRet_OK; } PRIVATE StateRet_t <A NAME="error_close">error_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabelError = 0; if (pCSLabel->pCurrentLabel) pCSLabel->pCurrentLabel->pLabelError = pCSLabel->pCurrentLabelError; else pCSLabel->pCurrentServiceInfo->pLabelError = pCSLabel->pCurrentLabelError; return StateRet_OK; } PRIVATE void error_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pCurrentLabel) pCSLabel->pCurrentLabel->pLabelError = 0; else pCSLabel->pCurrentServiceInfo->pLabelError = 0; LabelError_free(pCSLabel->pCurrentLabelError); } PRIVATE StateRet_t <A NAME="Extension_open">Extension_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); Extension_t * me = Extension_new(); pCSLabel->pCurrentExtension = me; if (!pCSLabel->pCurrentLabelOptions->extensions) pCSLabel->pCurrentLabelOptions->extensions = HTList_new(); HTList_appendObject(pCSLabel->pCurrentLabelOptions->extensions, (void *)me); return StateRet_OK; } PRIVATE StateRet_t <A NAME="Extension_mandatory">Extension_mandatory</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentExtension->mandatory = 1; pCSLabel->pCSLLData->mandatoryExtensions++; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Extension_getURL">Extension_getURL</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (!token || !pCSParse->pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_URL) SVal_readVal(&pCSLabel->pCurrentExtension->url, token); return StateRet_OK; } PRIVATE StateRet_t <A NAME="Extension_close">Extension_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentExtension = 0; return StateRet_OK; } PRIVATE void Extension_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList_removeObject(pCSLabel->pCurrentLabelOptions->extensions, (void *)pCSLabel->pCurrentExtension); if (!HTList_count(pCSLabel->pCurrentLabelOptions->extensions)) { HTList_delete(pCSLabel->pCurrentLabelOptions->extensions); pCSLabel->pCurrentLabelOptions->extensions = 0; } Extension_free(pCSLabel->pCurrentExtension); pCSLabel->pCurrentExtension = 0; } PRIVATE StateRet_t <A NAME="Extension_next">Extension_next</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pCurrentSingleLabel) { SETNEXTSTATE(<A HREF="#SingleLabel_A">SingleLabel_targetObject, SubState_A</A>); } else { SETNEXTSTATE(<A HREF="#ServiceInfo_B">ServiceInfo_targetObject, SubState_B</A>); } return StateRet_OK; } PRIVATE StateRet_t <A NAME="ExtensionData_open">ExtensionData_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); ExtensionData_t * me = ExtensionData_new(); me->pParentExtensionData = pCSLabel->pCurrentExtensionData; if(pCSLabel->pCurrentExtensionData) { if (!pCSLabel->pCurrentExtensionData->moreData) pCSLabel->pCurrentExtensionData->moreData = HTList_new(); HTList_appendObject(pCSLabel->pCurrentExtensionData->moreData, (void *)me); } else { if (!pCSLabel->pCurrentExtension->extensionData) pCSLabel->pCurrentExtension->extensionData = HTList_new(); HTList_appendObject(pCSLabel->pCurrentExtension->extensionData, (void *)me); } pCSLabel->pCurrentExtensionData = me; return StateRet_OK; } PRIVATE StateRet_t <A NAME="ExtensionData_next">ExtensionData_next</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); /* close has already set recursed to the parentExtensionData */ if (pCSLabel->pCurrentExtensionData) { SETNEXTSTATE(<A HREF="#ExtensionData_B">ExtensionData_targetObject, SubState_B</A>); } else { SETNEXTSTATE(<A HREF="#Extension_C">Extension_targetObject, SubState_C</A>); } return StateRet_OK; } PRIVATE StateRet_t <A NAME="ExtensionData_close">ExtensionData_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentExtensionData = pCSLabel->pCurrentExtensionData->pParentExtensionData; return StateRet_OK; } PRIVATE void ExtensionData_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList ** pHolderList = pCSLabel->pCurrentExtensionData->pParentExtensionData ? &pCSLabel->pCurrentExtensionData->pParentExtensionData->moreData : &pCSLabel->pCurrentExtension->extensionData; HTList_removeObject(*pHolderList, (void *)pCSLabel->pCurrentExtensionData); if (!HTList_count(*pHolderList)) { HTList_delete(*pHolderList); *pHolderList = 0; } ExtensionData_free(pCSLabel->pCurrentExtensionData); pCSLabel->pCurrentExtensionData = 0; } PRIVATE StateRet_t <A NAME="ExtensionData_getData">ExtensionData_getData</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); ExtensionData_t * me; if (!token) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_EXT_DATA) me = pCSLabel->pCurrentExtensionData; /* SVal_readVal(&me->text, token); */ StrAllocCopy(me->text, token); me->quoted = pCSParse->pParseContext->observedQuotes; return StateRet_OK; } #if 0 PRIVATE StateRet_t <A NAME="LabelRating_doClose">LabelRating_doClose</A>(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &LabelRating_targetObject, CSLLTC_RATING, 2) == StateRet_ERROR) return NowIn_ERROR; return LabelRating_close(pCSParse, token, demark); } #endif PRIVATE StateRet_t <A NAME="SingleLabel_doClose">SingleLabel_doClose</A>(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &SingleLabel_targetObject, CSLLTC_SINGLE, 2, 0) == StateRet_ERROR) /* !!! - pVoid */ return NowIn_ERROR; return SingleLabel_close(pCSParse, token, demark); } #if 0 PRIVATE StateRet_t <A NAME="LabelTree_doClose">LabelTree_doClose</A>(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &LabelTree_targetObject, CSLLTC_LABTREE, 2) == StateRet_ERROR) return NowIn_ERROR; return LabelTree_close(pCSParse, token, demark); } #endif PRIVATE StateRet_t <A NAME="Label_doClose">Label_doClose</A>(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &Label_targetObject, CSLLTC_LABEL, 2, 0) == StateRet_ERROR) /* !!! - pVoid */ return NowIn_ERROR; return Label_close(pCSParse, token, demark); } #if 0 PRIVATE StateRet_t <A NAME="ServiceInfo_doClose">ServiceInfo_doClose</A>(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &ServiceInfo_targetObject, CSLLTC_SERVICE, 2) == StateRet_ERROR) return NowIn_ERROR; return ServiceInfo_close(pCSParse, token, demark); } #endif /* CSParse_doc end */ /* I T E R A T O R S - scan through the CSLabel data structures for <identifier> */ /* CSLabel_iterateServices - look for rating service in a label list */ PUBLIC CSError_t CSLabel_iterateServices(CSLabel_t * pCSLabel, CSLabel_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * serviceInfos; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSLabel || !pCSLabel->pCSLLData->serviceInfos) return CSError_BAD_PARAM; serviceInfos = pCSLabel->pCSLLData->serviceInfos; while (ret == CSError_OK && (pCSLabel->pCurrentServiceInfo = (ServiceInfo_t *) HTList_nextObject(serviceInfos))) if (!identifier || !strcasecomp(SVal_value(&pCSLabel->pCurrentServiceInfo->rating_service), identifier)) { ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } if (!count) return CSError_SERVICE_MISSING; return ret; } /* CSLabel_iterateLabels - look through all labels in current ServiceInfo */ PUBLIC CSError_t CSLabel_iterateLabels(CSLabel_t * pCSLabel, CSLabel_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * labels; CSError_t ret= CSError_OK; int count = 0; if (!pIteratorCB || !pCSLabel || !pCSLabel->pCurrentServiceInfo || !pCSLabel->pCurrentServiceInfo->labels) return CSError_BAD_PARAM; labels = pCSLabel->pCurrentServiceInfo->labels; while (ret == CSError_OK && (pCSLabel->pCurrentLabel = (Label_t *) HTList_nextObject(labels))) { ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } if (!count) return CSError_LABEL_MISSING; return ret; } /* CSLabel_iterateSingleLabels - look through all single labels in current label */ PUBLIC CSError_t CSLabel_iterateSingleLabels(CSLabel_t * pCSLabel, CSLabel_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { CSError_t ret= CSError_OK; int count = 0; if (!pIteratorCB || !pCSLabel || !pCSLabel->pCurrentServiceInfo || !pCSLabel->pCurrentServiceInfo->labels) return CSError_BAD_PARAM; { if (pCSLabel->pCurrentLabel->pSingleLabel) { pCSLabel->pCurrentSingleLabel = pCSLabel->pCurrentLabel->pSingleLabel; ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } else { HTList * singleLabels = pCSLabel->pCurrentLabel->singleLabels; while (ret == CSError_OK && (pCSLabel->pCurrentSingleLabel = (SingleLabel_t *) HTList_nextObject(singleLabels))) { ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } } } if (!count) return CSError_SINGLELABEL_MISSING; return ret; } /* CSLabel_iterateLabelRatings - look for rating in current single label */ PUBLIC CSError_t CSLabel_iterateLabelRatings(CSLabel_t * pCSLabel, CSLabel_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * labelRatings; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSLabel || !pCSLabel->pCurrentServiceInfo || !pCSLabel->pCurrentServiceInfo->labels || !pCSLabel->pCurrentLabel || !pCSLabel->pCurrentSingleLabel || !pCSLabel->pCurrentSingleLabel->labelRatings) return CSError_BAD_PARAM; labelRatings = pCSLabel->pCurrentSingleLabel->labelRatings; while (ret == CSError_OK && (pCSLabel->pCurrentLabelRating = (LabelRating_t *) HTList_nextObject(labelRatings))) if (!identifier || !strcasecomp(SVal_value(&pCSLabel->pCurrentLabelRating->identifier), identifier)) { ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } if (!count) return CSError_RATING_MISSING; return ret; } /* R A N G E T E S T I N G - check that label values fall within acceptable user ranges */ /* CSLabel_ratingsIncludeFVal - find out if current rating in pCSLabel encompases userValue * return: int stating how far it is from fitting. */ PUBLIC FVal_t CSLabel_ratingsIncludeFVal(CSLabel_t * pCSLabel, FVal_t * userValue) { Range_t parm = Range_NEW_UNINITIALIZED; parm.min = *userValue; return CSLabel_ratingsIncludeRange(pCSLabel, &parm); } PUBLIC FVal_t CSLabel_ratingsIncludeRange(CSLabel_t * pCSLabel, Range_t * pUserRange) { HTList * labelRanges = pCSLabel->pCurrentLabelRating->ranges; FVal_t value = pCSLabel->pCurrentLabelRating->value; FVal_t ret; Range_t * pLabelRange; if (FVal_initialized(&value)) { Range_t parm = Range_NEW_UNINITIALIZED; parm.min = value; return Range_gap(&parm, pUserRange); } while ((pLabelRange = (Range_t *)HTList_nextObject(labelRanges))) { FVal_t thisOne = Range_gap(pLabelRange, pUserRange); if (FVal_isZero(&thisOne)) return thisOne; if (FVal_nearerZero(&thisOne, &ret)) ret = thisOne; } return ret; } PUBLIC FVal_t CSLabel_ratingsIncludeRanges(CSLabel_t * pCSLabel, HTList * userRanges) { FVal_t ret; Range_t * pUserRange; while ((pUserRange = (Range_t *)HTList_nextObject(userRanges))) { FVal_t thisOne = CSLabel_ratingsIncludeRange(pCSLabel, pUserRange); if (FVal_isZero(&thisOne)) return thisOne; if (FVal_nearerZero(&thisOne, &ret)) ret = thisOne; } return ret; } <PRE> ���������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/CSMacRed.html���������������������������������������������������������������0100644�0000764�0000144�00000130357�06523414475�016773� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<PRE> #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "CSParse.h" #include "CSMR.h" #include "CSMRSt.h" #define GetCSMachRead(A) ((A)->target.pCSMachRead) #define SETNEXTSTATE(target, subState) \ pCSParse->pTargetObject = target; \ pCSParse->currentSubState = subState; struct CSMachRead_s { CSMachReadData_t * pCSMachReadData; MachRead_category_t * pCurrentMachRead_category; MachRead_enum_t * pCurrentMachRead_enum; BOOL inDefault; MachReadTargetCallback_t * pMachReadTargetCallback; MRErrorHandler_t * pMRErrorHandler; }; PRIVATE TargetObject_t MachRead_targetObject; PRIVATE TargetObject_t Version_targetObject; PRIVATE TargetObject_t System_targetObject; PRIVATE TargetObject_t Service_targetObject; PRIVATE TargetObject_t Icon_targetObject; PRIVATE TargetObject_t Name_targetObject; PRIVATE TargetObject_t Description_targetObject; PRIVATE TargetObject_t Default_targetObject; PRIVATE TargetObject_t Min_targetObject; PRIVATE TargetObject_t Max_targetObject; PRIVATE TargetObject_t Multi_targetObject; PRIVATE TargetObject_t Unord_targetObject; PRIVATE TargetObject_t Integer_targetObject; PRIVATE TargetObject_t Labeled_targetObject; PRIVATE TargetObject_t Category_targetObject; PRIVATE TargetObject_t Transmit_as_targetObject; PRIVATE TargetObject_t Enum_targetObject; PRIVATE TargetObject_t Value_targetObject; PRIVATE Prep_t postValueState; PRIVATE Prep_t Category_next; PRIVATE Prep_t Multi_setTrue; PRIVATE Prep_t Unord_setTrue; PRIVATE Prep_t Integer_setTrue; PRIVATE Prep_t Labeled_setTrue; PRIVATE Check_t Version_get; PRIVATE Check_t System_get; PRIVATE Check_t Service_get; PRIVATE Check_t Icon_get; PRIVATE Check_t Name_get; PRIVATE Check_t Description_get; PRIVATE Check_t Min_get; PRIVATE Check_t Max_get; PRIVATE Check_t Multi_get; PRIVATE Check_t Unord_get; PRIVATE Check_t Integer_get; PRIVATE Check_t Labeled_get; PRIVATE Check_t Transmit_as_get; PRIVATE Check_t Value_get; PRIVATE Open_t MachRead_open; PRIVATE Open_t Category_open; PRIVATE Open_t Default_open; PRIVATE Open_t Enum_open; PRIVATE Close_t MachRead_close; PRIVATE Close_t Category_close; PRIVATE Close_t Default_close; PRIVATE Close_t Enum_close; PRIVATE Destroy_t MachRead_destroy; PRIVATE Destroy_t Category_destroy; PRIVATE Destroy_t Default_destroy; PRIVATE Destroy_t Enum_destroy; PRIVATE TargetChangeCallback_t targetChangeCallback; PRIVATE ParseErrorHandler_t parseErrorHandler; /* CSParse_doc states */ /* M A C H I N E R E A D A B L E P A R S E R S T A T E S */ /* This contains all the states in the BNF for PICS service descriptions. * See User/Parsing.html for details. */ PRIVATE StateToken_t MachRead_stateTokens[] = { /* A: 1st we need a version B: then a system C: and a service D: an open paren E: could be icondef - category F: back from category so open or close paren G: open paren so it is a category */ { "enter",<A NAME="MachRead_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#MachRead_A">MachRead, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"need version set",<A NAME="MachRead_A"> SubState_A</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Version_N">Version, SubState_N</A>, 0, 0}, { "need system set",<A NAME="MachRead_B"> SubState_B</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#System_N">System, SubState_N</A>, 0, 0}, {"need service set",<A NAME="MachRead_C"> SubState_C</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Service_N">Service, SubState_N</A>, 0, 0}, {"need options set",<A NAME="MachRead_D"> SubState_D</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#MachRead_E">MachRead, SubState_E</A>, 0, 0}, { "icon",<A NAME="MachRead_E"> SubState_E</A>, Punct_WHITE, 0, "icon", 0, 0, &<A HREF="#Icon_N">Icon, SubState_N</A>, 0, 0}, { "name", SubState_E, Punct_WHITE, 0, "name", 0, 0, &<A HREF="#Name_N">Name, SubState_N</A>, 0, 0}, { "description", SubState_E, Punct_WHITE, 0, "description", 0, 0, &<A HREF="#Description_N">Description, SubState_N</A>, 0, 0}, { "default", SubState_E, Punct_LPAREN, 0, "default", 0, 0, &<A HREF="#Default_N">Default, SubState_N</A>, 0, 0}, { "category", SubState_E, Punct_LPAREN, 0, "category", 0, 0, &<A HREF="#Category_N">Category, SubState_N</A>, 0, 0}, { "open category",<A NAME="MachRead_F"> SubState_F</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#MachRead_G">MachRead, SubState_G</A>, 0, 0}, { "end", SubState_F, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#MachRead_N">MachRead, SubState_N</A>, Command_CLOSE, 0}, { "category",<A NAME="MachRead_G"> SubState_G</A>, Punct_LPAREN, 0, "category", 0, 0, &<A HREF="#Category_N">Category, SubState_N</A>, 0, 0} }; PRIVATE TargetObject_t MachRead_targetObject = {"MachRead", &<A HREF="#MachRead_open">MachRead_open</A>, &<A HREF="#MachRead_close">MachRead_close</A>, &<A HREF="#MachRead_destroy">MachRead_destroy</A>, MachRead_stateTokens, raysize(MachRead_stateTokens), CSMRTC_MACHREAD}; PRIVATE StateToken_t Version_stateTokens[] = { /* A: fresh Version B: read value */ {"enter",<A NAME="Version_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Version_A">Version, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "text",<A NAME="Version_A"> SubState_A</A>, Punct_WHITE, 0, "PICS-version", 0, 0, &<A HREF="#Version_B">Version, SubState_B</A>, 0, 0}, {"value",<A NAME="Version_B"> SubState_B</A>, Punct_RPAREN, &<A HREF="#Version_get">Version_get</A>, 0, 0, 0, &<A HREF="#MachRead_B">MachRead, SubState_B</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t Version_targetObject = {"Version", 0, 0, 0, Version_stateTokens, raysize(Version_stateTokens), CSMRTC_VERSION}; PRIVATE StateToken_t System_stateTokens[] = { /* A: fresh System B: read value */ {"enter",<A NAME="System_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#System_A">System, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "text",<A NAME="System_A"> SubState_A</A>, Punct_WHITE, 0, "rating-system", 0, 0, &<A HREF="#System_B">System, SubState_B</A>, 0, 0}, {"value",<A NAME="System_B"> SubState_B</A>, Punct_RPAREN, &<A HREF="#System_get">System_get</A>, 0, 0, 0, &<A HREF="#MachRead_C">MachRead, SubState_C</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t System_targetObject = {"System", 0, 0, 0, System_stateTokens, raysize(System_stateTokens), CSMRTC_SYSTEM}; PRIVATE StateToken_t Service_stateTokens[] = { /* A: fresh Service B: read value */ {"enter",<A NAME="Service_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Service_A">Service, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "text",<A NAME="Service_A"> SubState_A</A>, Punct_WHITE, 0, "rating-service", 0, 0, &<A HREF="#Service_B">Service, SubState_B</A>, 0, 0}, {"value",<A NAME="Service_B"> SubState_B</A>, Punct_RPAREN, &<A HREF="#Service_get">Service_get</A>, 0, 0, 0, &<A HREF="#MachRead_D">MachRead, SubState_D</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t Service_targetObject = {"Service", 0, 0, 0, Service_stateTokens, raysize(Service_stateTokens), CSMRTC_SERVICE}; PRIVATE StateToken_t Icon_stateTokens[] = { /* A: read value */ {"enter",<A NAME="Icon_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Icon_A">Icon, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value",<A NAME="Icon_A"> SubState_A</A>, Punct_RPAREN, &<A HREF="#Icon_get">Icon_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Icon_targetObject = {"Icon", 0, 0, 0, Icon_stateTokens, raysize(Icon_stateTokens), CSMRTC_ICON}; PRIVATE StateToken_t Name_stateTokens[] = { /* A: read value */ {"enter",<A NAME="Name_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Name_A">Name, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value",<A NAME="Name_A"> SubState_A</A>, Punct_RPAREN, &<A HREF="#Name_get">Name_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Name_targetObject = {"Name", 0, 0, 0, Name_stateTokens, raysize(Name_stateTokens), CSMSRC_NAME}; PRIVATE StateToken_t Value_stateTokens[] = { /* A: read value */ {"enter",<A NAME="Value_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Value_A">Value, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value",<A NAME="Value_A"> SubState_A</A>, Punct_RPAREN, &<A HREF="#Value_get">Value_get</A>, 0, 0, 0, &<A HREF="#Enum_G">Enum, SubState_G</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t Value_targetObject = {"Name", 0, 0, 0, Value_stateTokens, raysize(Value_stateTokens), CSMSRC_VALUE}; PRIVATE StateToken_t Description_stateTokens[] = { /* A: read value */ {"enter",<A NAME="Description_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Description_A">Description, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value",<A NAME="Description_A"> SubState_A</A>, Punct_RPAREN, &<A HREF="#Description_get">Description_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Description_targetObject = {"Description", 0, 0, 0, Description_stateTokens, raysize(Description_stateTokens), CSMSRC_DESC}; PRIVATE StateToken_t Default_stateTokens[] = { /* A: need an open B: need option */ { "enter",<A NAME="Default_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Default_B">Default, SubState_B</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "open",<A NAME="Default_A"> SubState_A</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Default_B">Default, SubState_B</A>, 0, 0}, { "close", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#MachRead_D">MachRead, SubState_D</A>, Command_CLOSE, 0}, { "min",<A NAME="Default_B"> SubState_B</A>, Punct_WHITE, 0, "min", 0, 0, &<A HREF="#Min_N">Min, SubState_N</A>, 0, 0}, { "max", SubState_B, Punct_WHITE, 0, "max", 0, 0, &<A HREF="#Max_N">Max, SubState_N</A>, 0, 0}, { "multi", SubState_B, Punct_WHITE|Punct_RPAREN, 0, "multivalue", 0, 0, &<A HREF="#Multi_N">Multi, SubState_N</A>, Command_CHAIN, 0}, { "unord", SubState_B, Punct_WHITE|Punct_RPAREN, 0, "unordered", 0, 0, &<A HREF="#Unord_N">Unord, SubState_N</A>, Command_CHAIN, 0}, {"integer", SubState_B, Punct_WHITE|Punct_RPAREN, 0, "integer", 0, 0, &<A HREF="#Integer_N">Integer, SubState_N</A>, Command_CHAIN, 0}, {"labeled", SubState_B, Punct_WHITE|Punct_RPAREN, 0, "label-only", 0, 0, &<A HREF="#Labeled_N">Labeled, SubState_N</A>, Command_CHAIN, 0}, }; PRIVATE TargetObject_t Default_targetObject = {"Default", &<A HREF="#Default_open">Default_open</A>, &<A HREF="#Default_close">Default_close</A>, &<A HREF="#Default_destroy">Default_destroy</A>, Default_stateTokens, raysize(Default_stateTokens), CSMRTC_DEF}; PRIVATE StateToken_t Min_stateTokens[] = { /* A: read value */ {"enter",<A NAME="Min_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Min_A">Min, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value",<A NAME="Min_A"> SubState_A</A>, Punct_RPAREN, &<A HREF="#Min_get">Min_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Min_targetObject = {"Min", 0, 0, 0, Min_stateTokens, raysize(Min_stateTokens), CSMRTC_MIN}; PRIVATE StateToken_t Max_stateTokens[] = { /* A: read value */ {"enter",<A NAME="Max_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Max_A">Max, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value",<A NAME="Max_A"> SubState_A</A>, Punct_RPAREN, &<A HREF="#Max_get">Max_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Max_targetObject = {"Max", 0, 0, 0, Max_stateTokens, raysize(Max_stateTokens), CSMRTC_MAX}; PRIVATE StateToken_t Multi_stateTokens[] = { /* A: chained text with optional close paren B: value */ { "enter",<A NAME="Multi_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Multi_A">Multi, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"binary",<A NAME="Multi_A"> SubState_A</A>, Punct_WHITE, 0, "multivalue", 0, 0, &<A HREF="#Integer_B">Integer, SubState_B</A>, 0, 0}, { "unary", SubState_A, Punct_RPAREN, 0, "multivalue", 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Multi_setTrue">Multi_setTrue</A>}, { "value",<A NAME="Multi_B"> SubState_B</A>, Punct_RPAREN, &<A HREF="#Multi_get">Multi_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Multi_targetObject = {"Multi", 0, 0, 0, Multi_stateTokens, raysize(Multi_stateTokens), CSMRTC_MULTI}; PRIVATE StateToken_t Unord_stateTokens[] = { /* A: chained text with optional close paren B: value */ { "enter",<A NAME="Unord_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Unord_A">Unord, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"binary",<A NAME="Unord_A"> SubState_A</A>, Punct_WHITE, 0, "unordered", 0, 0, &<A HREF="#Integer_B">Integer, SubState_B</A>, 0, 0}, { "unary", SubState_A, Punct_RPAREN, 0, "unordered", 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Unord_setTrue">Unord_setTrue</A>}, { "value",<A NAME="Unord_B"> SubState_B</A>, Punct_RPAREN, &<A HREF="#Unord_get">Unord_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Unord_targetObject = {"Unord", 0, 0, 0, Unord_stateTokens, raysize(Unord_stateTokens), CSMRTC_UNORD}; PRIVATE StateToken_t Integer_stateTokens[] = { /* A: chained text with optional close paren B: value */ { "enter",<A NAME="Integer_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Integer_A">Integer, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"binary",<A NAME="Integer_A"> SubState_A</A>, Punct_WHITE, 0, "integer", 0, 0, &<A HREF="#Integer_B">Integer, SubState_B</A>, 0, 0}, { "unary", SubState_A, Punct_RPAREN, 0, "integer", 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Integer_setTrue">Integer_setTrue</A>}, { "value",<A NAME="Integer_B"> SubState_B</A>, Punct_RPAREN, &<A HREF="#Integer_get">Integer_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Integer_targetObject = {"Integer", 0, 0, 0, Integer_stateTokens, raysize(Integer_stateTokens), CSMRTC_INT}; PRIVATE StateToken_t Labeled_stateTokens[] = { /* A: chained text with optional close paren B: value */ { "enter",<A NAME="Labeled_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Labeled_A">Labeled, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"binary",<A NAME="Labeled_A"> SubState_A</A>, Punct_WHITE, 0, "label-only", 0, 0, &<A HREF="#Labeled_B">Labeled, SubState_B</A>, 0, 0}, { "unary", SubState_A, Punct_RPAREN, 0, "label-only", 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Labeled_setTrue">Labeled_setTrue</A>}, { "value",<A NAME="Labeled_B"> SubState_B</A>, Punct_RPAREN, &<A HREF="#Labeled_get">Labeled_get</A>, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#postValueState">postValueState</A>} }; PRIVATE TargetObject_t Labeled_targetObject = {"Labeled", 0, 0, 0, Labeled_stateTokens, raysize(Labeled_stateTokens), CSMRTC_LABL}; PRIVATE StateToken_t Category_stateTokens[] = { /* A: 1st we need a transmit-as B: an open paren C: could be icondef - enum, category D: back from enum so need open or close E: enum or category F: back from category so need open or close G: category */ { "enter",<A NAME="Category_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Transmit_as_N">Transmit_as, SubState_N</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"need options set",<A NAME="Category_B"> SubState_B</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Category_C">Category, SubState_C</A>, 0, 0}, { "end", SubState_B, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Category_next">Category_next</A>}, { "icon",<A NAME="Category_C"> SubState_C</A>, Punct_WHITE, 0, "icon", 0, 0, &<A HREF="#Icon_N">Icon, SubState_N</A>, 0, 0}, { "name", SubState_C, Punct_WHITE, 0, "name", 0, 0, &<A HREF="#Name_N">Name, SubState_N</A>, 0, 0}, { "description", SubState_C, Punct_WHITE, 0, "description", 0, 0, &<A HREF="#Description_N">Description, SubState_N</A>, 0, 0}, { "min", SubState_C, Punct_WHITE, 0, "min", 0, 0, &<A HREF="#Min_N">Min, SubState_N</A>, 0, 0}, { "max", SubState_C, Punct_WHITE, 0, "max", 0, 0, &<A HREF="#Max_N">Max, SubState_N</A>, 0, 0}, { "multi", SubState_C, Punct_WHITE|Punct_RPAREN, 0, "multivalue", 0, 0, &<A HREF="#Multi_N">Multi, SubState_N</A>, Command_CHAIN, 0}, { "unord", SubState_C, Punct_WHITE|Punct_RPAREN, 0, "unordered", 0, 0, &<A HREF="#Unord_N">Unord, SubState_N</A>, Command_CHAIN, 0}, {"integer", SubState_C, Punct_WHITE|Punct_RPAREN, 0, "integer", 0, 0, &<A HREF="#Integer_N">Integer, SubState_N</A>, Command_CHAIN, 0}, {"labeled", SubState_C, Punct_WHITE|Punct_RPAREN, 0, "label-only", 0, 0, &<A HREF="#Labeled_N">Labeled, SubState_N</A>, Command_CHAIN, 0}, { "enum", SubState_C, Punct_LPAREN, 0, "label", 0, 0, &<A HREF="#Enum_N">Enum, SubState_N</A>, 0, 0}, { "category", SubState_C, Punct_LPAREN, 0, "category", 0, 0, &<A HREF="#Category_N">Category, SubState_N</A>, 0, 0}, {"open enum or cat",<A NAME="Category_D"> SubState_D</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Category_E">Category, SubState_E</A>, 0, 0}, { "end", SubState_D, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Category_next">Category_next</A>}, { "enum",<A NAME="Category_E"> SubState_E</A>, Punct_LPAREN, 0, "label", 0, 0, &<A HREF="#Enum_N">Enum, SubState_N</A>, 0, 0}, { "category", SubState_E, Punct_LPAREN, 0, "category", 0, 0, &<A HREF="#Category_N">Category, SubState_N</A>, 0, 0}, { "end", SubState_E, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Category_next">Category_next</A>}, { "open or cat",<A NAME="Category_F"> SubState_F</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Category_G">Category, SubState_G</A>, 0, 0}, { "end", SubState_F, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &<A HREF="#Category_next">Category_next</A>}, { "category",<A NAME="Category_G"> SubState_G</A>, Punct_LPAREN, 0, "category", 0, 0, &<A HREF="#Category_N">Category, SubState_N</A>, 0, 0}, { "to MachRead",<A NAME="Category_H"> SubState_H</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#MachRead_F">MachRead, SubState_F</A>, Command_CHAIN, 0} }; PRIVATE TargetObject_t Category_targetObject = {"Category", &<A HREF="#Category_open">Category_open</A>, &<A HREF="#Category_close">Category_close</A>, &<A HREF="#Category_destroy">Category_destroy</A>, Category_stateTokens, raysize(Category_stateTokens), CSMRTC_CAT}; PRIVATE StateToken_t Transmit_as_stateTokens[] = { /* A: fresh Service B: read value */ {"enter",<A NAME="Transmit_as_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Transmit_as_A">Transmit_as, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "text",<A NAME="Transmit_as_A"> SubState_A</A>, Punct_WHITE, 0, "transmit-as", 0, 0, &<A HREF="#Transmit_as_B">Transmit_as, SubState_B</A>, 0, 0}, {"value",<A NAME="Transmit_as_B"> SubState_B</A>, Punct_RPAREN, &<A HREF="#Transmit_as_get">Transmit_as_get</A>, 0, 0, 0, &<A HREF="#Category_B">Category, SubState_B</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t Transmit_as_targetObject = {"Transmit_as", 0, 0, 0, Transmit_as_stateTokens, raysize(Transmit_as_stateTokens), CSMRTC_TRANS}; PRIVATE StateToken_t Enum_stateTokens[] = { /* A: 'label'( B: 'name' -> C C: ( D: 'description' -> E D: 'value' -> G E: ( F: 'value' -> G G: ( - expect an icon G: ) close H: 'icon' -> I I: close */ { "enter",<A NAME="Enum_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#Enum_B">Enum, SubState_B</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "name",<A NAME="Enum_B"> SubState_B</A>, Punct_WHITE, 0, "name", 0, 0, &<A HREF="#Name_N">Name, SubState_N</A>, 0, 0}, { "open",<A NAME="Enum_C"> SubState_C</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Enum_D">Enum, SubState_D</A>, 0, 0}, {"description",<A NAME="Enum_D"> SubState_D</A>, Punct_WHITE, 0, "description", 0, 0, &<A HREF="#Description_N">Description, SubState_N</A>, 0, 0}, { "value", SubState_D, Punct_WHITE, 0, "value", 0, 0, &<A HREF="#Value_N">Value, SubState_N</A>, 0, 0}, { "open",<A NAME="Enum_E"> SubState_E</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Enum_F">Enum, SubState_F</A>, 0, 0}, { "value",<A NAME="Enum_F"> SubState_F</A>, Punct_WHITE, 0, "value", 0, 0, &<A HREF="#Value_N">Value, SubState_N</A>, 0, 0}, { "open",<A NAME="Enum_G"> SubState_G</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#Enum_H">Enum, SubState_H</A>, 0, 0}, { "close", SubState_G, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#Category_D">Category, SubState_D</A>, Command_CLOSE, 0}, { "icon",<A NAME="Enum_H"> SubState_H</A>, Punct_WHITE, 0, "icon", 0, 0, &<A HREF="#Icon_A">Icon, SubState_A</A>, 0, 0}, { "close",<A NAME="Enum_I"> SubState_I</A>, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#Category_D">Category, SubState_D</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t Enum_targetObject = {"Enum", &<A HREF="#Enum_open">Enum_open</A>, &<A HREF="#Enum_close">Enum_close</A>, &<A HREF="#Enum_destroy">Enum_destroy</A>, Enum_stateTokens, raysize(Enum_stateTokens), CSMRTC_ENUM}; /* CSParse_doc end */ /* S T A T E A S S O C I A T I O N - associate a CSMachRead with the label list data The label list data is kept around until all states referencing it are destroyed */ typedef struct { CSMachRead_t * pCSMachRead; CSMachReadData_t * pCSMachReadData; } CSMachReadAssoc_t; PRIVATE HTList * CSMachReadAssocs = 0; PRIVATE void CSMachReadAssoc_add(CSMachRead_t * pCSMachRead, CSMachReadData_t * pCSMachReadData) { CSMachReadAssoc_t * pElement; if ((pElement = (CSMachReadAssoc_t *) HT_CALLOC(1, sizeof(CSMachReadAssoc_t))) == NULL) HT_OUTOFMEM("CSMachReadAssoc_t"); pElement->pCSMachRead = pCSMachRead; pElement->pCSMachReadData = pCSMachReadData; if (!CSMachReadAssocs) CSMachReadAssocs = HTList_new(); HTList_appendObject(CSMachReadAssocs, (void *)pElement); } PRIVATE CSMachReadAssoc_t * CSMachReadAssoc_findByData(CSMachReadData_t * pCSMachReadData) { HTList * assocs = CSMachReadAssocs; CSMachReadAssoc_t * pElement; while ((pElement = (CSMachReadAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSMachReadData == pCSMachReadData) return pElement; return 0; } PRIVATE CSMachReadAssoc_t * CSMachReadAssoc_findByState(CSMachRead_t * pCSMachRead) { HTList * assocs = CSMachReadAssocs; CSMachReadAssoc_t * pElement; while ((pElement = (CSMachReadAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSMachRead == pCSMachRead) return pElement; return 0; } PRIVATE void CSMachReadAssoc_removeByState(CSMachRead_t * pCSMachRead) { CSMachReadAssoc_t * pElement = CSMachReadAssoc_findByState(pCSMachRead); if (!pElement) return; HTList_removeObject(CSMachReadAssocs, (void *)pElement); HT_FREE(pElement); } /* C O N S T R U C T O R S / D E S T R U C T O R S */ PRIVATE MachRead_enum_t * MachRead_enum_new(void) { MachRead_enum_t * me; if ((me = (MachRead_enum_t *) HT_CALLOC(1, sizeof(MachRead_enum_t))) == NULL) HT_OUTOFMEM("MachRead_enum_t"); return me; } PUBLIC void MachRead_enum_free(MachRead_enum_t * me) { SVal_clear(&me->name); SVal_clear(&me->description); FVal_clear(&me->value); SVal_clear(&me->icon); } PRIVATE MachRead_category_t * MachRead_category_new(void) { MachRead_category_t * me; if ((me = (MachRead_category_t *) HT_CALLOC(1, sizeof(MachRead_category_t))) == NULL) HT_OUTOFMEM("MachRead_category_t"); return me; } PUBLIC void MachRead_category_free(MachRead_category_t * me) { MachRead_enum_t * pMachRead_enum; MachRead_category_t * pMachRead_category; while ((pMachRead_enum = (MachRead_enum_t *) HTList_removeLastObject(me->machRead_enums))) MachRead_enum_free(pMachRead_enum); while ((pMachRead_category = (MachRead_category_t *) HTList_removeLastObject(me->machRead_categories))) MachRead_category_free(pMachRead_category); HTList_delete(me->machRead_enums); HTList_delete(me->machRead_categories); SVal_clear(&me->transmit); SVal_clear(&me->icon); SVal_clear(&me->name); SVal_clear(&me->description); FVal_clear(&me->min); FVal_clear(&me->max); BVal_clear(&me->multi); BVal_clear(&me->unord); BVal_clear(&me->integer); BVal_clear(&me->labeled); } PUBLIC CSMachReadData_t * CSMachReadData_new(void) { CSMachReadData_t * me; if ((me = (CSMachReadData_t *) HT_CALLOC(1, sizeof(CSMachReadData_t))) == NULL) HT_OUTOFMEM("CSMachReadData_t"); me->machRead_categories = HTList_new(); return me; } PUBLIC void CSMachReadData_free(CSMachReadData_t * me) { MachRead_category_t * pMachRead_category; if (CSMachReadAssoc_findByData(me)) return; while ((pMachRead_category = (MachRead_category_t *) HTList_removeLastObject(me->machRead_categories))) MachRead_category_free(pMachRead_category); FVal_clear(&me->version); SVal_clear(&me->system); SVal_clear(&me->service); SVal_clear(&me->icon); SVal_clear(&me->name); SVal_clear(&me->description); FVal_clear(&me->min); FVal_clear(&me->max); BVal_clear(&me->multi); BVal_clear(&me->unord); BVal_clear(&me->integer); BVal_clear(&me->labeled); HT_FREE(me); } PUBLIC CSMachRead_t * CSMachRead_new(CSMachReadData_t * pCSMachReadData, MachReadTargetCallback_t * pMachReadTargetCallback, MRErrorHandler_t * pMRErrorHandler) { CSMachRead_t * me; if ((me = (CSMachRead_t *) HT_CALLOC(1, sizeof(CSMachRead_t))) == NULL) HT_OUTOFMEM("CSMachRead_t"); me->pCSMachReadData = pCSMachReadData; me->pMachReadTargetCallback = pMachReadTargetCallback; me->pMRErrorHandler = pMRErrorHandler; CSMachReadAssoc_add(me, pCSMachReadData); return me; } PUBLIC CSMachRead_t * CSMachRead_copy(CSMachRead_t * old) { CSMachRead_t * me; me = CSMachRead_new(old->pCSMachReadData, old->pMachReadTargetCallback, old->pMRErrorHandler); memcpy(me, old, sizeof(CSMachRead_t)); return me; } PUBLIC void CSMachRead_free(CSMachRead_t * me) { CSMachReadData_t * pCSMachReadData = me->pCSMachReadData; CSMachReadAssoc_removeByState(me); HT_FREE(me); CSMachReadData_free(pCSMachReadData); } PUBLIC char * CSMachRead_getSystem(CSMachRead_t * me) {return SVal_value(&me->pCSMachReadData->system);} PUBLIC char * CSMachRead_getService(CSMachRead_t * me) {return SVal_value(&me->pCSMachReadData->service);} PUBLIC CSMachReadData_t * CSMachRead_getCSMachReadData(CSMachRead_t * me) {return me->pCSMachReadData;} PUBLIC MachRead_category_t * CSMachRead_getMachReadCategory(CSMachRead_t * pCSMachRead) {return pCSMachRead->pCurrentMachRead_category;} PUBLIC MachRead_enum_t * CSMachRead_getMachReadEnum(CSMachRead_t * pCSMachRead) {return pCSMachRead->pCurrentMachRead_enum;} PUBLIC CSParse_t * CSParse_newMachRead(MachReadTargetCallback_t * pMachReadTargetCallback, MRErrorHandler_t * pMRErrorHandler) { CSParse_t * me = CSParse_new(); me->pParseContext->engineOf = &CSParse_targetParser; me->pParseContext->pTargetChangeCallback = &targetChangeCallback; me->pParseContext->pParseErrorHandler = &parseErrorHandler; me->target.pCSMachRead = CSMachRead_new(CSMachReadData_new(), pMachReadTargetCallback, pMRErrorHandler); me->pTargetObject = &MachRead_targetObject; me->currentSubState = SubState_N; return me; } PUBLIC CSMachRead_t * CSParse_getMachRead(CSParse_t * me) { return (me->target.pCSMachRead); } PUBLIC BOOL CSParse_deleteMachRead(CSParse_t * pCSParse) { CSMachRead_t * me = GetCSMachRead(pCSParse); CSMachReadData_free(CSMachRead_getCSMachReadData(me)); CSMachRead_free(me); return YES; } /* P A R S I N G H A N D L E R S */ PRIVATE StateRet_t targetChangeCallback(CSParse_t * pCSParse, TargetObject_t * pTargetObject, CSParseTC_t target, BOOL closed, void * pVoid) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pMachReadTargetCallback) return (*pCSMachRead->pMachReadTargetCallback)(pCSMachRead, pCSParse, (CSMRTC_t)target, closed, pVoid); return StateRet_OK; } PRIVATE StateRet_t parseErrorHandler(CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pMRErrorHandler) return (*pCSMachRead->pMRErrorHandler)(pCSMachRead, pCSParse, token, demark, errorCode); return errorCode; } /* CSParse_doc methods */ /* P A R S I N G S T A T E F U N C T I O N S */ PRIVATE StateRet_t <A NAME="postValueState">postValueState</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->inDefault) { SETNEXTSTATE(<A HREF="#Default_A">Default_targetObject, SubState_A</A>); return StateRet_OK; } if (pCSMachRead->pCurrentMachRead_enum) { if (SVal_initialized(&pCSMachRead->pCurrentMachRead_enum->icon)) { SETNEXTSTATE(<A HREF="#Enum_I">Enum_targetObject, SubState_I</A>); return StateRet_OK; } if (FVal_initialized(&pCSMachRead->pCurrentMachRead_enum->value)) { SETNEXTSTATE(<A HREF="#Enum_G">Enum_targetObject, SubState_G</A>); return StateRet_OK; } if (SVal_initialized(&pCSMachRead->pCurrentMachRead_enum->description)) { SETNEXTSTATE(<A HREF="#Enum_E">Enum_targetObject, SubState_E</A>); return StateRet_OK; } SETNEXTSTATE(<A HREF="#Enum_C">Enum_targetObject, SubState_C</A>); return StateRet_OK; } if (pCSMachRead->pCurrentMachRead_category){ SETNEXTSTATE(<A HREF="#Category_B">Category_targetObject, SubState_B</A>); return StateRet_OK; } SETNEXTSTATE(<A HREF="#MachRead_D">MachRead_targetObject, SubState_D</A>); return StateRet_OK; } PRIVATE StateRet_t <A NAME="Category_next">Category_next</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { SETNEXTSTATE(<A HREF="#Category_F">Category_targetObject, SubState_F</A>); return StateRet_OK; } SETNEXTSTATE(<A HREF="#Category_H">Category_targetObject, SubState_H</A>); return StateRet_OK; } PRIVATE StateRet_t <A NAME="Multi_setTrue">Multi_setTrue</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { BVal_set(&pCSMachRead->pCurrentMachRead_category->multi, YES); } else { BVal_set(&pCSMachRead->pCSMachReadData->multi, YES); } return postValueState(pCSParse, token, demark); } PRIVATE StateRet_t <A NAME="Unord_setTrue">Unord_setTrue</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { BVal_set(&pCSMachRead->pCurrentMachRead_category->unord, YES); } else { BVal_set(&pCSMachRead->pCSMachReadData->unord, YES); } return postValueState(pCSParse, token, demark); } PRIVATE StateRet_t <A NAME="Integer_setTrue">Integer_setTrue</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { BVal_set(&pCSMachRead->pCurrentMachRead_category->integer, YES); } else { BVal_set(&pCSMachRead->pCSMachReadData->integer, YES); } return postValueState(pCSParse, token, demark); } PRIVATE StateRet_t <A NAME="Labeled_setTrue">Labeled_setTrue</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { BVal_set(&pCSMachRead->pCurrentMachRead_category->labeled, YES); } else { BVal_set(&pCSMachRead->pCSMachReadData->labeled, YES); } return postValueState(pCSParse, token, demark); } PRIVATE StateRet_t <A NAME="Version_get">Version_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!FVal_readVal(&pCSMachRead->pCSMachReadData->version, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="System_get">System_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!SVal_readVal(&pCSMachRead->pCSMachReadData->system, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Service_get">Service_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!SVal_readVal(&pCSMachRead->pCSMachReadData->service, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Icon_get">Icon_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { SVal_t * pSVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_enum) pSVal = &pCSMachRead->pCurrentMachRead_enum->icon; else if (pCSMachRead->pCurrentMachRead_category) pSVal = &pCSMachRead->pCurrentMachRead_category->icon; else pSVal = &pCSMachRead->pCSMachReadData->icon; if (!SVal_readVal(pSVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Name_get">Name_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { SVal_t * pSVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_enum) pSVal = &pCSMachRead->pCurrentMachRead_enum->name; else if (pCSMachRead->pCurrentMachRead_category) pSVal = &pCSMachRead->pCurrentMachRead_category->name; else pSVal = &pCSMachRead->pCSMachReadData->name; if (!SVal_readVal(pSVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Description_get">Description_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { SVal_t * pSVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_enum) pSVal = &pCSMachRead->pCurrentMachRead_enum->description; else if (pCSMachRead->pCurrentMachRead_category) pSVal = &pCSMachRead->pCurrentMachRead_category->description; else pSVal = &pCSMachRead->pCSMachReadData->description; if (!SVal_readVal(pSVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Min_get">Min_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { FVal_t * pFVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pFVal = &pCSMachRead->pCurrentMachRead_category->min; else pFVal = &pCSMachRead->pCSMachReadData->min; if (!FVal_readVal(pFVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Max_get">Max_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { FVal_t * pFVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pFVal = &pCSMachRead->pCurrentMachRead_category->max; else pFVal = &pCSMachRead->pCSMachReadData->max; if (!FVal_readVal(pFVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Multi_get">Multi_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { BVal_t * pBVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pBVal = &pCSMachRead->pCurrentMachRead_category->multi; else pBVal = &pCSMachRead->pCSMachReadData->multi; if (!BVal_readVal(pBVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Unord_get">Unord_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { BVal_t * pBVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pBVal = &pCSMachRead->pCurrentMachRead_category->unord; else pBVal = &pCSMachRead->pCSMachReadData->unord; if (!BVal_readVal(pBVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Integer_get">Integer_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { BVal_t * pBVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pBVal = &pCSMachRead->pCurrentMachRead_category->integer; else pBVal = &pCSMachRead->pCSMachReadData->integer; if (!BVal_readVal(pBVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Labeled_get">Labeled_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { BVal_t * pBVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pBVal = &pCSMachRead->pCurrentMachRead_category->labeled; else pBVal = &pCSMachRead->pCSMachReadData->labeled; if (!BVal_readVal(pBVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Transmit_as_get">Transmit_as_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!SVal_readVal(&pCSMachRead->pCurrentMachRead_category->transmit, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Value_get">Value_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!FVal_readVal(&pCSMachRead->pCurrentMachRead_enum->value, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t <A NAME="MachRead_open">MachRead_open</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t <A NAME="Category_open">Category_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); MachRead_category_t * me = MachRead_category_new(); me->pParent = pCSMachRead->pCurrentMachRead_category; pCSMachRead->pCurrentMachRead_category = me; HTList_appendObject(pCSMachRead->pCSMachReadData->machRead_categories, (void *)me); return StateRet_OK; } PRIVATE StateRet_t <A NAME="Default_open">Default_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->inDefault = YES; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Enum_open">Enum_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); MachRead_enum_t * me = MachRead_enum_new(); pCSMachRead->pCurrentMachRead_enum = me; if (!pCSMachRead->pCurrentMachRead_category->machRead_enums) pCSMachRead->pCurrentMachRead_category->machRead_enums = HTList_new(); HTList_appendObject(pCSMachRead->pCurrentMachRead_category->machRead_enums, (void *)me); return StateRet_OK; } PRIVATE StateRet_t <A NAME="MachRead_close">MachRead_close</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_DONE; } PRIVATE StateRet_t <A NAME="Category_close">Category_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->pCurrentMachRead_category = pCSMachRead->pCurrentMachRead_category->pParent; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Default_close">Default_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->inDefault = NO; return StateRet_OK; } PRIVATE StateRet_t <A NAME="Enum_close">Enum_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->pCurrentMachRead_enum = 0; return StateRet_OK; } PRIVATE void MachRead_destroy(CSParse_t * pCSParse) { } PRIVATE void Category_destroy(CSParse_t * pCSParse) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); HTList_removeObject(pCSMachRead->pCurrentMachRead_category->machRead_categories, (void *)pCSMachRead->pCurrentMachRead_category); MachRead_category_free(pCSMachRead->pCurrentMachRead_category); pCSMachRead->pCurrentMachRead_category = 0; } PRIVATE void Default_destroy(CSParse_t * pCSParse) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->inDefault = NO; } PRIVATE void Enum_destroy(CSParse_t * pCSParse) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); HTList_removeObject(pCSMachRead->pCurrentMachRead_category->machRead_enums, (void *)pCSMachRead->pCurrentMachRead_enum); if (!HTList_count(pCSMachRead->pCurrentMachRead_category->machRead_enums)) { HTList_delete(pCSMachRead->pCurrentMachRead_category->machRead_enums); pCSMachRead->pCurrentMachRead_category->machRead_enums = 0; } MachRead_enum_free(pCSMachRead->pCurrentMachRead_enum); pCSMachRead->pCurrentMachRead_enum = 0; } /* CSParse_doc end */ /* I T E R A T O R S - scan through the CSMachRead data structures for <identifier> */ PUBLIC CSError_t CSMachRead_iterateCategories(CSMachRead_t * pCSMachRead, CSMachRead_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * machRead_categories; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSMachRead || !pCSMachRead->pCSMachReadData->machRead_categories) return CSError_BAD_PARAM; machRead_categories = pCSMachRead->pCSMachReadData->machRead_categories; while ((pCSMachRead->pCurrentMachRead_category = (MachRead_category_t *) HTList_nextObject(machRead_categories)) && ret == CSError_OK) if (!identifier || !strcasecomp(SVal_value(&pCSMachRead->pCurrentMachRead_category->transmit), identifier)) { ret = (*pIteratorCB)(pCSMachRead, pParms, identifier, pVoid) != CSError_OK; count++; } if (!count) return CSError_CATEGORY_MISSING; return ret; } PUBLIC CSError_t CSMachRead_iterateEnums(CSMachRead_t * pCSMachRead, CSMachRead_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * machRead_enums; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSMachRead || !pCSMachRead->pCurrentMachRead_category || !pCSMachRead->pCurrentMachRead_category->machRead_enums) return CSError_BAD_PARAM; machRead_enums = pCSMachRead->pCurrentMachRead_category->machRead_enums; while ((pCSMachRead->pCurrentMachRead_enum = (MachRead_enum_t *) HTList_nextObject(machRead_enums)) && ret == CSError_OK) if (!identifier || !strcasecomp(SVal_value(&pCSMachRead->pCurrentMachRead_enum->name), identifier)) { ret = (*pIteratorCB)(pCSMachRead, pParms, identifier, pVoid) != CSError_OK; count++; } if (!count) return CSError_ENUM_MISSING; return ret; } <PRE> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/CSUser.html�����������������������������������������������������������������0100644�0000764�0000144�00000071154�06523414476�016556� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<PRE> #include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "CSParse.h" #include "CSUser.h" #include "CSUserSt.h" #define GetCSUser(A) ((A)->target.pCSUser) struct CSUser_s { CSUserData_t * pCSUserData; UserService_t * pCurrentUserService; UserServiceRating_t * pCurrentUserServiceRating; Range_t * pCurrentRange; int currentLabelNumber; UserChangeCallback_t * pUserChangeCallback; UserErrorHandler_t * pUserErrorHandler; }; PRIVATE TargetObject_t User_targetObject; PRIVATE TargetObject_t UserService_targetObject; PRIVATE TargetObject_t UserRatingList_targetObject; PRIVATE TargetObject_t UserRating_targetObject; PRIVATE TargetObject_t UserRange_targetObject; PRIVATE Prep_t User_setTarget; PRIVATE Prep_t clearToken; PRIVATE Check_t getProxy; PRIVATE Check_t getValue; PRIVATE Check_t UserService_getId; PRIVATE Check_t UserRating_getId; PRIVATE Check_t UserRange_get; PRIVATE Open_t User_open; PRIVATE Open_t UserService_open; PRIVATE Open_t UserRating_open; PRIVATE Open_t UserRatingList_open; PRIVATE Open_t UserRange_open; PRIVATE Close_t User_close; PRIVATE Close_t UserService_close; PRIVATE Close_t UserRatingList_close; PRIVATE Close_t UserRating_close; PRIVATE Close_t UserRange_close; PRIVATE Destroy_t User_destroy; PRIVATE Destroy_t UserService_destroy; PRIVATE Destroy_t UserRatingList_destroy; PRIVATE Destroy_t UserRating_destroy; PRIVATE Destroy_t UserRange_destroy; PRIVATE StateChangeCallback_t stateChangeCallback; PRIVATE ParseErrorHandler_t parseErrorHandler; /* CSParse_doc states */ /* U S E R P A R S E R S T A T E S */ /* This parses the example User profile for the LineMode browser. * See User/Parsing.html for details. */ PRIVATE StateToken_t User_stateTokens[] = { /* A: open or close B: red open C: read value D: read proxy */ { "start",<A NAME="User_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#User_A">User, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "open",<A NAME="User_A"> SubState_A</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#User_B">User, SubState_B</A>, 0, 0}, { "end", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#User_A">User, SubState_A</A>, Command_CLOSE, 0}, { "version",<A NAME="User_B"> SubState_B</A>, Punct_WHITE, 0, "version", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "user-name", SubState_B, Punct_WHITE, 0, "user-name", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "password", SubState_B, Punct_WHITE, 0, "password", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "super-user", SubState_B, Punct_WHITE, 0, "super-user", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, {"minimum-services", SubState_B, Punct_WHITE, 0, "minimum-services", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "missing-service", SubState_B, Punct_WHITE, 0, "missing-service", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "missing-scale", SubState_B, Punct_WHITE, 0, "missing-scale", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "observe-dates", SubState_B, Punct_WHITE, 0, "observe-dates", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "use-bureau", SubState_B, Punct_WHITE, 0, "use-bureau", 0, 0, &<A HREF="#User_C">User, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "proxy", SubState_B, Punct_WHITE, 0, "proxy", 0, 0, &<A HREF="#User_D">User, SubState_D</A>, 0, 0}, { "rating-service", SubState_B, Punct_WHITE, 0, "rating-service", 0, 0, &<A HREF="#UserService_N">UserService, SubState_N</A>, 0, 0}, { "get value",<A NAME="User_C"> SubState_C</A>, Punct_RPAREN, &<A HREF="#getValue">getValue</A>, 0, 0, 0, &<A HREF="#User_A">User, SubState_A</A>, 0, 0}, { "get proxy",<A NAME="User_D"> SubState_D</A>, Punct_RPAREN, &<A HREF="#getProxy">getProxy</A>, 0, 0, 0, &<A HREF="#User_A">User, SubState_A</A>, 0, 0} }; PRIVATE TargetObject_t User_targetObject = {"User", &<A HREF="#User_open">User_open</A>, &<A HREF="#User_close">User_close</A>, &<A HREF="#User_destroy">User_destroy</A>, User_stateTokens, raysize(User_stateTokens), CSUserSC_USER}; PRIVATE StateToken_t UserService_stateTokens[] = { /* A: fresh UserService B: red id C: read value D: need paren before next parm */ { "start",<A NAME="UserService_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#UserService_A">UserService, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "rating system",<A NAME="UserService_A"> SubState_A</A>, Punct_LPAREN, &<A HREF="#UserService_getId">UserService_getId</A>, 0, 0, 0, &<A HREF="#UserService_B">UserService, SubState_B</A>, 0, 0}, { "service",<A NAME="UserService_B"> SubState_B</A>, Punct_WHITE, 0, "rating-service", 0, 0, &<A HREF="#UserService_C">UserService, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, {"missing-service", SubState_B, Punct_WHITE, 0, "missing-service", 0, 0, &<A HREF="#UserService_C">UserService, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "missing-scale", SubState_B, Punct_WHITE, 0, "missing-scale", 0, 0, &<A HREF="#UserService_C">UserService, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "observe-dates", SubState_B, Punct_WHITE, 0, "observe-dates", 0, 0, &<A HREF="#UserService_C">UserService, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "ratings", SubState_B, Punct_LPAREN|Punct_RPAREN,0,"ratings",0,0, &<A HREF="#UserRatingList_N">UserRatingList, SubState_N</A>, Command_CHAIN, &<A HREF="#clearToken">clearToken</A>}, { "get value",<A NAME="UserService_C"> SubState_C</A>, Punct_RPAREN, &<A HREF="#getValue">getValue</A>, 0, 0, 0, &<A HREF="#UserService_D">UserService, SubState_D</A>, 0, 0}, { "end",<A NAME="UserService_D"> SubState_D</A>, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#User_A">User, SubState_A</A>, Command_CLOSE, 0}, { "need open", SubState_D, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#UserService_B">UserService, SubState_B</A>, 0, 0} }; PRIVATE TargetObject_t UserService_targetObject = {"UserService", &<A HREF="#UserService_open">UserService_open</A>, &<A HREF="#UserService_close">UserService_close</A>, &<A HREF="#UserService_destroy">UserService_destroy</A>, UserService_stateTokens, raysize(UserService_stateTokens), CSUserSC_SERVICE}; PRIVATE StateToken_t UserRatingList_stateTokens[] = { /* A: single state list, expects open or close paren */ { "start",<A NAME="UserRatingList_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#UserRatingList_A">UserRatingList, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "start rating",<A NAME="UserRatingList_A"> SubState_A</A>, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#UserRating_N">UserRating, SubState_N</A>, 0, 0}, {"end rating list", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#UserService_D">UserService, SubState_D</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t UserRatingList_targetObject = {"UserRatingList", &<A HREF="#UserRatingList_open">UserRatingList_open</A>, &<A HREF="#UserRatingList_close">UserRatingList_close</A>, &<A HREF="#UserRatingList_destroy">UserRatingList_destroy</A>, UserRatingList_stateTokens, raysize(UserRatingList_stateTokens), CSUserSC_RLIST}; PRIVATE StateToken_t UserRating_stateTokens[] = { /* A: fresh UserRating B: red id C: get value D: need paren before next parm */ { "start",<A NAME="UserRating_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#UserRating_A">UserRating, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "range id",<A NAME="UserRating_A"> SubState_A</A>, Punct_LPAREN, &<A HREF="#UserRating_getId">UserRating_getId</A>, 0, 0, 0, &<A HREF="#UserRating_B">UserRating, SubState_B</A>, 0, 0}, { "missing-scale",<A NAME="UserRating_B"> SubState_B</A>, Punct_WHITE, 0, "missing-scale", 0, 0, &<A HREF="#UserRating_C">UserRating, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "observe-dates", SubState_B, Punct_WHITE, 0, "observe-dates", 0, 0, &<A HREF="#UserRating_C">UserRating, SubState_C</A>, 0, &<A HREF="#User_setTarget">User_setTarget</A>}, { "ranges", SubState_B, Punct_WHITE, 0, "range", "ranges", 0, &<A HREF="#UserRange_N">UserRange, SubState_N</A>, 0, 0}, { "get value",<A NAME="UserRating_C"> SubState_C</A>, Punct_RPAREN, &<A HREF="#getValue">getValue</A>, 0, 0, 0, &<A HREF="#UserRating_D">UserRating, SubState_D</A>, 0, 0}, { "rating end",<A NAME="UserRating_D"> SubState_D</A>, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#UserRatingList_A">UserRatingList, SubState_A</A>, Command_CLOSE, 0}, { "need open", SubState_D, Punct_LPAREN, 0, 0, 0, 0, &<A HREF="#UserRating_B">UserRating, SubState_B</A>, 0, 0} }; PRIVATE TargetObject_t UserRating_targetObject = {"UserRating", &<A HREF="#UserRating_open">UserRating_open</A>, &<A HREF="#UserRating_close">UserRating_close</A>, &<A HREF="#UserRating_destroy">UserRating_destroy</A>, UserRating_stateTokens, raysize(UserRating_stateTokens), CSUserSC_RATING}; PRIVATE StateToken_t UserRange_stateTokens[] = { /* A: read ranges */ { "start",<A NAME="UserRange_N"> SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#UserRange_A">UserRange, SubState_A</A>, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "value",<A NAME="UserRange_A"> SubState_A</A>, Punct_WHITE, &<A HREF="#UserRange_get">UserRange_get</A>, 0, 0, 0, &<A HREF="#UserRange_A">UserRange, SubState_A</A>, 0, 0}, { "value end", SubState_A, Punct_RPAREN, &<A HREF="#UserRange_get">UserRange_get</A>, 0, 0, 0, &<A HREF="#UserRating_D">UserRating, SubState_D</A>, Command_CLOSE, 0} }; PRIVATE TargetObject_t UserRange_targetObject = {"UserRange", &<A HREF="#UserRange_open">UserRange_open</A>, &<A HREF="#UserRange_close">UserRange_close</A>, &<A HREF="#UserRange_destroy">UserRange_destroy</A>, UserRange_stateTokens, raysize(UserRange_stateTokens), CSUserSC_RANGE}; /* CSParse_doc end */ /* S T A T E A S S O C I A T I O N - associate a CSUser with the label list data The label list data is kept around until all states referencing it are destroyed */ typedef struct { CSUser_t * pCSUser; CSUserData_t * pCSUserData; } CSUserAssoc_t; PRIVATE HTList * CSUserAssocs = 0; PRIVATE void CSUserAssoc_add(CSUser_t * pCSUser, CSUserData_t * pCSUserData) { CSUserAssoc_t * pElement; if ((pElement = (CSUserAssoc_t *) HT_CALLOC(1, sizeof(CSUserAssoc_t))) == NULL) HT_OUTOFMEM("CSUserAssoc_t"); pElement->pCSUser = pCSUser; pElement->pCSUserData = pCSUserData; if (!CSUserAssocs) CSUserAssocs = HTList_new(); HTList_appendObject(CSUserAssocs, (void *)pElement); } PRIVATE CSUserAssoc_t * CSUserAssoc_findByData(CSUserData_t * pCSUserData) { HTList * assocs = CSUserAssocs; CSUserAssoc_t * pElement; while ((pElement = (CSUserAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSUserData == pCSUserData) return pElement; return 0; } PRIVATE CSUserAssoc_t * CSUserAssoc_findByState(CSUser_t * pCSUser) { HTList * assocs = CSUserAssocs; CSUserAssoc_t * pElement; while ((pElement = (CSUserAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSUser == pCSUser) return pElement; return 0; } PRIVATE void CSUserAssoc_removeByState(CSUser_t * pCSUser) { CSUserAssoc_t * pElement = CSUserAssoc_findByState(pCSUser); if (!pElement) return; HTList_removeObject(CSUserAssocs, (void *)pElement); HT_FREE(pElement); } /* C O N S T R U C T O R S / D E S T R U C T O R S */ PRIVATE UserServiceRating_t * UserServiceRating_new(void) { UserServiceRating_t * me; if ((me = (UserServiceRating_t *) HT_CALLOC(1, sizeof(UserServiceRating_t))) == NULL) HT_OUTOFMEM("UserServiceRating_t"); me->ranges = HTList_new(); return me; } PUBLIC void UserServiceRating_free(UserServiceRating_t * me) { Range_t * pRange; while ((pRange = (Range_t *) HTList_removeLastObject(me->ranges))) HT_FREE(pRange); SVal_clear(&me->identifier); BVal_clear(&me->missing_scale); BVal_clear(&me->observe_dates); } PRIVATE UserService_t * UserService_new(void) { UserService_t * me; if ((me = (UserService_t *) HT_CALLOC(1, sizeof(UserService_t))) == NULL) HT_OUTOFMEM("UserService_t"); return me; } PUBLIC void UserService_free(UserService_t * me) { UserServiceRating_t * pUserServiceRating; while ((pUserServiceRating = (UserServiceRating_t *) HTList_removeLastObject(me->userServiceRatings))) UserServiceRating_free(pUserServiceRating); HTList_delete(me->userServiceRatings); FVal_clear(&me->version); SVal_clear(&me->rating_system); SVal_clear(&me->rating_service); BVal_clear(&me->missing_service); BVal_clear(&me->missing_scale); BVal_clear(&me->observe_dates); } PUBLIC CSUserData_t * CSUserData_new(void) { CSUserData_t * me; if ((me = (CSUserData_t *) HT_CALLOC(1, sizeof(CSUserData_t))) == NULL) HT_OUTOFMEM("CSUserData_t"); me->userServices = HTList_new(); me->proxies = HTList_new(); return me; } PUBLIC void CSUserData_free(CSUserData_t * me) { UserService_t * pUserService; char * proxy; if (CSUserAssoc_findByData(me)) return; while ((pUserService = (UserService_t *) HTList_removeLastObject(me->userServices))) UserService_free(pUserService); HTList_free(me->userServices); while ((proxy = (char *) HTList_removeLastObject(me->proxies))) HT_FREE(proxy); HTList_free(me->proxies); FVal_clear(&me->version); SVal_clear(&me->user_name); SVal_clear(&me->password); BVal_clear(&me->super_user); FVal_clear(&me->minimum_services); BVal_clear(&me->missing_service); BVal_clear(&me->missing_scale); BVal_clear(&me->observe_dates); HT_FREE(me); } PUBLIC CSUser_t * CSUser_new(CSUserData_t * pCSUserData) { CSUser_t * me; if ((me = (CSUser_t *) HT_CALLOC(1, sizeof(CSUser_t))) == NULL) HT_OUTOFMEM("CSUser_t"); me->pCSUserData = pCSUserData; CSUserAssoc_add(me, pCSUserData); return me; } PUBLIC CSUser_t * CSUser_copy(CSUser_t * old) { CSUser_t * me; me = CSUser_new(old->pCSUserData); memcpy(me, old, sizeof(CSUser_t)); return me; } PUBLIC void CSUser_free(CSUser_t * me) { CSUserData_t * pCSUserData = me->pCSUserData; CSUserAssoc_removeByState(me); HT_FREE(me); CSUserData_free(pCSUserData); } PUBLIC char * CSUser_name(CSUser_t * pCSUser) {return SVal_value(&pCSUser->pCSUserData->user_name);} PUBLIC BOOL CSUser_checkPassword(CSUser_t * pCSUser, char * password) {return strcasecomp(SVal_value(&pCSUser->pCSUserData->password), password) ? NO : YES;} PUBLIC CSUserData_t * CSUser_getCSUserData(CSUser_t * me) {return me->pCSUserData;} PUBLIC UserService_t * CSUser_getUserService(CSUser_t * pCSUser) {return pCSUser->pCurrentUserService;} PUBLIC UserServiceRating_t * CSUser_getUserServiceRating(CSUser_t * pCSUser) {return pCSUser->pCurrentUserServiceRating;} PUBLIC Range_t * CSUser_getUserRatingRange(CSUser_t * pCSUser) {return pCSUser->pCurrentRange;} PUBLIC CSParse_t * CSParse_newUser() { CSParse_t * me = CSParse_new(); me->pParseContext->engineOf = &CSParse_targetParser; me->pParseContext->pStateChangeCallback = &stateChangeCallback; me->pParseContext->pParseErrorHandler = &parseErrorHandler; me->target.pCSUser = CSUser_new(CSUserData_new()); me->pParseState = &User_targetObject; me->currentSubState = SubState_N; return me; } PUBLIC CSUser_t * CSParse_getUser(CSParse_t * me) { return (me->target.pCSUser); } PUBLIC BOOL CSParse_deleteUser(CSParse_t * pCSParse) { CSUser_t * me = GetCSUser(pCSParse); CSUserData_free(CSUser_getCSUserData(me)); CSUser_free(me); return YES; } /* P A R S I N G H A N D L E R S */ PRIVATE StateRet_t stateChangeCallback(CSParse_t * pCSParse, TargetObject_t * pParseState, CSParseSC_t change, BOOL closed, void * pVoid) { CSUser_t * pCSUser = GetCSUser(pCSParse); if (pCSUser->pUserChangeCallback) return (*pCSUser->pUserChangeCallback)(pCSUser, pCSParse, (CSUserSC_t)change, closed, pVoid); return StateRet_OK; } PRIVATE StateRet_t parseErrorHandler(CSParse_t * pCSParse, char * token, char demark, StateRet_t errorCode) { CSUser_t * pCSUser = GetCSUser(pCSParse); if (pCSUser->pUserErrorHandler) return (*pCSUser->pUserErrorHandler)(pCSUser, pCSParse, token, demark, errorCode); return errorCode; } /* CSParse_doc methods */ /* P A R S I N G S T A T E F U N C T I O N S */ PRIVATE StateRet_t <A NAME="clearToken">clearToken</A>(CSParse_t * pCSParse, char * token, char demark) { HTChunk_clear(pCSParse->token); return StateRet_OK; } PRIVATE StateRet_t <A NAME="getProxy">getProxy</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; char * proxy = 0; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; /* let CSParse_targetParser get the punctuation error */ StrAllocCopy(proxy, token); HTList_appendObject(pCSUser->pCSUserData->proxies, (void *)proxy); return StateRet_OK; } #define READY_BVAL(holder, pointer) \ pCSParse->pParseContext->valTarget.pTargetBVal = &CSUser_get##holder(pCSUser)->pointer; pCSParse->pParseContext->valType = ValType_BVAL; #define READY_FVAL(holder, pointer) \ pCSParse->pParseContext->valTarget.pTargetFVal = &CSUser_get##holder(pCSUser)->pointer; pCSParse->pParseContext->valType = ValType_FVAL; #define READY_DVAL(holder, pointer) \ pCSParse->pParseContext->valTarget.pTargetDVal = &CSUser_get##holder(pCSUser)->pointer; pCSParse->pParseContext->valType = ValType_DVAL; #define READY_SVAL(holder, pointer) \ pCSParse->pParseContext->valTarget.pTargetSVal = &CSUser_get##holder(pCSUser)->pointer; pCSParse->pParseContext->valType = ValType_SVAL; PRIVATE StateRet_t <A NAME="User_setTarget">User_setTarget</A>(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); int caseNumber; pCSParse->pParseContext->valType = ValType_SVAL; if (pCSParse->pParseState == &User_targetObject) { caseNumber = pCSParse->pStateToken-User_stateTokens; switch (caseNumber) { case 2: READY_FVAL(CSUserData, version); break; case 3: READY_SVAL(CSUserData, user_name); break; case 4: READY_SVAL(CSUserData, password); break; case 5: READY_BVAL(CSUserData, super_user); break; case 6: READY_FVAL(CSUserData, minimum_services); break; case 7: READY_BVAL(CSUserData, missing_service); break; case 8: READY_BVAL(CSUserData, missing_scale); break; case 9: READY_BVAL(CSUserData, observe_dates); break; case 10: READY_BVAL(CSUserData, use_bureau); break; } } else if (pCSParse->pParseState == &UserService_targetObject) { caseNumber = pCSParse->pStateToken-UserService_stateTokens; switch (caseNumber) { case 2: READY_SVAL(UserService, rating_service); break; case 3: READY_BVAL(UserService, missing_service); break; case 4: READY_BVAL(UserService, missing_scale); break; case 5: READY_BVAL(UserService, observe_dates); break; } } else if (pCSParse->pParseState == &UserRating_targetObject) { caseNumber = pCSParse->pStateToken-UserRating_stateTokens; switch (caseNumber) { case 2: READY_BVAL(UserServiceRating, missing_scale); break; case 3: READY_BVAL(UserServiceRating, observe_dates); break; } } return StateRet_OK; } PRIVATE StateRet_t <A NAME="getValue">getValue</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { switch (pCSParse->pParseContext->valType) { case ValType_BVAL: BVal_readVal(pCSParse->pParseContext->valTarget.pTargetBVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_FVAL: FVal_readVal(pCSParse->pParseContext->valTarget.pTargetFVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_SVAL: SVal_readVal(pCSParse->pParseContext->valTarget.pTargetSVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_DVAL: DVal_readVal(pCSParse->pParseContext->valTarget.pTargetDVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; default: break; } return StateRet_OK; } PRIVATE StateRet_t <A NAME="User_open">User_open</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t <A NAME="User_close">User_close</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_DONE; } PRIVATE void User_destroy(CSParse_t * pCSParse) { /* CSUser_t * pCSUser = GetCSUser(pCSParse); */ } PRIVATE StateRet_t <A NAME="UserService_open">UserService_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserService = UserService_new(); HTList_appendObject(pCSUser->pCSUserData->userServices, (void *)pCSUser->pCurrentUserService); return StateRet_OK; } PRIVATE StateRet_t <A NAME="UserService_getId">UserService_getId</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; /* let CSParse_targetParser get the punctuation error */ SVal_readVal(&pCSUser->pCurrentUserService->rating_service, token); return StateRet_OK; } PRIVATE StateRet_t <A NAME="UserService_close">UserService_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserService = 0; return StateRet_OK; } PRIVATE void UserService_destroy(CSParse_t * pCSParse) { CSUser_t * pCSUser = GetCSUser(pCSParse); HTList_removeObject(pCSUser->pCSUserData->userServices, (void *)pCSUser->pCurrentUserService); UserService_free(pCSUser->pCurrentUserService); pCSUser->pCurrentUserService = 0; } PRIVATE StateRet_t <A NAME="UserRatingList_open">UserRatingList_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserService->userServiceRatings = HTList_new(); return StateRet_OK; } PRIVATE StateRet_t <A NAME="UserRatingList_close">UserRatingList_close</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE void UserRatingList_destroy(CSParse_t * pCSParse) { CSUser_t * pCSUser = GetCSUser(pCSParse); UserService_t * pUserService = pCSUser->pCurrentUserService; UserServiceRating_t * pUserServiceRating; while ((pUserServiceRating = (UserServiceRating_t *) HTList_removeLastObject(pUserService->userServiceRatings))) UserServiceRating_free(pUserServiceRating); HTList_delete(pUserService->userServiceRatings); pUserService->userServiceRatings = 0; } PRIVATE StateRet_t <A NAME="UserRating_open">UserRating_open</A>(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserServiceRating = UserServiceRating_new(); HTList_appendObject(pCSUser->pCurrentUserService->userServiceRatings, (void *)pCSUser->pCurrentUserServiceRating); return StateRet_OK; } PRIVATE StateRet_t <A NAME="UserRating_getId">UserRating_getId</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; /* let CSParse_targetParser get the punctuation error */ SVal_readVal(&pCSUser->pCurrentUserServiceRating->identifier, token); return StateRet_OK; } PRIVATE StateRet_t <A NAME="UserRating_close">UserRating_close</A>(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserServiceRating = 0; return StateRet_OK; } PRIVATE void UserRating_destroy(CSParse_t * pCSParse) { CSUser_t * pCSUser = GetCSUser(pCSParse); HTList_removeObject(pCSUser->pCurrentUserService->userServiceRatings, (void *)pCSUser->pCurrentUserServiceRating); UserServiceRating_free(pCSUser->pCurrentUserServiceRating); pCSUser->pCurrentUserServiceRating = 0; } PRIVATE StateRet_t <A NAME="UserRange_open">UserRange_open</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t <A NAME="UserRange_get">UserRange_get</A>(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); UserServiceRating_t * pUserServiceRating = pCSUser->pCurrentUserServiceRating; Range_t * me; char * ptr, * backPtr; if (!token) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; if ((me = (Range_t *) HT_CALLOC(1, sizeof(Range_t))) == NULL) HT_OUTOFMEM("Range_t"); /* me = Range_new(); */ HTList_appendObject(pUserServiceRating->ranges, (void *)me); backPtr = ptr = token; while (*ptr) { if (*ptr == ':') { *ptr = 0; ptr++; break; } ptr++; } FVal_readVal(&me->min, backPtr); if (*ptr) FVal_readVal(&me->max, ptr); return StateRet_OK; } PRIVATE StateRet_t <A NAME="UserRange_close">UserRange_close</A>(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE void UserRange_destroy(CSParse_t * pCSParse) { } /* CSParse_doc end */ /* I T E R A T O R S - scan through the CSUser data structures for <identifier> */ PUBLIC CSError_t CSUser_iterateServices(CSUser_t * pCSUser, CSUser_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * userServices; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSUser || !pCSUser->pCSUserData->userServices) return CSError_BAD_PARAM; userServices = pCSUser->pCSUserData->userServices; while ((pCSUser->pCurrentUserService = (UserService_t *) HTList_nextObject(userServices)) && ret == CSError_OK) if (!identifier || !strcasecomp(SVal_value(&pCSUser->pCurrentUserService->rating_service), identifier)) { ret = (*pIteratorCB)(pCSUser, pParms, identifier, pVoid) != CSError_OK; count++; } if (!count) return CSError_SERVICE_MISSING; return ret; } PUBLIC CSError_t CSUser_iterateServiceRatings(CSUser_t * pCSUser, CSUser_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * userServiceRatings; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSUser || !pCSUser->pCurrentUserService || !pCSUser->pCurrentUserService->userServiceRatings) return CSError_BAD_PARAM; userServiceRatings = pCSUser->pCurrentUserService->userServiceRatings; while ((pCSUser->pCurrentUserServiceRating = (UserServiceRating_t *) HTList_nextObject(userServiceRatings)) && ret == CSError_OK) if (!identifier || !strcasecomp(SVal_value(&pCSUser->pCurrentUserServiceRating->identifier), identifier)) { ret = (*pIteratorCB)(pCSUser, pParms, identifier, pVoid) != CSError_OK; count++; } if (!count) return CSError_RATING_MISSING; return ret; } <PRE> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Files.html������������������������������������������������������������������0100644�0000764�0000144�00000012112�06252703722�016433� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C PICS library files</TITLE> <!-- Changed by: Eric Prud'hommeaux, 27-Mar-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" SRC="../../Icons/WWW/PICS48x.gif" ALT="Lib"></A> <IMG BORDER="0" SRC="../../Icons/WWW/Files48x.gif"> <H1>W3C PICS library files</H1> <A NAME="contents"><H1>Contents</H1></A> <UL> <LI><A HREF="#CSLUtils">CSLUtils</A> <LI><A HREF="#CSLApp">CSLApp</A> <LI><A HREF="#documentation">Documentation</A> </UL> <P> <HR> <A NAME="CSLUtils"><H1>CSLUtils</H1></A> <A HREF="../src/CSLUtils.html">CSLUtils.html</A>. This contains definitions of primitive data types and ephemoral types <P> <H2>Parser</H2> <A HREF="../src/CSParse.html"<H3>CSParse.html</H3></A> Included by CSParse and the individual parsers. <P> <A HREF="../src/CSParse.c"<H3>CSParse.c</H3></A> Contains the parse engine and the common funtions that the individual parsers use. <P> <H3>Labels</H3> <A HREF="../src/CSLL.html"<H3>CSLL.html</H3></A> Application interface to Label data structures and internals <P> <A HREF="../src/CSLLSt.html"<H3>CSLLSt.html</H3></A> Label data internals <P> <A HREF="../src/CSLabel.c"<H3>CSLabel.c</H3></A> or <A HREF="CSLabel.html"<H3>CSLabel.html</H3></A> Label parser and iterators <P> <A HREF="../src/CSLLURLs.c"<H3>CSLLURLs.c</H3></A> Iterates through a CSLabel, returns list of the <B>SingleLabels</B> <P> <A HREF="../src/CSLLOut.c"<H3>CSLLOut.c</H3></A> Spit out CSLLData through an HTStream, useful for debugging <P> <BR> <H3>machine-readable description</H3> <A HREF="../src/CSMR.html"<H3>CSMR.html</H3></A> Application interface to MR data structures and internals <P> <A HREF="../src/CSMRSt.html"<H3>CSMRSt.html</H3></A> MR data internals <P> <A HREF="../src/CSMacRed.c"<H3>CSMacRed.c</H3></A> or <A HREF="CSMacRed.html"<H3>CSMacRed.html</H3></A> MR parser and iterators <P> <BR> <H3>User</H3> Example user description, not specified in any standard. <P> <A HREF="../src/CSUser.html"<H3>CSUser.html</H3></A> Application interface to User data structures and internals <P> <A HREF="../src/CSUserSt.html"<H3>CSUserSt.html</H3></A> User data internals <P> <A HREF="../src/CSUser.c"<H3>CSUser.c</H3></A> or <A HREF="CSUser.html"<H3>CSUser.html</H3></A> User parser and iterators <P> <HR> <A NAME="LablPars"><H2>Label parser example</H2></A> <BR> <A HREF="../LablPars/LablPars.c"<H3>LablPars.c</H3></A> LablPars provide an example of using the Label parser in a minimal program. See the <A HREF="../LablPars/Makefile">Makefile</A> for an idea of what modules are used and <A HREF="HTFuncs.html">HTFuncs.html</A> for a list of functions imported from libwww. <P> <HR> <A NAME="CSLApp"><H1>CSLApp</H1></A> On <A HREF="../../Library/User/Platform/WinDLL.html">Windows platforms</A>, The <A HREF="#CSLApp">application</A> interface is implemented as a DLL <BR> <A HREF="../src/CSLApp.html"<H3>CSLApp.html</H3></A> Interface for an application using the full libwww to retrieve URLs. This provides automated label retrieval and user profile validation when a document is loaded. <P> <A HREF="../src/CSApp.c"<H3>CSApp.c</H3></A> User selection and MIME header generation and bureau requests. <P> <A HREF="../src/CSCore.c"<H3>CSCore.c</H3></A> Provides the ability to load Labels, MR, and Users through standard data flow (HTStream). <P> <A HREF="../src/CSUsrLst.html"<H3>CSUsrLst.html</H3></A> and <A HREF="../src/CSUsrLst.c"<H3>CSUsrLst.c</H3></A> This maintains a list that associates users with URLs. This allows the application to have access to user profiles kept at a central site and allows the users to remember only their name and password. This may be usefull at proxy sites at well. <P> <A HREF="../src/CSChkLab.c"<H3>CSChkLab.c</H3></A> Compare labels ratings to user ratings to permit or deny a document <P> <A HREF="../src/CSKwik.c"<H3>CSKwik.c</H3></A> Simple HTStream that prints to the console. It is used in conjunction with CSLLOut <P> <A HREF="../../LineMode/src/HTBrowse.c"<H3>HTBrowse.c</H3></A> A slightly modified version of the W3 LineMode browser. <P> <HR> <A NAME="documentation"><H1>Documentation</H1></A> <A HREF="/"<H3>Overview.html</H3></A> Cover page for the PICS docs <P> <A HREF="Using.html"<H3>Using.html</H3></A> Introduction to the PICS docs <P> <A HREF="Intrface.html"<H3>Intrface.html</H3></A> Descritpion of the header file interfaces to the library <P> <A HREF="HTFuncs.html"<H3>HTFuncs.html</H3></A> List of libwww functions needed for the minimal "CSUtils" interface to libpics <P> <A HREF="ReleaseNotes.html"<H3>ReleaseNotes.html</H3></A> Exciting news about <B><I>THIS</B></I> release! <P> <A HREF="Parsing.html"<H3>Parsing.html</H3></A> A description of the parsing process. It describes the purpose of the data structures and the process for creating them from a BNF description of the language. <P> <A HREF="Files.html"<H3>Files.html</H3></A> This file - a description of all the files associated with the PICS library. <P> <HR> <ADDRESS>Eric Prud'hommeuax, <A HREF="mailto:libpics@w3.org">libpics@w3.org</A>, March 96 </ADDRESS></BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/HTFuncs.html����������������������������������������������������������������0100644�0000764�0000144�00000011527�06252703724�016716� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>HTUtils functions</TITLE> <!-- Changed by: Eric Prud'hommeaux, 28-Mar-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"></A> <H1>HTUtils functions</H1> HTUtils is a subset of the libwww modules that is used by CSLUtils. That is, the CSLUtils modules, CSParse and CSLabel, use certain functionality from libwww. The functions containing these modules have been sequestered into a seperated directory called <A HREF="../HTUtils">HTUtils</A>. When CSLApp is being used in an application not based on libwww, it is expected that the developer will either: <OL> <LI><A HREF="#import">import the modules</A> <LI><A HREF="#emulate">emulate their functionality elsewhere in the app</A> <LI><A HREF="#map">define macros to map HT functions to those already in the application</A> </OL> A combination of 1 and 2 can be see in the <A HREF="#LablPars">LablPars</A> example. <A NAME="functionList"><H2>function list</H2></A> <UL> <H3>tracing</H3> <LI><A HREF="../HTUtils/HTUtils.html#HTTrace">HTTrace</A> - provides a simple error tracing facility. The calling convention is identical to that of printf so <PRE> #define HTTrace printf </PRE> is a perfectly logical implementation. <P> <H3>List functions from HTList.c</H3> <LI><A HREF="../HTUtils/HTList.html#new">HTList_new</A> <LI><A HREF="../HTUtils/HTList.html#delete">HTList_delete</A> <LI><A HREF="../HTUtils/HTList.html#appendObject">HTList_appendObject</A> <LI><A HREF="../HTUtils/HTList.html#removeObject">HTList_removeObject</A> <LI><A HREF="../HTUtils/HTList.html#removeLastObject">HTList_removeLastObject</A> <LI><A HREF="../HTUtils/HTList.html#count">HTList_count</A> <H3>Chunk functions from HTChunk.c</H3> <LI><A HREF="../HTUtils/HTChunk.html#new">HTChunk_new</A> <LI><A HREF="../HTUtils/HTChunk.html#delete">HTChunk_delete</A> <LI><A HREF="../HTUtils/HTChunk.html#clear">HTChunk_clear</A> <LI><A HREF="../HTUtils/HTChunk.html#putb">HTChunk_putb</A> <LI><A HREF="../HTUtils/HTChunk.html#putc">HTChunk_putc</A> <H3>string functions from HTString.c</H3> <LI><A HREF="../HTUtils/HTString.html#strcasecomp">strcasecomp</A> <LI><A HREF="../HTUtils/HTString.html#strncasecomp">strcasecomp</A> <LI><A HREF="../HTUtils/HTString.html#HTSACopy">HTSACopy</A> <H3>memory allocation functions from HTMemory.c</H3> <LI><A HREF="../HTUtils/HTMemory.html#malloc">HTMemory_malloc</A> <LI><A HREF="../HTUtils/HTMemory.html#calloc">HTMemory_calloc</A> <LI><A HREF="../HTUtils/HTMemory.html#realloc">HTMemory_realloc</A> <LI><A HREF="../HTUtils/HTMemory.html#free">HTMemory_free</A> <LI><A HREF="../HTUtils/HTMemory.html#outofmem">HTMemory_outofmem</A> </UL> <A NAME="import"><H2>importing HT modules</H2></A> The simplest way to provide the HT functionality to the application is to add the required modules to the application. Because all libwww functions and macros start with HT, there should be no name collisions. However, this may result in redundant code. If your application already has List, Chunk, string, or memory functions, it may be advisable to use one of the following solutions: <P> <A NAME="emulate"><H2>emulating HT functions in the application</H2></A> Any of the HT functions may be resolved elsewhere in the application. The <A HREF="#LablPars">LablPars</A> example uses this technique to provide the HTMemory_ functions. It includes simple version of the HTMemory_ functions in LabePars.c, eg: <PRE> void * HTMemory_malloc (size_t size) { return malloc(size); } void HTMemory_free (void * ptr) { free(ptr); } </PRE> <P> <A NAME="map"><H2>mapping HT functions to application functions</H2></A> The parser modules all include HTUtils.h. This module maps macros to the HT functions listed above. The developer may with to replace HTUtils.h with one that maps the macros to funtions already present in the application. Some of the functions, HTTrace, and the HTMemory_ functions, correlate to stdlib functions and may be mapped directly to them, eg: <PRE> #define HT_MALLOC malloc #define HT_CALLOC calloc #define HT_REALLOC realloc #define HT_FREE free </PRE> <P> <A NAME="LablPars"><H2>LablPars</H2></A> The <A HREF="../LablPars/LablPars.c">LablParse.c</A> program is an example of a simple application using the <A HREF="Intrface.html#CSLUtils">CSLUtils</A> interface to libpics. It includes the libwww modules <UL> <LI>HTList.c <LI>HTChunk.c <LI>HTString.c </UL> The functionality of HTMemory.c is provided by the HTMemory_ functions in the bottom of LablPars.c. HTMemory.c's implementation of the HTMemory_ functions provides callbacks for out of memory conditions and was more complicated than the LablPars example merrited. <P> <P> <HR> <ADDRESS>Eric Prud'hommeuax, <A HREF="mailto:libpics@w3.org">libpics@w3.org</A>, March 96 </ADDRESS></BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Intrface.html���������������������������������������������������������������0100644�0000764�0000144�00000026211�06252703726�017135� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C PICS library Interfaces</TITLE> <!-- Changed by: Eric Prud'hommeaux, 24-Apr-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" SRC="../../Icons/WWW/PICS48x.gif" ALT="PICS"></A> <IMG BORDER="0" SRC="../../Icons/WWW/internals48x.gif"> <H1>W3C PICS library Interfaces</H1> <IMG BORDER="0" SRC="../../../Icons/WWW/construction.gif"> Any suggestions or ideas are welcome at <AHREF="mailto:libpics@w3.org">libpics@w3.org</A>. <P> <A NAME="components"><H2>Components</H2></A> The libpics library is divided into two components, accessible through two interfaces: <UL> <LI><A HREF="#CSLUtils">CSLUtils</A> - a minimal set of files providing parsing capabilities for PICS labels and Machine-readable service descritpions. <LI><A HREF="#CSLApp">CSLApp</A> - component library for building PICS applications on top of libwww. It provides the application with automatic label requests, parsing of the results, user management, and document authorization. <P> Furthur functionality is provided by: <LI><A HREF="#CSLabel">CSLabel</A> - access to PICS label structures <LI><A HREF="#CSUser">CSUser</A> - sample user profiles <LI><A HREF="#CSMacRed">CSMacRed</A> - machine-readable service descritpions <P> Of interest, but no consequence: <LI><A HREF="#CSParse">CSParse</A> - how the above three are generated </UL> <P> Every module in the PICS library has a HTML document associated with it containing a detailed description of its interface. See <A HREF="../../Library/User/Guide/Overview.html#headers">w3c Library Interfaces</A> for instructions on modifying header or html files. <P> <HR> <A NAME="CSLUtils"><H1>CSLUtils</H1></A> The minimal interface to the PICS library is to use it as just a parser. The parser may read a label, machine readable service description, or a user descritpion. The only PICS modules needed for this interface are the parser and a module specific to the object you wish to parse (see the <A HREF="#LablPars">Label parser example</A>). The parser uses list, chunk, and memory management from the libwww modules. See the <A HREF="HTFuncs.html">function list</A> for a list of the needed funtions. These functions are implemented in libwww. To make it easier to genericly integrate CSLUtils with any application, the libwww modules of these functions have been sequestered to <A HREF="../HTUtils">HTUtils</A>, along with the necessary headers. <P> The CSLUtils interface is defined in <A HREF="../src/CSLUtils.html">CSLUtils.html</A>. This contains the definition of primitive data types and ephemoral types, as well as some <A HREF="#labelGen">label request generation functions</A>. <A NAME="CSLUtilsObjects"><H3>objects</H3></A> It defined the following objects needed to employ the parser: <UL> <LI> BVal, FVal, SVal, DVal - boolean and floating values need a structure to convey an unititialized state. The float value also needs to have positive and negative infinity values. BVal and FVal implement this. SVal and DVal are parellel structures for string and date values. <LI> StateRet - a comprehensive set of error parsing error codes. <LI> CSParse - holds the state data for iterative calls to the parser. A CSParse object is created with the following: <UL> <LI>TargetChangeCallback - called whenever the parser switches target data types. For instance, the label parser will do a callback when it encounters a single-label in a service-info. It will do another callback when the single-label is finished and the context is switching back to the service-info. <LI> ParseErrorHandler - how the application provides error information to the user and decides which errors allow the parser to attempt to continue. </UL> <LI> CSLabel, CSUser, and CSMachRead - contain the data read by the parser. These objects contain all the data that could be encountered while parsing these objects. <LI> CSError - a bastardised concatination of the errors encountered in generating and dealing with labels requests. </UL> <A NAME="labelGen"><H3>label request generation functions</H3></A> These functions generate label requests given a list of services. These are also implemented for CSUsers <UL> <LI> CSList_acceptLabels <LI> CSList_getLabels <LI> CSList_postLabels </UL> <P> <A NAME="LablPars"><H2>LablPars</H2></A> <A HREF="../LablPars/LablPars.c">LablPars.c</A> demonstrates the use of the <A HREF="#CSLUtils">CSLUtil</A>s interface. The <A HREF="Using.html#howToParse">User's guide</A> explains how LablPars uses the CSLUtils interface. <A HREF="HTFuncs.html#LablPars">HTFuncs.html</A> explains how LablPars provides the list and memory functions required by the parser. Example output is in <A HREF="Simple.html">Simple.html</A>. Another example, that parses .rat files (machine-readable service descriptions), is in <A HREF="../RatPars">RatPars</A>. <HR> <A NAME="CSLApp"><H2>CSLApp</H2></A> This interface is a superset of the <A HREF="#CSLUtils">CSLUtils</A> interface. It automates the process of generating label requests for each URL request and checking user profiles to allow or deny access to the URL. It is intended to supplement the <A HREF="../../Library/User/Overview.html">libwww</A> and will probably only be usefull to applications based it. <P> The CSLApp interface is defined in <A HREF="../src/CSLApp.html">CSLApp.html</A>. This contains the definition of primitive data types and ephemoral types, as well as some <A HREF="#labelGen">label request generation functions</A>. <A NAME="CSAppObjects"><H3>objects</H3></A> It defined the following objects: <UL> <LI>CSApp_callback - this is called whenever libpics determines whether a user is allowed to see a labeld document. The application may use it to inform the user, or allow the user an opportunitiy to switch to a more priviledged identity. <LI>CSUserList - a list to associate user names with URLs to their profiles. <LI>CSApp_userCallback - called when a new PICS profile is loaded. It gives the application the opportunity to prompt the user switch to that profile. </UL> <A NAME="CSAppFunctions"><H3>functions</H3></A> <UL> <LI>CSApp_registerApp - called to enable libpics for an application. This sets up default callbacks. <LI>CSApp_registerDefaultUser - the simplest way to use libpics is to set the default user. This means that an application may have only one user at a time. <LI>CSApp_registerUser - select a user and return a handle to the app. This is usefull if the app registers a user for each request. <LI>CSApp_registerReq - associate a user and other parameters with a request. <LI>CSApp_unregisterReq <LI>CSApp_unregisterUser <LI>CSApp_unregisterApp </UL> <BR> <HR> <A NAME="CSLabel"><H2>CSLabel</H2></A> <A HREF="../src/CSLL.html"<H3>CSLL.html</H3></A> Application interface to Label data structures and internals <A NAME="CSLLObjects"><H3>objects</H3></A><UL> <LI>CSLLTC - CSLabel List Target Change. This enum lists the values passed to TargetChangeCallback <LI>CSLLData - optionally ephemeral container of label data. The contents are available in <A HREF="#CSLLSt">CSLLSt</A>. The application may treat CSLLData as an ephemeral type and use <A HREF="#CSLLIterator">iterators</A> to access the data. <P> TargetChangeCallback and ErrorHandler are subclassed to deal with CSLabels and CSLLTC: <LI>LabelTargetCallback <LI>LLErrorHandler <P> The CSLabel iterator callback: <LI>CSLabel_callback </UL> <A NAME="CSLLFunctions"><H3>functions</H3></A> <UL> <LI>CSParse_newLabel - make a CSParse object for parsing labels <LI>CSParse_deleteLabel - reclaim the above memory <LI>CSParse_getLabel - get a CSLabel from the CSParse made above <LI>CSLabel_copy - copy a CSLabel object, useful for <A HREF="#CSLLIterator"> iterators</A> <LI>CSLabel_free <P> <A NAME="CSLLIterator">iterators</A> are a way of accessing CSLabel data: <LI>CSLabel_iterateServices <LI>CSLabel_iterateLabels <LI>CSLabel_iterateSingleLabels <LI>CSLabel_iterateLabelRatings <P> <A NAME="CSLLRange">range functions</A> check to see if a user range includes a rating value or range: <LI>CSLabel_ratingsIncludeFVal - check inclusion of single value <LI>CSLabel_ratingsIncludeRange - check inclusion of range <LI>CSLabel_ratingsIncludeRanges - check inclusion of list of ranges </UL> <P> <A NAME="CSLLSt"></A> </ADDRESS><A HREF="../src/CSLLSt.html"<H3>CSLLSt.html</H3></A> Label data internals <A NAME="CSLLStObjects"><H3>objects</H3></A><UL> <LI>CSLLData <LI>ServiceInfo <LI>Label <LI>SingleLabel <LI>LabelRating <LI>LabelOptions <LI>Extension <LI>ExtensionData <LI>LabelError </UL> <A NAME="CSLLStFunctions"><H3>functions</H3></A> <UL> <LI>CSLabel_getCSLLData <LI>CSLabel_getLabelError <LI>CSLabel_getLabelOptions <LI>CSLabel_getServiceInfo <LI>CSLabel_getServiceName <LI>CSLabel_getLabel <LI>CSLabel_getLabelNumber <LI>CSLabel_getSingleLabel <LI>CSLabel_getLabelRating <LI>CSLabel_getRatingName <LI>CSLabel_getRange </UL> <P> <HR> <A NAME="CSUser"><H3>CSUser</H3></A> Example user description, not specified in any standard. <P> <A HREF="../src/CSUser.html"<H3>CSUser.html</H3></A> Application interface to User data structures and internals <A NAME="CSUserObjects"><H3>objects</H3></A><UL> <LI> <LI> <LI> </UL> <A NAME="CSUserFunctions"><H3>functions</H3></A> <UL> <LI> <LI> <LI> </UL> <P> <A NAME="CSUserSt"></A> <A HREF="../src/CSUserSt.html"<H3>CSUserSt.html</H3></A> User data internals <A NAME="CSUserStObjects"><H3>objects</H3></A><UL> <LI> <LI> <LI> </UL> <A NAME="CSUserStFunctions"><H3>functions</H3></A> <UL> <LI> <LI> <LI> </UL> <P> <HR> <A NAME="CSMacRed"><H3>CSMacRed</H3></A> <A HREF="../src/CSMR.html"<H3>CSMR.html</H3></A> Application interface to MR data structures and internals <A NAME="CSMRObjects"><H3>objects</H3></A><UL> <LI> <LI> <LI> </UL> <A NAME="CSMRFunctions"><H3>functions</H3></A> <UL> <LI> <LI> <LI> </UL> <P> <A NAME="CSMRSt"></A> <A HREF="../src/CSMRSt.html"<H3>CSMRSt.html</H3></A> MR data internals <A NAME="CSMRStObjects"><H3>objects</H3></A><UL> <LI> <LI> <LI> </UL> <A NAME="CSMRStFunctions"><H3>functions</H3></A> <UL> <LI> <LI> <LI> </UL> <P> <HR> <A NAME="CSParse"><H2>CSParser</H2></A> <A NAME="CSParseDefinition"><H3>definition files</H3></A> <UL> <LI><A HREF="../src/CSParse.html">CSParse.html</A> - included by CSParse and the component parsers. <LI><A HREF="../src/CSLUtils.html">CSLUtils.html</A> - included by application calling parser. </UL> <A NAME="CSParseObjects"><H3>objects</H3></A><UL> <LI>CSParse - the shell parser's context. Made of: <UL> <LI>NowIn - how the parser keeps track of whether it is in a token, string, etc. <LI>Engine - what the parser calls with each token after it and its terminating punctuation is found. This is set by the component parsers. </UL> <LI>StateToken and TargetObject - the data structures that tell the component parsers what to expect and where to place data. </UL> <A NAME="CSParseFunctions"><H3>functions</H3></A> <UL> <LI>CSParse_new - used by label, user, MacRed parses to create parser for their own objects <LI>CSParse_delete use by app to remove the CSParse object that built a lalel,user, MacRed. <LI>CSParse_parseChunk - called by app to read a string and generate data structures. </UL> <P> <HR> <ADDRESS>Eric Prud'hommeuax, <A HREF="mailto:libpics@w3.org">libpics@w3.org</A>, March 96 </ADDRESS></BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Makefile.am�����������������������������������������������������������������0100644�0000764�0000144�00000000221�06136212755�016537� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Overview.html���������������������������������������������������������������0100644�0000764�0000144�00000003004�06301652605�017175� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C PICS Sample Code Library Documentation</TITLE> <!-- Changed by: Eric Prud'hommeaux, 29-Mar-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" SRC="../../Icons/WWW/PICS48x.gif" ALT="PICS"></A> <H1>W3C PICS Sample Code Library Documentation</H1> This is a list of what you will find of documentation describing the W3C PICS Sample Code Library. <DL> <DT><A HREF="ReleaseNotes.html"></A> <B>Release Notes</B> <DD>Listing new features and bug fixes <DT><A HREF="Using.html"><IMG BORDER="0" SRC="../../Icons/WWW/startup48x.gif" ALT="QUICKGUIDE"></A> <B>Get Started</B> <DD>A quick quide describing how to get started writing a PICS complient application <DT><A HREF="Intrface.html"><IMG BORDER="0" ALT="Internals" SRC="../../Icons/WWW/internals48x.gif"></A> <B>Internals</B> <DD>A detailed list of modules describing the internals of the Library <DT><A HREF="Bugs.html"></A> <B>Known Bugs</B> <DD>Listing what we already know is wrong <DT><A HREF="Files.html"><IMG BORDER="0" SRC="../../Icons/WWW/Files48x.gif" ALT="Files"></A> <B>Files</B> <DD>Listing of all files associated with this library </DL> <P> <HR> <ADDRESS>Eric Prud'hommeaux, <A HREF="mailto:libpics@w3.org">libpics@w3.org</A>, March 96</ADDRESS> </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Parsing.html����������������������������������������������������������������0100644�0000764�0000144�00000016454�06252703733�017013� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Parser Guide</TITLE> <!-- Changed by: Eric Prud'hommeaux, 24-Mar-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" SRC="../../Icons/WWW/PICS48x.gif" ALT="Lib"></A> <IMG BORDER="0" SRC="../../Icons/WWW/internals48x.gif"> <H1>Parser Guide</H1> This section describes how to use CSParse or it's children, CSParse_. <H2>Parser States</H2> The parser works through a series of <A HREF="../src/CSParse.html#TargetObject">TargetObjects</A> and <A HREF="../src/CSParse.html#StateToken">StateTokens</A>. The TargetObject describes the current data type being filled and the StateTokens describe what tokens are permitted at what <A HREF="../src/CSParse.html#SubState">SubStates</A> within that TargetObject. For instance, while reading a label service, the name of the service must come before any options. Therefor, the substate that matches the service name advances to the next substate, which will accept options. <P> One of the parameters when creating a parser is a callback function that is called whenever the parser changes TargetObject. This allows the calling program to see each data element as it is created. See more info in <A HREF="../src/CSParse.html">CSParse.html</A>.<P> <A NAME="ParsingExample"><H2>Parsing Example</H2></A> This example is taken from the Label parser. StateTokens are generated from the BNF: <PRE> <B>labellist ::</B> '(' 'PICS-1.0' <I>service-info</I>+<I> </I>')' <A NAME="BNFServiceInfo"><B>service-info :: </B></A>'error' '(no-ratings' <I>explanation</I>* ')' | <I>serviceID service-error </I>| <I>serviceID option</I>*<I> labelword label</I>* </PRE> From this, we generate two TargetObjects, <A HREF="#LabelList_targetObject">LabelList_targetObject</A> and <A HREF="#ServiceInfo_targetObject">ServiceInfo_targetObject</A>. <PRE> StateToken_t LabelList_stateTokens[] = { /* A: fresh LabelList C: expect end */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelList_targetObject">LabelList_targetObject</A>, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"get version", <A NAME="LabelList_A">SubState_A</A>, Punct_WHITE, &LabelList_getVersion, 0, 0, 0, &<A HREF="#ServiceInfo_targetObject">ServiceInfo_targetObject</A>, SubState_N, 0, 0}, {"end of list", <A NAME="LabelList_C">SubState_C</A>, Punct_RPAREN, 0, 0, 0, 0, &<A HREF="#LabelList_targetObject">LabelList_targetObject</A>, SubState_A, Command_MATCHANY|Command_CLOSE, 0} }; TargetObject_t <A NAME="LabelList_targetObject">LabelList_targetObject</A> = {"LabelList", &LabelList_open, &LabelList_close, &LabelList_destroy, LabelList_stateTokens, raysize(LabelList_stateTokens), CSLLSC_LIST}; </PRE> <PRE> StateToken_t ServiceInfo_stateTokens[] = { /* A: fresh ServiceInfo B: has service id C: needs option value D: call from Awkward or NoRat to close E: call from Awkward to re-enter */ { "open", <A NAME="ServiceInfo_N">SubState_N</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ServiceInfo_targetObject">ServiceInfo_targetObject</A>, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { <A NAME="ServiceInfo_A_err">"error w/o id"</A>, SubState_A, Punct_LPAREN, 0, "error", 0, 0, &ServiceNoRat_targetObject, SubState_N, 0, 0}, { <A NAME="ServiceInfo_A_id">"service id"</A>, SubState_A, Punct_WHITE, &ServiceInfo_getServiceId, 0, 0, 0, &<A HREF="#ServiceInfo_targetObject">ServiceInfo_targetObject</A>, SubState_B, 0, 0}, . . . { "close", <A NAME="ServiceInfo_D">SubState_D</A>, Punct_ALL, 0, 0, 0, 0, &<A HREF="#LabelList_targetObject">LabelList_targetObject</A>, SubState_C, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0}, { "re-enter", SubState_E, Punct_ALL, 0, 0, 0, 0, &<A HREF="#ServiceInfo_targetObject">ServiceInfo_targetObject</A>, SubState_N, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0} }; TargetObject_t <A NAME="ServiceInfo_targetObject">ServiceInfo_targetObject</A> = {"ServiceInfo", ServiceInfo_open, &ServiceInfo_close, &ServiceInfo_destroy, ServiceInfo_stateTokens, raysize(ServiceInfo_stateTokens), CSLLSC_SERVICE}; </PRE> LabelList_targetObject will start out needing to have the data structure created and initialized. The "open" line matches any punctuation (Punct_ALL) and any string (Command_MATCHANY). It will call the open command (Command_OPEN), and pass its input (Command_CHAIN) to <A HREF="#LabelList_A">SubState_A</A>. <P> <A HREF="#LabelList_A">SubState_A</A> has only one possible match, "get version". This match is checked by LabelList_getVersion and, if it checks out OK, we proceed to <A HREF="#ServiceInfo_N">ServiceInfo_targetObject SubState_N</A>. This promotes to SubState_A, as above. From the BNF section on <A HREF="#BNFServiceInfo"> <B>service-info</B></A>, we see that it must start with 'error' or a serviceID. These are checked by the SubStates <A HREF="#ServiceInfo_A_err">"error w/o id"</A> and <A HREF="#ServiceInfo_A_id">"service id"</A>. <P> If the token is the string "error", followed by a left paren, the next state is ServiceNoRat_targetObject, not included in the example. If "error" does not match, the parser tries the next StateToken in SubState_A, which is "service id". If ServiceInfo_getServiceId approves of the input, The serviceId is read and the parser proceeds on to SubState_B. <P> <H3>finishing</H3> When the last rating is read, and a close paren is found, the paren is passed through all the open TargetObjects, SingleLabel, Label, ServiceInfo, and LabelList. This is accomplished with SubStates that are specificly for closing out the TargetObjects. This example shows how the <A HREF="#ServiceInfo_D"> ServiceInfo_targetObject SubState_D</A> chains the close paren to <A HREF="#LabelList_C">LabelList_targetObject SubState_C</A>. <P> <H2>Produit du Parsing</H2> The parsable objects, PICS Labels, machine-readable service descriptions, and, users, all create an object that contains all the information needed to parse and iterate through the data structures. This is container for all the TargetObjects created in the parsing process. These containers are implemented in the following files: <UL> <LI>Labels are in <A HREF="../src/CSLL.html">CSLL.html</A> <LI>Machine-readable is in <A HREF="../src/CSMR.html">CSMR.html</A> <LI>Users are in <A HREF="../src/CSUser.html">CSUser.html</A> </UL> <P> <H2>Plans</H2> <H3>note</H3> The first field in both the TargetObject and the StateToken is a char * called the note. I have only used this field for debugging; it makes it very easy to track which state you are in and where you are going. I have an idea, though, that it may be useful for giving very usefull error messages that specify what was expected next. At such a time, it may be worth changing the note on the Awkward_TargetObject to something like "after rating set" or something else palletable. <P> <H3>Destroy</H3> All the TargetObjects have a Destroy method which allows them to proceed after an error. I'm not sure when this will be usefull, but the mechanism is there, and only nominally tested. <P> <HR> <ADDRESS>Eric Prud'hommeaux, Feb 1996</ADDRESS> </BODY> </HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/ReleaseNotes.html�����������������������������������������������������������0100644�0000764�0000144�00000004004�06301652605�017761� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Sample Code Library Release Notes</TITLE> <!-- Changed by: Eric Prud'hommeaux, 27-Mar-1996 --> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="PICS" SRC="../../Icons/WWW/PICS48x.gif"></A> </A> <H1>Library 1.0 Release Notes</H1> <H2>Release 0.9 March 20 1996</H2> This is the first release of the PICS library code. Please see the libpics <A HREF="/">Overview</A> for further information. There is very likely to be a flurrry of updates with this. <P> libpics release 0.9 is built. GOALS: <UL> <LI> Provide a simple interface to the parser for developers not using the libwww.<BR> A subset of the libpics source files have been designed to provide label parsing for applications that aren't based on libwww. These have a single interface (CSLUtils) and rely on a minimal set of list and string functions which may be provided by libwww or the application. <LI> Provide a PICS library for those developing apps on top of the libwww.<BR> The remainder of the libpics library is called CSLApp. It relies heavily on libwww and allows an application based on libwww to easily automate checking of label bureaus and document servers for ratings. It provides an interface for checking these against a user profile. A sample user profile is implemented, though it is intended as an example. Sample PICS users are available in <A HREF="../Data">Data</A>. These users have passwords that match their usernames, which, in turn, match their file names. <LI> Use the LineMode browser to demonstrate use of libpics.<BR> The LineMode browser has been expanded to use CSLApp to load user profiles and make sure that subsequent documents may be viewed by these users. The LineMode browser may be used to check document servers and label bureaus for PICS functionality. </UL> <P> <HR> <ADDRESS>Eric Prud'hommeaux, libpics@w3.org, March 1996</ADDRESS> </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Simple.html�����������������������������������������������������������������0100644�0000764�0000144�00000006137�06252703740�016634� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C PICS Simple Parser Example</TITLE> <!-- Changed by: Eric Prud'hommeaux, 24-Apr-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" SRC="../../Icons/WWW/PICS48x.gif" ALT="PICS"></A> <H1>W3C PICS Simple Parser Example</H1> Following is example output from the <A HREF="Intrface.html#LablPars">LablPars</A> program: <PRE> (PICS-1.1 "http://www.ages.org/our-service/v1.0/" 1 labels 2 for "http://www.w3.org/pub/WWW/" 3 5 generic true by "abaird@w3.org" ratings (age 11) 6 -6 -5 -3 for "http://www.w3.org/pub/WWW/" 3 5 generic true by "abaird@w3.org" ratings (age 11) 6 -6 -5 -3 error (not-labeled "http://www.w3.org/unknown") 3 11 -11 -3 "http://www.rsac.org/v1.0" labels -2 2 for "http://www.w3.org/pub/WWW" 3 5 generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) 6 -6 6 -6 6 -6 6 -6 -5 -3 for "http://www.w3.org/pub/WWW" 3 5 generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) 6 -6 6 -6 6 -6 6 -6 -5 -3 error (not-labeled "http://www.w3.org/unknown") 3 11 -11 -3 error (no-ratings "unknown service")) -2 2 9 -9 -2 -1 = 0 - parsing end </PRE> <H2>What you see</H2> LablPars reads each line of its input and displays it before passing it to the parser. As the parser is reading the line, it makes callbacks to LablPars to notify when a new data type is being started or finished. This callback displays the enumerated value for the data type being processed. <PRE> LabelTargetCallback_t targetCallback; StateRet_t targetCallback(CSLabel_t * pCSMR, CSParse_t * pCSParse, CSLLTC_t target, BOOL closed, void * pVoid) { int change = closed ? -target : target; Total += change; printf("%3d ", change); return StateRet_OK; } </PRE> These values are defined in <A HREF="../src/CSLL.html#CSLLTC">CSLL.html</A>. <PRE> typedef enum { CSLLTC_LIST = 1, CSLLTC_SERVICE, CSLLTC_LABEL, CSLLTC_LABTREE, CSLLTC_SINGLE, CSLLTC_RATING, CSLLTC_RANGE, CSLLTC_AWKWARD, CSLLTC_NORAT, CSLLTC_SRVERR, CSLLTC_LABERR, CSLLTC_EXTEN, CSLLTC_EXTDATA, CSLLTC_COUNT } CSLLTC_t; </PRE> We can see from the lines <PRE> labels 2 for "http://www.w3.org/pub/WWW/" 3 5 </PRE> that the <I><B>labels</B></I> keyword told the parser that it had started a service, and the <I><B>for</B></I> keyword denoted a single-label within a label. As the parser finishes a data type, it calls the callback again to say that the data is finished: <PRE> error (no-ratings "unknown service")) -2 2 9 -9 -2 -1 = 0 - parsing end </PRE> "-2 -1" closes the service and the list. The sum of 0 shows that each data type entered was exited appropriately. "parsing end" shows that the parser had closed all data types and assumed that the input would be finished. <P> <HR> <ADDRESS>Eric Prud'hommeaux, <AHREF="mailto:libpics@w3.org">libpics@w3.org</A>, March 96</ADDRESS> </BODY> </HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Using.html������������������������������������������������������������������0100644�0000764�0000144�00000023255�06301652606�016467� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>How to get Started Writing an App</TITLE> <!-- Changed by: Eric Prud'hommeaux, 29-Mar-1996 --> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="PICS" SRC="../../Icons/WWW/PICS48x.gif"></A> <IMG BORDER="0" SRC="../../Icons/WWW/startup48x.gif" ALT="QUICKGUIDE"></A> <H1>How to get Started Writing a PICS complient App</H1> <A NAME="libraryPrefix"><H2>Library Name Prefix</H2></A> In an effort to eliminate name conflicts and clarify code, all Pics library functions and data types are prepended with CS (for Content Selection). All source files are also prefixed with CS to avoid module collision. Library interface headers are prefixed with CSL (for Library), as in CSLUtils.h and CSLApp.h. <P> <A NAME="components"><H2>Components</H2></A> The libpics library is divided into two components, accessible through two interfaces: <UL> <LI><A HREF="#CSLUtils">CSLUtils</A> - a minimal set of files providing parsing capabilities for PICS labels and Machine-readable service descritpions. <LI><A HREF="#CSLApp">CSLApp</A> - component library for building PICS applications on top of libwww. It provides the application with automatic label requests, parsing of the results, user management, and document authorization. </UL> <HR> <A NAME="CSLUtils"><H1>CSLUtils</H1></A> The <A HREF="Intrface.html#CSLUtils">CSLUtils</A> interface provides access to the <A HREF="../src/CSParse.html">basic parser</A>, and its component parsing objects, <A HREF="../src/CSLL.html">labels</A>, <A HREF="../src/CSMR.html">machine-readable service descritpions</A>, <A HREF="../src/CSUser.html">sample user profiles</A>. <H3>Implementation</H3> This interface is intended to be used by including the component .c and .h files in the user's project. It relies on a small subset of the libwww, namely the <A HREF="../HTUtils">HTUtils</A> portion. These functions provide <A HREF="../HTUtils/HTString.html">string</A>, <A HREF="../HTUtils/HTList.html">list</A> and <A HREF="../HTUtils/HTChunk.html">chunk</A> functionality. The funtions required by these modules are listed in <A HREF="HTFuncs.html">HTFuncs.html</A>. <P> <H3>Interface</H3> The primary purpose for the CSLUtils interface is to provide parsing capablilities for PICS labels. <A Href="../LablPars/LablPars.c">LablPars.c</A> provides an example of this usage. <P> <A NAME="howToParse"><H3>How to parse</H3></A> <UL> <LI><A HREF="#parserCallbacks">create parser callbacks</A> <UL> <LI><A HREF="#targetCallback">targetCallback</A> <LI><A HREF="#errorHandler">LLErrorHandler</A> </UL> <LI><A HREF="#memoryFuncs">assign memory functionality</A> <LI><A HREF="#callParser">call parser with some or all of the text to be parsed</A> </UL> <P> <A NAME="parserCallbacks"><H3>parser callbacks</H3></A> The parser passes through the passed text, building a data structure containing all the parsed information, making callbacks to the parser when it passed to a new data structure or encounters an error. <P> <A NAME="targetCallback"><H3>target callbacks</H3></A> While the parser is reading and filling data structures, it keeps track of what data type it is currently filling. Whenever this target data changes, it call back to the application. This allows the application to check the data that has just been read, or allocate space for the new object. The most common use of this would be to abort when label data comes through with a value that is out of range for the user. <P> <A NAME="errorHandler"><H3>error handler</H3></A> The error handler gets called with all parsing problems and data inconsistancies. It is intended to provide the interface to the user. The return values tells the parser to abort or continue parsing. <P> <A NAME="memoryFuncs"><H3>memory functionality</H3></A> All allocation in libwww or libpics goes through the macros HT_?ALLOC and HT_FREE. The macros are assigned to HTMemory functions in HTUtils. The developer may subsititue macros for their own proprietary memory system, or the ANSI malloc functions. Alternatively, the aplication may employ the macros and provide the HTMemory functions, either through the library module <A HREF="../../Library/src/HTMemory.c">HTMemory.c</A>, or in their own application. <P> <A NAME="callParser"><H3>calling the parser</H3></A> The life cycle of a parse object is as fillows: <UL> <LI>Creation - a parse obejct is created to parse PICS labels, service descriptions, or user profiles. <LI>Parsing - the parser gets called with the object data as it comes in. The data may be passed in one chunk, but that may not fit network applications. <LI>Parser destruction - the parser is destroyed, leaving the object that was parsed. <LI>Object destruction - the object is finally destroyed, recaliming all the memory associated with the above operations. </UL> <P> <P> for interface details... <A HREF="Intrface.html#CSLUtils"></A> for parser innerworkings... <A HREF="Parsing.html"><IMG BORDER="0" SRC="../../Icons/WWW/internals48x.gif" ALT="click here"></A> <P> <HR> <A NAME="CSLApp"><H1>CSLApp</H1></A> The <A HREF="Intrface.html#CSLApp">CSLApp</A> provides a library interface for an application based on <A HREF="../../Library/User/Overview.html">libwww</A>. You must first understand how to write an application on top of the <A HREF="../../Library/User/Using.html">W3C Sample Code Library</A> (libwww). <P> For details on how to use the library, you should look at the <A HREF="../src/CSLApp.html">CSLApp.html</A>. <P> The <A HREF="../../LineMode/">Line-Mode Browser</A> uses the CSLApp interface to libpics. The steps involved in adapting the Line-Mode Browser to libpics are outlined in <A HREF="#steps">steps</A>. <P> <A NAME="mechanism"><H2>Mechanism</H2></A> When libwww is about to send out a request to a server, it calls Pics to send a request for Pics ratings. The text of the request is based on the desired URL and the current service. This request may accompany the URL request or may go to a different server. <P> If the request goes to the same server, ie. accompanies the URL request, the ratings come back ahead of the requested data. When Pics recieves an answer to a service request, it determines whether the URL should be permitted. If there is a callback assiciated with this request, Pics calls the callback to allow the app to override this descision. If no callback is associated with the request, Pics checks to see if there is a default callback for the application. If either of these callbacks is called, the user or services associated with this request or this app may change. If the forbidden disposition remains, the request is marked with a Forbidden (403) error and the remaining network traffic is killed with a call the HTNet_kill. <P> If the ratings must be acquired from another server, the current request is set to 0 priority and a second request is generated to send the ratings request. Once Pics recievs the results of the ratings request, the accompanying URL request is either killed off, or restored to high priority which enables the request to be sent. When the data returns, the request is already marked as allowed and the request passes on to the app. <P> <A NAME="steps"><H2>Steps</H2></A> This quick guide takes you through the basic steps necessary to create your own PICS complient application: <OL> <LI><A HREF="#user">Define a user type</A> <P>The application must do the fillowing: See the interface in <A HREF="../src/CSLApp.html">CSLApp.html</A> for details. <LI><A HREF="#lodU">Load a User</A> <LI><A HREF="#regA">Register your application with PICS</A> <LI><A HREF="#regR">Register a request with PICS</A> <LI><A HREF="#free">When to free Objects</A> </OL> <A NAME="user"><H2>User profile</H2></A> The <A HREF="../src/CSUser.html">CSUser module</A> is a special module in that defines the the parsing and use of a user profile. It is intended to serve as an example, not reference code, as there is no specification for a PICS user. To furthur it's usability, the password is not encrypted. Possibly a field that encrypts the password and checks the validity of the rest of the document will be used here in the future. In the meantime, it is reccomended that the <A HREF="../src/CSUser.c">CSUser.c</A>module be replaced by a proprietary one. <P> <A NAME="lodU"><H2>Load a PICS user</H2></A> This user is kept around for PICS to inspect when creating label requests and checking values on returns. <A NAME="regA"><H2>Register an application</H2></A> This sets of the application's callbacks and <A HREF="#defU">default user</A>. <A NAME="regR"><H2>Register request</H2></A> The application may have different callbacks and different users associated with different users associated with different requests. This is more robust than defaulting to the user specified in the <A HREF="#regA">application registry</A>. <A NAME="free"><H2>When to free Objects</H2></A> This is a short set of recommendation on when to free objects in memory. <DL> <DT><A HREF="../src/CSParse.html">Parsers</A> <DD> These should be destroyed as soon as the object they are parsing is created. <P> <DT><A HREF="../src/CSLL.html">PICS Labels</A> <DT><A HREF="../src/CSMR.html">PICS service descritpions</A> <DT><A HREF="../src/CSUser.html">User profiles</A> <DD> These may be should be around for the duration of the application's use of the PICS library, though they <EM>can</EM> be freed at any time if they are not used by an ongoing request </DL> <P> for furthur details... <A HREF="Intrface.html#CSLApp"></A> <HR> <ADDRESS>Eric Prud'hommeaux, <A HREF="mailto:libpics@w3.org">libpics@w3.org</A>, March 96</ADDRESS> </BODY> </HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/User/Makefile.in�����������������������������������������������������������������0100644�0000764�0000144�00000013452�07405520526�016560� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign PICS-client/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = PICS-client/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign PICS-client/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/.cvsignore�����������������������������������������������������������������������0100644�0000764�0000144�00000000025�06136212751�015563� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Activity.html��������������������������������������������������������������������0100644�0000764�0000144�00000007254�06526451334�016265� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 2-Apr-1996 --> <TITLE>W3C Sample Code Library Position Statement</TITLE> </HEAD> <BODY> <P> <A HREF="../../resources.html"></A> <A HREF="../Consortium/Prospectus/ActivityList"><IMG BORDER="0" ALT="Activities" SRC="../Icons/WWW/activity_48x48"></A> <A href="../../resources/mapserver.html"><IMG BORDER="0" SRC="../Icons/WWW/PICS48x.gif" ALT="PICS-client" WIDTH="48" HEIGHT="48"></A> <H1> PICS Sample Code Library Position Statement </H1> <P> The PICS Sample Code Library provides tools for adding PICS functionality to web applications like browsers, proxies, and PICS selection interfaces. The PICS Library is intended to demonstrate PICS on a working client (see the <A HREF="../LineMode">LineMode</A> browser)&nbsp;and to assist builders of these applications to quickly integrate PICS into their programs. The PICS Library may be used in conjunction with the <A HREF="../Library">W3C Sample Code Library</A>, or as a stand-alone collection of utilities. This is the PICS position statement of direction concerning <A HREF="../../resources/mapserver.html">PICS Reference Library</A> and it is part of the <A HREF="../Consortium/Prospectus/ActivityList">W3C position statements</A>. <H2> Background </H2> <P> The <A HREF="../../resources/mapserver.html">PICS Sample Code Library</A>, a.k.a. libpics, was written for the PICS consortium by Eric Prud'hommeuax. It was released to the public to provide a reference to speed up PICS application development in the web community. <H2> Current Status </H2> <P> The utility portion of the PICS Library is based on very simple C-code and makes no architecture assumptions. It should, therefor, be portable to any platform with a C compiler. The full library may be ported anywhere the <A HREF="../Library">W3C Sample Code Library</A> may be ported, ie. Unix, MS Windows, and Macintosh. <P> Considerable care was taken in providing a set of APIs that would be extensible without changing the interface. Only time will tell how well that was accomplished. <H2> Example Applications </H2> <P> These examples demonstrate the the use of the <A HREF="../../resources/mapserver.html">PICS Reference Library</A>, both in conjunction with the <A HREF="../Library">W3C Sample Code Library</A>, and as a stand-alone library. <P> <DL> <DT> <A HREF="/"><IMG BORDER="0" SRC="../Icons/WWW/LMB48x" ALT="LMB"></A> <B>Line Mode Browser</B> <DD> The Line Mode Browser is a character-based Web browser developed for use on terminals. It is an example of a client application using the <A HREF="../../resources/mapserver.html">libwww</A>. It is also useful as a test tool for quick access to the Web from scripts, cron jobs etc. <DT> <B><A HREF="LablPars">LablPars</A></B> and <B><A HREF="RatPars">RatPars</A></B> demonstrate the use of the PICS parser. They check the syntax for PICS lables &nbsp; &nbsp; &nbsp; &nbsp; and PICS service descriptions respectively. </DL> <H2> Documentation </H2> <P> Please see the user <A HREF="User/Overview.html">W3C PICS Sample Code Library Documentation</A> for a more complete description. <HR> <FORM action="http://www.netmind.com/cgi-bin/uncgi/url-mind/URL-minder/URL-minder.txt"> Enter your e-mail address to receive e-mail (courtesy of <A href="http://www.netmind.com/">NetMind</A>) when this page is updated: <INPUT name="required-email"> <INPUT type=hidden value="/PICS-client/Activity.html" name=url> <INPUT type=submit value="Register"> </FORM> <P> <A href="../../resources.html"></A> <ADDRESS> Eric Prud'hommeaux, <A HREF="mailto:eric@w3.org">eric@w3.org</A>, @(#) $Id: Date Author State $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Makefile.am����������������������������������������������������������������������0100644�0000764�0000144�00000000152�06136212752�015621� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. AUTOMAKE_OPTIONS = foreign SUBDIRS = src User ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Overview.html��������������������������������������������������������������������0100644�0000764�0000144�00000002424�06301652576�016273� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C PICS Sample Code Library</TITLE> <!-- Changed by: Eric Prud'hommeaux, 29-Apr-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <A HREF="../../resources.html"></A> <IMG BORDER="0" SRC="../Icons/WWW/doc48x.gif"> <H1>W3C PICS Sample Code Library</H1> This is a list of what you will find in the W3C PICS Sample Code Library. <DL> <DT><A HREF="User/Overview.html"><IMG BORDER="0" SRC="../Icons/WWW/doc48x.gif" ALT="DOCUMENTATION"></A> <B>Documentation Index</B> <DD>for all the files here. <DT><A HREF="LablPars"><IMG BORDER="0" SRC="../Icons/WWW/startup48x.gif" ALT="LABLPARS"></A> <B>LablPars program</B> <DD>Quick start programs for parsing PICS labels. See <A HREF="../PICS/labels.html"> label syntax and communication protocols</A> for label specifications. <DT><A HREF="RatPars"><IMG BORDER="0" SRC="../Icons/WWW/startup48x.gif" ALT="RATPARS"></A> <B>RatPars program</B> <DD>Quick start programs for parsing PICS machine readable (.rat) files. <DT><A HREF="bin"><IMG BORDER="0" SRC="../Icons/WWW/Files48x.gif" ALT="EXECUTABLES"></A> <B>Executable files</B> <DD>Directory of builds of PICS files. </DL> <P> <HR> <ADDRESS>Eric Prud'hommeaux, <A HREF="mailto:libpics@w3.org">libpics@w3.org</A>, March 96</ADDRESS> </BODY> </HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/HTUtils/�������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�015125� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/HTUtils/CVS/���������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�015560� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/HTUtils/CVS/Root�����������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517401�016424� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/HTUtils/CVS/Repository�����������������������������������������������������������0100644�0000764�0000144�00000000033�07405517401�017653� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/HTUtils �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/HTUtils/CVS/Entries��������������������������������������������������������������0100644�0000764�0000144�00000000002�07405517401�017101� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�015271� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/CVS/��������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�015724� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/CVS/Root����������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517401�016570� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/CVS/Repository����������������������������������������������������������0100644�0000764�0000144�00000000034�07405517401�020020� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/CVS/Entries�������������������������������������������������������������0100644�0000764�0000144�00000000252�07405517401�017254� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/LablPars.c/1.3/Mon May 4 19:38:33 1998// /Makefile/1.2/Wed Aug 21 14:13:40 1996// /config.h/1.1/Thu Apr 25 00:27:55 1996// /labels.lab/1.1/Thu Apr 25 00:15:38 1996// D ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/LablPars.c��������������������������������������������������������������0100644�0000764�0000144�00000012575�06523414471�017147� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "malloc.h" #include "wwwsys.h" #include "CSLUtils.h" #include "CSLL.h" /* to define states in stateChange */ #include "CSParse.h" int Total; extern int ParseDebug; CSError_t spit(char* text, CSLabel_t * pCSMR, BOOL closed) { printf("%s %s\n", text, closed ? "closed" : "opened"); return CSDoMore_more; } LabelTargetCallback_t targetCallback; StateRet_t targetCallback(CSLabel_t * pCSMR, CSParse_t * pCSParse, CSLLTC_t target, BOOL closed, void * pVoid) { int change = closed ? -target : target; Total += change; if (!ParseDebug); printf("%3d ", change); /* printf("%s %s (%d)\n", closed ? " ending" : "starting", pCSParse->pParseState->note, closed ? -target : target); */ return StateRet_OK; } /* LLErrorHandler_t parseErrorHandler; */ StateRet_t parseErrorHandler(CSLabel_t * pCSLabel, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode) { char space[256]; printf("%20s - %s:", pCSParse->pTargetObject->note, pCSParse->currentSubState == SubState_X ? "SubState_X" : pCSParse->currentSubState == SubState_N ? "SubState_N" : pCSParse->currentSubState == SubState_A ? "SubState_A" : pCSParse->currentSubState == SubState_B ? "SubState_B" : pCSParse->currentSubState == SubState_C ? "SubState_C" : pCSParse->currentSubState == SubState_D ? "SubState_D" : pCSParse->currentSubState == SubState_E ? "SubState_E" : pCSParse->currentSubState == SubState_F ? "SubState_F" : pCSParse->currentSubState == SubState_G ? "SubState_G" : pCSParse->currentSubState == SubState_H ? "SubState_H" : "???"); switch (errorCode) { case StateRet_WARN_NO_MATCH: if (token) sprintf(space, "Unexpected token \"%s\".\n", token); else sprintf(space, "Unexpected lack of token.\n"); break; case StateRet_WARN_BAD_PUNCT: sprintf(space, "Unextected punctuation \"%c\"", demark); if (token) printf("after token \"%s\".\n", token); else printf(".\n"); break; case StateRet_ERROR_BAD_CHAR: sprintf(space, "Unextected character \"%c\" in token \"%s\".\n", *pCSParse->pParseContext->pTokenError, token); break; default: sprintf(space, "Internal error: demark:\"%c\" token:\"%s\".\n", demark, token); break; } printf(space); /* CSLabel_dump(pCSMR); HTTrace(pParseState->note); */ return errorCode; } #if 1 /* use this main to test input with a series of labels, each on a line. */ int main(int argc, char** argv) { char lineBuf[512]; CSParse_t * pCSParse = 0; CSDoMore_t last = CSDoMore_done; FILE * input; if (argc > 1) { if ((input = fopen(argv[1], "r")) == NULL) { printf("Couldn't open \"%s\".\n", argv[1]); exit(1); } } else { input = stdin; } if (argc > 2) ParseDebug = 1; pCSParse = CSParse_newLabel(&targetCallback, &parseErrorHandler); while (fgets(lineBuf, sizeof(lineBuf), input)){ int len; char * ptr; for (ptr = lineBuf; *ptr; ptr++) if (*ptr == ';') { *ptr = 0; break; } /* if (strchr(lineBuf, ';')) *ptr = 0; if (lineBuf[0] == ';') continue; */ len = strlen(lineBuf); if (lineBuf[len - 1] == '\r' || lineBuf[len - 1] == '\n') { lineBuf[len-- - 1] = 0; } if (!lineBuf[0]) { if (last != CSDoMore_done) printf("parsing end error\n"); if (pCSParse) CSParse_deleteLabel(pCSParse); pCSParse = CSParse_newLabel(&targetCallback, &parseErrorHandler); last = CSDoMore_done; } else { printf("%s ", lineBuf); if (ParseDebug) printf("\n"); switch (last = CSParse_parseChunk(pCSParse, lineBuf, (int) strlen(lineBuf), 0)) { case CSDoMore_done: printf("= %d - parsing end\n", Total); break; case CSDoMore_error: printf("= %d - parsing error\n", Total); exit (1); case CSDoMore_more: printf("\n"); break; } } } if (pCSParse) CSParse_deleteLabel(pCSParse); if (last != CSDoMore_done) printf("parsing end error\n"); return (0); } #else /* use this main to test input of a label list spread out over multiple lines*/ int main(int argc, char** argv) { char lineBuf[512]; while (gets(lineBuf)){ CSParse_t * pCSParse; if (lineBuf[0] == ';') continue; Total = 0; printf("%s", lineBuf); pCSParse = CSParse_newLabel(&targetCallback, &parseErrorHandler); if (CSParse_parseChunk(pCSParse, lineBuf, (int)strlen(lineBuf), 0) != CSDoMore_done) { printf("parsing end error\n"); break; } CSParse_deleteLabel(pCSParse); printf("= %d\n", Total); } return (0); } #endif #if 0 /* a not-needed but often useful sample implementation of HTTrace */ int HTTrace(const char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); return (vfprintf(stderr, fmt, pArgs)); } #endif void * HTMemory_malloc (size_t size) { return malloc(size); } void * HTMemory_calloc (size_t nobj, size_t size) { return calloc(nobj, size); } void * HTMemory_realloc (void * p, size_t size) { return realloc(p, size); } void HTMemory_free (void * ptr) { free(ptr); } void HTMemory_outofmem (char * name, char * file, unsigned long line) { HTTrace("%s:%ld failed allocation for \"%s\".\n\ Program aborted.\n", file, line, name); exit(1); } �����������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/Makefile����������������������������������������������������������������0100644�0000764�0000144�00000004237�06206614624�016737� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile for PICS Lable Parser example # # (c) COPYRIGHT MIT 1996. # Please first read the full copyright statement in the file COPYRIGH. # # Macros required to be defined for make: # # CC The C compiler # CFLAGS Flags for $(CC) # LFLAGS Flags for ld # WWW Root of WWW source tree #______________________________________________________________________ WWW = ../.. # Directories OBJ = $(WWW)/PICS-client/LablPars CMN = $(WWW)/Library/src PICS= $(WWW)/PICS-client/src CL = $(WWW)/PICS-client/LablPars # Or, if compiling without libwww, use these instead #OBJ = . #CMN = ../HTUtils #PICS= ../src #CL = . # Configuration CC = gcc # use the config.h from the LablPars directory #CFG = -I. -DHAVE_CONFIG_H # or bypass config.h and define what it would have # this example works for solaris CFG = -DSTDC_HEADERS -DHAVE_MEMCPY -DHAVE_STDIO_H CFLAGS = -I$(CMN) -I$(PICS) $(CFG) LFLAGS = # MODULES OBJS = $(OBJ)/CSLabel.o \ $(OBJ)/CSParse.o \ $(OBJ)/HTChunk.o \ $(OBJ)/HTList.o \ $(OBJ)/HTString.o \ $(OBJ)/LablPars.o CFILES =$(PICS)/CSLabel.c \ $(PICS)/CSParse.c \ $(CMN)/HTChunk.c \ $(CMN)/HTList.c \ $(CMN)/HTString.c \ $(CL)/LablPars.c HFILES= $(PICS)/CSLL.h \ $(PICS)/CSLLSt.h \ $(PICS)/CSLUtils.h \ $(PICS)/CSParse.h \ $(CMN)/HTChunk.h \ $(CMN)/HTList.h \ $(CMN)/HTMemory.h \ $(CMN)/HTString.h \ $(CMN)/HTUtils.h LablPars : $(OBJS) $(CC) -o LablPars $(OBJS) $(LFLAGS) $(OBJ)/CSLabel.o : $(PICS)/CSLabel.c $(CMN)/HTString.h \ $(PICS)/CSParse.h $(PICS)/CSLUtils.h $(PICS)/CSLL.h $(PICS)/CSLLSt.h $(CC) -c -o $@ $(CFLAGS) $(PICS)/CSLabel.c $(OBJ)/CSParse.o : $(PICS)/CSParse.c $(CMN)/HTChunk.h \ $(CMN)/HTString.h $(PICS)/CSLUtils.h $(PICS)/CSParse.h $(CC) -c -o $@ $(CFLAGS) $(PICS)/CSParse.c $(OBJ)/HTChunk.o : $(CMN)/HTChunk.c $(CMN)/HTUtils.h $(CMN)/HTChunk.h $(CC) -c -o $@ $(CFLAGS) $(CMN)/HTChunk.c $(OBJ)/HTList.o : $(CMN)/HTList.c $(CMN)/HTUtils.h $(CMN)/HTList.h $(CC) -c -o $@ $(CFLAGS) $(CMN)/HTList.c $(OBJ)/HTString.o : $(CMN)/HTString.c $(CMN)/HTUtils.h $(CMN)/HTString.h $(CC) -c -o $@ $(CFLAGS) $(CMN)/HTString.c $(OBJ)/LablPars.o : $(CL)/LablPars.c \ $(PICS)/CSLUtils.h $(PICS)/CSLL.h $(PICS)/CSParse.h $(CC) -c -o $@ $(CFLAGS) $(CL)/LablPars.c �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/config.h����������������������������������������������������������������0100644�0000764�0000144�00000000215�06137543413�016705� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define STDC_HEADERS 1 #define HAVE_MEMCPY 1 #define HAVE_STDIO_H 1 /* #define HAVE_STDLIB_H 1 - not needed if LablPars includes malloc.h */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/LablPars/labels.lab��������������������������������������������������������������0100644�0000764�0000144�00000011373�06137542052�017216� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ (PICS-1.1 "http://www.gcf.org/v1.0" labels on "1994.11.05T08:15-0500" until "1995.12.31T23:59-0000" for "http://w3.org/PICS/Overview.html" by "John Patrick" ratings (suds 0.5 density 0 color/hue 1)) (PICS-1.1 "http://www.gcf.org/v1.0" l full "http://www.gcf.org/labels/13242123" r (suds 0.5 density 0 color/hue 1)) (PICS-1.1 "http://www.gcf.org/v1.0" l r (suds 0.5 density 0 color/hue 1)) (PICS-1.1 "http://www.gcf.org/v1.0" labels on "1994.11.05T08:15-0500" exp "1995.12.31T23:59-0000" for "http://www.greatdocs.com/foo.html" by "George Sanderson, Jr." ratings (suds 0.5 density 0 color/hue 1)) (PICS-1.1 "http://www.ages.org/our-service/v1.0/" ;first service labels for "http://www.w3.org/pub/WWW/" generic true by "abaird@w3.org" ratings (age 11) ;end of first label, since 'ratings' is always last part of a label ;;the same generic label applies also to any URL beginning http://www.w3.org/pub/WWW/TheProject.html for "http://www.w3.org/pub/WWW/" generic true by "abaird@w3.org" ratings (age 11) ;end of second label error (not-labeled "http://www.w3.org/unknown") ;no label available for third document ;three labels requested, so end of first service "http://www.rsac.org/v1.0" labels for "http://www.w3.org/pub/WWW" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) for "http://www.w3.org/pub/WWW" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) error (not-labeled "http://www.w3.org/unknown") ;;no labels for third service error (no-ratings "unknown service")) (PICS-1.1 "http://www.ages.org/our-service/v1.0/" labels ;;no specific label available, so generic label returned for "http://www.w3.org/pub/WWW/" generic true by "abaird@w3.org" ratings (age 11) ;;no specific label available, so generic label returned for "http://www.w3.org/pub/WWW/" generic true by "abaird@w3.org" ratings (age 11) error (not-labeled "http://www.w3.org/unknown") "http://www.rsac.org/v1.0" labels ;;no specific label available, so generic label returned for "http://www.w3.org/pub/WWW" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) ;;here a specific label is returned. for "http://www.w3.org/pub/WWW/TheProject.html" generic false by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) error (not-labeled "http://www.w3.org/unknown") error (no-ratings "unknown service")) (PICS-1.1 "http://www.ages.org/our-service/v1.0/" labels ;;several labels delimited by () (for "http://www.w3.org/pub/WWW/" generic true by "abaird@w3.org" ratings (age 11) for "http://www.w3.org/pub/WWW/Overview.html" by "abaird@w3.org" generic false ratings (age 12) by "abaird@w3.org" for "http://www.w3.org/pub/WWW/PICS" generic true ratings (age 5) by "abaird@w3.org" for "http://www.w3.org/pub/WWW/Daemon" generic true ratings (age 5)) ;;end of labels for directory http://www.w3.org/pub/WWW/ ;;no labels available for URLs containing http://www.w3.org/pub/WWW/TheProject.html as a prefix error (not-labeled "http://www.w3.org/pub/WWW/TheProject.html") error (not-labeled "http://www.w3.org/unknown") "http://www.rsac.org/v1.0" labels (for "http://www.w3.org/pub/WWW" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) for "http://www.w3.org/pub/WWW/TheProject.html" generic false by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) for "http://www.w3.org/pub/WWW/Daemon" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) for "http://www.w3.org/pub/WWW/PICS" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0)) error (not-labeled "http://www.w3.org/pub/WWW/TheProject.html") error (not-labeled "http://www.w3.org/unknown") error (no-ratings "unknown service")) (PICS-1.1 "http://www.ages.org/our-service/v1.0/" labels (for "http://www.w3.org/pub/WWW/" generic true by "abaird@w3.org" ratings (age 11) by "abaird@w3.org" for "http://www.w3.org/pub/WWW/PICS" generic true ratings (age 5) by "abaird@w3.org" for "http://www.w3.org/pub/WWW/Daemon" generic true ratings (age 5)) error (not-labeled "http://www.w3.org/pub/WWW/TheProject.html") error (not-labeled "http://www.w3.org/unknown") "http://www.rsac.org/v1.0" labels (for "http://www.w3.org/pub/WWW" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) for "http://www.w3.org/pub/WWW/Daemon" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0) for "http://www.w3.org/pub/WWW/PICS" generic true by "abaird@w3.org" ratings (v 0 s 0 n 0 l 0)) error (not-labeled "http://www.w3.org/pub/WWW/TheProject.html") error (not-labeled "http://www.w3.org/unknown") error (no-ratings "unknown service")) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/�������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�015145� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/CVS/���������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517401�015600� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/CVS/Root�����������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517401�016444� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/CVS/Repository�����������������������������������������������������������0100644�0000764�0000144�00000000033�07405517401�017673� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/CVS/Entries��������������������������������������������������������������0100644�0000764�0000144�00000000253�07405517401�017131� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Makefile/1.1/Thu Apr 25 00:15:58 1996// /RatPars.c/1.3/Mon May 4 19:38:34 1998// /config.h/1.1/Thu Apr 25 00:16:02 1996// /services.rat/1.1/Thu Apr 25 00:16:03 1996// D �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/Makefile�����������������������������������������������������������������0100644�0000764�0000144�00000004077�06137542076�016621� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile for PICS MachRead Parser example # # (c) COPYRIGHT MIT 1996. # Please first read the full copyright statement in the file COPYRIGH. # # Macros required to be defined for make: # # CC The C compiler # CFLAGS Flags for $(CC) # LFLAGS Flags for ld # WWW Root of WWW source tree #______________________________________________________________________ WWW = ../.. # Directories OBJ = $(WWW)/PICS-client/RatPars CMN = $(WWW)/Library/src PICS= $(WWW)/PICS-client/src CL = $(WWW)/PICS-client/RatPars # Configuration CC = gcc # use the config.h from the RatPars directory #CFG = -I. -DHAVE_CONFIG_H # or bypass config.h and define what it would have # this example works for solaris CFG = -DSTDC_HEADERS -DHAVE_MEMCPY -DHAVE_STDIO_H CFLAGS = -I$(CMN) -I$(PICS) $(CFG) -Wall -g LFLAGS = # MODULES OBJS = $(OBJ)/CSMacRed.o \ $(OBJ)/CSParse.o \ $(OBJ)/HTChunk.o \ $(OBJ)/HTList.o \ $(OBJ)/HTString.o \ $(OBJ)/RatPars.o CFILES =$(PICS)/CSMacRed.c \ $(PICS)/CSParse.c \ $(CMN)/HTChunk.c \ $(CMN)/HTList.c \ $(CMN)/HTString.c \ $(CL)/RatPars.c HFILES= $(PICS)/CSLL.h \ $(PICS)/CSLLSt.h \ $(PICS)/CSLUtils.h \ $(PICS)/CSParse.h \ $(CMN)/HTChunk.h \ $(CMN)/HTList.h \ $(CMN)/HTMemory.h \ $(CMN)/HTString.h \ $(CMN)/HTUtils.h RatPars : $(OBJS) $(CC) -o RatPars $(OBJS) $(LFLAGS) $(OBJ)/CSMacRed.o : $(PICS)/CSMacRed.c $(CMN)/HTString.h \ $(PICS)/CSParse.h $(PICS)/CSLUtils.h $(PICS)/CSLL.h $(PICS)/CSLLSt.h $(CC) -c -o $@ $(CFLAGS) $(PICS)/CSMacRed.c $(OBJ)/CSParse.o : $(PICS)/CSParse.c $(CMN)/HTChunk.h \ $(CMN)/HTString.h $(PICS)/CSLUtils.h $(PICS)/CSParse.h $(CC) -c -o $@ $(CFLAGS) $(PICS)/CSParse.c $(OBJ)/HTChunk.o : $(CMN)/HTChunk.c $(CMN)/HTUtils.h $(CMN)/HTChunk.h $(CC) -c -o $@ $(CFLAGS) $(CMN)/HTChunk.c $(OBJ)/HTList.o : $(CMN)/HTList.c $(CMN)/HTUtils.h $(CMN)/HTList.h $(CC) -c -o $@ $(CFLAGS) $(CMN)/HTList.c $(OBJ)/HTString.o : $(CMN)/HTString.c $(CMN)/HTUtils.h $(CMN)/HTString.h $(CC) -c -o $@ $(CFLAGS) $(CMN)/HTString.c $(OBJ)/RatPars.o : $(CL)/RatPars.c \ $(PICS)/CSLUtils.h $(PICS)/CSLL.h $(PICS)/CSParse.h $(CC) -c -o $@ $(CFLAGS) $(CL)/RatPars.c �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/RatPars.c����������������������������������������������������������������0100644�0000764�0000144�00000012373�06523414472�016674� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "malloc.h" #include "wwwsys.h" #include "CSLUtils.h" #include "CSMR.h" /* to define states in stateChange */ #include "CSParse.h" int Total; extern int ParseDebug; CSError_t spit(char* text, CSMachRead_t * pCSMR, BOOL closed) { printf("%s %s\n", text, closed ? "closed" : "opened"); return CSDoMore_more; } MachReadTargetCallback_t targetCallback; StateRet_t targetCallback(CSMachRead_t * pCSMR, CSParse_t * pCSParse, CSMRTC_t target, BOOL closed, void * pVoid) { int change = closed ? -target : target; Total += change; if (!ParseDebug); printf("%3d ", change); /* printf("%s %s (%d)\n", closed ? " ending" : "starting", pCSParse->pParseState->note, closed ? -target : target); */ return StateRet_OK; } /* LLErrorHandler_t parseErrorHandler; */ StateRet_t parseErrorHandler(CSMachRead_t * pCSMR, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode) { char space[256]; printf("%20s - %s:", pCSParse->pTargetObject->note, pCSParse->currentSubState == SubState_X ? "SubState_X" : pCSParse->currentSubState == SubState_N ? "SubState_N" : pCSParse->currentSubState == SubState_A ? "SubState_A" : pCSParse->currentSubState == SubState_B ? "SubState_B" : pCSParse->currentSubState == SubState_C ? "SubState_C" : pCSParse->currentSubState == SubState_D ? "SubState_D" : pCSParse->currentSubState == SubState_E ? "SubState_E" : pCSParse->currentSubState == SubState_F ? "SubState_F" : pCSParse->currentSubState == SubState_G ? "SubState_G" : pCSParse->currentSubState == SubState_H ? "SubState_H" : "???"); switch (errorCode) { case StateRet_WARN_NO_MATCH: if (token) sprintf(space, "Unexpected token \"%s\".\n", token); else sprintf(space, "Unexpected lack of token.\n"); break; case StateRet_WARN_BAD_PUNCT: sprintf(space, "Unextected punctuation \"%c\"", demark); if (token) printf("after token \"%s\".\n", token); else printf(".\n"); break; case StateRet_ERROR_BAD_CHAR: sprintf(space, "Unextected character \"%c\" in token \"%s\".\n", *pCSParse->pParseContext->pTokenError, token); break; default: sprintf(space, "Internal error: demark:\"%c\" token:\"%s\".\n", demark, token); break; } printf(space); /* CSMR_dump(pCSMR); HTTrace(pParseState->note); */ return errorCode; } #if 1 /* use this main to test input with a series of machReads, each on a line. */ int main(int argc, char** argv) { char lineBuf[512]; CSParse_t * pCSParse = 0; CSDoMore_t last = CSDoMore_done; FILE * input; if (argc > 1) { if ((input = fopen(argv[1], "r")) == NULL) { printf("Couldn't open \"%s\".\n", argv[1]); exit(1); } } else { input = stdin; } if (argc > 2) ParseDebug = 1; pCSParse = CSParse_newMachRead(&targetCallback, &parseErrorHandler); while (fgets(lineBuf, sizeof(lineBuf), input)){ int len; if (lineBuf[0] == ';') continue; len = strlen(lineBuf); if (lineBuf[len - 1] == '\r' || lineBuf[len - 1] == '\n') { lineBuf[len-- - 1] = 0; } if (!lineBuf[0]) { if (last != CSDoMore_done) printf("parsing end error\n"); if (pCSParse) CSParse_deleteMachRead(pCSParse); pCSParse = CSParse_newMachRead(&targetCallback, &parseErrorHandler); last = CSDoMore_done; } else { printf("%s ", lineBuf); if (ParseDebug) printf("\n"); switch (last = CSParse_parseChunk(pCSParse, lineBuf, (int) strlen(lineBuf), 0)) { case CSDoMore_done: printf("= %d - parsing end\n", Total); break; case CSDoMore_error: printf("= %d - parsing error\n", Total); exit (1); case CSDoMore_more: printf("\n"); break; } } } if (pCSParse) CSParse_deleteMachRead(pCSParse); if (last != CSDoMore_done) printf("parsing end error\n"); return (0); } #else /* use this main to test input of a machRead list spread out over multiple lines*/ int main(int argc, char** argv) { char lineBuf[512]; while (gets(lineBuf)){ CSParse_t * pCSParse; if (lineBuf[0] == ';') continue; Total = 0; printf("%s", lineBuf); pCSParse = CSParse_newMachRead(&targetCallback, &parseErrorHandler); if (CSParse_parseChunk(pCSParse, lineBuf, (int)strlen(lineBuf), 0) != CSDoMore_done) { printf("parsing end error\n"); break; } CSParse_deleteMachRead(pCSParse); printf("= %d\n", Total); } return (0); } #endif #if 0 /* a not-needed but often useful sample implementation of HTTrace */ int HTTrace(const char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); return (vfprintf(stderr, fmt, pArgs)); } #endif void * HTMemory_malloc (size_t size) { return malloc(size); } void * HTMemory_calloc (size_t nobj, size_t size) { return calloc(nobj, size); } void * HTMemory_realloc (void * p, size_t size) { return realloc(p, size); } void HTMemory_free (void * ptr) { free(ptr); } void HTMemory_outofmem (char * name, char * file, unsigned long line) { HTTrace("%s:%ld failed allocation for \"%s\".\n\ Program aborted.\n", file, line, name); exit(1); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/config.h�����������������������������������������������������������������0100644�0000764�0000144�00000000215�06137542102�016553� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define STDC_HEADERS 1 #define HAVE_MEMCPY 1 #define HAVE_STDIO_H 1 /* #define HAVE_STDLIB_H 1 - not needed if LablPars includes malloc.h */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/RatPars/services.rat�������������������������������������������������������������0100644�0000764�0000144�00000034532�06137542103�017502� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������((PICS-version 1.1) (rating-system "http://www.gcf.org/ratings") (rating-service "http://www.gcf.org/v1.0/") (icon "icons/gcf.gif") (name "The Good Clean Fun Rating System") (description "Everything you ever wanted to know about soap, cleaners, and related products. For demonstration purposes only.") (category (transmit-as "suds") (name "Soapsuds Index") (min 0.0) (max 1.0)) (category (transmit-as "density") (name "suds density") (label (name "none") (value 0) (icon "icons/none.gif")) (label (name "lots") (value 1) (icon "icons/lots.gif"))) (category (transmit-as "subject") (name "document subject") (multivalue true) (unordered true) (label (name "soap") (value 0)) (label (name "water") (value 1)) (label (name "soapdish") (value 2)) (label-only)) (category (transmit-as "color") (name "picture color") (integer) (category (transmit-as "hue") (label (name "blue") (value 0)) (label (name "red") (value 1)) (label (name "green") (value 2))) (category (transmit-as "intensity") (min 0) (max 255)))) ((PICS-version 1.1) (rating-system "http://www.ages.org/our-system/") (rating-service "http://www.ages.org/our-service/v1.0/") (name "The Ages Rating Service") (description "We estimate the maturity required to view materials on the Internet.") (category (transmit-as "age") (name "Minimum Age") (integer true))) ((PICS-version 1.1) (rating-system "http://www.rsac.org/ratingsv01.html") (rating-service "http://www.rsac.org/") (name "The RSAC Ratings Service") (description "The Recreational Software Advisory Council rating service. Based on the work of Dr. Donald F. Roberts of Stanford University, who has studied the effects of media on children for nearly 20 years.") (default (label-only true)) (category (transmit-as "v") (name "Violence") (label (name "Conflict") (description "Harmless conflict; some damage to objects") (value 0)) (label (name "Fighting") (description "Creatures injured or killed; damage to objects; fighting") (value 1)) (label (name "Killing") (description "Humans injured or killed with small amount of blood") (value 2)) (label (name "Blood and Gore") (description "Humans injured or killed; blood and gore") (value 3)) (label (name "Wanton Violence") (description "Wanton and gratuitous violence; torture; rape") (value 4))) (category (transmit-as "s") (name "Sex") (label (name "None") (description "Romance; no sex") (value 0)) (label (name "Passionate kissing") (description "Passionate kissing") (value 1)) (label (name "Clothed sexual touching") (description "Clothed sexual touching") (value 2)) (label (name "Non-explicit sexual activity") (description "Non-explicit sexual activity") (value 3)) (label (name "Explicit sexual activity; sex crimes") (description "Explicit sexual activity; sex crimes") (value 4))) (category (transmit-as "n") (name "Nudity") (label (name "None") (description "No nudity or revealing attire") (value 0)) (label (name "Revealing Attire") (description "Revealing attire") (value 1)) (label (name "Partial Nudity") (description "Partial nudit") (value 2)) (label (name "Frontal Nudity") (description "Non-sexual frontal nudity") (value 3)) (label (name "Explicit") (description "Provocative frontal nudity") (value 4))) (category (transmit-as "l") (description "Language") (label (name "Slang") (description "Inoffensive slang; no profanity") (value 0)) (label (name "Mild Expletives") (description "Mild expletives") (value 1)) (label (name "Expletives") (description "Expletives; non-sexual anatomical references") (value 2)) (label (name "Obscene Gestures") (description "Strong, vulgar language; obscene gestures") (value 3)) (label (name "Explicit") (description "Crude or explicit sexual references") (value 4)))) ((PICS-version 1.1) (rating-system "http://www.classify.org/safesurf/") (rating-service "http://www.classify.org/safesurf/service/") (name "SafeSurf Rating Service") (description "The SafeSurf SS~~ Rating and Classification Standard. Designed with input from thousands of parents and Net citizens worldwide to spec ifically to handle the vast potential of the Internet, it empowers each family to make informed decisions concerning accessibility of online content. Copyright 1995. All Rights Reserved.") (category (transmit-as "SS~~000") (name "Age Range") (label (name "All Ages") (value 1)) (label (name "Older Children") (value 2)) (label (name "Younger Teens") (value 3)) (label (name "Older Teens") (value 4)) (label (name "Adult Supervision Recommended") (value 5)) (label (name "Adults") (value 6)) (label (name "Limited to Adults") (value 7)) (label (name "Adults Only") (value 8)) (label (name "Explicitly for Adults") (value 9))) (category (transmit-as "SS~~001") (name "Profanity") (label (name "Subtle Innuendo") (description "Subtly Implied through the use of Slang") (value 1)) (label (name "Strong Innuendo") (description "Expressly implied through the use of Slang") (value 2)) (label (name "Technical Reference") (description "Dictionary, encyclopedic, news, technical references") (value 3)) (label (name "Non-Graphic-Artistic") (description "Limited non-sexual expletives used in a artistic fashion") (value 4)) (label (name "Graphic-Artistic") (description "Non-sexual expletives used in a artistic fashion") (value 5)) (label (name "Graphic") (description "Limited use of expletives and obscene gestures") (value 6)) (label (name "Detailed Graphic") (description "Casual use of expletives and obscene gestures") (value 7)) (label (name "Explicit Vulgarity") (description "Heavy use of vulgar language and obscene gestures. Unsupervised Chat Rooms.") (value 8)) (label (name "Explicit and Crude") (description "Saturated with crude sexual references and gestures. Unsupervised Chat Rooms.") (value 9))) (category (transmit-as "SS~~002") (name "Heterosexual Themes") (label (name "Subtle Innuendo") (description "Subtly Implied through the use of metaphor") (value 1)) (label (name "Strong Innuendo") (description "Explicitly implied (not described) through the use of metaphor") (value 2)) (label (name "Technical Reference") (description "Dictionary, encyclopedic, news, medical references") (value 3)) (label (name "Non-Graphic-Artistic") (description "Limited metaphoric descriptions used in a artistic fashion") (value 4)) (label (name "Graphic-Artistic") (description "Metaphoric descriptions used in a artistic fashion") (value 5)) (label (name "Graphic") (description "Descriptions of intimate sexual acts") (value 6)) (label (name "Detailed Graphic") (description "Descriptions of intimate details of sexual acts") (value 7)) (label (name "Explicit Vulgarity") (description "Explicit Descriptions of intimate details of sexual acts designed to arouse. Inviting interactive sexual participation. Unsupervis ed Sexual Chat Rooms or Newsgroups") (value 8)) (label (name "Explicit and Crude") (description "Profane Graphic Descriptions of intimate details of sexual acts designed to arouse. Inviting interactive sexual participation. Un supervised Sexual Chat Rooms or Newsgroups") (value 9))) (category (transmit-as "SS~~003") (name "Homosexual Themes") (label (name "Subtle Innuendo") (description "Subtly Implied through the use of metaphor") (value 1)) (label (name "Strong Innuendo") (description "Explicitly implied (not described) through the use of metaphor") (value 2)) (label (name "Technical Reference") (description "Dictionary, encyclopedic, news, medical references") (value 3)) (label (name "Non-Graphic-Artistic") (description "Limited metaphoric descriptions used in a artistic fashion") (value 4)) (label (name "Graphic-Artistic") (description "Metaphoric descriptions used in a artistic fashion") (value 5)) (label (name "Graphic") (description "Descriptions of intimate sexual acts") (value 6)) (label (name "Detailed Graphic") (description "Descriptions of intimate details of sexual acts") (value 7)) (label (name "Explicit Vulgarity") (description "Explicit Descriptions of intimate details of sexual acts designed to arouse. Inviting interactive sexual participation. Unsupervis ed Sexual Chat Rooms or Newsgroups") (value 8)) (label (name "Explicit and Crude") (description "Profane Graphic Descriptions of intimate details of sexual acts designed to arouse. Inviting interactive sexual participation. Un supervised Sexual Chat Rooms or Newsgroups") (value 9))) (category (transmit-as "SS~~004") (name "Nudity") (label (name "Subtle Innuendo") (description "Subtly Implied through the use of composition, lighting, shaping, revealing clothing, etc.") (value 1)) (label (name "Strong Innuendo") (description "Explicitly implied (not shown) through the use of composition, lighting, shaping or revealing clothing") (value 2)) (label (name "Technical Reference") (description "Dictionary, encyclopedic, news, medical references") (value 3)) (label (name "Non-Graphic-Artistic") (description "Classic works of art presented in public museums for family viewing") (value 4)) (label (name "Graphic-Artistic") (description "Artistically presented without full frontal nudity") (value 5)) (label (name "Graphic") (description "Artistically presented with frontal nudity") (value 6)) (label (name "Detailed Graphic") (description "Erotic frontal nudity") (value 7)) (label (name "Explicit Vulgarity") (description "Detailed provocative presentation") (value 8)) (label (name "Explicit and Crude") (description "Explicit pornographic presentation") (value 9))) (category (transmit-as "SS~~005") (name "Violence") (label (name "Subtle Innuendo") (value 1)) (label (name "Strong Innuendo") (value 2)) (label (name "Technical Reference") (value 3)) (label (name "Non-Graphic-Artistic") (value 4)) (label (name "Graphic-Artistic") (value 5)) (label (name "Graphic") (value 6)) (label (name "Detailed Graphic") (value 7)) (label (name "Inviting Participation in Graphic Interactive Format") (value 8)) (label (name "Encouraging Personal Participation, Weapon Making") (value 9))) (category (transmit-as "SS~~006") (name "Sex Violence and Profanity") (label (name "Subtle Innuendo") (value 1)) (label (name "Strong Innuendo") (value 2)) (label (name "Technical Reference") (value 3)) (label (name "Non-Graphic-Artistic") (value 4)) (label (name "Graphic-Artistic") (value 5)) (label (name "Graphic") (value 6)) (label (name "Detailed Graphic") (value 7)) (label (name "Explicit Vulgarity") (value 8)) (label (name "Explicit and Crude") (value 9))) (category (transmit-as "SS~~007") (name "Intolerance of another person's racial, religious, or gender backround") (label (name "Subtle Innuendo") (value 1)) (label (name "Strong Innuendo") (value 2)) (label (name "Technical Reference") (value 3)) (label (name "Non-Graphic-Literary") (value 4)) (label (name "Graphic-Literary") (value 5)) (label (name "Graphic Discussions") (value 6)) (label (name "Endorsing Hatred") (value 7)) (label (name "Endorsing Violent or Hateful Action") (value 8)) (label (name "Advocating Violent or Hateful Action") (value 9))) (category (transmit-as "SS~~008") (name "Glorifying Drug Use") (label (name "Subtle Innuendo") (value 1)) (label (name "Strong Innuendo") (value 2)) (label (name "Technical Reference") (value 3)) (label (name "Non-Graphic-Artistic") (value 4)) (label (name "Graphic-Artistic") (value 5)) (label (name "Graphic") (value 6)) (label (name "Detailed Graphic") (value 7)) (label (name "Simulated Interactive Participation") (value 8)) (label (name "Soliciting Personal Participation") (value 9))) (category (transmit-as "SS~~009") (name "Other Adult Themes") (label (name "Subtle Innuendo") (value 1)) (label (name "Strong Innuendo") (value 2)) (label (name "Technical Reference") (value 3)) (label (name "Non-Graphic-Artistic") (value 4)) (label (name "Graphic-Artistic") (value 5)) (label (name "Graphic") (value 6)) (label (name "Detailed Graphic") (value 7)) (label (name "Explicit Vulgarity") (value 8)) (label (name "Explicit and Crude") (value 9))) (category (transmit-as "SS~~00A") (name "Gambling") (label (name "Subtle Innuendo") (value 1)) (label (name "Strong Innuendo") (value 2)) (label (name "Technical Discussion") (value 3)) (label (name "Non-Graphic-Artistic, Advertising") (value 4)) (label (name "Graphic-Artistic, Advertising") (value 5)) (label (name "Simulated Gambling") (value 6)) (label (name "Real Life Gambling without Stakes") (value 7)) (label (name "Encouraging Interactive Real Life Participation with Stakes") (value 8)) (label (name "Providing Means with Stakes") (value 9))) (category (transmit-as "SS~~100") (name "General Information") (min 1) (max 100) (integer true))) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/�����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517402�014342� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/CVS/�������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517402�014775� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/CVS/Root���������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517402�015641� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/CVS/Repository���������������������������������������������������������������0100644�0000764�0000144�00000000027�07405517402�017073� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/CVS/Entries������������������������������������������������������������������0100644�0000764�0000144�00000000002�07405517402�016316� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/CVS/Entries.Log��������������������������������������������������������������0100644�0000764�0000144�00000000016�07405517402�017043� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/win32//// ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/win32/�����������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517402�015304� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/win32/CVS/�������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517402�015737� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/win32/CVS/Root���������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517402�016603� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/win32/CVS/Repository���������������������������������������������������������0100644�0000764�0000144�00000000035�07405517402�020034� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/win32 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/bin/win32/CVS/Entries������������������������������������������������������������0100644�0000764�0000144�00000000002�07405517402�017260� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/�����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07422617424�014365� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CVS/�������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517405�015017� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CVS/Root���������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517402�015660� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CVS/Repository���������������������������������������������������������������0100644�0000764�0000144�00000000027�07405517402�017112� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CVS/Entries������������������������������������������������������������������0100644�0000764�0000144�00000002015�07405517405�016346� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Sat Apr 20 16:50:55 1996// /CSApp.c/1.16/Mon Feb 22 22:10:12 1999// /CSChkLab.c/1.3/Mon Feb 22 22:10:12 1999// /CSKwik.c/1.2/Mon Feb 22 22:10:12 1999// /CSLApp.html/1.5/Wed May 20 19:26:46 1998// /CSLL.html/1.2/Tue May 26 21:21:10 1998// /CSLLOut.c/1.2/Mon Jun 24 16:57:05 1996// /CSLLSt.html/1.2/Thu May 14 02:11:43 1998// /CSLLURLs.c/1.1/Fri Apr 19 21:56:25 1996// /CSLUtils.html/1.3/Thu Jul 11 11:31:03 1996// /CSLabel.c/1.7/Mon May 4 19:38:39 1998// /CSMR.html/1.3/Wed Apr 24 08:19:30 1996// /CSMRSt.html/1.3/Thu May 14 02:11:44 1998// /CSMacRed.c/1.5/Mon May 4 19:38:40 1998// /CSMem.c/1.1/Fri Apr 19 21:56:33 1996// /CSParse.c/1.9/Mon Feb 22 22:10:12 1999// /CSParse.html/1.3/Wed Apr 24 08:19:42 1996// /CSStream.c/1.6/Mon Feb 22 22:10:12 1999// /CSUser.c/1.6/Mon May 4 19:38:42 1998// /CSUser.html/1.4/Tue May 26 21:21:10 1998// /CSUserSt.html/1.1/Fri Apr 19 21:56:40 1996// /CSUsrLst.c/1.3/Mon Feb 22 22:10:12 1999// /CSUsrLst.html/1.1/Fri Apr 19 21:56:43 1996// /Makefile.am/1.12/Fri Aug 4 09:48:37 2000// D �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CVS/Entries.Log��������������������������������������������������������������0100644�0000764�0000144�00000000020�07405517405�017060� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/windows//// ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/���������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520573�016056� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/CVS/�����������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517405�016511� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/CVS/Root�������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517405�017355� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/CVS/Repository�������������������������������������������������������0100644�0000764�0000144�00000000037�07405517405�020610� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/CVS/Entries����������������������������������������������������������0100644�0000764�0000144�00000000255�07405517405�020044� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.2/Thu Sep 17 21:08:44 1998// /Makefile.am/1.7/Tue Nov 3 23:07:05 1998// /pics.files/1.2/Mon Apr 29 15:20:20 1996// /windll.c/1.1/Fri Apr 19 21:56:58 1996// D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/Makefile�������������������������������������������������������������0100644�0000764�0000144�00000015522�07405520574�017521� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ SUFFIXES = .files .def SRC := $(wildcard *.c) MAK := $(wildcard *.mak *.dsp) PL := $(wildcard *.pl) AUTOMAKE_OPTIONS = foreign BUILT_SOURCES = pics.def EXTRA_DIST = $(BUILT_SOURCES) $(SRC) $(MAK) $(PL) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .def .files $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign PICS-client/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = PICS-client/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign PICS-client/src/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean def: maintainer-clean-generic $(BUILT_SOURCES) .files.def: $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def picslist.txt: ls -1 ../*.c | sed -e s=\.\./==1 | ../../../config/makedefs.pl @ > picslist.txt # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/.cvsignore�����������������������������������������������������������0100644�0000764�0000144�00000000042�06600275134�020043� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile Makefile.in *.def *.docs ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/Makefile.am����������������������������������������������������������0100644�0000764�0000144�00000001044�06617706231�020107� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. SUFFIXES = .files .def SRC := $(wildcard *.c) MAK := $(wildcard *.mak *.dsp) PL := $(wildcard *.pl) AUTOMAKE_OPTIONS = foreign BUILT_SOURCES = \ pics.def EXTRA_DIST = \ $(BUILT_SOURCES) \ $(SRC) \ $(MAK) \ $(PL) def: maintainer-clean-generic $(BUILT_SOURCES) .files.def: $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def picslist.txt: ls -1 ../*.c | sed -e s=\.\./==1 | ../../../config/makedefs.pl @ > picslist.txt ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/pics.files�����������������������������������������������������������0100644�0000764�0000144�00000000157�06141157064�020035� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSApp.c CSChkLab.c CSKwik.c CSLLOut.c CSLLURLs.c CSLabel.c CSMacRed.c CSParse.c CSStream.c CSUser.c CSUsrLst.c �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/windll.c�������������������������������������������������������������0100644�0000764�0000144�00000000163�06136006052�017477� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <windows.h> BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) { return (1); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/windows/pics.def�������������������������������������������������������������0100644�0000764�0000144�00000006736�07405520457�017506� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS ;CSApp.c @ 100 CSUserList_load @ 101 CSLoadedUser_remove @ 102 CSLoadedUser_find @ 103 CSLoadedUser_add @ 104 CSLoadedUser_deleteAll @ 105 CSLoadedUser_enum @ 106 CSLoadedUser_load @ 107 CSApp_label @ 108 CSApp_registerDefaultUserByName @ 109 CSApp_registerUserByName @ 110 CSApp_setDefaultUser @ 111 CSApp_checkHUser @ 112 CSApp_unregisterDefaultUser @ 113 CSApp_unregisterUser @ 114 CSApp_registerApp @ 115 CSApp_unregisterApp @ 116 CSApp_registerReq @ 117 CSApp_unregisterReq @ 118 CSApp_originalRequest @ 119 CSApp_libraryVersion @ 120 ;CSChkLab.c @ 200 CSCheckLabel_checkLabelAndUser @ 201 CSCheckLabel_parseAndValidateLabelStr @ 202 ;CSKwik.c @ 300 Kwik_free @ 301 Kwik_new @ 302 ;CSLLOut.c @ 400 ps @ 401 CSLabel_output @ 402 CSLabel_dump @ 403 ;CSLLURLs.c @ 500 CSLLData_getAllSingleLabels @ 501 ;CSLabel.c @ 600 CSLabel_new @ 601 CSLabel_copy @ 602 CSLabel_free @ 603 CSLabel_getCSLLData @ 604 CSLabel_getLabelError @ 605 CSLabel_getLabelOptions @ 606 CSLabel_getServiceInfo @ 607 CSLabel_getServiceName @ 608 CSLabel_getLabel @ 609 CSLabel_getLabelNumber @ 610 CSLabel_getSingleLabel @ 611 CSLabel_getLabelRating @ 612 CSLabel_getRatingName @ 613 CSLabel_getLabelRatingRange @ 614 CSLabel_getRatingStr @ 615 CSParse_newLabel @ 616 CSParse_getLabel @ 617 CSParse_deleteLabel @ 618 CSLabel_iterateServices @ 619 CSLabel_iterateLabels @ 620 CSLabel_iterateSingleLabels @ 621 CSLabel_iterateLabelRatings @ 622 CSLabel_ratingsIncludeFVal @ 623 CSLabel_ratingsIncludeRange @ 624 CSLabel_ratingsIncludeRanges @ 625 ;CSMacRed.c @ 700 MachRead_enum_free @ 701 MachRead_category_free @ 702 CSMachReadData_new @ 703 CSMachReadData_free @ 704 CSMachRead_new @ 705 CSMachRead_copy @ 706 CSMachRead_free @ 707 CSMachRead_getSystem @ 708 CSMachRead_getService @ 709 CSMachRead_getCSMachReadData @ 710 CSMachRead_getMachReadCategory @ 711 CSMachRead_getMachReadEnum @ 712 CSParse_newMachRead @ 713 CSParse_getMachRead @ 714 CSParse_deleteMachRead @ 715 CSMachRead_iterateCategories @ 716 CSMachRead_iterateEnums @ 717 ;CSParse.c @ 800 BVal_readVal @ 801 BVal_initialized @ 802 BVal_value @ 803 BVal_set @ 804 BVal_clear @ 805 FVal_readVal @ 806 FVal_initialized @ 807 FVal_value @ 808 FVal_lessThan @ 809 FVal_minus @ 810 FVal_nearerZero @ 811 FVal_isZero @ 812 FVal_set @ 813 FVal_setInfinite @ 814 FVal_isInfinite @ 815 FVal_clear @ 816 FVal_toStr @ 817 SVal_readVal @ 818 SVal_initialized @ 819 SVal_value @ 820 SVal_clear @ 821 DVal_readVal @ 822 DVal_initialized @ 823 DVal_compare @ 824 DVal_value @ 825 DVal_clear @ 826 Range_toStr @ 827 Range_gap @ 828 CSParse_new @ 829 CSParse_delete @ 830 CSParse_parseChunk @ 831 Punct_badDemark @ 832 CSParse_subState2str @ 833 CSParse_targetParser @ 834 ;CSStream.c @ 900 CSParseMachRead @ 901 CSParseUser @ 902 CSParseLabel @ 903 ;CSUser.c @ 1000 UserServiceRating_free @ 1001 UserService_free @ 1002 CSUserData_new @ 1003 CSUserData_free @ 1004 CSUser_new @ 1005 CSUser_copy @ 1006 CSUser_free @ 1007 CSUser_name @ 1008 CSUser_checkPassword @ 1009 CSUser_bureau @ 1010 CSUser_getCSUserData @ 1011 CSUser_getUserService @ 1012 CSUser_getUserServiceRating @ 1013 CSUser_getUserRatingRange @ 1014 CSUser_getRatingStr @ 1015 CSParse_newUser @ 1016 CSParse_getUser @ 1017 CSParse_deleteUser @ 1018 CSUser_iterateServices @ 1019 CSUser_iterateServiceRatings @ 1020 CSUser_acceptLabels @ 1021 CSUser_getLabels @ 1022 ;CSUsrLst.c @ 1100 CSUserList_destroy @ 1101 CSUserList_findURL @ 1102 CSUserList_enum @ 1103 CSUserLists @ 1104 ����������������������������������libwww/PICS-client/src/windows/Makefile.in����������������������������������������������������������0100644�0000764�0000144�00000015124�07405520526�020121� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ SUFFIXES = .files .def SRC := $(wildcard *.c) MAK := $(wildcard *.mak *.dsp) PL := $(wildcard *.pl) AUTOMAKE_OPTIONS = foreign BUILT_SOURCES = pics.def EXTRA_DIST = $(BUILT_SOURCES) $(SRC) $(MAK) $(PL) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .def .files $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign PICS-client/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = PICS-client/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign PICS-client/src/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean def: maintainer-clean-generic $(BUILT_SOURCES) .files.def: $(top_srcdir)/config/makedefs.pl -headerEXPORTS -d$(srcdir)/.. @$(srcdir)/$(*F).files > $(srcdir)/$(*F).def picslist.txt: ls -1 ../*.c | sed -e s=\.\./==1 | ../../../config/makedefs.pl @ > picslist.txt # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.cvsignore�������������������������������������������������������������������0100644�0000764�0000144�00000000056�06136212757�016364� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������*.h .www_browsable .deps Makefile.in Makefile ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSApp.c����������������������������������������������������������������������0100644�0000764�0000144�00000051510�06664352704�015502� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* N O T E S - to be removed before release executable l:\projects\libwww\www\linemode\pics\windows\windebug\wwwpics.exe working dir l:\projects\libwww\www\library\implementation\windows\windebug args dlls l:\projects\libwww\www\pics\implementation\windows\windebug\wwwpics.dll switch to HTStrMatch */ #include <stdio.h> #include <string.h> #include "WWWLib.h" #include "WWWApp.h" #include "WWWFile.h" #include "HTHeader.h" #include "CSLApp.h" #include "CSParse.h" #include "CSLUtils.h" #include "CSLL.h" #include "CSUser.h" #include "CSUserSt.h" #include "CSUsrLst.h" /* ReqParms - list of pending HTRequests and their callbacks an' stuff */ typedef struct { HTRequest * pReq; enum {reqState_NEW, reqState_PROT_REQ, reqState_BUREAU_START, reqState_BUREAU_MIDDLE, reqState_BUREAU_DONE, reqState_BUREAU_ERR} reqState; CSDisposition_criteria criteria;/* if the criteria are met */ CSDisposition_callback * pCallback; /* call pCallback */ CSError_t disposition; /* with */ CSLabel_t * pCSLabel; /* all */ CSUser_t * pCSUser; /* these */ void * pVoid; /* parameters */ HTParentAnchor * anchor; HTFormat outputFormat; HTStream * outputStream; HTMethod method; } ReqParms_t; ReqParms_t DefaultReqParms = {0, reqState_NEW, CSApp_neverCall, 0, CSError_APP, 0, 0, 0}; /* handy strings */ PRIVATE char * S_mimeLabel = "PICS-Label"; PRIVATE char * S_machRead = "application/x-pics-machine-readable"; PRIVATE char * S_label = "application/pics-label"; PRIVATE char * S_user = "application/x-pics-user"; PRIVATE char * S_URLList = "application/x-url-list"; PRIVATE HTList * ListWithHeaderGenerator = NULL; /* LoadURLToConverter - load a URL and set the output to go to converter. Useful for loading user list and profiles. */ PRIVATE BOOL LoadURLToConverter(const char * url, const char * relatedName, const char * type, HTConverter * converter, const char * errMessage) { BOOL ret; char * fullURL; HTRequest * pRequest; HTParentAnchor * pParentAnchor; HTList * conversions = HTList_new(); pRequest = HTRequest_new(); fullURL = HTParse(url, relatedName, PARSE_ALL); pParentAnchor = (HTParentAnchor *) HTAnchor_findAddress(fullURL); HTRequest_setPreemptive(pRequest, YES); if (converter) { HTConversion_add(conversions, type, "*/*", converter, 1.0, 0.0, 0.0); HTRequest_setConversion(pRequest, conversions, YES); } if ((ret = HTLoadAnchor((HTAnchor *) pParentAnchor, pRequest)) != YES) HTPrint("PICS: Can't access %s.\n", errMessage); if (converter) HTConversion_deleteAll(conversions); else HTList_delete(conversions); HTRequest_delete(pRequest); HT_FREE(fullURL); return ret; } /* This should be in CSUserList, but that would require that LoadURLToConverter and S_URLList be PUBLIC and added to some header, which one? */ PUBLIC BOOL CSUserList_load(char * url, char * relatedName) { return LoadURLToConverter(url, relatedName, S_URLList, CSUserLists, "PICS user list"); } /* L O A D E D U S E R */ /* LoadedUsers is a list of all the users who have had their descritpion files loaded */ typedef struct { CSUser_t * pCSUser; char * url; } CSLoadedUser_t; PRIVATE HTList * LoadedUsers = 0; PRIVATE CSLoadedUser_t * CSLoadedUser_new(CSUser_t * pCSUser, char * url) { CSLoadedUser_t * pCSLoadedUser; if ((pCSLoadedUser = (CSLoadedUser_t *)HT_MALLOC(sizeof(CSLoadedUser_t))) == NULL) HT_OUTOFMEM("CSLoadedUser_t"); pCSLoadedUser->pCSUser = pCSUser; pCSLoadedUser->url = 0; StrAllocCopy(pCSLoadedUser->url, url); return pCSLoadedUser; } PRIVATE void CSLoadedUser_delete(CSLoadedUser_t * pCSLoadedUser) { CSUser_free(pCSLoadedUser->pCSUser); HT_FREE(pCSLoadedUser->url); HT_FREE(pCSLoadedUser); } PRIVATE CSLoadedUser_t * CSLoadedUser_findUser(CSUser_t * pCSUser) { HTList * cur = LoadedUsers; CSLoadedUser_t * pCSLoadedUser; while ((pCSLoadedUser = (CSLoadedUser_t *) HTList_nextObject(cur))) { if (pCSLoadedUser->pCSUser == pCSUser) return pCSLoadedUser; } return 0; } PRIVATE CSLoadedUser_t * CSLoadedUser_findName(char * name) { HTList * cur = LoadedUsers; CSLoadedUser_t * pCSLoadedUser; while ((pCSLoadedUser = (CSLoadedUser_t *) HTList_nextObject(cur))) { if (!strcasecomp(CSUser_name(pCSLoadedUser->pCSUser), name)) return pCSLoadedUser; } return 0; } PUBLIC BOOL CSLoadedUser_remove(CSUser_t * pCSUser) { CSLoadedUser_t * pCSLoadedUser; if (!(pCSLoadedUser = CSLoadedUser_findUser(pCSUser))) return NO; HTList_removeObject(LoadedUsers, (void *)pCSLoadedUser); CSLoadedUser_delete(pCSLoadedUser); return YES; } /* PUBLIC version of findName */ PUBLIC BOOL CSLoadedUser_find(char * name) { return (CSLoadedUser_findName(name) != 0); } PRIVATE CSLoadedUser_t * CSLoadedUser_findUrl(char * url) { HTList * cur = LoadedUsers; CSLoadedUser_t * pCSLoadedUser; while ((pCSLoadedUser = (CSLoadedUser_t *) HTList_nextObject(cur))) { if (!strcasecomp(pCSLoadedUser->url, url)) return pCSLoadedUser; } return 0; } CSApp_userCallback * PUserCallback = 0; PUBLIC BOOL CSLoadedUser_add(CSUser_t * pCSUser, char * url) { int callBackRet; CSLoadedUser_t * pCSLoadedUser; callBackRet = (*PUserCallback)(pCSUser, DefaultReqParms.pVoid); switch (callBackRet) { case 1: DefaultReqParms.pCSUser = pCSUser; HTTRACE(PICS_TRACE, "PICS: Setting default user to \"%s\".\n" _ CSUser_name(pCSUser)); break; case 0: HTTRACE(PICS_TRACE, "PICS: Loaded user \"%s\".\n" _ CSUser_name(pCSUser)); break; case -1: HTTRACE(PICS_TRACE, "PICS: User \"%s\" not loaded.\n" _ CSUser_name(pCSUser)); return YES; default: HTTRACE(PICS_TRACE, "PICS: Aborting load user \"%s\".\n" _ CSUser_name(pCSUser)); return NO; } if ((pCSLoadedUser = CSLoadedUser_findName(CSUser_name(pCSUser)))) { HTPrint("PICS: Replacing previous user \"%s\".\n", CSUser_name(pCSUser)); HTList_removeObject(LoadedUsers, (void *)pCSLoadedUser); } pCSLoadedUser = CSLoadedUser_new(pCSUser, url); return (HTList_addObject(LoadedUsers, (void *)pCSLoadedUser)); } PUBLIC BOOL CSLoadedUser_deleteAll (void) { CSLoadedUser_t * pCSLoadedUser; while ((pCSLoadedUser = (CSLoadedUser_t *) HTList_removeLastObject(LoadedUsers))) { CSLoadedUser_delete(pCSLoadedUser); } HTList_delete(LoadedUsers); LoadedUsers = NULL; return YES; } PUBLIC int CSLoadedUser_enum(CSLoadedUserCallback * pCallback, void * pVoid) { HTList * cur = LoadedUsers; CSLoadedUser_t * pCSLoadedUser; int retVal, i = 0; while ((pCSLoadedUser = (CSLoadedUser_t *) HTList_nextObject(cur))) { if ((retVal = (*pCallback)(pCSLoadedUser->pCSUser, i, pVoid)) != CSError_OK) return (retVal); i++; } return 0; } PUBLIC CSUser_t * CSLoadedUser_load(char * url, char * relatedName) { BOOL err = 0; char * fullURL = HTParse(url, relatedName, PARSE_ALL); CSLoadedUser_t * pCSLoadedUser; if (!LoadURLToConverter(fullURL, 0, 0, 0, "PICS user file")) /* if (!LoadURLToConverter(fullURL, 0, S_user, CSParseUser, "PICS user file", 0, 0, 0)) */ err = 1; else if ((pCSLoadedUser = CSLoadedUser_findUrl(fullURL)) == NULL) err = 1; HT_FREE(fullURL); return err ? 0 : pCSLoadedUser->pCSUser; } /* R E Q P A R M S */ HTList * ReqParms = 0; PRIVATE ReqParms_t * ReqParms_new(HTRequest * pReq, CSUser_t * pCSUser, CSDisposition_callback * pCallback, CSDisposition_criteria criteria, void * pVoid) { ReqParms_t * me; if ((me = (ReqParms_t *) HT_CALLOC(1, sizeof(ReqParms_t))) == NULL) HT_OUTOFMEM("ReqParms_t"); me->pReq = pReq; me->disposition = CSError_APP; me->reqState = reqState_NEW; me->pCSUser = pCSUser; me->pCallback = pCallback; me->criteria = criteria; me->pVoid = pVoid; return me; } PRIVATE void ReqParms_free(ReqParms_t * pReqParms) { HT_FREE(pReqParms); } PRIVATE ReqParms_t * ReqParms_copy(ReqParms_t * old) { ReqParms_t * me; if ((me = (ReqParms_t *) HT_CALLOC(1, sizeof(ReqParms_t))) == NULL) HT_OUTOFMEM("ReqParms_t"); me->pReq = old->pReq; me->disposition = old->disposition; me->reqState = old->reqState; me->pCSUser = old->pCSUser; me->pCallback = old->pCallback; me->criteria = old->criteria; me->pVoid = old->pVoid; return me; } PRIVATE ReqParms_t * ReqParms_getReq(HTRequest * pReq) { HTList * cur = ReqParms; ReqParms_t * pReqParms; while ((pReqParms = (ReqParms_t *) HTList_nextObject(cur))) if (pReqParms->pReq == pReq) return pReqParms; return 0; } /* PRIVATE ReqParms_t * ReqParms_getBureauReq(HTRequest * pBureauReq) { HTList * cur = ReqParms; ReqParms_t * pReqParms; while ((pReqParms = (ReqParms_t *) HTList_nextObject(cur))) if (pReqParms->pBureauReq == pBureauReq) return pReqParms; return 0; } */ PRIVATE BOOL ReqParms_cache(ReqParms_t * pReqParms, CSLabel_t * pCSLabel) { return NO; } PRIVATE BOOL ReqParms_checkCache(ReqParms_t * pReqParms, int * pRet) { return NO; } PUBLIC BOOL CSApp_label(HTRequest * pReq, CSLabel_t * pCSLabel) { ReqParms_t * pReqParms; if (!(pReqParms = ReqParms_getReq(pReq))) pReqParms = &DefaultReqParms; /* if (!(pReqParms = ReqParms_getBureauReq(pReq))) pReqParms = &DefaultReqParms; if (pReqParms->pBureauReq != pReq) { HTPrint("PICS: Could not find original request\n"); return NO; } */ pReqParms->pCSLabel = pCSLabel; pReqParms->disposition = CSCheckLabel_checkLabelAndUser(pCSLabel, pReqParms->pCSUser); ReqParms_cache(pReqParms, pCSLabel); return YES; } PRIVATE int ReqParms_checkDisposition(ReqParms_t * pReqParms) { int kill; kill = pReqParms->disposition != CSError_OK; if ((kill && pReqParms->criteria & CSApp_callOnBad) || (!kill && pReqParms->criteria & CSApp_callOnGood)) pReqParms->disposition = (*pReqParms->pCallback)(pReqParms->pReq, pReqParms->pCSLabel, pReqParms->pCSUser, pReqParms->disposition, pReqParms->pVoid); return (pReqParms->disposition == CSError_OK ? HT_OK : HT_INTERRUPTED); CSLabel_free(pReqParms->pCSLabel); if (pReqParms->disposition == CSError_OK) return HT_OK; return HT_OK; } PRIVATE BOOL ReqParms_removeRequest(ReqParms_t * pReqParms) { HTList_removeObject(ReqParms, (void *)pReqParms); ReqParms_free(pReqParms); return YES; } /* PRIVATE BOOL ReqParms_removeRequest(HTRequest * pReq) { ReqParms_t * pReqParms; if ((pReqParms = ReqParms_getReq(pReq))) return HTList_removeObject(ReqParms, (void *)pReqParms); return NO; } PRIVATE CSUser_t * ReqParms_getUser(HTRequest * pReq) { ReqParms_t * pReqParms; if ((pReqParms = ReqParms_getReq(pReq))) return pReqParms->pCSUser; return 0; } */ /* U S E R */ PUBLIC BOOL CSApp_registerDefaultUserByName(char * user, char * password) { CSUser_t * pCSUser; CSLoadedUser_t * pCSLoadedUser; if (!(pCSLoadedUser = CSLoadedUser_findName(user))) { HTTRACE(PICS_TRACE, "PICS: User \"%s\" not found.\n" _ CSUser_name(pCSUser)); return NO; } pCSUser = pCSLoadedUser->pCSUser; if (CSUser_checkPassword(pCSUser, password) == NO) { HTPrint("PICS: Bad password for user \"%s\".\n", CSUser_name(pCSUser)); return NO; } DefaultReqParms.pCSUser = pCSUser; return YES; } PUBLIC CSUser_t * CSApp_registerUserByName(char* user, char* password) { CSLoadedUser_t * pCSLoadedUser; if (!(pCSLoadedUser = CSLoadedUser_findName(user))) return 0; if (CSUser_checkPassword(pCSLoadedUser->pCSUser, password) == NO) { HTPrint("PICS: Bad password for user \"%s\"\n", CSUser_name(pCSLoadedUser->pCSUser)); return 0; } return pCSLoadedUser->pCSUser; } PUBLIC BOOL CSApp_setDefaultUser(CSUser_t * pCSUser) { if (!pCSUser) return NO; DefaultReqParms.pCSUser = pCSUser; return YES; } PUBLIC BOOL CSApp_checkHUser(CSUser_t * pCSUser) { return YES; } PUBLIC BOOL CSApp_unregisterDefaultUser(void) { DefaultReqParms.pCSUser = 0; return YES; } PUBLIC BOOL CSApp_unregisterUser(CSUser_t * pCSUser) { if (DefaultReqParms.pCSUser == pCSUser) DefaultReqParms.pCSUser = 0; return CSLoadedUser_remove(pCSUser); } /* base of all streams */ #define PUTBLOCK(b, l) (*target->isa->put_block)(target, b, l) struct _HTStream { const HTStreamClass * isa; /* ... */ }; /* HTNet Filters */ PRIVATE HTNetAfter CSApp_bureauError; PRIVATE int CSApp_bureauAfter (HTRequest * pReq, HTResponse * response, void * context, int status) { ReqParms_t * pReqParms = (ReqParms_t *)context; /* if (!pReqParms || (pReq != pReqParms->pBureauReq)) return HT_ERROR; */ pReqParms->reqState = reqState_BUREAU_DONE; HTRequest_deleteAfter(pReq, CSApp_bureauAfter); HTRequest_deleteAfter(pReq, CSApp_bureauError); HTTRACE(PICS_TRACE, "PICS: Load was %sOK\n" _ pReqParms->disposition == CSError_OK ? "" : "!"); ReqParms_removeRequest(pReqParms); if (pReqParms->disposition != CSError_OK) return HT_OK; /* HTRequest_setAnchor(pReq, pReqParms->anchor); */ HTRequest_setOutputFormat(pReq, pReqParms->outputFormat); HTRequest_setOutputStream(pReq, pReqParms->outputStream); HTRequest_setMethod(pReq, pReqParms->method); return HTLoadAnchor((HTAnchor *)pReqParms->anchor, pReq); } PRIVATE int CSApp_bureauError (HTRequest * pReq, HTResponse * response, void * context, int status) { ReqParms_t * pReqParms = (ReqParms_t *)context; /* if (!pReqParms || (pReq != pReqParms->pBureauReq)) return HT_ERROR; */ pReqParms->reqState = reqState_BUREAU_ERR; HTPrint("PICS: couldn't find label service.\n"); return HT_OK; } PRIVATE int CSApp_netBefore (HTRequest * pReq, void * param, int mode) { HTParentAnchor * pParentAnchor; ReqParms_t * pReqParms; char * bureau; char * url; char * ptr; int ret; /* if (ReqParms_getBureauReq(pReq) || pReq == DefaultReqParms.pBureauReq) return HT_OK; if (!(pReqParms = ReqParms_getReq(pReq))) { pReqParms = &DefaultReqParms; DefaultReqParms.pReq = pReq; } */ if ((pReqParms = ReqParms_getReq(pReq))) { if (pReqParms->reqState == reqState_BUREAU_START) /* bureau req */ return HT_OK; /* so ignore */ } else { if (!DefaultReqParms.pCSUser) return HT_OK; /* no PICS user so no PICS */ pReqParms = ReqParms_copy(&DefaultReqParms); pReqParms->pReq = pReq; } if (!(bureau = CSUser_bureau(pReqParms->pCSUser))) { HTRequest_setGenerator(pReq, ListWithHeaderGenerator, NO); return HT_OK; /* Header will handle it */ } if (ReqParms_checkCache(pReqParms, &ret)) return ret; url = HTAnchor_address((HTAnchor*)HTRequest_anchor(pReq)); ptr = CSUser_getLabels(pReqParms->pCSUser, url, CSOption_normal, CSCompleteness_full); pReqParms->anchor = HTRequest_anchor(pReq); pReqParms->outputFormat = HTRequest_outputFormat(pReq); HTRequest_setOutputFormat(pReq, WWW_SOURCE); pReqParms->outputStream = HTRequest_outputStream(pReq); HTRequest_setOutputStream(pReq, CSParseLabel(pReq, 0, 0, 0, 0)); /* pReqParms->pBureauReq = pReq; */ pReqParms->reqState = reqState_BUREAU_START; /* mark as a BUREAU req */ HTRequest_setPreemptive(pReq, YES); HTTRACE(PICS_TRACE, "PICS: label request:\n%s\n" _ ptr); /* get label and set disposition */ HTRequest_addAfter(pReq, CSApp_bureauAfter, NULL, (void *) pReqParms, HT_LOADED, HT_FILTER_MIDDLE, YES); HTRequest_addAfter(pReq, CSApp_bureauError, NULL, (void *) pReqParms, HT_ERROR, HT_FILTER_MIDDLE, YES); pParentAnchor = (HTParentAnchor *) HTAnchor_findAddress(ptr); if ((ret = HTLoadAnchor((HTAnchor *) pParentAnchor, pReq)) != YES) HTPrint("PICS: Can't access label bureau at %s.\n", ptr); return HT_OK; } /*HTPostCallback CSApp_headerGenerator;*/ PRIVATE int CSApp_headerGenerator (HTRequest * pReq, HTStream * target) { char * translated; HTParentAnchor *anchor = HTRequest_anchor(pReq); char * url; ReqParms_t * pReqParms = ReqParms_getReq(pReq); /* if (!pReqParms) { if ((pReqParms = ReqParms_getBureauReq(pReq))) return HT_OK; pReqParms = &DefaultReqParms; } */ if (!pReqParms || pReqParms->reqState != reqState_NEW || !pReqParms->pCSUser) HTPrint("PICS: CSApp_headerGenerator prob\n"); #if 0 if (!pReqParms->pCSUser) { HTTRACE(PICS_TRACE, "PICS: No user selected\n"); return HT_OK; } if (CSUser_bureau(pReqParms->pCSUser)) /* handled by CSApp_netBefore */ return HT_OK; #endif url = HTAnchor_address((HTAnchor *) anchor); if ((translated = CSUser_acceptLabels(pReqParms->pCSUser, CSCompleteness_full))) { HTTRACE(PICS_TRACE, "PICS: Accept \"%s\".\n" _ translated); PUTBLOCK(translated, strlen(translated)); HT_FREE(translated); } HT_FREE(url); return HT_OK; } /*HTParserCallback CSApp_headerParser;*/ PRIVATE int CSApp_headerParser (HTRequest * pReq, HTResponse * response, char * token, char * value) { CSParse_t * pCSParse; ReqParms_t * pReqParms = ReqParms_getReq(pReq); if (!pReqParms) { pReqParms = &DefaultReqParms; DefaultReqParms.pReq = pReq; } if (!pReqParms->pCSUser) /* if there is no user */ return HT_OK; /* send the document on its way */ /* pReqParms->disposition = CSCheckLabel_parseAndValidateLabelStr(value, pReqParms->pCSUser); */ pCSParse = CSParse_newLabel(0, 0); CSParse_parseChunk(pCSParse, value, (int) strlen(value), 0); pReqParms->disposition = CSCheckLabel_checkLabelAndUser(CSParse_getLabel(pCSParse), pReqParms->pCSUser); pReqParms->pCSLabel = CSParse_getLabel(pCSParse); CSParse_delete(pCSParse); HTTRACE(PICS_TRACE, "PICS: PICS mime header \"%s\" got %d.\n" _ value _ pReqParms->disposition); return ReqParms_checkDisposition(pReqParms); } /* application functions */ PUBLIC BOOL CSApp_registerApp(CSDisposition_callback * pCallback, CSDisposition_criteria criteria, CSApp_userCallback * pUserCallback, void * pVoid) { HTList* conversions; PUserCallback = pUserCallback; /* set up DefaultReqParms */ DefaultReqParms.pCallback = pCallback; DefaultReqParms.criteria = criteria; DefaultReqParms.pVoid = pVoid; /* Tell HTMIME which headers we will deal with */ if (!ListWithHeaderGenerator) ListWithHeaderGenerator = HTList_new(); HTList_addObject(ListWithHeaderGenerator, (void *)CSApp_headerGenerator); /* HTHeader_addGenerator(CSApp_headerGenerator); */ HTNet_addBefore(CSApp_netBefore, NULL, NULL, 5); HTHeader_addParser(S_mimeLabel, FALSE, CSApp_headerParser); /* set converters so pics profiles may be read */ conversions = HTFormat_conversion(); #if 0 HTConversion_add(conversions, S_machRead, "*/*", CSParseMachRead, 1.0, 0.0, 0.0); HTConversion_add(conversions, S_label, "*/*", CSParseLabel, 1.0, 0.0, 0.0); #endif HTConversion_add(conversions, S_user, "*/*", CSParseUser, 1.0, 0.0, 0.0); HTBind_add("rat", S_machRead, "7bit", NULL, NULL, 1.0); HTBind_add("pcu", S_user, "7bit", NULL, NULL, 1.0); HTBind_add("lab", S_label, "7bit", NULL, NULL, 1.0); HTBind_add("url", S_URLList, "7bit", NULL, NULL, 1.0); if (!LoadedUsers) LoadedUsers = HTList_new(); return YES; } /* while ((pCSLoadedUser = (CSLoadedUser_t *) HTList_removeLastObject(LoadedUsers))) HTList_removeObject(pCSLoadedUser); return YES; */ PUBLIC BOOL CSApp_unregisterApp() { HTHeader_deleteGenerator(CSApp_headerGenerator); HTHeader_deleteParser(S_mimeLabel); return YES; } PUBLIC BOOL CSApp_registerReq(HTRequest* pReq, CSUser_t * pCSUser, CSDisposition_callback pCallback, CSDisposition_criteria criteria, void * pVoid) { ReqParms_t * pReqParms; if ((pReqParms = ReqParms_getReq(pReq))) { return NO; } if (!pReq || !pCSUser) return NO; pReqParms = ReqParms_new(pReq, pCSUser, pCallback, criteria, pVoid); if (!ReqParms) ReqParms = HTList_new(); HTList_addObject(ReqParms, (void *)pReqParms); return YES; } PUBLIC BOOL CSApp_unregisterReq(HTRequest* pReq) { ReqParms_t * pReqParms; if ((pReqParms = ReqParms_getReq(pReq)) == NULL) { return NO; } HTList_removeObject(ReqParms, (void *)pReqParms); ReqParms_free(pReqParms); return YES; } PUBLIC HTRequest * CSApp_originalRequest(HTRequest* pReq) { /* ReqParms_t * pReqParms; if ((pReqParms = ReqParms_getBureauReq(pReq)) == NULL) { return NULL; } return pReqParms->pReq; */ return pReq; } /* M I S C */ PUBLIC char * CSApp_libraryVersion(void) { return "1.1"; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSChkLab.c�������������������������������������������������������������������0100644�0000764�0000144�00000010534�06664352704�016107� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "WWWLib.h" #include "CSLUtils.h" #include "CSUser.h" #include "CSUserSt.h" #include "CSLL.h" #include "CSLLSt.h" extern void CSLabel_dump(CSLabel_t * pCSLabel); struct State_Parms_s { CSLabel_t * pCSLabel; CSUser_t * pCSUser; int matchedServices; int matchedRatings; CSError_t iteratorError; }; PRIVATE CSLabel_callback_t CSCheckLabel_checkRatings; PRIVATE CSError_t CSCheckLabel_checkRatings(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { UserServiceRating_t * pUserServiceRating = CSUser_getUserServiceRating(pParms->pCSUser); CSError_t ret; FVal_t fVal; fVal = CSLabel_ratingsIncludeRanges(pCSLabel, pUserServiceRating->ranges); ret = FVal_isZero(&fVal) ? CSError_OK : CSError_RATING_RANGE; if (ret != CSError_OK) HTTRACE(PICS_TRACE, "PICS: Access denial - service:\"%s\" label number:%d rating identifier:\"%s\"\n" _ CSLabel_getServiceName(pCSLabel) _ CSLabel_getLabelNumber(pCSLabel) _ CSLabel_getRatingName(pCSLabel)); return ret; } PRIVATE CSUser_callback_t CSCheckLabel_findLabelServiceRating; PRIVATE CSError_t CSCheckLabel_findLabelServiceRating(CSUser_t * pCSUser, State_Parms_t * pParms, const char * identifier, void * pVoid) { UserServiceRating_t * pUserServiceRating = CSUser_getUserServiceRating(pParms->pCSUser); CSError_t ret; if ((ret = CSLabel_iterateLabelRatings(pParms->pCSLabel, CSCheckLabel_checkRatings, pParms, SVal_value(&pUserServiceRating->identifier), 0)) != CSError_SERVICE_MISSING) pParms->matchedRatings++; else if (!BVal_value(&pUserServiceRating->missing_scale)) ret = CSError_OK; /* keep checking */ return ret; } PRIVATE CSLabel_callback_t CSCheckLabel_checkSingleLabel; PRIVATE CSError_t CSCheckLabel_checkSingleLabel(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { return CSUser_iterateServiceRatings(pParms->pCSUser, CSCheckLabel_findLabelServiceRating, pParms, 0, 0); } PRIVATE CSLabel_callback_t CSCheckLabel_checkLabel; PRIVATE CSError_t CSCheckLabel_checkLabel(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { return CSLabel_iterateSingleLabels(pParms->pCSLabel, CSCheckLabel_checkSingleLabel, pParms, 0, 0); } PRIVATE CSLabel_callback_t CSCheckLabel_checkService; PRIVATE CSError_t CSCheckLabel_checkService(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { return CSLabel_iterateLabels(pParms->pCSLabel, CSCheckLabel_checkLabel, pParms, 0, 0); } PRIVATE CSUser_callback_t CSCheckLabel_findLabelService; PRIVATE CSError_t CSCheckLabel_findLabelService(CSUser_t * pCSUser, State_Parms_t * pParms, const char * identifier, void * pVoid) { UserService_t * pUserService = CSUser_getUserService(pParms->pCSUser); CSError_t ret; if ((ret = CSLabel_iterateServices(pParms->pCSLabel, CSCheckLabel_checkService, pParms, SVal_value(&pUserService->rating_service), 0)) == CSError_SERVICE_MISSING) return BVal_value(&pUserService->missing_service) ? CSError_SERVICE_MISSING : CSError_OK; if (ret == CSError_OK) pParms->matchedServices++; return ret; } PUBLIC CSError_t CSCheckLabel_checkLabelAndUser(CSLabel_t * pCSLabel, CSUser_t * pCSUser) { CSError_t ret; State_Parms_t parms = {0, 0, 0, 0, CSError_OK}; parms.pCSLabel = pCSLabel; parms.pCSUser = pCSUser; parms.iteratorError = CSError_SERVICE_NONE; /* CSLabel_output(parms.pCSLabel, pKwik); */ if (PICS_TRACE) CSLabel_dump(parms.pCSLabel); /* HTList * tmp; tmp = CSLLData_getAllSingleLabels(parms.pCSLabel); HTList_delete(tmp); */ if ((ret = CSUser_iterateServices(parms.pCSUser, CSCheckLabel_findLabelService, &parms, 0, 0)) != CSError_OK) return ret; if (FVal_initialized(&CSUser_getCSUserData(pCSUser)->minimum_services) && parms.matchedServices < FVal_value(&CSUser_getCSUserData(pCSUser)-> minimum_services)) return CSError_SERVICE_NONE; return CSError_OK; } PUBLIC CSError_t CSCheckLabel_parseAndValidateLabelStr(const char * label, CSUser_t * pCSUser) { CSParse_t * pCSParse = CSParse_newLabel(0, 0); CSError_t ret; CSParse_parseChunk(pCSParse, label, (int) strlen(label), 0); ret = CSCheckLabel_checkLabelAndUser(CSParse_getLabel(pCSParse), pCSUser); CSParse_deleteLabel(pCSParse); return ret; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSKwik.c���������������������������������������������������������������������0100644�0000764�0000144�00000002270�06664352704�015666� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "WWWLib.h" /* very minimal HTStream - it needs no state as it does nothing but call TTYPrint */ struct _HTStream { const HTStreamClass * isa; }; PRIVATE int Kwik_put_block (HTStream * me, const char * b, int l) { char * space; if ((space = (char *) HT_CALLOC(l+1, sizeof(char))) == NULL) HT_OUTOFMEM("char"); memcpy(space, b, l); HTPrint(space); HT_FREE(space); return HT_OK; } PRIVATE int Kwik_put_character (HTStream * me, char c) { return Kwik_put_block(me, &c, 1); } PRIVATE int Kwik_put_string (HTStream * me, const char * s) { HTPrint(s); return HT_OK; } PRIVATE int Kwik_flush (HTStream * me) { return HT_OK; } PUBLIC int Kwik_free (HTStream * me) { HT_FREE(me); return HT_OK; } PRIVATE int Kwik_abort (HTStream * me, HTList * e) { HT_FREE(me); return HT_OK; } PRIVATE const HTStreamClass KwikClass = { "KwikClass", Kwik_flush, Kwik_free, Kwik_abort, Kwik_put_character, Kwik_put_string, Kwik_put_block }; PUBLIC HTStream * Kwik_new (void) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("Kwik"); me->isa = &KwikClass; return me; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLApp.html������������������������������������������������������������������0100644�0000764�0000144�00000013203�06530627166�016334� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>PICS library utilities</TITLE> </HEAD> <BODY> <H1> PICS library utilities </H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <PRE> #ifndef CSLAPP_H #define CSLAPP_H #include "<A HREF="../../Library/src/WWWCore.html">WWWCore.h</A>" #include "<A HREF="CSLUtils.html">CSLUtils.h</A>" </PRE> <H3> CSApp_error </H3> <P> Return codes for those functions which do not return a pointer. <PRE> /* typedef enum { CSApp_OK, CSCSApp_done, CSApp_memory, CSApp_file, CSApp_badHandle, CSApp_inconsistentParms, CSApp_badPassword, CSApp_internal, CSApp_allowed, CSApp_denied } CSApp_error; */ </PRE> <H3> CSDisposition_callback </H3> <P> - function to be called by the when Pics receives ratings for a requested document. The callback is called afer the PICS library has decided whether the user should be permitted access to the document. <P> CSDisposition_criteria - when to call the app <P> pReq - HTRequest which told libwww to load the document <P> disposition - CSApp_OK if user should see document, CSApp_denied otherwise <P> pVoid - void pointer passed to <A HREF="#CSApp_registerApp">CSApp_registerApp </A> or <A HREF="#CSApp_registerReq">CSApp_registerReq</A>. <PRE> typedef enum { CSApp_neverCall = 0, CSApp_callOnBad = 1, CSApp_callOnGood = 2 } CSDisposition_criteria; typedef CSError_t (CSDisposition_callback)(HTRequest* pReq, CSLabel_t * pCSLabel, CSUser_t * pCSUser, CSError_t disposition, void * pVoid); </PRE> <P> <A HREF="CSApp.c">CSApp.c</A> maintains a list of LoadedUsers. More than one may be loaded at a time as different requests may be associated with different users. <PRE> extern CSUser_t * CSLoadedUser_load(char * url, char * relatedName); extern BOOL CSLoadedUser_add(CSUser_t * pCSUser, char * url); extern BOOL CSLoadedUser_remove(CSUser_t * pCSUser); extern BOOL CSLoadedUser_find(char * name); extern BOOL CSLoadedUser_deleteAll (void); </PRE> <P> CSLoadedUser_enum - used to iterate through the loaded users <P> pCallback - application callback to call with each user <P> pVoid - passed through to callback <PRE> typedef CSError_t (CSLoadedUserCallback)(CSUser_t * pCSUser, int index, void * pVoid); extern int CSLoadedUser_enum(CSLoadedUserCallback * pCallback, void * pVoid); </PRE> <P> <A NAME="CSUserList"></A> <H2> CSUserList </H2> <P> stores a list of PICS users and the URLs to their descritpion files <A NAME="CSUserList_load"></A> <H3> CSUserList_load </H3> <PRE> extern BOOL CSUserList_load(char * url, char * relatedName); </PRE> <P> <A NAME="CSUserList_enum"></A> <H3> CSUserList_enum </H3> <P> used to iterate through the known users <P> pCallback - application callback to call with each user <P> pVoid - passed through to callback <P> username <P> url - where to find this user's profile <P> index <PRE> typedef CSError_t (CSUserListCallback)(char * username, char * url, int index, void * pVoid); extern int CSUserList_enum(CSUserListCallback * pCallback, void * pVoid); </PRE> <H1> Registering Users </H1> <PRE> extern BOOL CSApp_registerDefaultUserByName(char * user, char * password); extern CSUser_t * CSApp_registerUserByName(char * user, char * password); extern BOOL CSApp_setDefaultUser(CSUser_t * pCSUser); extern BOOL CSApp_checkUser(CSUser_t * pCSUser); extern BOOL CSApp_unregisterDefaultUser(void); extern BOOL CSApp_unregisterUser(CSUser_t * pCSUser); </PRE> <H1> application functions </H1> <P> <A NAME="CSApp_registerApp"></A> <H3> CSApp_registerApp </H3> <P> - register defaults for an application <P> pCallback - callback to tell app the disposition of header check <P> criteria - when the app wants the callback <P> pUserCallback - called when a new user is loaded. It returns: <UL> <LI> 1: load this user and set as default <LI> 0: load this user <LI> -1: get rid of it </UL> <P> pVoid - passed through to callback <P> CSApp_unregisterApp - unregister defaults and free associated memory <PRE> typedef int (CSApp_userCallback)(CSUser_t * pCSUser, void * pVoid); extern BOOL CSApp_registerApp(CSDisposition_callback * pCallback, CSDisposition_criteria criteria, CSApp_userCallback * pUserCallback, void * pVoid); extern BOOL CSApp_unregisterApp(); </PRE> <H3> CSApp_registerReq </H3> <P> - override defaults for a particular request. It is advisable to use this function, rather than relying on the defaults as it eliminates many problems associated with multiple clients using the same dynamic library. Use CSApp_UnregisterReq for every call to CSApp_RegisterReq. <P> pReq - pointer to request about to be sent. <P> rest - see parameters for CSApp_RegisterApp() <P> CSApp_UnregisterReq - free memory associated with call to CSApp_registerReq <PRE> extern BOOL CSApp_registerReq(HTRequest* pReq, CSUser_t * pCSUser, CSDisposition_callback callback, CSDisposition_criteria criteria, void * pVoid); extern BOOL CSApp_unregisterReq(HTRequest* pReq); extern HTRequest * CSApp_originalRequest(HTRequest* pReq); </PRE> <H1> MISC </H1> <P> CSApp_disposition - tell PICS if a request is allowd <PRE> extern BOOL CSApp_label(HTRequest * pReq, CSLabel_t * pCSLabel); </PRE> <P> CSApp_libraryVersion - get current version <P> CSParseMachRead, CSParseUser, CSParseLabel - HTConverters for parsing to these objects <P> CSLabel_output - spew canonical form of pCSLabel out to pStream <PRE> char * CSApp_libraryVersion(void); extern HTConverter CSParseMachRead; extern HTConverter CSParseUser; extern HTConverter CSParseLabel; extern int CSLabel_output(CSLabel_t * pCSLabel, HTStream * pStream); </PRE> <PRE> #endif /* CSLAPP_H */ </PRE> <P> End of Declaration </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLL.html��������������������������������������������������������������������0100644�0000764�0000144�00000010220�06532631106�015772� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Label parser for libpics</TITLE> </HEAD> <BODY> <H1> Label parser </H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module provides the interface to <A HREF="CSLabel.c">CSLabel.c</A>. Labels are parsed from strings (see <A HREF="CSParse.html">CSParse.html</A>). These labels may then be kept in a CSLabel_t structure for inspection by the application or compared to the values in a CSUser_t structure (see <A HREF="CSUser.html">CSUser.html</A>). <PRE> #ifndef CSLL_H #define CSLL_H </PRE> <P> <A NAME="CSLLTC"></A> <H3> State Change Enumeration </H3> <P> Call to the <A HREF="CSParse.html#TargetChangeCallback">TargetChangeCallback</A> will have one of the following values. <PRE> typedef enum { CSLLTC_LIST = 1, CSLLTC_SERVICE, CSLLTC_LABEL, CSLLTC_LABTREE, CSLLTC_SINGLE, CSLLTC_RATING, CSLLTC_RANGE, CSLLTC_AWKWARD, CSLLTC_NORAT, CSLLTC_SRVERR, CSLLTC_LABERR, CSLLTC_EXTEN, CSLLTC_EXTDATA, CSLLTC_COUNT } CSLLTC_t; </PRE> <H3> Data shell </H3> <P> All PICS label data is stored in a CSLLData_t <PRE> typedef struct CSLLData_s CSLLData_t; #define CSLabel_labelNumber(S) (S-&gt;currentLabelNumber) </PRE> <H3> TargetChangeCallback </H3> <P> As the label is parsed, it will call the assigned TargetChangeCallback as it passes from state to state. <PRE> typedef StateRet_t LabelTargetCallback_t(CSLabel_t * pCSLabel, CSParse_t * pCSParse, CSLLTC_t target, BOOL closed, void * pVoid); </PRE> <H3> ErrorHandler </H3> <P> All parsing error will be passed to the Apps LLErrorHandler for user display or automatic dismissal. <PRE> typedef StateRet_t LLErrorHandler_t(CSLabel_t * pCSLabel, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode); </PRE> <H3> Construction/Destruction </H3> <P> These methods allow the user to create and get access to both the label and the state. CSLabels may be cloned so that one saves state while another continues to iterate or parse. The states mus all be freed. Label data will only be freed after all the CSLabels that refer to it are deleted. <PRE> extern CSParse_t * CSParse_newLabel( LabelTargetCallback_t * pLabelTargetCallback, LLErrorHandler_t * pLLErrorHandler); extern BOOL CSParse_deleteLabel(CSParse_t *); extern CSLabel_t * CSParse_getLabel(CSParse_t * me); extern CSLabel_t * CSLabel_copy(CSLabel_t * old); extern void CSLabel_free(CSLabel_t * me); extern char * CSLabel_getServiceName(CSLabel_t * pCSLabel); extern int CSLabel_getLabelNumber(CSLabel_t * pCSLabel); extern char * CSLabel_getRatingName(CSLabel_t * pCSLabel); extern char * CSLabel_getRatingStr(CSLabel_t * pCSLabel); extern Range_t * CSLabel_getLabelRatingRange(CSLabel_t * pCSLabel); </PRE> <H3> Iterating methods </H3> <H3> Callback function </H3> <P> The Iterators are passed a callback function to be called for each matching element. For instance, when iterating through ranges, the callback function is called once for each range, or, if a match is requested, only for the matching range. <PRE> typedef CSError_t CSLabel_callback_t(CSLabel_t *, State_Parms_t *, const char *, void * pVoid); typedef CSError_t CSLabel_iterator_t(CSLabel_t *, CSLabel_callback_t *, State_Parms_t *, const char *, void * pVoid); </PRE> <H3> Iterators </H3> <PRE> extern CSLabel_iterator_t CSLabel_iterateServices; extern CSLabel_iterator_t CSLabel_iterateLabels; extern CSLabel_iterator_t CSLabel_iterateSingleLabels; extern CSLabel_iterator_t CSLabel_iterateLabelRatings; </PRE> <H3> Range Utilities </H3> <P> These funtions allow the application to test the value of a given user parameter against those in the label. <PRE> extern HTList * CSLLData_getAllSingleLabels(CSLabel_t * pCSLabel); extern FVal_t CSLabel_ratingsIncludeFVal(CSLabel_t * pCSLabel, FVal_t * userValue); extern FVal_t CSLabel_ratingsIncludeRange(CSLabel_t * pCSLabel, Range_t * pUserRange); extern FVal_t CSLabel_ratingsIncludeRanges(CSLabel_t * pCSLabel, HTList * userRanges); </PRE> <PRE> #endif /* CSLL_H */ </PRE> <P> End of Declaration </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLLOut.c��������������������������������������������������������������������0100644�0000764�0000144�00000012304�06163544341�015751� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "WWWLib.h" #include "CSLUtils.h" #include "CSLL.h" #include "CSLLSt.h" /* base of all streams */ struct _HTStream { const HTStreamClass * isa; /* ... */ }; PUBLIC BOOL ps(HTStream * pStream, const char * fmt, ...) { va_list list; char space[257]; va_start(list, fmt); vsprintf(space, fmt, list); va_end(list); return ((*pStream->isa->put_string)(pStream, space)); } struct State_Parms_s { CSLabel_t * pCSLabel; HTStream * pStream; }; #define OUTPUT_OPTION_TOKEN_BVAL(str, local) \ if (BVal_initialized(local))\ ps(pStream, str" %s ", BVal_value(local) ? "YES" : "NO"); #define OUTPUT_OPTION_TOKEN_FVAL(str, local) \ if (FVal_initialized(local))\ ps(pStream, str" %.1f ", FVal_value(local)); #define OUTPUT_OPTION_TOKEN_SVAL(str, local) \ if (SVal_initialized(local))\ ps(pStream, str" \"%s\" ", SVal_value(local)); #define OUTPUT_OPTION_TOKEN_DVAL(str, local) \ if (DVal_initialized(local))\ ps(pStream, str" \"%s\" ", DVal_value(local)); PRIVATE int LabelOptions_output(LabelOptions_t * me, HTStream * pStream) { HTList * comments; char * comment; OUTPUT_OPTION_TOKEN_DVAL("at", &me->at) OUTPUT_OPTION_TOKEN_SVAL("by", &me->by) OUTPUT_OPTION_TOKEN_SVAL("complete_label", &me->complete_label) OUTPUT_OPTION_TOKEN_SVAL("for", &me->fur) OUTPUT_OPTION_TOKEN_BVAL("generic", &me->generic) OUTPUT_OPTION_TOKEN_SVAL("MIC-md5", &me->MIC_md5) OUTPUT_OPTION_TOKEN_DVAL("on", &me->on) OUTPUT_OPTION_TOKEN_SVAL("signature-PKCS", &me->signature_PKCS) OUTPUT_OPTION_TOKEN_DVAL("until", &me->until) comments = me->comments; while ((comment = (char *)HTList_nextObject(comments))) ps(pStream, "comment \"%s\" ", comment); return HT_OK; } PRIVATE int Range_output(Range_t * pRange, HTStream * pStream) { ps(pStream, "%.1f", FVal_value(&pRange->min)); if (FVal_initialized(&pRange->max)) ps(pStream, ":%.1f", FVal_value(&pRange->max)); ps(pStream, " "); return HT_OK; } #define LPARENSTR "(" #define RPARENSTR ")" PRIVATE CSLabel_callback_t CSLLOut_outputRatings; PRIVATE CSError_t CSLLOut_outputRatings(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { Range_t * pRange; LabelRating_t * pLabelRating = CSLabel_getLabelRating(pCSLabel); ps(pParms->pStream, "%s ", SVal_value(&pLabelRating->identifier)); if (FVal_initialized(&pLabelRating->value)) ps(pParms->pStream, "%.1f ", FVal_value(&pLabelRating->value)); if (pLabelRating->ranges) { HTList * ranges = pLabelRating->ranges; ps(pParms->pStream, LPARENSTR); while ((pRange = (Range_t *) HTList_nextObject(ranges))) Range_output(pRange, pParms->pStream); ps(pParms->pStream, RPARENSTR); } return HT_OK; } PRIVATE CSLabel_callback_t CSLLOut_outputSingleLabel; PRIVATE CSError_t CSLLOut_outputSingleLabel(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { CSError_t ret; SingleLabel_t * pSingleLabel = CSLabel_getSingleLabel(pCSLabel); LabelOptions_output(pSingleLabel->pLabelOptions, pParms->pStream); ps(pParms->pStream, "r "LPARENSTR); ret = CSLabel_iterateLabelRatings(pParms->pCSLabel, CSLLOut_outputRatings, pParms, 0, 0); ps(pParms->pStream, RPARENSTR" "); return ret; } PRIVATE CSLabel_callback_t CSLLOut_outputLabel; PRIVATE CSError_t CSLLOut_outputLabel(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { CSError_t ret; Label_t * pLabel = CSLabel_getLabel(pCSLabel); if (pLabel->singleLabels) ps(pParms->pStream, LPARENSTR" "); ret = CSLabel_iterateSingleLabels(pParms->pCSLabel, CSLLOut_outputSingleLabel, pParms, 0, 0); if (pLabel->singleLabels) ps(pParms->pStream, RPARENSTR" "); return ret; } PRIVATE CSLabel_callback_t CSLLOut_outputService; PRIVATE CSError_t CSLLOut_outputService(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { CSError_t ret; ServiceInfo_t * pServiceInfo = CSLabel_getServiceInfo(pCSLabel); if (!SVal_initialized(&pServiceInfo->rating_service)) { ps(pParms->pStream, "%s ", "<service error>"); return HT_OK; } ps(pParms->pStream, "\"%s\" ", SVal_value(&pServiceInfo->rating_service)); LabelOptions_output(pServiceInfo->pLabelOptions, pParms->pStream); ps(pParms->pStream, "l "); ret = CSLabel_iterateLabels(pParms->pCSLabel, CSLLOut_outputLabel, pParms, 0, pVoid); return ret; } PUBLIC int CSLabel_output(CSLabel_t * pCSLabel, HTStream * pStream) { CSError_t ret; State_Parms_t parms; parms.pCSLabel = pCSLabel; parms.pStream = pStream; ps(parms.pStream, LPARENSTR"PICS-%.1f ", FVal_value(&CSLabel_getCSLLData(pCSLabel)->version)); ret = CSLabel_iterateServices(parms.pCSLabel, CSLLOut_outputService, &parms, 0, 0); ps(parms.pStream, RPARENSTR"\n"); return ret; } extern HTStream * Kwik_new (void); extern int Kwik_free (HTStream * me); PUBLIC void CSLabel_dump(CSLabel_t * pCSLabel) { HTStream * pKwik = Kwik_new(); CSLabel_t * pCSLabelCopy = CSLabel_copy(pCSLabel); CSLabel_output(pCSLabelCopy, pKwik); CSLabel_free(pCSLabelCopy); Kwik_free(pKwik); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLLSt.html������������������������������������������������������������������0100644�0000764�0000144�00000007063�06526451337�016325� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Label data internals</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 1-Feb-1996 --> <!-- Changed by: Eric Prud'hommeaux, 26-Mar-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>Label data internals</H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module defines the Label data structures read by <A HREF="CSParser.c">CSParser.c</A>. Applications will include this if they want direct access to the data (as opposed to using iterator methods). <P> The following data structures relate to the data encapsulated in a PICS Label. Each data type correlates to a time in the BNF for the label description. See <A HREF="http://www.w3.org/PICS/labels.html">PICS Labels spec</A> for more details. <PRE> #ifndef CSLLST_H #define CSLLST </PRE> <H2>Label Error</H2> combination of: <LI><B>label-error</B> <LI><B>service-error</B> <LI><B>service-info</B> 'no-ratings' <PRE> typedef struct { LabelErrorCode_t errorCode; HTList * explanations; /* HTList of (char *) */ } LabelError_t; </PRE> <H2>Extension Data</H2> called <B>data</B> in the BNF <PRE> typedef struct ExtensionData_s ExtensionData_t; struct ExtensionData_s { char * text; BOOL quoted; HTList * moreData; ExtensionData_t * pParentExtensionData; }; </PRE> <H2>Extension</H2> <B>option</B> 'extension' <PRE> typedef struct { BOOL mandatory; SVal_t url; HTList * extensionData; } Extension_t; </PRE> <H2>Label Options</H2> called <B>option</B> in the BNF <PRE> typedef struct LabelOptions_s LabelOptions_t; struct LabelOptions_s { DVal_t at; SVal_t by; SVal_t complete_label; BVal_t generic; SVal_t fur; /* for is a reserved word */ SVal_t MIC_md5; DVal_t on; SVal_t signature_PKCS; DVal_t until; HTList * comments; HTList * extensions; /* find service-level label options */ LabelOptions_t * pParentLabelOptions; }; </PRE> <H2>Rating</H2> called <B>rating</B> in the BNF <PRE> typedef struct { SVal_t identifier; FVal_t value; HTList * ranges; } LabelRating_t; </PRE> <H2>SingleLabel</H2> called <B>single-label</B> in the BNF <PRE> typedef struct { LabelOptions_t * pLabelOptions; HTList * labelRatings; } SingleLabel_t; </PRE> <H2>Label</H2> also called <B>label</B> <PRE> typedef struct { LabelError_t * pLabelError; HTList * singleLabels; SingleLabel_t * pSingleLabel; } Label_t; </PRE> <H2>ServiceInfo</H2> called <B>service-info</B> in the BNF <PRE> typedef struct { SVal_t rating_service; LabelOptions_t * pLabelOptions; LabelError_t * pLabelError; HTList * labels; } ServiceInfo_t; </PRE> <H2>CSLLData</H2> The whole shebang. <PRE> struct CSLLData_s { FVal_t version; LabelError_t * pLabelError; HTList * serviceInfos; /* some usefull flags */ BOOL complete; BOOL hasTree; /* so it can't make a list of labels */ int mandatoryExtensions; }; </PRE> --------------these need the above structures-------------- <PRE> extern CSLLData_t * CSLabel_getCSLLData(CSLabel_t * me); extern LabelError_t * CSLabel_getLabelError(CSLabel_t * pCSLabel); extern LabelOptions_t * CSLabel_getLabelOptions(CSLabel_t * pCSLabel); extern ServiceInfo_t * CSLabel_getServiceInfo(CSLabel_t * pCSLabel); extern Label_t * CSLabel_getLabel(CSLabel_t * pCSLabel); extern SingleLabel_t * CSLabel_getSingleLabel(CSLabel_t * pCSLabel); extern LabelRating_t * CSLabel_getLabelRating(CSLabel_t * pCSLabel); </PRE> <PRE> #endif /* CSLLST_H */ </PRE> End of Declaration </BODY> </HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLLURLs.c�������������������������������������������������������������������0100644�0000764�0000144�00000002735�06136006011�016021� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "WWWLib.h" #include "CSLUtils.h" #include "CSLL.h" #include "CSLLSt.h" /* needs definition of SingleLabel and LLData */ struct State_Parms_s { CSLabel_t * pCSLabel; HTList * pList; }; PRIVATE CSLabel_callback_t CSLLHTList_outputSingleLabel; PRIVATE CSError_t CSLLHTList_outputSingleLabel(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { SingleLabel_t * pSingleLabel = CSLabel_getSingleLabel(pCSLabel); HTList_appendObject(pParms->pList, (void *)pSingleLabel); return CSError_OK; } PRIVATE CSLabel_callback_t CSLLHTList_outputLabel; PRIVATE CSError_t CSLLHTList_outputLabel(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { return CSLabel_iterateSingleLabels(pParms->pCSLabel, CSLLHTList_outputSingleLabel, pParms, 0, pVoid); } PRIVATE CSLabel_callback_t CSLLHTList_outputService; PRIVATE CSError_t CSLLHTList_outputService(CSLabel_t * pCSLabel, State_Parms_t * pParms, const char * identifier, void * pVoid) { return CSLabel_iterateLabels(pParms->pCSLabel, CSLLHTList_outputLabel, pParms, 0, pVoid); } PUBLIC HTList * CSLLData_getAllSingleLabels(CSLabel_t * pCSLabel) { CSError_t err; State_Parms_t parms; if (CSLabel_getCSLLData(pCSLabel)->hasTree) return 0; parms.pCSLabel = pCSLabel; parms.pList = HTList_new(); err = CSLabel_iterateServices(parms.pCSLabel, CSLLHTList_outputService, &parms, 0, 0); /* !!! - pVoid */ return parms.pList; } �����������������������������������libwww/PICS-client/src/CSLUtils.html����������������������������������������������������������������0100644�0000764�0000144�00000024304�06171162767�016722� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>PICS library utilities</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 1-Feb-1996 --> <!-- Changed by: Eric Prud'hommeaux, 28-Mar-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>PICS library utilities</H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module defines the PICS library interface. <PRE> #ifndef CSLUTILS_H #define CSLUTILS_H </PRE> <PRE> #include "HTUtils.h" #include "HTList.h" </PRE> <H1>Primitave Data Structures</H1> <P> BVal_t, FVal_t, SVal_t, DVal_t - hold a boolean, float (not double), string, or date value (respectively). These data structures are designed so that they may be initialized to all 0s (and hence included directly within larger structures, rather than allocated and initialized individually). You must, however, call their clear method to deallocate any additional memory used to store the actual value once they have been initialized. The following methods are defined on all four data types ("X" should be either "B" "F" "S" or "D", XType is "BOOL" "float" "char *" or "char *", respectively): <UL> <LI>BOOL XVal_readVal(XVal_t, char *), etc. - convert the string to a value of the specified type. Returns TRUE on success, FALSE on failure. If successful, may allocate additional storage. <LI>BOOL XVal_initialized(XVal_t) - Returns TRUE if the value has been initialized (hence contains a legitimate value and may have additional storage allocated internally), FALSE otherwise. <LI>XType XVal_value(XVal_t) -- Returns the value stored in the object. <LI>void XVal_clear(XVal_t) -- Mark the object as uninitialized and release any memory associated with the value currently stored in the object. </UL> <P> <A NAME="BVal"><H2>BVal</H2></A> - Boolean value. <H3>definition</H3> <PRE> typedef struct { enum {BVal_UNINITIALIZED = 0,BVal_YES = 1, BVal_INITIALIZED = 2} state; } BVal_t; extern BOOL BVal_readVal(BVal_t * pBVal, const char * valueStr); extern BOOL BVal_initialized(const BVal_t * pBVal); extern BOOL BVal_value(const BVal_t * pBVal); extern void BVal_clear(BVal_t * pBVal); </PRE> <H3>additional methods</H3> <UL> <LI>void set - assign value </UL> <PRE> extern void BVal_set(BVal_t * pBVal, BOOL value); </PRE> <A NAME="FVal"><H2>FVal</H2></A> - Float value with negative and positive infinity values <H3>definition</H3> <PRE> typedef struct { float value; enum {FVal_UNINITIALIZED = 0, FVal_VALUE = 1, FVal_NEGATIVE_INF = 2, FVal_POSITIVE_INF = 3} stat; } FVal_t; extern BOOL FVal_readVal(FVal_t * pFVal, const char * valueStr); extern BOOL FVal_initialized(const FVal_t * pFVal); extern float FVal_value(const FVal_t * pFVal); extern void FVal_clear(FVal_t * pFVal); </PRE> <H3>additional methods</H3> <UL> <LI>void set - assign a float value <LI>void setInfinite - set to negative or positive infinity <LI>BOOL isZero - see if value is zero <LI>int isInfinite - -1 or 1 for negative or positive infinity <LI>BOOL nearerZero - see if check is nearer zero than check <LI>FVal_t FVal_minus - subtract small from big <LI>char * FVal_toStr - convert to allocated CString, caller must free </UL> <PRE> extern void FVal_set(FVal_t * pFVal, float value); extern void FVal_setInfinite(FVal_t * pFVal, BOOL negative); extern BOOL FVal_isZero(const FVal_t * pFVal); extern int FVal_isInfinite(const FVal_t * pFVal); extern BOOL FVal_nearerZero(const FVal_t * pRef, const FVal_t * pCheck); extern FVal_t FVal_minus(const FVal_t * pBig, const FVal_t * pSmall); extern char * FVal_toStr(FVal_t * pFVal); </PRE> <H3>initializers</H3> FVal intializers may be used when creating an FVal<BR> eg. FVal_t localFVal = FVal_NEGATIVE_INF; <PRE> #define FVal_NEW_UNINITIALIZED {(float) 0.0, FVal_UNINITIALIZED} #define FVal_NEW_NEGATIVE_INF {(float) 0.0, FVal_NEGATIVE_INF} #define FVal_NEW_POSITIVE_INF {(float) 0.0, FVal_POSITIVE_INF} #define FVal_NEW_ZERO {(float) 0.0, FVal_VALUE} </PRE> <A NAME="SVal"><H2>SVal</H2></A> - String value. <H3>definition</H3> <PRE> typedef struct { char * value; BOOL initialized; } SVal_t; extern BOOL SVal_readVal(SVal_t * pSVal, const char * valueStr); extern BOOL SVal_initialized(const SVal_t * pSVal); extern char * SVal_value(const SVal_t * pSVal); extern void SVal_clear(SVal_t * pSVal); </PRE> <A NAME="DVal"><H2>DVal</H2></A> - Date value. <H3>definition</H3> <PRE> typedef struct { char * value; /* keep the string around for debugging and output */ BOOL initialized; int year; int month; int day; int hour; int minute; int timeZoneHours; int timeZoneMinutes; } DVal_t; extern BOOL DVal_readVal(DVal_t * pDVal, const char * valueStr); extern BOOL DVal_initialized(const DVal_t * pDVal); extern char * DVal_value(const DVal_t * pDVal); extern void DVal_clear(DVal_t * pDVal); </PRE> <H3>additional methods</H3> <UL> <LI>int compare - -1 or 1 for a before or after b, 0 for equivilence </UL> <PRE> extern int DVal_compare(const DVal_t * a, const DVal_t * b); </PRE> <A NAME="Range"><H2>Range</H2></A> - Range of FVals. <H3>definition</H3> <PRE> typedef struct { FVal_t min; FVal_t max; } Range_t; </PRE> <H3>methods</H3> <UL> <LI>rangeToStr - print range to malloced string. This string must be freed by caller <LI>gap - find the difference between a and b </UL> <PRE> extern char * Range_toStr(Range_t * pRange); extern FVal_t Range_gap(Range_t * a, Range_t * b); </PRE> <H3>initializers</H3> <PRE> #define Range_NEW_UNINITIALIZED {FVal_NEW_UNINITIALIZED, \ FVal_NEW_UNINITIALIZED} </PRE> <H1>Parser</H1> <H2>CSParse_parseChunk</H2> CSParse_t - ephemeral parser data, the <A HREF="CSParse.html#CSParse">CSParse</A> structure is defined in <A HREF="CSParse.html">CSParse.html</A>.<BR> CSDoMore_t - tells caller whether parseChunk expects more or encountered an error <PRE> typedef struct CSParse_s CSParse_t; typedef enum {CSDoMore_more, CSDoMore_done, CSDoMore_error} CSDoMore_t; extern CSDoMore_t CSParse_parseChunk (CSParse_t * pCSParse, const char * ptr, int len, void * pVoid); </PRE> <H1>Parse callbacks</H1> During parsing, the parser makes callbacks to tell the caller that an error has been encountered or that the parser is reading into a new data structure. <A NAME="CSParseTC"><H2>CSParseTC</H2></A> The TC, or TargetChange, type is a way of itemizing the different targets in a parsable object. It is used in the <A HREF="#TargetChangeCallback">TargetChangeCallback</A> <PRE> typedef unsigned int CSParseTC_t; </PRE> <A NAME="StateRet"><H2>StateRet</H2></A> <PRE> typedef enum {StateRet_OK = 0, StateRet_DONE = 1, StateRet_WARN = 0x10, StateRet_WARN_NO_MATCH = 0x11, StateRet_WARN_BAD_PUNCT = 0x12, StateRet_ERROR = 0x100, StateRet_ERROR_BAD_CHAR = 0x101 } StateRet_t; </PRE> <A NAME="TargetChangeCallback"><H2>TargetChangeCallback</H2></A> These callbacks keep the caller abreast of what type of object the parser is currently reading. TargetChangeCallbacks are made whenever the parser starts or finishes reading one of these objects. The actual values of targetChange, and what objects they correlate to, can be found in the modules for the object being parsed. <UL> <LI><A HREF="../src/CSLL.html#CSLLTC">CSLL.html</A> for PICS labels. <LI><A HREF="../src/CSMR.html#CSMRTC">CSMR.html</A> for machine-readable service descriptions. <LI><A HREF="../src/CSUser.html#CSUserTC">CSUser.html</A> for PICS user profiles. </UL> Example: When reading a CSLabel, the callback will be called with pTargetObject = CSLLTC_SERVICE when reading a service, CSLLTC_LABEL when reading a label, etc. <PRE> typedef struct TargetObject_s TargetObject_t; typedef StateRet_t TargetChangeCallback_t(CSParse_t * pCSParse, TargetObject_t * pTargetObject, CSParseTC_t targetChange, BOOL closed, void * pVoid); </PRE> <A NAME="ParseErrorHandler"><H2>ParseErrorHandler</H2></A> <PRE> typedef StateRet_t ParseErrorHandler_t(CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode); </PRE> <A NAME="CSList_acceptLabels"><H2>CSList_acceptLabels</H2></A> get a malloced HTTP Protocol-Request string requesting PICS labels for all services in pServiceList <PRE> typedef enum {CSCompleteness_minimal, CSCompleteness_short, CSCompleteness_full, CSCompleteness_signed} CSCompleteness_t; extern char * CSList_acceptLabels(HTList * pServiceList, CSCompleteness_t completeness); </PRE> <A NAME="CSList_getLabels"><H2>CSList_getLabels</H2></A> get a malloced HTTP GET string requesting PICS labels for all services in pServiceList <PRE> typedef enum {CSOption_generic, CSOption_normal, CSOption_tree, CSOption_genericTree} CSOption_t; extern char * CSList_getLabels(HTList * pServiceList, CSOption_t option, CSCompleteness_t completeness); </PRE> <A NAME="CSList_postLabels"><H2>CSList_postLabels</H2></A> get a malloced HTTP GET string requesting PICS labels for all services in pServiceList <PRE> extern char * CSList_postLabels(HTList * pServiceList, char * url, CSOption_t option, CSCompleteness_t completeness); </PRE> <H2>individual parsers</H2> <A NAME="CSLabel"><H2>CSLabel</H2></A> PICS label list <PRE> typedef struct CSLabel_s CSLabel_t; </PRE> <A NAME="CSUser"><H2>CSUser</H2></A> PICS user profile <PRE> typedef struct CSUser_s CSUser_t; </PRE> <A NAME="CSMachRead"><H2>CSMachRead</H2></A> PICS machine readable system description <PRE> typedef struct CSMachRead_s CSMachRead_t; </PRE> for reading label error codes <PRE> typedef enum { labelError_NA = 0, labelError_NO_RATINGS, labelError_UNAVAILABLE, labelError_DENIED, labelError_NOT_LABELED, labelError_UNKNOWN } LabelErrorCode_t; </PRE> State_Parms - obsolete parameter exchange for iterators <PRE> typedef struct State_Parms_s State_Parms_t; typedef enum { CSError_OK = 0, CSError_YES = 0, CSError_NO = 1, CSError_BUREAU_NONE, CSError_RATING_VALUE, CSError_RATING_RANGE, CSError_RATING_MISSING, CSError_SINGLELABEL_MISSING, CSError_LABEL_MISSING, CSError_SERVICE_MISSING, CSError_CATEGORY_MISSING, CSError_ENUM_MISSING, CSError_BAD_PARAM, CSError_BAD_DATE, CSError_SERVICE_NONE, CSError_RATING_NONE, CSError_APP } CSError_t; </PRE> <PRE> #endif /* CSLUTILS_H */ </PRE> End of Declaration </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLabel.c��������������������������������������������������������������������0100644�0000764�0000144�00000201452�06523414477�016003� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "wwwsys.h" /*#include "HTUtils.h" */ #include "HTList.h" #include "HTString.h" #include "CSParse.h" #include "CSLL.h" #include "CSLLSt.h" #define GetCSLabel(A) ((A)->target.pCSLabel) #define SETNEXTSTATE(target, subState) \ pCSParse->pTargetObject = target; \ pCSParse->currentSubState = subState; /* C H A R A C T E R S E T V A L I D A T I O N */ /* The BNF for PICS labels describes the valid character ranges for each of * the label fields. Defining NO_CHAR_TEST will disable the tedious checking * of these ranges for a slight performance increase. */ #ifdef NO_CHAR_TEST #define charSetOK(A, B, C) #define CHECK_CAR_SET(A) #define SET_CHAR_SET(A) #else /* !NO_CHAR_TEST */ typedef enum {CharSet_ALPHAS = 1, CharSet_DIGITS = 2, CharSet_PLUSMINUS = 4, CharSet_FORSLASH = 8, CharSet_EXTENS = 0x10, CharSet_BASE64_EXTRAS = 0x20, CharSet_DATE_EXTRAS = 0x40, CharSet_URL_EXTRAS = 0x80, /* ------------------ BNF names are combinations of the above ------------------- */ CharSet_NUMBER = CharSet_DIGITS | CharSet_PLUSMINUS, CharSet_ALPHANUMPM = CharSet_ALPHAS | CharSet_DIGITS | CharSet_PLUSMINUS, CharSet_TRANSMIT_NAME = CharSet_ALPHANUMPM | CharSet_FORSLASH, CharSet_EXT_ALPHANUM = CharSet_ALPHANUMPM | CharSet_EXTENS, CharSet_BASE64 = CharSet_ALPHAS | CharSet_DIGITS | CharSet_BASE64_EXTRAS, CharSet_URL = CharSet_ALPHAS | CharSet_DIGITS | CharSet_URL_EXTRAS, CharSet_DATE = CharSet_DIGITS | CharSet_DATE_EXTRAS, CharSet_EXT_DATA = CharSet_DATE | CharSet_URL | CharSet_NUMBER | CharSet_EXT_ALPHANUM } CharSet_t; PRIVATE BOOL charSetOK(CSParse_t * pCSParse, char * checkMe, CharSet_t set); #define CHECK_CAR_SET(A) \ if (!charSetOK(pCSParse, token, A)) \ return StateRet_ERROR_BAD_CHAR; #define SET_CHAR_SET(A) pCSLabel->targetCharSet = A; #endif /* !NO_CHAR_TEST */ /* C S L L S t a t e */ /* This holds label list data and the methods to view it. All application * interface is intended to go through these methods. See User/Parsing.html */ struct CSLabel_s { CSLLData_t * pCSLLData; LabelError_t * pCurrentLabelError; LabelOptions_t * pCurrentLabelOptions; Extension_t * pCurrentExtension; ExtensionData_t * pCurrentExtensionData; ServiceInfo_t * pCurrentServiceInfo; Label_t * pCurrentLabel; int currentLabelNumber; HTList * pCurrentLabelTree; SingleLabel_t * pCurrentSingleLabel; LabelRating_t * pCurrentLabelRating; Range_t * pCurrentRange; #ifndef NO_CHAR_TEST CharSet_t targetCharSet; #endif LabelTargetCallback_t * pLabelTargetCallback; LLErrorHandler_t * pLLErrorHandler; }; /* forward references to parser functions */ PRIVATE TargetObject_t LabelList_targetObject; PRIVATE TargetObject_t ServiceInfo_targetObject; PRIVATE TargetObject_t ServiceNoRat_targetObject; PRIVATE TargetObject_t ServiceError_targetObject; PRIVATE TargetObject_t Label_targetObject; PRIVATE TargetObject_t LabelError_targetObject; PRIVATE TargetObject_t LabelTree_targetObject; PRIVATE TargetObject_t SingleLabel_targetObject; PRIVATE TargetObject_t LabelRating_targetObject; PRIVATE TargetObject_t LabelRatingRange_targetObject; PRIVATE TargetObject_t Extension_targetObject; PRIVATE TargetObject_t ExtensionData_targetObject; PRIVATE TargetObject_t Awkward_targetObject; PRIVATE Check_t hasToken; PRIVATE Check_t LabelList_getVersion; PRIVATE Check_t ServiceInfo_getServiceId; PRIVATE Check_t error_getExpl; PRIVATE Check_t getOption; PRIVATE Check_t getOptionValue; PRIVATE Check_t LabelRating_getId; PRIVATE Check_t LabelRating_getValue; PRIVATE Check_t LabelRatingRange_get; PRIVATE Check_t isQuoted; PRIVATE Check_t Extension_getURL; PRIVATE Check_t ExtensionData_getData; PRIVATE Open_t LabelList_open; PRIVATE Open_t ServiceInfo_open; PRIVATE Open_t error_open; PRIVATE Open_t Label_open; PRIVATE Open_t LabelTree_open; PRIVATE Open_t SingleLabel_open; PRIVATE Open_t LabelRating_open; PRIVATE Open_t LabelRatingRange_open; PRIVATE Open_t Awkward_open; PRIVATE Open_t Extension_open; PRIVATE Open_t ExtensionData_open; PRIVATE Close_t LabelList_close; PRIVATE Close_t ServiceInfo_close; PRIVATE Close_t error_close; PRIVATE Close_t Label_close; PRIVATE Close_t LabelTree_close; PRIVATE Close_t SingleLabel_close; PRIVATE Close_t LabelRating_close; PRIVATE Close_t LabelRatingRange_close; PRIVATE Close_t Awkward_close; PRIVATE Close_t Extension_close; PRIVATE Close_t ExtensionData_close; PRIVATE Destroy_t LabelList_destroy; PRIVATE Destroy_t ServiceInfo_destroy; PRIVATE Destroy_t Label_destroy; PRIVATE Destroy_t LabelTree_destroy; PRIVATE Destroy_t SingleLabel_destroy; PRIVATE Destroy_t LabelRating_destroy; PRIVATE Destroy_t LabelRatingRange_destroy; PRIVATE Destroy_t Awkward_destroy; PRIVATE Destroy_t error_destroy; PRIVATE Destroy_t Extension_destroy; PRIVATE Destroy_t ExtensionData_destroy; PRIVATE Prep_t ServiceInfo_clearOpts; PRIVATE Prep_t LabelRating_next; PRIVATE Prep_t Extension_mandatory; PRIVATE Prep_t Extension_next; PRIVATE Prep_t ExtensionData_next; PRIVATE Prep_t SingleLabel_doClose; PRIVATE Prep_t Label_doClose; PRIVATE TargetChangeCallback_t targetChangeCallback; PRIVATE ParseErrorHandler_t parseErrorHandler; /* CSParse_doc states */ /* L A B E L L I S T P A R S E R S T A T E S */ /* This contains all the states in the BNF for PICS labels. * See User/Parsing.html for details. */ PRIVATE StateToken_t LabelList_stateTokens[] = { /* A: fresh LabelList C: expect end */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &LabelList_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"get version", SubState_A, Punct_WHITE, &LabelList_getVersion, 0, 0, 0, &ServiceInfo_targetObject, SubState_N, 0, 0}, {"end of list", SubState_C, Punct_RPAREN, 0, 0, 0, 0, &LabelList_targetObject, SubState_A, Command_MATCHANY|Command_CLOSE, 0} }; PRIVATE TargetObject_t LabelList_targetObject = {"LabelList", &LabelList_open, &LabelList_close, &LabelList_destroy, LabelList_stateTokens, raysize(LabelList_stateTokens), CSLLTC_LIST}; PRIVATE StateToken_t ServiceInfo_stateTokens[] = { /* A: fresh ServiceInfo B: has service id C: needs option value D: call from Awkward or NoRat to close E: call from Awkward to re-enter F: call from Awkward to handle no-ratings error */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &ServiceInfo_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "error w/o id", SubState_A, Punct_LPAREN, 0, "error", 0, 0, &ServiceNoRat_targetObject, SubState_N, 0, 0}, { "service id", SubState_A, Punct_WHITE, &ServiceInfo_getServiceId, 0, 0, 0, &ServiceInfo_targetObject, SubState_B, 0, 0}, { "service error", SubState_B, Punct_LPAREN, 0, "error", 0, 0, &ServiceError_targetObject, SubState_N, 0, 0}, { "service option", SubState_B, Punct_WHITE, &getOption, 0, 0, 0, &ServiceInfo_targetObject, SubState_C, 0, 0}, {"service extension", SubState_B, Punct_LPAREN, 0, "extension", 0, 0, &Extension_targetObject, SubState_N, 0, 0}, { "label-mark close", SubState_B, Punct_RPAREN, 0, "l", "labels", 0, &LabelList_targetObject, SubState_C, Command_CLOSE|Command_CHAIN, 0}, { "label-mark", SubState_B, Punct_WHITE|Punct_LPAREN, 0, "l", "labels", 0, &Label_targetObject, SubState_N, Command_CHAIN, &ServiceInfo_clearOpts}, { "option value", SubState_C, Punct_WHITE, &getOptionValue, 0, 0, 0, &ServiceInfo_targetObject, SubState_B, 0, 0}, { "close", SubState_D, Punct_ALL, 0, 0, 0, 0, &LabelList_targetObject, SubState_C, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0}, { "re-enter", SubState_E, Punct_ALL, 0, 0, 0, 0, &ServiceInfo_targetObject, SubState_N, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0}, { "to no-rat", SubState_F, Punct_ALL, 0, 0, 0, 0, &ServiceInfo_targetObject, SubState_G, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0}, { "no-rat opener", SubState_G, Punct_ALL, 0, 0, 0, 0, &ServiceNoRat_targetObject, SubState_N, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0} }; PRIVATE TargetObject_t ServiceInfo_targetObject = {"ServiceInfo", ServiceInfo_open, &ServiceInfo_close, &ServiceInfo_destroy, ServiceInfo_stateTokens, raysize(ServiceInfo_stateTokens), CSLLTC_SERVICE}; PRIVATE StateToken_t Label_stateTokens[] = { /* A: fresh SingleLabel C: route to Awkward from LabelTree and LabelError D: from Awkward to LabelError */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &Label_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "single label mark", SubState_A, Punct_WHITE, 0, "l", "labels", 0, &Label_targetObject, SubState_A, 0, 0}, /* stick around */ { "tree label mark", SubState_A, Punct_LPAREN, 0, "l", "labels", 0, &LabelTree_targetObject, SubState_N, 0, 0}, { "start tree", SubState_A, Punct_LPAREN, 0, 0, 0, 0, &LabelTree_targetObject, SubState_N, 0, 0}, { "label error", SubState_A, Punct_LPAREN, 0, "error", 0, 0, &LabelError_targetObject, SubState_N, 0, 0}, {"SingleLabel option", SubState_A, Punct_WHITE, &getOption, 0, 0, 0, &SingleLabel_targetObject, SubState_N, Command_CHAIN, 0}, { "label extension", SubState_A, Punct_LPAREN, 0, "extension", 0, 0, &SingleLabel_targetObject, SubState_N, Command_CHAIN, 0}, { "ratings", SubState_A, Punct_LPAREN, 0, "r", "ratings", 0, &SingleLabel_targetObject, SubState_N, Command_CHAIN, 0}, { "to awkward", SubState_C, Punct_ALL, 0, 0, 0, 0, &Awkward_targetObject, SubState_A, Command_MATCHANY|Command_CLOSE, 0}, { "awkward to error", SubState_D, Punct_ALL, 0, 0, 0, 0, &LabelError_targetObject, SubState_N, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0} }; PRIVATE TargetObject_t Label_targetObject = {"Label", &Label_open, &Label_close, &Label_destroy, Label_stateTokens, raysize(Label_stateTokens), CSLLTC_LABEL}; PRIVATE StateToken_t LabelTree_stateTokens[] = { /* A: LabelTrees have no state */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &LabelTree_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "label error", SubState_A, Punct_LPAREN, 0, "error", 0, 0, &LabelError_targetObject, SubState_N, 0, 0}, {"SingleLabel option", SubState_A, Punct_WHITE, &getOption, 0, 0, 0, &SingleLabel_targetObject, SubState_N, Command_CHAIN, 0}, { "ratingword", SubState_A, Punct_LPAREN, 0, "r", "ratings", 0, &SingleLabel_targetObject, SubState_N, Command_CHAIN, 0}, { "end of tree", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &Label_targetObject, SubState_C, Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t LabelTree_targetObject = {"LabelTree", &LabelTree_open, &LabelTree_close, &LabelTree_destroy, LabelTree_stateTokens, raysize(LabelTree_stateTokens), CSLLTC_LABTREE}; PRIVATE StateToken_t SingleLabel_stateTokens[] = { /* A: fresh SingleLabel B: needs option value */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &SingleLabel_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"label extension", SubState_A, Punct_LPAREN, 0, "extension", 0, 0, &Extension_targetObject, SubState_N, 0, 0}, { "label option", SubState_A, Punct_WHITE, &getOption, 0, 0, 0, &SingleLabel_targetObject, SubState_B, 0, 0}, { "ratingword", SubState_A, Punct_LPAREN, 0, "r", "ratings", 0, &LabelRating_targetObject, SubState_N, 0, 0}, { "option value", SubState_B, Punct_WHITE, &getOptionValue, 0, 0, 0, &SingleLabel_targetObject, SubState_A, 0, 0} }; PRIVATE TargetObject_t SingleLabel_targetObject = {"SingleLabel", &SingleLabel_open, &SingleLabel_close, &SingleLabel_destroy, SingleLabel_stateTokens, raysize(SingleLabel_stateTokens), CSLLTC_SINGLE}; PRIVATE StateToken_t LabelRating_stateTokens[] = { /* A: looking for transmit name B: looking for value C: return from range (either creates a new rating or ends) D: close and re-open */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &LabelRating_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "id before value", SubState_A, Punct_WHITE, &LabelRating_getId, 0, 0, 0, &LabelRating_targetObject, SubState_B, 0, 0}, { "id before range", SubState_A, Punct_LPAREN, &LabelRating_getId, 0, 0, 0, &LabelRatingRange_targetObject, SubState_N, 0, 0}, { "value next", SubState_B, Punct_WHITE, &LabelRating_getValue, 0, 0, 0, &LabelRating_targetObject, SubState_D, 0, 0}, /* opener must close last rating first */ { "value close", SubState_B, Punct_RPAREN, &LabelRating_getValue, 0, 0, 0, 0, SubState_X, Command_CLOSE, &LabelRating_next}, { "close", SubState_C, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &LabelRating_next}, {"value after range", SubState_C, Punct_WHITE|Punct_LPAREN, &hasToken, 0, 0, 0, &LabelRating_targetObject, SubState_D, Command_CHAIN, 0}, /* opener must close last rating first */ { "re-enter", SubState_D, Punct_ALL, 0, 0, 0, 0, &LabelRating_targetObject, SubState_N, Command_MATCHANY|Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t LabelRating_targetObject = {"LabelRating", &LabelRating_open, &LabelRating_close, &LabelRating_destroy, LabelRating_stateTokens, raysize(LabelRating_stateTokens), CSLLTC_RATING}; PRIVATE StateToken_t LabelRatingRange_stateTokens[] = { { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &LabelRatingRange_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "range data", SubState_A, Punct_WHITE, &LabelRatingRange_get, 0, 0, 0, &LabelRatingRange_targetObject, SubState_A, 0, 0}, {"range close", SubState_A, Punct_RPAREN, &LabelRatingRange_get, 0, 0, 0, &LabelRating_targetObject, SubState_C, Command_CLOSE, 0} }; PRIVATE TargetObject_t LabelRatingRange_targetObject = {"LabelRatingRange", &LabelRatingRange_open, &LabelRatingRange_close, &LabelRatingRange_destroy, LabelRatingRange_stateTokens, raysize(LabelRatingRange_stateTokens), CSLLTC_RANGE}; /* Awkward assumes that the current Label has been closed. It decides whether to chain to LabelTree, Label, or ServiceInfo */ PRIVATE StateToken_t Awkward_stateTokens[] = { { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &Awkward_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "start tree", SubState_A, Punct_LPAREN, 0, 0, 0, 0, &LabelTree_targetObject, SubState_N, 0, 0}, { "label error", SubState_A, Punct_LPAREN, 0, "error", 0, 0, &Awkward_targetObject, SubState_B, 0, 0}, { "label option", SubState_A, Punct_WHITE, &getOption, 0, 0, 0, &Label_targetObject, SubState_N, Command_CHAIN, 0}, {"label extension", SubState_A, Punct_LPAREN, 0, "extension", 0, 0, &Label_targetObject, SubState_N, Command_CHAIN, 0}, { "rating", SubState_A, Punct_LPAREN, 0, "r", "ratings", 0, &Label_targetObject, SubState_N, Command_CHAIN, 0}, { "new service id", SubState_A, Punct_WHITE, &isQuoted, 0, 0, 0, &ServiceInfo_targetObject, SubState_E, Command_CHAIN, 0}, { "close", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &ServiceInfo_targetObject, SubState_D, Command_CHAIN, 0}, /* close of LabelList */ { "req-denied", SubState_B, Punct_WHITE, 0, "request-denied", 0, 0, &Label_targetObject, SubState_D, Command_CHAIN, 0}, { "req-denied close", SubState_B, Punct_RPAREN, 0, "request-denied", 0, 0, &Label_targetObject, SubState_D, Command_CHAIN, 0}, { "not-labeled", SubState_B, Punct_WHITE, 0, "not-labeled", 0, 0, &Label_targetObject, SubState_D, Command_CHAIN, 0}, {"not-labeled close", SubState_B, Punct_RPAREN, 0, "not-labeled", 0, 0, &Label_targetObject, SubState_D, Command_CHAIN, 0}, { "no-ratings", SubState_B, Punct_WHITE, 0, "no-ratings", 0, 0, &ServiceInfo_targetObject, SubState_F, Command_CHAIN, 0}, { "no-ratings close", SubState_B, Punct_RPAREN, 0, "no-ratings", 0, 0, &ServiceInfo_targetObject, SubState_F, Command_CHAIN, 0} }; PRIVATE TargetObject_t Awkward_targetObject = {"Awkward", &Awkward_open, &Awkward_close, &Awkward_destroy, Awkward_stateTokens, raysize(Awkward_stateTokens), 0}; /* error parsing states */ PRIVATE StateToken_t ServiceNoRat_stateTokens[] = { { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &ServiceNoRat_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "no-ratings", SubState_A, Punct_WHITE, 0, "no-ratings", 0, 0, &ServiceNoRat_targetObject, SubState_B, 0, 0}, { "no-ratings close", SubState_A, Punct_RPAREN, 0, "no-ratings", 0, 0, &ServiceInfo_targetObject, SubState_D, Command_CLOSE|Command_CHAIN, 0}, { "explanation", SubState_B, Punct_WHITE, &error_getExpl, 0, 0, 0, &ServiceNoRat_targetObject, SubState_B, 0, 0}, {"explanation close", SubState_B, Punct_RPAREN, &error_getExpl, 0, 0, 0, &ServiceInfo_targetObject, SubState_D, Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t ServiceNoRat_targetObject = {"ServiceNoRat", &error_open, &error_close, &error_destroy, ServiceNoRat_stateTokens, raysize(ServiceNoRat_stateTokens), CSLLTC_NORAT}; PRIVATE StateToken_t ServiceError_stateTokens[] = { { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &ServiceError_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "req-denied", SubState_A, Punct_WHITE, 0, "request-denied", 0, 0, &ServiceError_targetObject, SubState_B, 0, 0}, { "req-denied close", SubState_A, Punct_RPAREN, 0, "request-denied", 0, 0, &ServiceInfo_targetObject, SubState_D, Command_CLOSE|Command_CHAIN, 0}, { "service-unavail", SubState_A, Punct_WHITE, 0,"service-unavailable", 0, 0, &ServiceError_targetObject, SubState_B, 0, 0}, {"service-unavail close", SubState_A, Punct_RPAREN, 0,"service-unavailable", 0, 0, &ServiceInfo_targetObject, SubState_D, Command_CLOSE|Command_CHAIN, 0}, { "explanation", SubState_B, Punct_WHITE, &error_getExpl, 0, 0, 0, &ServiceError_targetObject, SubState_B, 0, 0}, { "explanation close", SubState_B, Punct_RPAREN, &error_getExpl, 0, 0, 0, &ServiceInfo_targetObject, SubState_D, Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t ServiceError_targetObject = {"ServiceError", &error_open, &error_close, &error_destroy, ServiceError_stateTokens, raysize(ServiceError_stateTokens), CSLLTC_SRVERR}; PRIVATE StateToken_t LabelError_stateTokens[] = { { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &LabelError_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "req-denied", SubState_A, Punct_WHITE, 0, "request-denied", 0, 0, &LabelError_targetObject, SubState_B, 0, 0}, { "req-denied close", SubState_A, Punct_RPAREN, 0, "request-denied", 0, 0, &Label_targetObject, SubState_C, Command_CLOSE|Command_CHAIN, 0}, { "not-labeled", SubState_A, Punct_WHITE, 0, "not-labeled", 0, 0, &LabelError_targetObject, SubState_B, 0, 0}, {"not-labeled close", SubState_A, Punct_RPAREN, 0, "not-labeled", 0, 0, &Label_targetObject, SubState_C, Command_CLOSE|Command_CHAIN, 0}, { "explanation", SubState_B, Punct_WHITE, &error_getExpl, 0, 0, 0, &LabelError_targetObject, SubState_B, 0, 0}, {"explanation close", SubState_B, Punct_RPAREN, &error_getExpl, 0, 0, 0, &Label_targetObject, SubState_C, Command_CLOSE|Command_CHAIN, 0} }; PRIVATE TargetObject_t LabelError_targetObject = {"LabelError", &error_open, &error_close, &error_destroy, LabelError_stateTokens, raysize(LabelError_stateTokens), CSLLTC_LABERR}; PRIVATE StateToken_t Extension_stateTokens[] = { /* A: looking for mand/opt B: looking for URL C: back from ExtensionData */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &Extension_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "mandatory", SubState_A, Punct_WHITE, 0, "mandatory", 0, 0, &Extension_targetObject, SubState_B, 0, &Extension_mandatory}, { "optional", SubState_A, Punct_WHITE, 0, "optional", 0, 0, &Extension_targetObject, SubState_B, 0, 0}, { "URL", SubState_B, Punct_WHITE, &Extension_getURL, 0, 0, 0, &ExtensionData_targetObject, SubState_N, 0, 0}, { "URL open", SubState_B, Punct_LPAREN, &Extension_getURL, 0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN|Command_NOTOKEN, 0}, { "URL close", SubState_B, Punct_RPAREN, &Extension_getURL, 0, 0, 0, 0, SubState_X, Command_CLOSE, &Extension_next}, { "more data", SubState_C, Punct_WHITE|Punct_LPAREN|Punct_RPAREN, &hasToken, 0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN, 0}, { "nest", SubState_C, Punct_LPAREN, 0, 0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN, 0}, { "close", SubState_C, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &Extension_next} }; PRIVATE TargetObject_t Extension_targetObject = {"Extension", &Extension_open, &Extension_close, &Extension_destroy, Extension_stateTokens, raysize(Extension_stateTokens), CSLLTC_EXTEN}; PRIVATE StateToken_t ExtensionData_stateTokens[] = { /* A: looking for data B: back from recursive ExtensionData (identical to Extension B) */ { "open", SubState_N, Punct_ALL, 0, 0, 0, 0, &ExtensionData_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "lparen", SubState_A, Punct_LPAREN, 0, 0, 0, 0, &ExtensionData_targetObject, SubState_N, 0, 0}, { "close", SubState_A, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &ExtensionData_next}, { "data", SubState_A, Punct_WHITE, &ExtensionData_getData, 0, 0, 0, 0, SubState_X, Command_CLOSE, &ExtensionData_next}, {"data punct", SubState_A, Punct_LPAREN|Punct_RPAREN, &ExtensionData_getData, 0, 0, 0, 0, SubState_X, Command_CLOSE|Command_CHAIN|Command_NOTOKEN, &ExtensionData_next}, { "more data", SubState_B, Punct_WHITE|Punct_LPAREN|Punct_RPAREN, &hasToken, 0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN, 0}, { "nest", SubState_B, Punct_LPAREN, 0, 0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN, 0}, { "close", SubState_B, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &ExtensionData_next} }; PRIVATE TargetObject_t ExtensionData_targetObject = {"ExtensionData", &ExtensionData_open, &ExtensionData_close, &ExtensionData_destroy, ExtensionData_stateTokens, raysize(ExtensionData_stateTokens), CSLLTC_EXTDATA}; /* CSParse_doc end */ /* S T A T E A S S O C I A T I O N - associate a CSLabel with the label list data The label list data is kept around until all states referencing it are destroyed */ typedef struct { CSLabel_t * pCSLabel; CSLLData_t * pCSLLData; } CSLabelAssoc_t; PRIVATE HTList * CSLabelAssocs = 0; PRIVATE void CSLabelAssoc_add(CSLabel_t * pCSLabel, CSLLData_t * pCSLLData) { CSLabelAssoc_t * pElement; if ((pElement = (CSLabelAssoc_t *) HT_CALLOC(1, sizeof(CSLabelAssoc_t))) == NULL) HT_OUTOFMEM("CSLabelAssoc_t"); pElement->pCSLabel = pCSLabel; pElement->pCSLLData = pCSLLData; if (!CSLabelAssocs) CSLabelAssocs = HTList_new(); HTList_appendObject(CSLabelAssocs, (void *)pElement); } PRIVATE CSLabelAssoc_t * CSLabelAssoc_findByData(CSLLData_t * pCSLLData) { HTList * assocs = CSLabelAssocs; CSLabelAssoc_t * pElement; while ((pElement = (CSLabelAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSLLData == pCSLLData) return pElement; return 0; } PRIVATE CSLabelAssoc_t * CSLabelAssoc_findByState(CSLabel_t * pCSLabel) { HTList * assocs = CSLabelAssocs; CSLabelAssoc_t * pElement; while ((pElement = (CSLabelAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSLabel == pCSLabel) return pElement; return 0; } PRIVATE void CSLabelAssoc_removeByState(CSLabel_t * pCSLabel) { CSLabelAssoc_t * pElement = CSLabelAssoc_findByState(pCSLabel); if (!pElement) return; HTList_removeObject(CSLabelAssocs, (void *)pElement); HT_FREE(pElement); } /* P R I V A T E C O N S T R U C T O R S / D E S T R U C T O R S */ /* These serve the public constructors */ PRIVATE LabelError_t * LabelError_new(void) { LabelError_t * me; if ((me = (LabelError_t *) HT_CALLOC(1, sizeof(LabelError_t))) == NULL) HT_OUTOFMEM("LabelError_t"); me->explanations = HTList_new(); return me; } PRIVATE void LabelError_free(LabelError_t * me) { char * explanation; if (!me) return; while ((explanation = (char *) HTList_removeLastObject(me->explanations))) HT_FREE(explanation); HT_FREE(me); } PRIVATE LabelOptions_t * LabelOptions_new(LabelOptions_t * pParentLabelOptions) { LabelOptions_t * me; if ((me = (LabelOptions_t *) HT_CALLOC(1, sizeof(LabelOptions_t))) == NULL) HT_OUTOFMEM("LabelOptions_t"); me->pParentLabelOptions = pParentLabelOptions; return me; } PRIVATE void LabelOptions_free(LabelOptions_t * me) { char * comment; DVal_clear(&me->at); SVal_clear(&me->by); SVal_clear(&me->complete_label); BVal_clear(&me->generic); SVal_clear(&me->fur); SVal_clear(&me->MIC_md5); DVal_clear(&me->on); SVal_clear(&me->signature_PKCS); DVal_clear(&me->until); while ((comment = HTList_removeLastObject(me->comments))) HT_FREE(comment); HT_FREE(me); } PRIVATE ExtensionData_t * ExtensionData_new(void) { ExtensionData_t * me; if ((me = (ExtensionData_t *) HT_CALLOC(1, sizeof(ExtensionData_t))) == NULL) HT_OUTOFMEM("ExtensionData_t"); return me; } PRIVATE void ExtensionData_free(ExtensionData_t * me) { ExtensionData_t * pExtensionData; while ((pExtensionData = (ExtensionData_t *) HTList_removeLastObject(me->moreData))) ExtensionData_free(pExtensionData); HT_FREE(me->text); HT_FREE(me); } PRIVATE Extension_t * Extension_new(void) { Extension_t * me; if ((me = (Extension_t *) HT_CALLOC(1, sizeof(Extension_t))) == NULL) HT_OUTOFMEM("Extension_t"); return me; } PRIVATE void Extension_free(Extension_t * me) { ExtensionData_t * pExtensionData; while ((pExtensionData = (ExtensionData_t *) HTList_removeLastObject(me->extensionData))) ExtensionData_free(pExtensionData); SVal_clear(&me->url); HT_FREE(me); } PRIVATE LabelRating_t * LabelRating_new(void) { LabelRating_t * me; if ((me = (LabelRating_t *) HT_CALLOC(1, sizeof(LabelRating_t))) == NULL) HT_OUTOFMEM("LabelRating_t"); /* don't initialize HTList me->ranges as it may be just a value */ return me; } PRIVATE void LabelRating_free(LabelRating_t * me) { Range_t * pRange; while ((pRange = (Range_t *) HTList_removeLastObject(me->ranges))) HT_FREE(pRange); SVal_clear(&me->identifier); HT_FREE(me); } PRIVATE SingleLabel_t * SingleLabel_new(LabelOptions_t * pLabelOptions, LabelOptions_t * pParentLabelOptions) { SingleLabel_t * me; if ((me = (SingleLabel_t *) HT_CALLOC(1, sizeof(SingleLabel_t))) == NULL) HT_OUTOFMEM("SingleLabel_t"); me->labelRatings = HTList_new(); me->pLabelOptions = pLabelOptions ? pLabelOptions : LabelOptions_new(pParentLabelOptions); return me; } PRIVATE void SingleLabel_free(SingleLabel_t * me) { LabelRating_t * pLabelRating; while ((pLabelRating = (LabelRating_t *) HTList_removeLastObject(me->labelRatings))) LabelRating_free(pLabelRating); LabelOptions_free(me->pLabelOptions); HT_FREE(me); } PRIVATE Label_t * Label_new(void) { Label_t * me; if ((me = (Label_t *) HT_CALLOC(1, sizeof(Label_t))) == NULL) HT_OUTOFMEM("Label_t"); /* dont initialize HTList me->singleLabels */ return me; } PRIVATE void Label_free(Label_t * me) { SingleLabel_t * pSingleLabel; if (me->pSingleLabel) SingleLabel_free(me->pSingleLabel); else /* if both of these are (erroneously) defined, mem checkers will pick it up */ while ((pSingleLabel = (SingleLabel_t *) HTList_removeLastObject(me->singleLabels))) SingleLabel_free(pSingleLabel); LabelError_free(me->pLabelError); HT_FREE(me); } PRIVATE ServiceInfo_t * ServiceInfo_new() { ServiceInfo_t * me; if ((me = (ServiceInfo_t *) HT_CALLOC(1, sizeof(ServiceInfo_t))) == NULL) HT_OUTOFMEM("ServiceInfo_t"); me->labels = HTList_new(); me->pLabelOptions = LabelOptions_new(0); return me; } PRIVATE void ServiceInfo_free(ServiceInfo_t * me) { Label_t * pLabel; while ((pLabel = (Label_t *) HTList_removeLastObject(me->labels))) Label_free(pLabel); SVal_clear(&me->rating_service); LabelOptions_free(me->pLabelOptions); LabelError_free(me->pLabelError); HT_FREE(me); } PRIVATE CSLLData_t * CSLLData_new(void) { CSLLData_t * me; if ((me = (CSLLData_t *) HT_CALLOC(1, sizeof(CSLLData_t))) == NULL) HT_OUTOFMEM("CSLLData_t"); me->serviceInfos = HTList_new(); return me; } PRIVATE void CSLLData_free(CSLLData_t * me) { ServiceInfo_t * pServiceInfo; if (CSLabelAssoc_findByData(me)) return; while ((pServiceInfo = (ServiceInfo_t *) HTList_removeLastObject(me->serviceInfos))) ServiceInfo_free(pServiceInfo); FVal_clear(&me->version); LabelError_free(me->pLabelError); HT_FREE(me); } /* P U B L I C C O N S T R U C T O R S / D E S T R U C T O R S */ PUBLIC CSLabel_t * CSLabel_new(CSLLData_t * pCSLLData, LabelTargetCallback_t * pLabelTargetCallback, LLErrorHandler_t * pLLErrorHandler) { CSLabel_t * me; if ((me = (CSLabel_t *) HT_CALLOC(1, sizeof(CSLabel_t))) == NULL) HT_OUTOFMEM("CSLabel_t"); me->pCSLLData = pCSLLData; me->pLabelTargetCallback = pLabelTargetCallback; me->pLLErrorHandler = pLLErrorHandler; CSLabelAssoc_add(me, pCSLLData); return me; } PUBLIC CSLabel_t * CSLabel_copy(CSLabel_t * old) { CSLabel_t * me = CSLabel_new(old->pCSLLData, old->pLabelTargetCallback, old->pLLErrorHandler); memcpy(me, old, sizeof(CSLabel_t)); return me; } PUBLIC void CSLabel_free(CSLabel_t * me) { CSLLData_t * pCSLLData = me->pCSLLData; CSLabelAssoc_removeByState(me); HT_FREE(me); CSLLData_free(pCSLLData); } PUBLIC CSLLData_t * CSLabel_getCSLLData(CSLabel_t * me) {return me->pCSLLData;} PUBLIC LabelError_t * CSLabel_getLabelError(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabelError;} PUBLIC LabelOptions_t * CSLabel_getLabelOptions(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabelOptions;} PUBLIC ServiceInfo_t * CSLabel_getServiceInfo(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentServiceInfo;} PUBLIC char * CSLabel_getServiceName(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentServiceInfo ? SVal_value(&pCSLabel->pCurrentServiceInfo->rating_service): 0;} PUBLIC Label_t * CSLabel_getLabel(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabel;} PUBLIC int CSLabel_getLabelNumber(CSLabel_t * pCSLabel) {return pCSLabel->currentLabelNumber;} PUBLIC SingleLabel_t * CSLabel_getSingleLabel(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentSingleLabel;} PUBLIC LabelRating_t * CSLabel_getLabelRating(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabelRating;} PUBLIC char * CSLabel_getRatingName(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentLabelRating ? SVal_value(&pCSLabel->pCurrentLabelRating->identifier): 0;} PUBLIC Range_t * CSLabel_getLabelRatingRange(CSLabel_t * pCSLabel) {return pCSLabel->pCurrentRange;} PUBLIC char * CSLabel_getRatingStr(CSLabel_t * pCSLabel) { HTChunk * pChunk; HTList * ranges; Range_t * curRange; FVal_t fVal; int count = 0; fVal = CSLabel_getLabelRating(pCSLabel)->value; if (FVal_initialized(&fVal)) return FVal_toStr(&fVal); pChunk = HTChunk_new(20); ranges = CSLabel_getLabelRating(pCSLabel)->ranges; while ((curRange = (Range_t *) HTList_nextObject(ranges))) { char * ptr; count++; ptr = Range_toStr(curRange); if (count > 1) HTChunk_puts(pChunk, " "); HTChunk_puts(pChunk, ptr); HT_FREE(ptr); } return HTChunk_toCString(pChunk); } PUBLIC CSParse_t * CSParse_newLabel(LabelTargetCallback_t * pLabelTargetCallback, LLErrorHandler_t * pLLErrorHandler) { CSParse_t * me = CSParse_new(); me->pParseContext->engineOf = &CSParse_targetParser; me->pParseContext->pTargetChangeCallback = &targetChangeCallback; me->pParseContext->pParseErrorHandler = &parseErrorHandler; me->target.pCSLabel = CSLabel_new(CSLLData_new(), pLabelTargetCallback, pLLErrorHandler); me->pTargetObject = &LabelList_targetObject; me->currentSubState = SubState_N; return me; } PUBLIC CSLabel_t * CSParse_getLabel(CSParse_t * me) { return (me->target.pCSLabel); } PUBLIC BOOL CSParse_deleteLabel(CSParse_t * pCSParse) { CSLabel_t * me = GetCSLabel(pCSParse); CSLLData_free(CSLabel_getCSLLData(me)); CSLabel_free(me); CSParse_delete(pCSParse); return YES; } /* D E F A U L T P A R S I N G H A N D L E R S */ PRIVATE StateRet_t targetChangeCallback(CSParse_t * pCSParse, TargetObject_t * pTargetObject, CSParseTC_t target, BOOL closed, void * pVoid) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pLabelTargetCallback) return (*pCSLabel->pLabelTargetCallback)(pCSLabel, pCSParse, (CSLLTC_t)target, closed, pVoid); return StateRet_OK; } PRIVATE StateRet_t parseErrorHandler(CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pLLErrorHandler) return (*pCSLabel->pLLErrorHandler)(pCSLabel, pCSParse, token, demark, errorCode); return errorCode; } /* CSParse_doc methods */ /* P A R S I N G S T A T E F U N C T I O N S */ #ifndef NO_CHAR_TEST PRIVATE BOOL charSetOK(CSParse_t * pCSParse, char * checkMe, CharSet_t set) { for (;*checkMe;checkMe++) { if (set & CharSet_ALPHAS && ((*checkMe >= 'A' && *checkMe <= 'Z') || (*checkMe >= 'a' && *checkMe <= 'z'))) continue; if (set & CharSet_DIGITS && ((*checkMe >= '0' && *checkMe <= '9') || *checkMe == '.')) continue; if (set & CharSet_PLUSMINUS && ((*checkMe == '+' || *checkMe == '-'))) continue; if (set & CharSet_FORSLASH && *checkMe == '/') continue; if (set & CharSet_BASE64_EXTRAS && ((*checkMe == '+' || *checkMe == '/' || *checkMe == '='))) continue; if (set & CharSet_DATE_EXTRAS && (*checkMe == '.' || *checkMe == ':' || *checkMe == '-' || *checkMe == 'T')) continue; /* RFC1738:2.1:"+.-","#%",";/"?:@=&" 2.2:"$-_.+!*'()," */ if (set & CharSet_URL_EXTRAS && (*checkMe == ':' || *checkMe == '?' || *checkMe == '#' || *checkMe == '%' || *checkMe == '/' || *checkMe == '.' || *checkMe == '-' || *checkMe == '_' || *checkMe == '~' || *checkMe == '\\')) continue; /* '.' | ' ' | ',' | ';' | ':' | '&' | '=' | '?' | '!' | '*' | '~' | '@' | '#' */ if (set & CharSet_EXTENS && (*checkMe == '.' || *checkMe == ' ' || *checkMe == ',' || *checkMe == ';' || *checkMe == ':' || *checkMe == '&' || *checkMe == '=' || *checkMe == '?' || *checkMe == '!' || *checkMe == '*' || *checkMe == '~' || *checkMe == '@' || *checkMe == '#' || *checkMe == '\''|| *checkMe == '/' || *checkMe == '-')) continue; pCSParse->pParseContext->pTokenError = checkMe; return FALSE; } return TRUE; } #endif /* !NO_CHAR_TEST */ PRIVATE StateRet_t isQuoted(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { ParseContext_t * pParseContext = pCSParse->pParseContext; if (!pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; return StateRet_OK; } PRIVATE StateRet_t hasToken(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { return token ? StateRet_OK : StateRet_WARN_NO_MATCH; } #if 0 PRIVATE StateRet_t clearToken(CSParse_t * pCSParse, char * token, char demark) { HTChunk_clear(pCSParse->token); return StateRet_OK; } #endif /* getOption - see if token matches an option. This may be called by: ServiceInfo: add option to existent options, pCurrentLabelError is set by ServiceInfo_open Label: kick off SingleLabel - SingleLabel_new(), pCurrentLabelError is 0 SingleLabel: add another option to existent options, pCurrentLabelError is set by SingleLabel_open */ #define CSOffsetOf(s,m) (size_t)&(((s *)0)->m) #define CHECK_OPTION_TOKEN_BVAL1(text, pointer) \ if (!strcasecomp(token, text)) {\ pCSParse->pParseContext->valTarget.pTargetBVal = pointer;\ pCSParse->pParseContext->valType = ValType_BVAL;\ break;\ } #define CHECK_OPTION_TOKEN_FVAL1(text, pointer) \ if (!strcasecomp(token, text)) {\ pCSParse->pParseContext->valTarget.pTargetFVal = pointer;\ pCSParse->pParseContext->valType = ValType_FVAL;\ break;\ } #define CHECK_OPTION_TOKEN_SVAL1(text, pointer, charSet) \ if (!strcasecomp(token, text)) {\ pCSParse->pParseContext->valTarget.pTargetSVal = pointer;\ pCSParse->pParseContext->valType = ValType_SVAL;\ SET_CHAR_SET(charSet)\ break;\ } #define CHECK_OPTION_TOKEN_DVAL1(text, pointer) \ if (!strcasecomp(token, text)) {\ pCSParse->pParseContext->valTarget.pTargetDVal = pointer;\ pCSParse->pParseContext->valType = ValType_DVAL;\ break;\ } PRIVATE StateRet_t getOption(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); LabelOptions_t * me = pCSLabel->pCurrentLabelOptions; if (!token) return StateRet_WARN_NO_MATCH; if (!me) me = pCSLabel->pCurrentLabelOptions = LabelOptions_new(pCSLabel->pCurrentServiceInfo->pLabelOptions); /* match token against legal options */ pCSParse->pParseContext->valType = ValType_NONE; /* use valType to flag a match */ do { /* fake do loop for break statements (to religiously avoid the goto) */ CHECK_OPTION_TOKEN_DVAL1("at", &me->at) CHECK_OPTION_TOKEN_SVAL1("by", &me->by, CharSet_EXT_ALPHANUM) CHECK_OPTION_TOKEN_SVAL1("complete_label", &me->complete_label, CharSet_URL) CHECK_OPTION_TOKEN_SVAL1("full", &me->complete_label, CharSet_URL) CHECK_OPTION_TOKEN_SVAL1("for", &me->fur, CharSet_URL) CHECK_OPTION_TOKEN_BVAL1("generic", &me->generic) CHECK_OPTION_TOKEN_BVAL1("gen", &me->generic) CHECK_OPTION_TOKEN_SVAL1("MIC-md5", &me->MIC_md5, CharSet_BASE64) CHECK_OPTION_TOKEN_SVAL1("md5", &me->MIC_md5, CharSet_BASE64) CHECK_OPTION_TOKEN_DVAL1("on", &me->on) CHECK_OPTION_TOKEN_SVAL1("signature-PKCS", &me->signature_PKCS, CharSet_BASE64) CHECK_OPTION_TOKEN_DVAL1("until", &me->until) CHECK_OPTION_TOKEN_DVAL1("exp", &me->until) if (!strcasecomp(token, "comment")) { pCSParse->pParseContext->valTarget.pTargetList = &me->comments; pCSParse->pParseContext->valType = ValType_COMMENT; break; } } while (0); if (pCSParse->pParseContext->valType == ValType_NONE) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; return StateRet_OK; } PRIVATE StateRet_t getOptionValue(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); switch (pCSParse->pParseContext->valType) { case ValType_BVAL: BVal_readVal(pCSParse->pParseContext->valTarget.pTargetBVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_FVAL: CHECK_CAR_SET(CharSet_NUMBER) FVal_readVal(pCSParse->pParseContext->valTarget.pTargetFVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_SVAL: CHECK_CAR_SET(pCSLabel->targetCharSet) SVal_readVal(pCSParse->pParseContext->valTarget.pTargetSVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_DVAL: CHECK_CAR_SET(CharSet_DATE) DVal_readVal(pCSParse->pParseContext->valTarget.pTargetDVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_COMMENT: CHECK_CAR_SET(CharSet_EXT_ALPHANUM) { char * ptr = 0; StrAllocCopy(ptr, token); HTList_appendObject(*pCSParse->pParseContext->valTarget.pTargetList, (void *)ptr); } break; default: break; } return StateRet_OK; } PRIVATE StateRet_t LabelList_open(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t LabelList_getVersion(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { static const char versionPrefix[] = "PICS-"; CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (!token) return StateRet_WARN_NO_MATCH; if (strncasecomp(token, versionPrefix, sizeof(versionPrefix)-1)) return StateRet_WARN_NO_MATCH; token += sizeof(versionPrefix)-1; CHECK_CAR_SET(CharSet_NUMBER) FVal_readVal(&pCSLabel->pCSLLData->version, token); return StateRet_OK; } PRIVATE StateRet_t LabelList_close(CSParse_t * pCSParse, char * token, char demark) { return StateRet_DONE; } PRIVATE void LabelList_destroy(CSParse_t * pCSParse) { } PRIVATE StateRet_t ServiceInfo_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentServiceInfo = ServiceInfo_new(); pCSLabel->currentLabelNumber = 0; HTList_appendObject(pCSLabel->pCSLLData->serviceInfos, (void *)pCSLabel->pCurrentServiceInfo); pCSLabel->pCurrentLabelOptions = pCSLabel->pCurrentServiceInfo->pLabelOptions; return StateRet_OK; } PRIVATE StateRet_t ServiceInfo_getServiceId(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_URL) SVal_readVal(&pCSLabel->pCurrentServiceInfo->rating_service, token); return StateRet_OK; } PRIVATE StateRet_t ServiceInfo_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentServiceInfo = 0; return StateRet_OK; } PRIVATE void ServiceInfo_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList_removeObject(pCSLabel->pCSLLData->serviceInfos, (void *)pCSLabel->pCurrentServiceInfo); ServiceInfo_free(pCSLabel->pCurrentServiceInfo); pCSLabel->pCurrentServiceInfo = 0; } PRIVATE StateRet_t ServiceInfo_clearOpts(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabelOptions = 0; /* needed to flag new SingleLabel started by option */ return StateRet_OK; } PRIVATE StateRet_t Label_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabel = Label_new(); pCSLabel->currentLabelNumber++; HTList_appendObject(pCSLabel->pCurrentServiceInfo->labels, (void*)pCSLabel->pCurrentLabel); return StateRet_OK; } PRIVATE StateRet_t Label_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabel = 0; return StateRet_OK; } PRIVATE void Label_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList_removeObject(pCSLabel->pCurrentServiceInfo->labels, pCSLabel->pCurrentLabel); Label_free(pCSLabel->pCurrentLabel); pCSLabel->pCurrentLabel = 0; } PRIVATE StateRet_t LabelTree_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCSLLData->hasTree = 1; pCSLabel->pCurrentLabelTree = pCSLabel->pCurrentLabel->singleLabels = HTList_new(); return StateRet_OK; } PRIVATE StateRet_t LabelTree_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); /* Label_close(pCSParse, token, demark); */ pCSLabel->pCurrentLabelTree = 0; return StateRet_OK; } PRIVATE void LabelTree_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); SingleLabel_t * pSingleLabel; while ((pSingleLabel = (SingleLabel_t *) HTList_removeLastObject(pCSLabel->pCurrentLabel->singleLabels))) SingleLabel_free(pSingleLabel); HTList_delete(pCSLabel->pCurrentLabel->singleLabels); pCSLabel->pCurrentLabel->singleLabels = 0; } PRIVATE StateRet_t SingleLabel_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentSingleLabel = SingleLabel_new(pCSLabel->pCurrentLabelOptions, pCSLabel->pCurrentServiceInfo->pLabelOptions); if (pCSLabel->pCurrentLabel->singleLabels) HTList_appendObject(pCSLabel->pCurrentLabel->singleLabels, (void*)pCSLabel->pCurrentSingleLabel); else pCSLabel->pCurrentLabel->pSingleLabel = pCSLabel->pCurrentSingleLabel; pCSLabel->pCurrentLabelOptions = pCSLabel->pCurrentSingleLabel->pLabelOptions; return StateRet_OK; } PRIVATE StateRet_t SingleLabel_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentSingleLabel = 0; return StateRet_OK; } PRIVATE void SingleLabel_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pCurrentLabel->pSingleLabel) pCSLabel->pCurrentLabel->pSingleLabel = 0; else HTList_removeObject(pCSLabel->pCurrentLabel->singleLabels, (void *)pCSLabel->pCurrentSingleLabel); SingleLabel_free(pCSLabel->pCurrentSingleLabel); pCSLabel->pCurrentSingleLabel = 0; } PRIVATE StateRet_t LabelRating_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (!pCSLabel->pCurrentSingleLabel) /* switched from label to rating on "r" rather than <option> */ SingleLabel_open(pCSParse, token, demark); pCSLabel->pCurrentLabelRating = LabelRating_new(); HTList_appendObject(pCSLabel->pCurrentSingleLabel->labelRatings, (void*)pCSLabel->pCurrentLabelRating); pCSLabel->pCurrentLabelOptions = 0; return StateRet_OK; } PRIVATE StateRet_t LabelRating_getId(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_TRANSMIT_NAME) SVal_readVal(&pCSLabel->pCurrentLabelRating->identifier, token); return StateRet_OK; } PRIVATE StateRet_t LabelRating_getValue(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; FVal_readVal(&pCSLabel->pCurrentLabelRating->value, token); return StateRet_OK; } PRIVATE StateRet_t LabelRating_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabelRating = 0; return StateRet_OK; } PRIVATE void LabelRating_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList_removeObject(pCSLabel->pCurrentSingleLabel->labelRatings, (void *)pCSLabel->pCurrentLabelRating); LabelRating_free(pCSLabel->pCurrentLabelRating); pCSLabel->pCurrentLabelRating = 0; } PRIVATE StateRet_t LabelRating_next(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); SingleLabel_doClose(pCSParse, token, demark); if (pCSLabel->pCurrentLabelTree) { SETNEXTSTATE(&LabelTree_targetObject, SubState_A); } else { Label_doClose(pCSParse, token, demark); SETNEXTSTATE(&Awkward_targetObject, SubState_A); } return StateRet_OK; } PRIVATE StateRet_t LabelRatingRange_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentRange = 0; pCSLabel->pCurrentLabelRating->ranges = HTList_new(); return StateRet_OK; } PRIVATE StateRet_t LabelRatingRange_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); LabelRating_t * pLabelRating = pCSLabel->pCurrentLabelRating; Range_t * me; char * ptr, * backPtr; if (!token) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; if ((me = (Range_t *) HT_CALLOC(1, sizeof(Range_t))) == NULL) HT_OUTOFMEM("Range_t"); /* me = Range_new(); */ HTList_appendObject(pLabelRating->ranges, (void *)me); backPtr = ptr = token; while (*ptr) { if (*ptr == ':') { *ptr = 0; ptr++; break; } ptr++; } FVal_readVal(&me->min, backPtr); if (*ptr) FVal_readVal(&me->max, ptr); return StateRet_OK; } PRIVATE StateRet_t LabelRatingRange_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentRange = 0; return StateRet_OK; } PRIVATE void LabelRatingRange_destroy(CSParse_t * pCSParse) { } PRIVATE StateRet_t Awkward_open(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t Awkward_close(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE void Awkward_destroy(CSParse_t * pCSParse) { } PRIVATE StateRet_t error_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabelError = LabelError_new(); if (pCSLabel->pCurrentLabel) pCSLabel->pCurrentLabel->pLabelError = pCSLabel->pCurrentLabelError; else pCSLabel->pCurrentServiceInfo->pLabelError = pCSLabel->pCurrentLabelError; return StateRet_OK; } PRIVATE StateRet_t error_getExpl(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; char * explaination = 0; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_EXT_ALPHANUM) StrAllocCopy(explaination, token); HTList_appendObject(pCSLabel->pCurrentLabelError->explanations, explaination); return StateRet_OK; } PRIVATE StateRet_t error_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentLabelError = 0; if (pCSLabel->pCurrentLabel) pCSLabel->pCurrentLabel->pLabelError = pCSLabel->pCurrentLabelError; else pCSLabel->pCurrentServiceInfo->pLabelError = pCSLabel->pCurrentLabelError; return StateRet_OK; } PRIVATE void error_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pCurrentLabel) pCSLabel->pCurrentLabel->pLabelError = 0; else pCSLabel->pCurrentServiceInfo->pLabelError = 0; LabelError_free(pCSLabel->pCurrentLabelError); } PRIVATE StateRet_t Extension_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); Extension_t * me = Extension_new(); pCSLabel->pCurrentExtension = me; if (!pCSLabel->pCurrentLabelOptions->extensions) pCSLabel->pCurrentLabelOptions->extensions = HTList_new(); HTList_appendObject(pCSLabel->pCurrentLabelOptions->extensions, (void *)me); return StateRet_OK; } PRIVATE StateRet_t Extension_mandatory(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentExtension->mandatory = 1; pCSLabel->pCSLLData->mandatoryExtensions++; return StateRet_OK; } PRIVATE StateRet_t Extension_getURL(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (!token || !pCSParse->pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_URL) SVal_readVal(&pCSLabel->pCurrentExtension->url, token); return StateRet_OK; } PRIVATE StateRet_t Extension_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentExtension = 0; return StateRet_OK; } PRIVATE void Extension_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList_removeObject(pCSLabel->pCurrentLabelOptions->extensions, (void *)pCSLabel->pCurrentExtension); if (!HTList_count(pCSLabel->pCurrentLabelOptions->extensions)) { HTList_delete(pCSLabel->pCurrentLabelOptions->extensions); pCSLabel->pCurrentLabelOptions->extensions = 0; } Extension_free(pCSLabel->pCurrentExtension); pCSLabel->pCurrentExtension = 0; } PRIVATE StateRet_t Extension_next(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); if (pCSLabel->pCurrentSingleLabel) { SETNEXTSTATE(&SingleLabel_targetObject, SubState_A); } else { SETNEXTSTATE(&ServiceInfo_targetObject, SubState_B); } return StateRet_OK; } PRIVATE StateRet_t ExtensionData_open(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); ExtensionData_t * me = ExtensionData_new(); me->pParentExtensionData = pCSLabel->pCurrentExtensionData; if(pCSLabel->pCurrentExtensionData) { if (!pCSLabel->pCurrentExtensionData->moreData) pCSLabel->pCurrentExtensionData->moreData = HTList_new(); HTList_appendObject(pCSLabel->pCurrentExtensionData->moreData, (void *)me); } else { if (!pCSLabel->pCurrentExtension->extensionData) pCSLabel->pCurrentExtension->extensionData = HTList_new(); HTList_appendObject(pCSLabel->pCurrentExtension->extensionData, (void *)me); } pCSLabel->pCurrentExtensionData = me; return StateRet_OK; } PRIVATE StateRet_t ExtensionData_next(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); /* close has already set recursed to the parentExtensionData */ if (pCSLabel->pCurrentExtensionData) { SETNEXTSTATE(&ExtensionData_targetObject, SubState_B); } else { SETNEXTSTATE(&Extension_targetObject, SubState_C); } return StateRet_OK; } PRIVATE StateRet_t ExtensionData_close(CSParse_t * pCSParse, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); pCSLabel->pCurrentExtensionData = pCSLabel->pCurrentExtensionData->pParentExtensionData; return StateRet_OK; } PRIVATE void ExtensionData_destroy(CSParse_t * pCSParse) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); HTList ** pHolderList = pCSLabel->pCurrentExtensionData->pParentExtensionData ? &pCSLabel->pCurrentExtensionData->pParentExtensionData->moreData : &pCSLabel->pCurrentExtension->extensionData; HTList_removeObject(*pHolderList, (void *)pCSLabel->pCurrentExtensionData); if (!HTList_count(*pHolderList)) { HTList_delete(*pHolderList); *pHolderList = 0; } ExtensionData_free(pCSLabel->pCurrentExtensionData); pCSLabel->pCurrentExtensionData = 0; } PRIVATE StateRet_t ExtensionData_getData(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSLabel_t * pCSLabel = GetCSLabel(pCSParse); ExtensionData_t * me; if (!token) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; CHECK_CAR_SET(CharSet_EXT_DATA) me = pCSLabel->pCurrentExtensionData; /* SVal_readVal(&me->text, token); */ StrAllocCopy(me->text, token); me->quoted = pCSParse->pParseContext->observedQuotes; return StateRet_OK; } #if 0 PRIVATE StateRet_t LabelRating_doClose(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &LabelRating_targetObject, CSLLTC_RATING, 2) == StateRet_ERROR) return NowIn_ERROR; return LabelRating_close(pCSParse, token, demark); } #endif PRIVATE StateRet_t SingleLabel_doClose(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &SingleLabel_targetObject, CSLLTC_SINGLE, 2, 0) == StateRet_ERROR) /* !!! - pVoid */ return NowIn_ERROR; return SingleLabel_close(pCSParse, token, demark); } #if 0 PRIVATE StateRet_t LabelTree_doClose(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &LabelTree_targetObject, CSLLTC_LABTREE, 2) == StateRet_ERROR) return NowIn_ERROR; return LabelTree_close(pCSParse, token, demark); } #endif PRIVATE StateRet_t Label_doClose(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &Label_targetObject, CSLLTC_LABEL, 2, 0) == StateRet_ERROR) /* !!! - pVoid */ return NowIn_ERROR; return Label_close(pCSParse, token, demark); } #if 0 PRIVATE StateRet_t ServiceInfo_doClose(CSParse_t * pCSParse, char * token, char demark) { if (pCSParse->pParseContext->pTargetChangeCallback && (*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, &ServiceInfo_targetObject, CSLLTC_SERVICE, 2) == StateRet_ERROR) return NowIn_ERROR; return ServiceInfo_close(pCSParse, token, demark); } #endif /* CSParse_doc end */ /* I T E R A T O R S - scan through the CSLabel data structures for <identifier> */ /* CSLabel_iterateServices - look for rating service in a label list (pCSLabel->pCurrentServiceInfo = (ServiceInfo_t *) HTList_nextObject(serviceInfos)) && SVal_initialized(&pCSLabel->pCurrentServiceInfo->rating_service)) if (!identifier || !strcasecomp(SVal_value(&pCSLabel->pCurrentServiceInfo->rating_service), identifier)) { ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; */ PUBLIC CSError_t CSLabel_iterateServices(CSLabel_t * pCSLabel, CSLabel_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * serviceInfos; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSLabel || !pCSLabel->pCSLLData->serviceInfos) return CSError_BAD_PARAM; serviceInfos = pCSLabel->pCSLLData->serviceInfos; while (ret == CSError_OK && (pCSLabel->pCurrentServiceInfo = (ServiceInfo_t *) HTList_nextObject(serviceInfos))) { if (identifier && (!SVal_initialized(&pCSLabel->pCurrentServiceInfo->rating_service) || strcasecomp(SVal_value(&pCSLabel->pCurrentServiceInfo->rating_service), identifier))) continue; ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } if (!count) return CSError_SERVICE_MISSING; return ret; } /* CSLabel_iterateLabels - look through all labels in current ServiceInfo */ PUBLIC CSError_t CSLabel_iterateLabels(CSLabel_t * pCSLabel, CSLabel_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * labels; CSError_t ret= CSError_OK; int count = 0; if (!pIteratorCB || !pCSLabel || !pCSLabel->pCurrentServiceInfo || !pCSLabel->pCurrentServiceInfo->labels) return CSError_BAD_PARAM; labels = pCSLabel->pCurrentServiceInfo->labels; while (ret == CSError_OK && (pCSLabel->pCurrentLabel = (Label_t *) HTList_nextObject(labels))) { ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } if (!count) return CSError_LABEL_MISSING; return ret; } /* CSLabel_iterateSingleLabels - look through all single labels in current label */ PUBLIC CSError_t CSLabel_iterateSingleLabels(CSLabel_t * pCSLabel, CSLabel_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { CSError_t ret= CSError_OK; int count = 0; if (!pIteratorCB || !pCSLabel || !pCSLabel->pCurrentServiceInfo || !pCSLabel->pCurrentServiceInfo->labels) return CSError_BAD_PARAM; { if (pCSLabel->pCurrentLabel->pSingleLabel) { pCSLabel->pCurrentSingleLabel = pCSLabel->pCurrentLabel->pSingleLabel; ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } else { HTList * singleLabels = pCSLabel->pCurrentLabel->singleLabels; while (ret == CSError_OK && (pCSLabel->pCurrentSingleLabel = (SingleLabel_t *) HTList_nextObject(singleLabels))) { ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } } } if (!count) return CSError_SINGLELABEL_MISSING; return ret; } /* CSLabel_iterateLabelRatings - look for rating in current single label */ PUBLIC CSError_t CSLabel_iterateLabelRatings(CSLabel_t * pCSLabel, CSLabel_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * labelRatings; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSLabel || !pCSLabel->pCurrentServiceInfo || !pCSLabel->pCurrentServiceInfo->labels || !pCSLabel->pCurrentLabel || !pCSLabel->pCurrentSingleLabel || !pCSLabel->pCurrentSingleLabel->labelRatings) return CSError_BAD_PARAM; labelRatings = pCSLabel->pCurrentSingleLabel->labelRatings; while (ret == CSError_OK && (pCSLabel->pCurrentLabelRating = (LabelRating_t *) HTList_nextObject(labelRatings))) if (!identifier || !strcasecomp(SVal_value(&pCSLabel->pCurrentLabelRating->identifier), identifier)) { ret = (*pIteratorCB)(pCSLabel, pParms, identifier, pVoid); count++; } if (!count) return CSError_RATING_MISSING; return ret; } /* R A N G E T E S T I N G - check that label values fall within acceptable user ranges */ /* CSLabel_ratingsIncludeFVal - find out if current rating in pCSLabel encompases userValue * return: int stating how far it is from fitting. */ PUBLIC FVal_t CSLabel_ratingsIncludeFVal(CSLabel_t * pCSLabel, FVal_t * userValue) { Range_t parm = Range_NEW_UNINITIALIZED; parm.min = *userValue; return CSLabel_ratingsIncludeRange(pCSLabel, &parm); } PUBLIC FVal_t CSLabel_ratingsIncludeRange(CSLabel_t * pCSLabel, Range_t * pUserRange) { HTList * labelRanges = pCSLabel->pCurrentLabelRating->ranges; FVal_t value = pCSLabel->pCurrentLabelRating->value; FVal_t ret; Range_t * pLabelRange; if (FVal_initialized(&value)) { Range_t parm = Range_NEW_UNINITIALIZED; parm.min = value; return Range_gap(&parm, pUserRange); } while ((pLabelRange = (Range_t *)HTList_nextObject(labelRanges))) { FVal_t thisOne = Range_gap(pLabelRange, pUserRange); if (FVal_isZero(&thisOne)) return thisOne; if (FVal_nearerZero(&thisOne, &ret)) ret = thisOne; } return ret; } PUBLIC FVal_t CSLabel_ratingsIncludeRanges(CSLabel_t * pCSLabel, HTList * userRanges) { FVal_t ret; Range_t * pUserRange; BOOL retInitialized = NO; while ((pUserRange = (Range_t *)HTList_nextObject(userRanges))) { FVal_t thisOne = CSLabel_ratingsIncludeRange(pCSLabel, pUserRange); if (FVal_isZero(&thisOne)) return thisOne; if (retInitialized) { if (FVal_nearerZero(&thisOne, &ret)) ret = thisOne; } else { ret = thisOne; retInitialized = YES; } } return ret; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSMR.html��������������������������������������������������������������������0100644�0000764�0000144�00000006557�06137362022�016022� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Machine-readable parser for libpics</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 1-Feb-1996 --> <!-- Changed by: Eric Prud'hommeaux, 22-Apr-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>Machine-readable parser</H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module provides the interface to <A HREF="CSMacRed.c">CSMacRed.c</A>. Labels are parsed from strings (see <A HREF="CSParse.html">CSParse.html</A>). These labels may then be kept in a CSMachRead_t structure for inspection by the application. <PRE> #ifndef CSMR_H #define CSMR_H </PRE> <A NAME="CSMRTC"><H3>State Change Enumeration</H3></A> Call to the <A HREF="CSParse.html#TargetChangeCallback">TargetChangeCallback</A> will have one of the following values. <PRE> typedef enum { CSMRTC_MACHREAD = 1, CSMRTC_VERSION, CSMRTC_SYSTEM, CSMRTC_SERVICE, CSMRTC_ICON, CSMSRC_NAME, CSMSRC_VALUE, CSMSRC_DESC, CSMRTC_DEF, CSMRTC_MIN, CSMRTC_MAX, CSMRTC_MULTI, CSMRTC_UNORD, CSMRTC_INT, CSMRTC_LABL, CSMRTC_CAT, CSMRTC_TRANS, CSMRTC_ENUM, CSMRTC_COUNT } CSMRTC_t; </PRE> <H3>Data shell</H3> All PICS Machine-readable data is stored in a CSMRData_t <PRE> typedef struct CSMachReadData_s CSMachReadData_t; </PRE> <H3>TargetChangeCallback</H3> As the label is parsed, it will call the assigned TargetChangeCallback as it passes from state to state. <PRE> typedef StateRet_t MachReadTargetCallback_t(CSMachRead_t * pCSMachRead, CSParse_t * pCSParse, CSMRTC_t target, BOOL closed, void * pVoid); </PRE> <H3>ErrorHandler</H3> All parsing error will be passed to the Apps MRErrorHandler for user display or automatic dismissal. <PRE> typedef StateRet_t MRErrorHandler_t(CSMachRead_t * pCSMachRead, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode); </PRE> <H3>Construction/Destruction</H3> These methods allow the user to create and get access to both the description and the state. CSMachReads may be cloned so that one saves state while another continues to iterate or parse. The states must all be freed. description data will only be freed after all the CSMachReads that refer to it are deleted. <PRE> extern CSParse_t * CSParse_newMachRead( MachReadTargetCallback_t * pMachReadTargetCallback, MRErrorHandler_t * pMRErrorHandler); extern BOOL CSParse_deleteMachRead(CSParse_t *); extern CSMachRead_t * CSParse_getMachRead(CSParse_t * me); extern char * CSMachRead_getSystem(CSMachRead_t * pCSMachRead); extern char * CSMachRead_getService(CSMachRead_t * pCSMachRead); </PRE> <H3>Iterating methods</H3> <H3>Callback function</H3> The Iterators are passed a callback function to be called for each matching element. For instance, when iterating through ranges, the callback function is called once for each range, or, if a match is requested, only for the matching range. <PRE> typedef CSError_t CSMachRead_callback_t(CSMachRead_t *, State_Parms_t *, const char *, void * pVoid); typedef CSError_t CSMachRead_iterator_t(CSMachRead_t *, CSMachRead_callback_t *, State_Parms_t *, const char *, void * pVoid); extern CSMachRead_iterator_t CSMachRead_iterateCategories; extern CSMachRead_iterator_t CSMachRead_iterateLabels; </PRE> <PRE> #endif /* CSMR_H */ </PRE> End of Declaration </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSMRSt.html������������������������������������������������������������������0100644�0000764�0000144�00000004047�06526451340�016325� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Machine-readable data internals</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 1-Feb-1996 --> <!-- Changed by: Eric Prud'hommeaux, 22-Apr-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>Machine-readable data internals</H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module defines the Machine-readable data structures read by <A HREF="CSParser.c">CSParser.c</A>. Applications will include this if they want direct access to the data (as opposed to using iterator methods). <P> The following data structures relate to the data encapsulated in a PICS description. Each data type correlates to a time in the BNF for the machine-readable description. See <A HREF="http://www.w3.org/PICS/labels.html">PICS Labels spec</A> for more details. <PRE> #ifndef CSMRST_H #define CSMRST_H </PRE> <PRE> typedef struct { SVal_t name; SVal_t description; FVal_t value; SVal_t icon; } MachRead_enum_t; typedef struct MachRead_category_s MachRead_category_t; struct MachRead_category_s { SVal_t transmit; SVal_t icon; SVal_t name; SVal_t description; FVal_t min; FVal_t max; BVal_t multi; BVal_t unord; BVal_t integer; BVal_t labeled; HTList * machRead_enums; HTList * machRead_categories; MachRead_category_t * pParent; }; struct CSMachReadData_s { FVal_t version; SVal_t system; SVal_t service; SVal_t icon; SVal_t name; SVal_t description; FVal_t min; FVal_t max; BVal_t multi; BVal_t unord; BVal_t integer; BVal_t labeled; HTList * machRead_categories; }; </PRE> --------------these belong in CSMR.html-------------- <PRE> extern CSMachReadData_t * CSMachRead_getCSMachReadData( CSMachRead_t * pCSMachRead); extern MachRead_category_t * CSMachRead_getMachReadCategory( CSMachRead_t * pCSMachRead); extern MachRead_enum_t * CSMachRead_getMachReadEnum( CSMachRead_t * pCSMachRead); </PRE> <PRE> #endif /* CSMRST_H */ </PRE> End of Declaration </BODY> </HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSMacRed.c�������������������������������������������������������������������0100644�0000764�0000144�00000117401�06523414500�016102� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "CSParse.h" #include "CSMR.h" #include "CSMRSt.h" #define GetCSMachRead(A) ((A)->target.pCSMachRead) #define SETNEXTSTATE(target, subState) \ pCSParse->pTargetObject = target; \ pCSParse->currentSubState = subState; struct CSMachRead_s { CSMachReadData_t * pCSMachReadData; MachRead_category_t * pCurrentMachRead_category; MachRead_enum_t * pCurrentMachRead_enum; BOOL inDefault; MachReadTargetCallback_t * pMachReadTargetCallback; MRErrorHandler_t * pMRErrorHandler; }; PRIVATE TargetObject_t MachRead_targetObject; PRIVATE TargetObject_t Version_targetObject; PRIVATE TargetObject_t System_targetObject; PRIVATE TargetObject_t Service_targetObject; PRIVATE TargetObject_t Icon_targetObject; PRIVATE TargetObject_t Name_targetObject; PRIVATE TargetObject_t Description_targetObject; PRIVATE TargetObject_t Default_targetObject; PRIVATE TargetObject_t Min_targetObject; PRIVATE TargetObject_t Max_targetObject; PRIVATE TargetObject_t Multi_targetObject; PRIVATE TargetObject_t Unord_targetObject; PRIVATE TargetObject_t Integer_targetObject; PRIVATE TargetObject_t Labeled_targetObject; PRIVATE TargetObject_t Category_targetObject; PRIVATE TargetObject_t Transmit_as_targetObject; PRIVATE TargetObject_t Enum_targetObject; PRIVATE TargetObject_t Value_targetObject; PRIVATE Prep_t postValueState; PRIVATE Prep_t Category_next; PRIVATE Prep_t Multi_setTrue; PRIVATE Prep_t Unord_setTrue; PRIVATE Prep_t Integer_setTrue; PRIVATE Prep_t Labeled_setTrue; PRIVATE Check_t Version_get; PRIVATE Check_t System_get; PRIVATE Check_t Service_get; PRIVATE Check_t Icon_get; PRIVATE Check_t Name_get; PRIVATE Check_t Description_get; PRIVATE Check_t Min_get; PRIVATE Check_t Max_get; PRIVATE Check_t Multi_get; PRIVATE Check_t Unord_get; PRIVATE Check_t Integer_get; PRIVATE Check_t Labeled_get; PRIVATE Check_t Transmit_as_get; PRIVATE Check_t Value_get; PRIVATE Open_t MachRead_open; PRIVATE Open_t Category_open; PRIVATE Open_t Default_open; PRIVATE Open_t Enum_open; PRIVATE Close_t MachRead_close; PRIVATE Close_t Category_close; PRIVATE Close_t Default_close; PRIVATE Close_t Enum_close; PRIVATE Destroy_t MachRead_destroy; PRIVATE Destroy_t Category_destroy; PRIVATE Destroy_t Default_destroy; PRIVATE Destroy_t Enum_destroy; PRIVATE TargetChangeCallback_t targetChangeCallback; PRIVATE ParseErrorHandler_t parseErrorHandler; /* CSParse_doc states */ /* M A C H I N E R E A D A B L E P A R S E R S T A T E S */ /* This contains all the states in the BNF for PICS service descriptions. * See User/Parsing.html for details. */ PRIVATE StateToken_t MachRead_stateTokens[] = { /* A: 1st we need a version B: then a system C: and a service D: an open paren E: could be icondef - category F: back from category so open or close paren G: open paren so it is a category */ { "enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &MachRead_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"need version set", SubState_A, Punct_LPAREN, 0, 0, 0, 0, &Version_targetObject, SubState_N, 0, 0}, { "need system set", SubState_B, Punct_LPAREN, 0, 0, 0, 0, &System_targetObject, SubState_N, 0, 0}, {"need service set", SubState_C, Punct_LPAREN, 0, 0, 0, 0, &Service_targetObject, SubState_N, 0, 0}, {"need options set", SubState_D, Punct_LPAREN, 0, 0, 0, 0, &MachRead_targetObject, SubState_E, 0, 0}, { "icon", SubState_E, Punct_WHITE, 0, "icon", 0, 0, &Icon_targetObject, SubState_N, 0, 0}, { "name", SubState_E, Punct_WHITE, 0, "name", 0, 0, &Name_targetObject, SubState_N, 0, 0}, { "description", SubState_E, Punct_WHITE, 0, "description", 0, 0, &Description_targetObject, SubState_N, 0, 0}, { "default", SubState_E, Punct_LPAREN, 0, "default", 0, 0, &Default_targetObject, SubState_N, 0, 0}, { "category", SubState_E, Punct_LPAREN, 0, "category", 0, 0, &Category_targetObject, SubState_N, 0, 0}, { "open category", SubState_F, Punct_LPAREN, 0, 0, 0, 0, &MachRead_targetObject, SubState_G, 0, 0}, { "end", SubState_F, Punct_RPAREN, 0, 0, 0, 0, &MachRead_targetObject, SubState_N, Command_CLOSE, 0}, { "category", SubState_G, Punct_LPAREN, 0, "category", 0, 0, &Category_targetObject, SubState_N, 0, 0} }; PRIVATE TargetObject_t MachRead_targetObject = {"MachRead", &MachRead_open, &MachRead_close, &MachRead_destroy, MachRead_stateTokens, raysize(MachRead_stateTokens), CSMRTC_MACHREAD}; PRIVATE StateToken_t Version_stateTokens[] = { /* A: fresh Version B: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Version_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "text", SubState_A, Punct_WHITE, 0, "PICS-version", 0, 0, &Version_targetObject, SubState_B, 0, 0}, {"value", SubState_B, Punct_RPAREN, &Version_get, 0, 0, 0, &MachRead_targetObject, SubState_B, Command_CLOSE, 0} }; PRIVATE TargetObject_t Version_targetObject = {"Version", 0, 0, 0, Version_stateTokens, raysize(Version_stateTokens), CSMRTC_VERSION}; PRIVATE StateToken_t System_stateTokens[] = { /* A: fresh System B: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &System_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "text", SubState_A, Punct_WHITE, 0, "rating-system", 0, 0, &System_targetObject, SubState_B, 0, 0}, {"value", SubState_B, Punct_RPAREN, &System_get, 0, 0, 0, &MachRead_targetObject, SubState_C, Command_CLOSE, 0} }; PRIVATE TargetObject_t System_targetObject = {"System", 0, 0, 0, System_stateTokens, raysize(System_stateTokens), CSMRTC_SYSTEM}; PRIVATE StateToken_t Service_stateTokens[] = { /* A: fresh Service B: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Service_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "text", SubState_A, Punct_WHITE, 0, "rating-service", 0, 0, &Service_targetObject, SubState_B, 0, 0}, {"value", SubState_B, Punct_RPAREN, &Service_get, 0, 0, 0, &MachRead_targetObject, SubState_D, Command_CLOSE, 0} }; PRIVATE TargetObject_t Service_targetObject = {"Service", 0, 0, 0, Service_stateTokens, raysize(Service_stateTokens), CSMRTC_SERVICE}; PRIVATE StateToken_t Icon_stateTokens[] = { /* A: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Icon_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value", SubState_A, Punct_RPAREN, &Icon_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Icon_targetObject = {"Icon", 0, 0, 0, Icon_stateTokens, raysize(Icon_stateTokens), CSMRTC_ICON}; PRIVATE StateToken_t Name_stateTokens[] = { /* A: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Name_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value", SubState_A, Punct_RPAREN, &Name_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Name_targetObject = {"Name", 0, 0, 0, Name_stateTokens, raysize(Name_stateTokens), CSMSRC_NAME}; PRIVATE StateToken_t Value_stateTokens[] = { /* A: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Value_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value", SubState_A, Punct_RPAREN, &Value_get, 0, 0, 0, &Enum_targetObject, SubState_G, Command_CLOSE, 0} }; PRIVATE TargetObject_t Value_targetObject = {"Name", 0, 0, 0, Value_stateTokens, raysize(Value_stateTokens), CSMSRC_VALUE}; PRIVATE StateToken_t Description_stateTokens[] = { /* A: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Description_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value", SubState_A, Punct_RPAREN, &Description_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Description_targetObject = {"Description", 0, 0, 0, Description_stateTokens, raysize(Description_stateTokens), CSMSRC_DESC}; PRIVATE StateToken_t Default_stateTokens[] = { /* A: need an open B: need option */ { "enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Default_targetObject, SubState_B, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "open", SubState_A, Punct_LPAREN, 0, 0, 0, 0, &Default_targetObject, SubState_B, 0, 0}, { "close", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &MachRead_targetObject, SubState_D, Command_CLOSE, 0}, { "min", SubState_B, Punct_WHITE, 0, "min", 0, 0, &Min_targetObject, SubState_N, 0, 0}, { "max", SubState_B, Punct_WHITE, 0, "max", 0, 0, &Max_targetObject, SubState_N, 0, 0}, { "multi", SubState_B, Punct_WHITE|Punct_RPAREN, 0, "multivalue", 0, 0, &Multi_targetObject, SubState_N, Command_CHAIN, 0}, { "unord", SubState_B, Punct_WHITE|Punct_RPAREN, 0, "unordered", 0, 0, &Unord_targetObject, SubState_N, Command_CHAIN, 0}, {"integer", SubState_B, Punct_WHITE|Punct_RPAREN, 0, "integer", 0, 0, &Integer_targetObject, SubState_N, Command_CHAIN, 0}, {"labeled", SubState_B, Punct_WHITE|Punct_RPAREN, 0, "label-only", 0, 0, &Labeled_targetObject, SubState_N, Command_CHAIN, 0}, }; PRIVATE TargetObject_t Default_targetObject = {"Default", &Default_open, &Default_close, &Default_destroy, Default_stateTokens, raysize(Default_stateTokens), CSMRTC_DEF}; PRIVATE StateToken_t Min_stateTokens[] = { /* A: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Min_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value", SubState_A, Punct_RPAREN, &Min_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Min_targetObject = {"Min", 0, 0, 0, Min_stateTokens, raysize(Min_stateTokens), CSMRTC_MIN}; PRIVATE StateToken_t Max_stateTokens[] = { /* A: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Max_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"value", SubState_A, Punct_RPAREN, &Max_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Max_targetObject = {"Max", 0, 0, 0, Max_stateTokens, raysize(Max_stateTokens), CSMRTC_MAX}; PRIVATE StateToken_t Multi_stateTokens[] = { /* A: chained text with optional close paren B: value */ { "enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Multi_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"binary", SubState_A, Punct_WHITE, 0, "multivalue", 0, 0, &Multi_targetObject, SubState_B, 0, 0}, { "unary", SubState_A, Punct_RPAREN, 0, "multivalue", 0, 0, 0, SubState_X, Command_CLOSE, &Multi_setTrue}, { "value", SubState_B, Punct_RPAREN, &Multi_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Multi_targetObject = {"Multi", 0, 0, 0, Multi_stateTokens, raysize(Multi_stateTokens), CSMRTC_MULTI}; PRIVATE StateToken_t Unord_stateTokens[] = { /* A: chained text with optional close paren B: value */ { "enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Unord_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"binary", SubState_A, Punct_WHITE, 0, "unordered", 0, 0, &Unord_targetObject, SubState_B, 0, 0}, { "unary", SubState_A, Punct_RPAREN, 0, "unordered", 0, 0, 0, SubState_X, Command_CLOSE, &Unord_setTrue}, { "value", SubState_B, Punct_RPAREN, &Unord_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Unord_targetObject = {"Unord", 0, 0, 0, Unord_stateTokens, raysize(Unord_stateTokens), CSMRTC_UNORD}; PRIVATE StateToken_t Integer_stateTokens[] = { /* A: chained text with optional close paren B: value */ { "enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Integer_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"binary", SubState_A, Punct_WHITE, 0, "integer", 0, 0, &Integer_targetObject, SubState_B, 0, 0}, { "unary", SubState_A, Punct_RPAREN, 0, "integer", 0, 0, 0, SubState_X, Command_CLOSE, &Integer_setTrue}, { "value", SubState_B, Punct_RPAREN, &Integer_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Integer_targetObject = {"Integer", 0, 0, 0, Integer_stateTokens, raysize(Integer_stateTokens), CSMRTC_INT}; PRIVATE StateToken_t Labeled_stateTokens[] = { /* A: chained text with optional close paren B: value */ { "enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Labeled_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"binary", SubState_A, Punct_WHITE, 0, "label-only", 0, 0, &Labeled_targetObject, SubState_B, 0, 0}, { "unary", SubState_A, Punct_RPAREN, 0, "label-only", 0, 0, 0, SubState_X, Command_CLOSE, &Labeled_setTrue}, { "value", SubState_B, Punct_RPAREN, &Labeled_get, 0, 0, 0, 0, SubState_X, Command_CLOSE, &postValueState} }; PRIVATE TargetObject_t Labeled_targetObject = {"Labeled", 0, 0, 0, Labeled_stateTokens, raysize(Labeled_stateTokens), CSMRTC_LABL}; PRIVATE StateToken_t Category_stateTokens[] = { /* A: 1st we need a transmit-as B: an open paren C: could be icondef - enum, category D: back from enum so need open or close E: enum or category F: back from category so need open or close G: category */ { "enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Transmit_as_targetObject, SubState_N, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, {"need options set", SubState_B, Punct_LPAREN, 0, 0, 0, 0, &Category_targetObject, SubState_C, 0, 0}, { "end", SubState_B, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &Category_next}, { "icon", SubState_C, Punct_WHITE, 0, "icon", 0, 0, &Icon_targetObject, SubState_N, 0, 0}, { "name", SubState_C, Punct_WHITE, 0, "name", 0, 0, &Name_targetObject, SubState_N, 0, 0}, { "description", SubState_C, Punct_WHITE, 0, "description", 0, 0, &Description_targetObject, SubState_N, 0, 0}, { "min", SubState_C, Punct_WHITE, 0, "min", 0, 0, &Min_targetObject, SubState_N, 0, 0}, { "max", SubState_C, Punct_WHITE, 0, "max", 0, 0, &Max_targetObject, SubState_N, 0, 0}, { "multi", SubState_C, Punct_WHITE|Punct_RPAREN, 0, "multivalue", 0, 0, &Multi_targetObject, SubState_N, Command_CHAIN, 0}, { "unord", SubState_C, Punct_WHITE|Punct_RPAREN, 0, "unordered", 0, 0, &Unord_targetObject, SubState_N, Command_CHAIN, 0}, {"integer", SubState_C, Punct_WHITE|Punct_RPAREN, 0, "integer", 0, 0, &Integer_targetObject, SubState_N, Command_CHAIN, 0}, {"labeled", SubState_C, Punct_WHITE|Punct_RPAREN, 0, "label-only", 0, 0, &Labeled_targetObject, SubState_N, Command_CHAIN, 0}, { "enum", SubState_C, Punct_LPAREN, 0, "label", 0, 0, &Enum_targetObject, SubState_N, 0, 0}, { "category", SubState_C, Punct_LPAREN, 0, "category", 0, 0, &Category_targetObject, SubState_N, 0, 0}, {"open enum or cat", SubState_D, Punct_LPAREN, 0, 0, 0, 0, &Category_targetObject, SubState_E, 0, 0}, { "end", SubState_D, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &Category_next}, { "enum", SubState_E, Punct_LPAREN, 0, "label", 0, 0, &Enum_targetObject, SubState_N, 0, 0}, { "category", SubState_E, Punct_LPAREN, 0, "category", 0, 0, &Category_targetObject, SubState_N, 0, 0}, { "end", SubState_E, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &Category_next}, { "open or cat", SubState_F, Punct_LPAREN, 0, 0, 0, 0, &Category_targetObject, SubState_G, 0, 0}, { "end", SubState_F, Punct_RPAREN, 0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &Category_next}, { "category", SubState_G, Punct_LPAREN, 0, "category", 0, 0, &Category_targetObject, SubState_N, 0, 0}, { "to MachRead", SubState_H, Punct_ALL, 0, 0, 0, 0, &MachRead_targetObject, SubState_F, Command_CHAIN, 0} }; PRIVATE TargetObject_t Category_targetObject = {"Category", &Category_open, &Category_close, &Category_destroy, Category_stateTokens, raysize(Category_stateTokens), CSMRTC_CAT}; PRIVATE StateToken_t Transmit_as_stateTokens[] = { /* A: fresh Service B: read value */ {"enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Transmit_as_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "text", SubState_A, Punct_WHITE, 0, "transmit-as", 0, 0, &Transmit_as_targetObject, SubState_B, 0, 0}, {"value", SubState_B, Punct_RPAREN, &Transmit_as_get, 0, 0, 0, &Category_targetObject, SubState_B, Command_CLOSE, 0} }; PRIVATE TargetObject_t Transmit_as_targetObject = {"Transmit_as", 0, 0, 0, Transmit_as_stateTokens, raysize(Transmit_as_stateTokens), CSMRTC_TRANS}; PRIVATE StateToken_t Enum_stateTokens[] = { /* A: 'label'( B: 'name' -> C C: ( D: 'description' -> E D: 'value' -> G E: ( F: 'value' -> G G: ( - expect an icon G: ) close H: 'icon' -> I I: close */ { "enter", SubState_N, Punct_ALL, 0, 0, 0, 0, &Enum_targetObject, SubState_B, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "name", SubState_B, Punct_WHITE, 0, "name", 0, 0, &Name_targetObject, SubState_N, 0, 0}, { "open", SubState_C, Punct_LPAREN, 0, 0, 0, 0, &Enum_targetObject, SubState_D, 0, 0}, {"description", SubState_D, Punct_WHITE, 0, "description", 0, 0, &Description_targetObject, SubState_N, 0, 0}, { "value", SubState_D, Punct_WHITE, 0, "value", 0, 0, &Value_targetObject, SubState_N, 0, 0}, { "open", SubState_E, Punct_LPAREN, 0, 0, 0, 0, &Enum_targetObject, SubState_F, 0, 0}, { "value", SubState_F, Punct_WHITE, 0, "value", 0, 0, &Value_targetObject, SubState_N, 0, 0}, { "open", SubState_G, Punct_LPAREN, 0, 0, 0, 0, &Enum_targetObject, SubState_H, 0, 0}, { "close", SubState_G, Punct_RPAREN, 0, 0, 0, 0, &Category_targetObject, SubState_B, Command_CLOSE, 0}, { "icon", SubState_H, Punct_WHITE, 0, "icon", 0, 0, &Icon_targetObject, SubState_N, 0, 0}, { "close", SubState_I, Punct_RPAREN, 0, 0, 0, 0, &Category_targetObject, SubState_B, Command_CLOSE, 0} }; PRIVATE TargetObject_t Enum_targetObject = {"Enum", &Enum_open, &Enum_close, &Enum_destroy, Enum_stateTokens, raysize(Enum_stateTokens), CSMRTC_ENUM}; /* CSParse_doc end */ /* S T A T E A S S O C I A T I O N - associate a CSMachRead with the label list data The label list data is kept around until all states referencing it are destroyed */ typedef struct { CSMachRead_t * pCSMachRead; CSMachReadData_t * pCSMachReadData; } CSMachReadAssoc_t; PRIVATE HTList * CSMachReadAssocs = 0; PRIVATE void CSMachReadAssoc_add(CSMachRead_t * pCSMachRead, CSMachReadData_t * pCSMachReadData) { CSMachReadAssoc_t * pElement; if ((pElement = (CSMachReadAssoc_t *) HT_CALLOC(1, sizeof(CSMachReadAssoc_t))) == NULL) HT_OUTOFMEM("CSMachReadAssoc_t"); pElement->pCSMachRead = pCSMachRead; pElement->pCSMachReadData = pCSMachReadData; if (!CSMachReadAssocs) CSMachReadAssocs = HTList_new(); HTList_appendObject(CSMachReadAssocs, (void *)pElement); } PRIVATE CSMachReadAssoc_t * CSMachReadAssoc_findByData(CSMachReadData_t * pCSMachReadData) { HTList * assocs = CSMachReadAssocs; CSMachReadAssoc_t * pElement; while ((pElement = (CSMachReadAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSMachReadData == pCSMachReadData) return pElement; return 0; } PRIVATE CSMachReadAssoc_t * CSMachReadAssoc_findByState(CSMachRead_t * pCSMachRead) { HTList * assocs = CSMachReadAssocs; CSMachReadAssoc_t * pElement; while ((pElement = (CSMachReadAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSMachRead == pCSMachRead) return pElement; return 0; } PRIVATE void CSMachReadAssoc_removeByState(CSMachRead_t * pCSMachRead) { CSMachReadAssoc_t * pElement = CSMachReadAssoc_findByState(pCSMachRead); if (!pElement) return; HTList_removeObject(CSMachReadAssocs, (void *)pElement); HT_FREE(pElement); } /* C O N S T R U C T O R S / D E S T R U C T O R S */ PRIVATE MachRead_enum_t * MachRead_enum_new(void) { MachRead_enum_t * me; if ((me = (MachRead_enum_t *) HT_CALLOC(1, sizeof(MachRead_enum_t))) == NULL) HT_OUTOFMEM("MachRead_enum_t"); return me; } PUBLIC void MachRead_enum_free(MachRead_enum_t * me) { SVal_clear(&me->name); SVal_clear(&me->description); FVal_clear(&me->value); SVal_clear(&me->icon); } PRIVATE MachRead_category_t * MachRead_category_new(void) { MachRead_category_t * me; if ((me = (MachRead_category_t *) HT_CALLOC(1, sizeof(MachRead_category_t))) == NULL) HT_OUTOFMEM("MachRead_category_t"); return me; } PUBLIC void MachRead_category_free(MachRead_category_t * me) { MachRead_enum_t * pMachRead_enum; MachRead_category_t * pMachRead_category; while ((pMachRead_enum = (MachRead_enum_t *) HTList_removeLastObject(me->machRead_enums))) MachRead_enum_free(pMachRead_enum); while ((pMachRead_category = (MachRead_category_t *) HTList_removeLastObject(me->machRead_categories))) MachRead_category_free(pMachRead_category); HTList_delete(me->machRead_enums); HTList_delete(me->machRead_categories); SVal_clear(&me->transmit); SVal_clear(&me->icon); SVal_clear(&me->name); SVal_clear(&me->description); FVal_clear(&me->min); FVal_clear(&me->max); BVal_clear(&me->multi); BVal_clear(&me->unord); BVal_clear(&me->integer); BVal_clear(&me->labeled); } PUBLIC CSMachReadData_t * CSMachReadData_new(void) { CSMachReadData_t * me; if ((me = (CSMachReadData_t *) HT_CALLOC(1, sizeof(CSMachReadData_t))) == NULL) HT_OUTOFMEM("CSMachReadData_t"); me->machRead_categories = HTList_new(); return me; } PUBLIC void CSMachReadData_free(CSMachReadData_t * me) { MachRead_category_t * pMachRead_category; if (CSMachReadAssoc_findByData(me)) return; while ((pMachRead_category = (MachRead_category_t *) HTList_removeLastObject(me->machRead_categories))) MachRead_category_free(pMachRead_category); FVal_clear(&me->version); SVal_clear(&me->system); SVal_clear(&me->service); SVal_clear(&me->icon); SVal_clear(&me->name); SVal_clear(&me->description); FVal_clear(&me->min); FVal_clear(&me->max); BVal_clear(&me->multi); BVal_clear(&me->unord); BVal_clear(&me->integer); BVal_clear(&me->labeled); HT_FREE(me); } PUBLIC CSMachRead_t * CSMachRead_new(CSMachReadData_t * pCSMachReadData, MachReadTargetCallback_t * pMachReadTargetCallback, MRErrorHandler_t * pMRErrorHandler) { CSMachRead_t * me; if ((me = (CSMachRead_t *) HT_CALLOC(1, sizeof(CSMachRead_t))) == NULL) HT_OUTOFMEM("CSMachRead_t"); me->pCSMachReadData = pCSMachReadData; me->pMachReadTargetCallback = pMachReadTargetCallback; me->pMRErrorHandler = pMRErrorHandler; CSMachReadAssoc_add(me, pCSMachReadData); return me; } PUBLIC CSMachRead_t * CSMachRead_copy(CSMachRead_t * old) { CSMachRead_t * me; me = CSMachRead_new(old->pCSMachReadData, old->pMachReadTargetCallback, old->pMRErrorHandler); memcpy(me, old, sizeof(CSMachRead_t)); return me; } PUBLIC void CSMachRead_free(CSMachRead_t * me) { CSMachReadData_t * pCSMachReadData = me->pCSMachReadData; CSMachReadAssoc_removeByState(me); HT_FREE(me); CSMachReadData_free(pCSMachReadData); } PUBLIC char * CSMachRead_getSystem(CSMachRead_t * me) {return SVal_value(&me->pCSMachReadData->system);} PUBLIC char * CSMachRead_getService(CSMachRead_t * me) {return SVal_value(&me->pCSMachReadData->service);} PUBLIC CSMachReadData_t * CSMachRead_getCSMachReadData(CSMachRead_t * me) {return me->pCSMachReadData;} PUBLIC MachRead_category_t * CSMachRead_getMachReadCategory(CSMachRead_t * pCSMachRead) {return pCSMachRead->pCurrentMachRead_category;} PUBLIC MachRead_enum_t * CSMachRead_getMachReadEnum(CSMachRead_t * pCSMachRead) {return pCSMachRead->pCurrentMachRead_enum;} PUBLIC CSParse_t * CSParse_newMachRead(MachReadTargetCallback_t * pMachReadTargetCallback, MRErrorHandler_t * pMRErrorHandler) { CSParse_t * me = CSParse_new(); me->pParseContext->engineOf = &CSParse_targetParser; me->pParseContext->pTargetChangeCallback = &targetChangeCallback; me->pParseContext->pParseErrorHandler = &parseErrorHandler; me->target.pCSMachRead = CSMachRead_new(CSMachReadData_new(), pMachReadTargetCallback, pMRErrorHandler); me->pTargetObject = &MachRead_targetObject; me->currentSubState = SubState_N; return me; } PUBLIC CSMachRead_t * CSParse_getMachRead(CSParse_t * me) { return (me->target.pCSMachRead); } PUBLIC BOOL CSParse_deleteMachRead(CSParse_t * pCSParse) { CSMachRead_t * me = GetCSMachRead(pCSParse); CSMachReadData_free(CSMachRead_getCSMachReadData(me)); CSMachRead_free(me); return YES; } /* P A R S I N G H A N D L E R S */ PRIVATE StateRet_t targetChangeCallback(CSParse_t * pCSParse, TargetObject_t * pTargetObject, CSParseTC_t target, BOOL closed, void * pVoid) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pMachReadTargetCallback) return (*pCSMachRead->pMachReadTargetCallback)(pCSMachRead, pCSParse, (CSMRTC_t)target, closed, pVoid); return StateRet_OK; } PRIVATE StateRet_t parseErrorHandler(CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pMRErrorHandler) return (*pCSMachRead->pMRErrorHandler)(pCSMachRead, pCSParse, token, demark, errorCode); return errorCode; } /* CSParse_doc methods */ /* P A R S I N G S T A T E F U N C T I O N S */ PRIVATE StateRet_t postValueState(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->inDefault) { SETNEXTSTATE(&Default_targetObject, SubState_A); return StateRet_OK; } if (pCSMachRead->pCurrentMachRead_enum) { if (SVal_initialized(&pCSMachRead->pCurrentMachRead_enum->icon)) { SETNEXTSTATE(&Enum_targetObject, SubState_I); return StateRet_OK; } if (FVal_initialized(&pCSMachRead->pCurrentMachRead_enum->value)) { SETNEXTSTATE(&Enum_targetObject, SubState_G); return StateRet_OK; } if (SVal_initialized(&pCSMachRead->pCurrentMachRead_enum->description)) { SETNEXTSTATE(&Enum_targetObject, SubState_E); return StateRet_OK; } SETNEXTSTATE(&Enum_targetObject, SubState_C); return StateRet_OK; } if (pCSMachRead->pCurrentMachRead_category){ SETNEXTSTATE(&Category_targetObject, SubState_B); return StateRet_OK; } SETNEXTSTATE(&MachRead_targetObject, SubState_D); return StateRet_OK; } PRIVATE StateRet_t Category_next(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { SETNEXTSTATE(&Category_targetObject, SubState_F); return StateRet_OK; } SETNEXTSTATE(&Category_targetObject, SubState_H); return StateRet_OK; } PRIVATE StateRet_t Multi_setTrue(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { BVal_set(&pCSMachRead->pCurrentMachRead_category->multi, YES); } else { BVal_set(&pCSMachRead->pCSMachReadData->multi, YES); } return postValueState(pCSParse, token, demark); } PRIVATE StateRet_t Unord_setTrue(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { BVal_set(&pCSMachRead->pCurrentMachRead_category->unord, YES); } else { BVal_set(&pCSMachRead->pCSMachReadData->unord, YES); } return postValueState(pCSParse, token, demark); } PRIVATE StateRet_t Integer_setTrue(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { BVal_set(&pCSMachRead->pCurrentMachRead_category->integer, YES); } else { BVal_set(&pCSMachRead->pCSMachReadData->integer, YES); } return postValueState(pCSParse, token, demark); } PRIVATE StateRet_t Labeled_setTrue(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) { BVal_set(&pCSMachRead->pCurrentMachRead_category->labeled, YES); } else { BVal_set(&pCSMachRead->pCSMachReadData->labeled, YES); } return postValueState(pCSParse, token, demark); } PRIVATE StateRet_t Version_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!FVal_readVal(&pCSMachRead->pCSMachReadData->version, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t System_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!SVal_readVal(&pCSMachRead->pCSMachReadData->system, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Service_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!SVal_readVal(&pCSMachRead->pCSMachReadData->service, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Icon_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { SVal_t * pSVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_enum) pSVal = &pCSMachRead->pCurrentMachRead_enum->icon; else if (pCSMachRead->pCurrentMachRead_category) pSVal = &pCSMachRead->pCurrentMachRead_category->icon; else pSVal = &pCSMachRead->pCSMachReadData->icon; if (!SVal_readVal(pSVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Name_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { SVal_t * pSVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_enum) pSVal = &pCSMachRead->pCurrentMachRead_enum->name; else if (pCSMachRead->pCurrentMachRead_category) pSVal = &pCSMachRead->pCurrentMachRead_category->name; else pSVal = &pCSMachRead->pCSMachReadData->name; if (!SVal_readVal(pSVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Description_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { SVal_t * pSVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_enum) pSVal = &pCSMachRead->pCurrentMachRead_enum->description; else if (pCSMachRead->pCurrentMachRead_category) pSVal = &pCSMachRead->pCurrentMachRead_category->description; else pSVal = &pCSMachRead->pCSMachReadData->description; if (!SVal_readVal(pSVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Min_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { FVal_t * pFVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pFVal = &pCSMachRead->pCurrentMachRead_category->min; else pFVal = &pCSMachRead->pCSMachReadData->min; if (!FVal_readVal(pFVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Max_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { FVal_t * pFVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pFVal = &pCSMachRead->pCurrentMachRead_category->max; else pFVal = &pCSMachRead->pCSMachReadData->max; if (!FVal_readVal(pFVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Multi_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { BVal_t * pBVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pBVal = &pCSMachRead->pCurrentMachRead_category->multi; else pBVal = &pCSMachRead->pCSMachReadData->multi; if (!BVal_readVal(pBVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Unord_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { BVal_t * pBVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pBVal = &pCSMachRead->pCurrentMachRead_category->unord; else pBVal = &pCSMachRead->pCSMachReadData->unord; if (!BVal_readVal(pBVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Integer_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { BVal_t * pBVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pBVal = &pCSMachRead->pCurrentMachRead_category->integer; else pBVal = &pCSMachRead->pCSMachReadData->integer; if (!BVal_readVal(pBVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Labeled_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { BVal_t * pBVal; CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (pCSMachRead->pCurrentMachRead_category) pBVal = &pCSMachRead->pCurrentMachRead_category->labeled; else pBVal = &pCSMachRead->pCSMachReadData->labeled; if (!BVal_readVal(pBVal, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Transmit_as_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!SVal_readVal(&pCSMachRead->pCurrentMachRead_category->transmit, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t Value_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); if (!FVal_readVal(&pCSMachRead->pCurrentMachRead_enum->value, token)) return StateRet_WARN_NO_MATCH; return StateRet_OK; } PRIVATE StateRet_t MachRead_open(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t Category_open(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); MachRead_category_t * me = MachRead_category_new(); me->pParent = pCSMachRead->pCurrentMachRead_category; pCSMachRead->pCurrentMachRead_category = me; HTList_appendObject(pCSMachRead->pCSMachReadData->machRead_categories, (void *)me); return StateRet_OK; } PRIVATE StateRet_t Default_open(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->inDefault = YES; return StateRet_OK; } PRIVATE StateRet_t Enum_open(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); MachRead_enum_t * me = MachRead_enum_new(); pCSMachRead->pCurrentMachRead_enum = me; if (!pCSMachRead->pCurrentMachRead_category->machRead_enums) pCSMachRead->pCurrentMachRead_category->machRead_enums = HTList_new(); HTList_appendObject(pCSMachRead->pCurrentMachRead_category->machRead_enums, (void *)me); return StateRet_OK; } PRIVATE StateRet_t MachRead_close(CSParse_t * pCSParse, char * token, char demark) { return StateRet_DONE; } PRIVATE StateRet_t Category_close(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->pCurrentMachRead_category = pCSMachRead->pCurrentMachRead_category->pParent; return StateRet_OK; } PRIVATE StateRet_t Default_close(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->inDefault = NO; return StateRet_OK; } PRIVATE StateRet_t Enum_close(CSParse_t * pCSParse, char * token, char demark) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->pCurrentMachRead_enum = 0; return StateRet_OK; } PRIVATE void MachRead_destroy(CSParse_t * pCSParse) { } PRIVATE void Category_destroy(CSParse_t * pCSParse) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); HTList_removeObject(pCSMachRead->pCurrentMachRead_category->machRead_categories, (void *)pCSMachRead->pCurrentMachRead_category); MachRead_category_free(pCSMachRead->pCurrentMachRead_category); pCSMachRead->pCurrentMachRead_category = 0; } PRIVATE void Default_destroy(CSParse_t * pCSParse) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); pCSMachRead->inDefault = NO; } PRIVATE void Enum_destroy(CSParse_t * pCSParse) { CSMachRead_t * pCSMachRead = GetCSMachRead(pCSParse); HTList_removeObject(pCSMachRead->pCurrentMachRead_category->machRead_enums, (void *)pCSMachRead->pCurrentMachRead_enum); if (!HTList_count(pCSMachRead->pCurrentMachRead_category->machRead_enums)) { HTList_delete(pCSMachRead->pCurrentMachRead_category->machRead_enums); pCSMachRead->pCurrentMachRead_category->machRead_enums = 0; } MachRead_enum_free(pCSMachRead->pCurrentMachRead_enum); pCSMachRead->pCurrentMachRead_enum = 0; } /* CSParse_doc end */ /* I T E R A T O R S - scan through the CSMachRead data structures for <identifier> */ PUBLIC CSError_t CSMachRead_iterateCategories(CSMachRead_t * pCSMachRead, CSMachRead_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * machRead_categories; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSMachRead || !pCSMachRead->pCSMachReadData->machRead_categories) return CSError_BAD_PARAM; machRead_categories = pCSMachRead->pCSMachReadData->machRead_categories; while ((pCSMachRead->pCurrentMachRead_category = (MachRead_category_t *) HTList_nextObject(machRead_categories)) && ret == CSError_OK) if (!identifier || !strcasecomp(SVal_value(&pCSMachRead->pCurrentMachRead_category->transmit), identifier)) { ret = (*pIteratorCB)(pCSMachRead, pParms, identifier, pVoid) != CSError_OK; count++; } if (!count) return CSError_CATEGORY_MISSING; return ret; } PUBLIC CSError_t CSMachRead_iterateEnums(CSMachRead_t * pCSMachRead, CSMachRead_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * machRead_enums; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSMachRead || !pCSMachRead->pCurrentMachRead_category || !pCSMachRead->pCurrentMachRead_category->machRead_enums) return CSError_BAD_PARAM; machRead_enums = pCSMachRead->pCurrentMachRead_category->machRead_enums; while ((pCSMachRead->pCurrentMachRead_enum = (MachRead_enum_t *) HTList_nextObject(machRead_enums)) && ret == CSError_OK) if (!identifier || !strcasecomp(SVal_value(&pCSMachRead->pCurrentMachRead_enum->name), identifier)) { ret = (*pIteratorCB)(pCSMachRead, pParms, identifier, pVoid) != CSError_OK; count++; } if (!count) return CSError_ENUM_MISSING; return ret; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSMem.c����������������������������������������������������������������������0100644�0000764�0000144�00000001634�06136006021�015460� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "WWWLib.h" #include "CSLUtils.h" #if 0 void * CSApp_calloc (size_t num, size_t size, const char * file, const char * func) { void * ret; if ((ret = HT_CALLOC(num, size)) == NULL) HT_OUTOFMEM(func); return ret; } void HT_FREE (void *memblock) { HT_FREE(memblock); } #endif /* return whether to give up the ghost */ #if 0 /* obsolete */ PUBLIC BOOL warn(CSParse_t * pCSParse, Message_t message, ...) { va_list list; char space[257]; char ** messages = CSParse_getMessages(); HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM); va_start(list, message); if (message >= message_COUNT) { HTTrace("Yous got a error\n"); return YES; } vsprintf(space, messages[message], list); va_end(list); HTTrace(space); HTTrace("\n"); if (cbf && (*cbf)(0, HT_A_CONFIRM, HT_MSG_RULES, NULL, NULL, NULL)) return NO; return YES; } #endif ����������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSParse.c��������������������������������������������������������������������0100644�0000764�0000144�00000050172�06664352704�016037� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CSParse.c ** PICS CONFIGURATION MANAGER FOR CLIENTS AND SERVERS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGHT. ** ** This module converts application/xpics streams (files or network) to PICS_ class data ** ** History: ** 4 Dec 95 EGP start ** 15 Feb 96 EGP alpha 1 ** ** BUGS: no code yet; doesn't actually do anything */ /* Library include files */ #include "wwwsys.h" #include "HTChunk.h" #include "HTString.h" #include "CSLUtils.h" #include "CSParse.h" PUBLIC int ParseDebug = 0; /* For use with LablPars and RatPars */ PUBLIC BOOL BVal_readVal(BVal_t * pBVal, const char * valueStr) { if (!strcasecomp(valueStr, "true") || !strcasecomp(valueStr, "yes")) pBVal->state = BVal_YES; else if (strcasecomp(valueStr, "false") && strcasecomp(valueStr, "no")) return NO;; pBVal->state |= BVal_INITIALIZED; return YES; } PUBLIC BOOL BVal_initialized(const BVal_t * pBVal) { return (pBVal->state & BVal_INITIALIZED); } PUBLIC BOOL BVal_value(const BVal_t * pBVal) { return ((pBVal->state & BVal_YES) ? 1 : 0); } PUBLIC void BVal_set(BVal_t * pBVal, BOOL value) { if (value) pBVal->state = BVal_YES; pBVal->state |= BVal_INITIALIZED; return; } PUBLIC void BVal_clear(BVal_t * pBVal) { if (pBVal) pBVal->state = BVal_UNINITIALIZED; return; } PUBLIC BOOL FVal_readVal(FVal_t * pFVal, const char * valueStr) { if (!strcasecomp(valueStr, "+INF")) { pFVal->stat = FVal_POSITIVE_INF; return YES; } if (!strcasecomp(valueStr, "-INF")) { pFVal->stat = FVal_NEGATIVE_INF; return YES; } pFVal->stat = FVal_VALUE; sscanf(valueStr, "%f", &pFVal->value); return YES; } PUBLIC BOOL FVal_initialized(const FVal_t * pFVal) { return (pFVal->stat != FVal_UNINITIALIZED); } PUBLIC float FVal_value(const FVal_t * pFVal) { return (pFVal->value); } /* C U T T I N G E D G E M A T H T E C H N O L O G Y H E R E */ PUBLIC BOOL FVal_lessThan(const FVal_t * pSmall, const FVal_t * pBig) { if (pBig->stat == FVal_UNINITIALIZED || pSmall->stat == FVal_UNINITIALIZED) return FALSE; if (pBig->stat == FVal_POSITIVE_INF || pSmall->stat == FVal_NEGATIVE_INF) { if (pSmall->stat == FVal_POSITIVE_INF) return FALSE; return TRUE; } if (pBig->stat == FVal_NEGATIVE_INF || pSmall->stat == FVal_POSITIVE_INF) { return FALSE; } return pSmall->value < pBig->value; } PUBLIC FVal_t FVal_minus(const FVal_t * pBig, const FVal_t * pSmall) { FVal_t ret = FVal_NEW_UNINITIALIZED; /* no notion of 2 time infinity so please keep your limits to a minimum */ if (pBig->stat == FVal_UNINITIALIZED || pSmall->stat == FVal_UNINITIALIZED) return ret; FVal_set(&ret, (float)0.0); if (pBig->stat == FVal_POSITIVE_INF || pSmall->stat == FVal_NEGATIVE_INF) { if (pSmall->stat != FVal_POSITIVE_INF) FVal_setInfinite(&ret, 0); return ret; } if (pBig->stat == FVal_NEGATIVE_INF || pSmall->stat == FVal_POSITIVE_INF) { if (pSmall->stat != FVal_NEGATIVE_INF) FVal_setInfinite(&ret, 0); return ret; } ret.value = pBig->value - pSmall->value; return (ret); } PUBLIC BOOL FVal_nearerZero(const FVal_t * pRef, const FVal_t * pCheck) { if (pRef->stat == FVal_UNINITIALIZED || pCheck->stat == FVal_UNINITIALIZED || pCheck->stat == FVal_POSITIVE_INF || pCheck->stat == FVal_NEGATIVE_INF) return NO; if (pRef->stat == FVal_POSITIVE_INF || pRef->stat == FVal_NEGATIVE_INF) return YES; if (pRef->value < 0.0) { if (pCheck->value < 0.0) return pCheck->value > pRef->value; return pCheck->value < -pRef->value; } if (pCheck->value < 0.0) return pCheck->value > -pRef->value; return pCheck->value < pRef->value; } PUBLIC BOOL FVal_isZero(const FVal_t * pFVal) { if (pFVal->stat == FVal_VALUE && pFVal->value == 0.0) return YES; return NO; } PUBLIC void FVal_set(FVal_t * pFVal, float value) { pFVal->value = value; pFVal->stat = FVal_VALUE; } PUBLIC void FVal_setInfinite(FVal_t * pFVal, BOOL negative) { pFVal->stat = negative ? FVal_NEGATIVE_INF : FVal_POSITIVE_INF; } PUBLIC int FVal_isInfinite(const FVal_t * pFVal) { return (pFVal->stat == FVal_POSITIVE_INF ? 1 : pFVal->stat == FVal_NEGATIVE_INF ? -1 : 0); } PUBLIC void FVal_clear(FVal_t * pFVal) { if (pFVal) pFVal->stat = FVal_UNINITIALIZED; return; } PUBLIC char * FVal_toStr(FVal_t * pFVal) { char * ptr; if ((ptr = (char *)HT_MALLOC(40)) == NULL) HT_OUTOFMEM("FVal buffer"); sprintf(ptr, "%.1f", FVal_value(pFVal)); return ptr; } PUBLIC BOOL SVal_readVal(SVal_t * pSVal, const char * valueStr) { pSVal->initialized = YES; StrAllocCopy(pSVal->value, valueStr); return YES; } PUBLIC BOOL SVal_initialized(const SVal_t * pSVal) { return (pSVal->initialized != NO); } PUBLIC char * SVal_value(const SVal_t * pSVal) { return (pSVal->value); } PUBLIC void SVal_clear(SVal_t * pSVal) { if (SVal_initialized(pSVal)) { HT_FREE(pSVal->value); pSVal->initialized = NO; } return; } #if 0 int year; int month; int day; int hour; int minute; int timeZoneHours; int timeZoneMinutes; #endif PUBLIC BOOL DVal_readVal(DVal_t * pDVal, const char * valueStr) { char space[] = "1994.11.05T08:15-0500"; char timeZoneSign; char timeZoneMinutesMSB; if (strlen(valueStr) != 0x15) return NO; memcpy(space, valueStr, 0x15); timeZoneSign = space[16]; timeZoneMinutesMSB = space[19]; space[4] = space[7] = space[10] = space[13] = space[16] = space[19] = 0; pDVal->year = atoi(space); pDVal->month = atoi(space+5); pDVal->day = atoi(space+8); pDVal->hour = atoi(space+11); pDVal->minute = atoi(space+14); pDVal->timeZoneHours = atoi(space+17); space[19] = timeZoneMinutesMSB; pDVal->timeZoneMinutes = atoi(space+19); if (timeZoneSign == '-') { pDVal->timeZoneHours = -pDVal->timeZoneHours; pDVal->timeZoneMinutes = -pDVal->timeZoneMinutes; } StrAllocCopy(pDVal->value, valueStr); pDVal->initialized = YES; return YES; } PUBLIC BOOL DVal_initialized(const DVal_t * pDVal) { return (pDVal->initialized != NO); } PUBLIC int DVal_compare(const DVal_t * a, const DVal_t * b) { if (a->year > b->year) return 1; if (a->year < b->year) return -1; if (a->month > b->month) return 1; if (a->month < b->month) return -1; if (a->day > b->day) return 1; if (a->day < b->day) return -1; if (a->hour+a->timeZoneHours > b->hour+b->timeZoneHours) return 1; if (a->hour+a->timeZoneHours < b->hour+b->timeZoneHours) return -1; if (a->minute+a->timeZoneMinutes > b->minute+b->timeZoneMinutes) return 1; if (a->minute+a->timeZoneMinutes < b->minute+b->timeZoneMinutes) return -1; return 0; } PUBLIC char * DVal_value(const DVal_t * pDVal) { return (pDVal->value); } PUBLIC void DVal_clear(DVal_t * pDVal) { if (DVal_initialized(pDVal)) { HT_FREE(pDVal->value); pDVal->initialized = NO; } return; } PUBLIC char * Range_toStr(Range_t * pRange) { HTChunk * pChunk; char * ptr; pChunk = HTChunk_new(20); ptr = FVal_toStr(&pRange->min); HTChunk_puts(pChunk, ptr); HT_FREE(ptr); if (FVal_initialized(&pRange->max)) { ptr = FVal_toStr(&pRange->max); HTChunk_puts(pChunk, ":"); HTChunk_puts(pChunk, ptr); HT_FREE(ptr); } return HTChunk_toCString(pChunk); } /* Range_gap - find gap between 2 ranges. Either of these ranges may be a * single value (in the min) * negative vector indicates that ref is greater than test */ PUBLIC FVal_t Range_gap(Range_t * a, Range_t * b) { Range_t aN = *a; Range_t bN = *b; FVal_t ret = FVal_NEW_UNINITIALIZED; if (!FVal_initialized(&a->min) || !FVal_initialized(&b->min)) return (ret); /* set ret for successful 0 returns */ FVal_set(&ret, (float)0.0); /* normalize our ranges */ if (FVal_lessThan(&aN.max, &aN.min)) { aN.max = a->min; aN.min = a->max; } if (FVal_lessThan(&bN.max, &bN.min)) { bN.max = b->min; bN.min = b->max; } /* check partial ranges (just a min, no max) */ if (!FVal_initialized(&aN.max)) { if (!FVal_initialized(&bN.max)) return FVal_minus(&aN.min, &bN.min); if (FVal_lessThan(&aN.min, &bN.min)) return FVal_minus(&bN.min, &aN.min); if (FVal_lessThan(&bN.max, &aN.min)) return FVal_minus(&bN.max, &aN.min); return ret; } /* we have four values to compare */ { FVal_t minDif = FVal_minus(&bN.min, &aN.min); FVal_t maxDif = FVal_minus(&bN.max, &aN.max); Range_t common; common.min = FVal_lessThan(&bN.min, &aN.min) ? aN.min : bN.min; common.max = FVal_lessThan(&bN.max, &aN.max) ? bN.max : aN.max; if (!FVal_lessThan(&common.max, &common.min)) return ret; /* failure - indicate how far we are off */ return FVal_nearerZero(&minDif, &maxDif) ? minDif : maxDif; } } /* ------------------------------------------------------------------------- */ /* C O N S T R U C T O R S */ PUBLIC CSParse_t * CSParse_new(void) { CSParse_t * me; if ((me = (CSParse_t *) HT_CALLOC(1, sizeof(CSParse_t))) == NULL) HT_OUTOFMEM("CSParse"); me->nowIn = NowIn_NEEDOPEN; me->token = HTChunk_new(0x10); if ((me->pParseContext = (ParseContext_t *) HT_CALLOC(1, sizeof(ParseContext_t))) == NULL) HT_OUTOFMEM("ParseContext_t"); return me; } PUBLIC void CSParse_delete(CSParse_t * me) { HT_FREE(me->pParseContext); HTChunk_delete(me->token); HT_FREE(me); } /* L A B E L P A R S E R S */ PRIVATE StateRet_t callErrorHandler(CSParse_t * pCSParse, const char * errorLocation, char demark, StateRet_t errorCode) { char * token = HTChunk_data(pCSParse->token); pCSParse->pParseContext->pTokenError = errorLocation; return (*pCSParse->pParseContext->pParseErrorHandler)(pCSParse, token, demark, StateRet_ERROR_BAD_CHAR); } /* CSParse_parseChunk - elemental parse engine for all pics nowIns. This passes * tokenized data into the handler functions in the CSParse_t.handlersOf. These * handlers are responsibel for placing the data in the appropriate target. * The text is broken into nowIns and passed a SubParser based on the current * nowIn which is one of: * NowIn_NEEDOPEN - get paren and go to NowIn_ENGINE, text is an error * NowIn_ENGINE - in a containing structure, text goes to engineOf_ * NowIn_NEEDCLOSE - get paren and go to NowIn_ENGINE, text is an error * NowIn_END - expect no more text or parens * NowIn_ERROR - */ PUBLIC CSDoMore_t CSParse_parseChunk (CSParse_t * pCSParse, const char * ptr, int len, void * pVoid) { int i; if (!len || !ptr) return CSDoMore_error; for (i = 0; i < len; i++) { pCSParse->offset++; if (pCSParse->quoteState) { if (pCSParse->quoteState == ptr[i]) { pCSParse->quoteState = 0; pCSParse->demark = ' '; } else HTChunk_putb(pCSParse->token, ptr+i, 1); continue; } if (ptr[i] == SQUOTE || ptr[i] == DQUOTE) { if (pCSParse->demark) { while ((pCSParse->nowIn = (*pCSParse->pParseContext->engineOf)(pCSParse, ' ', pVoid)) == NowIn_CHAIN); HTChunk_clear(pCSParse->token); pCSParse->demark = 0; } else if (HTChunk_size(pCSParse->token) && /* && warn(pCSParse, message_UNEXPECTED_CHARACTER, ptr[i])) */ callErrorHandler(pCSParse, ptr+i, ptr[i], StateRet_ERROR_BAD_CHAR) !=StateRet_OK) pCSParse->nowIn = NowIn_ERROR; pCSParse->quoteState = ptr[i]; pCSParse->pParseContext->observedQuotes = YES; continue; } switch (pCSParse->nowIn) { case NowIn_NEEDOPEN: if (ptr[i] == LPAREN) { pCSParse->nowIn = NowIn_ENGINE; continue; } if (isspace((int) ptr[i])) continue; /* if (warn(pCSParse, message_UNEXPECTED_CHARACTER, ptr[i])) pCSParse->nowIn = NowIn_ERROR; */ if (callErrorHandler(pCSParse, ptr+i, ptr[i], StateRet_ERROR_BAD_CHAR) !=StateRet_OK) pCSParse->nowIn = NowIn_ERROR; continue; case NowIn_ENGINE: if (isspace((int) ptr[i])) { if (HTChunk_size(pCSParse->token)) pCSParse->demark = ' '; continue; } if (ptr[i] == LPAREN || ptr[i] == RPAREN || pCSParse->demark) { /* parens override space demarkation */ if (ptr[i] == LPAREN) pCSParse->demark = LPAREN; if (ptr[i] == RPAREN) pCSParse->demark = RPAREN; /* call the engine as long as it wants re-entrance */ while ((pCSParse->nowIn = (*pCSParse->pParseContext->engineOf)(pCSParse, pCSParse->demark, pVoid)) == NowIn_CHAIN); HTChunk_clear(pCSParse->token); pCSParse->demark = 0; if (ptr[i] == LPAREN || ptr[i] == RPAREN) continue; /* continue with next token */ } HTChunk_putb(pCSParse->token, ptr+i, 1); continue; case NowIn_NEEDCLOSE: if (ptr[i] == RPAREN) { pCSParse->nowIn = NowIn_ENGINE; continue; } if (isspace((int) ptr[i])) continue; if (callErrorHandler(pCSParse, ptr+i, ptr[i], StateRet_ERROR_BAD_CHAR) !=StateRet_OK) pCSParse->nowIn = NowIn_ERROR; /* if (warn(pCSParse, message_UNEXPECTED_CHARACTER, ptr[i])) pCSParse->nowIn = NowIn_ERROR; */ continue; case NowIn_END: #if 0 /* enable this to tell the parser to check the remainder of the stream after the parsed object thinks it is done */ if (isspace(ptr[i])) continue; /* if (warn(pCSParse, message_UNEXPECTED_CHARACTER, ptr[i])) pCSParse->nowIn = NowIn_ERROR; */ if (callErrorHandler(pCSParse, ptr+i, ptr[i], StateRet_ERROR_BAD_CHAR) !=StateRet_OK) pCSParse->nowIn = NowIn_ERROR; continue; #else return CSDoMore_done; #endif case NowIn_MATCHCLOSE: if (ptr[i] == RPAREN) { if (!pCSParse->depth) pCSParse->nowIn = NowIn_ENGINE; else pCSParse->depth--; } if (ptr[i] == LPAREN) pCSParse->depth++; continue; case NowIn_ERROR: return CSDoMore_error; break; default: HTTRACE(PICS_TRACE, "PICS: Internal error in parser - bad nowIn:%d.\n" _ pCSParse->nowIn); return CSDoMore_error; } } /* check completion */ return pCSParse->nowIn == NowIn_END ? CSDoMore_done : CSDoMore_more; } PUBLIC BOOL Punct_badDemark(Punct_t validPunctuation, char demark) { switch (demark) { case ' ': return (!(validPunctuation & Punct_WHITE)); case LPAREN: return (!(validPunctuation & Punct_LPAREN)); case RPAREN: return (!(validPunctuation & Punct_RPAREN)); } return YES; } PUBLIC char * CSParse_subState2str(SubState_t subState) { static char space[33]; space[0] = 0; if (subState == SubState_N) strcpy(space, "N"); else if (subState == SubState_X) strcpy(space, "X"); else { int i; SubState_t comp; char ch[] = "A"; for (i = 1, comp = SubState_A; i < (sizeof(SubState_t)*8 - 1); i++, (*ch)++, comp<<=1) if (comp & subState) strcat(space, ch); } return space; } PRIVATE int ParseTrace(const char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); if (!ParseDebug) return 0; return (vfprintf(stderr, fmt, pArgs)); } PUBLIC NowIn_t CSParse_targetParser(CSParse_t * pCSParse, char demark, void * pVoid) { /* ParseContext_t * pParseContext = pCSParse->pParseContext; */ TargetObject_t * pTargetObject = pCSParse->pTargetObject; BOOL failedOnPunct = NO; char * token = 0; StateRet_t ret = StateRet_OK; int i; static NowIn_t lastRet = NowIn_END; if (HTChunk_size(pCSParse->token)) { HTChunk_terminate(pCSParse->token); token = HTChunk_data(pCSParse->token); } for (i = 0; i < pTargetObject->stateTokenCount; i++) { StateToken_t * pStateToken = pTargetObject->stateTokens + i; pCSParse->pStateToken = pStateToken; if (!(pCSParse->currentSubState & pStateToken->validSubStates)) continue; if (pStateToken->pCheck) { /* use check function */ StateRet_t checkRes; checkRes = (*pStateToken->pCheck)(pCSParse, pStateToken, token, demark); switch (checkRes) { case StateRet_WARN_BAD_PUNCT: failedOnPunct = YES; case StateRet_WARN_NO_MATCH: continue; case StateRet_ERROR_BAD_CHAR: (*pCSParse->pParseContext->pParseErrorHandler)(pCSParse, token, demark, StateRet_ERROR_BAD_CHAR); /* if (pTargetObject->pDestroy) (*pTargetObject->pDestroy)(pCSParse); */ return NowIn_ERROR; default: break; } } else { /* or match by name[s] */ if (!(pStateToken->command & Command_MATCHANY)) { if (token && pStateToken->name1) { if (strcasecomp(token, pStateToken->name1) && (!pStateToken->name2 || strcasecomp(token, pStateToken->name2))) continue; } else { if (token != pStateToken->name1) continue; } } if (Punct_badDemark(pStateToken->validPunctuation, demark)) { failedOnPunct = YES; continue; } } /* open or close and do the appropriate callbacks */ if (lastRet != NowIn_CHAIN) ParseTrace("%30s %c ", token ? token : "", demark); ParseTrace("%10s - %s:%10s => ", pCSParse->pTargetObject->note, CSParse_subState2str(pCSParse->currentSubState), pStateToken->note); if (pStateToken->command & Command_NOTOKEN) { HTChunk_clear(pCSParse->token); token = 0; } if (pStateToken->command & Command_OPEN && pTargetObject->pOpen) if ((*pTargetObject->pOpen)(pCSParse, token, demark) == StateRet_ERROR) return NowIn_ERROR; if (pStateToken->command & (Command_OPEN|Command_CLOSE) && pCSParse->pParseContext->pTargetChangeCallback) { ParseTrace("%3d", pStateToken->command & Command_CLOSE ? -pTargetObject->targetChange : pTargetObject->targetChange); if ((*pCSParse->pParseContext->pTargetChangeCallback)(pCSParse, pTargetObject, pTargetObject->targetChange, (BOOL)(pStateToken->command & Command_CLOSE), pVoid) == StateRet_ERROR) return NowIn_ERROR; } else ParseTrace(" "); if (pStateToken->command & Command_CLOSE && pTargetObject->pClose) ret = (*pTargetObject->pClose)(pCSParse, token, demark); if (pStateToken->pPrep && ret != NowIn_ERROR) ret = (*pStateToken->pPrep)(pCSParse, token, demark); if (pStateToken->pNextTargetObject) pCSParse->pTargetObject = pStateToken->pNextTargetObject; if (pStateToken->nextSubState != SubState_X) pCSParse->currentSubState = pStateToken->nextSubState; ParseTrace("%10s - %s", pCSParse->pTargetObject->note, CSParse_subState2str(pCSParse->currentSubState)); if (pStateToken->command & Command_CHAIN) { ParseTrace(" -O-O-"); return lastRet = NowIn_CHAIN; } ParseTrace("\n"); return lastRet = ret == StateRet_ERROR_BAD_CHAR ? NowIn_ERROR : ret == StateRet_DONE ? NowIn_END : NowIn_ENGINE; } (*pCSParse->pParseContext->pParseErrorHandler)(pCSParse, token, demark, failedOnPunct ? StateRet_WARN_BAD_PUNCT : StateRet_WARN_NO_MATCH); if (pTargetObject->pDestroy) (*pTargetObject->pDestroy)(pCSParse); return NowIn_ERROR; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSParse.html�����������������������������������������������������������������0100644�0000764�0000144�00000021666�06137362036�016561� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Parser for libpics</TITLE> <!-- Changed by: Eric Prud'hommeaux, 20-Apr-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>Parser for libpics</H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module provides the interface to <A HREF="CSParse.c">CSParse.c</A>. The parser is used to parse <A HREF="CSLL.html">labels</A>, <A HREF="CSMR.html">machine-readable descriptions</A>, and <A HREF="CSUser.html">users</A>. The application creates one of these and iteratevely calls CSParse_parseChunk until it returns a done or an error. <PRE> #ifndef CSPARSE_H #define CSPARSE_H #include "CSLUtils.h" #include "HTChunk.h" </PRE> <A NAME="NowIn"><H2>NowIn</H2></A> tells CSParse where it is in the task of tokenizing <PRE> typedef enum { NowIn_INVALID = 0, NowIn_NEEDOPEN, NowIn_ENGINE, NowIn_NEEDCLOSE, NowIn_END, NowIn_MATCHCLOSE, NowIn_ERROR, NowIn_CHAIN } NowIn_t; </PRE> <H3>Construction/Destruction</H3> The parse objects are never created by the application, but instead by one of the objects that it is used to parse. <PRE> extern CSParse_t * CSParse_new(void); extern void CSParse_delete(CSParse_t * me); </PRE> <H3>some handy definitions</H3> <PRE> #define LPAREN '(' #define RPAREN ')' #define LCURLY '{' #define RCURLY '}' #define LBRACKET '[' #define RBRACKET ']' #define SQUOTE 0x27 /* avoid confusing parens checking editors */ #define DQUOTE 0x22 #define LPARENSTR "(" #define RPARENSTR ")" #define raysize(A) (sizeof(A)/sizeof(A[0])) </PRE> <H1>subparser data</H1> <A NAME="Punct"><H2>Punct</H2></A> valid punctuation <PRE> typedef enum {Punct_ZERO = 1, Punct_WHITE = 2, Punct_LPAREN = 4, Punct_RPAREN = 8, Punct_ALL = 0xf} Punct_t; </PRE> <A NAME="SubState"><H2>SubState</H2></A> Enumerated bits that are used to mark a parsing state. Because they are bits, as opposed to sequential numbers, a <A HREF="#StateToken">StateToken</A> may or more than one together and serve more than one state. They must have identical outcomes if this is to be exploited. <P> By convention, the following SubState names are used: <LI>X - has no state <LI>N - is a newly created object <LI>A-H - substate definitions. Because they are non-conflicting bits, a subparser may have options that sit in more than state. For instance, the string "error" may be matched in states A and C with:<P> {"error test", SubState_A|SubState_C, Punct_LPAREN, 0, "error"} *probs* I meant to keep these 16 bit caompatible, but ran up short at the end of one StateToken list. This can be fixed if anyone needs a 16 bit enum. <PRE> typedef enum {SubState_X = -1, SubState_N = 0x4000, SubState_A = 1, SubState_B = 2, SubState_C = 4, SubState_D = 8, SubState_E = 0x10, SubState_F = 0x20, SubState_G = 0x40, SubState_H = 0x80, SubState_I = 0x100} SubState_t; </PRE> forward declaration for StateToken_t <PRE> typedef struct StateToken_s StateToken_t; </PRE> <A NAME="Engine"><H2>Engine</H2></A> called by CSParse to process tokens and punctuation <PRE> typedef NowIn_t Engine_t(CSParse_t * pCSParse, char demark, void * pVoid); </PRE> Engine employed by the Label, MacRed, and User parsers <PRE> Engine_t CSParse_targetParser; </PRE> <H2>substate methods</H2> All methods return a <A HREF="CSLUtils.html#StateRet">StateRet</A>. <A NAME="Check"><H3>Check</H3></A> see if a value is legitimate, may also record it <PRE> typedef StateRet_t Check_t(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark); </PRE> Punctuation checker to be employed by Check_t functions <PRE> extern BOOL Punct_badDemark(Punct_t validPunctuation, char demark); </PRE> <A NAME="Open"><H3>Open</H3></A> create a new data structure to be filled by the parser <PRE> typedef StateRet_t Open_t(CSParse_t * pCSParse, char * token, char demark); </PRE> <A NAME="Close"><H3>Close</H3></A> tell the state that the data structure is no longer current <PRE> typedef StateRet_t Close_t(CSParse_t * pCSParse, char * token, char demark); </PRE> <A NAME="Prep"><H3>Prep</H3></A> get ready for next state <PRE> typedef StateRet_t Prep_t(CSParse_t * pCSParse, char * token, char demark); </PRE> <A NAME="Destroy"><H3>Destroy</H3></A> something went wrong, throw away the current object <PRE> typedef void Destroy_t(CSParse_t * pCSParse); </PRE> <A NAME="Command"><H2>Command</H2></A> substate commands <LI>open - call the open function for the current data structure <LI>close - call the close <LI>chain - call again on the next state without re-reading data <LI>notoken - clear the token before a chain (so next state just gets punct) <LI>matchany - match any string <PRE> typedef enum {Command_NONE = 0, Command_OPEN = 1, Command_CLOSE = 2, Command_CHAIN = 4, Command_NOTOKEN = 8, Command_MATCHANY = 0x10} Command_t; </PRE> <A NAME="StateToken"><H2>StateToken structure</H2></A> Contains all the information about what tokens are expected in what substates. The StateTokens are kept in array referenced by a TargetObject. <PRE> struct StateToken_s { char * note; /* some usefull text that describes the state - usefulll for debugging */ <A HREF="#SubState">SubState_t</A> validSubStates; <A HREF="#Punct">Punct_t</A> validPunctuation; <A HREF="#Check">Check_t</A> * pCheck; /* call this function to check token */ char * name1; /* or compare to this name */ char * name2; /* many strings have 2 spellings ("ratings" vs. "r") */ <A HREF="CSLUtils.html#CSParseSC">CSParseTC_t</A> targetChange; /* whether target change implies diving or climbing from current state */ <A HREF="#TargetObject">TargetObject_t</A> * pNextTargetObject; <A HREF="#SubState">SubState_t</A> nextSubState; <A HREF="#Command">Command_t</A> command; /* open, close, chain, etc. */ <A HREF="#Prep">Prep_t</A> * pPrep; /* prepare for next state */ }; </PRE> <A NAME="TargetObject"><H2>TargetObject structure</H2></A> Methods and a lists of StateTokens associated with a data structure. The methods know how to read data into current object and the StateTokens tell when to proceed to the next object. <PRE> struct TargetObject_s { char * note; <A HREF="#Open">Open_t</A> * pOpen; /* call this function to open structure */ <A HREF="#Close">Close_t</A> * pClose; /* call this function to close structure */ <A HREF="#Destroy">Destroy_t</A> * pDestroy; <A HREF="#StateToken">StateToken_t</A> * stateTokens; /* array of sub states */ int stateTokenCount; /* number of sub states */ <A HREF="CSLUtils.html#CSParseSC">CSParseTC_t</A> targetChange; /* target change signal for opening this parse state */ }; </PRE> <A NAME="ValTarget"><H2>ValTarget</H2></A> <PRE> typedef union { <A HREF="CSLUtils.html#BVal">BVal_t</A> * pTargetBVal; <A HREF="CSLUtils.html#FVal">FVal_t</A> * pTargetFVal; <A HREF="CSLUtils.html#SVal">SVal_t</A> * pTargetSVal; <A HREF="CSLUtils.html#DVal">DVal_t</A> * pTargetDVal; <A HREF="../../Library/src/HTList.html">HTList</A> ** pTargetList; } ValTarget_t; </PRE> <A NAME="ValType"><H2>ValType</H2></A> Write down what value is to be read, and what type it is <PRE> typedef enum {ValType_NONE, ValType_BVAL, ValType_FVAL, ValType_SVAL, ValType_DVAL, ValType_COMMENT} ValType_t; </PRE> <A NAME="ParseContext"><H2>ParseContext</H2></A> Part of a CSParse. The boundry is a litte fuzzy. Maybe it should not exist. <PRE> typedef struct { <A HREF="#Engine">Engine_t</A> * engineOf; <A HREF="CSLUtils.html#TargetChangeCallback">TargetChangeCallback_t</A> * pTargetChangeCallback; <A HREF="CSLUtils.html#ParseErrorHandler">ParseErrorHandler_t</A> * pParseErrorHandler; /* for reading [BFSD]Val_t */ <A HREF="#ValTarget">ValTarget_t</A> valTarget; <A HREF="#ValType">ValType_t</A> valType; char * pTokenError; BOOL observeQuotes; BOOL observedQuotes; char * legalChars; int legalCharCount; } ParseContext_t; </PRE> <A NAME="CSParse"><H2>CSParse structure</H2></A> Full parser state and pointer to the object that it is reading. <PRE> struct CSParse_s { char quoteState; <A HREF="#NowIn">NowIn_t</A> nowIn; <A HREF="../../Library/src/HTChunk.html">HTChunk</A> * token; char demark; int offset; int depth; <A HREF="#ParseContext">ParseContext_t</A> * pParseContext; union { /* all the types this parse engine fills */ <A HREF="CSLUtils.html#CSMachRead">CSMachRead_t</A> * pCSMachRead; /* defined in <A HREF="CSMacRed.c">CSMacRed.c</A> */ <A HREF="CSLUtils.html#CSLabel">CSLabel_t</A> * pCSLabel; /* defined in <A HREF="CSLabel.c">CSLabel.c</A> */ <A HREF="CSLUtils.html#CSUser">CSUser_t</A> * pCSUser; /* defined in <A HREF="CSUser.c">CSUser.c</A> */ } target; <A HREF="#TargetObject">TargetObject_t</A> * pTargetObject; <A HREF="#SubState">SubState_t</A> currentSubState; <A HREF="#StateToken">StateToken_t</A> * pStateToken; }; </PRE> <PRE> #endif /* CSPARSE_H */ </PRE> End of Declaration </BODY> </HTML> ��������������������������������������������������������������������������libwww/PICS-client/src/CSStream.c�������������������������������������������������������������������0100644�0000764�0000144�00000017077�06664352704�016227� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CSParse.c ** PICS CONFIGURATION MANAGER FOR CLIENTS AND SERVERS ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGHT. ** ** This module converts application/xpics streams (files or network) to PICS_ class data ** ** History: ** 4 Dec 95 EGP start ** ** BUGS: no code yet; doesn't actually do anything */ /* Library include files */ #include "WWWLib.h" #include "HTProxy.h" #include "CSLUtils.h" #include "CSMR.h" #include "CSUser.h" #include "CSLL.h" #include "CSLApp.h" #include "CSParse.h" struct _HTStream { const HTStreamClass * isa; HTRequest * request; HTStream * target; CSParse_t * pCSParse; }; PRIVATE int CSParse_put_block (HTStream * me, const char * b, int l) { if (PICS_TRACE) { char * ptr; if ((ptr = (char *) HT_MALLOC(l+1)) == NULL) HT_OUTOFMEM("diagnostic buffer"); strncpy(ptr, b, l); ptr[l] = 0; HTTRACE(PICS_TRACE, "PICS: parser %p parsing block \"%s\"\n" _ me->pCSParse _ ptr); HT_FREE(ptr); } if (CSParse_parseChunk(me->pCSParse, b, l, 0) == CSDoMore_error) return HT_ERROR; return HT_OK; } PRIVATE int CSParse_put_character (HTStream * me, char c) { return CSParse_put_block(me, &c, 1); } PRIVATE int CSParse_put_string (HTStream * me, const char * s) { return CSParse_put_block(me, s, (int) strlen(s)); } PRIVATE int CSParse_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int CSParse_free (HTStream * me) { int status = HT_OK; if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTTRACE(APP_TRACE, "Parser....... FREEING....\n"); HTTRACE(PICS_TRACE, "PICS: freeing parser %p.\n" _ me->pCSParse); CSParse_delete(me->pCSParse); return status; } #if 0 PRIVATE int CSParse_abort (HTStream * me, HTList * e) { int status = HT_ERROR; if (me->target) status = (*me->target->isa->abort)(me->target, e); HTTRACE(APP_TRACE, "Rules....... ABORTING...\n"); HT_FREE(me); return status; } PRIVATE const HTStreamClass CSParseClass = { "PICSParser", CSParse_flush, CSParse_free, CSParse_abort, CSParse_put_character, CSParse_put_string, CSParse_put_block }; #endif PRIVATE HTStream * CSParseConverter_new (HTRequest * request, HTStream * output_stream) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("CSParse"); me->request = request; me->target = output_stream; return me; } PRIVATE int CSParseMachRead_free (HTStream * me) { int status = CSParse_free(me); CSParse_deleteMachRead(me->pCSParse); return status; } PRIVATE int CSParseMachRead_abort (HTStream * me, HTList * e) { int status = CSParse_free(me); CSParse_deleteMachRead(me->pCSParse); return status; } PRIVATE const HTStreamClass CSParseClass_machRead = { "PICSParser", CSParse_flush, CSParseMachRead_free, CSParseMachRead_abort, CSParse_put_character, CSParse_put_string, CSParse_put_block }; PUBLIC HTStream * CSParseMachRead (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = CSParseConverter_new(request, output_stream); me->isa = &CSParseClass_machRead; me->pCSParse = CSParse_newMachRead(0, 0); HTTRACE(PICS_TRACE, "PICS: creating MachRead parser %p.\n" _ me->pCSParse); return me; } PRIVATE int CSParseUser_free (HTStream * me) { /* CSParse_deleteUser(me->pCSParse); */ char * addr = HTAnchor_address((HTAnchor *)HTRequest_anchor(me->request)); CSLoadedUser_add(CSParse_getUser(me->pCSParse), addr); HT_FREE(addr); CSParse_free(me); HT_FREE(me); return HT_OK; } PRIVATE int CSParseUser_abort (HTStream * me, HTList * e) { CSParse_deleteUser(me->pCSParse); HT_FREE(me); return HT_OK; } PRIVATE const HTStreamClass CSParseClass_user = { "PICSParser", CSParse_flush, CSParseUser_free, CSParseUser_abort, CSParse_put_character, CSParse_put_string, CSParse_put_block }; PUBLIC HTStream * CSParseUser (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = CSParseConverter_new(request, output_stream); me->isa = &CSParseClass_user; me->pCSParse = CSParse_newUser(); me->request = request; /* if (HTRequest_context(request)) *((CSUser_t **)HTRequest_context(request)) = CSParse_getUser(me->pCSParse); */ HTTRACE(PICS_TRACE, "PICS: creating user parser %p.\n" _ me->pCSParse); return me; } PRIVATE int CSParseLabel_free (HTStream * me) { CSApp_label(me->request, CSParse_getLabel(me->pCSParse)); /* CSParse_deleteLabel(me->pCSParse); keep it around and let CSApp free it */ CSParse_free(me); HT_FREE(me); return HT_OK; } PRIVATE int CSParseLabel_abort (HTStream * me, HTList * e) { CSParse_deleteLabel(me->pCSParse); CSParse_free(me); HT_FREE(me); return HT_OK; } PRIVATE const HTStreamClass CSParseClass_label = { "PICSParser", CSParse_flush, CSParseLabel_free, CSParseLabel_abort, CSParse_put_character, CSParse_put_string, CSParse_put_block }; PRIVATE StateRet_t parseErrorHandler(CSLabel_t * pCSLabel, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode) { char space[256]; if (PICS_TRACE) printf("%20s - %s:", pCSParse->pTargetObject->note, pCSParse->currentSubState == SubState_X ? "SubState_X" : pCSParse->currentSubState == SubState_N ? "SubState_N" : pCSParse->currentSubState == SubState_A ? "SubState_A" : pCSParse->currentSubState == SubState_B ? "SubState_B" : pCSParse->currentSubState == SubState_C ? "SubState_C" : pCSParse->currentSubState == SubState_D ? "SubState_D" : pCSParse->currentSubState == SubState_E ? "SubState_E" : pCSParse->currentSubState == SubState_F ? "SubState_F" : pCSParse->currentSubState == SubState_G ? "SubState_G" : pCSParse->currentSubState == SubState_H ? "SubState_H" : "???"); switch (errorCode) { case StateRet_WARN_NO_MATCH: if (token) sprintf(space, "Unexpected token \"%s\".\n", token); else sprintf(space, "Unexpected lack of token.\n"); break; case StateRet_WARN_BAD_PUNCT: sprintf(space, "Unextected punctuation \"%c\"", demark); if (token) printf("after token \"%s\".\n", token); else printf(".\n"); break; case StateRet_ERROR_BAD_CHAR: sprintf(space, "Unextected character \"%c\" in token \"%s\".\n", *pCSParse->pParseContext->pTokenError, token); break; default: sprintf(space, "Internal error: demark:\"%c\" token:\"%s\".\n", demark, token); break; } HTTRACE(PICS_TRACE, "%s" _ space); /* make sure %s don't get interpretted */ return errorCode; } PUBLIC HTStream * CSParseLabel (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me = CSParseConverter_new(request, output_stream); me->isa = &CSParseClass_label; me->pCSParse = CSParse_newLabel(0, &parseErrorHandler); HTTRACE(PICS_TRACE, "PICS: creating label parser %p.\n" _ me->pCSParse); return me; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSUser.c���������������������������������������������������������������������0100644�0000764�0000144�00000072500�06523414502�015667� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "wwwsys.h" #include "HTUtils.h" #include "HTString.h" #include "HTEscape.h" #include "HTParse.h" #include "CSParse.h" #include "CSUser.h" #include "CSUserSt.h" #define GetCSUser(A) ((A)->target.pCSUser) struct CSUser_s { CSUserData_t * pCSUserData; UserService_t * pCurrentUserService; UserServiceRating_t * pCurrentUserServiceRating; Range_t * pCurrentRange; int currentLabelNumber; UserTargetCallback_t * pUserTargetCallback; UserErrorHandler_t * pUserErrorHandler; }; PRIVATE TargetObject_t User_targetObject; PRIVATE TargetObject_t UserService_targetObject; PRIVATE TargetObject_t UserRatingList_targetObject; PRIVATE TargetObject_t UserRating_targetObject; PRIVATE TargetObject_t UserRange_targetObject; PRIVATE Prep_t User_setTarget; PRIVATE Prep_t clearToken; PRIVATE Check_t getProxy; PRIVATE Check_t getValue; PRIVATE Check_t UserService_getId; PRIVATE Check_t UserRating_getId; PRIVATE Check_t UserRange_get; PRIVATE Open_t User_open; PRIVATE Open_t UserService_open; PRIVATE Open_t UserRating_open; PRIVATE Open_t UserRatingList_open; PRIVATE Open_t UserRange_open; PRIVATE Close_t User_close; PRIVATE Close_t UserService_close; PRIVATE Close_t UserRatingList_close; PRIVATE Close_t UserRating_close; PRIVATE Close_t UserRange_close; PRIVATE Destroy_t User_destroy; PRIVATE Destroy_t UserService_destroy; PRIVATE Destroy_t UserRatingList_destroy; PRIVATE Destroy_t UserRating_destroy; PRIVATE Destroy_t UserRange_destroy; PRIVATE TargetChangeCallback_t targetChangeCallback; PRIVATE ParseErrorHandler_t parseErrorHandler; /* CSParse_doc states */ /* U S E R P A R S E R S T A T E S */ /* This parses the example User profile for the LineMode browser. * See User/Parsing.html for details. */ PRIVATE StateToken_t User_stateTokens[] = { /* A: open or close B: red open C: read value D: read proxy */ { "start", SubState_N, Punct_ALL, 0, 0, 0, 0, &User_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "open", SubState_A, Punct_LPAREN, 0, 0, 0, 0, &User_targetObject, SubState_B, 0, 0}, { "end", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &User_targetObject, SubState_A, Command_CLOSE, 0}, { "version", SubState_B, Punct_WHITE, 0, "version", 0, 0, &User_targetObject, SubState_C, 0, &User_setTarget}, { "user-name", SubState_B, Punct_WHITE, 0, "user-name", 0, 0, &User_targetObject, SubState_C, 0, &User_setTarget}, { "password", SubState_B, Punct_WHITE, 0, "password", 0, 0, &User_targetObject, SubState_C, 0, &User_setTarget}, { "super-user", SubState_B, Punct_WHITE, 0, "super-user", 0, 0, &User_targetObject, SubState_C, 0, &User_setTarget}, {"minimum-services", SubState_B, Punct_WHITE, 0, "minimum-services", 0, 0, &User_targetObject, SubState_C, 0, &User_setTarget}, { "missing-service", SubState_B, Punct_WHITE, 0, "missing-service", 0, 0, &User_targetObject, SubState_C, 0, &User_setTarget}, { "missing-scale", SubState_B, Punct_WHITE, 0, "missing-scale", 0, 0, &User_targetObject, SubState_C, 0, &User_setTarget}, { "observe-dates", SubState_B, Punct_WHITE, 0, "observe-dates", 0, 0, &User_targetObject, SubState_C, 0, &User_setTarget}, { "bureau", SubState_B, Punct_WHITE,0,"bureau","label-bureau", 0, &User_targetObject, SubState_C, 0, &User_setTarget}, { "proxy", SubState_B, Punct_WHITE, 0, "proxy", 0, 0, &User_targetObject, SubState_D, 0, 0}, { "rating-service", SubState_B, Punct_WHITE, 0, "rating-service", 0, 0, &UserService_targetObject, SubState_N, 0, 0}, { "get value", SubState_C, Punct_RPAREN, &getValue, 0, 0, 0, &User_targetObject, SubState_A, 0, 0}, { "get proxy", SubState_D, Punct_RPAREN, &getProxy, 0, 0, 0, &User_targetObject, SubState_A, 0, 0} }; PRIVATE TargetObject_t User_targetObject = {"User", &User_open, &User_close, &User_destroy, User_stateTokens, raysize(User_stateTokens), CSUserTC_USER}; PRIVATE StateToken_t UserService_stateTokens[] = { /* A: fresh UserService B: red id C: read value D: need paren before next parm */ { "start", SubState_N, Punct_ALL, 0, 0, 0, 0, &UserService_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "rating system", SubState_A, Punct_LPAREN, &UserService_getId, 0, 0, 0, &UserService_targetObject, SubState_B, 0, 0}, { "service", SubState_B, Punct_WHITE, 0, "rating-service", 0, 0, &UserService_targetObject, SubState_C, 0, &User_setTarget}, {"missing-service", SubState_B, Punct_WHITE, 0, "missing-service", 0, 0, &UserService_targetObject, SubState_C, 0, &User_setTarget}, { "missing-scale", SubState_B, Punct_WHITE, 0, "missing-scale", 0, 0, &UserService_targetObject, SubState_C, 0, &User_setTarget}, { "observe-dates", SubState_B, Punct_WHITE, 0, "observe-dates", 0, 0, &UserService_targetObject, SubState_C, 0, &User_setTarget}, { "ratings", SubState_B, Punct_LPAREN|Punct_RPAREN,0,"ratings",0,0, &UserRatingList_targetObject, SubState_N, Command_CHAIN, &clearToken}, { "get value", SubState_C, Punct_RPAREN, &getValue, 0, 0, 0, &UserService_targetObject, SubState_D, 0, 0}, { "end", SubState_D, Punct_RPAREN, 0, 0, 0, 0, &User_targetObject, SubState_A, Command_CLOSE, 0}, { "need open", SubState_D, Punct_LPAREN, 0, 0, 0, 0, &UserService_targetObject, SubState_B, 0, 0} }; PRIVATE TargetObject_t UserService_targetObject = {"UserService", &UserService_open, &UserService_close, &UserService_destroy, UserService_stateTokens, raysize(UserService_stateTokens), CSUserTC_SERVICE}; PRIVATE StateToken_t UserRatingList_stateTokens[] = { /* A: single state list, expects open or close paren */ { "start", SubState_N, Punct_ALL, 0, 0, 0, 0, &UserRatingList_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "start rating", SubState_A, Punct_LPAREN, 0, 0, 0, 0, &UserRating_targetObject, SubState_N, 0, 0}, {"end rating list", SubState_A, Punct_RPAREN, 0, 0, 0, 0, &UserService_targetObject, SubState_D, Command_CLOSE, 0} }; PRIVATE TargetObject_t UserRatingList_targetObject = {"UserRatingList", &UserRatingList_open, &UserRatingList_close, &UserRatingList_destroy, UserRatingList_stateTokens, raysize(UserRatingList_stateTokens), CSUserTC_RLIST}; PRIVATE StateToken_t UserRating_stateTokens[] = { /* A: fresh UserRating B: red id C: get value D: need paren before next parm */ { "start", SubState_N, Punct_ALL, 0, 0, 0, 0, &UserRating_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "range id", SubState_A, Punct_LPAREN, &UserRating_getId, 0, 0, 0, &UserRating_targetObject, SubState_B, 0, 0}, { "missing-scale", SubState_B, Punct_WHITE, 0, "missing-scale", 0, 0, &UserRating_targetObject, SubState_C, 0, &User_setTarget}, { "observe-dates", SubState_B, Punct_WHITE, 0, "observe-dates", 0, 0, &UserRating_targetObject, SubState_C, 0, &User_setTarget}, { "ranges", SubState_B, Punct_WHITE, 0, "range", "ranges", 0, &UserRange_targetObject, SubState_N, 0, 0}, { "get value", SubState_C, Punct_RPAREN, &getValue, 0, 0, 0, &UserRating_targetObject, SubState_D, 0, 0}, { "rating end", SubState_D, Punct_RPAREN, 0, 0, 0, 0, &UserRatingList_targetObject, SubState_A, Command_CLOSE, 0}, { "need open", SubState_D, Punct_LPAREN, 0, 0, 0, 0, &UserRating_targetObject, SubState_B, 0, 0} }; PRIVATE TargetObject_t UserRating_targetObject = {"UserRating", &UserRating_open, &UserRating_close, &UserRating_destroy, UserRating_stateTokens, raysize(UserRating_stateTokens), CSUserTC_RATING}; PRIVATE StateToken_t UserRange_stateTokens[] = { /* A: read ranges */ { "start", SubState_N, Punct_ALL, 0, 0, 0, 0, &UserRange_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0}, { "value", SubState_A, Punct_WHITE, &UserRange_get, 0, 0, 0, &UserRange_targetObject, SubState_A, 0, 0}, { "value end", SubState_A, Punct_RPAREN, &UserRange_get, 0, 0, 0, &UserRating_targetObject, SubState_D, Command_CLOSE, 0} }; PRIVATE TargetObject_t UserRange_targetObject = {"UserRange", &UserRange_open, &UserRange_close, &UserRange_destroy, UserRange_stateTokens, raysize(UserRange_stateTokens), CSUserTC_RANGE}; /* CSParse_doc end */ /* S T A T E A S S O C I A T I O N - associate a CSUser with the label list data The label list data is kept around until all states referencing it are destroyed */ typedef struct { CSUser_t * pCSUser; CSUserData_t * pCSUserData; } CSUserAssoc_t; PRIVATE HTList * CSUserAssocs = 0; PRIVATE void CSUserAssoc_add(CSUser_t * pCSUser, CSUserData_t * pCSUserData) { CSUserAssoc_t * pElement; if ((pElement = (CSUserAssoc_t *) HT_CALLOC(1, sizeof(CSUserAssoc_t))) == NULL) HT_OUTOFMEM("CSUserAssoc_t"); pElement->pCSUser = pCSUser; pElement->pCSUserData = pCSUserData; if (!CSUserAssocs) CSUserAssocs = HTList_new(); HTList_appendObject(CSUserAssocs, (void *)pElement); } PRIVATE CSUserAssoc_t * CSUserAssoc_findByData(CSUserData_t * pCSUserData) { HTList * assocs = CSUserAssocs; CSUserAssoc_t * pElement; while ((pElement = (CSUserAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSUserData == pCSUserData) return pElement; return 0; } PRIVATE CSUserAssoc_t * CSUserAssoc_findByState(CSUser_t * pCSUser) { HTList * assocs = CSUserAssocs; CSUserAssoc_t * pElement; while ((pElement = (CSUserAssoc_t *) HTList_nextObject(assocs))) if (pElement->pCSUser == pCSUser) return pElement; return 0; } PRIVATE void CSUserAssoc_removeByState(CSUser_t * pCSUser) { CSUserAssoc_t * pElement = CSUserAssoc_findByState(pCSUser); if (!pElement) return; HTList_removeObject(CSUserAssocs, (void *)pElement); HT_FREE(pElement); } /* C O N S T R U C T O R S / D E S T R U C T O R S */ PRIVATE UserServiceRating_t * UserServiceRating_new(void) { UserServiceRating_t * me; if ((me = (UserServiceRating_t *) HT_CALLOC(1, sizeof(UserServiceRating_t))) == NULL) HT_OUTOFMEM("UserServiceRating_t"); me->ranges = HTList_new(); return me; } PUBLIC void UserServiceRating_free(UserServiceRating_t * me) { Range_t * pRange; while ((pRange = (Range_t *) HTList_removeLastObject(me->ranges))) HT_FREE(pRange); HTList_delete(me->ranges); SVal_clear(&me->identifier); BVal_clear(&me->missing_scale); BVal_clear(&me->observe_dates); HT_FREE(me); } PRIVATE UserService_t * UserService_new(void) { UserService_t * me; if ((me = (UserService_t *) HT_CALLOC(1, sizeof(UserService_t))) == NULL) HT_OUTOFMEM("UserService_t"); return me; } PUBLIC void UserService_free(UserService_t * me) { UserServiceRating_t * pUserServiceRating; while ((pUserServiceRating = (UserServiceRating_t *) HTList_removeLastObject(me->userServiceRatings))) UserServiceRating_free(pUserServiceRating); HTList_delete(me->userServiceRatings); FVal_clear(&me->version); SVal_clear(&me->rating_system); SVal_clear(&me->rating_service); BVal_clear(&me->missing_service); BVal_clear(&me->missing_scale); BVal_clear(&me->observe_dates); HT_FREE(me); } PUBLIC CSUserData_t * CSUserData_new(void) { CSUserData_t * me; if ((me = (CSUserData_t *) HT_CALLOC(1, sizeof(CSUserData_t))) == NULL) HT_OUTOFMEM("CSUserData_t"); me->userServices = HTList_new(); me->proxies = HTList_new(); return me; } PUBLIC void CSUserData_free(CSUserData_t * me) { UserService_t * pUserService; char * proxy; if (CSUserAssoc_findByData(me)) return; while ((pUserService = (UserService_t *) HTList_removeLastObject(me->userServices))) UserService_free(pUserService); HTList_free(me->userServices); while ((proxy = (char *) HTList_removeLastObject(me->proxies))) HT_FREE(proxy); HTList_free(me->proxies); FVal_clear(&me->version); SVal_clear(&me->user_name); SVal_clear(&me->password); BVal_clear(&me->super_user); FVal_clear(&me->minimum_services); BVal_clear(&me->missing_service); BVal_clear(&me->missing_scale); BVal_clear(&me->observe_dates); SVal_clear(&me->bureau); HT_FREE(me); } PUBLIC CSUser_t * CSUser_new(CSUserData_t * pCSUserData) { CSUser_t * me; if ((me = (CSUser_t *) HT_CALLOC(1, sizeof(CSUser_t))) == NULL) HT_OUTOFMEM("CSUser_t"); me->pCSUserData = pCSUserData; CSUserAssoc_add(me, pCSUserData); return me; } PUBLIC CSUser_t * CSUser_copy(CSUser_t * old) { CSUser_t * me; me = CSUser_new(old->pCSUserData); memcpy(me, old, sizeof(CSUser_t)); return me; } PUBLIC void CSUser_free(CSUser_t * me) { CSUserData_t * pCSUserData = me->pCSUserData; CSUserAssoc_removeByState(me); HT_FREE(me); CSUserData_free(pCSUserData); } PUBLIC char * CSUser_name(CSUser_t * pCSUser) {return SVal_value(&pCSUser->pCSUserData->user_name);} PUBLIC BOOL CSUser_checkPassword(CSUser_t * pCSUser, char * password) {return strcasecomp(SVal_value(&pCSUser->pCSUserData->password), password) ? NO : YES;} PUBLIC char * CSUser_bureau(CSUser_t * pCSUser) {return SVal_value(&pCSUser->pCSUserData->bureau);} PUBLIC CSUserData_t * CSUser_getCSUserData(CSUser_t * me) {return me->pCSUserData;} PUBLIC UserService_t * CSUser_getUserService(CSUser_t * pCSUser) {return pCSUser->pCurrentUserService;} PUBLIC UserServiceRating_t * CSUser_getUserServiceRating(CSUser_t * pCSUser) {return pCSUser->pCurrentUserServiceRating;} PUBLIC Range_t * CSUser_getUserRatingRange(CSUser_t * pCSUser) {return pCSUser->pCurrentRange;} PUBLIC char * CSUser_getRatingStr(CSUser_t * pCSUser) { HTChunk * pChunk; HTList * ranges; Range_t * curRange; int count = 0; pChunk = HTChunk_new(20); ranges = CSUser_getUserServiceRating(pCSUser)->ranges; while ((curRange = (Range_t *) HTList_nextObject(ranges))) { char * ptr; count++; ptr = Range_toStr(curRange); if (count > 1) HTChunk_puts(pChunk, " "); HTChunk_puts(pChunk, ptr); HT_FREE(ptr); } return HTChunk_toCString(pChunk); } PUBLIC CSParse_t * CSParse_newUser() { CSParse_t * me = CSParse_new(); me->pParseContext->engineOf = &CSParse_targetParser; me->pParseContext->pTargetChangeCallback = &targetChangeCallback; me->pParseContext->pParseErrorHandler = &parseErrorHandler; me->target.pCSUser = CSUser_new(CSUserData_new()); me->pTargetObject = &User_targetObject; me->currentSubState = SubState_N; return me; } PUBLIC CSUser_t * CSParse_getUser(CSParse_t * me) { return (me->target.pCSUser); } PUBLIC BOOL CSParse_deleteUser(CSParse_t * pCSParse) { CSUser_t * me = GetCSUser(pCSParse); CSUserData_free(CSUser_getCSUserData(me)); CSUser_free(me); return YES; } /* P A R S I N G H A N D L E R S */ PRIVATE StateRet_t targetChangeCallback(CSParse_t * pCSParse, TargetObject_t * pTargetObject, CSParseTC_t target, BOOL closed, void * pVoid) { CSUser_t * pCSUser = GetCSUser(pCSParse); if (pCSUser->pUserTargetCallback) return (*pCSUser->pUserTargetCallback)(pCSUser, pCSParse, (CSUserTC_t)target, closed, pVoid); return StateRet_OK; } PRIVATE StateRet_t parseErrorHandler(CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode) { CSUser_t * pCSUser = GetCSUser(pCSParse); if (pCSUser->pUserErrorHandler) return (*pCSUser->pUserErrorHandler)(pCSUser, pCSParse, token, demark, errorCode); return errorCode; } /* CSParse_doc methods */ /* P A R S I N G S T A T E F U N C T I O N S */ PRIVATE StateRet_t clearToken(CSParse_t * pCSParse, char * token, char demark) { HTChunk_clear(pCSParse->token); return StateRet_OK; } PRIVATE StateRet_t getProxy(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; char * proxy = 0; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; /* let CSParse_targetParser get the punctuation error */ StrAllocCopy(proxy, token); HTList_appendObject(pCSUser->pCSUserData->proxies, (void *)proxy); return StateRet_OK; } #define READY_BVAL(holder, pointer) \ pCSParse->pParseContext->valTarget.pTargetBVal = &CSUser_get##holder(pCSUser)->pointer; pCSParse->pParseContext->valType = ValType_BVAL; #define READY_FVAL(holder, pointer) \ pCSParse->pParseContext->valTarget.pTargetFVal = &CSUser_get##holder(pCSUser)->pointer; pCSParse->pParseContext->valType = ValType_FVAL; #define READY_DVAL(holder, pointer) \ pCSParse->pParseContext->valTarget.pTargetDVal = &CSUser_get##holder(pCSUser)->pointer; pCSParse->pParseContext->valType = ValType_DVAL; #define READY_SVAL(holder, pointer) \ pCSParse->pParseContext->valTarget.pTargetSVal = &CSUser_get##holder(pCSUser)->pointer; pCSParse->pParseContext->valType = ValType_SVAL; PRIVATE StateRet_t User_setTarget(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); int caseNumber; pCSParse->pParseContext->valType = ValType_SVAL; if (pCSParse->pTargetObject == &User_targetObject) { caseNumber = pCSParse->pStateToken-User_stateTokens; switch (caseNumber) { case 3: READY_FVAL(CSUserData, version); break; case 4: READY_SVAL(CSUserData, user_name); break; case 5: READY_SVAL(CSUserData, password); break; case 6: READY_BVAL(CSUserData, super_user); break; case 7: READY_FVAL(CSUserData, minimum_services); break; case 8: READY_BVAL(CSUserData, missing_service); break; case 9: READY_BVAL(CSUserData, missing_scale); break; case 10: READY_BVAL(CSUserData, observe_dates); break; case 11: READY_SVAL(CSUserData, bureau); break; } } else if (pCSParse->pTargetObject == &UserService_targetObject) { caseNumber = pCSParse->pStateToken-UserService_stateTokens; switch (caseNumber) { case 2: READY_SVAL(UserService, rating_service); break; case 3: READY_BVAL(UserService, missing_service); break; case 4: READY_BVAL(UserService, missing_scale); break; case 5: READY_BVAL(UserService, observe_dates); break; } } else if (pCSParse->pTargetObject == &UserRating_targetObject) { caseNumber = pCSParse->pStateToken-UserRating_stateTokens; switch (caseNumber) { case 2: READY_BVAL(UserServiceRating, missing_scale); break; case 3: READY_BVAL(UserServiceRating, observe_dates); break; } } return StateRet_OK; } PRIVATE StateRet_t getValue(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { switch (pCSParse->pParseContext->valType) { case ValType_BVAL: BVal_readVal(pCSParse->pParseContext->valTarget.pTargetBVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_FVAL: FVal_readVal(pCSParse->pParseContext->valTarget.pTargetFVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_SVAL: SVal_readVal(pCSParse->pParseContext->valTarget.pTargetSVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; case ValType_DVAL: DVal_readVal(pCSParse->pParseContext->valTarget.pTargetDVal, token); pCSParse->pParseContext->valType = ValType_NONE; break; default: break; } return StateRet_OK; } PRIVATE StateRet_t User_open(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t User_close(CSParse_t * pCSParse, char * token, char demark) { return StateRet_DONE; } PRIVATE void User_destroy(CSParse_t * pCSParse) { /* CSUser_t * pCSUser = GetCSUser(pCSParse); */ } PRIVATE StateRet_t UserService_open(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserService = UserService_new(); HTList_appendObject(pCSUser->pCSUserData->userServices, (void *)pCSUser->pCurrentUserService); return StateRet_OK; } PRIVATE StateRet_t UserService_getId(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; /* let CSParse_targetParser get the punctuation error */ SVal_readVal(&pCSUser->pCurrentUserService->rating_service, token); return StateRet_OK; } PRIVATE StateRet_t UserService_close(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserService = 0; return StateRet_OK; } PRIVATE void UserService_destroy(CSParse_t * pCSParse) { CSUser_t * pCSUser = GetCSUser(pCSParse); HTList_removeObject(pCSUser->pCSUserData->userServices, (void *)pCSUser->pCurrentUserService); UserService_free(pCSUser->pCurrentUserService); pCSUser->pCurrentUserService = 0; } PRIVATE StateRet_t UserRatingList_open(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserService->userServiceRatings = HTList_new(); return StateRet_OK; } PRIVATE StateRet_t UserRatingList_close(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE void UserRatingList_destroy(CSParse_t * pCSParse) { CSUser_t * pCSUser = GetCSUser(pCSParse); UserService_t * pUserService = pCSUser->pCurrentUserService; UserServiceRating_t * pUserServiceRating; while ((pUserServiceRating = (UserServiceRating_t *) HTList_removeLastObject(pUserService->userServiceRatings))) UserServiceRating_free(pUserServiceRating); HTList_delete(pUserService->userServiceRatings); pUserService->userServiceRatings = 0; } PRIVATE StateRet_t UserRating_open(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserServiceRating = UserServiceRating_new(); HTList_appendObject(pCSUser->pCurrentUserService->userServiceRatings, (void *)pCSUser->pCurrentUserServiceRating); return StateRet_OK; } PRIVATE StateRet_t UserRating_getId(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); ParseContext_t * pParseContext = pCSParse->pParseContext; if (!token || !pParseContext->observedQuotes) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; /* let CSParse_targetParser get the punctuation error */ SVal_readVal(&pCSUser->pCurrentUserServiceRating->identifier, token); return StateRet_OK; } PRIVATE StateRet_t UserRating_close(CSParse_t * pCSParse, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); pCSUser->pCurrentUserServiceRating = 0; return StateRet_OK; } PRIVATE void UserRating_destroy(CSParse_t * pCSParse) { CSUser_t * pCSUser = GetCSUser(pCSParse); HTList_removeObject(pCSUser->pCurrentUserService->userServiceRatings, (void *)pCSUser->pCurrentUserServiceRating); UserServiceRating_free(pCSUser->pCurrentUserServiceRating); pCSUser->pCurrentUserServiceRating = 0; } PRIVATE StateRet_t UserRange_open(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE StateRet_t UserRange_get(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark) { CSUser_t * pCSUser = GetCSUser(pCSParse); UserServiceRating_t * pUserServiceRating = pCSUser->pCurrentUserServiceRating; Range_t * me; char * ptr, * backPtr; if (!token) return StateRet_WARN_NO_MATCH; if (Punct_badDemark(pStateToken->validPunctuation, demark)) return StateRet_WARN_BAD_PUNCT; if ((me = (Range_t *) HT_CALLOC(1, sizeof(Range_t))) == NULL) HT_OUTOFMEM("Range_t"); /* me = Range_new(); */ HTList_appendObject(pUserServiceRating->ranges, (void *)me); backPtr = ptr = token; while (*ptr) { if (*ptr == ':') { *ptr = 0; ptr++; break; } ptr++; } FVal_readVal(&me->min, backPtr); if (*ptr) FVal_readVal(&me->max, ptr); return StateRet_OK; } PRIVATE StateRet_t UserRange_close(CSParse_t * pCSParse, char * token, char demark) { return StateRet_OK; } PRIVATE void UserRange_destroy(CSParse_t * pCSParse) { } /* CSParse_doc end */ /* I T E R A T O R S - scan through the CSUser data structures for <identifier> */ PUBLIC CSError_t CSUser_iterateServices(CSUser_t * pCSUser, CSUser_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * userServices; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSUser || !pCSUser->pCSUserData->userServices) return CSError_BAD_PARAM; userServices = pCSUser->pCSUserData->userServices; while (ret == CSError_OK && (pCSUser->pCurrentUserService = (UserService_t *) HTList_nextObject(userServices))) if (!identifier || !strcasecomp(SVal_value(&pCSUser->pCurrentUserService->rating_service), identifier)) { ret = (*pIteratorCB)(pCSUser, pParms, identifier, pVoid); count++; } if (!count) return CSError_SERVICE_MISSING; return ret; } PUBLIC CSError_t CSUser_iterateServiceRatings(CSUser_t * pCSUser, CSUser_callback_t * pIteratorCB, State_Parms_t * pParms, const char * identifier, void * pVoid) { HTList * userServiceRatings; CSError_t ret = CSError_OK; int count = 0; if (!pIteratorCB || !pCSUser || !pCSUser->pCurrentUserService || !pCSUser->pCurrentUserService->userServiceRatings) return CSError_BAD_PARAM; userServiceRatings = pCSUser->pCurrentUserService->userServiceRatings; while (ret == CSError_OK && (pCSUser->pCurrentUserServiceRating = (UserServiceRating_t *) HTList_nextObject(userServiceRatings))) if (!identifier || !strcasecomp(SVal_value(&pCSUser->pCurrentUserServiceRating->identifier), identifier)) { ret = (*pIteratorCB)(pCSUser, pParms, identifier, pVoid); count++; } if (!count) return CSError_RATING_MISSING; return ret; } /* L A B E L R E Q U E S T G E N E R A T O R S */ #define LCURLYSTR "{" #define RCURLYSTR "}" PRIVATE char * Completenesses[] = {"minimal", "short", "full", "signed"}; /* keep in synch with CSCompleteness_t */ PRIVATE char * Options[] = {"signed", "normal", "tree", "generic+tree"}; /* keep in synch with CSOption_t */ PUBLIC char * CSUser_acceptLabels(CSUser_t * pCSUser, CSCompleteness_t completeness) { HTChunk * pChunk = HTChunk_new(0x40); HTList * userServices = CSUser_getCSUserData(pCSUser)->userServices; UserService_t * pUserService; int serviceNo = 0; /* just needed to space out URLs */ HTChunk_puts(pChunk, "Protocol-Request: "LCURLYSTR"PICS-1.1 "LCURLYSTR"params "); HTChunk_puts(pChunk, Completenesses[completeness]); HTChunk_puts(pChunk, " "LCURLYSTR"services "); while ((pUserService = (UserService_t *) HTList_nextObject(userServices))){ if (serviceNo) HTChunk_puts(pChunk, " "); HTChunk_puts(pChunk, "\""); HTChunk_puts(pChunk, SVal_value(&pUserService->rating_service)); HTChunk_puts(pChunk, "\""); serviceNo++; } HTChunk_puts(pChunk, RCURLYSTR RCURLYSTR RCURLYSTR"\r\n"); return HTChunk_toCString(pChunk); } PUBLIC char * CSUser_getLabels(CSUser_t * pCSUser, char * url, CSOption_t option, CSCompleteness_t completeness) { HTChunk * pChunk = HTChunk_new(0x40); HTList * userServices = CSUser_getCSUserData(pCSUser)->userServices; UserService_t * pUserService; int serviceNo = 0; /* just needed to space out URLs */ char * escapedURL; char * bureau; if (!(bureau = CSUser_bureau(pCSUser))) return 0; /* HTChunk_puts(pChunk, "GET "); */ /* escapedURL = HTParse(bureau, 0, PARSE_PATH|PARSE_ANCHOR|PARSE_PUNCTUATION); HTChunk_puts(pChunk, escapedURL); HT_FREE(escapedURL); */ HTChunk_puts(pChunk, bureau); HTChunk_puts(pChunk, "?opt="); HTChunk_puts(pChunk, Options[option]); HTChunk_puts(pChunk, "&format="); HTChunk_puts(pChunk, Completenesses[completeness]); HTChunk_puts(pChunk, "&u="); escapedURL = HTEscape(url, URL_XPALPHAS); HTChunk_puts(pChunk, escapedURL); HT_FREE(escapedURL); while ((pUserService = (UserService_t *) HTList_nextObject(userServices))){ HTChunk_puts(pChunk, "&s="); /* HTChunk_puts(pChunk, "\""); */ escapedURL = HTEscape(SVal_value(&pUserService->rating_service), URL_XPALPHAS); HTChunk_puts(pChunk, escapedURL); HT_FREE(escapedURL); /* HTChunk_puts(pChunk, "\""); */ serviceNo++; } /* HTChunk_puts(pChunk, " HTTP/1.0\r\n"); */ return HTChunk_toCString(pChunk); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSUser.html������������������������������������������������������������������0100644�0000764�0000144�00000010367�06532631106�016415� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>User parser for libpics</TITLE> </HEAD> <BODY> <H1> User parser </H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module provides the interface to <A HREF="CSUser.c">CSUser.c</A>. Labels are parsed from strings (see <A HREF="CSParse.html">CSParse.html</A>). These labels may then be kept in a CSUser_t structure for inspection by the application or compared to the values in a CSLabel_t structure (see <A HREF="CSLL.html">CSLL.html</A>). <PRE> #ifndef CSUSER_H #define CSUSER_H </PRE> <P> <A NAME="CSUserTC"></A> <H3> State Change Enumeration </H3> <P> Call to the <A HREF="CSParse.html#TargetChangeCallback">TargetChangeCallback</A> will have one of the following values. <PRE> typedef enum { CSUserTC_USER = 1, CSUserTC_SERVICE, CSUserTC_RLIST, CSUserTC_RATING, CSUserTC_RANGE, CSUserTC_COUNT } CSUserTC_t; </PRE> <H3> Data shell </H3> <P> All PICS user data is stored in a CSUserData_t <PRE> typedef struct CSUserData_s CSUserData_t; </PRE> <H3> TargetChangeCallback </H3> <P> As the label is parsed, it will call the assigned TargetChangeCallback as it passes from state to state. <PRE> typedef StateRet_t UserTargetCallback_t(CSUser_t * pCSUser, CSParse_t * pCSParse, CSUserTC_t target, BOOL closed, void * pVoid); </PRE> <H3> ErrorHandler </H3> <P> All parsing error will be passed to the Apps UserErrorHandler for user display or automatic dismissal. <PRE> typedef StateRet_t UserErrorHandler_t(CSUser_t * pCSUser, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode); </PRE> <H3> Construction/Destruction </H3> <P> These methods allow the user to create and get access to both the user and the state. CSUsers may be cloned so that one saves state while another continues to iterate or parse. The states mus all be freed. User data will only be freed after all the CSUsers that refer to it are deleted. <PRE> extern CSParse_t * CSParse_newUser(void); extern BOOL CSParse_deleteUser(CSParse_t *); extern CSUser_t * CSParse_getUser(CSParse_t * me); extern char * CSUser_name(CSUser_t * pCSUser); extern BOOL CSUser_checkPassword(CSUser_t * pCSUser, char * password); extern char * CSUser_bureau(CSUser_t * pCSUser); extern void CSUser_free(CSUser_t * me); extern Range_t * CSUser_getUserRatingRange(CSUser_t * pCSUser); extern char * CSUser_getRatingStr(CSUser_t * pCSUser); </PRE> <H3> Iterating methods </H3> <H3> Callback function </H3> <P> The Iterators are passed a callback function to be called for each matching element. For instance, when iterating through ranges, the callback function is called once for each range, or, if a match is requested, only for the matching range. <PRE> typedef CSError_t CSUser_callback_t(CSUser_t *, State_Parms_t *, const char *, void * pVoid); typedef CSError_t CSUser_iterator_t(CSUser_t *, CSUser_callback_t *, State_Parms_t *, const char *, void * pVoid); extern CSUser_iterator_t CSUser_iterateServices; extern CSUser_iterator_t CSUser_iterateServiceRatings; extern CSError_t CSCheckLabel_checkLabelAndUser(CSLabel_t * pCSLabel, CSUser_t * pCSUser); extern CSError_t CSCheckLabel_parseAndValidateLabelStr(const char * label, CSUser_t * pCSUser); </PRE> <P> <A NAME="CSUser_acceptLabels"></A> <H2> CSUser_acceptLabels </H2> <P> get a malloced HTTP Protocol-Request string requesting PICS labels for all services defined for pCSUser <PRE> extern char * CSUser_acceptLabels(CSUser_t * pCSUser, CSCompleteness_t completeness); </PRE> <P> <A NAME="CSUser_getLabels"></A> <H2> CSUser_getLabels </H2> <P> get a malloced HTTP GET string requesting PICS labels for all services defined for a user <PRE> extern char * CSUser_getLabels(CSUser_t * pCSUser, char * url, CSOption_t option, CSCompleteness_t completeness); </PRE> <P> <A NAME="CSUser_postLabels"></A> <H2> CSUser_postLabels </H2> <P> get a malloced HTTP POST string requesting PICS labels for all services defined for a user <PRE> extern char * CSUser_postLabels(CSUser_t * pCSUser, char * url, CSOption_t option, CSCompleteness_t completeness); </PRE> <PRE> #endif /* CSUser_H */ </PRE> <P> End of Declaration </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSUserSt.html����������������������������������������������������������������0100644�0000764�0000144�00000003372�06136006030�016712� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>User data internals</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 1-Feb-1996 --> <!-- Changed by: Eric Prud'hommeaux, 26-Mar-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>User data internals</H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module defines the User data structures read by <A HREF="CSParser.c">CSParser.c</A>. Applications will include this if they want direct access to the data (as opposed to using iterator methods). <P> The following data structures relate to the data encapsulated in a PICS User. Each data type correlates to a time in the BNF for the user description. <PRE> #ifndef CSUSERST_H #define CSUSERST_H </PRE> <PRE> typedef struct { SVal_t identifier; BVal_t missing_scale; BVal_t observe_dates; HTList * ranges; } UserServiceRating_t; typedef struct { FVal_t version; SVal_t rating_system; SVal_t rating_service; BVal_t missing_service; BVal_t missing_scale; BVal_t observe_dates; HTList * userServiceRatings; } UserService_t; struct CSUserData_s { FVal_t version; SVal_t user_name; SVal_t password; BVal_t super_user; FVal_t minimum_services; BVal_t missing_service; BVal_t missing_scale; BVal_t observe_dates; SVal_t bureau; HTList * proxies; HTList * userServices; }; </PRE> --------------these provide access to the above data types-------------- <PRE> extern CSUserData_t * CSUser_getCSUserData(CSUser_t * me); extern UserService_t * CSUser_getUserService(CSUser_t * pCSUser); extern UserServiceRating_t * CSUser_getUserServiceRating(CSUser_t * pCSUser); </PRE> <PRE> #endif /* CSUSERST_H */ </PRE> End of Declaration </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSUsrLst.c�������������������������������������������������������������������0100644�0000764�0000144�00000011776�06664352704�016230� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* CSUsrLst.c */ /* Library include files */ #include "WWWLib.h" #include "CSLApp.h" struct _HTStream { const HTStreamClass * isa; HTRequest * request; HTStream * target; HTChunk * buffer; HTEOLState EOLstate; /* HTList * URLs; */ }; HTList * UserList = 0; typedef struct { char * name; char * url; } UserListStruct_t; PRIVATE BOOL CSUserList_addLine(HTStream * me) { UserListStruct_t * newEl; char * pURL; char * end; end = strrchr(HTChunk_data(me->buffer), ' '); pURL = end + 1; while (*(end-1) == ' ') end--; *end = 0; if ((newEl = (UserListStruct_t *)HT_CALLOC(1, sizeof(UserListStruct_t))) == NULL) HT_OUTOFMEM("UserListStruct_t"); StrAllocCopy(newEl->name, HTChunk_data(me->buffer)); StrAllocCopy(newEl->url, pURL); /* HTList_addObject(me->URLs, (void *)pURL); */ HTList_addObject(UserList, (void *)newEl); return YES; } PUBLIC BOOL CSUserList_destroy(void) { char * userName; while ((userName = (char *) HTList_removeLastObject(UserList))) HT_FREE(userName); HTList_delete(UserList); UserList = NULL; return YES; } PUBLIC char * CSUserList_findURL(char * username) { HTList * cur = UserList; UserListStruct_t * pUser; while ((pUser = (UserListStruct_t *) HTList_nextObject(cur))) { if (!strcasecomp(username, pUser->name)) return pUser->url; } return 0; } PUBLIC int CSUserList_enum(CSUserListCallback* pCallback, void * pVoid) { HTList * cur = UserList; UserListStruct_t * pUser; int retVal, i = 0; while ((pUser = (UserListStruct_t *) HTList_nextObject(cur))) { if ((retVal = (*pCallback)(pUser->name, pUser->url, i, pVoid)) != CSError_OK) return (retVal); i++; } return 0; } /* ** Folding is either of CF LWS, LF LWS, CRLF LWS */ PRIVATE int CSUserList_put_block (HTStream * me, const char * b, int l) { while (l > 0) { if (me->EOLstate == EOL_FCR) { if (*b == LF) /* CRLF */ me->EOLstate = EOL_FLF; else if (isspace((int) *b)) /* Folding: CR SP */ me->EOLstate = EOL_DOT; else { /* New line */ CSUserList_addLine(me); me->EOLstate = EOL_BEGIN; HTChunkClear(me->buffer); continue; } } else if (me->EOLstate == EOL_FLF) { if (isspace((int) *b)) /* Folding: LF SP or CR LF SP */ me->EOLstate = EOL_DOT; else { /* New line */ CSUserList_addLine(me); me->EOLstate = EOL_BEGIN; HTChunkClear(me->buffer); continue; } } else if (me->EOLstate == EOL_DOT) { if (isspace((int) *b)) { me->EOLstate = EOL_BEGIN; HTChunkPutc(me->buffer, ' '); } else { CSUserList_addLine(me); me->EOLstate = EOL_BEGIN; HTChunkClear(me->buffer); continue; } } else if (*b == CR) { me->EOLstate = EOL_FCR; } else if (*b == LF) { me->EOLstate = EOL_FLF; /* Line found */ } else HTChunkPutc(me->buffer, *b); l--; b++; } if (HTChunk_size(me->buffer)) CSUserList_addLine(me); return HT_OK; } PRIVATE int CSUserList_put_character (HTStream * me, char c) { return CSUserList_put_block(me, &c, 1); } PRIVATE int CSUserList_put_string (HTStream * me, const char * s) { return CSUserList_put_block(me, s, (int) strlen(s)); } PRIVATE int CSUserList_flush (HTStream * me) { return (*me->target->isa->flush)(me->target); } PRIVATE int CSUserList_free (HTStream * me) { int status = HT_OK; if (me->target) { if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK) return HT_WOULD_BLOCK; } HTTRACE(APP_TRACE, "Rules....... FREEING....\n"); HTChunkFree(me->buffer); /* HTList_delete(me->URLs); */ HT_FREE(me); return status; } PRIVATE int CSUserList_abort (HTStream * me, HTList * e) { int status = HT_ERROR; if (me->target) status = (*me->target->isa->abort)(me->target, e); HTTRACE(APP_TRACE, "Rules....... ABORTING...\n"); HTChunkFree(me->buffer); /* HTList_delete(me->URLs); */ HT_FREE(me); return status; } /* Structured Object Class ** ----------------------- */ PRIVATE const HTStreamClass CSUserListClass = { "URLListCollector", CSUserList_flush, CSUserList_free, CSUserList_abort, CSUserList_put_character, CSUserList_put_string, CSUserList_put_block }; PUBLIC HTStream * CSUserLists (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream) { HTStream * me; if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL) HT_OUTOFMEM("CSUserLists"); me->isa = &CSUserListClass; me->request = request; me->target = output_stream; me->buffer = HTChunkCreate(512); /* me->URLs = HTList_new(); */ if (!UserList) UserList = HTList_new(); me->EOLstate = EOL_BEGIN; /* if (HTRequest_context(request)) *((HTList **)HTRequest_context(request)) = me->URLs; */ return me; } ��libwww/PICS-client/src/CSUsrLst.html����������������������������������������������������������������0100644�0000764�0000144�00000002237�06136006033�016723� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>UserList for libpics</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 1-Feb-1996 --> <NEXTID N="z11"> </HEAD> <BODY> <H1>UserList</H1> <PRE> /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> This module provides the interface to <A HREF="CSUsrLst.c">CSUsrLst.c</A>. UserLists are a list of users and the URLs where their profiles are kept. UserLists are read from a stream. <PRE> #ifndef CSUSRLST_H #define CSUSRLST_H </PRE> <H3>UserList element</H3> <PRE> typedef struct { char * user; char * URL; } UserListEl_t; </PRE> <H3>Methods</H3> Getting at the UserList <PRE> extern HTList * CSUserList_get(void); extern BOOL CSUserList_destroy(void); extern char * CSUserList_findURL(char * username); </PRE> Stream to read the UserList <PRE> extern HTStream * CSUserLists (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream); </PRE> <PRE> #endif /* CSUSRLST_H */ </PRE> End of Declaration </BODY> </HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/Makefile.am������������������������������������������������������������������0100644�0000764�0000144�00000002147�07142510565�016417� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. lib_LTLIBRARIES = libpics.la SUBDIRS = windows INCLUDES = -I$(srcdir)/../../Library/src # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources libpics_la_SOURCES = \ CSChkLab.c CSStream.c CSKwik.c \ CSLabel.c CSLLOut.c CSLLURLs.c \ CSMacRed.c CSMem.c CSApp.c \ CSParse.c CSUsrLst.c CSUser.c BUILT_SOURCES = \ CSLApp.h CSLUtils.h \ CSLL.h CSLLSt.h \ CSMR.h CSMRSt.h \ CSUser.h CSUserSt.h \ CSParse.h CSUsrLst.h DOCS := $(wildcard *.html) EXTRA_DIST = \ $(BUILT_SOURCES) \ $(DOCS) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/Makefile���������������������������������������������������������������������0100644�0000764�0000144�00000035153�07405520573�016030� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ lib_LTLIBRARIES = libpics.la SUBDIRS = windows INCLUDES = -I$(srcdir)/../../Library/src # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html libpics_la_SOURCES = CSChkLab.c CSStream.c CSKwik.c CSLabel.c CSLLOut.c CSLLURLs.c CSMacRed.c CSMem.c CSApp.c CSParse.c CSUsrLst.c CSUser.c BUILT_SOURCES = CSLApp.h CSLUtils.h CSLL.h CSLLSt.h CSMR.h CSMRSt.h CSUser.h CSUserSt.h CSParse.h CSUsrLst.h DOCS := $(wildcard *.html) EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../.. CPPFLAGS = LDFLAGS = LIBS = -ldl libpics_la_LDFLAGS = libpics_la_LIBADD = libpics_la_OBJECTS = CSChkLab.lo CSStream.lo CSKwik.lo CSLabel.lo \ CSLLOut.lo CSLLURLs.lo CSMacRed.lo CSMem.lo CSApp.lo CSParse.lo \ CSUsrLst.lo CSUser.lo CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/CSApp.P .deps/CSChkLab.P .deps/CSKwik.P \ .deps/CSLLOut.P .deps/CSLLURLs.P .deps/CSLabel.P .deps/CSMacRed.P \ .deps/CSMem.P .deps/CSParse.P .deps/CSStream.P .deps/CSUser.P \ .deps/CSUsrLst.P SOURCES = $(libpics_la_SOURCES) OBJECTS = $(libpics_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu PICS-client/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libpics.la: $(libpics_la_OBJECTS) $(libpics_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libpics_la_LDFLAGS) $(libpics_la_OBJECTS) $(libpics_la_LIBADD) $(LIBS) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = PICS-client/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu PICS-client/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-libLTLIBRARIES install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-recursive all-am: Makefile $(LTLIBRARIES) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLApp.h���������������������������������������������������������������������0100644�0000764�0000144�00000012107�07405520457�015616� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* PICS library utilities ! PICS library utilities ! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* */ #ifndef CSLAPP_H #define CSLAPP_H #include "WWWCore.h" #include "CSLUtils.h" /* ( CSApp_error ) Return codes for those functions which do not return a pointer. */ /* typedef enum { CSApp_OK, CSCSApp_done, CSApp_memory, CSApp_file, CSApp_badHandle, CSApp_inconsistentParms, CSApp_badPassword, CSApp_internal, CSApp_allowed, CSApp_denied } CSApp_error; */ /* ( CSDisposition_callback ) - function to be called by the when Pics receives ratings for a requested document. The callback is called afer the PICS library has decided whether the user should be permitted access to the document. CSDisposition_criteria - when to call the app pReq - HTRequest which told libwww to load the document disposition - CSApp_OK if user should see document, CSApp_denied otherwise pVoid - void pointer passed to CSApp_registerApp or CSApp_registerReq. */ typedef enum { CSApp_neverCall = 0, CSApp_callOnBad = 1, CSApp_callOnGood = 2 } CSDisposition_criteria; typedef CSError_t (CSDisposition_callback)(HTRequest* pReq, CSLabel_t * pCSLabel, CSUser_t * pCSUser, CSError_t disposition, void * pVoid); /* CSApp.c maintains a list of LoadedUsers. More than one may be loaded at a time as different requests may be associated with different users. */ extern CSUser_t * CSLoadedUser_load(char * url, char * relatedName); extern BOOL CSLoadedUser_add(CSUser_t * pCSUser, char * url); extern BOOL CSLoadedUser_remove(CSUser_t * pCSUser); extern BOOL CSLoadedUser_find(char * name); extern BOOL CSLoadedUser_deleteAll (void); /* CSLoadedUser_enum - used to iterate through the loaded users pCallback - application callback to call with each user pVoid - passed through to callback */ typedef CSError_t (CSLoadedUserCallback)(CSUser_t * pCSUser, int index, void * pVoid); extern int CSLoadedUser_enum(CSLoadedUserCallback * pCallback, void * pVoid); /* . CSUserList . stores a list of PICS users and the URLs to their descritpion files ( CSUserList_load ) */ extern BOOL CSUserList_load(char * url, char * relatedName); /* ( CSUserList_enum ) used to iterate through the known users pCallback - application callback to call with each user pVoid - passed through to callback username url - where to find this user's profile index */ typedef CSError_t (CSUserListCallback)(char * username, char * url, int index, void * pVoid); extern int CSUserList_enum(CSUserListCallback * pCallback, void * pVoid); /* ! Registering Users ! */ extern BOOL CSApp_registerDefaultUserByName(char * user, char * password); extern CSUser_t * CSApp_registerUserByName(char * user, char * password); extern BOOL CSApp_setDefaultUser(CSUser_t * pCSUser); extern BOOL CSApp_checkUser(CSUser_t * pCSUser); extern BOOL CSApp_unregisterDefaultUser(void); extern BOOL CSApp_unregisterUser(CSUser_t * pCSUser); /* ! application functions ! ( CSApp_registerApp ) - register defaults for an application pCallback - callback to tell app the disposition of header check criteria - when the app wants the callback pUserCallback - called when a new user is loaded. It returns: o 1: load this user and set as default o 0: load this user o -1: get rid of it pVoid - passed through to callback CSApp_unregisterApp - unregister defaults and free associated memory */ typedef int (CSApp_userCallback)(CSUser_t * pCSUser, void * pVoid); extern BOOL CSApp_registerApp(CSDisposition_callback * pCallback, CSDisposition_criteria criteria, CSApp_userCallback * pUserCallback, void * pVoid); extern BOOL CSApp_unregisterApp(); /* ( CSApp_registerReq ) - override defaults for a particular request. It is advisable to use this function, rather than relying on the defaults as it eliminates many problems associated with multiple clients using the same dynamic library. Use CSApp_UnregisterReq for every call to CSApp_RegisterReq. pReq - pointer to request about to be sent. rest - see parameters for CSApp_RegisterApp() CSApp_UnregisterReq - free memory associated with call to CSApp_registerReq */ extern BOOL CSApp_registerReq(HTRequest* pReq, CSUser_t * pCSUser, CSDisposition_callback callback, CSDisposition_criteria criteria, void * pVoid); extern BOOL CSApp_unregisterReq(HTRequest* pReq); extern HTRequest * CSApp_originalRequest(HTRequest* pReq); /* ! MISC ! CSApp_disposition - tell PICS if a request is allowd */ extern BOOL CSApp_label(HTRequest * pReq, CSLabel_t * pCSLabel); /* CSApp_libraryVersion - get current version CSParseMachRead, CSParseUser, CSParseLabel - HTConverters for parsing to these objects CSLabel_output - spew canonical form of pCSLabel out to pStream */ char * CSApp_libraryVersion(void); extern HTConverter CSParseMachRead; extern HTConverter CSParseUser; extern HTConverter CSParseLabel; extern int CSLabel_output(CSLabel_t * pCSLabel, HTStream * pStream); /* */ #endif /* CSLAPP_H */ /* End of Declaration */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLUtils.h�������������������������������������������������������������������0100644�0000764�0000144�00000022122�07405520457�016174� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* PICS library utilities !PICS library utilities! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module defines the PICS library interface. */ #ifndef CSLUTILS_H #define CSLUTILS_H /* */ #include "HTUtils.h" #include "HTList.h" /* !Primitave Data Structures! BVal_t, FVal_t, SVal_t, DVal_t - hold a boolean, float (not double), string, or date value (respectively). These data structures are designed so that they may be initialized to all 0s (and hence included directly within larger structures, rather than allocated and initialized individually). You must, however, call their clear method to deallocate any additional memory used to store the actual value once they have been initialized. The following methods are defined on all four data types ("X" should be either "B" "F" "S" or "D", XType is "BOOL" "float" "char *" or "char *", respectively): o BOOL XVal_readVal(XVal_t, char *), etc. - convert the string to a value of the specified type. Returns TRUE on success, FALSE on failure. If successful, may allocate additional storage. o BOOL XVal_initialized(XVal_t) - Returns TRUE if the value has been initialized (hence contains a legitimate value and may have additional storage allocated internally), FALSE otherwise. o XType XVal_value(XVal_t) -- Returns the value stored in the object. o void XVal_clear(XVal_t) -- Mark the object as uninitialized and release any memory associated with the value currently stored in the object. .BVal. - Boolean value. (definition) */ typedef struct { enum {BVal_UNINITIALIZED = 0,BVal_YES = 1, BVal_INITIALIZED = 2} state; } BVal_t; extern BOOL BVal_readVal(BVal_t * pBVal, const char * valueStr); extern BOOL BVal_initialized(const BVal_t * pBVal); extern BOOL BVal_value(const BVal_t * pBVal); extern void BVal_clear(BVal_t * pBVal); /* (additional methods) o void set - assign value */ extern void BVal_set(BVal_t * pBVal, BOOL value); /* .FVal. - Float value with negative and positive infinity values (definition) */ typedef struct { float value; enum {FVal_UNINITIALIZED = 0, FVal_VALUE = 1, FVal_NEGATIVE_INF = 2, FVal_POSITIVE_INF = 3} stat; } FVal_t; extern BOOL FVal_readVal(FVal_t * pFVal, const char * valueStr); extern BOOL FVal_initialized(const FVal_t * pFVal); extern float FVal_value(const FVal_t * pFVal); extern void FVal_clear(FVal_t * pFVal); /* (additional methods) o void set - assign a float value o void setInfinite - set to negative or positive infinity o BOOL isZero - see if value is zero o int isInfinite - -1 or 1 for negative or positive infinity o BOOL nearerZero - see if check is nearer zero than check o FVal_t FVal_minus - subtract small from big o char * FVal_toStr - convert to allocated CString, caller must free */ extern void FVal_set(FVal_t * pFVal, float value); extern void FVal_setInfinite(FVal_t * pFVal, BOOL negative); extern BOOL FVal_isZero(const FVal_t * pFVal); extern int FVal_isInfinite(const FVal_t * pFVal); extern BOOL FVal_nearerZero(const FVal_t * pRef, const FVal_t * pCheck); extern FVal_t FVal_minus(const FVal_t * pBig, const FVal_t * pSmall); extern char * FVal_toStr(FVal_t * pFVal); /* (initializers) FVal intializers may be used when creating an FVal eg. FVal_t localFVal = FVal_NEGATIVE_INF; */ #define FVal_NEW_UNINITIALIZED {(float) 0.0, FVal_UNINITIALIZED} #define FVal_NEW_NEGATIVE_INF {(float) 0.0, FVal_NEGATIVE_INF} #define FVal_NEW_POSITIVE_INF {(float) 0.0, FVal_POSITIVE_INF} #define FVal_NEW_ZERO {(float) 0.0, FVal_VALUE} /* .SVal. - String value. (definition) */ typedef struct { char * value; BOOL initialized; } SVal_t; extern BOOL SVal_readVal(SVal_t * pSVal, const char * valueStr); extern BOOL SVal_initialized(const SVal_t * pSVal); extern char * SVal_value(const SVal_t * pSVal); extern void SVal_clear(SVal_t * pSVal); /* .DVal. - Date value. (definition) */ typedef struct { char * value; /* keep the string around for debugging and output */ BOOL initialized; int year; int month; int day; int hour; int minute; int timeZoneHours; int timeZoneMinutes; } DVal_t; extern BOOL DVal_readVal(DVal_t * pDVal, const char * valueStr); extern BOOL DVal_initialized(const DVal_t * pDVal); extern char * DVal_value(const DVal_t * pDVal); extern void DVal_clear(DVal_t * pDVal); /* (additional methods) o int compare - -1 or 1 for a before or after b, 0 for equivilence */ extern int DVal_compare(const DVal_t * a, const DVal_t * b); /* .Range. - Range of FVals. (definition) */ typedef struct { FVal_t min; FVal_t max; } Range_t; /* (methods) o rangeToStr - print range to malloced string. This string must be freed by caller o gap - find the difference between a and b */ extern char * Range_toStr(Range_t * pRange); extern FVal_t Range_gap(Range_t * a, Range_t * b); /* (initializers) */ #define Range_NEW_UNINITIALIZED {FVal_NEW_UNINITIALIZED, \ FVal_NEW_UNINITIALIZED} /* !Parser! .CSParse_parseChunk. CSParse_t - ephemeral parser data, the CSParse structure is defined in CSParse.html. CSDoMore_t - tells caller whether parseChunk expects more or encountered an error */ typedef struct CSParse_s CSParse_t; typedef enum {CSDoMore_more, CSDoMore_done, CSDoMore_error} CSDoMore_t; extern CSDoMore_t CSParse_parseChunk (CSParse_t * pCSParse, const char * ptr, int len, void * pVoid); /* !Parse callbacks! During parsing, the parser makes callbacks to tell the caller that an error has been encountered or that the parser is reading into a new data structure. .CSParseTC. The TC, or TargetChange, type is a way of itemizing the different targets in a parsable object. It is used in the TargetChangeCallback */ typedef unsigned int CSParseTC_t; /* .StateRet. */ typedef enum {StateRet_OK = 0, StateRet_DONE = 1, StateRet_WARN = 0x10, StateRet_WARN_NO_MATCH = 0x11, StateRet_WARN_BAD_PUNCT = 0x12, StateRet_ERROR = 0x100, StateRet_ERROR_BAD_CHAR = 0x101 } StateRet_t; /* .TargetChangeCallback. These callbacks keep the caller abreast of what type of object the parser is currently reading. TargetChangeCallbacks are made whenever the parser starts or finishes reading one of these objects. The actual values of targetChange, and what objects they correlate to, can be found in the modules for the object being parsed. o CSLL.html for PICS labels. o CSMR.html for machine-readable service descriptions. o CSUser.html for PICS user profiles. Example: When reading a CSLabel, the callback will be called with pTargetObject = CSLLTC_SERVICE when reading a service, CSLLTC_LABEL when reading a label, etc. */ typedef struct TargetObject_s TargetObject_t; typedef StateRet_t TargetChangeCallback_t(CSParse_t * pCSParse, TargetObject_t * pTargetObject, CSParseTC_t targetChange, BOOL closed, void * pVoid); /* .ParseErrorHandler. */ typedef StateRet_t ParseErrorHandler_t(CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode); /* .CSList_acceptLabels. get a malloced HTTP Protocol-Request string requesting PICS labels for all services in pServiceList */ typedef enum {CSCompleteness_minimal, CSCompleteness_short, CSCompleteness_full, CSCompleteness_signed} CSCompleteness_t; extern char * CSList_acceptLabels(HTList * pServiceList, CSCompleteness_t completeness); /* .CSList_getLabels. get a malloced HTTP GET string requesting PICS labels for all services in pServiceList */ typedef enum {CSOption_generic, CSOption_normal, CSOption_tree, CSOption_genericTree} CSOption_t; extern char * CSList_getLabels(HTList * pServiceList, CSOption_t option, CSCompleteness_t completeness); /* .CSList_postLabels. get a malloced HTTP GET string requesting PICS labels for all services in pServiceList */ extern char * CSList_postLabels(HTList * pServiceList, char * url, CSOption_t option, CSCompleteness_t completeness); /* .individual parsers. .CSLabel. PICS label list */ typedef struct CSLabel_s CSLabel_t; /* .CSUser. PICS user profile */ typedef struct CSUser_s CSUser_t; /* .CSMachRead. PICS machine readable system description */ typedef struct CSMachRead_s CSMachRead_t; /* for reading label error codes */ typedef enum { labelError_NA = 0, labelError_NO_RATINGS, labelError_UNAVAILABLE, labelError_DENIED, labelError_NOT_LABELED, labelError_UNKNOWN } LabelErrorCode_t; /* State_Parms - obsolete parameter exchange for iterators */ typedef struct State_Parms_s State_Parms_t; typedef enum { CSError_OK = 0, CSError_YES = 0, CSError_NO = 1, CSError_BUREAU_NONE, CSError_RATING_VALUE, CSError_RATING_RANGE, CSError_RATING_MISSING, CSError_SINGLELABEL_MISSING, CSError_LABEL_MISSING, CSError_SERVICE_MISSING, CSError_CATEGORY_MISSING, CSError_ENUM_MISSING, CSError_BAD_PARAM, CSError_BAD_DATE, CSError_SERVICE_NONE, CSError_RATING_NONE, CSError_APP } CSError_t; /* */ #endif /* CSLUTILS_H */ /* End of Declaration */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLL.h�����������������������������������������������������������������������0100644�0000764�0000144�00000007463�07405520457�015302� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Label parser for libpics ! Label parser ! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides the interface to CSLabel.c. Labels are parsed from strings (see CSParse.html). These labels may then be kept in a CSLabel_t structure for inspection by the application or compared to the values in a CSUser_t structure (see CSUser.html). */ #ifndef CSLL_H #define CSLL_H /* ( State Change Enumeration ) Call to the TargetChangeCallback will have one of the following values. */ typedef enum { CSLLTC_LIST = 1, CSLLTC_SERVICE, CSLLTC_LABEL, CSLLTC_LABTREE, CSLLTC_SINGLE, CSLLTC_RATING, CSLLTC_RANGE, CSLLTC_AWKWARD, CSLLTC_NORAT, CSLLTC_SRVERR, CSLLTC_LABERR, CSLLTC_EXTEN, CSLLTC_EXTDATA, CSLLTC_COUNT } CSLLTC_t; /* ( Data shell ) All PICS label data is stored in a CSLLData_t */ typedef struct CSLLData_s CSLLData_t; #define CSLabel_labelNumber(S) (S->currentLabelNumber) /* ( TargetChangeCallback ) As the label is parsed, it will call the assigned TargetChangeCallback as it passes from state to state. */ typedef StateRet_t LabelTargetCallback_t(CSLabel_t * pCSLabel, CSParse_t * pCSParse, CSLLTC_t target, BOOL closed, void * pVoid); /* ( ErrorHandler ) All parsing error will be passed to the Apps LLErrorHandler for user display or automatic dismissal. */ typedef StateRet_t LLErrorHandler_t(CSLabel_t * pCSLabel, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode); /* ( Construction/Destruction ) These methods allow the user to create and get access to both the label and the state. CSLabels may be cloned so that one saves state while another continues to iterate or parse. The states mus all be freed. Label data will only be freed after all the CSLabels that refer to it are deleted. */ extern CSParse_t * CSParse_newLabel( LabelTargetCallback_t * pLabelTargetCallback, LLErrorHandler_t * pLLErrorHandler); extern BOOL CSParse_deleteLabel(CSParse_t *); extern CSLabel_t * CSParse_getLabel(CSParse_t * me); extern CSLabel_t * CSLabel_copy(CSLabel_t * old); extern void CSLabel_free(CSLabel_t * me); extern char * CSLabel_getServiceName(CSLabel_t * pCSLabel); extern int CSLabel_getLabelNumber(CSLabel_t * pCSLabel); extern char * CSLabel_getRatingName(CSLabel_t * pCSLabel); extern char * CSLabel_getRatingStr(CSLabel_t * pCSLabel); extern Range_t * CSLabel_getLabelRatingRange(CSLabel_t * pCSLabel); /* ( Iterating methods ) ( Callback function ) The Iterators are passed a callback function to be called for each matching element. For instance, when iterating through ranges, the callback function is called once for each range, or, if a match is requested, only for the matching range. */ typedef CSError_t CSLabel_callback_t(CSLabel_t *, State_Parms_t *, const char *, void * pVoid); typedef CSError_t CSLabel_iterator_t(CSLabel_t *, CSLabel_callback_t *, State_Parms_t *, const char *, void * pVoid); /* ( Iterators ) */ extern CSLabel_iterator_t CSLabel_iterateServices; extern CSLabel_iterator_t CSLabel_iterateLabels; extern CSLabel_iterator_t CSLabel_iterateSingleLabels; extern CSLabel_iterator_t CSLabel_iterateLabelRatings; /* ( Range Utilities ) These funtions allow the application to test the value of a given user parameter against those in the label. */ extern HTList * CSLLData_getAllSingleLabels(CSLabel_t * pCSLabel); extern FVal_t CSLabel_ratingsIncludeFVal(CSLabel_t * pCSLabel, FVal_t * userValue); extern FVal_t CSLabel_ratingsIncludeRange(CSLabel_t * pCSLabel, Range_t * pUserRange); extern FVal_t CSLabel_ratingsIncludeRanges(CSLabel_t * pCSLabel, HTList * userRanges); /* */ #endif /* CSLL_H */ /* End of Declaration */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSLLSt.h���������������������������������������������������������������������0100644�0000764�0000144�00000006152�07405520457�015603� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Label data internals !Label data internals! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module defines the Label data structures read by CSParser.c. Applications will include this if they want direct access to the data (as opposed to using iterator methods). The following data structures relate to the data encapsulated in a PICS Label. Each data type correlates to a time in the BNF for the label description. See PICS Labels spec for more details. */ #ifndef CSLLST_H #define CSLLST /* .Label Error. combination of: o label-error o service-error o service-info 'no-ratings' */ typedef struct { LabelErrorCode_t errorCode; HTList * explanations; /* HTList of (char *) */ } LabelError_t; /* .Extension Data. called data in the BNF */ typedef struct ExtensionData_s ExtensionData_t; struct ExtensionData_s { char * text; BOOL quoted; HTList * moreData; ExtensionData_t * pParentExtensionData; }; /* .Extension. option 'extension' */ typedef struct { BOOL mandatory; SVal_t url; HTList * extensionData; } Extension_t; /* .Label Options. called option in the BNF */ typedef struct LabelOptions_s LabelOptions_t; struct LabelOptions_s { DVal_t at; SVal_t by; SVal_t complete_label; BVal_t generic; SVal_t fur; /* for is a reserved word */ SVal_t MIC_md5; DVal_t on; SVal_t signature_PKCS; DVal_t until; HTList * comments; HTList * extensions; /* find service-level label options */ LabelOptions_t * pParentLabelOptions; }; /* .Rating. called rating in the BNF */ typedef struct { SVal_t identifier; FVal_t value; HTList * ranges; } LabelRating_t; /* .SingleLabel. called single-label in the BNF */ typedef struct { LabelOptions_t * pLabelOptions; HTList * labelRatings; } SingleLabel_t; /* .Label. also called label */ typedef struct { LabelError_t * pLabelError; HTList * singleLabels; SingleLabel_t * pSingleLabel; } Label_t; /* .ServiceInfo. called service-info in the BNF */ typedef struct { SVal_t rating_service; LabelOptions_t * pLabelOptions; LabelError_t * pLabelError; HTList * labels; } ServiceInfo_t; /* .CSLLData. The whole shebang. */ struct CSLLData_s { FVal_t version; LabelError_t * pLabelError; HTList * serviceInfos; /* some usefull flags */ BOOL complete; BOOL hasTree; /* so it can't make a list of labels */ int mandatoryExtensions; }; /* --------------these need the above structures-------------- */ extern CSLLData_t * CSLabel_getCSLLData(CSLabel_t * me); extern LabelError_t * CSLabel_getLabelError(CSLabel_t * pCSLabel); extern LabelOptions_t * CSLabel_getLabelOptions(CSLabel_t * pCSLabel); extern ServiceInfo_t * CSLabel_getServiceInfo(CSLabel_t * pCSLabel); extern Label_t * CSLabel_getLabel(CSLabel_t * pCSLabel); extern SingleLabel_t * CSLabel_getSingleLabel(CSLabel_t * pCSLabel); extern LabelRating_t * CSLabel_getLabelRating(CSLabel_t * pCSLabel); /* */ #endif /* CSLLST_H */ /* End of Declaration */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSMR.h�����������������������������������������������������������������������0100644�0000764�0000144�00000005750�07405520457�015306� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Machine-readable parser for libpics !Machine-readable parser! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides the interface to CSMacRed.c. Labels are parsed from strings (see CSParse.html). These labels may then be kept in a CSMachRead_t structure for inspection by the application. */ #ifndef CSMR_H #define CSMR_H /* (State Change Enumeration) Call to the TargetChangeCallback will have one of the following values. */ typedef enum { CSMRTC_MACHREAD = 1, CSMRTC_VERSION, CSMRTC_SYSTEM, CSMRTC_SERVICE, CSMRTC_ICON, CSMSRC_NAME, CSMSRC_VALUE, CSMSRC_DESC, CSMRTC_DEF, CSMRTC_MIN, CSMRTC_MAX, CSMRTC_MULTI, CSMRTC_UNORD, CSMRTC_INT, CSMRTC_LABL, CSMRTC_CAT, CSMRTC_TRANS, CSMRTC_ENUM, CSMRTC_COUNT } CSMRTC_t; /* (Data shell) All PICS Machine-readable data is stored in a CSMRData_t */ typedef struct CSMachReadData_s CSMachReadData_t; /* (TargetChangeCallback) As the label is parsed, it will call the assigned TargetChangeCallback as it passes from state to state. */ typedef StateRet_t MachReadTargetCallback_t(CSMachRead_t * pCSMachRead, CSParse_t * pCSParse, CSMRTC_t target, BOOL closed, void * pVoid); /* (ErrorHandler) All parsing error will be passed to the Apps MRErrorHandler for user display or automatic dismissal. */ typedef StateRet_t MRErrorHandler_t(CSMachRead_t * pCSMachRead, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode); /* (Construction/Destruction) These methods allow the user to create and get access to both the description and the state. CSMachReads may be cloned so that one saves state while another continues to iterate or parse. The states must all be freed. description data will only be freed after all the CSMachReads that refer to it are deleted. */ extern CSParse_t * CSParse_newMachRead( MachReadTargetCallback_t * pMachReadTargetCallback, MRErrorHandler_t * pMRErrorHandler); extern BOOL CSParse_deleteMachRead(CSParse_t *); extern CSMachRead_t * CSParse_getMachRead(CSParse_t * me); extern char * CSMachRead_getSystem(CSMachRead_t * pCSMachRead); extern char * CSMachRead_getService(CSMachRead_t * pCSMachRead); /* (Iterating methods) (Callback function) The Iterators are passed a callback function to be called for each matching element. For instance, when iterating through ranges, the callback function is called once for each range, or, if a match is requested, only for the matching range. */ typedef CSError_t CSMachRead_callback_t(CSMachRead_t *, State_Parms_t *, const char *, void * pVoid); typedef CSError_t CSMachRead_iterator_t(CSMachRead_t *, CSMachRead_callback_t *, State_Parms_t *, const char *, void * pVoid); extern CSMachRead_iterator_t CSMachRead_iterateCategories; extern CSMachRead_iterator_t CSMachRead_iterateLabels; /* */ #endif /* CSMR_H */ /* End of Declaration */ ������������������������libwww/PICS-client/src/CSMRSt.h���������������������������������������������������������������������0100644�0000764�0000144�00000003421�07405520457�015606� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Machine-readable data internals !Machine-readable data internals! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module defines the Machine-readable data structures read by CSParser.c. Applications will include this if they want direct access to the data (as opposed to using iterator methods). The following data structures relate to the data encapsulated in a PICS description. Each data type correlates to a time in the BNF for the machine-readable description. See PICS Labels spec for more details. */ #ifndef CSMRST_H #define CSMRST_H /* */ typedef struct { SVal_t name; SVal_t description; FVal_t value; SVal_t icon; } MachRead_enum_t; typedef struct MachRead_category_s MachRead_category_t; struct MachRead_category_s { SVal_t transmit; SVal_t icon; SVal_t name; SVal_t description; FVal_t min; FVal_t max; BVal_t multi; BVal_t unord; BVal_t integer; BVal_t labeled; HTList * machRead_enums; HTList * machRead_categories; MachRead_category_t * pParent; }; struct CSMachReadData_s { FVal_t version; SVal_t system; SVal_t service; SVal_t icon; SVal_t name; SVal_t description; FVal_t min; FVal_t max; BVal_t multi; BVal_t unord; BVal_t integer; BVal_t labeled; HTList * machRead_categories; }; /* --------------these belong in CSMR.html-------------- */ extern CSMachReadData_t * CSMachRead_getCSMachReadData( CSMachRead_t * pCSMachRead); extern MachRead_category_t * CSMachRead_getMachReadCategory( CSMachRead_t * pCSMachRead); extern MachRead_enum_t * CSMachRead_getMachReadEnum( CSMachRead_t * pCSMachRead); /* */ #endif /* CSMRST_H */ /* End of Declaration */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSUser.h���������������������������������������������������������������������0100644�0000764�0000144�00000007442�07405520457�015706� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* User parser for libpics ! User parser ! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides the interface to CSUser.c. Labels are parsed from strings (see CSParse.html). These labels may then be kept in a CSUser_t structure for inspection by the application or compared to the values in a CSLabel_t structure (see CSLL.html). */ #ifndef CSUSER_H #define CSUSER_H /* ( State Change Enumeration ) Call to the TargetChangeCallback will have one of the following values. */ typedef enum { CSUserTC_USER = 1, CSUserTC_SERVICE, CSUserTC_RLIST, CSUserTC_RATING, CSUserTC_RANGE, CSUserTC_COUNT } CSUserTC_t; /* ( Data shell ) All PICS user data is stored in a CSUserData_t */ typedef struct CSUserData_s CSUserData_t; /* ( TargetChangeCallback ) As the label is parsed, it will call the assigned TargetChangeCallback as it passes from state to state. */ typedef StateRet_t UserTargetCallback_t(CSUser_t * pCSUser, CSParse_t * pCSParse, CSUserTC_t target, BOOL closed, void * pVoid); /* ( ErrorHandler ) All parsing error will be passed to the Apps UserErrorHandler for user display or automatic dismissal. */ typedef StateRet_t UserErrorHandler_t(CSUser_t * pCSUser, CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode); /* ( Construction/Destruction ) These methods allow the user to create and get access to both the user and the state. CSUsers may be cloned so that one saves state while another continues to iterate or parse. The states mus all be freed. User data will only be freed after all the CSUsers that refer to it are deleted. */ extern CSParse_t * CSParse_newUser(void); extern BOOL CSParse_deleteUser(CSParse_t *); extern CSUser_t * CSParse_getUser(CSParse_t * me); extern char * CSUser_name(CSUser_t * pCSUser); extern BOOL CSUser_checkPassword(CSUser_t * pCSUser, char * password); extern char * CSUser_bureau(CSUser_t * pCSUser); extern void CSUser_free(CSUser_t * me); extern Range_t * CSUser_getUserRatingRange(CSUser_t * pCSUser); extern char * CSUser_getRatingStr(CSUser_t * pCSUser); /* ( Iterating methods ) ( Callback function ) The Iterators are passed a callback function to be called for each matching element. For instance, when iterating through ranges, the callback function is called once for each range, or, if a match is requested, only for the matching range. */ typedef CSError_t CSUser_callback_t(CSUser_t *, State_Parms_t *, const char *, void * pVoid); typedef CSError_t CSUser_iterator_t(CSUser_t *, CSUser_callback_t *, State_Parms_t *, const char *, void * pVoid); extern CSUser_iterator_t CSUser_iterateServices; extern CSUser_iterator_t CSUser_iterateServiceRatings; extern CSError_t CSCheckLabel_checkLabelAndUser(CSLabel_t * pCSLabel, CSUser_t * pCSUser); extern CSError_t CSCheckLabel_parseAndValidateLabelStr(const char * label, CSUser_t * pCSUser); /* . CSUser_acceptLabels . get a malloced HTTP Protocol-Request string requesting PICS labels for all services defined for pCSUser */ extern char * CSUser_acceptLabels(CSUser_t * pCSUser, CSCompleteness_t completeness); /* . CSUser_getLabels . get a malloced HTTP GET string requesting PICS labels for all services defined for a user */ extern char * CSUser_getLabels(CSUser_t * pCSUser, char * url, CSOption_t option, CSCompleteness_t completeness); /* . CSUser_postLabels . get a malloced HTTP POST string requesting PICS labels for all services defined for a user */ extern char * CSUser_postLabels(CSUser_t * pCSUser, char * url, CSOption_t option, CSCompleteness_t completeness); /* */ #endif /* CSUser_H */ /* End of Declaration */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSUserSt.h�������������������������������������������������������������������0100644�0000764�0000144�00000003025�07405520457�016206� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* User data internals !User data internals! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module defines the User data structures read by CSParser.c. Applications will include this if they want direct access to the data (as opposed to using iterator methods). The following data structures relate to the data encapsulated in a PICS User. Each data type correlates to a time in the BNF for the user description. */ #ifndef CSUSERST_H #define CSUSERST_H /* */ typedef struct { SVal_t identifier; BVal_t missing_scale; BVal_t observe_dates; HTList * ranges; } UserServiceRating_t; typedef struct { FVal_t version; SVal_t rating_system; SVal_t rating_service; BVal_t missing_service; BVal_t missing_scale; BVal_t observe_dates; HTList * userServiceRatings; } UserService_t; struct CSUserData_s { FVal_t version; SVal_t user_name; SVal_t password; BVal_t super_user; FVal_t minimum_services; BVal_t missing_service; BVal_t missing_scale; BVal_t observe_dates; SVal_t bureau; HTList * proxies; HTList * userServices; }; /* --------------these provide access to the above data types-------------- */ extern CSUserData_t * CSUser_getCSUserData(CSUser_t * me); extern UserService_t * CSUser_getUserService(CSUser_t * pCSUser); extern UserServiceRating_t * CSUser_getUserServiceRating(CSUser_t * pCSUser); /* */ #endif /* CSUSERST_H */ /* End of Declaration */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSParse.h��������������������������������������������������������������������0100644�0000764�0000144�00000016070�07405520457�016037� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parser for libpics !Parser for libpics! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides the interface to CSParse.c. The parser is used to parse labels, machine-readable descriptions, and users. The application creates one of these and iteratevely calls CSParse_parseChunk until it returns a done or an error. */ #ifndef CSPARSE_H #define CSPARSE_H #include "CSLUtils.h" #include "HTChunk.h" /* .NowIn. tells CSParse where it is in the task of tokenizing */ typedef enum { NowIn_INVALID = 0, NowIn_NEEDOPEN, NowIn_ENGINE, NowIn_NEEDCLOSE, NowIn_END, NowIn_MATCHCLOSE, NowIn_ERROR, NowIn_CHAIN } NowIn_t; /* (Construction/Destruction) The parse objects are never created by the application, but instead by one of the objects that it is used to parse. */ extern CSParse_t * CSParse_new(void); extern void CSParse_delete(CSParse_t * me); /* (some handy definitions) */ #define LPAREN '(' #define RPAREN ')' #define LCURLY '{' #define RCURLY '}' #define LBRACKET '[' #define RBRACKET ']' #define SQUOTE 0x27 /* avoid confusing parens checking editors */ #define DQUOTE 0x22 #define LPARENSTR "(" #define RPARENSTR ")" #define raysize(A) (sizeof(A)/sizeof(A[0])) /* !subparser data! .Punct. valid punctuation */ typedef enum {Punct_ZERO = 1, Punct_WHITE = 2, Punct_LPAREN = 4, Punct_RPAREN = 8, Punct_ALL = 0xf} Punct_t; /* .SubState. Enumerated bits that are used to mark a parsing state. Because they are bits, as opposed to sequential numbers, a StateToken may or more than one together and serve more than one state. They must have identical outcomes if this is to be exploited. By convention, the following SubState names are used: o X - has no state o N - is a newly created object o A-H - substate definitions. Because they are non-conflicting bits, a subparser may have options that sit in more than state. For instance, the string "error" may be matched in states A and C with: {"error test", SubState_A|SubState_C, Punct_LPAREN, 0, "error"} *probs* I meant to keep these 16 bit caompatible, but ran up short at the end of one StateToken list. This can be fixed if anyone needs a 16 bit enum. */ typedef enum {SubState_X = -1, SubState_N = 0x4000, SubState_A = 1, SubState_B = 2, SubState_C = 4, SubState_D = 8, SubState_E = 0x10, SubState_F = 0x20, SubState_G = 0x40, SubState_H = 0x80, SubState_I = 0x100} SubState_t; /* forward declaration for StateToken_t */ typedef struct StateToken_s StateToken_t; /* .Engine. called by CSParse to process tokens and punctuation */ typedef NowIn_t Engine_t(CSParse_t * pCSParse, char demark, void * pVoid); /* Engine employed by the Label, MacRed, and User parsers */ Engine_t CSParse_targetParser; /* .substate methods. All methods return a StateRet. (Check) see if a value is legitimate, may also record it */ typedef StateRet_t Check_t(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark); /* Punctuation checker to be employed by Check_t functions */ extern BOOL Punct_badDemark(Punct_t validPunctuation, char demark); /* (Open) create a new data structure to be filled by the parser */ typedef StateRet_t Open_t(CSParse_t * pCSParse, char * token, char demark); /* (Close) tell the state that the data structure is no longer current */ typedef StateRet_t Close_t(CSParse_t * pCSParse, char * token, char demark); /* (Prep) get ready for next state */ typedef StateRet_t Prep_t(CSParse_t * pCSParse, char * token, char demark); /* (Destroy) something went wrong, throw away the current object */ typedef void Destroy_t(CSParse_t * pCSParse); /* .Command. substate commands o open - call the open function for the current data structure o close - call the close o chain - call again on the next state without re-reading data o notoken - clear the token before a chain (so next state just gets punct) o matchany - match any string */ typedef enum {Command_NONE = 0, Command_OPEN = 1, Command_CLOSE = 2, Command_CHAIN = 4, Command_NOTOKEN = 8, Command_MATCHANY = 0x10} Command_t; /* .StateToken structure. Contains all the information about what tokens are expected in what substates. The StateTokens are kept in array referenced by a TargetObject. */ struct StateToken_s { char * note; /* some usefull text that describes the state - usefulll for debugging */ SubState_t validSubStates; Punct_t validPunctuation; Check_t * pCheck; /* call this function to check token */ char * name1; /* or compare to this name */ char * name2; /* many strings have 2 spellings ("ratings" vs. "r") */ CSParseTC_t targetChange; /* whether target change implies diving or climbing from current state */ TargetObject_t * pNextTargetObject; SubState_t nextSubState; Command_t command; /* open, close, chain, etc. */ Prep_t * pPrep; /* prepare for next state */ }; /* .TargetObject structure. Methods and a lists of StateTokens associated with a data structure. The methods know how to read data into current object and the StateTokens tell when to proceed to the next object. */ struct TargetObject_s { char * note; Open_t * pOpen; /* call this function to open structure */ Close_t * pClose; /* call this function to close structure */ Destroy_t * pDestroy; StateToken_t * stateTokens; /* array of sub states */ int stateTokenCount; /* number of sub states */ CSParseTC_t targetChange; /* target change signal for opening this parse state */ }; /* .ValTarget. */ typedef union { BVal_t * pTargetBVal; FVal_t * pTargetFVal; SVal_t * pTargetSVal; DVal_t * pTargetDVal; HTList ** pTargetList; } ValTarget_t; /* .ValType. Write down what value is to be read, and what type it is */ typedef enum {ValType_NONE, ValType_BVAL, ValType_FVAL, ValType_SVAL, ValType_DVAL, ValType_COMMENT} ValType_t; /* .ParseContext. Part of a CSParse. The boundry is a litte fuzzy. Maybe it should not exist. */ typedef struct { Engine_t * engineOf; TargetChangeCallback_t * pTargetChangeCallback; ParseErrorHandler_t * pParseErrorHandler; /* for reading [BFSD]Val_t */ ValTarget_t valTarget; ValType_t valType; char * pTokenError; BOOL observeQuotes; BOOL observedQuotes; char * legalChars; int legalCharCount; } ParseContext_t; /* .CSParse structure. Full parser state and pointer to the object that it is reading. */ struct CSParse_s { char quoteState; NowIn_t nowIn; HTChunk * token; char demark; int offset; int depth; ParseContext_t * pParseContext; union { /* all the types this parse engine fills */ CSMachRead_t * pCSMachRead; /* defined in CSMacRed.c */ CSLabel_t * pCSLabel; /* defined in CSLabel.c */ CSUser_t * pCSUser; /* defined in CSUser.c */ } target; TargetObject_t * pTargetObject; SubState_t currentSubState; StateToken_t * pStateToken; }; /* */ #endif /* CSPARSE_H */ /* End of Declaration */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/CSUsrLst.h�������������������������������������������������������������������0100644�0000764�0000144�00000001736�07405520457�016224� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* UserList for libpics !UserList! */ /* ** (c) COPYRIGHT MIT 1996. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module provides the interface to CSUsrLst.c. UserLists are a list of users and the URLs where their profiles are kept. UserLists are read from a stream. */ #ifndef CSUSRLST_H #define CSUSRLST_H /* (UserList element) */ typedef struct { char * user; char * URL; } UserListEl_t; /* (Methods) Getting at the UserList */ extern HTList * CSUserList_get(void); extern BOOL CSUserList_destroy(void); extern char * CSUserList_findURL(char * username); /* Stream to read the UserList */ extern HTStream * CSUserLists (HTRequest * request, void * param, HTFormat input_format, HTFormat output_format, HTStream * output_stream); /* */ #endif /* CSUSRLST_H */ /* End of Declaration */ ����������������������������������libwww/PICS-client/src/Makefile.in������������������������������������������������������������������0100644�0000764�0000144�00000034605�07405520526�016434� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ lib_LTLIBRARIES = libpics.la SUBDIRS = windows INCLUDES = -I$(srcdir)/../../Library/src # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html libpics_la_SOURCES = CSChkLab.c CSStream.c CSKwik.c CSLabel.c CSLLOut.c CSLLURLs.c CSMacRed.c CSMem.c CSApp.c CSParse.c CSUsrLst.c CSUser.c BUILT_SOURCES = CSLApp.h CSLUtils.h CSLL.h CSLLSt.h CSMR.h CSMRSt.h CSUser.h CSUserSt.h CSParse.h CSUsrLst.h DOCS := $(wildcard *.html) EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libpics_la_LDFLAGS = libpics_la_LIBADD = libpics_la_OBJECTS = CSChkLab.lo CSStream.lo CSKwik.lo CSLabel.lo \ CSLLOut.lo CSLLURLs.lo CSMacRed.lo CSMem.lo CSApp.lo CSParse.lo \ CSUsrLst.lo CSUser.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/CSApp.P .deps/CSChkLab.P .deps/CSKwik.P \ .deps/CSLLOut.P .deps/CSLLURLs.P .deps/CSLabel.P .deps/CSMacRed.P \ .deps/CSMem.P .deps/CSParse.P .deps/CSStream.P .deps/CSUser.P \ .deps/CSUsrLst.P SOURCES = $(libpics_la_SOURCES) OBJECTS = $(libpics_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu PICS-client/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libpics.la: $(libpics_la_OBJECTS) $(libpics_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libpics_la_LDFLAGS) $(libpics_la_OBJECTS) $(libpics_la_LIBADD) $(LIBS) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = PICS-client/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu PICS-client/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-libLTLIBRARIES install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-recursive all-am: Makefile $(LTLIBRARIES) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/�����������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405521230�015364� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSChkLab.P�������������������������������������������������������������0100644�0000764�0000144�00000020431�07405521210�017052� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSChkLab.lo CSChkLab.o : CSChkLab.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h CSLUtils.h \ CSUser.h CSUserSt.h CSLL.h CSLLSt.h CSChkLab.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : CSLUtils.h : CSUser.h : CSUserSt.h : CSLL.h : CSLLSt.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSStream.P�������������������������������������������������������������0100644�0000764�0000144�00000020545�07405521212�017171� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSStream.lo CSStream.o : CSStream.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h \ ../../Library/src/HTProxy.h CSLUtils.h CSMR.h CSUser.h CSLL.h CSLApp.h \ CSParse.h CSStream.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ../../Library/src/HTProxy.h : CSLUtils.h : CSMR.h : CSUser.h : CSLL.h : CSLApp.h : CSParse.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSKwik.P���������������������������������������������������������������0100644�0000764�0000144�00000020241�07405521213�016635� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSKwik.lo CSKwik.o : CSKwik.c ../../Library/src/WWWLib.h ../../Library/src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h CSKwik.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSLabel.P��������������������������������������������������������������0100644�0000764�0000144�00000014313�07405521215�016754� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSLabel.lo CSLabel.o : CSLabel.c ../../Library/src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/HTList.h ../../Library/src/HTArray.h \ ../../Library/src/HTString.h CSParse.h CSLUtils.h \ ../../Library/src/HTUtils.h ../../Library/src/HTMemory.h \ ../../Library/src/HTChunk.h CSLL.h CSLLSt.h CSLabel.c : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/HTList.h : ../../Library/src/HTArray.h : ../../Library/src/HTString.h : CSParse.h : CSLUtils.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTChunk.h : CSLL.h : CSLLSt.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSLLOut.P��������������������������������������������������������������0100644�0000764�0000144�00000020351�07405521216�016734� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSLLOut.lo CSLLOut.o : CSLLOut.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h CSLUtils.h \ CSLL.h CSLLSt.h CSLLOut.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : CSLUtils.h : CSLL.h : CSLLSt.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSLLURLs.P�������������������������������������������������������������0100644�0000764�0000144�00000020355�07405521217�017017� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSLLURLs.lo CSLLURLs.o : CSLLURLs.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h CSLUtils.h \ CSLL.h CSLLSt.h CSLLURLs.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : CSLUtils.h : CSLL.h : CSLLSt.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSMacRed.P�������������������������������������������������������������0100644�0000764�0000144�00000014317�07405521221�017071� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSMacRed.lo CSMacRed.o : CSMacRed.c ../../Library/src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/HTUtils.h ../../Library/src/HTMemory.h \ ../../Library/src/HTString.h CSParse.h CSLUtils.h \ ../../Library/src/HTList.h ../../Library/src/HTArray.h \ ../../Library/src/HTChunk.h CSMR.h CSMRSt.h CSMacRed.c : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTString.h : CSParse.h : CSLUtils.h : ../../Library/src/HTList.h : ../../Library/src/HTArray.h : ../../Library/src/HTChunk.h : CSMR.h : CSMRSt.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSMem.P����������������������������������������������������������������0100644�0000764�0000144�00000020265�07405521222�016454� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSMem.lo CSMem.o : CSMem.c ../../Library/src/WWWLib.h ../../Library/src/wwwsys.h \ ../../wwwconf.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h CSLUtils.h CSMem.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : CSLUtils.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSApp.P����������������������������������������������������������������0100644�0000764�0000144�00000022363�07405521223�016460� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSApp.lo CSApp.o : CSApp.c /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/string.h /usr/include/bits/string.h \ /usr/include/bits/string2.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/stdlib.h \ ../../Library/src/WWWLib.h ../../Library/src/wwwsys.h ../../wwwconf.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h \ ../../Library/src/WWWApp.h ../../Library/src/HTEvtLst.h \ ../../Library/src/HTHome.h ../../Library/src/HTDialog.h \ ../../Library/src/HTAccess.h ../../Library/src/HTRules.h \ ../../Library/src/HTProxy.h ../../Library/src/HTFilter.h \ ../../Library/src/HTLog.h ../../Library/src/HTHist.h \ ../../Library/src/WWWFile.h ../../Library/src/HTFile.h \ ../../Library/src/HTMulti.h ../../Library/src/HTBind.h \ ../../Library/src/HTBInit.h ../../Library/src/HTHeader.h CSLApp.h \ CSLUtils.h CSParse.h CSLL.h CSUser.h CSUserSt.h CSUsrLst.h CSApp.c : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/stdlib.h : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ../../Library/src/WWWApp.h : ../../Library/src/HTEvtLst.h : ../../Library/src/HTHome.h : ../../Library/src/HTDialog.h : ../../Library/src/HTAccess.h : ../../Library/src/HTRules.h : ../../Library/src/HTProxy.h : ../../Library/src/HTFilter.h : ../../Library/src/HTLog.h : ../../Library/src/HTHist.h : ../../Library/src/WWWFile.h : ../../Library/src/HTFile.h : ../../Library/src/HTMulti.h : ../../Library/src/HTBind.h : ../../Library/src/HTBInit.h : ../../Library/src/HTHeader.h : CSLApp.h : CSLUtils.h : CSParse.h : CSLL.h : CSUser.h : CSUserSt.h : CSUsrLst.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSParse.P��������������������������������������������������������������0100644�0000764�0000144�00000014243�07405521225�017012� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSParse.lo CSParse.o : CSParse.c ../../Library/src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/HTChunk.h ../../Library/src/HTString.h CSLUtils.h \ ../../Library/src/HTUtils.h ../../Library/src/HTMemory.h \ ../../Library/src/HTList.h ../../Library/src/HTArray.h CSParse.h CSParse.c : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : CSLUtils.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTList.h : ../../Library/src/HTArray.h : CSParse.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSUsrLst.P�������������������������������������������������������������0100644�0000764�0000144�00000020335�07405521226�017174� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSUsrLst.lo CSUsrLst.o : CSUsrLst.c ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h CSLApp.h \ CSLUtils.h CSUsrLst.c : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : CSLApp.h : CSLUtils.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/src/.deps/CSUser.P���������������������������������������������������������������0100644�0000764�0000144�00000014511�07405521230�016650� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CSUser.lo CSUser.o : CSUser.c ../../Library/src/wwwsys.h ../../wwwconf.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/HTUtils.h ../../Library/src/HTMemory.h \ ../../Library/src/HTString.h ../../Library/src/HTEscape.h \ ../../Library/src/HTParse.h CSParse.h CSLUtils.h \ ../../Library/src/HTList.h ../../Library/src/HTArray.h \ ../../Library/src/HTChunk.h CSUser.h CSUserSt.h CSUser.c : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTString.h : ../../Library/src/HTEscape.h : ../../Library/src/HTParse.h : CSParse.h : CSLUtils.h : ../../Library/src/HTList.h : ../../Library/src/HTArray.h : ../../Library/src/HTChunk.h : CSUser.h : CSUserSt.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Makefile�������������������������������������������������������������������������0100644�0000764�0000144�00000023527�07405520573�015243� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign SUBDIRS = src User mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign PICS-client/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = PICS-client distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign PICS-client/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/PICS-client/Makefile.in����������������������������������������������������������������������0100644�0000764�0000144�00000023147�07405520526�015644� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ AUTOMAKE_OPTIONS = foreign SUBDIRS = src User mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign PICS-client/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = PICS-client distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign PICS-client/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/���������������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520575�012652� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/CVS/�����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517405�013303� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/CVS/Root�������������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517405�014147� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/CVS/Repository�������������������������������������������������������������������������0100644�0000764�0000144�00000000015�07405517405�015376� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/CVS/Entries����������������������������������������������������������������������������0100644�0000764�0000144�00000000210�07405517405�014625� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.2/Thu Apr 18 01:42:40 1996// /Makefile.am/1.8/Sun Nov 1 02:02:48 1998// /Overview.html/1.23/Tue May 4 13:18:52 1999// D ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/CVS/Entries.Log������������������������������������������������������������������������0100644�0000764�0000144�00000000101�07405517406�015345� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/FAQ//// A D/User//// A D/src//// A D/tcl//// A D/www-sql//// ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/FAQ/�����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517405�013257� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/FAQ/CVS/�������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517405�013712� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/FAQ/CVS/Root���������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517405�014556� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/FAQ/CVS/Repository���������������������������������������������������������������������0100644�0000764�0000144�00000000021�07405517405�016002� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/FAQ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/FAQ/CVS/Entries������������������������������������������������������������������������0100644�0000764�0000144�00000000060�07405517405�015237� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Overview.html/1.3/Mon Dec 9 03:35:38 1996// D ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/FAQ/Overview.html����������������������������������������������������������������������0100644�0000764�0000144�00000001376�06252704412�015752� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>W3C Mini Robot Frequently Asked Questions</TITLE> <!-- Changed by: Henrik Frystyk Nielsen, 6-Dec-1995 --> </HEAD> <BODY> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="Robot" SRC="../../Icons/WWW/robot48x"></A> <IMG BORDER="0" SRC="../../Icons/WWW/faq48x" ALT="FAQ"> <H1>Frequently Asked Questions</H1> Some answers to email questions. Most questions are answered in the <a href="/">documentation</A>. You can also look at the very nifty <A HREF="http://asearch.mccmedia.com/www-lib.html">www-lib mailing list archive</A>. <ul> <LI> </ul> <P> <HR> <ADDRESS>Henrik Frystyk, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>, November 1995</ADDRESS> </BODY> </HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520575�013570� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/CVS/������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517405�014221� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/CVS/Root��������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517405�015065� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/CVS/Repository��������������������������������������������������������������������0100644�0000764�0000144�00000000022�07405517405�016312� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/CVS/Entries�����������������������������������������������������������������������0100644�0000764�0000144�00000000271�07405517405�015552� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.2/Thu Apr 18 01:42:42 1996// /CommandLine.html/1.28/Tue May 4 13:18:52 1999// /Makefile.am/1.4/Thu Mar 5 21:56:31 1998// /Overview.html/1.9/Sat Aug 9 17:57:25 1997// D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/Makefile��������������������������������������������������������������������������0100644�0000764�0000144�00000013761�07405520575�015235� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Robot/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Robot/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������libwww/Robot/User/.cvsignore������������������������������������������������������������������������0100644�0000764�0000144�00000000025�06135317022�015550� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/CommandLine.html������������������������������������������������������������������0100644�0000764�0000144�00000042427�06713571674�016661� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <title>Command Line Syntax for the W3C Mini Robot</title> <link rel="STYLESHEET" href="/StyleSheets/libwww.css" type="text/css"> </head> <body> <p><a href="../../resources.html"></a> <a href="../../resources.html"><img alt="Robot" src="../../Icons/WWW/robot48x" width="48" height="48" border="0"></a> <a href="../../resources/mapserver.html"><img alt="MANUAL" src="../../Icons/WWW/doc48x" border="0"></a></p> <h1>Webbot Command Line Syntax</h1> <p></p> <div class="intro"> The generic syntax is: <pre> webbot [ <a href="#z19">options</a> ] [ <a href="#z16">URI</a> [ <a href="#z17">keywords</a> ] ]</pre> <p>Check here the following options</p> <ul> <li> <a href="#Help">Getting Help</a> </li> <li> <a href="#User">User Interactions - how much or how little</a> </li> <li> <a href="#Configurat">Configuration File</a> </li> <li> <a href="#Constraints">Setting Basic Constraints for Traversal</a> </li> <li> <a href="#txt">Robots.txt and HTML META tags</a> </li> <li> <a href="#regex">Regular Expressions based Constraints</a> </li> <li> <a href="#Search">Selecting Breath First (BFS) or Depth First Search (DFS)</a> </li> <li> <a href="#Handling">Handling HTTP redirections</a> </li> <li> <a href="#Persistent">Using the HTTP/1.1 Persistent Cache</a> </li> <li> <a href="#Inlined">Verifying or Downloading Inlined Images and other objects</a> </li> <li> <a href="#Logging">SQL Based Logging using MySQL</a> </li> <li> <a href="#Regular">Regular Ascii Text Logging</a> </li> <li> <a href="#Stats">Distribution and Statistics Features</a> </li> <li> <a href="#Other">Other Options</a> </li> </ul> </div> <p></p> <hr> <h2><a name="z19">Options</a></h2> <p>The order of the options is not important and options can in fact be specified on either side of any <a href="#z16" name="z14">URI</a>. Currently available options are:-</p> <h3><a name="Help">Getting Help</a></h3> <dl> <dt><b>-v [ a | b | c | g | p | s | t | u ]</b></dt> <dd> Verbose mode: Gives a running commentary on the program's attempts to read data in various ways. As the amount of verbose output is substantial, the <tt>-v</tt> option can now be followed by zero, one or more of the following flags (without space) in order to differentiate the verbose output generated: <ul> <li> <b>a</b>: Anchor relevant information </li> <li> <b>b</b>: Bindings to local file system </li> <li> <b>c</b>: Cache trace </li> <li> <b>g</b>: SGML trace </li> <li> <b>p</b>: Protocol module information </li> <li> <b>s</b>: SGML/HTML relevant information </li> <li> <b>t</b>: Thread trace </li> <li> <b>u</b>: URI relevant information </li> </ul> <p>The <tt>-v</tt> option without any appended options shows all trace messages. An example is "<tt>-vpt</tt>" showing <em>thread</em> and <em>protocol</em> trace messages</p> </dd> <dt><b>-version</b></dt> <dd> Prints out the version number of the robot and the version number of libwww and exits. </dd> </dl> <h3><a name="User">User Interactions</a></h3> <p>Various options can determine how verbose and chatty the robot should be</p> <dl> <dt><b>-n</b></dt> <dd> Non-interactive mode - don't ask the user anything. </dd> <dt><b>-q</b></dt> <dd> Somewhat quiet mode. </dd> <dt><b>-Q</b></dt> <dd> Really quiet mode. </dd> <dt><b>-ss</b></dt> <dd> Print out date and time for start and stop for the job. </dd> </dl> <h3><a name="Configurat">Configuration File</a></h3> <dl> <dt><b>-r &lt;address></b></dt> <dd> Rule file, a.k.a. <a href="/">configuration file</a> is a set of rules and configuration options that can be used to map URLs, and to set up other aspects of the behavior of the command line tool. Note that the address must be specified as a URI - and in fact it can be located on HTTP servers etc. as need be. File URIs are parsed relative to the current folder, so a rule file address of "<tt>rules.conf</tt>" will point to a file in the location where this tool it started. If a local file then the file suffix must be "<tt>.conf</tt>" - otherwise the media type must be <tt>application/x-www-rules</tt>. </dd> </dl> <h3><a name="Constraints">Setting Basic Constraints for Traversal</a></h3> <p>These are some very simple constrants that can always be used when running the webbot.</p> <dl> <dt><b>-depth [ n ]</b></dt> <dd> Limit jumps to <b>n</b> hops from the start page. The n-1 link is checked using a <tt>HEAD</tt> request. The default value is 0 which means that only the start page is searched. A value of 1 will cause the start page <b>and</b> all pages directly linked from that start page to be checked. </dd> <dt><b>-prefix [ URI ]</b></dt> <dd> Define a URI prefix for all URIs - if they do not match the prefix then they are not checked. The rejected URIs can be <a href="#Logging">logged to a separate file</a>. </dd> </dl> <h3><a name="txt">Robots.txt and HTML META tags</a></h3> <p>There are situations where you may not want the robot to behave as a robot but more as a link checker in which case you may consider using these options:</p> <dl> <dt><b>-norobotstxt</b></dt> <dd> If you for some reason don't want the robot to check for a <a href="http://info.webcrawler.com/mak/projects/robots/exclusion.html#robotstxt">robots.txt file</a> then add this command line option </dd> <dt><b>-nometatags</b></dt> <dd> If you for some reason don't want the robot to check for <a href="http://info.webcrawler.com/mak/projects/robots/exclusion.html#meta">HTML robots related META tags</a> then add this command line option </dd> </dl> <h3><a name="regex">Regular Expressions based Constraints</a></h3> <p>Using regular expressions reguires that you <a href="/#features">link against a regex library</a> handling regular expressions - see the <a href="/">installation instructions</a> for details. When using regular expressions, you can control the constraints much more efficiently - both to decide which URIs should be followed and to decide whether the webbot should use <code>HEAD</code> or <code>GET</code> when checking the links.</p> <dl> <dt><b>-exclude [ regex ]</b></dt> <dd> Allows you to define a regular expression of which URIs should be excluded from the traversal. The rejected URIs can be <a href="#Logging">logged to a separate file</a>. This can be used to exclude specific parts of the URI space, for example all URIs containing "/old/": <code>-exclude "/old/"</code> </dd> <dt><b>-check [ regex ]</b></dt> <dd> Check all URIs that match this regular expression with a <tt>HEAD</tt> method instead of a <tt>GET</tt> method. This can be used to verify links but avoiding downloading large distribution files like this: <code>-check "\.gz$|\.Z$|\.zip$|</code>, for example. </dd> <dt><b>-include [ regex ]</b></dt> <dd> Allows you to define a regular expression of which URIs should be included in the traversal </dd> </dl> <h3><a name="Search">Breath First or Depth First Search</a></h3> <p>The webbot can perform either a <a href="http://study.haifa.ac.il/~gmazorvs/">Depth First Search (DFS) or a Breadth First Search (BFS)</a>. The default is DFS where the robot issues new requests as soon as they are encountered. To change to the BFS algorithmn, use the "<tt>-bfs</tt>" flag:</p> <dl> <dt><b>-bfs</b></dt> <dd> Use Breadth First Search (BFS) instead of Depth First Search (DFS) </dd> </dl> <h3><a name="Handling">Handling HTTP Redirections</a></h3> <p>By default, the webbot doesn't follow HTTP redirections - it only registers them in the <a href="#Regular">log files</a>. However, by using the <strong>-redir</strong> option, it actually follows the redirections if the redirected address fulfills the <a href="#regex">traversing constraints</a>.</p> <dl> <dt><b>-redir [ rediretioncode ]</b></dt> <dd> Follow HTTP redirections. If no redirectioncode is given then follow all known redirections (<a href="/">301, 302, 303, 307</a>). If you just want a single type of redirection to be followed then indicate that number as the redirectioncode, for example <strong>-redir 302</strong>. </dd> </dl> <h3><a name="Inlined">Checking Inlined Images</a></h3> <p>The webbot can check inlined images as well as normal hyperlinks. You can control this using the following flags:</p> <dl> <dt><b>-img</b></dt> <dd> Test include <strong>inlined images </strong>using a <tt>HEAD</tt> request </dd> <dt><b>-saveimg</b></dt> <dd> Saving the <strong>inlined images</strong> on local disk or pump them to a black hole. This is primarily to emulate a GUI client's behavior using the robot </dd> <dt><b>-alt [ file ]</b></dt> <dd> Specifies a <a href="http://www.apache.org/docs/mod/mod_log_referer.html">Referer Log Format</a> style log file of all inlined images <em>without or with an empty</em> an <strong>ALT</strong> tag. </dd> <dt><b>-prefix [ URI ]</b></dt> <dd> Define a URI prefix for all inlined image URIs - if they do not match the prefix then they are not checked. The rejected URIs can be <a href="#Logging">logged to a separate file</a>. </dd> </dl> <h3><a name="Logging">SQL Based Logging using MySQL</a></h3> <p>Using SQL based logging requires that you have linked against a <a href="http://www.tcx.se/">MySQL library</a>. See the <a href="/">installation instructions</a> for details. I like the Web interface provided by <a href="http://www.daa.com.au/~james/www-sql/">www-sql</a> which makes it easy to access the logged data. The data is stored in four tables within the same database (the default name is "<code>webbot</code>"):</p> <dl> <dt><b>uris</b></dt> <dd> An index that maps URIs to integers so that they are easier to refer to </dd> <dt><b>requests</b></dt> <dd> Contains information from the request including the request-URI, the method, and the resulting status code. </dd> <dt><b>resources</b></dt> <dd> Contains information of the resource like content-type, content-encoding, expires, etc. </dd> <dt><b>links</b></dt> <dd> Contains information about which documents point to which documents, the type of the link etc. The type can either be implicit like "<em>referer</em>" or "<em>image</em>", or it can be explicit like "<em>stylesheet</em>", "<em>toc</em>", etc. </dd> </dl> <p>The command line options for handling the SQL logging are as follows:</p> <dl> <dt><b>-sqlserver [ srvrname ]</b></dt> <dd> Specify the mysql server. The default is <code>"localhost</code>". </dd> <dt><b>-sqldb [ dbname ]</b></dt> <dd> Specify the database to use. The default is <code>webbot</code>. Note that webbot creates its own set of tables for handling the logs. </dd> <dt><b>-sqluser [ usrname ]</b></dt> <dd> Use this to specify the user that we are connection to the database as. The default is <code>"webbot</code>". </dd> <dt><b>-sqlpassword [ usrpswd ]</b></dt> <dd> Use this to specify the password needed to connect to the database. The default is empty string. </dd> <dt><b>-sqlrelative [ relroot ]</b></dt> <dd> If you want to make the URI entries in the database relative then you can specify the root to which they should be made relative. This can for example be used to built the database on another machine than is normally running the service. On heavy loaded sites, it is often a good idea to have an internal test server running which can be used to build the database as it does take some resources. </dd> <dt><b>-sqlexternals</b></dt> <dd> Use this flag if you want all links that have been filtered because they didn't fulfill the constraints to be logged as well in the same table as all other URIs. </dd> <dt><b>-sqlclearlinks</b></dt> <dd> Clears the <b>links</b> table before starting the traversal. </dd> <dt><b>-sqlclearrequests</b></dt> <dd> Clears the <b>requests</b> table before starting the traversal. </dd> <dt><b>-sqlclearresources</b></dt> <dd> Clears the <b>resources</b> table before starting the traversal. </dd> <dt><b>-sqlclearuris</b></dt> <dd> Clears the <b>uris</b> table before starting the traversal. </dd> </dl> <h3><a name="Regular">Regular Ascii Text Logging</a></h3> <p>This set of log files are dumped in normal ASCII format into local files</p> <dl> <dt><b>-404 [ file ]</b></dt> <dd> Specifies a <a href="http://www.apache.org/docs/mod/mod_log_referer.html">Referer Log Format</a> style log file of all links resulting in a 404 (Not Found) status code </dd> <dt><b>-l [ file ]</b></dt> <dd> Specifies a <a href="../../Daemon/User/Config/Logging.html#common-logfile-format">Common Log File Format</a> style log file with a list of visited documents and the result codes obtained. </dd> <dt><b>-negotiated [ file ]</b></dt> <dd> Specifies a log file of all URIs that where subject to content negotiation. </dd> <dt><b>-referer [ file ]</b></dt> <dd> Specifies a <a href="http://www.apache.org/docs/mod/mod_log_referer.html">Referer Log Format</a> style log file of which documents points to which documents </dd> <dt><b>-reject [ file ]</b></dt> <dd> Specifies a log file of all the URIs encountered that didn't fulfill the <a href="#Constaints">constraints for traversal</a>. </dd> </dl> <h3><a name="Stats">Distribution and Statistics Features</a></h3> <p>Note that if you are using SQL based logging then the set of statistics that can be drawn directly from the database is very high.</p> <dl> <dt><b>-format [ file ]</b></dt> <dd> Specifies a log file of which <strong>media types</strong> (content types) were encountered in the run and their distribution </dd> <dt><b>-charset [ file ]</b></dt> <dd> Specifies a log file of which <strong>charsets</strong> (content type parameter) were encountered in the run and their distribution </dd> <dt><b>-hitcount [ file ]</b></dt> <dd> Specifies a log file of URIs sorted after <strong>how many times</strong> they were referenced in the run </dd> <dt><b>-lm [ file ]</b></dt> <dd> Specifies a log file of URIs sorted after <strong>last modified date</strong>. This gives a good overview of the dynamics of the web site that you are checking. </dd> <dt><b>-rellog [ file ]</b></dt> <dd> Specifies a log file of any link relationship found in the <strong>HTML LINK tag</strong> (either the <strong>REL</strong> of the <strong>REV</strong> attribute) that has the relation specified in the <b>-relation</b> parameter (all relations are modelled by libwww as "forward"). For example <tt>"-rellog stylesheets-logfile.txt -relation stylesheet"</tt> will produce a log file of all link relationships of type "stylesheet". The format of the log file is <p align="center"><tt>"&lt;relationship> &lt;media type> &lt;from-URI> --> &lt;to-URI>"</tt></p> <p>meaning that the <tt>from-URI</tt> has the forward <tt>relationship</tt> with <tt>to-URI</tt>.</p> </dd> <dt><b>-title [ file ]</b></dt> <dd> Specifies a log file of URIs sorted after any <strong>title</strong> found either as an HTTP header or in the HTML. </dd> </dl> <h3><a name="Persistent">Persistent Cache</a></h3> <p>The webbot can use the persistent cache while traversing the web site which may cause a significant performance optimization. These are the command line options:</p> <dl> <dt><b>-cache</b></dt> <dd> Enable the <a href="../../Library/src/WWWCache.html">libwww persistent cache</a> </dd> <dt><b>-cacheroot [ dir ]</b></dt> <dd> Where should the cache be located? The default is <tt>/tmp/w3c-cache</tt> </dd> <dt><b>-cache_size [ size ]</b></dt> <dd> How big should the cache be in Megs, default value is 20 </dd> <dt><b>-validate</b></dt> <dd> Force validation using either the <tt>etag</tt> or the <tt>last-modified </tt>date provided by the server </dd> <dt><b>-endvalidate</b></dt> <dd> Force end-to-end validation by adding a <tt>max-age=0</tt> cache control directive </dd> </dl> <h3><a name="Other">Other Options</a></h3> <dl> <dt><b>-delay [ n ]</b></dt> <dd> Specify the write delay in milliseconds for how long we can wait until we flush the output buffer when using pipelining. The default value is 50 ms. The longer delay, the bigger TCP packets but also longer response time. </dd> <dt><b>-nopipe</b></dt> <dd> Do <i>not</i> use HTTP/1.1 pipelining (but still use persistent connections). The default for this option can be set using the <a href="/">configure script under installation</a>. </dd> <dt><a name="single"><b>-single</b></a></dt> <dd> Single threaded mode. If this flag is set then the browser uses blocking, non interruptible I/O in interactive mode. Non-interactive mode always uses blocking I/O. </dd> <dt><b>-timeout [ n ]</b></dt> <dd> Timeout in seconds on open connections. If we don't get a reply within n secs then about the request. Default timeout is 20 secs. </dd> </dl> <h2><a name="z16">URI</a></h2> <p>The URI is the <a href="/"> hypertext address</a> of the document at which you want to start the robot.</p> <h2><a name="z17">keywords</a></h2> <p>Any further command line arguments are taken as keywords. Keywords can be used as search tokens in an HTTP request-URI encoded so that all spaces are replaced with "<tt>+</tt>" and unsafe characters are encoded using the URI "<tt>%xx</tt>" escape mechanism. An example of a search query is</p> <pre> webbot http://... "RECORD=ID" "par1=a" "par2=b" "par3=c" "par4=d"</pre> <p></p> <hr> <address> <a href="/">Henrik Frystyk Nielsen</a>,<br> @(#) $Id: CommandLine.html,v 1.28 2025/05/04 13:18:52 frystyk Exp $ </address> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/Makefile.am�����������������������������������������������������������������������0100644�0000764�0000144�00000000165�06477617617�015637� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/Overview.html���������������������������������������������������������������������0100644�0000764�0000144�00000003147�06373127605�016266� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: Henrik Frystyk Nielsen, 6-Dec-1995 --> <TITLE>W3C Mini Robot Documentation</TITLE> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000"> <P> <A HREF="/"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="Robot" SRC="../../Icons/WWW/robot48x"></A> <IMG BORDER="0" ALT="Docs" SRC="../../Icons/WWW/doc48x"> <H1> W3C Mini Robot Documentation </H1> <P> This is a list of what you will find of documentation describing the W3C Mini Robot. <DL> <DT> <A HREF="/"><IMG BORDER="0" ALT="INSTALL" SRC="../../Icons/WWW/install48x"></A> <B>Installation Guide</B> <DD> The installation description follows exactly the installation for the W3C Sample Code Library <DT> <A HREF="/"><IMG BORDER="0" SRC="../../Icons/WWW/relnotes48x" ALT="RELEASE"></A> <B>Release Notes</B> <DD> The release notes for the Line Mode browser is part of the Library release notes <DT> <A HREF="/"><IMG BORDER="0" ALT="CMDLINE" SRC="../../Icons/WWW/doc48x"></A> <B>Command Line Options</B> <DD> Describing the command line options <DT> <A HREF="/"><IMG BORDER="0" SRC="../../Icons/WWW/Bug48x" ALT="BUGS"></A> <B>Known Bugs</B> <DD> Listing what we already know is wrong </DL> <P> <HR> <ADDRESS> Henrik Frystyk, <A HREF="mailto:libwww@w3.org">libwww@w3.org</A>,<BR> @(#) $Id: Overview.html,v 1.9 2025/08/09 17:57:25 fillault Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/User/Makefile.in�����������������������������������������������������������������������0100644�0000764�0000144�00000013364�07405520526�015635� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Robot/User/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot/User distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Robot/User/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/.cvsignore�����������������������������������������������������������������������������0100644�0000764�0000144�00000000025�06135317020�014630� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/Makefile.am����������������������������������������������������������������������������0100644�0000764�0000144�00000000122�06616740510�014672� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. SUBDIRS = src User tcl ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/Overview.html��������������������������������������������������������������������������0100644�0000764�0000144�00000011351�06713571674�015353� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <title>Webbot - the W3C Libwww Robot</title> <link rel="STYLESHEET" href="/StyleSheets/libwww.css" type="text/css"> </head> <body> <p><a href="../../resources.html"></a> <a href="/"></a> <img alt="Robot" src="../Icons/WWW/robot48x"></p> <h1>Webbot - the Libwww Robot</h1> <p align="center"><a href="#Basics">Basics</a> | <a href="/">Get it!</a> |&nbsp;<a href="#Features">Features</a> |&nbsp;<a href="/">Options</a> | <a href="/">Release Notes</a> | <a href="#How">How to</a></p> <div class="intro"> The webbot is a very fast Web walker with support for regular expressions, SQL logging facilities, and many other features. The webbot comes with the <a href="/">libwww codebase</a>. It can be used to check links, find bad HTML, map out a web site, download images, etc. <ul> <li> <a href="tcl/">Check out the Tcl/Tk interface for the webbot</a> </li> <li> <a href="www-sql/">Check out the www-sql interface to the mysql generated log files</a> </li> </ul> </div> <p></p> <hr> <h2><a name="Basics">The Basics</a></h2> <dl> <dt>Author(s)</dt> <dd> <a href="/">Henrik Frystyk Nielsen</a>, John Punin, Bob Racko </dd> <dt>Status</dt> <dd> An example application for <a href="/">libwww</a>. The robot is the primary tool used for the <a href="../Protocols/HTTP/Performance/">HTTP performance measurements</a>. </dd> <dt>Plans</dt> <dd> New releases follow the releases of <a href="/">libwww</a> with no exception. </dd> <dt>Platforms</dt> <dd> It runs on the <a href="/">same platforms as libwww</a> </dd> <dt>Getting the Source Code</dt> <dd> The webbot comes as an integral part of the <a href="/">libwww distribution package</a>. </dd> <dt>Forums</dt> <dd> Discussions on libwww and its example applications take place on <b>&lt;www-lib@w3.org</b>> (<a href="http://lists.w3.org/Archives/Public/www-lib/">archives</a>). See the <a href="/">documentation for how to subscribe</a>. </dd> </dl> <h2><a name="Features">Features</a></h2> <ul> <li> Really fast <a href="/">libwww HTTP/1.1 engine</a> - uses <a href="../Protocols/HTTP/Performance/">HTTP/1.1 pipelining</a> which <a href="../Protocols/HTTP/Performance/">speeds up performance a lot</a> </li> <li> Supports <a href="http://info.webcrawler.com/mak/projects/robots/exclusion.html#robotstxt">robot.txt </a>files and <a href="http://info.webcrawler.com/mak/projects/robots/exclusion.html#meta">robot META tags</a> </li> <li> Smart use of <code>GET</code> and <code>HEAD</code> - only downloads the strictly necessary </li> <li> Check of <a href="/#Inlined">inlined images</a> as well as hyperlinks </li> <li> Support for <a href="/#regex">regular expressions</a> allows detailed Web traversal constraints </li> <li> Support for <a href="/#Logging">SQL based logging</a> which allows for an open-ended set of thongs you can do with the logs </li> <li> Support for <a href="/#Regular">traditional file based logging</a> using Common Log File formats and Referer log file formats </li> <li> A <a href="/#Stats">wealth of logging facilities</a> including: <ul> <li> Missing or empty ALT tags in inlined images </li> <li> Broken links </li> <li> Document titles based on the <code>TITLE</code> HTML tag and the <code>Title</code> HTTP header field </li> <li> Link relationships between documents based on the <code>LINK</code> HTML tag </li> <li> Modification dates based on the <code>Last-Modified</code> HTTP header field </li> <li> Distributions of content-types and charsets encountered in the traversal </li> </ul> </li> </ul> <h2><a name="How">How to Run It</a></h2> <p>Be careful - this is a robot and hence can be used to traverse many links - it should be used with care and is not designed to be let loose on the Internet at large. Its primary design goal was to be able to test <a href="/">HTTP/1.1 pipelining features</a>.</p> <p>The robot has a large set of <a href="/">command line options</a> that can be used in a large set of different combinations. You can try and <a href="src/robot.sh">see this simple script</a> in order to see an example of how it can be run.</p> <p></p> <hr> <address> <a href="/">Henrik Frystyk Nielsen</a>,<br> @(#) $Id: Overview.html,v 1.23 2025/05/04 13:18:52 frystyk Exp $ </address> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/�����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07422617423�013437� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/CVS/�������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517405�014072� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/CVS/Root���������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517405�014736� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/CVS/Repository���������������������������������������������������������������������0100644�0000764�0000144�00000000021�07405517405�016162� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/CVS/Entries������������������������������������������������������������������������0100644�0000764�0000144�00000000746�07405517405�015432� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.5/Mon Aug 5 17:23:21 1996// /HTQueue.c/1.1/Mon Oct 26 22:45:34 1998// /HTQueue.html/1.1/Mon Oct 26 22:45:34 1998// /HTRobMan.html/1.9/Sun Mar 14 02:21:09 1999// /HTRobot.c/1.90/Fri Mar 19 20:20:14 1999// /HTRobot.html/1.4/Mon Oct 26 22:45:34 1998// /Makefile.am/1.29/Fri Aug 4 09:48:37 2000// /RobotMain.c/1.11/Sun Mar 14 02:21:09 1999// /RobotTxt.c/1.4/Mon Feb 22 22:10:12 1999// /RobotTxt.html/1.2/Tue Oct 27 17:42:53 1998// /robot.sh/1.3/Mon May 4 19:38:23 1998// D ��������������������������libwww/Robot/src/CVS/Entries.Log��������������������������������������������������������������������0100644�0000764�0000144�00000000020�07405517405�016133� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/windows//// ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/���������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520575�015133� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/CVS/�����������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517405�015564� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/CVS/Root�������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517405�016430� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/CVS/Repository�������������������������������������������������������������0100644�0000764�0000144�00000000031�07405517405�017655� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/CVS/Entries����������������������������������������������������������������0100644�0000764�0000144�00000000131�07405517405�017110� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.3/Mon Aug 5 17:23:23 1996// /Makefile.am/1.5/Tue Nov 3 23:03:20 1998// D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/Makefile�������������������������������������������������������������������0100644�0000764�0000144�00000014072�07405520575�016574� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = $(MAK) $(WIN) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Robot/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Robot/src/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/.cvsignore�����������������������������������������������������������������0100644�0000764�0000144�00000000044�06201427013�017110� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.www_browsable Makefile.in Makefile ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/Makefile.am����������������������������������������������������������������0100644�0000764�0000144�00000000242�06617705670�017167� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = \ $(MAK) \ $(WIN) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/windows/Makefile.in����������������������������������������������������������������0100644�0000764�0000144�00000013472�07405520526�017200� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ MAK := $(wildcard *.mak *.dsp) WIN := $(wildcard *.rc *.ico *.h *.c) EXTRA_DIST = $(MAK) $(WIN) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Robot/src/windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot/src/windows distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Robot/src/windows/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/.cvsignore�������������������������������������������������������������������������0100644�0000764�0000144�00000000056�06201427011�015417� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������*.h .www_browsable .deps Makefile.in Makefile ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/HTQueue.c��������������������������������������������������������������������������0100644�0000764�0000144�00000002556�06615175616�015136� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: HTQueue.c,v 1.1 2025/10/26 22:45:34 frystyk Exp $ ** ** W3C Webbot can be found at "http://www.w3.org/Robot/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Authors: ** JP John Punin ** ** History: ** Oct 1998 Written */ #include "HTQueue.h" HTList * HTQueue_new(void) { return HTList_new(); } BOOL HTQueue_delete(HTList *me) { return HTList_delete(me); } BOOL HTQueue_enqueue(HTList *me,void *newObject) { return HTList_addObject(me,newObject); } BOOL HTQueue_append(HTList *me,void *newObject) { return HTList_appendObject(me,newObject); } BOOL HTQueue_dequeue(HTList *me) { return HTList_removeFirstObject(me) ? YES : NO; } BOOL HTQueue_isEmpty(HTList *me) { return HTList_isEmpty(me); } void * HTQueue_headOfQueue(HTList *me) { return HTList_firstObject(me); } int HTQueue_count(HTList *me) { return HTList_count(me); } ��������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/HTQueue.html�����������������������������������������������������������������������0100644�0000764�0000144�00000001552�06615175616�015653� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: John R. Punin, 24-10-98 --> <TITLE>The Queue Class</TITLE> </HEAD> <BODY> <H1> The Queue Class </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <PRE> #ifndef HTQUEUE_H #define HTQUEUE_H #include "WWWLib.h" </PRE> <H2> Methods </H2> <PRE> PUBLIC HTList * HTQueue_new(void); PUBLIC BOOL HTQueue_delete(HTList *me); PUBLIC BOOL HTQueue_enqueue(HTList *me,void *newObject); PUBLIC BOOL HTQueue_append(HTList *me,void *newObject); PUBLIC BOOL HTQueue_dequeue(HTList *me); PUBLIC BOOL HTQueue_isEmpty(HTList *me); PUBLIC void * HTQueue_headOfQueue(HTList *me); PUBLIC int HTQueue_count(HTList *me); </PRE> <PRE> #endif /* HTQUEUE_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTQueue.html,v 1.1 2025/10/26 22:45:34 frystyk Exp $ </ADDRESS> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/HTRobMan.html����������������������������������������������������������������������0100644�0000764�0000144�00000015337�06672616425�015754� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Webbot - the W3C Mini Robot</TITLE> </HEAD> <BODY> <H1> Webbot - the W3C Mini Robot </H1> <PRE> /* ** (c) COPRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This program illustrates how to travers links using the Anchor object <PRE> #ifndef HTROBMAN_H #define HTROBMAN_H #include "WWWLib.h" /* Global Library Include file */ #include "WWWApp.h" /* Application stuff */ #include "WWWTrans.h" #include "WWWInit.h" #include "WWWSQL.h" #include "HText.h" #include "HTRobot.h" /* Implemented here */ #ifndef W3C_VERSION #define W3C_VERSION "Unspecified" #endif #define APP_NAME "W3CRobot" #define APP_VERSION W3C_VERSION #define COMMAND_LINE "http://www.w3.org/Robot/User/CommandLine" #define ROBOTS_TXT "/robots.txt" #define DEFAULT_OUTPUT_FILE "robot.out" #define DEFAULT_RULE_FILE "robot.conf" #define DEFAULT_LOG_FILE "log-clf.txt" #define DEFAULT_HIT_FILE "log-hit.txt" #define DEFAULT_REL_FILE "log-rel.txt" #define DEFAULT_LM_FILE "log-lastmodified.txt" #define DEFAULT_TITLE_FILE "log-title.txt" #define DEFAULT_REFERER_FILE "log-referer.txt" #define DEFAULT_REJECT_FILE "log-reject.txt" #define DEFAULT_NOTFOUND_FILE "log-notfound.txt" #define DEFAULT_CONNEG_FILE "log-conneg.txt" #define DEFAULT_NOALTTAG_FILE "log-alt.txt" #define DEFAULT_FORMAT_FILE "log-format.txt" #define DEFAULT_CHARSET_FILE "log-charset.txt" #define DEFAULT_MEMLOG "robot.mem" #define DEFAULT_PREFIX "" #define DEFAULT_IMG_PREFIX "" #define DEFAULT_DEPTH 0 #define DEFAULT_DELAY 50 /* Write delay in ms */ #define DEFAULT_CACHE_SIZE 20 /* Default cache size */ #define DEFAULT_SQL_SERVER "localhost" #define DEFAULT_SQL_DB "webbot" #define DEFAULT_SQL_USER "webbot" #define DEFAULT_SQL_PW "" #if 0 #define HT_MEMLOG /* Is expensive in performance! */ #endif #define MILLIES 1000 #define DEFAULT_TIMEOUT 20 /* timeout in secs */ typedef enum _MRFlags { MR_IMG = 0x1, MR_LINK = 0x2, MR_PREEMPTIVE = 0x4, MR_TIME = 0x8, MR_SAVE = 0x10, MR_QUIET = 0x20, MR_REAL_QUIET = 0x40, MR_VALIDATE = 0x80, MR_END_VALIDATE = 0x100, MR_KEEP_META = 0x200, MR_LOGGING = 0x400, MR_DISTRIBUTIONS = 0x800, MR_NOROBOTSTXT = 0x1000, MR_NOMETATAGS = 0x2000, MR_BFS = 0x4000, MR_REDIR = 0x8000 } MRFlags; typedef struct _Robot { int depth; /* How deep is our tree */ int ndoc; int *cdepth; /* Number of nodes per level */ int cnt; /* Count of requests */ int cindex; /* Number assigned to each document */ HTList * hyperdoc; /* List of our HyperDoc Objects */ HTList * htext; /* List of our HText Objects */ HTList * fingers; HTList * queue; /* Queue */ int cq; int timer; int waits; char * cwd; /* Current dir URL */ char * rules; char * prefix; char * img_prefix; char * logfile; /* clf log */ HTLog * log; char * reffile; /* referer log */ HTLog * ref; char * rejectfile; /* unchecked links */ HTLog * reject; char * notfoundfile; /* links that returned 404 */ HTLog * notfound; char * connegfile; /* links that were conneg'ed */ HTLog * conneg; char * noalttagfile; /* images without alt tags*/ HTLog * noalttag; char * hitfile; /* links sorted after hit counts */ char * relfile; /* link sorted after relationships */ HTLinkType relation; /* Specific relation to look for */ char * titlefile; /* links with titles */ char * mtfile; /* media types encountered */ char * charsetfile; /* charsets encountered */ char * lmfile; /* sortef after last modified dates */ char * outputfile; FILE * output; char * furl; /* First url */ MRFlags flags; int redir_code; /* 0 means all, otherwise 301, 302, 305... */ long get_bytes; /* Total number of bytes processed using GET*/ long get_docs; /* Total number of documents using GET */ long head_bytes; /* bytes processed bytes processed using HEAD */ long head_docs; /* Total number of documents using HEAD*/ long other_docs; ms_t time; /* Time of run */ #ifdef HT_POSIX_REGEX regex_t * include; regex_t * exclude; regex_t * check; regex_t * exc_robot; /* Robots.txt exclusion */ #endif #ifdef HT_MYSQL HTSQLLog * sqllog; char * sqlserver; char * sqldb; char * sqluser; char * sqlpw; char * sqlrelative; BOOL sqlexternals; int sqlflags; #endif } Robot; typedef struct _Finger { Robot * robot; HTRequest * request; HTParentAnchor * dest; } Finger; /* ** The HyperDoc object is bound to the anchor and contains information about ** where we are in the search for recursive searches */ #define NO_CODE -1 #define REDIR_CODE -2 typedef struct _HyperDoc { HTParentAnchor * anchor; int depth; int hits; int code; int index; char * title; HTMethod method; } HyperDoc; /* ** This is the HText object that is created every time we start parsing an ** HTML object */ struct _HText { HTRequest * request; BOOL follow; }; /* ** A structure for calculating metadata distributions */ typedef struct _MetaDist { HTAtom * name; int hits; } MetaDist; #ifdef HT_POSIX_REGEX PUBLIC regex_t * get_regtype (Robot * mr, const char * regex_str, int cflags); #endif PUBLIC int OutputData(const char * fmt, ...); PUBLIC HyperDoc * HyperDoc_new (Robot * mr,HTParentAnchor * anchor, int depth); PUBLIC BOOL HyperDoc_delete (HyperDoc * hd); PUBLIC Robot * Robot_new (void); PUBLIC Finger * Finger_new (Robot * robot, HTParentAnchor * dest, HTMethod method); PUBLIC BOOL Robot_registerHTMLParser (void); PUBLIC void Cleanup (Robot * me, int status); PUBLIC void VersionInfo (void); PUBLIC int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) ; PUBLIC int bfs_terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) ; PUBLIC int redirection_handler (HTRequest * request, HTResponse * response, void * param, int status) ; PUBLIC void Serving_queue(Robot *mr); PUBLIC char *get_robots_txt(char *uri); #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTRobMan.html,v 1.9 2025/03/14 02:21:09 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/HTRobot.c��������������������������������������������������������������������������0100644�0000764�0000144�00000124122�06674530576�015136� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: HTRobot.c,v 1.90 2025/03/19 20:20:14 frystyk Exp $ ** ** W3C Webbot can be found at "http://www.w3.org/Robot/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Authors: ** HFN Henrik Frystyk Nielsen, (frystyk@w3.org) ** BR Bob Racko ** JP John Punin ** ** History: ** Dec 04 95 First version ** Oct 1998 Split into separate files */ #include "HTRobMan.h" #include "HTQueue.h" #include "HTAncMan.h" #define SHOW_QUIET(mr) ((mr) && !((mr)->flags & MR_QUIET)) #define SHOW_REAL_QUIET(mr) ((mr) && !((mr)->flags & MR_REAL_QUIET)) PRIVATE HTErrorMessage HTErrors[HTERR_ELEMENTS] = {HTERR_ENGLISH_INITIALIZER}; /* ** Some sorting algorithms */ PRIVATE HTComparer HitSort, FormatSort, LastModifiedSort, TitleSort; /* ** Ths callbacks that we need from the libwww HTML parser */ PRIVATE HText_new RHText_new; PRIVATE HText_delete RHText_delete; PRIVATE HText_foundLink RHText_foundLink; /* ------------------------------------------------------------------------- */ /* Create a "HyperDoc" object ** -------------------------- ** A HyperDoc object contains information about whether we have already ** started checking the anchor and the depth in our search */ PUBLIC HyperDoc * HyperDoc_new (Robot * mr,HTParentAnchor * anchor, int depth) { HyperDoc * hd; if ((hd = (HyperDoc *) HT_CALLOC(1, sizeof(HyperDoc))) == NULL) HT_OUTOFMEM("HyperDoc_new"); hd->depth = depth; hd->hits = 1; hd->code = NO_CODE; hd->index = ++mr->cindex; /* Bind the HyperDoc object together with the Anchor Object */ hd->anchor = anchor; HTAnchor_setDocument(anchor, (void *) hd); /* Add this HyperDoc object to our list */ if (!mr->hyperdoc) mr->hyperdoc = HTList_new(); HTList_addObject(mr->hyperdoc, (void *) hd); return hd; } /* Delete a "HyperDoc" object ** -------------------------- */ PUBLIC BOOL HyperDoc_delete (HyperDoc * hd) { if (hd) { HT_FREE (hd); return YES; } return NO; } /* ** Sort the anchor array and log reference count */ PRIVATE BOOL calculate_hits (Robot * mr, HTArray * array) { if (mr && array) { HTLog * log = HTLog_open(mr->hitfile, YES, YES); if (log) { void ** data = NULL; HTParentAnchor * anchor = NULL; HTArray_sort(array, HitSort); anchor = (HTParentAnchor *) HTArray_firstObject(array, data); while (anchor) { char * uri = HTAnchor_address((HTAnchor *) anchor); HyperDoc * hd = (HyperDoc *) HTAnchor_document(anchor); if (uri && hd) HTLog_addText(log, "%8d %s\n", hd->hits, uri); HT_FREE(uri); anchor = (HTParentAnchor *) HTArray_nextObject(array, data); } } HTLog_close(log); return YES; } return NO; } PRIVATE int HitSort (const void * a, const void * b) { HyperDoc * aa = HTAnchor_document(*(HTParentAnchor **) a); HyperDoc * bb = HTAnchor_document(*(HTParentAnchor **) b); if (aa && bb) return (bb->hits - aa->hits); return bb - aa; } /* ** Sort the anchor array and log link relations */ PRIVATE BOOL calculate_linkRelations (Robot * mr, HTArray * array) { if (mr && array) { HTLog * log = mr->relfile ? HTLog_open(mr->relfile, YES, YES) : NULL; void ** data = NULL; HTParentAnchor * anchor = NULL; anchor = (HTParentAnchor *) HTArray_firstObject(array, data); while (anchor) { /* ** If we have a specific link relation to look for then do this. ** Otherwise look for all link relations. */ if (mr->relation) { HTLink * link = HTAnchor_findLinkType((HTAnchor *) anchor, mr->relation); if (link) { HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link)); char * src_uri = HTAnchor_address((HTAnchor *) anchor); char * dest_uri = HTAnchor_address((HTAnchor *) dest); if (src_uri && dest_uri) { #ifdef HT_MYSQL if (mr->sqllog) { HTSQLLog_addLinkRelationship (mr->sqllog, src_uri, dest_uri, HTAtom_name(mr->relation), NULL); } #endif if (log) { HTFormat format = HTAnchor_format(dest); HTLog_addText(log, "%s %s %s --> %s\n", HTAtom_name(mr->relation), format != WWW_UNKNOWN ? HTAtom_name(format) : "<unknown>", src_uri, dest_uri); } /* Cleanup */ HT_FREE(src_uri); HT_FREE(dest_uri); } } } else { HTLink * link = HTAnchor_mainLink((HTAnchor *) anchor); HTList * sublinks = HTAnchor_subLinks((HTAnchor *) anchor); char * src_uri = HTAnchor_address((HTAnchor *) anchor); HTLinkType linktype; /* First look in the main link */ if (link && (linktype = HTLink_type(link))) { HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link)); char * dest_uri = HTAnchor_address((HTAnchor *) dest); if (src_uri && dest_uri) { #ifdef HT_MYSQL if (mr->sqllog) { HTSQLLog_addLinkRelationship (mr->sqllog, src_uri, dest_uri, HTAtom_name(linktype), NULL); } #endif if (log) { HTFormat format = HTAnchor_format(dest); HTLog_addText(log, "%s %s %s --> %s\n", HTAtom_name(linktype), format != WWW_UNKNOWN ? HTAtom_name(format) : "<unknown>", src_uri, dest_uri); } } HT_FREE(dest_uri); } /* and then in any sublinks */ if (sublinks) { HTLink * pres; while ((pres = (HTLink *) HTList_nextObject(sublinks))) { if ((linktype = HTLink_type(pres))) { HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(pres)); char * dest_uri = HTAnchor_address((HTAnchor *) dest); if (src_uri && dest_uri) { #ifdef HT_MYSQL if (mr->sqllog) { HTSQLLog_addLinkRelationship (mr->sqllog, src_uri, dest_uri, HTAtom_name(linktype), NULL); } #endif if (log) { HTFormat format = HTAnchor_format(dest); HTLog_addText(log, "%s %s %s --> %s\n", HTAtom_name(linktype), format != WWW_UNKNOWN ? HTAtom_name(format) : "<unknown>", src_uri, dest_uri); } HT_FREE(dest_uri); } } } } /* Cleanup */ HT_FREE(src_uri); } anchor = (HTParentAnchor *) HTArray_nextObject(array, data); } if (log) HTLog_close(log); return YES; } return NO; } /* ** Sort the anchor array and log last modified date */ PRIVATE BOOL calculate_lm (Robot * mr, HTArray * array) { if (mr && array) { HTLog * log = HTLog_open(mr->lmfile, YES, YES); if (log) { void ** data = NULL; HTParentAnchor * anchor = NULL; HTArray_sort(array, LastModifiedSort); anchor = (HTParentAnchor *) HTArray_firstObject(array, data); while (anchor) { char * uri = HTAnchor_address((HTAnchor *) anchor); time_t lm = HTAnchor_lastModified(anchor); if (uri && lm > 0) HTLog_addText(log, "%s %s\n", HTDateTimeStr(&lm, NO), uri); HT_FREE(uri); anchor = (HTParentAnchor *) HTArray_nextObject(array, data); } } HTLog_close(log); return YES; } return NO; } PRIVATE int LastModifiedSort (const void * a, const void * b) { time_t aa = HTAnchor_lastModified(*(HTParentAnchor **) a); time_t bb = HTAnchor_lastModified(*(HTParentAnchor **) b); return bb - aa; } /* ** Sort the anchor array and log the document title */ PRIVATE BOOL calculate_title (Robot * mr, HTArray * array) { if (mr && array) { HTLog * log = HTLog_open(mr->titlefile, YES, YES); if (log) { void ** data = NULL; HTParentAnchor * anchor = NULL; HTArray_sort(array, TitleSort); anchor = (HTParentAnchor *) HTArray_firstObject(array, data); while (anchor) { char * uri = HTAnchor_address((HTAnchor *) anchor); const char * title = HTAnchor_title(anchor); HTCharset charset = HTAnchor_charset(anchor); if (uri) HTLog_addText(log, "%s `%s\' %s\n", charset ? HTAtom_name(charset) : "<none>", title ? title : "<none>", uri); HT_FREE(uri); anchor = (HTParentAnchor *) HTArray_nextObject(array, data); } } HTLog_close(log); return YES; } return NO; } PRIVATE int TitleSort (const void * a, const void * b) { const char * aa = HTAnchor_title(*(HTParentAnchor **) a); const char * bb = HTAnchor_title(*(HTParentAnchor **) b); return strcasecomp(bb?bb:"", aa?aa:""); } /* ** Calculate distributions for media types. The same mechanism ** can be used for other characteristics with relatively ** few outcomes. */ PRIVATE HTList * mediatype_distribution (HTArray * array) { if (array) { HTList * mt = HTList_new(); MetaDist * pres = NULL; void ** data = NULL; HTParentAnchor * anchor = NULL; anchor = (HTParentAnchor *) HTArray_firstObject(array, data); while (anchor) { HTFormat format = HTAnchor_format(anchor); if (format && format != WWW_UNKNOWN) { HTList * cur = mt; /* If found then increase counter */ while ((pres = (MetaDist *) HTList_nextObject(cur))) { if (pres->name == format) { pres->hits++; break; } } /* If not found then add new format to list */ if (!pres) { if ((pres = (MetaDist *) HT_CALLOC(1, sizeof(MetaDist))) == NULL) HT_OUTOFMEM("mediatype_distribution"); pres->name = format; pres->hits = 1; HTList_addObject(mt, pres); HTList_insertionSort(mt, FormatSort); } } /* Find next anchor in array */ anchor = (HTParentAnchor *) HTArray_nextObject(array, data); } return mt; } return NULL; } /* ** Calculate distributions for charsets. The same mechanism ** can be used for other characteristics with relatively ** few outcomes. */ PRIVATE HTList * charset_distribution (HTArray * array) { if (array) { HTList * cs = HTList_new(); MetaDist * pres = NULL; void ** data = NULL; HTParentAnchor * anchor = NULL; anchor = (HTParentAnchor *) HTArray_firstObject(array, data); while (anchor) { HTCharset charset = HTAnchor_charset(anchor); if (charset) { HTList * cur = cs; /* If found then increase counter */ while ((pres = (MetaDist *) HTList_nextObject(cur))) { if (pres->name == charset) { pres->hits++; break; } } /* If not found then add new format to list */ if (!pres) { if ((pres = (MetaDist *) HT_CALLOC(1, sizeof(MetaDist))) == NULL) HT_OUTOFMEM("charset_distribution"); pres->name = charset; pres->hits = 1; HTList_addObject(cs, pres); HTList_insertionSort(cs, FormatSort); } } /* Find next anchor in array */ anchor = (HTParentAnchor *) HTArray_nextObject(array, data); } return cs; } return NULL; } PRIVATE int FormatSort (const void * a, const void * b) { MetaDist * aa = (MetaDist *) a; MetaDist * bb = (MetaDist *) b; return strcmp(HTAtom_name(bb->name), HTAtom_name(aa->name)); } PRIVATE BOOL log_meta_distribution (const char * logfile, HTList * distribution) { if (logfile && distribution) { HTLog * log = HTLog_open(logfile, YES, YES); if (log) { HTList * cur = distribution; MetaDist * pres; while ((pres = (MetaDist *) HTList_nextObject(cur))) { if (pres->name) { HTLog_addText(log, "%8d %s\n", pres->hits, HTAtom_name(pres->name)); } } HTLog_close(log); } } return NO; } PRIVATE BOOL delete_meta_distribution (HTList * distribution) { if (distribution) { HTList * cur = distribution; MetaDist * pres; while ((pres = (MetaDist *) HTList_nextObject(cur))) HT_FREE(pres); HTList_delete(distribution); return YES; } return NO; } /* Statistics ** ---------- ** Calculates a bunch of statistics for the anchors traversed */ PRIVATE BOOL calculate_statistics (Robot * mr) { long total_docs = mr->get_docs + mr->head_docs + mr->other_docs; if (!mr) return NO; /* Calculate efficiency */ if (mr->time > 0) { ms_t t = HTGetTimeInMillis() - mr->time; if (t > 0) { double loadfactor = (mr->get_bytes / (t * 0.001)); double reqprsec = (total_docs / (t * 0.001)); double secs = t / 1000.0; char bytes[50]; if (SHOW_REAL_QUIET(mr)) HTPrint("\nAccessed %ld documents in %.2f seconds (%.2f requests pr sec)\n", total_docs, secs, reqprsec); HTNumToStr(mr->get_bytes, bytes, 50); if (SHOW_REAL_QUIET(mr)) HTPrint("\tDid a GET on %ld document(s) and downloaded %s bytes of document bodies (%2.1f bytes/sec)\n", mr->get_docs, bytes, loadfactor); HTNumToStr(mr->head_bytes, bytes, 50); if (SHOW_REAL_QUIET(mr)) HTPrint("\tDid a HEAD on %ld document(s) with a total of %s bytes\n", mr->head_docs, bytes); } } /* Create an array of existing anchors */ if (total_docs > 1) { HTArray * array = HTAnchor_getArray(total_docs); if (array) { /* Distributions */ if (mr->flags & MR_DISTRIBUTIONS) { if (SHOW_REAL_QUIET(mr)) HTPrint("\nDistributions:\n"); } /* Sort after hit counts */ if (mr->hitfile) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged hit count distribution in file `%s\'\n", mr->hitfile); calculate_hits(mr, array); } /* Sort after link relations */ #ifdef HT_MYSQL if (mr->relfile || mr->sqllog) { #else if (mr->relfile) { #endif if (mr->relfile && SHOW_REAL_QUIET(mr)) HTPrint("\tLogged link relationship distribution in file `%s\'\n", mr->relfile); calculate_linkRelations(mr, array); } /* Sort after modified date */ if (mr->lmfile) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged last modified distribution in file `%s\'\n", mr->lmfile); calculate_lm(mr, array); } /* Sort after title */ if (mr->titlefile) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged title distribution in file `%s\'\n", mr->titlefile); calculate_title(mr, array); } /* Find mediatype distribution */ if (mr->mtfile) { HTList * mtdist = mediatype_distribution(array); if (mtdist) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged media type distribution in file `%s\'\n", mr->mtfile); log_meta_distribution(mr->mtfile, mtdist); delete_meta_distribution(mtdist); } } /* Find charset distribution */ if (mr->charsetfile) { HTList * charsetdist = charset_distribution(array); if (charsetdist) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged charset distribution in file `%s\'\n", mr->charsetfile); log_meta_distribution(mr->charsetfile, charsetdist); delete_meta_distribution(charsetdist); } } /* Add as may other stats here as you like */ /* ... */ /* Delete the array */ HTArray_delete(array); } } return YES; } PRIVATE HTParentAnchor * get_last_parent(HTParentAnchor *anchor) { HTAnchor *anc; HTList *sources = anchor->sources; while((anc = (HTAnchor *) HTList_nextObject(sources)) != NULL) { HTParentAnchor *panchor = HTAnchor_parent(anc); return panchor; } return NULL; } PRIVATE HTLink * HTLink_find_type(HTAnchor * src, HTAnchor * dest, char *linktype) { if(src && dest && linktype) { HTLink * link = HTAnchor_mainLink(src); HTList * sublinks = HTAnchor_subLinks(src); HTLinkType type = (HTLinkType)HTAtom_caseFor(linktype); HTAnchor *sdest = HTLink_destination(link); if (link && sdest == dest && type == HTLink_type(link)) return link; else if (sublinks) { while ((link = (HTLink *) HTList_nextObject (sublinks))) { sdest = HTLink_destination(link); if (sdest == dest && HTLink_type(link) == type) return link; } } } return NULL; } PRIVATE void update_incoming_links(HTParentAnchor *anchor, HTParentAnchor *nanchor) { if(anchor && nanchor) { HTAnchor *anc; HTList *sources = anchor->sources; while((anc = (HTAnchor *) HTList_nextObject(sources)) != NULL) { HTParentAnchor *panchor = HTAnchor_parent(anc); if((HTLink_find((HTAnchor *)panchor,(HTAnchor *)anchor)) && (!HTLink_find_type((HTAnchor *)panchor, (HTAnchor *)nanchor,"redirection"))) { HTLink_add((HTAnchor *)panchor,(HTAnchor *)nanchor, (HTLinkType) HTAtom_caseFor("redirection"), METHOD_HEAD); } } } } PRIVATE void update_hyperdoc(HyperDoc *hd,HTRequest *request) { if(hd && request) { HTParentAnchor *anchor = hd->anchor; HTParentAnchor *nanchor = HTRequest_anchor(request); HTParentAnchor *parent = HTRequest_parent(request); HyperDoc *nhd = HTAnchor_document(nanchor); char *tit = (char *) HTAnchor_title(nanchor); if(nhd && tit) StrAllocCopy(nhd->title,tit); if (anchor != nanchor) { if(nhd) { /* The redirected anchor has a Hyperdoc */ if(nhd != hd) { hd->code = REDIR_CODE; HTAnchor_setDocument(anchor,(void *)nhd); if(!HTLink_find_type((HTAnchor *)parent, (HTAnchor *)nanchor,"redirection")) { HTLink_add((HTAnchor *)parent,(HTAnchor *)nanchor, (HTLinkType) HTAtom_caseFor("redirection"), METHOD_HEAD); } } } else { /* The redirected anchor does not have a Hyperdoc */ hd->anchor = nanchor; HTAnchor_setDocument(nanchor,(void *) hd); if(!HTLink_find_type((HTAnchor *)parent,(HTAnchor *)nanchor, "redirection")) { HTLink_add((HTAnchor *)parent,(HTAnchor *)nanchor, (HTLinkType) HTAtom_caseFor("redirection") , METHOD_HEAD); } } update_incoming_links(anchor,nanchor); } } } PRIVATE void set_error_state_hyperdoc(HyperDoc * hd, HTRequest *request) { HTList * cur = HTRequest_error(request); HTError *pres; Finger * finger = (Finger *) HTRequest_context(request); Robot * mr = finger->robot; while((pres = (HTError *) HTList_nextObject(cur)) != NULL) { int code =HTErrors[HTError_index(pres)].code; hd->code = code; if((mr->flags & MR_REDIR) && code >= 200 && code < 300 ) update_hyperdoc(hd,request); } } #if 0 PRIVATE int test_for_blank_spaces(char *uri) { char *ptr = uri; for(;*ptr!='\0';ptr++) if(*ptr == ' ') return 1; return 0; } #endif /* Create a Command Line Object ** ---------------------------- */ PUBLIC Robot * Robot_new (void) { Robot * me; if ((me = (Robot *) HT_CALLOC(1, sizeof(Robot))) == NULL) HT_OUTOFMEM("Robot_new"); me->hyperdoc = HTList_new(); me->htext = HTList_new(); me->timer = DEFAULT_TIMEOUT*MILLIES; me->waits = 0; me->cwd = HTGetCurrentDirectoryURL(); me->output = OUTPUT; me->cnt = 0; me->ndoc = -1; me->fingers = HTList_new(); /* This is new */ me->queue = HTQueue_new(); me->cq = 0; me->furl = NULL; return me; } /* Delete a Command Line Object ** ---------------------------- */ PRIVATE BOOL Robot_delete (Robot * mr) { if (mr) { HTList_delete(mr->fingers); /* Calculate statistics */ calculate_statistics(mr); if (mr->hyperdoc) { HTList * cur = mr->hyperdoc; HyperDoc * pres; while ((pres = (HyperDoc *) HTList_nextObject(cur))) HyperDoc_delete(pres); HTList_delete(mr->hyperdoc); } if (mr->htext) { HTList * cur = mr->htext; HText * pres; while ((pres = (HText *) HTList_nextObject(cur))) RHText_delete(pres); HTList_delete(mr->htext); } /* Close all the log files */ if (mr->flags & MR_LOGGING) { if (SHOW_REAL_QUIET(mr)) HTPrint("\nRaw Log files:\n"); } if (mr->log) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged %5d entries in general log file `%s\'\n", HTLog_accessCount(mr->log), mr->logfile); HTLog_close(mr->log); } if (mr->ref) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged %5d entries in referer log file `%s\'\n", HTLog_accessCount(mr->ref), mr->reffile); HTLog_close(mr->ref); } if (mr->reject) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged %5d entries in rejected log file `%s\'\n", HTLog_accessCount(mr->reject), mr->rejectfile); HTLog_close(mr->reject); } if (mr->notfound) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged %5d entries in not found log file `%s\'\n", HTLog_accessCount(mr->notfound), mr->notfoundfile); HTLog_close(mr->notfound); } if (mr->conneg) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged %5d entries in content negotiation log file `%s\'\n", HTLog_accessCount(mr->conneg), mr->connegfile); HTLog_close(mr->conneg); } if (mr->noalttag) { if (SHOW_REAL_QUIET(mr)) HTPrint("\tLogged %5d entries in missing alt tag log file `%s\'\n", HTLog_accessCount(mr->noalttag), mr->noalttagfile); HTLog_close(mr->noalttag); } if (mr->output && mr->output != STDOUT) fclose(mr->output); if (mr->flags & MR_TIME) { time_t local = time(NULL); if (SHOW_REAL_QUIET(mr)) HTPrint("\nRobot terminated %s\n", HTDateTimeStr(&local, YES)); } /* This is new */ HT_FREE(mr->cdepth); HT_FREE(mr->furl); #ifdef HT_POSIX_REGEX if (mr->include) { regfree(mr->include); HT_FREE(mr->include); } if (mr->exclude) { regfree(mr->exclude); HT_FREE(mr->exclude); } if (mr->exc_robot) { regfree(mr->exc_robot); HT_FREE(mr->exc_robot); } if (mr->check) { regfree(mr->check); HT_FREE(mr->check); } #endif #ifdef HT_MYSQL if (mr->sqllog) { HTSQLLog_close(mr->sqllog); mr->sqllog = NULL; } #endif if (mr->queue) HTQueue_delete(mr->queue); HT_FREE(mr->cwd); HT_FREE(mr->prefix); HT_FREE(mr->img_prefix); HT_FREE(mr); return YES; } return NO; } /* ** This function creates a new finger object and initializes it with a new request */ PUBLIC Finger * Finger_new (Robot * robot, HTParentAnchor * dest, HTMethod method) { Finger * me; HTRequest * request = HTRequest_new(); if ((me = (Finger *) HT_CALLOC(1, sizeof(Finger))) == NULL) HT_OUTOFMEM("Finger_new"); me->robot = robot; me->request = request; me->dest = dest; HTList_addObject(robot->fingers, (void *)me); /* Set the context for this request */ HTRequest_setContext (request, me); /* Check the various flags to customize the request */ if (robot->flags & MR_PREEMPTIVE) HTRequest_setPreemptive(request, YES); if (robot->flags & MR_VALIDATE) HTRequest_setReloadMode(request, HT_CACHE_VALIDATE); if (robot->flags & MR_END_VALIDATE) HTRequest_setReloadMode(request, HT_CACHE_END_VALIDATE); /* We wanna make sure that we are sending a Host header (default) */ HTRequest_addRqHd(request, HT_C_HOST); /* Set the method for this request */ HTRequest_setMethod(request, method); robot->cnt++; return me; } PRIVATE int Finger_delete (Finger * me) { HTList_removeObject(me->robot->fingers, (void *)me); /* Done with one more */ me->robot->cnt--; /* See if we don't need to keep all the metadata around in the anchors */ if (!(me->robot->flags & MR_KEEP_META)) HTAnchor_clearHeader(HTRequest_anchor(me->request)); /* ** If we are down at one request then flush the output buffer */ if (me->request) { if (me->robot->cnt == 1) HTRequest_forceFlush(me->request); HTRequest_delete(me->request); me->request = NULL; } /* ** Delete the request and free myself */ HT_FREE(me); return YES; } PRIVATE BOOL check_constraints(Robot * mr, char *prefix, char *uri) { BOOL match = YES; /* Check for prefix match */ if (prefix) { match = HTStrMatch(prefix, uri) ? YES : NO; } #ifdef HT_POSIX_REGEX /* Check for any regular expression */ if (match && mr->include) { match = regexec(mr->include, uri, 0, NULL, 0) ? NO : YES; } if (match && mr->exc_robot) { match = regexec(mr->exc_robot, uri, 0, NULL, 0) ? YES : NO; } if (match && mr->exclude) { match = regexec(mr->exclude, uri, 0, NULL, 0) ? YES : NO; } #endif return match; } /* ** Cleanup and make sure we close all connections including the persistent ** ones */ PUBLIC void Cleanup (Robot * me, int status) { /* ** First we clean up the robot itself and calculate the various ** statistics. This can actually take some time as a lot of data ** has to be manipulated */ Robot_delete(me); /* ** Then we shut down libwww */ HTProfile_delete(); #ifdef HT_MEMLOG HTMemLog_close(); #endif #ifdef VMS exit(status ? status : 1); #else exit(status ? status : 0); #endif } #ifdef HT_POSIX_REGEX PRIVATE char * get_regerror (int errcode, regex_t * compiled) { size_t length = regerror (errcode, compiled, NULL, 0); char * str = NULL; if ((str = (char *) HT_MALLOC(length+1)) == NULL) HT_OUTOFMEM("get_regerror"); (void) regerror (errcode, compiled, str, length); return str; } PUBLIC regex_t * get_regtype (Robot * mr, const char * regex_str, int cflags) { regex_t * regex = NULL; if (regex_str && *regex_str) { int status; if ((regex = (regex_t *) HT_CALLOC(1, sizeof(regex_t))) == NULL) HT_OUTOFMEM("get_regtype"); if ((status = regcomp(regex, regex_str, cflags))) { char * err_msg = get_regerror(status, regex); if (SHOW_REAL_QUIET(mr)) HTPrint("Regular expression error: %s\n", err_msg); HT_FREE(err_msg); Cleanup(mr, -1); } } return regex; } #endif PUBLIC void VersionInfo (void) { HTPrint("\nW3C OpenSource Software"); HTPrint("\n-----------------------\n\n"); HTPrint("\tWebbot version %s\n", APP_VERSION); HTPrint("\tusing the W3C libwww library version %s.\n\n",HTLib_version()); HTPrint("\tSee \"%s\" for help\n", COMMAND_LINE); HTPrint("\tSee \"http://www.w3.org/Robot/User/\" for user information\n"); HTPrint("\tSee \"http://www.w3.org/Robot/\" for general information\n\n"); HTPrint("\tPlease send feedback to the <www-lib@w3.org> mailing list,\n"); HTPrint("\tsee \"http://www.w3.org/Library/#Forums\" for details\n\n"); } /* redirection_handler ** ------------------- ** If we are set up to handle redirections then handle it here. */ PUBLIC int redirection_handler (HTRequest * request, HTResponse * response, void * param, int status) { Finger * finger = (Finger *) HTRequest_context(request); Robot * mr = finger->robot; HTParentAnchor * me = HTRequest_anchor(request); HTAnchor * redirection = HTResponse_redirection(response); HTParentAnchor * redirection_parent = HTAnchor_parent(redirection); HyperDoc * redirection_hd = HTAnchor_document(redirection_parent); char * uri = NULL; char * redirection_parent_addr = NULL; BOOL match = YES; BOOL check = NO; /* In case we didn't get any redirection destination */ if (!redirection) return HT_OK; /* Get the addresses */ uri = HTAnchor_address((HTAnchor *) me); redirection_parent_addr = HTAnchor_address((HTAnchor *) redirection_parent); if (SHOW_QUIET(mr)) HTPrint("Robot....... Checking redirecting from `%s\' to `%s\'\n", uri, redirection_parent_addr); /* Log the event */ #ifdef HT_MYSQL if (mr->sqllog && redirection_parent_addr) HTSQLLog_addLinkRelationship(mr->sqllog, redirection_parent_addr, uri, "redirection", NULL); #endif /* Check our constraints matcher */ match = check_constraints(mr,mr->prefix, redirection_parent_addr); #ifdef HT_POSIX_REGEX /* See if we should do a HEAD or a GET on this URI */ if (match && mr->check) { check = regexec(mr->check, uri, 0, NULL, 0) ? NO : YES; } #endif /* ** If we already have a HyperDoc for the redirected anchor ** then update it */ if (match) { if ((redirection_hd = HTAnchor_document(redirection_parent)) != NULL) { if (SHOW_QUIET(mr)) HTPrint("............ Already checked\n"); redirection_hd->hits++; HT_FREE(redirection_parent_addr); HT_FREE(uri); return HT_OK; } /* Now call the default libwww handler for actually carrying it out */ if (mr->redir_code==0 || mr->redir_code==status) { HyperDoc * me_hd = HTAnchor_document(me); HyperDoc *nhd = HyperDoc_new(mr, redirection_parent, me_hd->depth); if(mr->flags & MR_BFS) { nhd->method = METHOD_HEAD; HTQueue_append(mr->queue, (void *) nhd); (mr->cq)++; } if (check) { if (SHOW_QUIET(mr)) HTPrint("Checking redirection using HEAD\n"); HTRequest_setMethod(request, METHOD_HEAD); } HT_FREE(redirection_parent_addr); HT_FREE(uri); return HTRedirectFilter(request, response, param, status); } } else { if (SHOW_QUIET(mr)) HTPrint("............ does not fulfill constraints\n"); #ifdef HT_MYSQL if (mr->reject || mr->sqllog) #else if (mr->reject) #endif { if (mr->reject && redirection_parent_addr) HTLog_addText(mr->reject, "%s --> %s\n", redirection_parent_addr, uri); } } /* Just fall through */ HT_FREE(redirection_parent_addr); HT_FREE(uri); return HT_OK; } /* terminate_handler ** ----------------- ** This function is registered to handle the result of the request. ** If no more requests are pending then terminate program */ PUBLIC int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { Finger * finger = (Finger *) HTRequest_context(request); Robot * mr = finger->robot; if (SHOW_QUIET(mr)) HTPrint("Robot....... done with %s\n", HTAnchor_physical(finger->dest)); #ifdef HT_MYSQL if (mr->sqllog) HTSQLLog_addEntry(mr->sqllog, request, status); #endif /* Check if negotiated resource and whether we should log that*/ if (mr->conneg) { HTAssocList * cur = HTResponse_variant(response); if (cur) { BOOL first = YES; HTChunk * buffer = HTChunk_new(128); char * uri = HTAnchor_address((HTAnchor *) finger->dest); HTAssoc * pres; HTChunk_puts(buffer, uri); while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { char * value = HTAssoc_value(pres); if (first) { HTChunk_puts(buffer, "\t("); first = NO; } else HTChunk_puts(buffer, ", "); /* Output the name */ HTChunk_puts(buffer, HTAssoc_name(pres)); /* Only output the value if not empty string */ if (value && *value) { HTChunk_puts(buffer, "="); HTChunk_puts(buffer, value); } } if (!first) HTChunk_puts(buffer, ")"); HTLog_addLine(mr->conneg, HTChunk_data(buffer)); HTChunk_delete(buffer); HT_FREE(uri); } } /* Count the amount of body data that we have read */ if (HTRequest_method(request) == METHOD_GET) { int length = HTAnchor_length(HTRequest_anchor(request)); if (length > 0) mr->get_bytes += length; mr->get_docs++; } else if (HTRequest_method(request) == METHOD_HEAD) { int length = HTAnchor_length(HTRequest_anchor(request)); if (length > 0) mr->head_bytes += length; mr->head_docs++; } else { mr->other_docs++; } if (!(mr->flags & MR_BFS)) { #if 0 HyperDoc * hd = HTAnchor_document(finger->dest); if (hd) set_error_state_hyperdoc(hd,request); #endif /* Delete this thread */ Finger_delete(finger); /* Should we stop? */ if (mr->cnt <= 0) { if (SHOW_QUIET(mr)) HTPrint(" Everything is finished...\n"); Cleanup(mr, 0); /* No way back from here */ } } if (SHOW_QUIET(mr)) HTPrint(" %d outstanding request%s\n", mr->cnt, mr->cnt == 1 ? "" : "s"); return HT_OK; } PUBLIC int bfs_terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { Finger * finger = (Finger *) HTRequest_context(request); Robot * mr = finger->robot; HTParentAnchor * dest = finger->dest; HyperDoc * hd = HTAnchor_document(dest); int depth = (hd ? hd->depth : -1); if (hd) set_error_state_hyperdoc(hd,request); if(hd && (HTRequest_method(request)== METHOD_HEAD) && (depth < mr->depth)) { hd->method = METHOD_GET; HTQueue_append(mr->queue, (void *)hd); (mr->cq)++; } Finger_delete(finger); if(!(mr->flags & MR_PREEMPTIVE)) Serving_queue(mr); return HT_OK; } PUBLIC void Serving_queue(Robot *mr) { BOOL abort = NO; Finger *nfinger; while(!abort) { if(!HTQueue_isEmpty(mr->queue)) { HTRequest *newreq; HyperDoc *nhd = (HyperDoc *)HTQueue_headOfQueue(mr->queue); if(nhd) { char *uri = HTAnchor_address((HTAnchor *)nhd->anchor); HTQueue_dequeue(mr->queue); (mr->cq)--; nfinger = Finger_new(mr, nhd->anchor, nhd->method); newreq = nfinger->request; if(SHOW_QUIET(mr)) HTPrint("Request from QUEUE %s\n",uri); HT_FREE(uri); if(SHOW_QUIET(mr)) HTPrint("%d elements in queue \n", mr->cq); HTRequest_setParent(newreq,get_last_parent(nhd->anchor)); /* @@@ Should be done using a timer and not sleep! @@@ */ #if 0 if(mr->waits) sleep(mr->waits); #endif if (HTLoadAnchor((HTAnchor *)nhd->anchor , newreq) != YES) { if (SHOW_QUIET(mr)) HTPrint("not tested!\n"); Finger_delete(nfinger); } } else abort = YES; } else abort = YES; } if(SHOW_QUIET(mr)) HTPrint("Queue size: %d \n", mr->cq); if (mr->cnt <= 0 || (abort && (mr->flags & MR_PREEMPTIVE))) { if(mr->cnt > 0) if(SHOW_QUIET(mr)) HTPrint("%d requests were not served\n", mr->cnt); if (SHOW_QUIET(mr)) HTPrint(" Everything is finished...\n"); Cleanup(mr, 0); /* No way back from here */ } } /* ------------------------------------------------------------------------- */ /* HTEXT INTERFACE */ /* ------------------------------------------------------------------------- */ PUBLIC BOOL Robot_registerHTMLParser (void) { HText_registerCDCallback(RHText_new, RHText_delete); HText_registerLinkCallback(RHText_foundLink); return YES; } PRIVATE HText * RHText_new (HTRequest * request, HTParentAnchor * anchor, HTStream * stream) { HText * me; Finger * finger = (Finger *) HTRequest_context(request); Robot * mr = finger->robot; char * robots = NULL; if ((me = (HText *) HT_CALLOC(1, sizeof(HText))) == NULL) HT_OUTOFMEM("RHText_new"); /* Bind the HText object together with the Request Object */ me->request = request; me->follow = YES; /* Check to see if we have any meta tags */ if (!(mr->flags & MR_NOMETATAGS) && (robots = HTAnchor_robots(anchor)) != NULL) { char * strval = NULL; char * ptr = NULL; char * token = NULL; StrAllocCopy(strval, robots); ptr = strval; while ((token = HTNextField(&ptr)) != NULL) { if (!strcasecomp(token, "nofollow")) { me->follow = NO; break; } } HT_FREE(strval); } /* Add this HyperDoc object to our list */ if (!mr->htext) mr->htext = HTList_new(); HTList_addObject(mr->htext, (void *) me); return me; } PRIVATE BOOL RHText_delete (HText * me) { if (me) { HT_FREE(me); return YES; } return NO; } PRIVATE void RHText_foundAnchor (HText * text, HTChildAnchor * anchor) { if (text && anchor) { Finger * finger = (Finger *) HTRequest_context(text->request); Robot * mr = finger->robot; HTAnchor * dest = HTAnchor_followMainLink((HTAnchor *) anchor); HTParentAnchor * dest_parent = HTAnchor_parent(dest); char * uri = HTAnchor_address((HTAnchor *) dest_parent); HyperDoc * hd = HTAnchor_document(dest_parent); HTParentAnchor * referer = HTRequest_anchor(text->request); BOOL match = text->follow; BOOL check = NO; /* These are new variables */ HyperDoc * nhd = NULL; BOOL follow = YES; /* These three variables were moved */ /*HTParentAnchor * last_anchor = HTRequest_parent(text->request);*/ HTParentAnchor * last_anchor = HTRequest_anchor(text->request); HyperDoc * last_doc = HTAnchor_document(last_anchor); int depth = last_doc ? last_doc->depth+1 : 0; if (!uri) return; if (SHOW_QUIET(mr)) HTPrint("Robot....... Found `%s\' - \n", uri ? uri : "NULL\n"); if (hd) { if (SHOW_QUIET(mr)) HTPrint("............ Already checked\n"); hd->hits++; #ifdef HT_MYSQL if (mr->sqllog) { char * ref_addr = HTAnchor_address((HTAnchor *) referer); if (ref_addr) { HTSQLLog_addLinkRelationship(mr->sqllog, ref_addr, uri, "referer", NULL); HT_FREE(ref_addr); } } #endif HT_FREE(uri); return; } /* Check our constraints matcher */ match = check_constraints(mr,mr->prefix, uri); #ifdef HT_POSIX_REGEX /* See if we should do a HEAD or a GET on this URI */ if (match && mr->check) { check = regexec(mr->check, uri, 0, NULL, 0) ? NO : YES; } #endif #if 0 /* This is already checked in HTParse.c */ if(uri && test_for_blank_spaces(uri)) follow = NO; else #endif if (mr->ndoc == 0) /* Number of Documents is reached */ follow = NO; /* Test whether we already have a hyperdoc for this document */ if (!hd && dest_parent) { nhd = HyperDoc_new(mr, dest_parent, depth); mr->cdepth[depth]++; } /* Test whether we already have a hyperdoc for this document */ if (mr->flags & MR_LINK && match && dest_parent && follow && !hd) { if (mr->flags & MR_BFS) { nhd->method = METHOD_HEAD; HTQueue_enqueue(mr->queue, (void *) nhd); (mr->cq)++; if(mr->ndoc > 0) mr->ndoc--; } else { Finger * newfinger = Finger_new(mr, dest_parent, METHOD_GET); HTRequest * newreq = newfinger->request; HTRequest_setParent(newreq, referer); nhd->method = METHOD_GET; if (check || depth >= mr->depth) { if (SHOW_QUIET(mr)) HTPrint("loading at depth %d using HEAD\n", depth); HTRequest_setMethod(newreq, METHOD_HEAD); nhd->method = METHOD_HEAD; } else { if (SHOW_QUIET(mr)) HTPrint("loading at depth %d\n", depth); } if (HTLoadAnchor((HTAnchor *) dest_parent, newreq) != YES) { if (SHOW_QUIET(mr)) HTPrint("not tested!\n"); Finger_delete(newfinger); } } } else { if (SHOW_QUIET(mr)) HTPrint("............ does not fulfill constraints\n"); #ifdef HT_MYSQL if (mr->reject || mr->sqllog) { #else if (mr->reject) { #endif if (referer) { char * ref_addr = HTAnchor_address((HTAnchor *) referer); if (mr->reject && ref_addr) HTLog_addText(mr->reject, "%s --> %s\n", ref_addr, uri); #ifdef HT_MYSQL if (mr->sqllog && mr->sqlexternals && ref_addr) HTSQLLog_addLinkRelationship(mr->sqllog, ref_addr, uri, "referer", NULL); #endif HT_FREE(ref_addr); } } } HT_FREE(uri); } } PRIVATE void RHText_foundImage (HText * text, HTChildAnchor * anchor, const char *alt, const char * align, BOOL isMap) { if (text && anchor) { Finger * finger = (Finger *) HTRequest_context(text->request); Robot * mr = finger->robot; if (mr->flags & MR_IMG) { HTAnchor * dest = HTAnchor_followMainLink((HTAnchor *) anchor); HTParentAnchor * dest_parent = HTAnchor_parent(dest); char * uri = HTAnchor_address((HTAnchor *) dest_parent); HyperDoc * hd = HTAnchor_document(dest_parent); HTParentAnchor * referer = HTRequest_anchor(text->request); BOOL match = YES; if (!uri) return; if (hd) { if (SHOW_QUIET(mr)) HTPrint("............ Already checked\n"); hd->hits++; #ifdef HT_MYSQL if (mr->sqllog) { char * ref_addr = HTAnchor_address((HTAnchor *) referer); if (ref_addr) { HTSQLLog_addLinkRelationship(mr->sqllog, ref_addr, uri, "image", alt); HT_FREE(ref_addr); } } #endif HT_FREE(uri); return; } /* Check our constraints matcher */ match = check_constraints(mr, mr->img_prefix, uri); /* Test whether we already have a hyperdoc for this document */ if (match && dest) { Finger * newfinger = Finger_new(mr, dest_parent, mr->flags & MR_SAVE ? METHOD_GET : METHOD_HEAD); HTRequest * newreq = newfinger->request; HyperDoc_new(mr, dest_parent, 1); HTRequest_setParent(newreq, referer); /* Check whether we should report missing ALT tags */ if (mr->noalttag && (alt==NULL || *alt=='\0')) { if (referer) { char * ref_addr = HTAnchor_address((HTAnchor *) referer); if (ref_addr) HTLog_addText(mr->noalttag, "%s --> %s\n", ref_addr, uri); HT_FREE(ref_addr); } } if (SHOW_QUIET(mr)) HTPrint("Robot....... Checking Image `%s\'\n", uri); if (HTLoadAnchor((HTAnchor *) dest, newreq) != YES) { if (SHOW_QUIET(mr)) HTPrint("Robot....... Image not tested!\n"); Finger_delete(newfinger); } } else { if (SHOW_QUIET(mr)) HTPrint("............ does not fulfill constraints\n"); #ifdef HT_MYSQL if (mr->reject || mr->sqllog) { #else if (mr->reject) { #endif if (referer) { char * ref_addr = HTAnchor_address((HTAnchor *) referer); if (mr->reject && ref_addr) HTLog_addText(mr->reject, "%s --> %s\n", ref_addr, uri); #ifdef HT_MYSQL if (mr->sqllog && mr->sqlexternals && ref_addr) HTSQLLog_addLinkRelationship(mr->sqllog, ref_addr, uri, "image", alt); #endif HT_FREE(ref_addr); } } } HT_FREE(uri); } } } PRIVATE void RHText_foundLink (HText * text, int element_number, int attribute_number, HTChildAnchor * anchor, const BOOL * present, const char ** value) { if (text && anchor) { Finger * finger = (Finger *) HTRequest_context(text->request); Robot * mr = finger->robot; if (SHOW_QUIET(mr)) HTPrint("Robot....... Received element %d, attribute %d with anchor %p\n", element_number, attribute_number, anchor); if ((element_number==HTML_IMG && attribute_number==HTML_IMG_SRC) || (element_number==HTML_BODY && attribute_number==HTML_BODY_BACKGROUND) || (element_number==HTML_INPUT && attribute_number==HTML_INPUT_SRC)) RHText_foundImage(text, anchor, NULL, NULL, NO); else RHText_foundAnchor(text, anchor); } } PUBLIC char * get_robots_txt(char * uri) { char *str = NULL; HTChunk * chunk; HTParentAnchor *anchor = HTAnchor_parent(HTAnchor_findAddress(uri)); HTRequest *request = HTRequest_new(); HTRequest_setOutputFormat(request, WWW_SOURCE); HTRequest_setPreemptive(request, YES); HTRequest_setMethod(request, METHOD_GET); chunk = HTLoadAnchorToChunk ((HTAnchor *)anchor, request); str = HTChunk_toCString(chunk); HTRequest_delete(request); return str; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/HTRobot.html�����������������������������������������������������������������������0100644�0000764�0000144�00000001675�06615175616�015662� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Webbot - the W3C Mini Robot</TITLE> </HEAD> <BODY> <H1> Webbot - the W3C Mini Robot </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> The Webbot is a "proof of concept" application that is using <A HREF="/">libwww</A>. It can be used to perform multiple down loads from the command line. It can issue HTTP, FTP, Gopher, local Files, and News request and it can handle <EM>GET</EM> and <EM>HEAD</EM>. <P> The module is implemented by <A HREF="HTRobot.c">HTRobot.c</A>, and it is a part of the <A HREF="http://www.w3.org/pub/WWW/Robot/">W3C Mini Robot</A>. <PRE> #ifndef HTROBOT_H #define HTROBOT_H </PRE> <H2> Handling of output </H2> <PRE> #define STDOUT stdout #define OUTPUT stdout </PRE> <PRE> #endif /* HTROBOT_H */ </PRE> <P> <HR> <ADDRESS> @(#) $Id: HTRobot.html,v 1.4 2025/10/26 22:45:34 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������libwww/Robot/src/Makefile.am������������������������������������������������������������������������0100644�0000764�0000144�00000004311�07142510565�015465� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. bin_PROGRAMS = webbot webbot_LDADD = \ $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la \ -lm @LIBWWWXML@ @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ SUBDIRS = windows INCLUDES = \ -I$(srcdir)/../../Library/src \ -I$(top_srcdir)/modules/expat/xmlparse # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif webbot_SOURCES = \ HTRobot.c RobotMain.c RobotTxt.c HTQueue.c BUILT_SOURCES = \ HTRobot.h HTRobMan.h RobotTxt.h HTQueue.h DOCS := $(wildcard *.html) EXTRA_DIST = \ $(BUILT_SOURCES) \ $(DOCS) \ robot.sh inc: $(BUILT_SOURCES) @echo Generated built sources PURIFY_CACHE = @PURIFY_CACHE@ purify: $(webbot_OBJECTS) $(webbot_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(webbot_OBJECTS) \ -lm \ ../../Library/src/.libs/libwww.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/RobotMain.c������������������������������������������������������������������������0100644�0000764�0000144�00000044752�06672616425�015515� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: RobotMain.c,v 1.11 2025/03/14 02:21:09 frystyk Exp $ ** ** W3C Webbot can be found at "http://www.w3.org/Robot/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Authors: ** HFN Henrik Frystyk Nielsen, (frystyk@w3.org) ** BR Bob Racko ** JP John Punin ** ** History: ** Dec 04 95 First version ** Oct 1998 Split into separate files */ #include "HTRobMan.h" #include "RobotTxt.h" #define SHOW_QUIET(mr) ((mr) && !((mr)->flags & MR_QUIET)) #define SHOW_REAL_QUIET(mr) ((mr) && !((mr)->flags & MR_REAL_QUIET)) /* ------------------------------------------------------------------------- */ /* MAIN PROGRAM */ /* ------------------------------------------------------------------------- */ PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } int main (int argc, char ** argv) { int status = 0; int arg; BOOL cache = NO; /* Use persistent cache */ BOOL flush = NO; /* flush the persistent cache */ char * cache_root = NULL; int cache_size = DEFAULT_CACHE_SIZE; HTChunk * keywords = NULL; /* From command line */ int keycnt = 0; Robot * mr = NULL; Finger * finger = NULL; HTParentAnchor * startAnchor = NULL; /* Starts Mac GUSI socket library */ #ifdef GUSI GUSISetup(GUSIwithSIOUXSockets); GUSISetup(GUSIwithInternetSockets); #endif #ifdef __MWERKS__ /* STR */ InitGraf((Ptr) &qd.thePort); InitFonts(); InitWindows(); InitMenus(); TEInit(); InitDialogs(nil); InitCursor(); SIOUXSettings.asktosaveonclose = false; argc=ccommand(&argv); #endif /* __MWERKS__ */ #ifdef HT_MEMLOG HTMemLog_open(DEFAULT_MEMLOG, 8192, YES); #endif /* Initiate W3C Reference Library with a robot profile */ HTProfile_newRobot(APP_NAME, APP_VERSION); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Build a new robot object */ mr = Robot_new(); /* Scan command Line for parameters */ for (arg=1; arg<argc; arg++) { if (*argv[arg] == '-') { /* non-interactive */ if (!strcmp(argv[arg], "-n")) { HTAlert_setInteractive(NO); /* help */ } else if (!strcmp(argv[arg], "-h") || !strcmp(argv[arg], "-?")) { VersionInfo(); Cleanup(mr, 0); /* clf log file */ } else if (!strcmp(argv[arg], "-l")) { mr->logfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_LOG_FILE; mr->flags |= MR_LOGGING; /* referer log file */ } else if (!strncmp(argv[arg], "-ref", 4)) { mr->reffile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_REFERER_FILE; mr->flags |= MR_LOGGING; /* Not found error log file */ } else if (!strncmp(argv[arg], "-404", 4)) { mr->notfoundfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_NOTFOUND_FILE; mr->flags |= MR_LOGGING; /* reject log file */ } else if (!strncmp(argv[arg], "-rej", 4)) { mr->rejectfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_REJECT_FILE; mr->flags |= MR_LOGGING; /* no alt tags log file */ } else if (!strncmp(argv[arg], "-alt", 4)) { mr->noalttagfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_NOALTTAG_FILE; mr->flags |= MR_LOGGING; /* negotiated resource log file */ } else if (!strncmp(argv[arg], "-neg", 4)) { mr->connegfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_CONNEG_FILE; mr->flags |= MR_LOGGING; /* hit file log */ } else if (!strcmp(argv[arg], "-hit")) { mr->hitfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_HIT_FILE; mr->flags |= MR_DISTRIBUTIONS; /* link relations file log */ } else if (!strcmp(argv[arg], "-rellog")) { mr->relfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_REL_FILE; mr->flags |= MR_DISTRIBUTIONS; /* Specific link relation to look for (only used i also -rellog) */ } else if (!strcmp(argv[arg], "-relation")) { mr->relation = (arg+1 < argc && *argv[arg+1] != '-') ? (HTLinkType) HTAtom_caseFor(argv[++arg]) : NULL; mr->flags |= MR_DISTRIBUTIONS; /* last modified log file */ } else if (!strcmp(argv[arg], "-lm")) { mr->lmfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_LM_FILE; mr->flags |= MR_DISTRIBUTIONS; /* title log file */ } else if (!strcmp(argv[arg], "-title")) { mr->titlefile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_TITLE_FILE; mr->flags |= MR_DISTRIBUTIONS; /* mediatype distribution log file */ } else if (!strncmp(argv[arg], "-for", 4)) { mr->mtfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_FORMAT_FILE; mr->flags |= (MR_KEEP_META | MR_DISTRIBUTIONS); /* charset distribution log file */ } else if (!strncmp(argv[arg], "-char", 5)) { mr->charsetfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_CHARSET_FILE; mr->flags |= (MR_KEEP_META | MR_DISTRIBUTIONS); /* rule file */ } else if (!strcmp(argv[arg], "-r")) { mr->rules = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_RULE_FILE; /* Don't follow HTML META tags with robot information */ } else if (!strcmp(argv[arg], "-nometatags")) { mr->flags |= MR_NOMETATAGS; /* output filename */ } else if (!strcmp(argv[arg], "-o")) { mr->outputfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_OUTPUT_FILE; /* URI prefix */ } else if (!strcmp(argv[arg], "-prefix")) { char * prefix = NULL; prefix = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_PREFIX; if (*prefix && *prefix != '*') { StrAllocCopy(mr->prefix, prefix); StrAllocCat(mr->prefix, "*"); } /* timeout -- Change the default request timeout */ } else if (!strcmp(argv[arg], "-timeout")) { int timeout = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_TIMEOUT; if (timeout > 1) mr->timer = timeout*MILLIES; /* wait -- Change the default pwait time */ /* This is new */ } else if (!strcmp(argv[arg], "-wait")) { int waits = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : 0; if (waits > 0) mr->waits = waits; /* Force no pipelined requests */ } else if (!strcmp(argv[arg], "-nopipe")) { HTTP_setConnectionMode(HTTP_11_NO_PIPELINING); /* Stream write flush delay in ms */ } else if (!strcmp(argv[arg], "-delay")) { int delay = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_DELAY; HTHost_setDefaultWriteDelay(delay); /* Start the persistent cache */ } else if (!strcmp(argv[arg], "-cache")) { cache = YES; /* Determine the cache root */ } else if (!strcmp(argv[arg], "-cacheroot")) { cache_root = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : NULL; /* Persistent cache flush */ } else if (!strcmp(argv[arg], "-flush")) { flush = YES; /* Do a cache validation */ } else if (!strcmp(argv[arg], "-validate")) { mr->flags |= MR_VALIDATE; } else if (!strcmp(argv[arg], "-cache_size")) { cache_size = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_CACHE_SIZE; /* Do an end-to-end cache-validation */ } else if (!strcmp(argv[arg], "-endvalidate")) { mr->flags |= MR_END_VALIDATE; /* preemptive or non-preemptive access */ } else if (!strcmp(argv[arg], "-single")) { mr->flags |= MR_PREEMPTIVE; /* test inlined images */ } else if (!strcmp(argv[arg], "-img")) { mr->flags |= MR_IMG; /* load inlined images */ } else if (!strcmp(argv[arg], "-saveimg")) { mr->flags |= (MR_IMG | MR_SAVE); /* URI prefix for inlined images */ } else if (!strcmp(argv[arg], "-imgprefix")) { char * prefix = NULL; prefix = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_IMG_PREFIX; if (*prefix && *prefix!='*') { StrAllocCopy(mr->img_prefix, prefix); StrAllocCat(mr->img_prefix, "*"); } /* load anchors */ } else if (!strcmp(argv[arg], "-link") || !strcmp(argv[arg], "-depth")) { mr->flags |= MR_LINK; mr->depth = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_DEPTH; /* load fixed number of anchors */ } else if (!strcmp(argv[arg], "-ndoc")) { mr->ndoc = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : -1 ; /* Output start and end time */ } else if (!strcmp(argv[arg], "-ss")) { mr->flags |= MR_TIME; /* print version and exit */ } else if (!strcmp(argv[arg], "-version")) { VersionInfo(); Cleanup(mr, 0); /* run in BFS mode */ } else if (!strcmp(argv[arg], "-bfs")) { mr->flags |= MR_BFS; /* run in quiet mode */ } else if (!strcmp(argv[arg], "-q")) { mr->flags |= MR_QUIET; /* run in really quiet mode */ } else if (!strcmp(argv[arg], "-Q")) { mr->flags |= MR_REAL_QUIET; /* run in redirection mode */ } else if (!strcmp(argv[arg], "-redir")) { mr->flags |= MR_REDIR; mr->redir_code = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : 0; #ifdef WWWTRACE /* trace flags */ } else if (!strncmp(argv[arg], "-v", 2)) { HTSetTraceMessageMask(argv[arg]+2); #endif #ifdef HT_POSIX_REGEX /* If we can link against a POSIX regex library */ } else if (!strncmp(argv[arg], "-inc", 4)) { if (arg+1 < argc && *argv[arg+1] != '-') { mr->include = get_regtype(mr, argv[++arg], W3C_DEFAULT_REGEX_FLAGS); } } else if (!strncmp(argv[arg], "-exc", 4)) { if (arg+1 < argc && *argv[arg+1] != '-') { mr->exclude = get_regtype(mr, argv[++arg], W3C_DEFAULT_REGEX_FLAGS); } } else if (!strncmp(argv[arg], "-check", 6)) { if (arg+1 < argc && *argv[arg+1] != '-') { mr->check = get_regtype(mr, argv[++arg], W3C_DEFAULT_REGEX_FLAGS); } } else if (!strcmp(argv[arg], "-norobotstxt")) { mr->flags |= MR_NOROBOTSTXT; #endif #ifdef HT_MYSQL /* If we can link against a MYSQL database library */ } else if (!strncmp(argv[arg], "-sqldb", 5)) { mr->sqldb = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_SQL_DB; } else if (!strncmp(argv[arg], "-sqlclearlinks", 10)) { mr->sqlflags |= HTSQLLOG_CLEAR_LINKS_TABLE; } else if (!strncmp(argv[arg], "-sqlclearrequests", 12)) { mr->sqlflags |= HTSQLLOG_CLEAR_REQUESTS_TABLE; } else if (!strncmp(argv[arg], "-sqlclearresources", 12)) { mr->sqlflags |= HTSQLLOG_CLEAR_RESOURCES_TABLE; } else if (!strncmp(argv[arg], "-sqlclearuris", 10)) { mr->sqlflags |= HTSQLLOG_CLEAR_URIS_TABLE; } else if (!strncmp(argv[arg], "-sqlexternals", 5)) { mr->sqlexternals = YES; } else if (!strncmp(argv[arg], "-sqlpassword", 5)) { mr->sqlpw = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_SQL_PW; } else if (!strncmp(argv[arg], "-sqlrelative", 5)) { mr->sqlrelative = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : NULL; } else if (!strncmp(argv[arg], "-sqlserver", 5)) { mr->sqlserver = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_SQL_SERVER; } else if (!strncmp(argv[arg], "-sqluser", 5)) { mr->sqluser = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_SQL_USER; #endif } else { if (SHOW_REAL_QUIET(mr)) HTPrint("Bad Argument (%s)\n", argv[arg]); } } else { /* If no leading `-' then check for URL or keywords */ if (!keycnt) { HyperDoc *hd; /* This is new variable */ mr->furl = HTParse(argv[arg], mr->cwd, PARSE_ALL); startAnchor = HTAnchor_parent(HTAnchor_findAddress(mr->furl)); hd = HyperDoc_new(mr, startAnchor, 0); hd->method = METHOD_GET; keycnt = 1; } else { /* Check for successive keyword arguments */ char *escaped = HTEscape(argv[arg], URL_XALPHAS); if (keycnt++ <= 1) keywords = HTChunk_new(128); else HTChunk_putc(keywords, ' '); HTChunk_puts(keywords, HTStrip(escaped)); HT_FREE(escaped); } } } if (!keycnt) { VersionInfo(); Cleanup(mr, 0); } if (mr->depth != DEFAULT_DEPTH && (mr->prefix == NULL || *mr->prefix == '*')) { if (SHOW_REAL_QUIET(mr)) HTPrint("A depth of more than 0 requires that you also specify a URI prefix.\n", mr->depth); Cleanup(mr, -1); } /* Testing that HTPrint is working */ if (mr->flags & MR_TIME) { if (SHOW_REAL_QUIET(mr)) { time_t local = time(NULL); HTPrint("Welcome to the W3C mini Robot version %s - started on %s\n", APP_VERSION, HTDateTimeStr(&local, YES)); } } /* Rule file specified? */ if (mr->rules) { char * rules = HTParse(mr->rules, mr->cwd, PARSE_ALL); if (!HTLoadRulesAutomatically(rules)) if (SHOW_REAL_QUIET(mr)) HTPrint("Can't access rules\n"); HT_FREE(rules); } /* Output file specified? */ if (mr->outputfile) { if ((mr->output = fopen(mr->outputfile, "wb")) == NULL) { if (SHOW_REAL_QUIET(mr)) HTPrint("Can't open `%s'\n", mr->outputfile); mr->output = OUTPUT; } } /* This is new */ if ((mr->cdepth = (int *) HT_CALLOC(mr->depth+2, sizeof(int)))==NULL) HT_OUTOFMEM("main"); /* Should we use persistent cache? */ if (cache) { HTCacheInit(cache_root, cache_size); /* Should we start by flushing? */ if (flush) HTCache_flushAll(); } /* SQL Log specified? */ #ifdef HT_MYSQL if (mr->sqlserver) { if ((mr->sqllog = HTSQLLog_open(mr->sqlserver, mr->sqluser ? mr->sqluser : DEFAULT_SQL_USER, mr->sqlpw ? mr->sqlpw : DEFAULT_SQL_PW, mr->sqldb ? mr->sqldb : DEFAULT_SQL_DB, mr->sqlflags)) != NULL) { if (mr->sqlrelative) HTSQLLog_makeRelativeTo(mr->sqllog, mr->sqlrelative); } } #endif /* CLF Log file specified? */ if (mr->logfile) { mr->log = HTLog_open(mr->logfile, YES, YES); if (mr->log) HTNet_addAfter(HTLogFilter, NULL, mr->log, HT_ALL, HT_FILTER_LATE); } /* Referer Log file specified? */ if (mr->reffile) { mr->ref = HTLog_open(mr->reffile, YES, YES); if (mr->ref) HTNet_addAfter(HTRefererFilter, NULL, mr->ref, HT_ALL, HT_FILTER_LATE); } /* Not found error log specified? */ if (mr->notfoundfile) { mr->notfound = HTLog_open(mr->notfoundfile, YES, YES); if (mr->notfound) HTNet_addAfter(HTRefererFilter, NULL, mr->notfound, -404, HT_FILTER_LATE); } /* Check that the redirection code is valid */ if (mr->flags & MR_REDIR) { BOOL isredir = NO; if (mr->redir_code == HT_PERM_REDIRECT || mr->redir_code == 0) { HTNet_addAfter(redirection_handler, "http://*" , NULL, HT_PERM_REDIRECT, HT_FILTER_LATE); isredir = YES; } if (mr->redir_code == HT_TEMP_REDIRECT || mr->redir_code == 0) { HTNet_addAfter(redirection_handler, "http://*", NULL, HT_TEMP_REDIRECT, HT_FILTER_LATE); isredir = YES; } if (mr->redir_code == HT_FOUND || mr->redir_code == 0) { HTNet_addAfter(redirection_handler, "http://*", NULL, HT_FOUND, HT_FILTER_LATE); isredir = YES; } if (mr->redir_code == HT_SEE_OTHER || mr->redir_code == 0) { HTNet_addAfter(redirection_handler, "http://*", NULL, HT_SEE_OTHER, HT_FILTER_LATE); isredir = YES; } if (!isredir) { if (SHOW_REAL_QUIET(mr)) HTPrint("%d is not a valid redirection code\n", mr->redir_code); Cleanup(mr, -1); } } /* Negotiated resource log specified? */ if (mr->connegfile) mr->conneg = HTLog_open(mr->connegfile, YES, YES); /* No alt tags log file specified? */ if (mr->noalttagfile) mr->noalttag = HTLog_open(mr->noalttagfile, YES, YES); /* Reject Log file specified? */ if (mr->rejectfile) mr->reject = HTLog_open(mr->rejectfile, YES, YES); #ifdef HT_POSIX_REGEX if(!(mr->flags & MR_NOROBOTSTXT)) { char *ruri = HTParse(ROBOTS_TXT, mr->furl, PARSE_ALL); char *robot_str = get_robots_txt(ruri); char *reg_exp_robot = robot_str ? scan_robots_txt(robot_str,APP_NAME) : NULL; if (SHOW_REAL_QUIET(mr)) HTPrint("robots.txt uri is `%s'\n", ruri); if(robot_str) HT_FREE(robot_str); if(reg_exp_robot) { mr->exc_robot = get_regtype(mr, reg_exp_robot, W3C_DEFAULT_REGEX_FLAGS); HT_FREE(reg_exp_robot); } HT_FREE(ruri); } #endif /* Add our own HTML HText functions */ Robot_registerHTMLParser(); /* Register our own terminate filter */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* If doing breath first search */ if (mr->flags & MR_BFS) HTNet_addAfter(bfs_terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Setting event timeout */ HTHost_setEventTimeout(mr->timer); mr->time = HTGetTimeInMillis(); /* Start the request */ finger = Finger_new(mr, startAnchor, METHOD_GET); /* ** Make sure that the first request is flushed immediately and not ** buffered in the output buffer */ HTRequest_setFlush(finger->request, YES); /* ** Check whether we should do some kind of cache validation on ** the load */ if (mr->flags & MR_VALIDATE) HTRequest_setReloadMode(finger->request, HT_CACHE_VALIDATE); if (mr->flags & MR_END_VALIDATE) HTRequest_setReloadMode(finger->request, HT_CACHE_END_VALIDATE); /* ** Now do the load */ if (mr->flags & MR_PREEMPTIVE) HTRequest_setPreemptive(finger->request, YES); if (keywords) /* Search */ status = HTSearchAnchor(keywords, (HTAnchor *)startAnchor, finger->request); else status = HTLoadAnchor((HTAnchor *)startAnchor, finger->request); if (keywords) HTChunk_delete(keywords); if (status != YES) { if (SHOW_REAL_QUIET(mr)) HTPrint("Can't access resource\n"); Cleanup(mr, -1); } /* Go into the event loop... */ if((mr->flags & MR_PREEMPTIVE) && (mr->flags & MR_BFS)) Serving_queue(mr); else HTEventList_loop(finger->request); /* Only gets here if event loop fails */ Cleanup(mr, 0); return 0; } ����������������������libwww/Robot/src/RobotTxt.c�������������������������������������������������������������������������0100644�0000764�0000144�00000016567�06664352704�015411� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: RobotTxt.c,v 1.4 2025/02/22 22:10:12 frystyk Exp $ ** ** W3C Webbot can be found at "http://www.w3.org/Robot/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Authors: ** JP John Punin ** ** History: ** Oct 1998 Written */ #include "HTRobMan.h" #include "RobotTxt.h" PUBLIC UserAgent * new_user_agent (void) { UserAgent * ua; if ((ua = (UserAgent *) HT_CALLOC(1, sizeof(UserAgent))) == NULL) HT_OUTOFMEM("new_user_agent"); ua->disallow = HTList_new(); return ua; } PUBLIC char * get_name_user_agent (UserAgent * ua) { return ua ? ua->name : NULL; } PUBLIC HTList * get_disallow_user_agent (UserAgent * ua) { return ua ? ua->disallow : NULL; } PUBLIC BOOL set_name_user_agent (UserAgent * ua, char * name) { if (ua && name) { StrAllocCopy(ua->name, name); return YES; } return NO; } PUBLIC BOOL add_disallow_user_agent (UserAgent * ua, char * disallow) { if (ua && disallow) { char * da = NULL; StrAllocCopy(da, disallow); /* @@@ Should be an association list (HTAssocList) @@@ */ return HTList_addObject(ua->disallow, da); } return NO; } PUBLIC BOOL delete_user_agent (UserAgent * ua) { if (ua) { HT_FREE(ua->name); if (ua->disallow) { HTList *cur = ua->disallow; char *pres; while ((pres = (char *) HTList_nextObject(cur))) HT_FREE(pres); HTList_delete(ua->disallow); } return YES; } return NO; } PUBLIC BOOL delete_all_user_agents(HTList *user_agents) { if (user_agents) { HTList *cur = user_agents; UserAgent *pres; while ((pres = (UserAgent *) HTList_nextObject(cur))) delete_user_agent(pres); return HTList_delete(user_agents); } return NO; } PUBLIC char * get_regular_expression (HTList * user_agents, char * name_robot) { if (user_agents && name_robot) { HTChunk *ch = HTChunk_new (1024); HTList *cur = user_agents; UserAgent *pres; UserAgent *ua_gen=NULL; int found=0; while ((pres = (UserAgent *) HTList_nextObject(cur))) { char *name = get_name_user_agent(pres); if(!strcmp(name,"*")) ua_gen = pres; if(!strcmp(name,name_robot)) { put_string_disallow(ch,pres); found = 1; } } if(!found && ua_gen) put_string_disallow(ch,ua_gen); return (HTChunk_toCString (ch)); } return NULL; } PUBLIC BOOL put_string_disallow (HTChunk * ch, UserAgent * ua) { if (ch && ua) { HTList *cur = get_disallow_user_agent(ua); char *pres; int first = 1; while ((pres = (char *) HTList_nextObject(cur))) { if(!first) HTChunk_puts (ch,"|"); else first = 0; HTChunk_puts (ch,pres); } return YES; } return NO; } PUBLIC void print_user_agent(UserAgent *ua) { HTList *cur = ua->disallow; char *pres; HTTRACE(APP_TRACE, "User Agent : %s \n" _ ua->name); while ((pres = (char*) HTList_nextObject(cur))) HTTRACE(APP_TRACE, "Disallow : %s \n" _ pres); } PUBLIC void print_all_user_agents(HTList * user_agents) { HTList *cur = user_agents; UserAgent *pres; while ((pres = (UserAgent *) HTList_nextObject(cur))) { HTTRACE(APP_TRACE, "\nNew User Agent\n"); print_user_agent(pres); } } PUBLIC HTList * get_all_user_agents(char * rob_str) { if (rob_str) { char * ptr = rob_str; HTList * user_agents = HTList_new(); /* skip blank spaces */ while(isspace((int)*ptr)) ptr++; /* skip comments */ ptr = skip_comments(ptr); if(!get_user_agents(ptr,user_agents)) HTTRACE(APP_TRACE, "Something is wrong in robots.txt\n"); return user_agents; } return NULL; } PUBLIC char * skip_comments(char *ptr) { if (ptr && *ptr == '#') { do { while(*ptr != '\n') ptr++; while(isspace((int)*ptr)) ptr++; } while (*ptr == '#'); } return ptr; } PUBLIC void scan_name_until_eoline(char *robot_str, char *name) { char *ptr = robot_str; char *ntr = name; while(*ptr != '\n' && *ptr != '#') { *ntr = *ptr; ntr++; ptr++; if(*ptr == '\0') break; } *ntr = '\0'; } PUBLIC void scan_name_until_space(char *robot_str, char *name) { char *ptr = robot_str; char *ntr = name; while(!isspace((int)*ptr) && *ptr != '#') { *ntr = *ptr; ntr++; ptr++; if(*ptr == '\0') break; } *ntr = '\0'; } PUBLIC BOOL get_user_agents(char * ptr, HTList *user_agents) { char *uastr = "user-agent:"; char *disstr = "disallow:"; int luastr = 10; int ldisstr = 9; char name[2000]; int indices[200]; int i = 0; if (ptr && !strncasecomp(ptr,uastr,luastr)) { UserAgent *ua = NULL; do { i=0; do { ua = new_user_agent(); HTList_appendObject(user_agents,(void *)ua); indices[i++] = HTList_indexOf(user_agents, (void *)ua); ptr += luastr + 1; while(isspace((int)*ptr)) ptr++; scan_name_until_eoline(ptr,name); ptr += strlen(name) + 1; while(isspace((int)*ptr)) ptr++; ptr = skip_comments(ptr); set_name_user_agent(ua,name); } while(!strncasecomp(ptr,uastr,luastr)); if(!strncasecomp(ptr, disstr,ldisstr)) { do { ptr += ldisstr + 1; scan_name_until_space(ptr,name); ptr += strlen(name) + 1; while(isspace((int)*ptr)) ptr++; ptr = skip_comments(ptr); if(i==1) add_disallow_user_agent(ua,name); else { int j; for(j = 0 ; j < i ; j++) { ua = HTList_objectAt(user_agents, indices[j]); add_disallow_user_agent(ua,name); } } } while(!strncasecomp(ptr,disstr,ldisstr)); } else return NO; } while(!strncasecomp(ptr,uastr,luastr)); return YES; } else return NO; } PUBLIC char * scan_robots_txt(char *rob_str, char *name_robot) { char *reg_exp_exclude = NULL; HTList * user_agents = get_all_user_agents(rob_str); /*print_all_user_agents(user_agents);*/ reg_exp_exclude = get_regular_expression(user_agents, name_robot); delete_all_user_agents(user_agents); return reg_exp_exclude; } #ifdef ROBOTS_TXT_STANDALONE int main(int argc, char *argv[]) { char *text; char *reg_exp; char *filename= argc > 1 ? argv[1] : "robots.txt"; FILE *fp; struct stat statb; /* make sure the file is a regular text file and open it */ if(stat(filename, &statb) == -1 || (statb.st_mode & S_IFMT ) != S_IFREG || !(fp = fopen(filename, "r"))) { if((statb.st_mode & S_IFMT) == S_IFREG) perror(filename); else HTTRACE(ALL_TRACE, "%s : not a regular file \n" _ filename); return 1; } if(!(text = malloc((unsigned)(statb.st_size +1)))) { HTTRACE(ALL_TRACE, "Can't alloc enough space for %s" _ filename); fclose(fp); return; } if(!fread(text,sizeof(char), statb.st_size + 1, fp)) HTTRACE(APP_TRACE, "Warning: may not have read entire file!\n"); text[statb.st_size] = 0; /* be sure to NULL-terminate */ fclose(fp); if(argc > 2) { reg_exp = scan_robots_txt(text,argv[2]); if(reg_exp) { HTTRACE(ALL_TRACE, "REG EXP : %s \n" _ reg_exp); free(reg_exp); } } free(text); return 0; } #endif �����������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/RobotTxt.html����������������������������������������������������������������������0100644�0000764�0000144�00000003337�06615403035�016110� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <!-- Changed by: John R. Punin, 24-10-98 --> <TITLE>Robots Exclusion Protocol File Parser</TITLE> </HEAD> <BODY> <H1> Robots Exclusion Protocol File Parser </H1> <PRE> /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ </PRE> <P> This module parses a <A HREF="http://info.webcrawler.com/mak/projects/robots/exclusion.html#robotstxt">robots.txt</A> exclusion file which nice robots are expected to honor. Together with the <A HREF="http://info.webcrawler.com/mak/projects/robots/exclusion.html#meta">robot META tags</A>, the webbot should now behave itself on the Internet. <PRE> #ifndef ROBOTTXT_H #define ROBOTTXT_H typedef struct _user_agent_ { char * name; HTList * disallow; } UserAgent; extern char * skip_comments(char *ptr); extern UserAgent * new_user_agent(void); extern BOOL set_name_user_agent(UserAgent *ua,char *name); extern char * get_name_user_agent(UserAgent *ua); extern BOOL add_disallow_user_agent(UserAgent *ua, char *disallow); extern HTList * get_disallow_user_agent(UserAgent *ua); extern BOOL delete_user_agent(UserAgent *ua); extern BOOL delete_all_user_agents(HTList *user_agents); extern void print_user_agent(UserAgent *ua); extern void print_all_user_agents(HTList *user_agents); extern HTList * get_all_user_agents(char *rob_str); extern BOOL get_user_agents(char * ptr, HTList *user_agents); extern BOOL put_string_disallow(HTChunk *ch, UserAgent *ua); extern char * get_regular_expression(HTList* user_agents, char *name_robot); extern char * scan_robots_txt(char *rob_str, char *name_robot); #endif </PRE> <P> <HR> <ADDRESS> @(#) $Id: RobotTxt.html,v 1.2 2025/10/27 17:42:53 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/robot.sh���������������������������������������������������������������������������0100755�0000764�0000144�00000003005�06523414457�015121� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh if [ $# -lt 3 ] then echo "A simple example of how the libwww robot can be used" echo "For a full description, see" echo echo " http://www.w3.org/Robot/User/CommandLine.html" echo echo "Usage: $0 RootURI ImageRootURI LogPrefix [ flags ]" echo echo "where" echo " RootURI is the URI prefix for links, for example http://www.w3.org/Robot/" echo " ImageRootURI is the URI prefix for inlined images, for example http://www.w3.org" echo " LogPrefix is the prefix for log files, for example robot" echo " flags are any additional command line flags, for example -vp" echo echo "See" echo " http://www.w3.org/Robot/" echo echo "for more information" exit 1 fi ROOT=$1 IMGROOT=$2 LOG=$3 FLAGS=$4 ROBOT=./webbot ${ROBOT} ${FLAGS} -q -ss -n -depth 99 \ -exclude "/ArchiveBrowser/|/History/|/member/|/team/" \ -check "\.gz$|\.tar$|\.tgz$|\.Z$|\.zip$|\.ZIP$|\.exe$|\.EXE$|\.ps$|\.doc$|\.pdf$|\.xplot$|\.java$|\.c$|\.h$|\.txt$|\.ppt$|\.gif$|\.GIF$|\.tiff$|\.png$|\.PNG$|\.jpeg$|\.jpg$|\.JPE$" \ -prefix ${ROOT} \ -img -imgprefix ${IMGROOT} \ -l ${LOG}-log-clf.txt \ -alt ${LOG}-log-alt.txt \ -hit ${LOG}-log-hit.txt \ -rellog ${LOG}-log-link-relations.txt -relation stylesheet \ -lm ${LOG}-log-lastmodified.txt \ -title ${LOG}-log-title.txt \ -referer ${LOG}-log-referer.txt \ -negotiated ${LOG}-log-negotiated.txt \ -404 ${LOG}-log-notfound.txt \ -reject ${LOG}-log-reject.txt \ -format ${LOG}-log-format.txt \ -charset ${LOG}-log-charset.txt \ ${ROOT} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/Makefile���������������������������������������������������������������������������0100644�0000764�0000144�00000040620�07405520575�015100� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ bin_PROGRAMS = webbot webbot_LDADD = $(top_builddir)/Library/src/libwwwinit.la $(top_builddir)/Library/src/libwwwapp.la $(top_builddir)/Library/src/libwwwhtml.la $(top_builddir)/Library/src/libwwwtelnet.la $(top_builddir)/Library/src/libwwwnews.la $(top_builddir)/Library/src/libwwwhttp.la $(top_builddir)/Library/src/libwwwmime.la $(top_builddir)/Library/src/libwwwgopher.la $(top_builddir)/Library/src/libwwwftp.la $(top_builddir)/Library/src/libwwwfile.la $(top_builddir)/Library/src/libwwwdir.la $(top_builddir)/Library/src/libwwwcache.la $(top_builddir)/Library/src/libwwwstream.la $(top_builddir)/Library/src/libwwwmux.la $(top_builddir)/Library/src/libwwwtrans.la $(top_builddir)/Library/src/libwwwcore.la $(top_builddir)/Library/src/libwwwutils.la -lm ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la ${top_builddir}/modules/md5/libmd5.la SUBDIRS = windows INCLUDES = -I$(srcdir)/../../Library/src -I$(top_srcdir)/modules/expat/xmlparse # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html webbot_SOURCES = HTRobot.c RobotMain.c RobotTxt.c HTQueue.c BUILT_SOURCES = HTRobot.h HTRobMan.h RobotTxt.h HTQueue.h DOCS := $(wildcard *.html) EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) robot.sh PURIFY_CACHE = /tmp/purify.cache mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = bin_PROGRAMS = webbot$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../.. CPPFLAGS = LDFLAGS = LIBS = -ldl webbot_OBJECTS = HTRobot.o RobotMain.o RobotTxt.o HTQueue.o webbot_DEPENDENCIES = $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la webbot_LDFLAGS = CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/HTQueue.P .deps/HTRobot.P .deps/RobotMain.P \ .deps/RobotTxt.P SOURCES = $(webbot_SOURCES) OBJECTS = $(webbot_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Robot/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: webbot$(EXEEXT): $(webbot_OBJECTS) $(webbot_DEPENDENCIES) @rm -f webbot$(EXEEXT) $(LINK) $(webbot_LDFLAGS) $(webbot_OBJECTS) $(webbot_LDADD) $(LIBS) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Robot/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-recursive all-am: Makefile $(PROGRAMS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ distclean-tags distclean-depend distclean-generic \ clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources purify: $(webbot_OBJECTS) $(webbot_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(webbot_OBJECTS) \ -lm \ ../../Library/src/.libs/libwww.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������libwww/Robot/src/HTRobot.h��������������������������������������������������������������������������0100644�0000764�0000144�00000001330�07405520457�015124� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Webbot - the W3C Mini Robot ! Webbot - the W3C Mini Robot ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* The Webbot is a "proof of concept" application that is using libwww. It can be used to perform multiple down loads from the command line. It can issue HTTP, FTP, Gopher, local Files, and News request and it can handle GET and HEAD. The module is implemented by HTRobot.c, and it is a part of the W3C Mini Robot. */ #ifndef HTROBOT_H #define HTROBOT_H /* . Handling of output . */ #define STDOUT stdout #define OUTPUT stdout /* */ #endif /* HTROBOT_H */ /* @(#) $Id: HTRobot.html,v 1.4 2025/10/26 22:45:34 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/HTRobMan.h�������������������������������������������������������������������������0100644�0000764�0000144�00000015204�07405520457�015222� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Webbot - the W3C Mini Robot ! Webbot - the W3C Mini Robot ! */ /* ** (c) COPRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This program illustrates how to travers links using the Anchor object */ #ifndef HTROBMAN_H #define HTROBMAN_H #include "WWWLib.h" /* Global Library Include file */ #include "WWWApp.h" /* Application stuff */ #include "WWWTrans.h" #include "WWWInit.h" #include "WWWSQL.h" #include "HText.h" #include "HTRobot.h" /* Implemented here */ #ifndef W3C_VERSION #define W3C_VERSION "Unspecified" #endif #define APP_NAME "W3CRobot" #define APP_VERSION W3C_VERSION #define COMMAND_LINE "http://www.w3.org/Robot/User/CommandLine" #define ROBOTS_TXT "/robots.txt" #define DEFAULT_OUTPUT_FILE "robot.out" #define DEFAULT_RULE_FILE "robot.conf" #define DEFAULT_LOG_FILE "log-clf.txt" #define DEFAULT_HIT_FILE "log-hit.txt" #define DEFAULT_REL_FILE "log-rel.txt" #define DEFAULT_LM_FILE "log-lastmodified.txt" #define DEFAULT_TITLE_FILE "log-title.txt" #define DEFAULT_REFERER_FILE "log-referer.txt" #define DEFAULT_REJECT_FILE "log-reject.txt" #define DEFAULT_NOTFOUND_FILE "log-notfound.txt" #define DEFAULT_CONNEG_FILE "log-conneg.txt" #define DEFAULT_NOALTTAG_FILE "log-alt.txt" #define DEFAULT_FORMAT_FILE "log-format.txt" #define DEFAULT_CHARSET_FILE "log-charset.txt" #define DEFAULT_MEMLOG "robot.mem" #define DEFAULT_PREFIX "" #define DEFAULT_IMG_PREFIX "" #define DEFAULT_DEPTH 0 #define DEFAULT_DELAY 50 /* Write delay in ms */ #define DEFAULT_CACHE_SIZE 20 /* Default cache size */ #define DEFAULT_SQL_SERVER "localhost" #define DEFAULT_SQL_DB "webbot" #define DEFAULT_SQL_USER "webbot" #define DEFAULT_SQL_PW "" #if 0 #define HT_MEMLOG /* Is expensive in performance! */ #endif #define MILLIES 1000 #define DEFAULT_TIMEOUT 20 /* timeout in secs */ typedef enum _MRFlags { MR_IMG = 0x1, MR_LINK = 0x2, MR_PREEMPTIVE = 0x4, MR_TIME = 0x8, MR_SAVE = 0x10, MR_QUIET = 0x20, MR_REAL_QUIET = 0x40, MR_VALIDATE = 0x80, MR_END_VALIDATE = 0x100, MR_KEEP_META = 0x200, MR_LOGGING = 0x400, MR_DISTRIBUTIONS = 0x800, MR_NOROBOTSTXT = 0x1000, MR_NOMETATAGS = 0x2000, MR_BFS = 0x4000, MR_REDIR = 0x8000 } MRFlags; typedef struct _Robot { int depth; /* How deep is our tree */ int ndoc; int *cdepth; /* Number of nodes per level */ int cnt; /* Count of requests */ int cindex; /* Number assigned to each document */ HTList * hyperdoc; /* List of our HyperDoc Objects */ HTList * htext; /* List of our HText Objects */ HTList * fingers; HTList * queue; /* Queue */ int cq; int timer; int waits; char * cwd; /* Current dir URL */ char * rules; char * prefix; char * img_prefix; char * logfile; /* clf log */ HTLog * log; char * reffile; /* referer log */ HTLog * ref; char * rejectfile; /* unchecked links */ HTLog * reject; char * notfoundfile; /* links that returned 404 */ HTLog * notfound; char * connegfile; /* links that were conneg'ed */ HTLog * conneg; char * noalttagfile; /* images without alt tags*/ HTLog * noalttag; char * hitfile; /* links sorted after hit counts */ char * relfile; /* link sorted after relationships */ HTLinkType relation; /* Specific relation to look for */ char * titlefile; /* links with titles */ char * mtfile; /* media types encountered */ char * charsetfile; /* charsets encountered */ char * lmfile; /* sortef after last modified dates */ char * outputfile; FILE * output; char * furl; /* First url */ MRFlags flags; int redir_code; /* 0 means all, otherwise 301, 302, 305... */ long get_bytes; /* Total number of bytes processed using GET*/ long get_docs; /* Total number of documents using GET */ long head_bytes; /* bytes processed bytes processed using HEAD */ long head_docs; /* Total number of documents using HEAD*/ long other_docs; ms_t time; /* Time of run */ #ifdef HT_POSIX_REGEX regex_t * include; regex_t * exclude; regex_t * check; regex_t * exc_robot; /* Robots.txt exclusion */ #endif #ifdef HT_MYSQL HTSQLLog * sqllog; char * sqlserver; char * sqldb; char * sqluser; char * sqlpw; char * sqlrelative; BOOL sqlexternals; int sqlflags; #endif } Robot; typedef struct _Finger { Robot * robot; HTRequest * request; HTParentAnchor * dest; } Finger; /* ** The HyperDoc object is bound to the anchor and contains information about ** where we are in the search for recursive searches */ #define NO_CODE -1 #define REDIR_CODE -2 typedef struct _HyperDoc { HTParentAnchor * anchor; int depth; int hits; int code; int index; char * title; HTMethod method; } HyperDoc; /* ** This is the HText object that is created every time we start parsing an ** HTML object */ struct _HText { HTRequest * request; BOOL follow; }; /* ** A structure for calculating metadata distributions */ typedef struct _MetaDist { HTAtom * name; int hits; } MetaDist; #ifdef HT_POSIX_REGEX PUBLIC regex_t * get_regtype (Robot * mr, const char * regex_str, int cflags); #endif PUBLIC int OutputData(const char * fmt, ...); PUBLIC HyperDoc * HyperDoc_new (Robot * mr,HTParentAnchor * anchor, int depth); PUBLIC BOOL HyperDoc_delete (HyperDoc * hd); PUBLIC Robot * Robot_new (void); PUBLIC Finger * Finger_new (Robot * robot, HTParentAnchor * dest, HTMethod method); PUBLIC BOOL Robot_registerHTMLParser (void); PUBLIC void Cleanup (Robot * me, int status); PUBLIC void VersionInfo (void); PUBLIC int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) ; PUBLIC int bfs_terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) ; PUBLIC int redirection_handler (HTRequest * request, HTResponse * response, void * param, int status) ; PUBLIC void Serving_queue(Robot *mr); PUBLIC char *get_robots_txt(char *uri); #endif /* @(#) $Id: HTRobMan.html,v 1.9 2025/03/14 02:21:09 frystyk Exp $ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/RobotTxt.h�������������������������������������������������������������������������0100644�0000764�0000144�00000002660�07405520457�015377� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Robots Exclusion Protocol File Parser ! Robots Exclusion Protocol File Parser ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* This module parses a robots.txt exclusion file which nice robots are expected to honor. Together with the robot META tags, the webbot should now behave itself on the Internet. */ #ifndef ROBOTTXT_H #define ROBOTTXT_H typedef struct _user_agent_ { char * name; HTList * disallow; } UserAgent; extern char * skip_comments(char *ptr); extern UserAgent * new_user_agent(void); extern BOOL set_name_user_agent(UserAgent *ua,char *name); extern char * get_name_user_agent(UserAgent *ua); extern BOOL add_disallow_user_agent(UserAgent *ua, char *disallow); extern HTList * get_disallow_user_agent(UserAgent *ua); extern BOOL delete_user_agent(UserAgent *ua); extern BOOL delete_all_user_agents(HTList *user_agents); extern void print_user_agent(UserAgent *ua); extern void print_all_user_agents(HTList *user_agents); extern HTList * get_all_user_agents(char *rob_str); extern BOOL get_user_agents(char * ptr, HTList *user_agents); extern BOOL put_string_disallow(HTChunk *ch, UserAgent *ua); extern char * get_regular_expression(HTList* user_agents, char *name_robot); extern char * scan_robots_txt(char *rob_str, char *name_robot); #endif /* @(#) $Id: RobotTxt.html,v 1.2 2025/10/27 17:42:53 frystyk Exp $ */ ��������������������������������������������������������������������������������libwww/Robot/src/HTQueue.h��������������������������������������������������������������������������0100644�0000764�0000144�00000001324�07405520457�015126� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The Queue Class ! The Queue Class ! */ /* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */ /* */ #ifndef HTQUEUE_H #define HTQUEUE_H #include "WWWLib.h" /* . Methods . */ PUBLIC HTList * HTQueue_new(void); PUBLIC BOOL HTQueue_delete(HTList *me); PUBLIC BOOL HTQueue_enqueue(HTList *me,void *newObject); PUBLIC BOOL HTQueue_append(HTList *me,void *newObject); PUBLIC BOOL HTQueue_dequeue(HTList *me); PUBLIC BOOL HTQueue_isEmpty(HTList *me); PUBLIC void * HTQueue_headOfQueue(HTList *me); PUBLIC int HTQueue_count(HTList *me); /* */ #endif /* HTQUEUE_H */ /* @(#) $Id: HTQueue.html,v 1.1 2025/10/26 22:45:34 frystyk Exp $ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/Makefile.in������������������������������������������������������������������������0100644�0000764�0000144�00000040055�07405520526�015503� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ bin_PROGRAMS = webbot webbot_LDADD = $(top_builddir)/Library/src/libwwwinit.la $(top_builddir)/Library/src/libwwwapp.la $(top_builddir)/Library/src/libwwwhtml.la $(top_builddir)/Library/src/libwwwtelnet.la $(top_builddir)/Library/src/libwwwnews.la $(top_builddir)/Library/src/libwwwhttp.la $(top_builddir)/Library/src/libwwwmime.la $(top_builddir)/Library/src/libwwwgopher.la $(top_builddir)/Library/src/libwwwftp.la $(top_builddir)/Library/src/libwwwfile.la $(top_builddir)/Library/src/libwwwdir.la $(top_builddir)/Library/src/libwwwcache.la $(top_builddir)/Library/src/libwwwstream.la $(top_builddir)/Library/src/libwwwmux.la $(top_builddir)/Library/src/libwwwtrans.la $(top_builddir)/Library/src/libwwwcore.la $(top_builddir)/Library/src/libwwwutils.la -lm @LIBWWWXML@ @LIBWWWZIP@ @LIBWWWWAIS@ @LIBWWWSQL@ @LIBWWWMD5@ SUBDIRS = windows INCLUDES = -I$(srcdir)/../../Library/src -I$(top_srcdir)/modules/expat/xmlparse # .h files are distributed but originally are made from the # self-documenting hypertext files. SUFFIXES = .h .html webbot_SOURCES = HTRobot.c RobotMain.c RobotTxt.c HTQueue.c BUILT_SOURCES = HTRobot.h HTRobMan.h RobotTxt.h HTQueue.h DOCS := $(wildcard *.html) EXTRA_DIST = $(BUILT_SOURCES) $(DOCS) robot.sh PURIFY_CACHE = @PURIFY_CACHE@ mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = bin_PROGRAMS = webbot$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ webbot_OBJECTS = HTRobot.o RobotMain.o RobotTxt.o HTQueue.o webbot_DEPENDENCIES = $(top_builddir)/Library/src/libwwwinit.la \ $(top_builddir)/Library/src/libwwwapp.la \ $(top_builddir)/Library/src/libwwwhtml.la \ $(top_builddir)/Library/src/libwwwtelnet.la \ $(top_builddir)/Library/src/libwwwnews.la \ $(top_builddir)/Library/src/libwwwhttp.la \ $(top_builddir)/Library/src/libwwwmime.la \ $(top_builddir)/Library/src/libwwwgopher.la \ $(top_builddir)/Library/src/libwwwftp.la \ $(top_builddir)/Library/src/libwwwfile.la \ $(top_builddir)/Library/src/libwwwdir.la \ $(top_builddir)/Library/src/libwwwcache.la \ $(top_builddir)/Library/src/libwwwstream.la \ $(top_builddir)/Library/src/libwwwmux.la \ $(top_builddir)/Library/src/libwwwtrans.la \ $(top_builddir)/Library/src/libwwwcore.la \ $(top_builddir)/Library/src/libwwwutils.la webbot_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/HTQueue.P .deps/HTRobot.P .deps/RobotMain.P \ .deps/RobotTxt.P SOURCES = $(webbot_SOURCES) OBJECTS = $(webbot_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .h .html .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Robot/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: webbot$(EXEEXT): $(webbot_OBJECTS) $(webbot_DEPENDENCIES) @rm -f webbot$(EXEEXT) $(LINK) $(webbot_LDFLAGS) $(webbot_OBJECTS) $(webbot_LDADD) $(LIBS) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot/src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Robot/src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-recursive all-am: Makefile $(PROGRAMS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ distclean-tags distclean-depend distclean-generic \ clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean .html.h: ifdef WWW $(WWW) -w90 -na -p -to text/x-c $(srcdir)/$(*F).html -o $(srcdir)/$(*F).h else @echo "**************************************************" @echo "Need to regenerate one or more .h files." @echo "Attempting to generate them using the" @echo "winConfigure.pl script - it may generate a few warnings." @echo "**************************************************" perl $(top_srcdir)/config/winConfigure.pl $(srcdir) endif inc: $(BUILT_SOURCES) @echo Generated built sources purify: $(webbot_OBJECTS) $(webbot_DEPENDENCIES) -rm purify; \ purify -cache-dir=$(PURIFY_CACHE) \ $(CC) $(LDFLAGS) -o purify $(webbot_OBJECTS) \ -lm \ ../../Library/src/.libs/libwww.a \ ../../modules/md5/.libs/libmd5.a \ ../../modules/expat/xmlparse/.libs/libxmlparse.a \ ../../modules/expat/xmltok/.libs/libxmltok.a \ $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/.deps/�����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405521243�014443� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/.deps/HTRobot.P��������������������������������������������������������������������0100644�0000764�0000144�00000033275�07405521240�016111� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTRobot.o: HTRobot.c HTRobMan.h ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h \ ../../Library/src/WWWApp.h ../../Library/src/HTEvtLst.h \ ../../Library/src/HTHome.h ../../Library/src/HTDialog.h \ ../../Library/src/HTAccess.h ../../Library/src/HTRules.h \ ../../Library/src/HTProxy.h ../../Library/src/HTFilter.h \ ../../Library/src/HTLog.h ../../Library/src/HTHist.h \ ../../Library/src/WWWTrans.h ../../Library/src/HTANSI.h \ ../../Library/src/HTLocal.h ../../Library/src/HTTCP.h \ ../../Library/src/HTSocket.h ../../Library/src/HTReader.h \ ../../Library/src/HTWriter.h ../../Library/src/HTBufWrt.h \ ../../Library/src/WWWInit.h ../../Library/src/HTInit.h \ ../../Library/src/WWWHTTP.h ../../Library/src/HTTPUtil.h \ ../../Library/src/HTTP.h ../../Library/src/HTTPServ.h \ ../../Library/src/HTTPGen.h ../../Library/src/HTTPReq.h \ ../../Library/src/HTTPRes.h ../../Library/src/HTTChunk.h \ ../../Library/src/HTPEP.h ../../Library/src/HTAAUtil.h \ ../../Library/src/HTAABrow.h ../../Library/src/HTCookie.h \ ../../Library/src/WWWFile.h ../../Library/src/HTFile.h \ ../../Library/src/HTMulti.h ../../Library/src/HTBind.h \ ../../Library/src/HTBInit.h ../../Library/src/WWWFTP.h \ ../../Library/src/HTFTP.h ../../Library/src/HTFTPDir.h \ ../../Library/src/WWWGophe.h ../../Library/src/HTGopher.h \ ../../Library/src/WWWTelnt.h ../../Library/src/HTTelnet.h \ ../../Library/src/WWWNews.h ../../Library/src/HTNews.h \ ../../Library/src/HTNewsRq.h ../../Library/src/HTNewsLs.h \ ../../Library/src/HTNDir.h ../../Library/src/WWWMIME.h \ ../../Library/src/HTMIME.h ../../Library/src/HTHeader.h \ ../../Library/src/HTMIMERq.h ../../Library/src/HTMIMImp.h \ ../../Library/src/HTBound.h ../../Library/src/HTMulpar.h \ ../../Library/src/WWWHTML.h ../../Library/src/HTMLPDTD.h \ ../../Library/src/SGML.h ../../Library/src/HTMLGen.h \ ../../Library/src/HTTeXGen.h ../../Library/src/HTPlain.h \ ../../Library/src/HTML.h ../../Library/src/HText.h \ ../../Library/src/HTHInit.h ../../Library/src/HTStyle.h \ ../../Library/src/WWWStream.h ../../Library/src/HTConLen.h \ ../../Library/src/HTFWrite.h ../../Library/src/HTFSave.h \ ../../Library/src/HTGuess.h ../../Library/src/HTTee.h \ ../../Library/src/HTMerge.h ../../Library/src/HTSChunk.h \ ../../Library/src/HTXParse.h ../../Library/src/HTEPtoCl.h \ ../../Library/src/HTNetTxt.h ../../Library/src/WWWDir.h \ ../../Library/src/HTDir.h ../../Library/src/HTIcons.h \ ../../Library/src/HTDescpt.h ../../Library/src/WWWCache.h \ ../../Library/src/HTCache.h ../../Library/src/WWWXML.h \ ../../Library/src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h \ ../../Library/src/HTRDF.h ../../Library/src/HTHash.h \ ../../Library/src/WWWZip.h ../../Library/src/HTZip.h \ ../../Library/src/HTProfil.h ../../Library/src/WWWSQL.h HTRobot.h \ HTQueue.h ../../Library/src/HTAncMan.h HTRobot.c : HTRobMan.h : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ../../Library/src/WWWApp.h : ../../Library/src/HTEvtLst.h : ../../Library/src/HTHome.h : ../../Library/src/HTDialog.h : ../../Library/src/HTAccess.h : ../../Library/src/HTRules.h : ../../Library/src/HTProxy.h : ../../Library/src/HTFilter.h : ../../Library/src/HTLog.h : ../../Library/src/HTHist.h : ../../Library/src/WWWTrans.h : ../../Library/src/HTANSI.h : ../../Library/src/HTLocal.h : ../../Library/src/HTTCP.h : ../../Library/src/HTSocket.h : ../../Library/src/HTReader.h : ../../Library/src/HTWriter.h : ../../Library/src/HTBufWrt.h : ../../Library/src/WWWInit.h : ../../Library/src/HTInit.h : ../../Library/src/WWWHTTP.h : ../../Library/src/HTTPUtil.h : ../../Library/src/HTTP.h : ../../Library/src/HTTPServ.h : ../../Library/src/HTTPGen.h : ../../Library/src/HTTPReq.h : ../../Library/src/HTTPRes.h : ../../Library/src/HTTChunk.h : ../../Library/src/HTPEP.h : ../../Library/src/HTAAUtil.h : ../../Library/src/HTAABrow.h : ../../Library/src/HTCookie.h : ../../Library/src/WWWFile.h : ../../Library/src/HTFile.h : ../../Library/src/HTMulti.h : ../../Library/src/HTBind.h : ../../Library/src/HTBInit.h : ../../Library/src/WWWFTP.h : ../../Library/src/HTFTP.h : ../../Library/src/HTFTPDir.h : ../../Library/src/WWWGophe.h : ../../Library/src/HTGopher.h : ../../Library/src/WWWTelnt.h : ../../Library/src/HTTelnet.h : ../../Library/src/WWWNews.h : ../../Library/src/HTNews.h : ../../Library/src/HTNewsRq.h : ../../Library/src/HTNewsLs.h : ../../Library/src/HTNDir.h : ../../Library/src/WWWMIME.h : ../../Library/src/HTMIME.h : ../../Library/src/HTHeader.h : ../../Library/src/HTMIMERq.h : ../../Library/src/HTMIMImp.h : ../../Library/src/HTBound.h : ../../Library/src/HTMulpar.h : ../../Library/src/WWWHTML.h : ../../Library/src/HTMLPDTD.h : ../../Library/src/SGML.h : ../../Library/src/HTMLGen.h : ../../Library/src/HTTeXGen.h : ../../Library/src/HTPlain.h : ../../Library/src/HTML.h : ../../Library/src/HText.h : ../../Library/src/HTHInit.h : ../../Library/src/HTStyle.h : ../../Library/src/WWWStream.h : ../../Library/src/HTConLen.h : ../../Library/src/HTFWrite.h : ../../Library/src/HTFSave.h : ../../Library/src/HTGuess.h : ../../Library/src/HTTee.h : ../../Library/src/HTMerge.h : ../../Library/src/HTSChunk.h : ../../Library/src/HTXParse.h : ../../Library/src/HTEPtoCl.h : ../../Library/src/HTNetTxt.h : ../../Library/src/WWWDir.h : ../../Library/src/HTDir.h : ../../Library/src/HTIcons.h : ../../Library/src/HTDescpt.h : ../../Library/src/WWWCache.h : ../../Library/src/HTCache.h : ../../Library/src/WWWXML.h : ../../Library/src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../../Library/src/HTRDF.h : ../../Library/src/HTHash.h : ../../Library/src/WWWZip.h : ../../Library/src/HTZip.h : ../../Library/src/HTProfil.h : ../../Library/src/WWWSQL.h : HTRobot.h : HTQueue.h : ../../Library/src/HTAncMan.h : �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/.deps/RobotMain.P������������������������������������������������������������������0100644�0000764�0000144�00000033211�07405521242�016452� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RobotMain.o: RobotMain.c HTRobMan.h ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h \ ../../Library/src/WWWApp.h ../../Library/src/HTEvtLst.h \ ../../Library/src/HTHome.h ../../Library/src/HTDialog.h \ ../../Library/src/HTAccess.h ../../Library/src/HTRules.h \ ../../Library/src/HTProxy.h ../../Library/src/HTFilter.h \ ../../Library/src/HTLog.h ../../Library/src/HTHist.h \ ../../Library/src/WWWTrans.h ../../Library/src/HTANSI.h \ ../../Library/src/HTLocal.h ../../Library/src/HTTCP.h \ ../../Library/src/HTSocket.h ../../Library/src/HTReader.h \ ../../Library/src/HTWriter.h ../../Library/src/HTBufWrt.h \ ../../Library/src/WWWInit.h ../../Library/src/HTInit.h \ ../../Library/src/WWWHTTP.h ../../Library/src/HTTPUtil.h \ ../../Library/src/HTTP.h ../../Library/src/HTTPServ.h \ ../../Library/src/HTTPGen.h ../../Library/src/HTTPReq.h \ ../../Library/src/HTTPRes.h ../../Library/src/HTTChunk.h \ ../../Library/src/HTPEP.h ../../Library/src/HTAAUtil.h \ ../../Library/src/HTAABrow.h ../../Library/src/HTCookie.h \ ../../Library/src/WWWFile.h ../../Library/src/HTFile.h \ ../../Library/src/HTMulti.h ../../Library/src/HTBind.h \ ../../Library/src/HTBInit.h ../../Library/src/WWWFTP.h \ ../../Library/src/HTFTP.h ../../Library/src/HTFTPDir.h \ ../../Library/src/WWWGophe.h ../../Library/src/HTGopher.h \ ../../Library/src/WWWTelnt.h ../../Library/src/HTTelnet.h \ ../../Library/src/WWWNews.h ../../Library/src/HTNews.h \ ../../Library/src/HTNewsRq.h ../../Library/src/HTNewsLs.h \ ../../Library/src/HTNDir.h ../../Library/src/WWWMIME.h \ ../../Library/src/HTMIME.h ../../Library/src/HTHeader.h \ ../../Library/src/HTMIMERq.h ../../Library/src/HTMIMImp.h \ ../../Library/src/HTBound.h ../../Library/src/HTMulpar.h \ ../../Library/src/WWWHTML.h ../../Library/src/HTMLPDTD.h \ ../../Library/src/SGML.h ../../Library/src/HTMLGen.h \ ../../Library/src/HTTeXGen.h ../../Library/src/HTPlain.h \ ../../Library/src/HTML.h ../../Library/src/HText.h \ ../../Library/src/HTHInit.h ../../Library/src/HTStyle.h \ ../../Library/src/WWWStream.h ../../Library/src/HTConLen.h \ ../../Library/src/HTFWrite.h ../../Library/src/HTFSave.h \ ../../Library/src/HTGuess.h ../../Library/src/HTTee.h \ ../../Library/src/HTMerge.h ../../Library/src/HTSChunk.h \ ../../Library/src/HTXParse.h ../../Library/src/HTEPtoCl.h \ ../../Library/src/HTNetTxt.h ../../Library/src/WWWDir.h \ ../../Library/src/HTDir.h ../../Library/src/HTIcons.h \ ../../Library/src/HTDescpt.h ../../Library/src/WWWCache.h \ ../../Library/src/HTCache.h ../../Library/src/WWWXML.h \ ../../Library/src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h \ ../../Library/src/HTRDF.h ../../Library/src/HTHash.h \ ../../Library/src/WWWZip.h ../../Library/src/HTZip.h \ ../../Library/src/HTProfil.h ../../Library/src/WWWSQL.h HTRobot.h \ RobotTxt.h RobotMain.c : HTRobMan.h : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ../../Library/src/WWWApp.h : ../../Library/src/HTEvtLst.h : ../../Library/src/HTHome.h : ../../Library/src/HTDialog.h : ../../Library/src/HTAccess.h : ../../Library/src/HTRules.h : ../../Library/src/HTProxy.h : ../../Library/src/HTFilter.h : ../../Library/src/HTLog.h : ../../Library/src/HTHist.h : ../../Library/src/WWWTrans.h : ../../Library/src/HTANSI.h : ../../Library/src/HTLocal.h : ../../Library/src/HTTCP.h : ../../Library/src/HTSocket.h : ../../Library/src/HTReader.h : ../../Library/src/HTWriter.h : ../../Library/src/HTBufWrt.h : ../../Library/src/WWWInit.h : ../../Library/src/HTInit.h : ../../Library/src/WWWHTTP.h : ../../Library/src/HTTPUtil.h : ../../Library/src/HTTP.h : ../../Library/src/HTTPServ.h : ../../Library/src/HTTPGen.h : ../../Library/src/HTTPReq.h : ../../Library/src/HTTPRes.h : ../../Library/src/HTTChunk.h : ../../Library/src/HTPEP.h : ../../Library/src/HTAAUtil.h : ../../Library/src/HTAABrow.h : ../../Library/src/HTCookie.h : ../../Library/src/WWWFile.h : ../../Library/src/HTFile.h : ../../Library/src/HTMulti.h : ../../Library/src/HTBind.h : ../../Library/src/HTBInit.h : ../../Library/src/WWWFTP.h : ../../Library/src/HTFTP.h : ../../Library/src/HTFTPDir.h : ../../Library/src/WWWGophe.h : ../../Library/src/HTGopher.h : ../../Library/src/WWWTelnt.h : ../../Library/src/HTTelnet.h : ../../Library/src/WWWNews.h : ../../Library/src/HTNews.h : ../../Library/src/HTNewsRq.h : ../../Library/src/HTNewsLs.h : ../../Library/src/HTNDir.h : ../../Library/src/WWWMIME.h : ../../Library/src/HTMIME.h : ../../Library/src/HTHeader.h : ../../Library/src/HTMIMERq.h : ../../Library/src/HTMIMImp.h : ../../Library/src/HTBound.h : ../../Library/src/HTMulpar.h : ../../Library/src/WWWHTML.h : ../../Library/src/HTMLPDTD.h : ../../Library/src/SGML.h : ../../Library/src/HTMLGen.h : ../../Library/src/HTTeXGen.h : ../../Library/src/HTPlain.h : ../../Library/src/HTML.h : ../../Library/src/HText.h : ../../Library/src/HTHInit.h : ../../Library/src/HTStyle.h : ../../Library/src/WWWStream.h : ../../Library/src/HTConLen.h : ../../Library/src/HTFWrite.h : ../../Library/src/HTFSave.h : ../../Library/src/HTGuess.h : ../../Library/src/HTTee.h : ../../Library/src/HTMerge.h : ../../Library/src/HTSChunk.h : ../../Library/src/HTXParse.h : ../../Library/src/HTEPtoCl.h : ../../Library/src/HTNetTxt.h : ../../Library/src/WWWDir.h : ../../Library/src/HTDir.h : ../../Library/src/HTIcons.h : ../../Library/src/HTDescpt.h : ../../Library/src/WWWCache.h : ../../Library/src/HTCache.h : ../../Library/src/WWWXML.h : ../../Library/src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../../Library/src/HTRDF.h : ../../Library/src/HTHash.h : ../../Library/src/WWWZip.h : ../../Library/src/HTZip.h : ../../Library/src/HTProfil.h : ../../Library/src/WWWSQL.h : HTRobot.h : RobotTxt.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/.deps/RobotTxt.P�������������������������������������������������������������������0100644�0000764�0000144�00000033206�07405521242�016351� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RobotTxt.o: RobotTxt.c HTRobMan.h ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h \ ../../Library/src/WWWApp.h ../../Library/src/HTEvtLst.h \ ../../Library/src/HTHome.h ../../Library/src/HTDialog.h \ ../../Library/src/HTAccess.h ../../Library/src/HTRules.h \ ../../Library/src/HTProxy.h ../../Library/src/HTFilter.h \ ../../Library/src/HTLog.h ../../Library/src/HTHist.h \ ../../Library/src/WWWTrans.h ../../Library/src/HTANSI.h \ ../../Library/src/HTLocal.h ../../Library/src/HTTCP.h \ ../../Library/src/HTSocket.h ../../Library/src/HTReader.h \ ../../Library/src/HTWriter.h ../../Library/src/HTBufWrt.h \ ../../Library/src/WWWInit.h ../../Library/src/HTInit.h \ ../../Library/src/WWWHTTP.h ../../Library/src/HTTPUtil.h \ ../../Library/src/HTTP.h ../../Library/src/HTTPServ.h \ ../../Library/src/HTTPGen.h ../../Library/src/HTTPReq.h \ ../../Library/src/HTTPRes.h ../../Library/src/HTTChunk.h \ ../../Library/src/HTPEP.h ../../Library/src/HTAAUtil.h \ ../../Library/src/HTAABrow.h ../../Library/src/HTCookie.h \ ../../Library/src/WWWFile.h ../../Library/src/HTFile.h \ ../../Library/src/HTMulti.h ../../Library/src/HTBind.h \ ../../Library/src/HTBInit.h ../../Library/src/WWWFTP.h \ ../../Library/src/HTFTP.h ../../Library/src/HTFTPDir.h \ ../../Library/src/WWWGophe.h ../../Library/src/HTGopher.h \ ../../Library/src/WWWTelnt.h ../../Library/src/HTTelnet.h \ ../../Library/src/WWWNews.h ../../Library/src/HTNews.h \ ../../Library/src/HTNewsRq.h ../../Library/src/HTNewsLs.h \ ../../Library/src/HTNDir.h ../../Library/src/WWWMIME.h \ ../../Library/src/HTMIME.h ../../Library/src/HTHeader.h \ ../../Library/src/HTMIMERq.h ../../Library/src/HTMIMImp.h \ ../../Library/src/HTBound.h ../../Library/src/HTMulpar.h \ ../../Library/src/WWWHTML.h ../../Library/src/HTMLPDTD.h \ ../../Library/src/SGML.h ../../Library/src/HTMLGen.h \ ../../Library/src/HTTeXGen.h ../../Library/src/HTPlain.h \ ../../Library/src/HTML.h ../../Library/src/HText.h \ ../../Library/src/HTHInit.h ../../Library/src/HTStyle.h \ ../../Library/src/WWWStream.h ../../Library/src/HTConLen.h \ ../../Library/src/HTFWrite.h ../../Library/src/HTFSave.h \ ../../Library/src/HTGuess.h ../../Library/src/HTTee.h \ ../../Library/src/HTMerge.h ../../Library/src/HTSChunk.h \ ../../Library/src/HTXParse.h ../../Library/src/HTEPtoCl.h \ ../../Library/src/HTNetTxt.h ../../Library/src/WWWDir.h \ ../../Library/src/HTDir.h ../../Library/src/HTIcons.h \ ../../Library/src/HTDescpt.h ../../Library/src/WWWCache.h \ ../../Library/src/HTCache.h ../../Library/src/WWWXML.h \ ../../Library/src/HTXML.h ../../modules/expat/xmlparse/xmlparse.h \ ../../Library/src/HTRDF.h ../../Library/src/HTHash.h \ ../../Library/src/WWWZip.h ../../Library/src/HTZip.h \ ../../Library/src/HTProfil.h ../../Library/src/WWWSQL.h HTRobot.h \ RobotTxt.h RobotTxt.c : HTRobMan.h : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ../../Library/src/WWWApp.h : ../../Library/src/HTEvtLst.h : ../../Library/src/HTHome.h : ../../Library/src/HTDialog.h : ../../Library/src/HTAccess.h : ../../Library/src/HTRules.h : ../../Library/src/HTProxy.h : ../../Library/src/HTFilter.h : ../../Library/src/HTLog.h : ../../Library/src/HTHist.h : ../../Library/src/WWWTrans.h : ../../Library/src/HTANSI.h : ../../Library/src/HTLocal.h : ../../Library/src/HTTCP.h : ../../Library/src/HTSocket.h : ../../Library/src/HTReader.h : ../../Library/src/HTWriter.h : ../../Library/src/HTBufWrt.h : ../../Library/src/WWWInit.h : ../../Library/src/HTInit.h : ../../Library/src/WWWHTTP.h : ../../Library/src/HTTPUtil.h : ../../Library/src/HTTP.h : ../../Library/src/HTTPServ.h : ../../Library/src/HTTPGen.h : ../../Library/src/HTTPReq.h : ../../Library/src/HTTPRes.h : ../../Library/src/HTTChunk.h : ../../Library/src/HTPEP.h : ../../Library/src/HTAAUtil.h : ../../Library/src/HTAABrow.h : ../../Library/src/HTCookie.h : ../../Library/src/WWWFile.h : ../../Library/src/HTFile.h : ../../Library/src/HTMulti.h : ../../Library/src/HTBind.h : ../../Library/src/HTBInit.h : ../../Library/src/WWWFTP.h : ../../Library/src/HTFTP.h : ../../Library/src/HTFTPDir.h : ../../Library/src/WWWGophe.h : ../../Library/src/HTGopher.h : ../../Library/src/WWWTelnt.h : ../../Library/src/HTTelnet.h : ../../Library/src/WWWNews.h : ../../Library/src/HTNews.h : ../../Library/src/HTNewsRq.h : ../../Library/src/HTNewsLs.h : ../../Library/src/HTNDir.h : ../../Library/src/WWWMIME.h : ../../Library/src/HTMIME.h : ../../Library/src/HTHeader.h : ../../Library/src/HTMIMERq.h : ../../Library/src/HTMIMImp.h : ../../Library/src/HTBound.h : ../../Library/src/HTMulpar.h : ../../Library/src/WWWHTML.h : ../../Library/src/HTMLPDTD.h : ../../Library/src/SGML.h : ../../Library/src/HTMLGen.h : ../../Library/src/HTTeXGen.h : ../../Library/src/HTPlain.h : ../../Library/src/HTML.h : ../../Library/src/HText.h : ../../Library/src/HTHInit.h : ../../Library/src/HTStyle.h : ../../Library/src/WWWStream.h : ../../Library/src/HTConLen.h : ../../Library/src/HTFWrite.h : ../../Library/src/HTFSave.h : ../../Library/src/HTGuess.h : ../../Library/src/HTTee.h : ../../Library/src/HTMerge.h : ../../Library/src/HTSChunk.h : ../../Library/src/HTXParse.h : ../../Library/src/HTEPtoCl.h : ../../Library/src/HTNetTxt.h : ../../Library/src/WWWDir.h : ../../Library/src/HTDir.h : ../../Library/src/HTIcons.h : ../../Library/src/HTDescpt.h : ../../Library/src/WWWCache.h : ../../Library/src/HTCache.h : ../../Library/src/WWWXML.h : ../../Library/src/HTXML.h : ../../modules/expat/xmlparse/xmlparse.h : ../../Library/src/HTRDF.h : ../../Library/src/HTHash.h : ../../Library/src/WWWZip.h : ../../Library/src/HTZip.h : ../../Library/src/HTProfil.h : ../../Library/src/WWWSQL.h : HTRobot.h : RobotTxt.h : ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/src/.deps/HTQueue.P��������������������������������������������������������������������0100644�0000764�0000144�00000020263�07405521243�016104� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTQueue.o: HTQueue.c HTQueue.h ../../Library/src/WWWLib.h \ ../../Library/src/wwwsys.h ../../wwwconf.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/netinet/in.h \ /usr/include/stdint.h /usr/include/bits/wordsize.h \ /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ /usr/include/asm/socket.h /usr/include/asm/sockios.h \ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ /usr/include/netinet/tcp.h /usr/include/sys/file.h \ /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \ /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ /usr/include/termios.h /usr/include/bits/termios.h \ /usr/include/sys/time.h /usr/include/string.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/stdlib.h /usr/include/syslog.h /usr/include/sys/syslog.h \ /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/uio.h /usr/include/sys/ipc.h /usr/include/bits/ipc.h \ /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h /usr/include/pwd.h \ /usr/include/grp.h /usr/include/arpa/inet.h /usr/include/netdb.h \ /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ /usr/include/alloca.h /usr/include/malloc.h /usr/include/memory.h \ /usr/include/ctype.h /usr/include/sys/resource.h \ /usr/include/bits/resource.h /usr/include/dirent.h \ /usr/include/bits/dirent.h /usr/include/sys/wait.h \ /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ ../../Library/src/WWWUtil.h ../../Library/src/HTUtils.h \ ../../Library/src/HTMemory.h ../../Library/src/HTArray.h \ ../../Library/src/HTAssoc.h ../../Library/src/HTList.h \ ../../Library/src/HTAtom.h ../../Library/src/HTChunk.h \ ../../Library/src/HTString.h ../../Library/src/HTUU.h \ ../../Library/src/WWWCore.h ../../Library/src/HTLib.h \ ../../Library/src/HTUser.h ../../Library/src/HTReq.h \ ../../Library/src/HTEvent.h ../../Library/src/HTFormat.h \ ../../Library/src/HTStream.h ../../Library/src/HTAnchor.h \ ../../Library/src/HTLink.h ../../Library/src/HTMethod.h \ ../../Library/src/HTResponse.h ../../Library/src/HTError.h \ ../../Library/src/HTNet.h ../../Library/src/HTTrans.h \ ../../Library/src/HTIOStream.h ../../Library/src/HTChannl.h \ ../../Library/src/HTHost.h ../../Library/src/HTProt.h \ ../../Library/src/HTTimer.h ../../Library/src/HTDNS.h \ ../../Library/src/HTParse.h ../../Library/src/HTEscape.h \ ../../Library/src/HTUTree.h ../../Library/src/HTWWWStr.h \ ../../Library/src/HTMemLog.h ../../Library/src/HTAlert.h \ ../../Library/src/HTStruct.h ../../Library/src/HTNoFree.h \ ../../Library/src/HTInet.h ../../Library/src/HTHstMan.h HTQueue.c : HTQueue.h : ../../Library/src/WWWLib.h : ../../Library/src/wwwsys.h : ../../wwwconf.h : /usr/include/stdio.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/libio.h : /usr/include/_G_config.h : /usr/include/wchar.h : /usr/include/bits/wchar.h : /usr/include/gconv.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h : /usr/include/bits/stdio_lim.h : /usr/include/bits/stdio.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/unistd.h : /usr/include/bits/posix_opt.h : /usr/include/bits/confname.h : /usr/include/getopt.h : /usr/include/fcntl.h : /usr/include/bits/fcntl.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h : /usr/include/limits.h : /usr/include/bits/posix1_lim.h : /usr/include/bits/local_lim.h : /usr/include/linux/limits.h : /usr/include/bits/posix2_lim.h : /usr/include/sys/stat.h : /usr/include/bits/stat.h : /usr/include/netinet/in.h : /usr/include/stdint.h : /usr/include/bits/wordsize.h : /usr/include/bits/socket.h : /usr/include/bits/sockaddr.h : /usr/include/asm/socket.h : /usr/include/asm/sockios.h : /usr/include/bits/in.h : /usr/include/bits/byteswap.h : /usr/include/netinet/tcp.h : /usr/include/sys/file.h : /usr/include/sys/ioctl.h : /usr/include/bits/ioctls.h : /usr/include/asm/ioctls.h : /usr/include/asm/ioctl.h : /usr/include/bits/ioctl-types.h : /usr/include/sys/ttydefaults.h : /usr/include/termios.h : /usr/include/bits/termios.h : /usr/include/sys/time.h : /usr/include/string.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/stdlib.h : /usr/include/syslog.h : /usr/include/sys/syslog.h : /usr/include/sys/socket.h : /usr/include/sys/uio.h : /usr/include/bits/uio.h : /usr/include/sys/ipc.h : /usr/include/bits/ipc.h : /usr/include/errno.h : /usr/include/bits/errno.h : /usr/include/linux/errno.h : /usr/include/asm/errno.h : /usr/include/pwd.h : /usr/include/grp.h : /usr/include/arpa/inet.h : /usr/include/netdb.h : /usr/include/rpc/netdb.h : /usr/include/bits/netdb.h : /usr/include/alloca.h : /usr/include/malloc.h : /usr/include/memory.h : /usr/include/ctype.h : /usr/include/sys/resource.h : /usr/include/bits/resource.h : /usr/include/dirent.h : /usr/include/bits/dirent.h : /usr/include/sys/wait.h : /usr/include/signal.h : /usr/include/bits/signum.h : /usr/include/bits/siginfo.h : /usr/include/bits/sigaction.h : /usr/include/bits/sigcontext.h : /usr/include/asm/sigcontext.h : /usr/include/bits/sigstack.h : /usr/include/bits/sigthread.h : /usr/include/bits/waitflags.h : /usr/include/bits/waitstatus.h : ../../Library/src/WWWUtil.h : ../../Library/src/HTUtils.h : ../../Library/src/HTMemory.h : ../../Library/src/HTArray.h : ../../Library/src/HTAssoc.h : ../../Library/src/HTList.h : ../../Library/src/HTAtom.h : ../../Library/src/HTChunk.h : ../../Library/src/HTString.h : ../../Library/src/HTUU.h : ../../Library/src/WWWCore.h : ../../Library/src/HTLib.h : ../../Library/src/HTUser.h : ../../Library/src/HTReq.h : ../../Library/src/HTEvent.h : ../../Library/src/HTFormat.h : ../../Library/src/HTStream.h : ../../Library/src/HTAnchor.h : ../../Library/src/HTLink.h : ../../Library/src/HTMethod.h : ../../Library/src/HTResponse.h : ../../Library/src/HTError.h : ../../Library/src/HTNet.h : ../../Library/src/HTTrans.h : ../../Library/src/HTIOStream.h : ../../Library/src/HTChannl.h : ../../Library/src/HTHost.h : ../../Library/src/HTProt.h : ../../Library/src/HTTimer.h : ../../Library/src/HTDNS.h : ../../Library/src/HTParse.h : ../../Library/src/HTEscape.h : ../../Library/src/HTUTree.h : ../../Library/src/HTWWWStr.h : ../../Library/src/HTMemLog.h : ../../Library/src/HTAlert.h : ../../Library/src/HTStruct.h : ../../Library/src/HTNoFree.h : ../../Library/src/HTInet.h : ../../Library/src/HTHstMan.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/�����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520575�013434� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/CVS/�������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517406�014066� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/CVS/Root���������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517405�014731� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/CVS/Repository���������������������������������������������������������������������0100644�0000764�0000144�00000000021�07405517405�016155� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/CVS/Entries������������������������������������������������������������������������0100644�0000764�0000144�00000000442�07405517406�015417� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Constraint-frames.html/1.2/Thu Oct 1 15:32:54 1998// /Constraint-menu.html/1.1/Thu Oct 1 15:28:25 1998// /Constraint.html/1.2/Thu Oct 1 15:40:52 1998// /Makefile.am/1.1/Sun Nov 1 02:02:48 1998// /Overview.html/1.4/Mon Mar 1 18:09:25 1999// /Robot.tcl/1.2/Mon Sep 9 20:53:42 1996// D ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/Makefile���������������������������������������������������������������������������0100644�0000764�0000144�00000014053�07405520575�015074� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOC := $(wildcard *.html) TCL := $(wildcard *.tcl) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = $(DOC) $(TCL) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Robot/tcl/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot/tcl distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Robot/tcl/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/Constraint-frames.html�������������������������������������������������������������0100644�0000764�0000144�00000000536�06604720246�017717� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE> Navigation for the Robot's User's manual </TITLE> </HEAD> <FRAMESET COLS="25%,75%"> <FRAME src="Constraint-menu.html"> <FRAME src="Constraint.html" name="main"> </FRAMESET> <NOFRAMES> <BODY> <P> You should go to the <A href="Constraint.html" target="_top">Constraint</A> Model of the Web Robot </BODY></NOFRAMES></HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/Constraint-menu.html���������������������������������������������������������������0100644�0000764�0000144�00000003051�06604717631�017405� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Constraint Model of the W3C Mini Robot Menu</TITLE> <BASE TARGET="main"> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#0000EE" VLINK="#551A8B"> <H1> Model Table of Contents </H1> <UL> <LI> <A href="Constraint.html#Design">Design issues and Purpose of the Robot</A> <LI> <A href="Constraint.html#Rules">Rule Description</A> <UL> <LI> <A href="Constraint.html#Rules.A">Rule Atoms</A> <UL> <LI> <A href="Constraint.html#Rules.A.1">Definition</A> <LI> <A href="Constraint.html#Rules.A.3">Understanding</A> <UL> <LI> <A href="Constraint.html#Rules.A.3.a">Category</A> <LI> <A href="Constraint.html#Rules.A.3.b">Field</A> <LI> <A href="Constraint.html#Rules.A.3.c">Pattern</A> </UL> </UL> <LI> <A href="Constraint.html#Rules.B">Rule Combinations</A> <UL> <LI> <A href="Constraint.html#Rules.B.1">Definition</A> <LI> <A href="Constraint.html#Rules.B.2">Undersating</A> <LI> <A href="Constraint.html#Rules.B.3">Example</A> </UL> <LI> <A href="Constraint.html#Rules.C">Rule Evaluation</A> </UL> <LI> <A HREF="Constraint.html#Urls">Urls</A> <UL> <LI> <A HREF="Constraint.html#Urls.A">Web element</A> </UL> <LI> <A href="Constraint.html#Functions">Functions</A> <LI> <A href="Constraint.html#Extensions">The next step in extending the Robot</A> </UL> <P> <HR> <ADDRESS> Manolis Kamvysselis,<BR> @(#) $Id: Constraint-menu.html,v 1.1 2025/10/01 15:28:25 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/Constraint.html��������������������������������������������������������������������0100644�0000764�0000144�00000043113�06604721204�016435� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Constraint Model of the W3C Mini Robot</TITLE> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#0000EE" VLINK="#551A8B"> <P> <A HREF="/"><IMG BORDER="0" ALT="W3C" SRC="/Icons/WWW/w3c_home"></A> <A href="/Library/"><IMG BORDER="0" ALT="Library" SRC="/Icons/WWW/Lib48x"></A> <A href="../../resources.html"><IMG BORDER="0" ALT="Robot" SRC="/Icons/WWW/robot48x"></A> <H1 ALIGN="center"> Constraint Model for libwww Webbot<BR> or<BR> <FONT color=red>A</FONT>nalyzing <FONT color=red>De</FONT>grees of <FONT color=red>S</FONT>eparation </H1> <P> Jump to: <UL> <LI> <A href="#Design">Design</A> issues and purpose <LI> <A href="#Rules">Rules</A> description and issuing of commands <LI> <A href="#Urls">URLs</A> and Web Elements <LI> <A href="#Functions">Function</A> description for extending the robot <LI> <A href="#Extensions">Extensions</A> to the robot, and what's next </UL> <H2> <A name="Design">Design issues and Purpose of the Robot</A> </H2> <P> The W3C robot's purpose in crowling the web is not to accumulate data from web sites, to generate a database, or an index, or to update documents, or verify links, even though all of the functionality described above can easily be added, without changing the basic skeleton of the robot as it is today. <P> The primary purpose of the robot is to understand the relations between web pages, and not the content of the pages themselves. How many paths can lead to a given page, what tree structures can be generated by following links under a certain constraint, how many degrees of separation lie between any two pages, what is the shortest path to reach a site, and how can intelligent navigation be automated. <P> The robot will also be used as a test tool interacting with the w3c-libwww-99. The robot code is written in Tcl, the graphic interface to the user is written in Tk, and the library code used to provide all the network functionality is written in C. All functionality is therefore portable in almost any system with network access. <P> The most elementary web robot can fetch a web document, extract the links from that document, follow the urls, fetch the documents, and restart for every document. The leads to an exponentially growing number of documents to follow every time you reach a new depth. Therefore, for a robot to be of any use, we need a way of specifying a <STRONG>Constraint Model</STRONG> that will allow the robot to choose which documents to follow and which not to. <P> The Constraint Model is basically a set of rules, that the user specifies, or that the program itself can formulate, to follow a crawling model specified by the user at the beginning, or during the crawling. The next section describes the consituent blocks of the rules (or Rule Atoms) and the ways to combine those rules. <H2> <A name="Rules">Rule Description</A> </H2> <P> A rule can be simple or complex. Complex rules can be expressed as logical combinations of simpler rules, called Rule Atoms. <H3> <A name="Rules.A">Rule Atoms</A> </H3> <H4> <A name="Rules.A.1">Definition</A> </H4> <P> A Rule Atom is the simplest form of a rule, and the building block of every rule. Anything simpler can not be called a rule, and anything more complicated cannot be called a rule atom. <H4> <A name="Rules.A.2">Examples</A> </H4> <DL> <DT> <TT>+url:*.mit.edu/*</TT> <DD> keep documents whose url matches *.mit.edu/* <DD> matches: http://web.mit.edu/manoli/www/ and http://manoland.mit.edu/ but not http://web.mit.edu.ca/ <DT> <TT>-body:*badword*</TT> <DD> reject documents whose body contains badword <DT> <TT>+head:*meta*</TT> <DD> keep documents whose head contains the meta keyword <DT> <TT>-date:*december*</TT> <DD> reject documents whose date contains the word december </DL> <H4> <A name="Rules.A.3">Understanding the Rule Atoms</A> </H4> <P> As you can see from those examples, each <STRONG>rule atom</STRONG> has three elements: <OL type=a> <LI> <A name="Rules.A.3.a">The <STRONG>category</STRONG> of the rule can be one of the following four, in order of priority:</A> <OL> <LI> <STRONG>Imprerative rules (*)</STRONG>: those documents will be followed first and always<BR> <STRONG>Direction rules (+)</STRONG>: Keep: the documents will be followed next if they don't match -<BR> <STRONG>Rejection rules (-)</STRONG>: Reject: document will not be followed, unless it matches an imperative rule<BR> <STRONG>LastResort rules (?)</STRONG>: Default: if the robot has no more documents matching * or +, it follows ? </OL> <LI> <A name="Rules.A.3.b">The <STRONG>field</STRONG> of the document to search</A> <OL> <LI> Sample fields are: url, head, body, date, etc...<BR> The program calls Url_Geturl, Url_Getbody, etc, depending on the field specification<BR> To add a new field, all you need to do is provide a function </OL> <LI> <A name="Rules.A.3.c">The <STRONG>pattern</STRONG> to match</A> <OL> <LI> For the moment, it is a glob-type pattern: * matches any combination of characters, ? matches one character. Later on, functionality might be added, to handle regular expression matching.<BR> <STRONG>Please Note:</STRONG> If you want to match the pattern in the middle of a string, you have to add an initial and final * Here are some examples, that you should take a look at: <UL> <LI> <TT>*.mit.edu</TT> does not match http://web.mit.edu/ since the final * is not present <LI> <TT>*.mit.edu/*</TT> matches http://web.mit.edu/people/, ftp://www.mit.edu/pub/ <LI> <TT>*.edu*</TT> matches http://www.sfu.edu<STRONG>.co</STRONG>/, ftp://www.mit.edu.ca/pub/bin/ </UL> </OL> </OL> <H3> <A name="Rules.B">Combining Rules to form Rules</A> </H3> <H4> <A name="Rules.B.1">Definition of a Rule</A> </H4> <P> The definition is recursive: a rule can be either a rule atom, or a logical combination of rules. <H4> <A name="Rules.B.2">Undersating Rule Combination</A> </H4> <P> Here are the forms a rule can take and the result of applying the rule to a list of documents <TABLE BORDER CELLSPACING="0" CELLPADDING="0" WIDTH="100%"> <TR> <TH align=left>Applying ... to a list of documents</TH> <TH align=left>Returns the list of documents that...</TH> </TR> <TR> <TD>RuleAtom</TD> <TD>match an imperative rule, or that match a directional rule and don't match a rejection rule</TD> </TR> <TR> <TD>{OR rule1 rule2 ...}</TD> <TD>either returned by applying rule1, or returned by applying rule2, or ..</TD> </TR> <TR> <TD>{AND rule1 rule2 ...}</TD> <TD>urls returned by rule1, and by rule2, and by...</TD> </TR> <TR> <TD>{NOT rule1 rule2}</TD> <TD>urls returned by rule1 and not by rule2.</TD> </TR> </TABLE> <H4> <A name="Rules.B.4">Example</A> </H4> <P> With those simple rules, we can express very precise constraints <PRE>{NOT {AND +url:*.mit.edu/* -url:*.mit.edu/personnal/* {OR -body:*badword* +head:*goodcontext*}} +date:*october*} </PRE> <H3> <A name="Rules.C">Applying Rules</A> </H3> <H4> <A name="Rules.C.1">The notion of truth</A> </H4> <P> Applying a rule such as +url:*.mit.edu/* to a list of elements <P> more... <P> Please note that the logical NOT operator is not defined in its common interpretation of a unary operator, negating something that is false, to give something true. This is because testing a rule against a set of web elements, does not return true or false, but the list notion of true and false, which is sublists. Therefore, negating a list list2 cannot return the contrary of list2, unless we know what represents the "truth" which in this case is list1. Therefore, one must understand that we can only negate a list relative to a larger list. {NOT 1} is always 0 and {NOT 0} is always 1, but the result of evaluating a rule against a list of documents (that we will assimilate to URLs in this paragraph) is not a boolean, but a sublist. Therefore, if http://web.mit.edu/ is the result of applying rule2, the {NOT rule2} will be {NOT http://web.mit.edu/}, which would represent the entire web, except http://web.mit.edu/. One must therefore provide the part of the web against which http://web.mit.edu/ will be negated, and that in form of a list. <H4> <A name="Rules.C.2">Applying a rule to an Element list</A> </H4> <OL type=a> <LI> <A name="Rules.C.2.a">Reminder</A> <OL> <LI> As you saw earlier, a rule atom has the form +url:*.mit.edu/*, and is formed of the category specification (*, +, -, ?), the field to check (url, head, body, date, etc) and the pattern to match (*.mit.edu/* in this example). </OL> <LI> <A name="Rules.C.2.b">Applying a Rule Atom to a Web Element</A> <OL> <LI> Depending on the field specification of the rule, a corresponding Get$field function is called on the Web Element (where $field can be any of url, head, body, date, etc...), and the pattern is matched against that result. To be able to match against more fields, all one has to do is provide the code for getting the corresponding field from the Web Element, and the rule will be used with no difference. For example, to be able to use a rule +hat:top or +hat-color:red, all one has to do is provide the functions URL_Gethat and URL_Gethat-color. The name can be anything, but cannot contain a column (:), since it is used to separate the field from the pattern in a rule. </OL> <LI> <A name="Rules.C.2.c">Applying a Rule Atom to a List of Web Elements</A> <OL> <LI> When the Web Atom is applied to a List of Elements, two local lists are created, named matched, and unmatched, and each Element checked goes to one list or the other. After every element in the list has been checked, the result (the return value) of applying the Rule to the Element List is the list of matched elements in the case of an imperative (*) or directional (+) rule atom, or the list of unmatched elements, in the case of a negational (-) rule. </OL> <LI> <A name="Rules.C.2.d">Applying Rule Combinations to Element Lists</A> <OL> <LI> When applying {AND rule1 rule2 {OR rule3 rule4}} to a list of elements, rule1, rule2, rule3, and rule4 are applied separately to the list of elements, yielding list1, list2, list3, list4. Then is evaluated the expression [List_and list1 list2 [List_or list3 list4]], which returns the desired list value, the result of applying the rule combination to the element list. </OL> <LI> <A name="Rules.C.2.e">Accepting or rejecting an element</A> </OL> <H3> <A name="Rules.D">Sets of Rules</A> </H3> <H4> <A name="Rules.D.1">Global Rules and Local Rules</A> </H4> <OL type=a> <LI> <A name="Rules.D.1.a">Design issues and purpose</A> <OL> <LI> The Constraint Model of the Robot was built on the idea that the links a user will choose to follow, do not only depend on the purpose of his navigation and his choices of sites, but also, on the history of his navigation, the documents accessed previous to the current page. Therefore, a constraint model would be more efficient by having not only a set of static, global rules, that are set by the user when the navigation begins, but also a set of local rules for each page, that are set automatically, as the navigation progresses, and that are specific to a page, or a family of pages. </OL> <LI> <A name="Rules.D.1.b">Global Rules and Constraints</A> <OL> <LI> Global rules are set by the user before the navigation begins. They represent the rules that the program has to follow throughout his navigation, and cannot be overwritten by local rules. For example, if a user doesn't want to access personnal pages, a global rule would be -url:*/Personnal/*, or if he doesn't want to access only educational pages, a rule might be +url:*.edu* </OL> <LI> <A name="Rules.D.1.c">Local Rules and Navigation method</A> <OL> <LI> The local rules are set every time a new element is created. They are set based on a global variable, nav, that the user sets at the beginning of the navigation, and that he can change at any time. This variable can now have four values: dumb, deep, broad, strategic. </OL> </OL> <H2> <A name="Urls">Representing Documents and Urls</A> </H2> <H3> <A name="Urls.A">A Web Element</A> </H3> <H4> <A name="Urls.A.1">Definition</A> </H4> <P> A Web Element is the sum of all the information gathered on a certain web document reached following a certain path, with a known set of rules. <H4> <A name="Urls.A.2">Representation of a Web Element</A> </H4> <P> A Web Element consists of: <DL> <DT> <A name="Urls.A.2.a">Family</A> <DD> The documents reached from parent 0302 will have family indexes 030201, 030202, 030203. The family index is unique, and fully identifies a given Element. <DT> <A name="Urls.A.2.b">Url</A> <DD> The same document can be reached from two different paths. The same url therefore can be shared by 030202 and 0401. <DT> <A name="Urls.A.2.c">Priority</A> <DD> It shows how important a certain element is for the navigation of the robot. Here's a table of values: <TABLE BORDER CELLSPACING="0"> <TR> <TH>Value</TH> <TH>Category</TH> <TH>Corresponding rule</TH> <TH>Description</TH> </TR> <TR> <TD align=right><P ALIGN=Center> 0</TD> <TD>Untested</TD> <TD>none</TD> <TD>Element has not been tested yet</TD> </TR> <TR> <TD align=right><P ALIGN=Center> 1</TD> <TD>First</TD> <TD>imperative</TD> <TD>Will be followed first</TD> </TR> <TR> <TD align=right><P ALIGN=Center> 2</TD> <TD>Next</TD> <TD>directional</TD> <TD>Followed next</TD> </TR> <TR> <TD align=right><P ALIGN=Center> 3</TD> <TD>Last</TD> <TD>lastresort</TD> <TD>Followed last</TD> </TR> <TR> <TD align=right><P ALIGN=Center> 5</TD> <TD>Rejected</TD> <TD>rejection</TD> <TD>Never followed</TD> </TR> </TABLE> <DT> <A name="Urls.A.2.d">Rules</A> <DD> The local rules of the url. Updated automatically. <DT> <A name="Urls.A.2.e">State</A> <DD> Has the url been followed yet. 1 for yes, 0 for no. </DL> <H4> <A name="Urls.B">The Web</A> </H4> <P> As was said earlier, the main interest of the robot, is not how the web is constructed, how a site is managed, or how the web should be ordered, but the relations that exist among documents, <H2> <A name="Functions">Program Functions</A> </H2> <H3> <A name="Functions.A">Rule Functions</A> </H3> <P> <TABLE BORDER CELLSPACING="0"> <TR> <TH>function</TH> <TH>input</TH> <TH>outputdescription</TH> </TR> <TR> <TD>Rule_Init</TD> <TD>&nbsp;</TD> <TD>Initializes rules</TD> </TR> <TR> <TD>Rule_ShowAll</TD> <TD>&nbsp;</TD> <TD>&nbsp;</TD> </TR> <TR> <TD>Rule_ApplyAtom</TD> <TD>elementlist ruleatom</TD> <TD>list of matching elements</TD> </TR> <TR> <TD>Rule_Apply</TD> <TD>elementlist rule</TD> <TD>&nbsp;</TD> </TR> <TR> <TD>Rule_and</TD> <TD>&nbsp;</TD> <TD>&nbsp;</TD> </TR> <TR> <TD>Rule_or</TD> <TD>&nbsp;</TD> <TD>&nbsp;</TD> </TR> </TABLE> <H3> <A name="Functions.B">Handling Urls</A> </H3> <P> <TABLE BORDER CELLSPACING="0"> <TR> <TH>function</TH> <TH>input</TH> <TH>outputdescription</TH> </TR> <TR> <TD>Url_Init</TD> <TD>&nbsp;</TD> <TD>Initializes urls</TD> </TR> <TR> <TD>Url_ShowAll</TD> <TD>&nbsp;</TD> <TD>&nbsp;</TD> </TR> <TR> <TD>Url_ApplyAtom</TD> <TD>elementlist ruleatom</TD> <TD>list of matching elements</TD> </TR> <TR> <TD>Url_Apply</TD> <TD>elementlist rule</TD> <TD></TD> </TR> </TABLE> <H3> <A name="Functions.C">Handling Lists</A> </H3> <P> <TABLE BORDER CELLSPACING="0"> <TR> <TH>function</TH> <TH>input</TH> <TH>outputdescription</TH> </TR> <TR> <TD>List_and</TD> <TD>list1 list2 ...</TD> <TD>list of common elements to list1 list2 ...</TD> </TR> <TR> <TD>List_or</TD> <TD>list1 list2 ...</TD> <TD>list of elements either in list1 or list2 ...</TD> </TR> <TR> <TD>List_not</TD> <TD>list1 list2</TD> <TD>list of elements in list1 and not in list2</TD> </TR> </TABLE> <H2> <A name="Extensions">Extending the Robot</A> </H2> <DL> <DT> <A name="Extensions.A">Gathering more information</A> <DD> What is really easy to do with the current design of the robot, is to make it gather more information from the documents that it accesses. All one has to do is change the Url_Load function. <DT> <A name="Extensions.B">Graphical Representation</A> <DD> Once elements are gathered by the robot, their family indexes describe their relations very precisely. One can then choose a representation for trees, and provide a graphical representation of the portion of the web accessed. <DT> <A name="Extensions.C">Distributing Web indexing and crawling</A> <DD> When a stable design of storing results is reached and proven general and extensible, then different parties can run their robot, and create tree structures inside their own sites, and store these results in an agreed-upon location, that will be searched by the robot, when accessing that site, and the results will be reused. <DT> <A name="Extensions.D">Strategic navigation</A> <DD> The present robot doesn't know how to handle strategic navigation, which would be trying to reach a url. A special way of calculating rules will have to be formulated. <DT> <A name="Extensions.E">More</A> <DD> And much much more... </DL> <P> <HR> <ADDRESS> Manolis Kamvysselis,<BR> @(#) $Id: Constraint.html,v 1.2 2025/10/01 15:40:52 frystyk Exp $ </ADDRESS> </BODY></HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/Makefile.am������������������������������������������������������������������������0100644�0000764�0000144�00000000254�06616740510�015462� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DOC := $(wildcard *.html) TCL := $(wildcard *.tcl) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = \ $(DOC) \ $(TCL) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/Overview.html����������������������������������������������������������������������0100644�0000764�0000144�00000004050�06666553725�016137� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Webbot Constraint Model and Tcl/Tk Interface</TITLE> <LINK rel=STYLESHEET href="/StyleSheets/Area/Overview.css" type="text/css"> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#0000EE" VLINK="#551A8B"> <P> <A HREF="/"><IMG BORDER="0" ALT="W3C" SRC="/Icons/WWW/w3c_home"></A> <A HREF="/Library/"><IMG BORDER="0" ALT="Library" SRC="/Icons/WWW/Lib48x"></A> <A HREF="../../resources.html"><IMG BORDER="0" ALT="Robot" SRC="/Icons/WWW/robot48x"></A> <H1> Webbot Constraint Model and Tcl/Tk Interface </H1> <P> <DIV class="intro"> <A href="http://web.mit.edu/manoli/www/">Manolis Kamvysselis</A> worked during the summer of 1996 on building a constraint model in Tcl for the <A HREF="../../resources.html">Webbot</A>. The Webbot was furthermore extended with a graphical interface written in Tk. The project is no longer maintained but may be a help to others. <UL> <LI> <A HREF="Constraint-frames.html">Discription of Constraints model</A> <LI> <A HREF="Robot.tcl">Robot Tcl Source</A> - get it from the <A HREF="/Library/Distribution.html">libwww code base</A> </UL> </DIV> <P> <HR> <H2> The Basics </H2> <DL> <DT> Author(s) <DD> <A href="http://web.mit.edu/manoli/www/">Manolis Kamvysselis</A> <DT> Status <DD> Experimental part of libwww <DT> Plans <DD> No plans <DT> Platforms <DD> It runs on the same platforms as libwww and Tcl/Tk <DT> Getting the Source Code <DD> The source comes as an integral part of the libwww <A HREF="/Library/Distribution.html">source code base</A> <DT> Forum <DD> Follow this link to <A HREF="mailto:www-lib-request@w3.org?subject=subscribe">subscribe to the &lt;www-lib@w3.org&gt;</A> mailing list (findmail archives) </DL> <H2> <HR> </H2> <ADDRESS> <A href="http://web.mit.edu/manoli/www/">Manolis Kamvysselis</A> and <A HREF="/">Henrik Frystyk Nielsen</A>,<BR> @(#) $Id: Overview.html,v 1.4 2025/03/01 18:09:25 frystyk Exp $ </ADDRESS> </BODY></HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/tcl/Robot.tcl��������������������������������������������������������������������������0100644�0000764�0000144�00000042650�06215101726�015220� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!bin/sh #the next line restarts using wish \ exec /usr/local/bin/wish -f "$0" ${1+"$@"} # robot -- # This script allows the user of the libwww web robot to issue # commands to the robot by checking options and clicking buttons. # # MK, manoli@w3.org, Manolis Kamvysselis, 96/07/01 #*********************************************************** #Init = initialization and stuff that changes from platform #Init: initial values for variables set url "http://www.w3.org/pub/WWW/" #init: id number for dialog boxes set id 0 #Init: Platform and computer dependent variables proc InitPath {} { global path webbot weblog webout webrules path source editor \ webbot-path weblog-path webout-path webrules-path if [file exists webprefs] { LoadPreferences } else { #prefs file does not exist: prompt user Dialog "File webprefs not found. \n \ Would you like to create a new file \ in the current directory?" \ {create set cancel} \ {"Create File with Default Preferences" "Set Default Preferences" "Cancel"} \ {{SetDefaultPreferences; SavePreferences} SetDefaultPreferences ""} } } #procedure to create a dialog box displaying a message, #defaults to ok and cancel, spelling Ok and Cancel and doing nothing proc Dialog {message {buttons {ok cancel}} {names {"ok" "cancel"}} {commands {"" ""}}} { global id set id [expr $id + 1] if {"winfo exists .dialog$id" == 1} { wm withdraw .dialog$id } toplevel .dialog$id wm title .dialog$id "Dialog Box" message .dialog$id.msg -aspect 1000 -text $message pack .dialog$id.msg -side top frame .dialog$id.buttons foreach button $buttons { set name [lindex $names [lsearch -exact $buttons $button]] set command [lindex $commands [lsearch -exact $buttons $button]] button .dialog$id.buttons.$button -text $name -command "wm withdraw .dialog$id; $command" pack .dialog$id.buttons.$button -side left } pack .dialog$id.buttons -side bottom } #Window: name the window and set up bindings proc SetWindow {} { wm title . "W3C Web Robot user interface" #key bindings equivalents to buttons bind . <Return> Start bind . <Control-x> exit bind . <Control-q> exit bind . <Control-p> AskPreferences } #*********************************************************** #Menu: preferences for paths, and stuff all in a menu proc SetMenus {} { global webbot source #creates three menubuttons File, Edit, About frame .menu foreach which {file edit help} { set Capitalized "" append Capitalized [string toupper [string index $which 0]] \ [string range $which 1 end] menubutton .menu.$which -text $Capitalized -menu .menu.$which.menu pack .menu.$which -side left } pack .menu -side top -fill x #Menu: Robot: files to be used for output, log, and executable of the robot set mfile [menu .menu.file.menu] $mfile add command -label Run -command Start $mfile add command -label "Edit Source" -command {exec $editor $source} $mfile add separator $mfile add command -label "Load Prefs..." -command { Dialog "Load Preferences: This will discard the current Preferences" \ {ok set cancel} \ {"Go ahead" "View Current Preferences" "Abort the Mission"} \ {LoadPreferences AskPreferences ""} } $mfile add command -label "Save Prefs..." -command { Dialog "Save Preferences: This will discard the Preferences Saved Previously" \ {ok set cancel} \ {"Go ahead" "View Current Preferences" "Abort the Mission"} \ {SavePreferences AskPreferences ""} } $mfile add separator $mfile add command -label Preferences... -command AskPreferences $mfile add separator $mfile add command -label Quit -command exit #Menu: edit copy paste and stuff set medit [menu .menu.edit.menu] $medit add command -label "Copy and Paste Url" -command CopyAndPasteUrl $medit add command -label "Follow URL" -command FollowUrl #Menu: about: version of the robot, and about the program set mhelp [menu .menu.help.menu] set blablahelp {" To fetch links from a URL, enter the url and click webbot. To follow a URL returned, double click in the log, on the line of the URL that you want to follow. To simply copy a URL to the URL entry, so you can edit it afterwards, click the left then the right button on the corresponding line of the log. "} $mhelp add command -label "Using" -command "Dialog $blablahelp ok Cool {}" $mhelp add command -label "About the Robot" -command ShowVersion set blablatext {" Welcome to the W3C mini robot user interface. The selections that you make below, or in the preferences, are translated and passed on to the W3C mini robot, part of the w3c test library. Have fun!!"} $mhelp add command -label "About this Program" -command "Dialog $blablatext ok Thanx {}" } #*********************************************************** #Prefs: window to prompt for preferences proc AskPreferences {} { global editor source path webbot weblog webrules toplevel .prefs wm title .prefs "W3C WebRobot User Preferences" #Editor: Which editor to use to edit the source frame .prefs.editor label .prefs.editor.l -text Editor: entry .prefs.editor.path -textvariable editor pack .prefs.editor.l -side left pack .prefs.editor.path -side left -expand true -fill x pack .prefs.editor -side top -fill x #*********************************************************** #Edit: where to find the source of robot.tcl and editor to launch frame .prefs.edit label .prefs.edit.l -text Source: entry .prefs.edit.source -textvariable source button .prefs.edit.edit -text Edit -command {exec $editor $source} pack .prefs.edit.l -side left pack .prefs.edit.source -side left -fill x -expand true pack .prefs.edit.edit -side right pack .prefs.edit -side top -fill x #*********************************************************** #Path: Choose the common path of webbot weblog and webrules frame .prefs.path checkbutton .prefs.path.common -text Common -variable common \ -onvalue "Same" -offvalue "Different" -command {SetPath$common} .prefs.path.common select label .prefs.path.l -text Path: entry .prefs.path.webbot -width 50 -relief sunken -textvariable path bind .prefs.path.webbot <KeyRelease> {SetPath$common} pack .prefs.path.common .prefs.path.l -side left pack .prefs.path.webbot -side left -expand true pack .prefs.path -side top -fill x #*********************************************************** #SetPath*: procedures to set the path proc SetPathSame {} { global path foreach what {bot log rules out} { global web$what web$what-path set web$what "" append web$what $path [set web$what-path] } } proc SetPathDifferent {} { foreach what {bot log rules out} { global web$what web$what-path set web$what [set web$what-path] } } #*********************************************************** #Log: choose the log file array set Text {bot Webbot: log "Log File:" rules "Rules File:" \ out "Output File:"} array set Value {bot webbot.exe log www-log rules www-rule out www-out} foreach what {bot log rules out} { global web$what web$what-path frame .prefs.$what set web$what-path $Value($what) label .prefs.$what.l -text $Text($what) entry .prefs.$what.path -textvariable web$what-path bind .prefs.$what.path <KeyRelease> { global what SetPath$common } label .prefs.$what.show -textvariable web$what -width 30 pack .prefs.$what.l -side left pack .prefs.$what.path -side left -expand true -fill x pack .prefs.$what.show -side right -expand true pack .prefs.$what -side top -fill x } #*********************************************************** #Buttons: What to do once the preferences are set frame .prefs.buttons button .prefs.buttons.set -text "Set" -command ClosePrefsWindow button .prefs.buttons.save -text "Save" -command "SavePreferences; ClosePrefsWindow" button .prefs.buttons.load -text "Load" -command "LoadPreferences; ClosePrefsWindow" button .prefs.buttons.edit -text "Edit" -command "$editor ${path}Webprefs" foreach which {set save load edit} { pack .prefs.buttons.$which -side left } pack .prefs.buttons -side top proc ClosePrefsWindow {} { wm withdraw .prefs } } #prefs: initialize preferences, without saving them to a file proc SetDefaultPreferences {} { global path source editor webbot-path weblog-path webrules-path webout-path set source "" set path [pwd]\\ lappend source $path Robot.tcl set editor "C:\\Program Files\\Accessories\\WordPad.exe" set webbot-path webbot.exe set weblog-path www-log set webrules-path webrules set webout-path www-out foreach what {bot log out rules} { global path web$what web$what-path set web$what "" append web$what $path [set web$what-path] } } #prefs: Load preferences from webprefs proc LoadPreferences {} { global editor source path webbot weblog webrules Status Loading Preferences... if [file exists webprefs] { #the file webprefs exists: read the preferences if [catch {open webprefs r} file] { #file can't be read Dialog "File Unreadable" ok "OK" "" } else { #file can be read while {! [eof $file]} { #still lines to read gets $file line if {[string compare # [string index $line 0]] == 0} { #ignores commented lines } else { #assuming line of the form variable:value set pair [split $line :] set variable [lindex $pair 0] set value [join [lrange $pair 1 [llength $pair]] :] global $variable set $variable $value Log "setting $variable to $value" } } close $file TraceToButtons } } else { #file webprefs does not exist Dialog " File WebPrefs does not Exist. Create a file WebPrefs in the current directory? Current Directory: [pwd] "\ {create default cancel} \ {"Create File with Default Preferences" "Set default Preferences" "Cancel"} \ {{SetDefaultPreferences; SavePreferences} SetDefaultPreferences ""} } Status Done } #prefs: create the prefs file to hold the preferences proc SavePreferences {} { set file [open webprefs w 0600] puts $file "#This file is created by webbot.tcl" puts $file "#It contains the preferences for running the w3c mini robot" foreach variable {path source editor webbot webbot-path weblog weblog-path webout webout-path \ webrules webrules-path trace img ss url} { global $variable puts $file $variable:[set $variable] Log Writing:$variable:[set $variable] } close $file } #*********************************************************** #nav: Navigation method, and depth proc SetNav {} { frame .nav set nav dumb label .nav.l1 -text "Navigation method:" -relief ridge pack .nav.l1 -side left frame .nav.choice foreach choice {dumb parallel deep strategic} { radiobutton .nav.choice.$choice -text $choice -value $choice -variable nav pack .nav.choice.$choice -side left } pack .nav.choice -side left #nav: links: Number of links to follow frame .nav.links label .nav.links.l -text "Depth:" -relief ridge set links 0 set link "" entry .nav.links.entry -textvariable links -width 3 -relief flat bind .nav.links.entry <KeyRelease> SetLink proc SetLink {} { global links link if {[string compare $links ""] == 0} { set link "" } elseif {$links != 0} { set link "" append link "-link " $links } else { set link "" } } label .nav.links.show -textvariable link foreach packing {l entry show} { pack .nav.links.$packing -side left } pack .nav.links -side left pack .nav -side top -fill x } #*********************************************************** #Trace: Tracing information on the robot proc SetTrace {} { global trace traced set trace "" frame .trace #Trace: title, variable, and button for debugging frame .trace.title label .trace.title.l -text "Trace messages relevant to:" -relief ridge button .trace.title.all -text Everything -command TraceAll button .trace.title.none -text Nothing -command TraceNone pack .trace.title.l .trace.title.all .trace.title.none -side left label .trace.title.display -textvariable trace -justify left -width 10 foreach whichbutton {l all none display} { pack .trace.title.$whichbutton -side left } #*********************************************************** #Info: Retrieving Information frame .trace.title.info checkbutton .trace.title.info.version -text Version -command ShowVersion #Info: Checking the images of the documents checkbutton .trace.title.info.img -text "Images" \ -variable img -onvalue "-img" -offvalue "" #Info: Date and Time of the job checkbutton .trace.title.info.ss -text "Time Log" \ -variable ss -onvalue "-ss" -offvalue "" #Info: Packing the buttons foreach packing {version img ss} { pack .trace.title.info.$packing -side left } pack .trace.title.info -side left pack .trace.title -side top -fill x #Trace: buttons to choose tracing options frame .trace.buttons #matching up the names and letters array set tracing {a "anchors" b "bindings to local files" c "cache" g "SGML" p "protocol" s "sgml/html" t "threads" u "url"} foreach letter {a b c g p s t u} { checkbutton .trace.buttons.$letter -text $tracing($letter) \ -variable traced($letter) -command ButtonsToTrace pack .trace.buttons.$letter -side left -anchor w } pack .trace.buttons -side top -fill x -expand true pack .trace -side top -fill x #Trace: tracing everything or nothing proc TraceAll {} { global traced ss img foreach letter {a b c g p s t u} { set traced($letter) 1 } ButtonsToTrace set img "-img" set ss "-ss" } proc TraceNone {} { global traced img ss foreach letter {a b c g p s t u} { set traced($letter) 0 } ButtonsToTrace set img "" set ss "" } } #Trace: Showing the Version proc ShowVersion {} { global webbot catch {exec $webbot "-version"} results Log $results } #Trace: setting up the buttons from the variable trace proc TraceToButtons {} { global trace traced if {[string compare $trace "-v"] == 0} {set trace -vabcgpstu} foreach letter {a b c g p s t u} { global traced($letter) Log "traced($letter) = [set traced($letter)]" if "[string match *$letter* $trace] == 1" { set traced($letter) 1 } else { set traced($letter) 0 } } if {[string compare $trace "-vabcgpstu"] == 0} {set trace -v} } #Trace: calculating what to trace from the user's selections proc ButtonsToTrace {} { global trace traced set trace "-v" foreach letter {a b c g p s t u} { if {$traced($letter)} { append trace $letter } } if {[string compare $trace "-v"] == 0} { set trace "" } elseif {[string compare $trace "-vabcgpstu"] == 0} { set trace "-v" } } #*********************************************************** #Webbot: Launch the robot and Url to start from proc SetWebbot {} { frame .webbot label .webbot.l -text "URL to start from:" entry .webbot.url -textvariable url -foreground red pack .webbot.l -side left pack .webbot.url -side left -fill x -expand true button .webbot.start -text Webbot -command Start button .webbot.exit -text Exit -command exit pack .webbot.exit .webbot.start -side right pack .webbot -side top -fill x } #*********************************************************** #Log: Creating a scrollable window to log the output proc SetLog {} { global log frame .log set log [text .log.log -width 75 -height 10 -wrap none -borderwidth 2 \ -relief raised -setgrid true -yscrollcommand {.log.scrolly set} \ -xscrollcommand {.log.scrollx set}] scrollbar .log.scrolly -orient vertical -command {.log.log yview} scrollbar .log.scrollx -orient horizontal -command {.log.log xview} pack .log.scrolly -side right -fill y pack .log.scrollx -side bottom -fill x pack .log.log -side left -fill both -expand true pack .log -side top -fill both -expand true #Log: Key Bindings bind .log.log <Control-f> FollowUrl bind .log.log <Control-u> CopyAndPasteUrl bind .log.log <Double-Button-1> FollowUrl bind .log.log <Button-2> CopyAndPasteUrl bind .log.log <Button-3> CopyAndPasteUrl } #Log: Procedure to log results in the log window proc Log {string} { global log $log insert end $string\n $log see end } #Log: procedures to follow URLs from the log proc FollowUrl {} { CopyAndPasteUrl Start } proc CopyAndPasteUrl {} { global log url set url [lindex [split [$log get "insert linestart" "insert lineend"] {`'}] 1] $log tag add fetched "insert linestart" "insert lineend" $log tag configure fetched -foreground red } #*********************************************************** #Status: Looking at what's going on proc SetStatus {} { set status Ready frame .status label .status.l -text "Status:" label .status.status -textvariable status -relief sunken -anchor w pack .status.l -side left pack .status.status -side left -fill x -expand true pack .status -side bottom -fill x } #Status: procedure status to be called with any number of arguments proc Status {args} { global status set status $args } #*********************************************************** #Start running the Robot proc Start {} { global webbot img link ss trace url Status Running the robot... set Space(start) "********************************* $url" set Space(end) {} Log $Space(start) Log "Calling webbot with $webbot $img $link $ss $trace $url" catch {eval exec $webbot $img $link $ss $trace $url} results Log $results Log $Space(end) Status Done } #*********************************************************** #Main: the main program that calls all of the previous functions SetWindow SetMenus SetNav SetTrace SetWebbot SetLog SetStatus SetDefaultPreferences InitPath����������������������������������������������������������������������������������������libwww/Robot/tcl/Makefile.in������������������������������������������������������������������������0100644�0000764�0000144�00000013456�07405520526�015503� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOC := $(wildcard *.html) TCL := $(wildcard *.tcl) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = $(DOC) $(TCL) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Robot/tcl/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot/tcl distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Robot/tcl/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/�������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517406�014272� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/CVS/���������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517406�014725� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/CVS/Root�����������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517406�015571� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/CVS/Repository�����������������������������������������������������������������0100644�0000764�0000144�00000000025�07405517406�017021� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/CVS/Entries��������������������������������������������������������������������0100644�0000764�0000144�00000000337�07405517406�016261� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Overview.html/1.5/Mon Oct 26 22:30:54 1998// /fixme.sql/1.4/Sat Aug 29 19:56:44 1998// /links.sql/1.3/Sat Aug 29 19:56:44 1998// /requests.sql/1.4/Sat Aug 29 19:56:44 1998// /resources.sql/1.3/Sat Aug 29 19:56:44 1998// D �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/Overview.html������������������������������������������������������������������0100644�0000764�0000144�00000004621�06615174036�016766� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>The Webbot Log Database</TITLE> <LINK rel=STYLESHEET href="/StyleSheets/Area/Overview.css" type="text/css"> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000"> <P> <A HREF="/"><IMG ALT="W3C" SRC="/Icons/WWW/w3c_home" BORDER="0" WIDTH="72" HEIGHT="48"></A> <A HREF="../../resources.html"><IMG ALT="Robot" SRC="/Icons/WWW/robot48x" BORDER="0"></A> <H1> The Webbot Log Database </H1> <P> This is an example of a Web-enabled interface to a <A HREF="http://www.tcx.se/">MySQL database</A> based on <A href="http://www.daa.com.au/~james/www-sql/">www-sql</A>. The links below are some <B>samples</B> of how you can extract information about <EM>broken links</EM>, <EM>redirections</EM>, <EM>document titles</EM>, <EM>last modified dates</EM>, <EM>content types</EM>, <EM>link relationships</EM> and much much more from a <A HREF="../User/CommandLine.html#Logging">MySQL log database</A> generated by the webbot. <P> When active, the information is extracted directly from the <A HREF="http://www.tcx.se/">MySQL database</A> as you go along - the samples below are not hooked up to a database, so instead you will see the raw <A HREF="http://www.daa.com.au/~james/www-sql/">www-sql</A> documents: <DL> <DT> <B><A HREF="links.sql">Link Relationships</A></B> <DD> Which resources point to which resources? Information about both <EM>incoming</EM> and <EM>outgoing</EM> links as well as different link types (images, style sheets, etc). <DT> <B><A href="requests.sql">Request Information</A></B> <DD> Information gathered from the HTTP requests including information about broken links, redirections, etc. <DT> <B><A href="resources.sql">Resources Information</A></B> <DD> Information about the documents like content length, type, language, title, whether it was content negotiated, etc. <DT> <B><A href="fixme.sql">Broken HTML, Bad Style, etc.</A></B> <DD> The Webbot can detect certain HTML problems like empty or non-existing <TT>ALT</TT> tags on images, for example </DL> <P> I use an active <A HREF="http://www.tcx.se/">MySQL database</A> to check links etc. on the <A HREF="/">W3C website</A> - it takes about 50 minutes to check 32,000 links. <P> <HR> <ADDRESS> <A href="/">Henrik Frystyk Nielsen</A>,<BR> @(#) $Id: Overview.html,v 1.5 2025/10/26 22:30:54 frystyk Exp $ </ADDRESS> </BODY></HTML> ���������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/fixme.sql����������������������������������������������������������������������0100644�0000764�0000144�00000004531�06572056374�016131� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>The Webbot Log Database - Broken HTML, bad style, etc</TITLE> <LINK rel=STYLESHEET href="http://www.w3.org/StyleSheets/Area/Overview.css" type="text/css"> </HEAD> <A HREF="http://www.w3.org/"><IMG ALT="W3C" SRC="http://www.w3.org/Icons/WWW/w3c_home" BORDER="0" WIDTH="72" HEIGHT="48"></A> <A HREF="http://www.w3.org/Robot/"><IMG ALT="Robot" SRC="http://www.w3.org/Icons/WWW/robot48x" BORDER="0"></A> <A HREF="../../resources/mapserver.html">Top</A> <H1> The Webbot Log Database - Broken HTML, Bad Style, etc </H1> What's wrong on our web site and where to find it :) <! SQL connect > <! SQL database webbot > <! SQL set root "http://www.w3.org"> <H2> <A NAME="t1">Search for Images WITH NO ALT Text </H2> <! SQL setdefault o1 0 > <form action=fixme.sql#t1> Area: <SELECT NAME="a1"> <OPTION SELECTED><! sql print "?a1"> <OPTION>Amaya <OPTION>Architecture <OPTION>ComLine <OPTION>DesignIssues <OPTION>International <OPTION>Jigsaw <OPTION>Library <OPTION>LineMode <OPTION>MarkUp <OPTION>Member <OPTION>MiniServ <OPTION>Protocols <OPTION>Replication <OPTION>Robot <OPTION>Style <OPTION>Team <OPTION>WAI </SELECT> <input type=submit> </FORM> <! SQL query "select u1.uri, u2.uri from links, uris as u1, uris as u2 where links.link_type='image' and isnull(links.comment) and links.source=u1.id and u1.uri like '/?a1/%' and links.destination=u2.id limit $o1,20" q1 > <!-- Put in table --> <table width="100%"> <tr> <th width="50%">Referenced From</th> <th>Image Location</th> </tr> <! sql print_rows q1 "<tr> <td><a href=\"$root@q1.0\">@q1.0</a></td> <td><a href=\"$root@q1.1\">@q1.1</a></td> </tr>\n" > </table> <!-- Put in navigation links --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <center> <! sql if 19 < $o1 > <! sql print "<a href=\"fixme.sql\?a1=#a1&o1=" > <! sql eval $o1 - 20 > <! sql print "\#t1\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"fixme.sql\?a1=#a1&o1=" > <! sql eval $o1 + 20 > <! sql print "\#t1\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <P> <HR> <ADDRESS> <A href="http://www.w3.org/People/Frystyk/">Henrik Frystyk Nielsen</a><br> @(#) $Id: fixme.sql,v 1.4 2025/08/29 19:56:44 frystyk Exp $ </ADDRESS> </BODY> </HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/links.sql����������������������������������������������������������������������0100644�0000764�0000144�00000012223�06572056374�016136� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>The Webbot Log Database - Link Types</TITLE> <LINK rel=STYLESHEET href="http://www.w3.org/StyleSheets/Area/Overview.css" type="text/css"> </HEAD> <A HREF="http://www.w3.org/"><IMG ALT="W3C" SRC="http://www.w3.org/Icons/WWW/w3c_home" BORDER="0" WIDTH="72" HEIGHT="48"></A> <A HREF="http://www.w3.org/Robot/"><IMG ALT="Robot" SRC="http://www.w3.org/Icons/WWW/robot48x" BORDER="0"></A> <A HREF="../../resources/mapserver.html">Top</A> <H1> The Webbot Log Database - Link Types </H1> <P> <H2> <A NAME="hints">Hints</A> </H2> These are some useful hints for handling wildcard matching: <DL COMPACT> <DT><B>%</B><DD>Matches any number of characters, even zero characters. <DT><B>_</B><DD>Matches exactly one character. <DT><B>\%</B><DD>Matches one %. <DT><B>\_</B><DD>Matches one _. </DL> <! SQL connect > <! SQL database webbot > <! SQL set root "http://www.w3.org"> <H2> <A NAME="t1">Link Relationships (Typed links)</A> </H2> Type in the link relationship that you are interested in, for example <B>stylesheet</B>, <B>image</B>, <B>referer</B>, <B>up</B>, <B>TOC</B>, etc. Case doesn't matter and you can use the <A href="#hints">wildcards above</A>.<P> <! SQL setdefault o1 0 > <form action="links.sql#t1"> <input name="link" size=20 value="<! sql print "?link">"> <input type="submit"> </form> <P> <! SQL query "select links.link_type, u1.uri, u2.uri from links, uris as u1, uris as u2 where links.link_type like '?link' and links.source=u1.id and links.destination=u2.id limit $o1,20" q1 > <!-- Put in table --> <table width="90%"> <tr> <th>Source</th> <th>Link Type</th> <th>Destination</th> </tr> <! sql print_rows q1 "<tr> <td><a href=\"$root@q1.1\">@q1.1</a></td> </td> <td>@q1.0</td> <td><a href=\"$root@q1.2\">@q1.2</a></tr>\n" > </table> <!-- Put in navigation links --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <center> <! sql if 19 < $o1 > <! sql print "<a href=\"links.sql\?link=#link&o1=" > <! sql eval $o1 - 20 > <! sql print "\#t1\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"links.sql\?link=#link&o1=" > <! sql eval $o1 + 20 > <! sql print "\#t1\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <H2> <A NAME="out">Where does this Address link to?</A> </H2> Paste in the URI that you want to find out the <B>outgoing</B> links from this address. Make the URI relative to <CODE>http://www.w3.org</CODE> so that you have something like <CODE>/Library/</CODE>. You can use the <A href="#hints">wildcards above</A>, like for example <CODE>/Library/%</CODE>.<P> <! SQL setdefault o2 0 > <form action="links.sql#out"> <input name="out" size=60 value="<! sql print "?out">"> <input type="submit"> </form> <! SQL query "select links.link_type, u2.uri, u1.uri from links, uris as u1, uris as u2 where u2.uri like '?out' and links.source=u2.id and links.destination=u1.id limit $o2,20" q1 > <!-- Put in table --> <table width="90%"> <tr> <th>Source</th> <th>Link Type</th> <th>Destination</th> </tr> <! sql print_rows q1 "<tr> <td><a href=\"$root@q1.1\">@q1.1</a></td> </td> <td>@q1.0</td> <td><a href=\"$root@q1.2\">@q1.2</a></tr>\n" > </table> <!-- Put in navigation links --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <center> <! sql if 19 < $o2 > <! sql print "<a href=\"links.sql\?out=#out&o2=" > <! sql eval $o2 - 20 > <! sql print "\#out\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"links.sql\?out=#out&o2=" > <! sql eval $o2 + 20 > <! sql print "\#out\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <H2> <A NAME="in">Who links to this Address?</A> </H2> Paste in the URI that you want to find out the <B>incoming</B> links to this address. Make the URI relative to <CODE>http://www.w3.org</CODE> so that you have something like <CODE>/Library/</CODE>. You can use the <A href="#hints">wildcards above</A>, like for example <CODE>/Library/%</CODE>.<P> <! SQL setdefault o3 0 > <form action="links.sql#in"> <input name="in" size=60 value="<! sql print "?in">"> <input type="submit"> </form> <! SQL query "select links.link_type, u1.uri, u2.uri from links, uris as u1, uris as u2 where u2.uri like '?in' and links.source=u1.id and links.destination=u2.id limit $o3,20" q1 > <!-- Put in table --> <table width="90%"> <tr> <th>Source</th> <th>Link Type</th> <th>Destination</th> </tr> <! sql print_rows q1 "<tr> <td><a href=\"$root@q1.1\">@q1.1</a></td> </td> <td>@q1.0</td> <td><a href=\"$root@q1.2\">@q1.2</a></tr>\n" > </table> <!-- Put in navigation links --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <center> <! sql if 19 < $o3 > <! sql print "<a href=\"links.sql\?in=#in&o3=" > <! sql eval $o3 - 20 > <! sql print "\#in\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"links.sql\?in=#in&o3=" > <! sql eval $o3 + 20 > <! sql print "\#in\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <P> <HR> <ADDRESS> <A href="http://www.w3.org/People/Frystyk/">Henrik Frystyk Nielsen</a><br> @(#) $Id: links.sql,v 1.3 2025/08/29 19:56:44 frystyk Exp $ </ADDRESS> </BODY> </HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/requests.sql�������������������������������������������������������������������0100644�0000764�0000144�00000017346�06572056374�016704� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>The Webbot Log Database - Requests</TITLE> <LINK rel=STYLESHEET href="http://www.w3.org/StyleSheets/Area/Overview.css" type="text/css"> </HEAD> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000"> <A HREF="http://www.w3.org/"><IMG ALT="W3C" SRC="http://www.w3.org/Icons/WWW/w3c_home" BORDER="0" WIDTH="72" HEIGHT="48"></A> <A HREF="http://www.w3.org/Robot/"><IMG ALT="Robot" SRC="http://www.w3.org/Icons/WWW/robot48x" BORDER="0"></A> <A HREF="../../resources/mapserver.html">Top</A> <H1> The Webbot Log Database - Requests </H1> <P> <! SQL connect > <! SQL database webbot > <! SQL setdefault sort requests.request_time > <! SQL set root "http://www.w3.org"> <H2> <A NAME="t1">Search for Broken Links</A> </H2> Select the area that you are interested in.<P> <! SQL setdefault o1 0 > <FORM ACTION="requests.sql#t1"> Area: <SELECT NAME="a1"> <OPTION SELECTED><! sql print "?a1"> <OPTION>Amaya <OPTION>Architecture <OPTION>ComLine <OPTION>DesignIssues <OPTION>International <OPTION>Jigsaw <OPTION>Library <OPTION>LineMode <OPTION>MarkUp <OPTION>Member <OPTION>MiniServ <OPTION>Protocols <OPTION>Replication <OPTION>Robot <OPTION>Style <OPTION>Team <OPTION>WAI </SELECT> <input type=submit> </FORM> <! SQL query "select u1.uri, u2.uri, requests.request_time, requests.method from requests, links, uris as u1, uris as u2 where requests.status=404 and u1.id=requests.uri and links.destination=requests.uri and u2.id=links.source and u1.uri like '/?a1/%' order by u2.uri limit $o1,20" q1 > <!-- If we have any data --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <!-- Put in table --> <table width="90%"> <tr><th>This link is Broken</th> <th>It is Referenced from</th> <th>Requested at</th> <th>Method</th> </tr> <! sql print_rows q1 "<tr><td><a href=\"$root@q1.0\">@q1.0</a></td><td><a href=\"$root@q1.1\">@q1.1</a></td><td>@q1.2</td><td>@q1.3</td></tr>\n" > </table> <!-- Put in navigation links --> <center> <! sql if 19 < $o1 > <! sql print "<a href=\"requests.sql\?a1=#a1&o1=" > <! sql eval $o1 - 20 > <! sql print "\#t1\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"requests.sql\?a1=#a1&o1=" > <! sql eval $o1 + 20 > <! sql print "\#t1\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <H2> <A NAME="t2">Search for Temporary Redirections</A> </H2> Select the area that you are interested in.<P> <! SQL setdefault o2 0 > <FORM ACTION="requests.sql#t2"> Area: <SELECT NAME="a2"> <OPTION SELECTED><! sql print "?a2"> <OPTION>Amaya <OPTION>Architecture <OPTION>ComLine <OPTION>DesignIssues <OPTION>International <OPTION>Jigsaw <OPTION>Library <OPTION>LineMode <OPTION>MarkUp <OPTION>Member <OPTION>MiniServ <OPTION>Protocols <OPTION>Replication <OPTION>Robot <OPTION>Style <OPTION>Team <OPTION>WAI </SELECT> <input type=submit> </FORM> <! SQL query "select u1.uri, u2.uri, requests.request_time, requests.method from requests, links, uris as u1, uris as u2 where requests.status=302 and u1.id=requests.uri and links.destination=requests.uri and u2.id=links.source and u1.uri like '/?a2/%' order by u2.uri limit $o2,20" q2 > <!-- If we have any data --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <!-- Put in table --> <table width="90%"> <tr><th>Temporary Redirection</th> <th>It is Referenced from</th> <th>Requested at</th> <th>Method</th> </tr> <! sql print_rows q2 "<tr><td><a href=\"$root@q2.0\">@q2.0</a></td><td><a href=\"$root@q2.1\">@q2.1</a></td><td>@q2.2</td><td>@q2.3</td></tr>\n" > </table> <!-- Put in navigation links --> <center> <! sql if 19 < $o2 > <! sql print "<a href=\"requests.sql\?a2=#a2&o2=" > <! sql eval $o2 - 20 > <! sql print "\#t2\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"requests.sql\?a2=#a2&o2=" > <! sql eval $o2 + 20 > <! sql print "\#t2\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <H2> <A NAME="t3">Search for Permanent Redirections</A> </H2> Select the area that you are interested in.<P> <! SQL setdefault o3 0 > <FORM ACTION="requests.sql#t3"> Area: <SELECT NAME="a3"> <OPTION SELECTED><! sql print "?a3"> <OPTION>Amaya <OPTION>Architecture <OPTION>ComLine <OPTION>DesignIssues <OPTION>International <OPTION>Jigsaw <OPTION>Library <OPTION>LineMode <OPTION>MarkUp <OPTION>Member <OPTION>MiniServ <OPTION>Protocols <OPTION>Replication <OPTION>Robot <OPTION>Style <OPTION>Team <OPTION>WAI </SELECT> <input type=submit> </FORM> <! SQL query "select u1.uri, u2.uri, requests.request_time, requests.method from requests, links, uris as u1, uris as u2 where requests.status=301 and u1.id=requests.uri and links.destination=requests.uri and u2.id=links.source and u1.uri like '/?a3/%' order by u2.uri limit $o3,20" q3 > <!-- If we have any data --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <!-- Put in table --> <table width="90%"> <tr><th>Permananet Redirection</th> <th>It is Referenced from</th> <th>Requested at</th> <th>Method</th> </tr> <! sql print_rows q3 "<tr><td><a href=\"$root@q3.0\">@q3.0</a></td><td><a href=\"$root@q3.1\">@q3.1</a></td><td>@q3.2</td><td>@q3.3</td></tr>\n" > </table> <!-- Put in navigation links --> <center> <! sql if 19 < $o3 > <! sql print "<a href=\"requests.sql\?a3=#a3&o3=" > <! sql eval $o3 - 20 > <! sql print "\#t3\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"requests.sql\?a3=#a3&o3=" > <! sql eval $o3 + 20 > <! sql print "\#t3\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <H2> <A NAME="t4">Search for any Status Code, you like</A> </H2> Select the area that you are interested in.<P> <! SQL setdefault o4 0 > <! SQL setdefault status 0 > <FORM ACTION="requests.sql#t4"> Area: <SELECT NAME="a4"> <OPTION SELECTED><! sql print "?a4"> <OPTION>Amaya <OPTION>Architecture <OPTION>ComLine <OPTION>DesignIssues <OPTION>International <OPTION>Jigsaw <OPTION>Library <OPTION>LineMode <OPTION>MarkUp <OPTION>Member <OPTION>MiniServ <OPTION>Protocols <OPTION>Replication <OPTION>Robot <OPTION>Style <OPTION>Team <OPTION>WAI </SELECT> with status code <input name="status" size=3 value="<! sql print "?status">"> <input type=submit> </FORM> <! SQL query "select u1.uri, u2.uri, requests.request_time, requests.method from requests, links, uris as u1, uris as u2 where requests.status=?status and u1.id=requests.uri and links.destination=requests.uri and u2.id=links.source and u1.uri like '/?a4/%' order by u2.uri limit $o4,20" q4 > <!-- If we have any data --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <!-- Put in table --> <table width="90%"> <tr><th>Got <! sql print "#status" > When Requesting This Address</th> <th>It is Referenced from</th> <th>Requested at</th> <th>Method</th> </tr> <! sql print_rows q4 "<tr><td><a href=\"$root@q4.0\">@q4.0</a></td><td><a href=\"$root@q4.1\">@q4.1</a></td><td>@q4.2</td><td>@q4.3</td></tr>\n" > </table> <!-- Put in navigation links --> <center> <! sql if 19 < $o4 > <! sql print "<a href=\"requests.sql\?a4=#a4&o4=" > <! sql eval $o4 - 20 > <! sql print "\#t4\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"requests.sql\?a4=#a4&o4=" > <! sql eval $o4 + 20 > <! sql print "\#t4\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <P> <HR> <ADDRESS> <A href="http://www.w3.org/People/Frystyk/">Henrik Frystyk Nielsen</a><br> @(#) $Id: requests.sql,v 1.4 2025/08/29 19:56:44 frystyk Exp $ </ADDRESS> </BODY> </HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/www-sql/resources.sql������������������������������������������������������������������0100644�0000764�0000144�00000012070�06572056374�017030� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>The Webbot Log Database - Resources</TITLE> <LINK rel=STYLESHEET href="http://www.w3.org/StyleSheets/Area/Overview.css" type="text/css"> </HEAD> <A HREF="http://www.w3.org/"><IMG ALT="W3C" SRC="http://www.w3.org/Icons/WWW/w3c_home" BORDER="0" WIDTH="72" HEIGHT="48"></A> <A HREF="http://www.w3.org/Robot/"><IMG ALT="Robot" SRC="http://www.w3.org/Icons/WWW/robot48x" BORDER="0"></A> <A HREF="../../resources/mapserver.html">Top</A> <H1> The Webbot Log Database - Resources </H1> Here you can search for information about our documents including titles, last modified dates, etc. <! SQL connect > <! SQL database webbot > <! SQL set root "http://www.w3.org"> <H2> <A NAME="title">Search for Document Titles</A> </H2> Type in parts of the title that you are interestes in. Case doesn't matter.<P> <! SQL setdefault o1 0 > <form action=resources.sql#title> <input name=title size=60 value="<! sql print "?title">"> <input type=submit><br> </form> <! SQL query "select uris.uri, resources.title, resources.content_language, resources.charset, resources.content_type, resources.content_encoding, resources.content_language, resources.last_modified from resources, uris where resources.title like '%?title%' and uris.id=resources.uri order by resources.last_modified DESC limit $o1,20" q1 > <!-- Put in table --> <table width="100%"> <tr> <th width="50%">Title</th> <th>Language</th> <th>Charset</th> <th>Content Type</th> <th>Content Encoding</th> <th>Content Language</th> <th>Last Modified</th> </tr> <! sql print_rows q1 "<tr> <td><a href=\"$root@q1.0\">@q1.1</a></td> <td>@q1.2</td> <td>@q1.3</td> <td>@q1.4</td> <td>@q1.5</td> <td>@q1.6</td> <td>@q1.7</td> </tr>\n" > </table> <!-- Put in navigation links --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <center> <! sql if 19 < $o1 > <! sql print "<a href=\"resources.sql\?title=#title&o1=" > <! sql eval $o1 - 20 > <! sql print "\#title\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"resources.sql\?title=#title&o1=" > <! sql eval $o1 + 20 > <! sql print "\#title\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <H2> <A NAME="alt">Search for Image ALT Text </H2> Type in parts of the ALT text you are interestes in. Case doesn't matter.<P> <! SQL setdefault o2 0 > <form action=resources.sql#alt> <input name=alt size=60 value="<! sql print "?alt">"> <input type=submit><br> </form> <! SQL query "select links.comment, u1.uri, u2.uri from links, uris as u1, uris as u2 where links.link_type='image' and links.comment like '%?alt%' and links.source=u1.id and links.destination=u2.id limit $o2,20" q1 > <!-- Put in table --> <table width="100%"> <tr> <th width="50%">Alt Text</th> <th>Image Location</th> </tr> <! sql print_rows q1 "<tr> <td><a href=\"$root@q1.1\">@q1.0</a></td> <td><a href=\"$root@q1.2\">@q1.2</a></td> </tr>\n" > </table> <!-- Put in navigation links --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <center> <! sql if 19 < $o2 > <! sql print "<a href=\"resources.sql\?alt=#alt&o2=" > <! sql eval $o2 - 20 > <! sql print "\#alt\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"resources.sql\?alt=#alt&o2=" > <! sql eval $o2 + 20 > <! sql print "\#alt\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <H2> <A NAME="lm">Which Documents have Changed Since...</A> </H2> Find all the documents that have changed after acertain date/time. Type in the date and time using the following format: <B>YYYY-MM-DD HH:MM:SS</B>, for example <B>2025-05-01 12:00:00</B>. <! SQL setdefault o3 0 > <! SQL setdefault lm "2025-01-01 12:00:00" > <form action=resources.sql#lm> <input name=lm size=60 value="<! sql print "?lm">"> <input type=submit><br> </form> <! SQL query "select uris.uri, resources.content_language, resources.charset, resources.content_type, resources.content_encoding, resources.last_modified from resources, uris where resources.last_modified > '$lm' and uris.id=resources.uri order by resources.last_modified DESC limit $o3,20" q1 > <!-- Put in table --> <table width="100%"> <tr> <th WIDTH="50%">Address</th> <th>Language</th> <th>Charset</th> <th>Content Type</th> <th>Content Encoding</th> <th>Last Modified</th> </tr> <! sql print_rows q1 "<tr> <td><a href=\"$root@q1.0\">@q1.0</a></td> <td>@q1.1</td> <td>@q1.2</td> <td>@q1.3</td><td>@q1.4</td> <td>@q1.5</td> </tr>\n" > </table> <!-- Put in navigation links --> <! sql if $NUM_ROWS = 0 > No match found. <! sql else > <center> <! sql if 19 < $o3 > <! sql print "<a href=\"resources.sql\?lm=#lm&o3=" > <! sql eval $o3 - 20 > <! sql print "\#lm\">Prev</a>" > <! sql else > Prev <! sql endif > <! sql if $NUM_ROWS = 20 > <! sql print "<a href=\"resources.sql\?lm=#lm&o3=" > <! sql eval $o3 + 20 > <! sql print "\#lm\">Next</a>" > <! sql else > Next <! sql endif > </center> <! sql endif > <P> <HR> <ADDRESS> <A href="http://www.w3.org/People/Frystyk/">Henrik Frystyk Nielsen</a><br> @(#) $Id: resources.sql,v 1.3 2025/08/29 19:56:44 frystyk Exp $ </ADDRESS> </BODY> </HTML> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/Makefile�������������������������������������������������������������������������������0100644�0000764�0000144�00000023445�07405520575�014317� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ SUBDIRS = src User tcl mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Robot/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Robot/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/Robot/Makefile.in����������������������������������������������������������������������������0100644�0000764�0000144�00000023065�07405520526�014716� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ SUBDIRS = src User tcl mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Robot/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = Robot distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Robot/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/��������������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520576�012762� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/CVS/����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517410�013406� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/CVS/Root������������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517406�014257� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/CVS/Repository������������������������������������������������������������������������0100644�0000764�0000144�00000000016�07405517406�015507� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/CVS/Entries���������������������������������������������������������������������������0100644�0000764�0000144�00000004353�07405517410�014744� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Sun Sep 27 22:13:22 1998// /CacheSetup.cpp/1.1/Fri Dec 4 18:16:14 1998// /CacheSetup.h/1.1/Fri Dec 4 18:16:14 1998// /Delete.cpp/1.3/Thu Nov 19 17:17:09 1998// /Delete.h/1.2/Fri Sep 25 00:14:13 1998// /EntityInfo.cpp/1.11/Mon Feb 15 23:56:18 1999// /EntityInfo.h/1.4/Fri Sep 25 00:14:13 1998// /LinkView.cpp/1.2/Fri Sep 25 00:14:13 1998// /LinkView.h/1.2/Fri Sep 25 00:14:13 1998// /Links.cpp/1.4/Fri Sep 25 00:14:13 1998// /Links.h/1.3/Fri Sep 25 00:14:13 1998// /Listvwex.cpp/1.2/Fri Sep 25 00:14:13 1998// /Listvwex.h/1.2/Fri Sep 25 00:14:13 1998// /Load.cpp/1.2/Fri Sep 25 00:14:13 1998// /Load.h/1.2/Fri Sep 25 00:14:13 1998// /Location.cpp/1.10/Wed Feb 3 16:37:28 1999// /Location.h/1.8/Fri Sep 25 00:14:13 1998// /MainFrm.cpp/1.4/Fri Sep 25 00:14:13 1998// /MainFrm.h/1.4/Fri Sep 25 00:14:13 1998// /MakeHelp.bat/1.2/Thu Jul 9 17:12:58 1998// /Makefile.am/1.1/Fri Jul 17 19:12:37 1998// /NoMoreLostUpdates.html/1.2/Sat Dec 5 17:50:33 1998// /Options.cpp/1.3/Fri Sep 25 00:14:13 1998// /Options.h/1.3/Fri Sep 25 00:14:13 1998// /Overview.html/1.10/Sat Dec 5 17:50:33 1998// /Password.cpp/1.3/Fri Sep 25 00:14:13 1998// /Password.h/1.4/Fri Sep 25 00:14:13 1998// /Progress.cpp/1.2/Fri Sep 25 00:14:13 1998// /Progress.h/1.2/Fri Sep 25 00:14:13 1998// /ProxySetup.cpp/1.3/Fri Sep 25 00:14:13 1998// /ProxySetup.h/1.3/Fri Sep 25 00:14:13 1998// /Request.cpp/1.12/Mon Feb 8 14:47:42 1999// /Request.h/1.8/Thu Nov 19 17:17:09 1998// /ScreenShots.html/1.3/Thu Oct 15 20:00:37 1998// /StdAfx.cpp/1.1/Sun May 24 17:31:42 1998// /StdAfx.h/1.2/Thu Jul 9 17:12:59 1998// /TabsView.cpp/1.2/Fri Sep 25 00:14:13 1998// /TabsView.h/1.3/Fri Sep 25 00:14:13 1998// /UserParameters.cpp/1.13/Tue Oct 20 13:29:30 1998// /UserParameters.h/1.4/Fri Sep 25 00:14:13 1998// /VersionConflict.cpp/1.2/Fri Sep 25 00:14:13 1998// /VersionConflict.h/1.2/Fri Sep 25 00:14:13 1998// /WinCom.cpp/1.12/Thu Dec 3 15:07:39 1998// /WinCom.dsw/1.3/Sat Oct 31 23:38:14 1998/-kb/ /WinCom.h/1.8/Thu Dec 3 15:07:39 1998// /WinCom.rc/1.13/Tue Dec 19 13:37:40 2000// /WinComDoc.cpp/1.7/Thu Nov 19 17:17:09 1998// /WinComDoc.h/1.6/Fri Sep 25 00:14:13 1998// /WinComView.cpp/1.3/Fri Sep 25 00:14:13 1998// /WinComView.h/1.2/Fri Sep 25 00:14:13 1998// /resource.h/1.10/Thu Dec 3 15:07:39 1998// D �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/CVS/Entries.Log�����������������������������������������������������������������������0100644�0000764�0000144�00000000075�07405517411�015462� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/ScreenShots//// A D/hlp//// A D/res//// A D/tcpdumps//// �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/��������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517410�015213� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/CVS/����������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517410�015646� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/CVS/Root������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517410�016512� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/CVS/Repository������������������������������������������������������������0100644�0000764�0000144�00000000032�07405517410�017740� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/CVS/Entries���������������������������������������������������������������0100644�0000764�0000144�00000000533�07405517410�017200� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/DeleteDocument.png/1.1/Thu Sep 24 19:32:13 1998/-kb/ /LoadDocument.png/1.1/Thu Sep 24 19:32:13 1998/-kb/ /SaveFromFTP.png/1.1/Thu Sep 24 19:32:13 1998/-kb/ /SaveFromHTTP.png/1.1/Thu Sep 24 19:32:13 1998/-kb/ /app.png/1.1/Sat Sep 12 20:12:54 1998/-kb/ /conflict.png/1.1/Sat Sep 12 20:12:54 1998/-kb/ /proxy.png/1.1/Sat Sep 12 20:12:54 1998/-kb/ D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/DeleteDocument.png��������������������������������������������������������0100644�0000764�0000144�00000004226�06602517075�020630� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��—������¬d���gAMA��± üa��MIDATxœíÝ?nÜ8Çqiá3ØrË�®ìcÄ¥k9„‘2}’;ptö1ìÎH™2E¡-„p¹|Ôã?i¨§ù~3ERŠõ ÅKã4M�Ø4ŽãÅ0 //O½{�ÅîîÞÃp1¿ùõóG×Î�@¥ ÷êæö¾c?� Èã·Ïó‹¿úö�]¤‹�À–žŸó __ßKH1�ý]]½Ë)vyùF.Œ¤XðÝ‹qõzçòÉb9J›pOß¿Ôm¸8/6Žã"_(›¦©´†µš^]ž�(rs{|Ò(—³ûÓdŸA`Só'.¶æîãȨây1?VäßÒÚišd*•^0F·• ý+\÷:š†ÉJô}°…ÇoŸýñ—aCé7-\(DOuem)ã¬è¶¥ºôɯ¤=|”rÉ•Œ°¡îûbúôPròh£Ù%Cu¢½"°€.‚+J]MŠžÒµ9ºØg¯€3äæÂ‚9²%‰S¾E±õˆ¬ô ²ÂŠŸB}Óù9A¶8»ïNf?Gæiò誥µná<ÌQ6¯h:gaRf¯‚}ɬ@9–œ‹¤˜~ŠÊµAÖè›”Vž\›¹0˜×Oöji-ùì ¿ ¿è¯e"Å�t&Á»wæ`)À¶ÿ®(s¾# �{ÃX €m¤�ÛH1�¶‘b�l#Å�ØFа`)À6R €m¤�ÛH1�¶‘b�l#Å�Ø–u—ÄàÖý»½ûÅÍíýnû`#¹c±ù©JóŸœ'Ä•whÄ%�ÛZï»ïþŸç†lîO–ôWÉÍõ†¢«”ÂÉÖK{.ËËÙ*¹w~ùêC=”ae¯][Éj—vØBnŠùI=uÝë &ÜÙ«œðJmz£r«h=9­õ\¾é“³Urïd¯d£9V*‰vR©D** ¬.7Åôà¨àN•ÌÚ֚ܩ8»dÓu§¨²UÎÞ­r–*qÿÉ‹Ò8`k­W”ëþ—›ù¿ýŠ-æØzX‘¹w«tC©$¦¢æy¡£Õf÷+Â%8mkËÔ\ÔÐNF[ Êüi¯ds]þá€%Mc±`R¼±¤RFùz‡\%ëQ–(5—öÜ_›drúPTáÒÎ>þÿ[2KGxéˆÕõ-gNh4NÓôòòôëçÞ=€2>~z}ýÍ÷Å�ØFа`)À6R €m¤�ÛH1�¶‘b�l#Å�ØFа`)À6R €m¤�ÛZïõº>~êÝ�«yxøš»°ƒ¤Ø0 ¯¯¿{wÀ æ›æ—?NŠ Ã0MSï.�h2Žcé&‡J1�;§²îîÞWÔIŠ8©ÕïÀÏ(+F¤9õÌoý¿ë*¬Øvü£¢Ñ¥nÔõD©­hU{åÛÕ°ÖqÆÉ¤XÑ#owõD¯ÏÛyê­enÞ6¿'ã8N¬x‚ÍÕ•¯n¨±d{ uµÁŠŽÅ†,�]nй‡ÚoÚ›—`ÁplôÜ[?>ÜÛàª0Zl:ÚPôŠU) ìfÐúRß‚ýòÅRä1Lö©!ÙÛ¥&ÖªA/ãW€-M³ûÉ IÿA­òÁ«þZù¶…:Á5 |1þ¹d«neðNŒ Úè©t ³-¹‰lnð®X—Ú•ˆöD9†Ja¥!åà$›h©!ùà àäð««ÊJ1÷<gÿ!ØþCžçÉ%ƒaþ*YϺώnüYb™Û¶7-[\å4+ÚÜu#¹‰¬v©!™ãKM´×à—Ñû.Šž?¯;ݼØÍíýüg~ëöÁÏÇa¥±XG“§w_Ze~žÿ±ƒ<8¥Y´×€ýpç~c=¹W”í3b²¯þL¾í¥e ¦Ô“äÁ¢×J’õ¸8ðÛ•à˜ì|N‡ý!§l¢½X±Êùž‹ÍÉâÿiL4wù9xC°àíºüOλs¯®ZbØ_â瑜<v=I¶+ëTšSú–¿SA þŽÈbr––+'ÚDK Ê^3v;žúÙ}™8JÉkàí®(ƒ1BòEær½°Ÿ,Jä¶ÑÞ*¯+VÉ¡St¤¢C1Äö(ÙV´‰kP~–~$Ó™“N±è•`r•|[TØ}lÒWiߢIW] 8¥3ý=ÊêóPíJiß2Ëïy—q¶Î4Å�tQw× )àD6ú\å8)ÆÅ°s¤I±‡‡¯E·¸pI±Õï»À îÌÀ6R €m¤�ÛH1�¶‘b�l#Å�ØFа`)À¶ƒ|w˜ýýÏÛÞ]ØÐõõ|@ÏQåßpÃÑ\]½ëÝ…M\^¾ –<??véÉÖ®¯oŠÊ“b8 §ï_zwáDŽÙ2¬“H1À¶ó‰ì%Ìî°`W”@ÈÿøOÿ¤lÏn‘¿§5ŸìÈb@„ÿ…†Š³ÑDº4Ñç(®(ÍFÏ«ß!£60ЏW–»¡ÍÒ&»txÞ‘y¡üέ²ädH1 —Í•|íG€,¶gÑ -(Ów7I1 ÀÒÕ¥rÕiî‚TvXI¥=üF)X:ŸsÎs‚QUþ†w“Ù}@³t}t¼AY]÷äV§ßMÆb@Dt®Úÿ¼R_–6ÙƒàãW¿çùÊ­˜ÝúË¿<toå&ʪýˆömi‡¼ýUjÞW”�l#Å�ØFа`³û€awF=R Gs>'véýéŠápbŸ!R ‡²ç/g­ë|ö4‰Ù}�¶‘b�l#Å�ØFа`)À6R €m¤�ÛH1�¶‘b�l#Å�Ø6NÓt>÷��p0¯¯¿{w�Úü \ rÕü«����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/LoadDocument.png����������������������������������������������������������0100644�0000764�0000144�00000005700�06602517075�020303� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��—���½���ðD§¾���gAMA��± üa�� wIDATxœíÝ=nÜHÆñâÂg`à p$à ˜CØ ‡–ç8ödÒ1¬¬1á„èÜ€p-·>^Ö»ê%ÿ? mv‘,Ræãb©ûå4ϳ�¦izcŒyyyîÝ�ÈöáÃoƘ7Ëþùû¯®€Boì«»÷;ö�²<}ÿº¼øWß~�@¥7ÛM�`O?~<¥7¾½½s–b�ú»¹y—ÒìíÛ_ü…[>{1MSe·b›r>ÛÑdG�´{þó÷²»Í‹MÓ´ä×hX›çy´.çq÷þ£ó›F‰£óìþ˜A —å76¶–öבAób묱·› s%îe}¯j_÷»¹¿åò·º@Oß¿®Ç_r„™ô±˜M çúŸ~² –Y‚{‰í:Æî7}#þB" èÈ&×f„™ú;Êù§Êí$* G+ØU sG)«J±šaWÓJï¾�³saÎYLçÙýÜOuøƒ©‚a ¿…†åLç§Ytvß™$ZæÎ×Óaæç„º?Ç”Φ‚ë÷"ìZ܈ܒñp}þDØæÔX ÅbWopyúšw:óúÆ‹Ha rK�ÃâH�ú ~µ() 3ÿ ÞY¨Ì@7R €nÿ»£LùŒ,�Œ†±�ÝH1�º‘b�t#Å�èFŠÐ )@7R €n¤�ÝH1�º‘b�t#Å�èFŠÐ-)ÅR¦´Çê÷ÛË®=¯ÙxÛu—%ëÿ×ÇX,`ð 2öT˜+wûîýÇ¥'ÔtB_¤�ÝÊëîÛùí?ÅÂ’”Õý·Ò÷eÇöõºó„»àº~§c‰kÉÇ›Þá­o×Nâ#ËIX7Ø\ h«0Å‚WŸ#ÂåË ­`B qãì¹æcyἊ[K8^aû±þ§c¬“›ë&žÒ‚$þh€†Z>)k^¦Õ$NÁu"DjóµlËå’ŽÅœm GÿuTv`ðYEO³˺üú^«eÁWÙáuB%n­ï@¦øáÊÔÏîû÷nÅëîÇNŠÉ™%Ü]îØ¹ÝvÇ  ב:[ÿ\I\ÿ.Ú¬·ä}9K䤮k³~ws³‰;WýŒu2øÓÙÜxÊ4…¿aòhbšçùååùŸ¿ÿêÝ�Èsÿðx¹¼ª¿£pr¤�ÝH1�º‘b�t#Å�èFŠÐ )@7R €n¤�ÝZVæéèþá±w�4óíÛé_‹<HŠc.—×Þ]�ÐÀòåîôöÇI1cÌ<Ͻ»� Ê4M¹«*Å� Nd}øð[Á6I1�WÕ¼XÆï(Sh”Ò�â“�tKM1ç!�0ˆªy±ÍÉu±ùØC[c€I)¶~̪ð8²à³¿bÏy=’–GK�gà?$¨xS×›»{ÿqùoùcì±@DpÎã»j6Uò$·2~Gg‘ dp<­.ùí±˜}Ä¡ý¯2Ñìí§Y ÁŸ& àHšŒZÊg÷‹£¼…äŽ@™í Þ n¾åÿ1«1�$âS¯�t#Å�èÆ·Á\OYÕ )àJ j‡¥8NŠQ"ÜNéARìÛ·?²JÜ8Œƒ¤Xóºk�´àw”�t#Å�èFŠÐ )@7R €n¤�ÝH1�ºõ©×û‡GûúËçO{@‹QRlɯËåÕYB– qGyÿðx¹¼^.¯óʲäßÿù5¶–}¨’ŠRý¹Üé Tœ+ Ë)¶p¾ï¾dY¬±óLáâ¼þu|Øð õ¸éÐPÿ[b6°¦iZ!º¹y' Ç,.Nà´ú§ØšÍ¯šjjþm¦38²ÏŽsÚÈKü×~ãØƒ;ÝÜHp‰³ñØÖ„×±ö±Ýƒev¿˜ó€¸õ½›}íÔì[Ë y-g‰ßØÙZp΃£R6â¿NÂfoƒmÊv e¬›çy…¥×„´ž]’2šæÚæ’Ø[6ƒ².þÍĶf[:a$7ÞìÉ¥ú§Ø—ÏŸî§iZ’Ëɯ——çÜ ˆeW£³–Á¡Vî¦ÉF„­5Ù,0¾QæÅj rdž!eS<YkÙé$#>½ùF„` N÷ _ÿ±˜1æËçOKÕü››wvá²$6[_–Âk“6‰­•Û¸É MþÖü·œç´ÇÚêLó<ܵídý¡ŠAº`XËç´†‹Y$€\£Ì‹@R €n¤�ÝH1�º‘b�tëw”Ôzk”£Ö+€2CÜQÔz½[zíU1ë ä‰ ÐçùT†H±EV­Wc̺ÖëÎ]‹v ±eÛ¯ûôJm-›ÅÙôO1§Ö«#±Ö+€Óe^¬ ¿b¢óÚ¬FC±ñQ¬‚ ßØ7ÖÛ8¶Aû®ßakNOœÕ79åü{Œ­ë3_î’p†$¶úæÞq ŠS,½Ê«PXÕx×gÐ8X‰,Ö“à*›¥Vå­·#œ¬ó#ì1ý´ovIøq¤HÊùÌý‰CÅ)VöÑO¿Aðï}Ö^ f|„ÃI¬8¶¹–°ç-{ø)'¹ÉôVÖ1 m›”‚cèŸbN­WÇ~Uƒ²ææ³â¬&þn-eÌklr*Ä6×ì÷ã(Øté?»¿¨©õš%e„’~«u©¯?Dò”Y!vïAYâ?!MÚ@‘þc1STëÕ'Ô/õßË[Ny7¶d}³S³÷”•9½ñúÁ=¦Kl/Oÿÿ\䬟]z²Î9t¡Ö+�­¨õ àF™€2¤�ÝH1�º‘b�t#Å�è6Öï(©õ ×()F­W�e†¸£¤Öë~b{ä[88ŒQÆb&TëÕüüRP÷ï‘|¹IŸ³¾ã)|#§¾'ÀúŨõ  Æ@c±zÁ¢£ë×f5‰}78VrÏoì¿ë‰mÛ }×ï°µ”cvÒ©¡&ï7vÆü]g,¶  žâ }K.%š[ùSŽ!ƒ÷’)µIå½§$¯°ÇàºÎ~å›»ÈêÐâ+»*6 ì9ã¹qLÁܹp8»ÎÄË¥lžVå^w=c@±þ)F­×kn-‹_-kÝ}:¸úÏî/¨õ:¡ÜkÖcP†½õ‹j½fîÝŒÍ Ê‡ ï·òŒü\µ^O‡a&ƒZ¯'â|Ì¢cO€æÆJ1ì„äÂ2»�eH1�º‘b�tk^Œ*‰�r’bTIPfˆ;ÊѪ$Ê•ÓwWÖ1>ìde,f†©’ȇB]úŨ’ Æ@c±zMª$šÌdò^bû–�È¢8Åö«’˜{G)t@îX¬?Y{NNqŠíT%±ÆÞÿ�|ýSlü*‰Í·ÉÈ h¨ÿìþb¨*‰¹ š¬ Lÿ±˜µJâºL`J*Ŷ)ïÝo UhE•D�G0ʼ�”k,T:üô¢r=öwZnoïÒ?E@Šáh~üxêÝ…]ÜÞÞ9KÖ¿ ;’·oÉjOŠá€ŽwyÇ.ìç?¿rODŠá˜¸¼ÏƒÙ}�º‘b�t#Å€¨úßxþ;ÓëLÞóbÀI95©ôV9f,ÀÍg,ä9|åÞ`ýÑuMc¿MpÉÕb@†3TîõÐy‘[<yo¤PKcT üÃRi„¼&Å€*ÚG^ŽâÃé8­Æì>�cÚ=úúQÎX ¬¯É§ï_T¹×égìpäÓ‹'‚¤¿0eɘRÐ)¿[±òqˆ5¸£ )@7R €n¤�ݘÝÇå–<†j¤ŽÆ¯OT„õ‚T:OXo"Åp(Z>¨Uï<Gº‰Ù}�º‘b�t#Å�èFŠÐ )@7R €n¤�ÝH1�º‘b�t#Å�è6ÍóÌ7ã(u¹¼öî�Ôù/šmÀ=Å"O^����IEND®B`‚����������������������������������������������������������������libwww/WinCom/ScreenShots/SaveFromFTP.png�����������������������������������������������������������0100644�0000764�0000144�00000011026�06602517075�020017� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¯�� ���ᄞ®���gAMA��± üa��ÍIDATxœíݽŽÜ¶‡ñW¾…c ¥Ë [y/ÃÓek¹‡lÜ$0‚“&¶ïa©n÷2¼ÝÂ¥K{:³4ÍWEI”ôü`$3‰¤´£ÿÒŒÔõ}/�pl]×=‘ûû»µ[�«yýúyfž|ýòyÕÆ�ÀÊžÙG§«ëÛ�«¸ýøÞ<x¼ô¿Øü ½�Û¦¡ç1gZº®‘D&@Ò§O·ù3_^žÆÎ_V‹7EOÃ?Ü3ÎN&ˆ�ÆyùòUÎlÏËæŸ²”MÃßEþé{Óü¾ohf0þ2ÿ føNÙ«ÞWR‹/L_�Š»>Œ_9Ÿa÷M¬ÅúO0ÅDáïÿFžÙù#ûÿ_O3φŽ!A8€âtuí%i8Å“ê>é:‰Ç M3W×÷}ëKVéLÑ+ÚüÌíÇ÷&þÌâfþTwÒ<‹2ˆã¸]<7ãìôÁà Kˆv_Ê)*:gNKˆo`u6íS}þp¤lu’ܥÈYÜñ¯i’3"ÖKp伤ŒÄ݉^¥ù-°.›€ƒQ(‰4ìDþù†¯=MïœLqâÃ.e{é*yyýoz~œµ³.�B¶c˜óë’ ûX¢%“®¤Ô9 ¯%Úã«‘u²Ç ÝC‡ŠÈqC³[›Øû¶“÷}|º»`×åŸ?uv¥ñïµ4Þ< )a*å cËjqGÊîI•¨ØY”®‘î©K8<=›=õlŸÚ—¼‰Þœ©é»u™ãÜèœ[@Qv …0õ37–†fOíÞênï†Bªÿ88eìtï$IæƒÁÆT\�Ö¨žàÝÆ”dß�*Šþ®âüS–2‚4Tº„zŸ�ÂK$ÔÊR–Ÿ†á ýûÒŒ 샟†ÓëÀ}KÃ%V@k”_æÀ†� B€A€È`š_öÙòô+™)· Ë g(®B/9U×LÂKï®Ò �9†¯öêk®rê9§{Ù‰ü½™•eíKœI`0R�‘¬;|/ì™Ó;YḲ {8X²-ÊëÝ6A¾ï“zʹµÂØ&E7f­Z�äNC%ïÜœ;¤õÊôŠrg®;6Ž‘£+â=(KçÔÑÔv+Ûž�¦}ÜÐSëÒc ˜š„*¾‘»­8m´fôHÙ³‰\«Åí!N/jz!�*ªve÷{аîšî~»[1©oèFèÎNxº •2£ºc^!Êٯ؜ OªSª«xV À(]ß÷÷÷w_¿|^»%3Úʉ­´Ø™7oß=<<j}Ã9nm•ê�N,6Ur­Â ´Ö�ºCô @aú†ü�Døe�¤!�ˆ¸ß°yóöÝŠí�€åÏ7ö¬Éwç”×h�¬ÀœC¶OýoØðý�ÇÄqC�! À @„4�ƒ4�Ò�ŒÜëþðâÇYÛ±!\áØ¥¬4üáÅ/_¾š»)[Ñ]žøV&°?Ãih¢ðîŸ ´f~úé¿§«ëOŸn×nHëÜN4c‹†í˜z—¨Ã¢³<Èv¢[(j´ƒ4,DgyíD3¶P˜­D ¶`jV¿«Qê6O�0«Iiè~¦Uü|›£Ì|b‡Ríû†sGõ›Ïêtumþ-SWñ«sÔ8½´TùJ½vƒnöÁƯ]þŠ }³7ô†ÏÑ.dÁ;\d°"wïnÈÑeÃy2›7S7¹@ÝÚmis¯QYùÞ-³Ç2ÇÚ1žØ®Yî.?˜ ÙMºœB¼ T– LßElÅÔ¾a4¼Á‚MežZÍÈ7ÇÝ¢•ZôÞkª¿<؃ֻ´aí|†é]f >?rúÔÜZ¢¥êú¥¶[•µ ›çý½#<Ê‚hJý‘rfä­þž¨Û€h7¹¬÷*Á.ª/žêÒF·S»ÃÑrfŸzŠhiÊ Ã>ÎÙìÓ×NYk½®º[ s¨vNYçíÛ™…”¶“‘ÏZïÎŠÇ Gõ ëîZ}öêŸ+Þ”Á’p¶ÔZL_;ûNö>WrÊñDkê7¼Í8]ÐJ‹ô¦+SÛ 7ÀgÝ÷îµÏw(cŠ‚?Äàç+~c´ðŽ‚¢Úqñs>í_R¦D†ÑáÓ±û2¾?¨ïaiß‹Šs¤úv³ý»‚¿xÙ‚X ¿Ì«c°›<Ø{ÍéüNoRþ"îeŠEù ¶-ΰä*kçþõf(úÁUÀ*:sGѯ_>¿yûîáá1üSq OjCÁc6Ô1§œßäí´¢W?ÿê¦×¾�î�̾Þ‘†� ÂY”b\ÌyÐù|cÜßß±¹RìV¬.3®ªKŽö÷Ÿ¿ ×¾¶ãââyÎl¤a¡£$vã†� B€A€i�i�"¤!�¤!�ˆ†�`†� B€A€i�Wm�öißWQ˹B×X¤!°[{½î\æºÆ:P¾yûní&�ó:Ÿo¾~ùìNáÒsù”†"òðð¸v€¹˜û_®ÝŠ ;VŠHß÷k7¨¯ëºµ›°y‡KC麎LĶè¾×¯Y¬%;vÄ4¶È; 8·ÓÕµ}|¢ÖLC»ù6±í zˆÞ"a u{vìS¥Ìü¶)sš—ÂÿNo^Y{VÔf«ê²;òéêz;õDÕÒÐÝ^ío;ûVnö=í6¬ÍF6ؤÖÌýy‰ºfù-JãQ¸ ì3hÐéêÚÍc÷©òÀw{ ¶cöã†Þð9ìBšì«îÌÑ)µxÝC÷”\´Û¨< Oçyƒ\¥£öRsºaùÞc÷U¯pe5ÃÙr¶@jeÃ-<jzXiÎVu7E¸Å¿¸Rxt3†ÛD)$Ühúv [¾n_2º÷¥vd¥w‘–‘ÕÒÐæš$7(k®å|ξÉÂæ-Xp”ͼ¡+r÷û8Ñ2sÚ6ªýËŒès¶jêE \o*S Qþ.®Ôû-œ9ºš^—jÖ4)ØûÂ=×> »8­©Ù7¬˜\­m¸Áó'áüîÓÁs©W«ܬRc I­Ñ¨é©JmvxKÙÇ^oË›.éΣ"§Qʾ!ív4.ÌÇuÛ“Òú5lÌGŠûÁ² ½cí¶Kïôð’KIsúßK/d”̣̾ÐÚáFžûØ {6ôu¬YÎ)gÎ?ª´1ŒíF—Mu £]›±µä7^Ÿsz!’^£±•JS[ÕFLôO¦ôÍsT)¤–eö¥šßEõÎ ´Ü·÷¸a8ÑÝ4áÔÌ2Û†óv?;Q²# ì/xÝ“èRƒ…‡…x-?§óâ-kq—l¿RàLr¶ª».9Ó£…[ʆÊl¡>–Oý¥?A—ÝãÂÓ)9¯zs¶‚Ö,Ç õ‰Þáƒüí[‘ûKœ>jJªÒÌÇ/¥v]eŠÝ õEÜÙª¯ij³çÔ•š§VuÅ…¿ßVï„ ¿ÌÛ•è÷B°QzWÕ1 sº5¸ûXÍ´°¡Zhá1 Íá*5 ÖÕúZtÇJC†Ø¢â÷íL÷Ù«¥áù|ÃuÒq——§µ›°1JÃ…/– ¬«Ù¯õ5«õ_æÀ2HC�! À @äPgQÞ¼}·v�Ts>ßÔ=5z 4‘‡‡Çµ›� ‚¾ï«aîXi(|ؾ™~œs¸4Ð8½Ó7ßO¶IC�ÍYå·ÕÎ)Û{¤ßë `Áâº*ÞÝ"|êþ·¬À‚e»'•¦šQÖ¥´Q/M/|Em¶ ºšß°±·sR×úŸãö�÷å¢Ð£JÈo‰{Ë¡ŠûaÁ}òŠ+š»Š)÷À*fù¾áØ@ÄDœ¦[âÛ×á:|þ7œ?µH8C´7´ôº‡Ã›Á>ucȻ۔»TXNXu´¢èH\™AYM¯öTÛ¼õr7Eªá6lª¢°µ©*¢%¤þX©ÖF«ðV9Uø`; 7ˆ²¢-÷šmòÍ~Žó§yìÞh5zgXe†è"aÑž.¸Sex›wO3ãб«M¯Øh(x Ȭ+\$¬Nœ‘xªÞ°Ñ–(ÛP™Y©HÙ8zÑÕlmjºRijÊ`!Ê"ÜzÑUö W‹ÂÛjÎZÝ産w UnN/wn¸‰£ËÔ•¹ìôªÃ£»zYá™3÷Îý0Ç«dVf©lvxÊ+Ê&HXE´.}s ¥øM2ñ Д…o¾¼D¦nM¹z^ׯrãÖ°›7«dßó7s6It—jíá^8fV‘Ó‰®ÛÎÌõ÷aTVL4ËqÃTë݃}›>Ó2¥cè•3jþhO§ ¥=úŠ˜J½zûàD¶7›;1³"[xª =¼ÜÃádXTtú(U ™hQh,vÙÚš}ÃhŸ6ìëÚ)îSe…ÃÜô©ÒvG:aÊBSIá›Ú…±^N-á/ï%¥mù+å•tX]8C8]Ù8Ñ*”-mvôÐjjz´pKo§^HÎX>õ§‰þeS­Â(ÕÒP3}Š{bÄKR½„Ô ÑB\^ŸeðAæt}fåªWm­ò¸à¥TL¤œS¸R£²27ÎàlùÍ‹¶pl«¦’3stºþçÃXü2o^î§wkoÖ±mËÜåØ3—Ñò[k£Häâw˜Ò/kJÁ¨Žb·¨…ul¡ ;ChË|W©Ñ‘†�²âIùc¥!ƒ  q+î¤JÃóù¦ú¥ÃìÆÒp•ëGØ î �"¤!�¤!�ˆ†�`†� B€A€i�i�"¤!�¤!�ˆ†�`†� B€A€i�i�"¤!�¤!�ˆ†�`†� B€A€i�i�"¤!�¤!�ˆ†�`†� B€A€i�i�"¤!�¤!�ˆ†�`†� B€A€i�i�"¤!�¤!�ˆ†�`†� B€A€i�i�"¤!�¤!�ˆ†�`†� B€A€i�i�"¤!�¤!�ˆ†�`†� B€A€i�i�"¤!�¤!�ˆ†�`†� "òlí�˜Ë/~\» 3º¼<Ý~|_±@Òس—/_­Ý„Y\\<¯^&iìÜÝ?ÖnÂ6pÜ�DHC�0HC�! èNW׿Ÿ>O~i55 Ò@Òéêúöã{ó¯J™ïÄ´™‰¤!€,u¿Ü× ÒÀ8nÏÎ>öÔîSozXH#ø¾!€$w€¬÷ í«fp-ΠØ{SÚ*HC�š0æöŠ‘2�ˆ†�µ¾X³ Œ”$Eډ‡ÝZw“†�4ÑÌr“1:7C8gkQ(Œ”À @„4�ƒ4�Ò� Î){6ÇýCöŠ4vëòò´v¶„4v«ÁïôµŒã†� B€A€i�i�"™ç”ùÊ€ÝNC¾²à†Ó¯,8Ž€i�i�"¤!�¤!�ˆ„ç”OW×}߯Ò�XL×u}ÿ«;…¾!�ˆD¿oØuÝòí�€u}—†Œ‘Ö·4<ŸoîïïVl �¬è[~ýòyÅv�Àº8‹�"Ü% ؽ7oßU,í|¾1ãȺÅ.\EX—†Àüýço*vá*,FÊ� ’JÃÓÕµû¯¸ô)ËØ oO·O3§G§,/9Rv/òzººæš¯�;H FÊ�Vàv[èJÁYÛnû9 L±OÍK;øô�uûñýÖwðdº‰æÆ\øØ›âÍ3G£lÍ ûßµ[4þ¸a›‡?¬nëÝÃÑ#eoUé °FõòZKÏò³(c×¹©Õ�ϸ¾¡üö ¡‹©¢8/%¢g ”)+Ч¡×D÷iÎú4µ†�æ6*1¢[Ù§l>ZXU�PÌž†ä €Mà6ÀÎÏ7*vá*\¤!°s3]Ö~«å/|Aþ®ïû‹‹çKV �­yxx\» �Іÿök• �ÕÊ����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/SaveFromHTTP.png����������������������������������������������������������0100644�0000764�0000144�00000010321�06602517075�020142� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¯�� ���ᄞ®���gAMA��± üa��ˆIDATxœíÝ¿nÝ6ÆñŸ^äÞ�3õ_FÎVÏzu³´Š·K“܃3§›}ñfd̘Á¡w`Í0ü'’"%Jú~´²EQ²õR:GÆq�8¶až‰ÈýýÝÚ-€Õ¼~ý‹ˆ<S?|ýòyÕÆ�ÀÊžé©ÓÕõŠí�€UÜ~|¯&ž9/ýÏWþ©—�`ÛÜ4´ü!"êJË0 "ÈD�úôé6½ðåå)·|ÙZ¬9ñ4üüâld" ÏË—¯RŠ]\</+?g)Å›†¿‹ü%"2Žª?ø}ßPPþRÿs |§ìUë£?¡Åß�wÿ|È-¹ž¡Ï÷Í\‹ögŽŠÂßÿ<uð{Žÿ¿ž 7¡CG' âtum%©;Çê>ñÇMUjÇqôõ%«t¦è‹‡åíN~æöã{jqU>ÔT&¯¢Lb³‹gfœž?|n ÞnãäK)UyK¦´„øV§Qÿ/µA‚‡´{1‰9þ'MRFÄñ̉”—"#qs¦µÒô–�X—NÀÉ(”@"ÿŽ|ÝמæF&Šñ¡—ÒÓV:„j^ÞøÄšŸgýl �—î¦|»ÄIÃÑ—hÁ¤+é †‚Åkñöøru²-�\ú\¡yê0ÂsÞPÖ*ö¾äãèŸo.8 é×O²®®tþ¹–ΛtÅM¥”alÙZÌ‘²yQÅËweDdxêNÏO¦/=ëõKÖL«dhþÌn]â8×[²bK�D”ÝBÁM½ÉÌõ¥¡:ÂC‡wô°7C!Ôœœ“;ߺH’81Ù˜ŠÛ@Ëê ¶è6†û†�P‘÷ËpËÏYJqÒ0Ò%Œ÷ À½EBÝòs–Òì4t/Ä?/ÍØÀ>Øi8ÿ¼�lÑ·4\òl%�ô&òÍ<�8Ò�DHC�PHC�™LCõÍ>ýOž¾%3çq£nnâUÄk­«÷Ö»«4@Šé»½Zך«\zN©Dßv"}VáȲú%®¤P)€HÒ“�¾çö¿ÔÄüN–;®,èNÖ¬«RÕZMïû¤ÖMR­Û$ïάµ�é¦Ó0’wfNåi­:­ªÌÂuÇæÞ1²wC¬‰²t í·²ý `¾ìó†–Z·ë{ÂT%TñýˆÌ}Åe 7Ù#eË&r­³‡8¿ªù•�¨¨ÚU”ÝwvôIú[ºûýlŬ¾¡ Y÷rA(e²ºcV%‘«=Vµ)â^T)Y]Å«R�² ã8Þßß}ýòyí–4´•+[i'°3oÞ¾{xxŒõ [<Ú*ÔœYm¨æZ•è­=�âÑ7€Õ7ä»(� Â7ó�@! @Äü„Í›·ïVl�,ï|¾ÑWM¾»¦üðð¸F{�`ê²þÑþ„ Ÿÿ�pLœ7�Ò�Ò�DHC�PHC�! @I½¿á/~lÚŽ áÀ.%¥á/~|ùòUë¦lÅpyâS™ÀþL§¡ŠÂ»>,КMøé§ÿž®®?}º]»!½3;ÑŒ-BjôcîS¢‹Îò$݉flÁP£¤a!:Ë“t'š±E„ÚKbæ¦aõ§…ó�MÍJCó=­âû[‹: ðŽ JµÏ¶Žê/nêtu­þ-³®âW[¬q~m¡ú#ëÕ;|r·O6¾xëÒ7ýkrÞÐ>{»Clw‘É™¬§!{—uË$6¯Q7¹@ݵëÚZoQYýÖ#³s+i±uŒ'¶«ÉÓå's¡ ;¼I—R‰”‘e݉ù‡(€­˜Û7ôæ‘5XÐé)S«éZ<-:²–xï5Ô_žìAÇ»´îÚÅy‹w™ÅyÿHéS0×â­-«ëÚoU¶ÎmžõK´ÎðDDWê”#oõ¿‰º ðv“Ëz¯â¢ñÅC]ZïâzÎdwØÛANìSÏá­-2ÈÐÓ)»}þÖE¶:¾®º{ -T»¦gÛ‰•”¶“ÌŽg­¿ÎŠç ³zÐu­‚>{õ÷kÎä‰[,´ó·Nÿ%[ï+)õX ¢7õÏÞ&\ö.¨…ÎEZó#s&Ûo€Yfݿ݅×ÞîTÆ¿ˆÉ÷Ý9[Wü‡ÑÃ_"ª7Ì™òn?ùRdŽw`èpÌ}Û—üþ`ühtk;øQTœ#Õ÷›îßüÆËÄbøf^“ÝäÉÞkJçw~“Ò1çD¶¨˜÷”ßdÛÒKº5WÙ:ó7oFäW?¹ XÅ ž(úõËç7oß=<<º¿*îac í(XÔŽ:æ÷”Ó;€ü9­èÕÏ¿šéǽ¯@„'�-Ð×Û"Ò�D¸ŠRŒ›9O:ŸoÔÄýý»+Dï%4u™pW]Ò0Ûßþ&ÜûØŽ‹‹ç)ÅHÃBG»H ìç @„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�îÚ�ìӾr‡®\¤!°[{½ï\âºr( ß¼}·v€¶Î盯_>›s¸õ\º¥¡ˆ<<<®Ý õü˵[±aÇJCÇqí&�õ ðv6ïpilQ¼Ó÷úõ/‹µdÇHC`¬‚­®®õôAˆZ3 õîëß ÃPeÈlÕS«Ú¬¨ Î� :} Ÿ®®û?¨ç«–†æþÚâ¾ÓA¶|¢3›º¡f}jò]”ÍEáFXØéêZÕ´ùcdÂw[ ö£ùyCkøìv!UýªYØ;§"5Ìt»Wj¼Hçí6†~ MäÎO©yrëÌÆ[Óæ«€Ë{ô…äH%æ"="«¥¡Î5 œnˆly$(Ûí87Yt.¸ªLŸÁaeºžé¦¼›¤|,cs¬.UÓ4)8úÜ#WÿèvqzS³oX1¹Øq3£mòú‰Õï+ž?Y`s§;1‡·ÛÑ97×mOHï÷°Qo)æ ppêXèíˆ0#Ϝ֧ÂÜžMoÄ&×”ËgÕÖÕ)†xÇÐìÁÍ™ž¬þàa-s,D:¡é]TëÚ@Ï}Û¶ç Ý™æ®qÏ€„ Kû§SÆŠýª,ž>“«3/õ¸ç@CE´.^Þ#νœ’òªU²·Ôšœ7ŒÏ´N¤ïߊ¬®ÜäDâüxý¹Ó¹ ¼D,ßÌ;>^x‘†A{Mнn0il�w©Y�iôŽÓ»Ë8V2HÄÿÝ6z~È^( Ïç㸼<­Ý„9P.|³L`]Ý~¬¯[½3�–A€i� i�"‡ºŠòæí»µ›� šóù¦î¥Ñ¥¡ˆ<<<®Ý�ŒãXýsÇJCáØÀö5úrÎáÒ@çâ¾v_Ù& tg•ïJT»¦¬Ÿ‘Zü¬ƒ‚‹×U«§mÕ£~4ÿ[VaÁ²Ã“‚•†šQÖ’HmY/ͯ\HÜ3Æ_e¿Í-A\ÍOØèÇ9e…TÁ½þ[< âño=´¸†ô–ègÔ½ËWµ¥¹5·Ø33õÓ˜š|Þ071—†BØ3H·Ä§¯Ý´û£û_·|h·€·—5€²º‡ƒÁ* ô>9ÏízëqWí]‘w$)ÙLkí¡¶YÛeîŠPÜ}8ÙþЊÜÖ†VaÕµgâcçÉ_¹7"%'«×†å5¿Šb>ùSM›Zõ>6RÀ»ˆ» ï„epžÃyJÔð4àÊÝ|o²XÕzCÁj@âºÜEÜÕ‰1Ÿ|\TèÁXV…î>Œެ(²sRVYud‘-JÙ{‘’¡jÅÙ±nˆsa õ]y–¸¦ì}Rhäñîü‚q÷䎛ù7gýÕfýÏ츇ŸRåpÊZÜ|ìjnµ¡¹ï¡U„êLß3f¿rþÙÞȯ•€+³ð×—HÃУ©7ÏêúUnÜötlxÓ§¸˜ÇÚ´ÇT«æ=ýZû‘•359oj½y²oÓWZæt ­z²Ê›¹`" ÖîmO|CÔJ­õº—k­bæÌÄéÊC«ðVž»g§ãô_]‹Ý¶¶fßÐÛ§uûºzŽùcdƒÝÜ´©Ò6Gdî±T< %…Ymèú%‰!åmªûR¤méeÕàÆ»:·€;?²s¼«Hijdo'viS G~¡Âô%{S- ãqŸc^±’4^C¨€·“Õ­˜œHœ/9®â+ò¶62]ð’÷ L$×R*¬1²wN¼XdóC -5¹O²þZB¿ÙÈo‹á›ym™¯ÞþÄsÛæMÌâb@oHàâã9Þ1éGÁ¨¿Eµ@'HC�}iw—š8Ò@GV¼"¬4dtnŃô@ix>ßT¿u8€Ý8P®rÿH�[ÁD@„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�Ò�DHC�PHC�! @! @„4�…4�Ò�Ò�DDž­Ý��­üðâǵ›ÐÐååéöãûŠ’†Àž½|ùjí&4qqñ¼z¤!°swÿ|X» ÛÀyC�! @! @„4wººVÿâeÒk«Ñ¨&HC�A§«ëÛïÕ¿*A¦>Óg&’†�’Ôýp_‡HC�yÌžž¶ÔæÖ|·’NðyC�Aæ�9Þ7Ô¯ªÁµƒbk"¥¶U†�bܘÛ+FÊ� Bˆ¨õÁšM`¤ È{ÞPÏ4_M<½hÖÐÛ¸›4ãÍ,3½e¬nÉÞ¢P)€B€i� i�"¤!�(\Sö¬ÅóCöŠ4vëòò´v¶„4v«ÃÏôõŒó†� B€B€i� i�"‰×”ùȀݛNC>²à¦Ó,8΀i� i�"¤!�(¤!�ˆ¸×”OW×ã8®Ò�XÌ0 ãø«9‡¾!�ˆx?o8 Ãòí�€u}—†Œ‘Ö·4<ŸoîïïVl �¬è[~ýòyÅv�Àº¸Š�"<% ؽ7oßU¬í|¾QãȺÕ.¼ w]BGð÷Ÿ¿m¨Ú…W¡1R�‘Pž®®ÍŵÏYÀVXGºþ1q¾wÎò‚#eó&¯§«kîù b)ÁHÀ ÌÎ`C)¸Š¢Û­ß"sôꥼ{�ðºýø~ëx0 ÍD3cζæXeZ4ÀÖé¬Ðÿ]»Eùç û<ý `u[ïf”­M¥'@Ëêåõ–žåWQr·¹«Í�K^ßÐ ~}ÒЊÅЛQ•Þ+‘9+ò§¡ÕDóÇ”íéj ´–•Þ™=„Fóï)«w†6�"š§!9`¸‡ °sçó͆ª]x&ÒعF·µ_ànù ßÇñââù’«€Þ<<<®Ý�èÃÿXõ©Ä^ã$����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/app.png�������������������������������������������������������������������0100644�0000764�0000144�00000011326�06576552706�016520� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¯�� ���ᄞ®���gAMA��± üa��IDATxœíÝ=vã8†á«9ÌR:+/áº#ïÀ»£vES¡k=™g®Ì¡–2™&¸U(?— ù>§OµD$H‰ŸP"O¯/�ûöp{ü$"7W×K×�óíåoù¤OÞNïKÖ�–öÉ=úþN ØÏ×?:ÇŸ‚žÿ™*ÿèýûÁoÿkW+�XL˜†‘G9ŸÏ"r8Ü�(w¼+/|suõv:*ÿÛãkѹ; 5•—‰å«�)>9á†ìÆ–Ÿ2—J¦á_"_DDÎgm~ljõEÿ÷ï¿þ¥~ÿò§{OùýËŸþK¹éÉe&ËÌÆ®*€Nn¹—š;ðÑ¿~Džæà‡(T_~ù˜¿ùÓ=Õþ¿>#Y4}tQA¼.‚.ËÃí1HÒxJ ×6üép¯³ü±Ì—%ÛqQ¨OWˆ�‘lÚ¹¦siüéìZÞnNžE Ä4³»´É.g1÷R0{ÜCä^-\š?=·¹,È¢{j—{ÊÎAÂÞ±÷Òé¶¡ËD†ài1¹Ð‰ŽS2^lîÕ’¥Å/ ÎHëá°d1™†‘Ãù|>§š„?§¼L§G·7©,yÕßÌ•7$·"7B `®a8س–DOù,gI~«F2ß¶ùõ… ³œë;¯',¦äòz¶@’?Vè!æ$Ú†~«ïp8ü8›|>§§×2’(î8÷hN6àãô0–“ÿ_§µHÔSNùp‘ÃùŽæ¦s­EI2º±®¤x=Ð`v#ŒìœÒ«¿Šdùd1£ŒÍÕÅeÜ :<<½¾Ü\]¿ÞõËÙÏ.‚ÈË„`ðÓ�ˆÝïÊ%òüøõítUÞý2¯b®Ï××ú4Û6€†Æ^%«îªZS®Å¥a. Ý·ÉJ�#Ý\]u-?e.'LÃè'ÉN%ÇÓ&0hž!µ‰k Ç `Wã†î°�°CÆ/ó�`GHC�! @‘†� 2x}Ãø71îç~Áƒj¹Uez¬nÔ¢¦¯zÔºôAðãÊ\欰UmC=Æž^_ô¿`z“Ÿ[çVá$ó«nÕšî¿Á…TGçDnŸ$Ÿ:ýèØ›q=åà€ì¿µ.7 JqýhMŒHC?8’!2ýâ<ƒwuѧþ¿­¸e—‡L^-2¾Q<{®d«ÚæÞãU�†‚û¢¤B*YfÊÐ^¼Ìàö.þmÓ5l¹ñ7Á_K|~‡Ý50ã=œ}l­’Ó“»:W �%ŠÚ†ÉAÃØ”&InÐP¢á³ì¹ÁU³—Ü©ËXln85¹«·€¡¨m¨³éÇáÆŽäò[Ö-@Cí¿o8}ÄÊ+œ²®øœI²§9q-ñŒý’kú>àüº†Mòåä7ÝŒ/!Êøƒßø¾¡[ ?<'^®M  6*^¬_ãiîq]%sß7 nã¯qÊÎöI¯a3†û±sÛØ `fù;x’Ý®¶ÇÛ «¸8Fowç{臶¡HÁOß.Â6¶˜_QÛp'¶ÛØ `)\Ã�DHC�P¿zÊÜ% ÀÞø7¤ÿ0nøüøu‰ú�À‚¡öð, #ñ�ö‰qC�! @‘†� B€" @„4�Uú;囫ë®õ¸ ;¿Â°UEiÈEn|\Cؤá4$ ¿=þñp{|;–®ÈÚùú9\ëÁ½*ñ!äÑüA5ÐÕX΢ mD…6ÝKK×"Óۆͯ·œ»‹�t5) ýF~ÃeV  ìJ³žràˆï€¼f·GýožuU¿ÚcÓ—Vq3k·Ãwû`å'Þ2»É¢°¸.gQâÛÇͽŠ.vî¶ÂÆŠŒ[0'çËV¯S3¹BÛµ»¥õÞ¢ºåÇwÄ5{­£?q¹&¥aîꃹP‘ɤ+YH”Ƽñƒé‡(€K1µm˜Ì£ ³àÒÇ(Óªåâ ôH±ÂÖk®½<Ø‚¶›´ñÚ%úf7™%úûQÒ¦®à¯%¹´QM¿Ü~k²uqõ‚71á1fĪ´ï)FÞ⟉¶H6“ëZ¯¢öì¹&mrv7e°9œl ¶©§H.Íèd¸Ç%»}úÖ[m¯«í^BÍÎ)Û‚c»p!uÃv2²áÙêÓÙpÜpT ºí¡UÑfoþw%˜2ø‡$.–ÛŠé[ç>ÉÁß•’å3bmÚ>œNÎèäÆ"ƒéÆ”Á:ØðË,ûÙyíý†2¦¨x#ÿîNÙºêÆ>Q047;±ä¯ýàKÆ”dÇ0ù ~:öϾŒoÚGc¼´EÕ9Ò|¿¹ö]Å;^7#fÃï”Ûl&¶^K¿Ó«T>‹?ÅØ¢jÉ!¿Áº•—Œ—ÜdëüwЮ†ñÖnqxz}Ñ_’~~ü¿UüÎ4ÛQèŽz;vøù)o�òqZ–Ÿ~\µ�D¸† Ðm½KD€gQªq1çA7W×÷Ç;a_™Ü^BW7WWƒ vÒp´Ï×ן__vxf�¸Pßß‹ŽVzÊ� B€" @„4�E€i�Š4�Ò�i�"¤!�(Ò�DHC�P¤!�ˆp `«¶}!µ’+tE›µÕëÎ^¡k¬¥a§=¬Çýñn« 8ƒ¥¡ˆ<?~]º @/ÜŒe¢}¥¡ˆœÏ祫�Œöí¿ÿ± ·ŠF…Ý¥!p¡Œ³"ß^þž±"›EcÎ1A¿±¹“>xË4t»ï"öÝáp8ŸÏþ¿åsé717onáÆêt±ñ«nuî¥`JI}V"¹[’;VR[gOŒ×b”1ªW¸-]-^w ?Ü/â ž¨YúûkýûÎ}Îê>m¹#¹U­‚þòsSäcP.xM\{°Œ‰òñíË­wÔ;µx�aA]~‹²ò(lnðøñ[(Ak%XÎápˆ3qìñ·‰€&n® ¨ý§Æ¿ß̸ÝÇ ƒîsÜ„ÔîU¿prJ+¹þš>H6Fì†CEƒÑ¾†”’^vÜöt‚Î{rÞ¸Œß™íÑŽ¶•´õA\ϸÏ”™¾sü2É)Æ&!Òµå‘<úr²±–5w"›¥¡Ë5É 7[ne¿—› ŽçQÇ­Q8 l¸åŽ„Š()ìe'ë,Q^'çÍez<=®Û¨m±—`Å&7*®s]ãYÝ ‡!y uRqôÅG®{7qÖ¦eÛ°ar-µãŒãsTMi5ŒÂA Œw‘‘§Á•äh`n±%JvT§ N*ß9’júË1f âfýâ|\¶>9kÿ†ÍÌ;®_'.î•'åú˜ëÝÛ^^OÍ}=ª´òºVf…âGžÿØ5 ã_[¦w9§\X~ÔÒfÞq½G U0¨TÒ½ª¨|yÉQÇpáùÙóø¯1MÑo_5¯zÎUÂè’—w؃ssöôÇê;nOôwM<œ+,³ì¸`€\Ì/mØ£Q¹åÛÓý¹¡wWÕ/ôƒéÆ”Á1Íäz“eüJ®äØvÊ·Â.cÌR¾êŠÍ#yÄŧSJ^ J®-.ã†öÄ`ø |ÿ6PœGÉbÉ— —ÌkÔ0W~p-£*0¸CJ¶Î.lW¸dsZ•1Š•T¸ÕÎ[gô¶öqà [g» Ø-Òp1ä °*¤!p¸PMo¤!pVûå-ÙW>½¾ ^5X¡ºÓ‰Üýb”¥áýñné*�󹹺Zº fGiÈÝs°+«ýZßjqwy�! @‘†� B€ÚÑY¾m�lÉýñ®í©Ñ¥¡ˆ<?~]º �èqÆ|_i(ü:X½ÁŸHtúeÎîÒÀúÝ\]ç^ê÷{mÒÀÍÿs‰fç”Ý=R«±3V¯«ÕM‚‚åèSÿߺVÌ{ø©b¥¹jÔÕÄXÚ¨—F-<ùFˆ·[üS>QR;¶Ó¦r ë‰éZ~ÃFï_âßVq­ÿ·hxü—®^ByMÜ•÷K.F_®â#Õ+ê´ Ý'þƒÜD÷ÔßÉ;çÐs\¿’³Uc'º|ßpl b"Œ¬m'¯çfR›1Ç·¯ãtü4þ7.Ÿ›%.\H,×r킸“Ìîoþ™ìÚS‚šÄ+Š×h063X{®nÁvù»"WxÖ?·¢¸¶¹UÄK˜ÍÄwÖß™ƒÓÇVlpï]üm†V÷³(þ?õqp£U‰:¼Fä,ñ*’‡èvÆMï’^.™,Áb“¡T p]ñ,ñêÄë‰çÖW Yc…;gpÓy n]n¢½cíÊÇõÏmW0=7ô‘Û™ƒ{ï²Ì|×Ì9Î)'ïª#ŒÉòñôŠ? ƒûnâ‡#øxú´M<nã#M5ùÜšýìÝ,tìbs+ŠÿäV,!x; 7!X—1qìž©¨€½¨Š*ƒV+y[úNæHÃÜ­© ·0hú5®Ü.÷£Kæru1ÉÜ`óB›6ÔýÅêZ¥®f»Pc—qÃ\Òùƒ}}¦eJÃ0XΨòþ';èU¬=Y{Ct¥ÁzãÞ\PÌŸX¸"ñºŸÉUÌs„WïØ†ïÈôÙsÝmZ¶ “=ü¸çï¦øOøs3˜¥Éà‚ß§ˆS¦ºšK ±¹««IaH%«jŒ|U$þ`¢?XTµ¼•ì|v{½Ú{ö;[Wç’%$Ç“{¶fihÇ™=Å?1$©½„\äB|Éñ&ãAát»°ñ±¶W”Ë=®x)y̹V²pcÆ(Ü9özÇÖ*W¦°ªÕï¬D›3ø!´k>X~™×W|šr=ÆÖ­°•±“ÆÈšßYÔ! ³ª?âößêõ¨èõ÷Xì…Záf®°J—…4°:ý.Tc ¬ËRß6ÙW>½¾ ^HÀ²–ºôŽÒðþx·t�¬×ŽÒpþ‹G¸ ÜA�DHC�P¤!�ˆ†� HC�! @‘†� B€" @„4�E€i�Š4�Ò�i�"¤!�(Ò�DHC�P¤!�ˆ†� HC�! @‘†� B€" @„4�E€i�Š4�Ò�i�"¤!�(Ò�DHC�P¤!�ˆ†� HC�! @‘†� B€" @„4�E€i�Š4�Ò�i�"¤!�(Ò�DHC�P¤!�ˆ†� HC�! @‘†� B€" @„4�E€i�Š4�Ò�i�"¤!�(Ò�DHC�P¤!�ˆ†� HC�ù´t�ôòp{\º }=½¾4\ilÙÛé´tº¸¹ºj¾LÒظ·ÓûÒUhìû{—-bÜ�DHC`?tñÒÿíçðôúrsuývzÿþþþüø5•ÔW»V@·Ç·ÓI߇ÛcÛs‹Ð­Ð°’â³(¹p“Ÿù¦h»P…·GýÏ.S¾´ºj¨®N»PCÚÓÿštT5ΪÕµ³L»0½Uµ†Ž6mC�S5lUù‹rƒµÿ4˜>¥>]Û†|ߨ…ºV•ßA¶—à^u§k\§8x0±>s¢mìBu«ªí¸áDŒ˜j £~ÓÑ60Uqºù[‹Œ˜ªá¸¡›è¿Z8¼è/¡¢J]Û†¤!° Õ¿EIÎå'c²LP .YW™®¿¨¡§ ìㆃHC`ÖpFx:Î)˜Êñ]ô¿]Û†\ÃØ,ÿ6[Òé6œE6®Ó•¢·‡4¶¬ÇýC¶ŠqC�¡mlØ6¾U3Ú†� B€" @„4�E€Há9e¾½ `ó†Óoo؃á4ä+K�ö€qC�! @‘†� B€" @$>§¼›'�À à 3ŸŒ×�`?~¥áýñn¹j�ÀÂ~¥áön%�å8‹�"Ü �¸tý.ªr¼Ó.ãl×mYpBðùúz«X|ô”@„4�•è)Ç_Ànõ=ćÛ#_i°N‰4|z} b‹°yE=eÍÇÞU€ÕŒ>Üõ?Š›—œXE�˜ÁèoØø½f}ì¢P§�`µœSÖ¤KæmC�—¢ï·¯i¸EmÉ]]×<$¬Vöû†~×O1ÿü²”Ô¢{Œ3vÚ�˜"ý}C{ž @•…%`Uøe�ˆ†� HC�áú†À¥›áŽFóß4i‘Û4‘†Àe›áŽFóß4i‘Û4}‘o/Ï¿b���¬ÎÿÏ›ˆÈÇ�l�����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/conflict.png��������������������������������������������������������������0100644�0000764�0000144�00000005630�06576552706�017542� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��8���«���}˜d���gAMA��± üa�� OIDATxœí;rä6†1.fÂɤ[x3ËŽ|ƒpYŽìpöŽl9“o±Îê6r@Æ£Ù�1$zø}µ5EqFãñ ./Ï�æüáñÎ9÷p<mí �äùüü»sînúãËÛë–¾�€È¿úç­ŒÅýé¿Ñî7Ûú�îæƒ�Àb>>þ¨üp<~ÿô)¼ƒPVB9”} …úÇÏ¿úë~ù){§–ÉB[ÜÈ«~ù韭5fÁý?_K¼XøÕ7\ábe¼¢&•6Go‹Ðó‡Çó‡GùNDf2)íHÝ2•Nk‹Él¡½¼X´ÊÈ+sº—Õ½£†CP—ŒHËè~6JÉ‚ìƒPåL4`.Å•côâòòö¢³ ó_Ï„Í×7ÖPH‘¨Ò0Ù>P¶P•O¥©RW\òJŽÐ/NÍ2ÞêïQ³Ššt$•ªVÞQͦ ÚDC_™âÐw¦c?¹)û.Ž9U�ð½tËýjãʤÒHµ»>ÓwÈ«NÆ2Ó +ÍEsKY——ç‡ãéËÛkú5kª:yFsgvÈåtž}íÔ˜ÒMZp ?ê<üùôÛ´2éþtšþ”„ �½X(T–¬Ä’¾¡¬ÁÃñ¸$:BXƒè×0µð{T�|íQýoÉ`4èQ €P €P €P €P €P €P €P €P €P €P €P €P €P €P €P €P €P ÐS¨ÓÎüþŸ¿Ù1 9õuº*ær19œV÷’Œt,såY¢§P//ÏÓæüþbMÖO±ÙvÓ‹Ú¢?”!ºh`IÜÐÈB £ÁÐÀ�+ 5:ù<‡÷Óët,]º.…OH£qÓk¥cÙçzäOêgÉçôµb¶¬Roç¬ #ÞÚêЍdD¨Ù4Gšæ72klÀˆÂ±Íì8'Xhe¯•C²*Ç\0L-9–µ£<¾V.´¬'Bºi ÌæTc-u&=¡¬ªú®adIó‡5„š–EéaæËQn—Q`½¢ú"<’—?­ûúœ–U*0}ÉW±¼ú¢o~#³Í‘Uu#ŽÖšhº¸¡ËJ©Æ.¹°ú¬Y6žLÊ6qa0–þ9…oK}Š«i+ÍIÌFÔû°MYéK~‰U.]C]ë=jX7šQk)°ÿ¯ð~•ñ(X7L";Vló9u¬ª²ÿ5!•e¥‘‡ÆÚ,µÕWkDŽ’ Ü`m¾d¼µ'Û0ÂtB­#ø «±÷ƒŒ•óA|{0TºCö+Ôš»Þ‡¼… ae€ö(ÔÕæúÆœTÌξv7 }±!Ô¾àÚÃHšìP¤Õa±‚l`çtêyn©÷9·–:ëœ,¤ŽJ¯S;¥k}ºrÖ„ÀQÄ’4 !EŸhUÞõ”ª/[¡¥ì”2¨,ÿlB²KµGˆ>,=g}ϺåΚ%×é…fñPÕÒmeº Co£0BiB– ¡*°+Œý”Õ'D©2Ò\–¶Æ#·‡¹Ö×3µßà×F÷M9m+B`YËÚÀi½“³!5yŸõj6bšÖVd=ih<â{Ô^%+ؤ©¹'»?5næG•9®5™TzǨŠ%#h/›º~…ê:èÌvʼ/!Leù“î²à'}=±HÏ5]î.¼–ra¬R¹nj×W-Înœ ¦w²—{ú6]•bEi$/4´–YJaÒª¿ˆ?c½/ʇ5ÙaO¸œ½/ʇ5IG4PB…5@¢ ae€ ÕÜâ€fÌ} -.hÆp:2at^ëë¯ýZÊèÚÒZx`?tú––†§Ô.w¤÷ 3Ä;ªÐ[ê×¢R¸a†ª§ôs$€3Äd’¦#•»Vô ·MçuvŹKV`7߉ÒE«pÃô\”Z�º3-Êbè �2=…Jw p%èQ €P €P €P €P €P €P €P €P `O¨þÔ0>ùìòi‚±vÊÿçõ«÷§Ó†žÀNÿ—$cí”?Iôϧ߾Þzúärr¿dÁVÚÒBžι÷÷wóp88ç>¾½E½}´UZxSI_©ßäƒcµLm^z›; d wÔP¥ÓŸò±‚Ói\Ñ™\«1ÚëM_®ÝvÇ)=*u#uêN½J‡ÃÔ—:ç>~ûÝ—·×‡ãÿF¿VJL0Î#Cfˆ¡¯ÇKôp8D¬gv¬íÞÖDzvht_s'ëÉL+r/ÝÕ%Ç¥fc¥‰†É¥–K…“½Ö§+gMÜ\z¥aÑUå}|ƪ†ìÞ¢ÙÆê¯KM¹acá’'QӬǒ˜³³mN(œÔš>݆À KOY*„R`+ï¨c õýý}êTKÝ©+TIúxÖ „¬²&ô-U±Rƒ³Ñ}+ÔÎ%8„{Ö¬Îem`}é¥NΆœÍ» •º„z:¹§O~¬JôóߥßñöjIJm·Ud÷êïeP°3N÷¢wrùSc,ϲýdÒÄååùóß…w¢?=]:̆¸mÖ„XÑ)íW¹!h/›úe‹ùs½“Ù‡&ï&TêFèQs÷§Ó4µŠsº“.™’Kö’lì “i}§q³ÖÂÀYgfce“D"ÔøSåX©ˆ”#íªÀÍ¥7[;z³VzÔ±–†ßÄ”\ª-Y+5e¬%„šçªƒŽXyŽòŽª§ö%ÊD5ÀVXiö„ê_6øä³×çøŒõŽ �œ=`„ `�„ `�„ `€±¾GeÏ$€,£U¿gÀbè;M@Oû<x¦;Ñöžó‡Gÿ¯—m¦J±¬|AWEß"ÚÖ”-†ê„rÏ$Ïe» “†rÆõö§aO—5z£•êúl/ÔhϤìžI)£i ;Û µ;Ѹtá?S‘§ƒjÍð¿¢`ÊXY·SW£`i¬4QÁ½’Òµ>Ý’ÿ¥ä4FR—RkQ,!d˜hU™¬Ï(“I½8—wÜ—b“m_Ί >–ì$»íl•^ÌŽ<…,ë‹(Rï¶ÞHC© !K…SxnM¨%Òªr5åÞö(MíkìÔþÚ¶6º/ùqÖ˜Õ¹¼}©¦ÎφԔÉ&l/ÔhϤìžIëÓ±òº·æ^;š½#¶Eï|U.†Êò(ï¨õžI)r3 «jœ6'^x¥l3˜"”C6u+Óuzç³#e™lÂö=ª«Ü3É㋯y›Ÿ,©…´¦…†+Ô·à›èlZYƒªëXÈ Ñ–jZÊ„*'¯ÊX¿GÕì™°+¬î™°CFyG�„ `�„ `�„ `�„ `�„ `�„ `�„ `�„ `�„ `�„ `�„ `�„ `€±~=JFø)óUñ?݃Ò4Ç£òÇ®Õ*_ÞÞ¶vá*<Ñ[ýñcx€Ë,Õ0·×‚«Úî®àÀ�À�À�2øÓ²g=8ãÓÎm²n “I#·Qº³¶Ê;=*Ôa]¥þ芭©ƒ*°®Òé^ÛÑp#ïM ¡ÂŽ(nÜ&åÆÐFÇâ ñ6 G…:Æ9h« £„ ÕÕªéék„ 1ÑøV8CÍJ+ŸE8¿/{B“I0%qΆ™Ôáh–HÜvP}G˜L0�B0�B0�B0�“I†a?„ý€P­’î-t«ð<rg?Ï#„jsßa6³ŸœÊ0™`�„ `�„ `�„ `�„ `�„ `�„ `�„ `�„ `�„ `�„ `€;çÜççß·v��À8ÿÔ?ˆ³&�›����IEND®B`‚��������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots/proxy.png�����������������������������������������������������������������0100644�0000764�0000144�00000007560�06576552706�017126� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��‹�����©b���gAMA��± üa��'IDATxœíÝ=vÛ>†qzN£Ò]¼ —šTÞ]þSÙ©ìRÞA*Géœ]ÄÊìFSpƒàã /ÈKêùœŠ&_°D]Þ�Øóp»ÿÔuÝÍîzé–�À_^ß»®ûÔ?øýç´d[� å“[ú8R�Lø|ýßÝ¿–m�> o�cÝïïÊ7¾Ùíþýô¿†„ÐVá4wr¢)L¨·Çç`Í—o_Ç5«„«îË·¯oÏMë°:á<”ˈ/ß¾öËqfiéKî+¬¥]3�Ìãávÿp»—׬̔Ó{6¯¸‹¤~A~Óxé<T0óºÿåK¼ãï—ܯt?Êë—™ëv‘t€e‡÷£ßoüLK¶õöøìgŠ~pÄËn7Ntâ‡n÷ †’ÅÆ?í æ¹T*ùÈ]6¡’ÓE•üi•¸ëÔ4Àv£<Y«y¨x¤–ßùÛørù`ÕÜÜS0'•£œPµïûJô¤€- ¦ÆKB*L¨ä´tr}n6*ÞEȬ~Â;žðêW;&ëJN`0Èu„5«ÃûñfwýûÏ©Ý'‡[¿“l̺ßß•¿§üÇÓKÿ©—Ï××ýöŸzámâ�¦ô~š.ožÔ áf·›²{Û„š!2H%À²à^µ¬|ê�bÿïC¹›Ú€ô¡�ØEB°‹„` À. €]$�»H(�v‘P�ì"¡�ØEB°‹„` À. €]j÷‡ n‡^òMXµ%+– `4ï`ç'ÈÃí^%Pür´Ê°kåOÀ¥i›Pþ´÷Ëñ×ö U_Cš,-('(3¹1�ã*FyÉ/lðïÌé_öñ—ö¬Þñ<T²´\™òÆí¾ƒ @NùWTÕÍCÝïï‚5~5U£0=ƒ{å‚I(Öý/oÜ¥Ž@S¯ÇïåWÏ”&_kµi˜û‘‘ôØLyßÇñ{RýôP&ƒFñAªª4�¦4ÿFÏ^r:)¹YÉŽ…¥Ø€)W‡÷ãÍîºd°óq:•ÏoÀÛ€KP˜$§Ó§—™úP²Â)s�—ÆDB‘M�’Öôžr�—†„` À. €]$�»H(�v©%”ÖJ⛨Œ¨z]ŸnÑmÿÌgÃæ©¶Ù*Œ0kê’_7UÇ>â bBùøv³ <ä­b”À®¶ï)—o>—Û¦¼¨Ü6þCw ½äîòCaƒx³’r‰[ëßè*wÔqc’­ êM‚|–ücÌ=•Á¾ƒ§+h˜ÿïd!UÏ`îTǧ”Oƒ×0¡ ï„YxïÍ`³øjLÞ².w‡ÏøÚH>Ìm7,Þ wìÉÓ’+_nØà™”ëÊBauƒµËš|®ËOšü 5 Ä“q3õ¡&nS¾Yáîî5í.ƒàõ*o¯Õ`ÿ~2òUrÿà!èÎÐn÷k÷žÁ"i]Ú&Ôà«¡ð·tÕ/ó–}„ø¡¼½lzƒ[<„ÑWoáñNI‡ÚgÛ0ÓL¹«Ô ;ïwxðpp{ÝÆÌ£ê·QéÒº^OUiµÏ VM³Ìtú/— +îoV8Ê JŠÊµdðanƒÑ Nž–rƒÇ(÷äCŽ:YHðt—LT xnƒÚg°ªFº]–ºÇ&ªÌ|iÍPaq!ÖwM º-«ˆ‘Pk2sLl»:¬ï)` À. €]:óP'þÀà/*úW›)ÿñô¢U€µÓú»‡æßòÎç³bi�Öëõ×O•r”ßmðåÛWÝ7ïíñyé&�v1SÀ.ý„ÒêåôýÿÇ8bß·Ççþ߈JsÍ�PbŽ>”»&§_œý(rÊX²ß·¼%oÏ_¾}íÿ)†Ë”¨.£¼fÖú¼cÚµJ¨`Xt£Ü¸)×½ ®^÷0èz$ˉ«NV”E ‡Ôžk[p º2`“š|r8¸;¯'/¸aÔèZ:/¹‚bãmœªû}ƒ]âê:o™«×¯dMjâà%×*ÜwzÕqqîŒ.|Jó€K³µ»¯À–˜›)ŸÒ Ê©ÚÞï:ùËŠo2 =Zsô¡ÜŸ¼òG âI<ÑãZ2Xo\fdþ„¶Aç>åý…ÏçsaÊLé%w´ÜC‘ÛFa“^ýÌ˥ܧܿ¶­Å“å¶+¢œPUïÕV¬ÂrOÄrÛ�ãÌÍ”€CB°Km”wx?jݳ �z: u¿¿S)�|: ÅW¥hy(�v‘P�ì"¡�ØEB°‹„` À. €]$�»H(�v-œP·ûù Œ·Qo�Ë$Ô"‰ Tzx?ÎÙ�…å°K3¡n÷î_°&¹q°cnÙïWRX©°cî¸äFö ¹‡�J¨ÝêávïÆJîjô×#©øGn!x˜Ü=Wi²À’Jkw,od²�%–å©_´%&·9¼û˜›Ò¤¾’´0hù„2Å…� V™PBÄu ¦”ß÷žüî]*`4Íû”¶¿&žÖ¼hã݃Ë>Yé`B¥Â(O>ä‚Í\9DPNç;‡‹\‡í*X2©ø–ùÎa¿/3Û¹H¥å¦Ï»Ns”§U”µJG×B6­r¦À… ¡�Ø¥3Êû8ñ}y�þRø‡5™Ú<Ô§­¢�¬Ö$¬ZBu]w>ŸK°^¯¿~ª”Ã<�»H(�vé'ÔÕÕU‹rú‡S Ÿ^BPZoâ¿m�šóP9WWWý•[X—¸Ùþš~yÜš¹Ž�X+Fy�ìjÕ‡ê‡-q—Áõ&Ü–Éî•ü°ó†E~ƒk„æ%÷:AŠèO9M*Ö¹+0^è·©ºD P¹!U—¹Ò‚¢üÆ ñW¾ �Y“„šxAv  kÏM?–æB*·eÉŒRá¬(@°Ùy(1ã®ÿ`( `æjbªÓøË½›„jRt �Ùï6ðMþûiWy­ÆS<òšÑ¥ùýÆ×6 ·€L?¡ükO˜ .ÑÁõòf%k‚ÙîªÒ„}§¬!§�™¹Q�8Ë$}�%èC°‹„`—æw½hݳ �z: u¿¿S)�|: 5ý~é�c €]$�»H(�v‘P�ì"¡�ØU÷·¼×ã÷6Í�€„Š„âMO�fV‘P¼é À̘‡` À. €]$�»H(�v‘P�ì"¡�ØEB°‹„`—Ú}Ên÷þÃÃûQ«d¿ŠÅ0Kó;‡Ň &â ¸4Œò�ØÕ6¡ÜÐÏ_èÿùÛøkÜÃ`¡÷Ó¸ØFÇ`£¼SâÞŸ¯¯Ý²K„ÜpÌŸHê—ã5þîÉñ]r—`!^Ÿl<€EÜïï ï•R7ß"ʯ&¦>,r?êTz:Aù.¤ÜznnQu#Ìê™rõ»D5šÿ:hÜÜ X£æóP}G&î(•¬™Roçõà�¬”æ» ü8HöŒüÈpLñìUr÷Óä.¹Šxƒ°jW‡÷ãÍîºdôq:•ÏoÆÛ2m+L’ÓéÇÓ ï‡`—¹„¢À1—P�àP�ì"¡�ØEB°‹„` À.µ„JÞ5ƒ´NWÓOÍ@·ý3Ÿ ›§Úf«jiö¡úàé~ng9çÒÞ@_õlŽ83Bùuž{Û8ä&£<>² @…æ'‡srôuw›ëòFîvr!¹ÆÄmˆï~ìèo,ç É•B²páLg„FæÎ›ü\È­*6“ÏQüDÈ/’dc’­Í½TÊÏ’ŒÂ‹Óß·äIŒ_*Á¡~…—Vî5oPó„žÎ.õôÈ7Ø”« qïÏ)T”k›\£L(A¾í_|¤q9rrŒn/E|%gLøÝ 4L>Eƒu >ruƒµËš|©”Ÿ´’_„%§Úl<uóô¡*§æÝQSx% ¯iEñ¯}ƒWHÕîÁy<ñ* v¥åŠwsÿà!L9É%û&ÏjWv˜µÏ`ŽåH ,œPZ‚ßu¹' ê÷¡5ÓŸì”çM>Á­ÜÂà!Œ¾z wJ:Ô>ƒÐd¦|žsä^îWPü²qaôåL<÷«Ìo›—ŽvÞy<ÂÓ3ªCÜF¥K¼Tj÷íÊžÁõjrMÿ:ôÏWIç3Ø8þ\öÁ‚\cù“—ljI±ã~9—”7¾dPEî¼åNcíÐ5×¼à‚¬MíÁc,9Ï%'9>q!þJ^]%^þ2“ŸÁªü»Ç¦É'L¥W5­]Í|Vg¨î^'U÷ØÜÈ<”–vÓÛ›ÙÍ&è¶l¬:H¨¿´˜@åe­kæó¹íêìã“Ã�ì"¡�ØEB°Kgêã´ý?ð¨¢ò§µ™òO/ZEX;­)Í¿åÏgÅÒ�¬×믟*å0À. €]$�»H(�v‘P�ì"¡�ØEB°‹„` À. €]$�»H(�v‘P�ì"¡�ØEB°‹„`—ÚìïG­{V@O'¡î÷w*å�€O'¡.á«ÒÌy(�v‘P�ì"¡�ØEB°‹„` À®ºw¼¿·i�$T$oË0³Š„âm™�fÆ<�»H(�v‘P�ì"¡�Ø¥v( ©‡ÛýÒMhëð~tË7»ë[ÒÚÍn笌„Âjüþógé&4q³ÛÅ+·ú§óSÝq‘PX“í]·µWì¥a €]$�»H(�v1tÝß+tiz¸Ý'—W!yDZ%Ïv*H( ¼äâ+pñ$ÑZ0ʬ÷òvÖÛ~úP€dñäsC¿þ ú£ëWúãY›äšÙPÀ‰§Õ‚…xêmÙÉ8 —èÚÅ-îCÍ„l&¤‚ÞPùŽ ;3åÀ07Y³Rãï5ÿI „”ì2¬«'•<¢’œõ·‰÷b¦XF.•·1«öˆÜr¼ã‚çQ�»H(�v‘P�ì"¡�ØÅL9Ö„;R^ «‘¼Ÿ÷V‘Å= 0碲XFBaÖõ^¤‰.ê`eÌ”°‹„` À. €]$�»H(�v‘P�ì"¡�ØEB°‹„` À®O]×½¿/Ý ��€UùþQ+ŒY)Þ����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/.cvsignore����������������������������������������������������������������������������0100644�0000764�0000144�00000000025�06603534202�014742� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/CacheSetup.cpp������������������������������������������������������������������������0100644�0000764�0000144�00000006677�06632023356�015522� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// CacheSetup.cpp : implementation file // #include "stdafx.h" #include "wincom.h" #include "CacheSetup.h" #include "WWWCache.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CCacheSetup dialog CCacheSetup::CCacheSetup(CWnd* pParent /*=NULL*/) : CDialog(CCacheSetup::IDD, pParent) { //{{AFX_DATA_INIT(CCacheSetup) m_cacheEnable = TRUE; m_cacheRoot = _T(""); m_sizeT = 20; m_sizeS = 3; //}}AFX_DATA_INIT } void CCacheSetup::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCacheSetup) DDX_Text(pDX, IDC_CACHE_ROOT, m_cacheRoot); DDX_Control(pDX, IDC_CACHE_SPIN_T, m_cacheSpinT); DDX_Control(pDX, IDC_CACHE_SPIN_S, m_cacheSpinS); DDX_Control(pDX, ID_CACHE_FLUSH, m_cacheFlush); DDX_Check(pDX, IDC_CACHE_ENABLE, m_cacheEnable); DDX_CBString(pDX, IDC_CACHE_ROOT, m_cacheRoot); DDX_Text(pDX, IDC_CACHE_SIZE_T, m_sizeT); DDV_MinMaxInt(pDX, m_sizeT, 10, 256); DDX_Text(pDX, IDC_CACHE_SIZE_S, m_sizeS); DDV_MinMaxInt(pDX, m_sizeS, 1, 9); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCacheSetup, CDialog) //{{AFX_MSG_MAP(CCacheSetup) ON_BN_CLICKED(ID_CACHE_FLUSH, OnCacheFlush) ON_BN_CLICKED(ID_BROWSE, OnBrowse) //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CCacheSetup::Terminate (void) { CString strSection = "Options"; CString strCacheRootItem = "Cache-Root"; CString strCacheSizeTItem = "Cache-Size"; CString strCacheSizeSItem = "Cache-Single-Size"; CString strCacheEnableItem = "Cache-Enable"; CWinApp * pApp = AfxGetApp(); ASSERT(pApp != NULL); pApp->WriteProfileString(strSection, strCacheRootItem, m_cacheRoot); pApp->WriteProfileInt(strSection, strCacheSizeTItem, m_sizeT); pApp->WriteProfileInt(strSection, strCacheSizeSItem, m_sizeS); pApp->WriteProfileInt(strSection, strCacheEnableItem, m_cacheEnable); /* terminate cache */ HTCacheTerminate(); return TRUE; } BOOL CCacheSetup::Init(void) { CString strSection = "Options"; CString strCacheRootItem = "Cache-Root"; CString strCacheSizeTItem = "Cache-Size"; CString strCacheSizeSItem = "Cache-Single-Size"; CString strCacheEnableItem = "Cache-Enable"; CWinApp * pApp = AfxGetApp(); ASSERT(pApp != NULL); CString root = pApp->GetProfileString(strSection, strCacheRootItem); m_sizeT = pApp->GetProfileInt(strSection, strCacheSizeTItem, 20); m_sizeS = pApp->GetProfileInt(strSection, strCacheSizeSItem, 3); m_cacheEnable = pApp->GetProfileInt(strSection, strCacheEnableItem, TRUE); /* Set up the persistent cache */ const char * root_str = NULL; if (!root.IsEmpty()) root_str = (const char *) root; HTCacheInit(root_str, m_sizeT); m_cacheRoot = HTCacheMode_getRoot(); HTCacheMode_setMaxCacheEntrySize(m_sizeS); HTCacheMode_setEnabled(m_cacheEnable); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CCacheSetup message handlers BOOL CCacheSetup::OnInitDialog() { CDialog::OnInitDialog(); m_cacheSpinT.SetRange(10, 256); m_cacheSpinS.SetRange(1, 9); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CCacheSetup::OnCacheFlush() { HTCache_flushAll(); } void CCacheSetup::OnBrowse() { CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); } �����������������������������������������������������������������libwww/WinCom/CacheSetup.h��������������������������������������������������������������������������0100644�0000764�0000144�00000002615�06632023356�015153� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#if !defined(AFX_CACHESETUP_H__D30CB672_8A5B_11D2_A224_0060B01B1BFD__INCLUDED_) #define AFX_CACHESETUP_H__D30CB672_8A5B_11D2_A224_0060B01B1BFD__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // CacheSetup.h : header file // ///////////////////////////////////////////////////////////////////////////// // CCacheSetup dialog class CCacheSetup : public CDialog { // Construction public: CCacheSetup(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CCacheSetup) enum { IDD = IDD_CACHE_SETUP }; CSpinButtonCtrl m_cacheSpinT; CSpinButtonCtrl m_cacheSpinS; CButton m_cacheFlush; BOOL m_cacheEnable; CString m_cacheRoot; int m_sizeT; int m_sizeS; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CCacheSetup) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Operations public: BOOL Init (void); BOOL Terminate (void); // Implementation protected: // Generated message map functions //{{AFX_MSG(CCacheSetup) virtual BOOL OnInitDialog(); afx_msg void OnCacheFlush(); afx_msg void OnBrowse(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_CACHESETUP_H__D30CB672_8A5B_11D2_A224_0060B01B1BFD__INCLUDED_) �������������������������������������������������������������������������������������������������������������������libwww/WinCom/Delete.cpp����������������������������������������������������������������������������0100644�0000764�0000144�00000005702�06625051225�014662� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Delete.cpp,v 1.3 2025/11/19 17:17:09 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Delete.cpp : implementation file */ #include "stdafx.h" #include "wincom.h" #include "Delete.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDelete dialog CDelete::CDelete( CWinComDoc * pDoc ) : CDialog(CDelete::IDD) { ASSERT(pDoc != NULL); m_pDoc = pDoc; } void CDelete::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDelete) DDX_Control(pDX, IDC_DELETE_ADDRESS, m_deleteList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDelete, CDialog) //{{AFX_MSG_MAP(CDelete) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDelete message handlers void CDelete::OnOK() { CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); // Check address to delete if (m_deleteList.GetWindowTextLength()) { m_deleteList.GetWindowText(m_address); if (m_address.IsEmpty()) return; // Get the base address (if any) CString base; m_deleteList.GetLBText(0, base); char * address = HTParse(m_address, base.IsEmpty() ? "" : base, PARSE_ALL); address = HTSimplify(&address); m_address = address; m_deleteList.SetWindowText(m_address); HT_FREE(address); HTAnchor * anchor = HTAnchor_findAddress(m_address); // Update the address combo box if (m_deleteList.FindStringExact(-1, m_address) == CB_ERR) { m_deleteList.InsertString(0, m_address); int srcLength = m_deleteList.GetCount(); if (srcLength >= MAX_LIST_LENGTH) { int cnt; for (cnt=MAX_LIST_LENGTH; cnt < srcLength; cnt++) m_deleteList.DeleteString(cnt); } // Write into INI file pApp->AddDeleteAddressToIniFile(m_address); } // Start the request CRequest * request = new CRequest(m_pDoc); request->DeleteDocument(anchor, HT_NO_MATCH); } CDialog::OnOK(); } BOOL CDelete::OnInitDialog() { CDialog::OnInitDialog(); // Setup the combo box CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); pApp->FillDeleteComboBox(&m_deleteList); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } ��������������������������������������������������������������libwww/WinCom/Delete.h������������������������������������������������������������������������������0100644�0000764�0000144�00000003541�06602560125�014325� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Delete.h,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_DELETE_H__363EE1A4_4595_11D2_BA98_00A024AA28DE__INCLUDED_) #define AFX_DELETE_H__363EE1A4_4595_11D2_BA98_00A024AA28DE__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // Delete.h : header file // #include "WinComDoc.h" ///////////////////////////////////////////////////////////////////////////// // CDelete dialog class CDelete : public CDialog { // Construction public: CDelete(CWinComDoc * pDoc); // Dialog Data //{{AFX_DATA(CDelete) enum { IDD = IDD_DELETE }; CComboBox m_deleteList; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDelete) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: CString m_address; CWinComDoc * m_pDoc; // Generated message map functions //{{AFX_MSG(CDelete) virtual void OnOK(); virtual BOOL OnInitDialog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_DELETE_H__363EE1A4_4595_11D2_BA98_00A024AA28DE__INCLUDED_) ���������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/EntityInfo.cpp������������������������������������������������������������������������0100644�0000764�0000144�00000014417�06662132042�015551� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: EntityInfo.cpp,v 1.11 2025/02/15 23:56:18 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** EntityInfo.cpp : implementation file */ #include "stdafx.h" #include "WinCom.h" #include "EntityInfo.h" #include "WinComDoc.h" #include "TabsView.h" // From libwww #include "WWWLib.h" #include "WWWFile.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CEntityInfo property page IMPLEMENT_DYNCREATE(CEntityInfo, CPropertyPage) CEntityInfo::CEntityInfo() : CPropertyPage(CEntityInfo::IDD) { //{{AFX_DATA_INIT(CEntityInfo) m_charset = _T(""); m_contentEncoding = _T(""); m_contentLength = 0; m_language = _T(""); m_mediaType = _T(""); m_expires = 0; m_etag = _T(""); m_lmDate = _T(""); //}}AFX_DATA_INIT } CEntityInfo::~CEntityInfo() { } void CEntityInfo::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CEntityInfo) DDX_Control(pDX, ID_GET_INFO, m_guess); DDX_Text(pDX, IDC_CONTENT_CHARSET, m_charset); DDX_Text(pDX, IDC_CONTENT_ENCODING, m_contentEncoding); DDX_Text(pDX, IDC_CONTENT_LENGTH, m_contentLength); DDV_MinMaxLong(pDX, m_contentLength, 0, 2147483647); DDX_Text(pDX, IDC_CONTENT_LANGUAGE, m_language); DDX_Text(pDX, IDC_CONTENT_TYPE, m_mediaType); DDX_Text(pDX, IDC_EXPIRES, m_expires); DDV_MinMaxInt(pDX, m_expires, 0, 60000); DDX_Text(pDX, IDC_ETAG, m_etag); DDX_Text(pDX, IDC_LAST_MODIFIED, m_lmDate); //}}AFX_DATA_MAP } Format( DWORD dwFlags = 0, LCID lcid = LANG_USER_DEFAULT ); BEGIN_MESSAGE_MAP(CEntityInfo, CPropertyPage) //{{AFX_MSG_MAP(CEntityInfo) ON_BN_CLICKED(ID_GET_INFO, OnGetInfo) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CEntityInfo message handlers BOOL CEntityInfo::OnKillActive() { UpdateData(); if (!m_mediaType.IsEmpty() || !m_contentEncoding.IsEmpty() || !m_charset.IsEmpty() || !m_language.IsEmpty()) { HTFile_doFileSuffixBinding(NO); } else HTFile_doFileSuffixBinding(YES); return CPropertyPage::OnKillActive(); } void CEntityInfo::OnGetInfo() { ASSERT(GetParentFrame()->GetActiveView()->IsKindOf(RUNTIME_CLASS(CTabsView))); CTabsView * view = (CTabsView *) GetParentFrame()->GetActiveView(); CWinComDoc * doc = view->GetDocument(); // Create the source anchor char * src_str = HTParse(doc->m_Location.m_source, doc->m_cwd, PARSE_ALL); HTParentAnchor * src_parent = HTAnchor_parent(HTAnchor_findAddress(src_str)); if (src_str) { char * local = HTWWWToLocal (src_str, "", NULL); /* Check what we can find out about the file */ if (local) { CWaitCursor wait; if (local && *local) { CFile src_file; if (src_file.Open(local, CFile::modeRead) == FALSE) { CString strMessage; AfxFormatString1(strMessage, IDS_CANNOT_READ_FILE, local); AfxMessageBox(strMessage); HT_FREE(src_str); HT_FREE(local); return; } /* Get the size and last modified date */ CFileStatus status; if(src_file.GetStatus(status)) { m_contentLength = status.m_size; HTAnchor_setLength(src_parent, m_contentLength); SetDlgItemInt(IDC_CONTENT_LENGTH, m_contentLength); m_lastModified = status.m_mtime; HTAnchor_setLastModified(src_parent, m_lastModified.GetTime()); m_lmDate = m_lastModified.Format("%a, %d %b %Y %H:%M:%S"); SetDlgItemText(IDC_LAST_MODIFIED, m_lmDate); } src_file.Close(); /* Get file suffix bindings */ if (HTBind_getAnchorBindings(src_parent)) { char * mt = HTAtom_name(HTAnchor_format(src_parent)); char * charset = HTAtom_name(HTAnchor_charset(src_parent)); HTAtom_name(HTAnchor_charset(src_parent)); HTList * encodings = HTAnchor_encoding(src_parent); HTList * languages = HTAnchor_language(src_parent); long length = HTAnchor_length(src_parent); if (mt) { m_mediaType = mt; SetDlgItemText(IDC_MEDIA_TYPE, mt); } if (charset) { m_charset = charset; SetDlgItemText(IDC_MEDIA_CHARSET, charset); } /* Just take the first language */ if (languages) { HTLanguage lang = (HTLanguage) HTList_firstObject(languages); if (lang) m_language = HTAtom_name(lang); } /* Just take the first encoding */ if (encodings) { HTEncoding enc = (HTEncoding) HTList_firstObject(encodings); if (enc) m_contentEncoding = HTAtom_name(enc); } } } } /* Now don't use the automatic file suffix bindings */ HTFile_doFileSuffixBinding(NO); /* Update the data */ UpdateData(FALSE); HT_FREE(local); HT_FREE(src_str); } } void CEntityInfo::Clear() { if (m_hWnd) { m_charset = _T(""); m_contentEncoding = _T(""); m_contentLength = 0; m_language = _T(""); m_mediaType = _T(""); m_expires = 0; m_etag = _T(""); m_lmDate = _T(""); UpdateData(FALSE); /* Do use the automatic file suffix bindings */ HTFile_doFileSuffixBinding(YES); } } BOOL CEntityInfo::OnSetActive() { ASSERT(GetParentFrame()->GetActiveView()->IsKindOf(RUNTIME_CLASS(CTabsView))); CTabsView * view = (CTabsView *) GetParentFrame()->GetActiveView(); CWinComDoc * pDoc = view->GetDocument(); ASSERT(pDoc != NULL); // See if Guess button should be active or not if (!pDoc->m_Location.m_source.IsEmpty()) m_guess.EnableWindow(TRUE); else m_guess.EnableWindow(FALSE); return CPropertyPage::OnSetActive(); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/EntityInfo.h��������������������������������������������������������������������������0100644�0000764�0000144�00000004212�06602560125�015207� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: EntityInfo.h,v 1.4 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_ENTITYINFO_H__CF29CB80_B627_11D1_93DF_080009DCA30B__INCLUDED_) #define AFX_ENTITYINFO_H__CF29CB80_B627_11D1_93DF_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // EntityInfo.h : header file // ///////////////////////////////////////////////////////////////////////////// // EntityInfo dialog class CRequest; class CEntityInfo : public CPropertyPage { DECLARE_DYNCREATE(CEntityInfo) // Construction public: void Clear(void); CEntityInfo(); ~CEntityInfo(); // Dialog Data //{{AFX_DATA(CEntityInfo) enum { IDD = IDD_ENTITY_INFO }; CButton m_guess; CString m_charset; CString m_contentEncoding; long m_contentLength; CString m_language; CString m_mediaType; CTime m_lastModified; long m_expires; CString m_etag; CString m_lmDate; //}}AFX_DATA // Overrides // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CEntityInfo) public: virtual BOOL OnKillActive(); virtual BOOL OnSetActive(); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CEntityInfo) afx_msg void OnGetInfo(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_ENTITYINFO_H__CF29CB80_B627_11D1_93DF_080009DCA30B__INCLUDED_) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/LinkView.cpp��������������������������������������������������������������������������0100644�0000764�0000144�00000004424�06602560125�015207� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: LinkView.cpp,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** LinkView.cpp : implementation file */ #include "stdafx.h" #include "wincom.h" #include "LinkView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLinkView contruction/destruction IMPLEMENT_DYNCREATE(CLinkView, CListView) CLinkView::CLinkView() { m_pLinks = NULL; } CLinkView::~CLinkView() { } BEGIN_MESSAGE_MAP(CLinkView, CListView) //{{AFX_MSG_MAP(CLinkView) ON_WM_SIZE() ON_WM_PAINT() ON_WM_SETFOCUS() ON_WM_KILLFOCUS() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLinkView diagnostics #ifdef _DEBUG void CLinkView::AssertValid() const { CListView::AssertValid(); } void CLinkView::Dump(CDumpContext& dc) const { CListView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLinkView message handlers BOOL CLinkView::SetLink(CLinks * pLinks) { // because I can't figure out how to initialize the stupid object m_pLinks = pLinks; ModifyStyle(WS_VSCROLL, 0); return TRUE; } void CLinkView::OnSetFocus(CWnd* pOldWnd) { CListViewEx::OnSetFocus(pOldWnd); // Enable the "remove" key in the Links view ASSERT(m_pLinks != NULL); m_pLinks->m_linkRemove.EnableWindow(TRUE); } void CLinkView::OnKillFocus(CWnd* pNewWnd) { CListView::OnKillFocus(pNewWnd); // Disable the "remove" key in the Links view // ASSERT(m_pLinks != NULL); // m_pLinks->m_linkRemove.EnableWindow(FALSE); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/LinkView.h����������������������������������������������������������������������������0100644�0000764�0000144�00000004003�06602560125�014645� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: LinkView.h,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_LINKVIEW_H__0AC36CC1_12F6_11D2_BA98_00A024AA28DE__INCLUDED_) #define AFX_LINKVIEW_H__0AC36CC1_12F6_11D2_BA98_00A024AA28DE__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // LinkView.h : header file // #include "ListVwex.h" class CLinks; ///////////////////////////////////////////////////////////////////////////// // CLinkView view class CLinkView : public CListViewEx { DECLARE_DYNCREATE(CLinkView) public: CLinkView(); protected: CLinks * m_pLinks; // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CLinkView) public: protected: //}}AFX_VIRTUAL // Implementation public: BOOL SetLink(CLinks * pLinks); virtual ~CLinkView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif // Generated message map functions protected: //{{AFX_MSG(CLinkView) afx_msg void OnSetFocus(CWnd* pOldWnd); afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_LINKVIEW_H__0AC36CC1_12F6_11D2_BA98_00A024AA28DE__INCLUDED_) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Links.cpp�����������������������������������������������������������������������������0100644�0000764�0000144�00000016664�06602560125�014550� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Links.cpp,v 1.4 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** CLinks.cpp : implementation file */ #include "stdafx.h" #include "WinCom.h" #include "Links.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLinks property page IMPLEMENT_DYNCREATE(CLinks, CPropertyPage) CLinks::CLinks() : CPropertyPage(CLinks::IDD) { //{{AFX_DATA_INIT(CLinks) m_linkType = _T(""); m_direction = 0; //}}AFX_DATA_INIT m_pLinkList = new CLinkView(); } CLinks::~CLinks() { } void CLinks::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLinks) DDX_Control(pDX, IDC_LINK, m_linkDestination); DDX_Control(pDX, ID_LINK_REMOVE, m_linkRemove); DDX_Control(pDX, ID_LINK_ADD, m_linkAdd); DDX_Control(pDX, IDC_LINK_RELS, * m_pLinkList); DDX_CBString(pDX, IDC_LINK_TYPE, m_linkType); DDX_Radio(pDX, IDC_LINK_REL, m_direction); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLinks, CPropertyPage) //{{AFX_MSG_MAP(CLinks) ON_BN_CLICKED(ID_LINK_ADD, OnLinkAdd) ON_BN_CLICKED(ID_LINK_REMOVE, OnLinkRemove) ON_NOTIFY(HDN_ITEMCLICK, IDC_LINK_RELS, OnItemclickLinkRels) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CListView initialization #define NUM_COLUMNS 3 #define NUM_ROWS 3 static _TCHAR *_gszColumnLabel[NUM_COLUMNS] = { _T("Type"), _T("Direction"), _T("Destination") }; static int _gnColumnFmt[NUM_COLUMNS] = { LVCFMT_LEFT, LVCFMT_CENTER, LVCFMT_LEFT }; static int _gnColumnWidth[NUM_COLUMNS] = { 0, 0, 0 }; BOOL CLinks::OnInitDialog() { CPropertyPage::OnInitDialog(); // Setup the combo box CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); pApp->FillLinkComboBox(&m_linkDestination); // Setup the link list m_pLinkList->SetLink(this); CListCtrl &ListCtrl = m_pLinkList->GetListCtrl(); // set image lists m_LargeImageList.Create(IDB_LARGEICONS, 32, 1, RGB(255, 255, 255)); m_SmallImageList.Create(IDB_SMALLICONS, 16, 1, RGB(255, 255, 255)); m_StateImageList.Create(IDB_STATEICONS, 16, 1, RGB(255, 0, 0)); // m_LargeImageList.SetOverlayImage(NUM_ITEMS, 1); // m_SmallImageList.SetOverlayImage(NUM_ITEMS, 1); ListCtrl.SetImageList(&m_LargeImageList, LVSIL_NORMAL); // ListCtrl.SetImageList(&m_SmallImageList, LVSIL_SMALL); ListCtrl.SetImageList(NULL, LVSIL_SMALL); ListCtrl.SetImageList(NULL, LVSIL_STATE); // Find column widths CRect size; m_pLinkList->GetWindowRect(size); int width = size.Width(); _gnColumnWidth[0] = (int) (width*0.20-1); _gnColumnWidth[1] = (int) (width*0.15-1); _gnColumnWidth[2] = (int) (width*0.65-1); // insert columns int i; LV_COLUMN lvc; lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; for (i = 0; i<NUM_COLUMNS; i++) { lvc.iSubItem = i; lvc.pszText = _gszColumnLabel[i]; lvc.cx = _gnColumnWidth[i]; lvc.fmt = _gnColumnFmt[i]; ListCtrl.InsertColumn(i,&lvc); } // Select full row mode m_pLinkList->SetFullRowSel(TRUE); return TRUE; } void CLinks::OnLinkAdd() { UpdateData(); // Get the edit text if (!m_linkType.IsEmpty() && m_linkDestination.GetWindowTextLength()) { CString LinkCaption; m_linkDestination.GetWindowText(LinkCaption); // Get the base address (if any) CString base; m_linkDestination.GetLBText(0, base); char * link = HTParse(LinkCaption, base.IsEmpty() ? "" : base, PARSE_ALL); link = HTSimplify(&link); LinkCaption = link; m_linkDestination.SetWindowText(LinkCaption); HT_FREE(link); // Update the combo box if (m_linkDestination.FindStringExact(-1, LinkCaption) == CB_ERR) { m_linkDestination.InsertString(0, LinkCaption); int length = m_linkDestination.GetCount(); if (length >= MAX_LIST_LENGTH) { int cnt; for (cnt=MAX_LIST_LENGTH; cnt < length; cnt++) m_linkDestination.DeleteString(cnt); } } // Write into INI file CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); pApp->AddLinkToIniFile(LinkCaption); // Update the list control with three columns CListCtrl &ListCtrl = m_pLinkList->GetListCtrl(); // Insert item LV_ITEM lvi; lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE; lvi.iItem = 0; lvi.iSubItem = 0; lvi.pszText = (char *) LPCTSTR(m_linkType); lvi.iImage = 0; lvi.stateMask = LVIS_STATEIMAGEMASK; lvi.state = INDEXTOSTATEIMAGEMASK(1); int iItem = ListCtrl.InsertItem(&lvi); ASSERT(iItem != -1); // Set item text for additional columns ListCtrl.SetItemText(iItem,1, m_direction==0 ? _T("forward") : _T("reverse")); ListCtrl.SetItemText(iItem,2, (char *) LPCTSTR(LinkCaption)); // Update changes m_pLinkList->UpdateWindow(); } } void CLinks::OnLinkRemove() { // Update the list control with three columns CListCtrl &ListCtrl = m_pLinkList->GetListCtrl(); // Find the selected item int nItem = ListCtrl.GetNextItem(-1, LVNI_FOCUSED); if(nItem != -1) ListCtrl.DeleteItem(nItem); // Update changes m_pLinkList->UpdateWindow(); UpdateData(); } // Operations BOOL CLinks::AddLinkRelationships (HTAnchor * source) { ASSERT(source != NULL); if (!m_hWnd) return FALSE; HTParentAnchor * src = HTAnchor_parent(source); // Update the list control with three columns CListCtrl &ListCtrl = m_pLinkList->GetListCtrl(); int iItem = ListCtrl.GetItemCount(); int cnt; for (cnt=0; cnt<iItem; cnt++) { CString l_type = ListCtrl.GetItemText(cnt, 0); CString l_dir = ListCtrl.GetItemText(cnt, 1); CString l_dest = ListCtrl.GetItemText(cnt, 2); if (!l_type.IsEmpty() && !l_dir.IsEmpty() && !l_dest.IsEmpty()) { char * link_addr = HTParse(l_dest, "", PARSE_ALL); HTParentAnchor * dest = HTAnchor_parent(HTAnchor_findAddress(link_addr)); /* Now add the new relation */ if (l_dir == "forward") { HTLink_add((HTAnchor *) src, (HTAnchor *) dest, (HTLinkType) HTAtom_caseFor(l_type), METHOD_INVALID); } else if (l_dir == "reverse") { HTLink_add((HTAnchor *) dest, (HTAnchor *) src, (HTLinkType) HTAtom_caseFor(l_type), METHOD_INVALID); } else ASSERT(1); } } return TRUE; } void CLinks::Clear() { if (m_hWnd) { // Delete all items CListCtrl &ListCtrl = m_pLinkList->GetListCtrl(); ListCtrl.DeleteAllItems(); // Update changes UpdateData(); } } void CLinks::OnItemclickLinkRels(NMHDR* pNMHDR, LRESULT* pResult) { HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR; m_linkRemove.EnableWindow(FALSE); *pResult = 0; } ����������������������������������������������������������������������������libwww/WinCom/Links.h�������������������������������������������������������������������������������0100644�0000764�0000144�00000004700�06602560125�014201� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Links.h,v 1.3 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_CLinks_H__4DEC1954_F40B_11D1_93EC_080009DCA30B__INCLUDED_) #define AFX_CLinks_H__4DEC1954_F40B_11D1_93EC_080009DCA30B__INCLUDED_ #include "resource.h" // main symbols #include "LinkView.h" #include "WWWCore.h" #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // CLinks.h : header file // ///////////////////////////////////////////////////////////////////////////// // CLinks dialog class CLinks : public CPropertyPage { DECLARE_DYNCREATE(CLinks) // Construction public: CLinks(); ~CLinks(); // Operations BOOL AddLinkRelationships (HTAnchor * source); void Clear(void); // Dialog Data //{{AFX_DATA(CLinks) enum { IDD = IDD_LINKS }; CComboBox m_linkDestination; CButton m_linkRemove; CButton m_linkAdd; CLinkView * m_pLinkList; CString m_linkType; int m_direction; //}}AFX_DATA // Overrides // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CLinks) public: virtual BOOL OnInitDialog(); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: CImageList m_LargeImageList; CImageList m_SmallImageList; CImageList m_StateImageList; // flags and states protected: BOOL m_bStateIcons; int m_nCheckedItem; HICON m_hSmallIcon; HICON m_hLargeIcon; void CheckItem(int nNewCheckedItem); // Generated message map functions //{{AFX_MSG(CLinks) afx_msg void OnLinkAdd(); afx_msg void OnLinkRemove(); afx_msg void OnItemclickLinkRels(NMHDR* pNMHDR, LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_CLinks_H__4DEC1954_F40B_11D1_93EC_080009DCA30B__INCLUDED_) ����������������������������������������������������������������libwww/WinCom/Listvwex.cpp��������������������������������������������������������������������������0100644�0000764�0000144�00000025107�06602560125�015305� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Listvwex.cpp,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** ListVwEx.cpp : implementation of the CListViewEx class */ #include "stdafx.h" #include "ListVwEx.h" #include "Links.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CListViewEx IMPLEMENT_DYNCREATE(CListViewEx, CListView) BEGIN_MESSAGE_MAP(CListViewEx, CListView) //{{AFX_MSG_MAP(CListViewEx) ON_WM_SIZE() ON_WM_PAINT() ON_WM_SETFOCUS() ON_WM_KILLFOCUS() //}}AFX_MSG_MAP ON_MESSAGE(LVM_SETIMAGELIST, OnSetImageList) ON_MESSAGE(LVM_SETTEXTCOLOR, OnSetTextColor) ON_MESSAGE(LVM_SETTEXTBKCOLOR, OnSetTextBkColor) ON_MESSAGE(LVM_SETBKCOLOR, OnSetBkColor) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CListViewEx construction/destruction CListViewEx::CListViewEx() { m_bFullRowSel = TRUE; m_bClientWidthSel = TRUE; m_cxClient = 0; m_cxStateImageOffset = 0; m_clrText = ::GetSysColor(COLOR_WINDOWTEXT); m_clrTextBk = ::GetSysColor(COLOR_WINDOW); m_clrBkgnd = ::GetSysColor(COLOR_WINDOW); } CListViewEx::~CListViewEx() { } BOOL CListViewEx::PreCreateWindow(CREATESTRUCT& cs) { // default is report view and full row selection cs.style &= ~LVS_TYPEMASK; cs.style |= LVS_REPORT | LVS_OWNERDRAWFIXED; m_bFullRowSel = TRUE; return(CListView::PreCreateWindow(cs)); } BOOL CListViewEx::SetFullRowSel(BOOL bFullRowSel) { // no painting during change LockWindowUpdate(); m_bFullRowSel = bFullRowSel; BOOL bRet; if (m_bFullRowSel) bRet = ModifyStyle(0L, LVS_OWNERDRAWFIXED); else bRet = ModifyStyle(LVS_OWNERDRAWFIXED, 0L); // repaint window if we are not changing view type if (bRet && (GetStyle() & LVS_TYPEMASK) == LVS_REPORT) Invalidate(); // repaint changes UnlockWindowUpdate(); return(bRet); } BOOL CListViewEx::GetFullRowSel() { return(m_bFullRowSel); } ///////////////////////////////////////////////////////////////////////////// // CListViewEx drawing // offsets for first and other columns #define OFFSET_FIRST 2 #define OFFSET_OTHER 6 void CListViewEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CListCtrl& ListCtrl=GetListCtrl(); CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rcItem(lpDrawItemStruct->rcItem); UINT uiFlags = ILD_TRANSPARENT; CImageList* pImageList; int nItem = lpDrawItemStruct->itemID; BOOL bFocus = (GetFocus() == this); COLORREF clrTextSave, clrBkSave; COLORREF clrImage = m_clrBkgnd; static _TCHAR szBuff[MAX_PATH]; LPCTSTR pszText; // get item data LV_ITEM lvi; lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE; lvi.iItem = nItem; lvi.iSubItem = 0; lvi.pszText = szBuff; lvi.cchTextMax = sizeof(szBuff); lvi.stateMask = 0xFFFF; // get all state flags ListCtrl.GetItem(&lvi); BOOL bSelected = (bFocus || (GetStyle() & LVS_SHOWSELALWAYS)) && lvi.state & LVIS_SELECTED; bSelected = bSelected || (lvi.state & LVIS_DROPHILITED); // set colors if item is selected CRect rcAllLabels; ListCtrl.GetItemRect(nItem, rcAllLabels, LVIR_BOUNDS); CRect rcLabel; ListCtrl.GetItemRect(nItem, rcLabel, LVIR_LABEL); rcAllLabels.left = rcLabel.left; if (m_bClientWidthSel && rcAllLabels.right<m_cxClient) rcAllLabels.right = m_cxClient; if (bSelected) { clrTextSave = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); clrBkSave = pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->FillRect(rcAllLabels, &CBrush(::GetSysColor(COLOR_HIGHLIGHT))); } else pDC->FillRect(rcAllLabels, &CBrush(m_clrTextBk)); // set color and mask for the icon if (lvi.state & LVIS_CUT) { clrImage = m_clrBkgnd; uiFlags |= ILD_BLEND50; } else if (bSelected) { clrImage = ::GetSysColor(COLOR_HIGHLIGHT); uiFlags |= ILD_BLEND50; } // draw state icon UINT nStateImageMask = lvi.state & LVIS_STATEIMAGEMASK; if (nStateImageMask) { int nImage = (nStateImageMask>>12) - 1; pImageList = ListCtrl.GetImageList(LVSIL_STATE); if (pImageList) { pImageList->Draw(pDC, nImage, CPoint(rcItem.left, rcItem.top), ILD_TRANSPARENT); } } // draw normal and overlay icon CRect rcIcon; ListCtrl.GetItemRect(nItem, rcIcon, LVIR_ICON); pImageList = ListCtrl.GetImageList(LVSIL_SMALL); if (pImageList) { UINT nOvlImageMask=lvi.state & LVIS_OVERLAYMASK; if (rcItem.left<rcItem.right-1) { ImageList_DrawEx(pImageList->m_hImageList, lvi.iImage, pDC->m_hDC,rcIcon.left,rcIcon.top, 16, 16, m_clrBkgnd, clrImage, uiFlags | nOvlImageMask); } } // draw item label ListCtrl.GetItemRect(nItem, rcItem, LVIR_LABEL); rcItem.right -= m_cxStateImageOffset; pszText = MakeShortString(pDC, szBuff, rcItem.right-rcItem.left, 2*OFFSET_FIRST); rcLabel = rcItem; rcLabel.left += OFFSET_FIRST; rcLabel.right -= OFFSET_FIRST; pDC->DrawText(pszText,-1,rcLabel,DT_LEFT | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER); // draw labels for extra columns LV_COLUMN lvc; lvc.mask = LVCF_FMT | LVCF_WIDTH; for(int nColumn = 1; ListCtrl.GetColumn(nColumn, &lvc); nColumn++) { rcItem.left = rcItem.right; rcItem.right += lvc.cx; int nRetLen = ListCtrl.GetItemText(nItem, nColumn, szBuff, sizeof(szBuff)); if (nRetLen == 0) continue; pszText = MakeShortString(pDC, szBuff, rcItem.right - rcItem.left, 2*OFFSET_OTHER); UINT nJustify = DT_LEFT; if(pszText == szBuff) { switch(lvc.fmt & LVCFMT_JUSTIFYMASK) { case LVCFMT_RIGHT: nJustify = DT_RIGHT; break; case LVCFMT_CENTER: nJustify = DT_CENTER; break; default: break; } } rcLabel = rcItem; rcLabel.left += OFFSET_OTHER; rcLabel.right -= OFFSET_OTHER; pDC->DrawText(pszText, -1, rcLabel, nJustify | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER); } // draw focus rectangle if item has focus if (lvi.state & LVIS_FOCUSED && bFocus) pDC->DrawFocusRect(rcAllLabels); // set original colors if item was selected if (bSelected) { pDC->SetTextColor(clrTextSave); pDC->SetBkColor(clrBkSave); } } LPCTSTR CListViewEx::MakeShortString(CDC* pDC, LPCTSTR lpszLong, int nColumnLen, int nOffset) { static const _TCHAR szThreeDots[] = _T("..."); int nStringLen = lstrlen(lpszLong); if(nStringLen == 0 || (pDC->GetTextExtent(lpszLong, nStringLen).cx + nOffset) <= nColumnLen) { return(lpszLong); } static _TCHAR szShort[MAX_PATH]; lstrcpy(szShort,lpszLong); int nAddLen = pDC->GetTextExtent(szThreeDots,sizeof(szThreeDots)).cx; for(int i = nStringLen-1; i > 0; i--) { szShort[i] = 0; if((pDC->GetTextExtent(szShort, i).cx + nOffset + nAddLen) <= nColumnLen) { break; } } lstrcat(szShort, szThreeDots); return(szShort); } void CListViewEx::RepaintSelectedItems() { CListCtrl& ListCtrl = GetListCtrl(); CRect rcItem, rcLabel; // invalidate focused item so it can repaint properly int nItem = ListCtrl.GetNextItem(-1, LVNI_FOCUSED); if(nItem != -1) { ListCtrl.GetItemRect(nItem, rcItem, LVIR_BOUNDS); ListCtrl.GetItemRect(nItem, rcLabel, LVIR_LABEL); rcItem.left = rcLabel.left; InvalidateRect(rcItem, FALSE); } // if selected items should not be preserved, invalidate them if(!(GetStyle() & LVS_SHOWSELALWAYS)) { for(nItem = ListCtrl.GetNextItem(-1, LVNI_SELECTED); nItem != -1; nItem = ListCtrl.GetNextItem(nItem, LVNI_SELECTED)) { ListCtrl.GetItemRect(nItem, rcItem, LVIR_BOUNDS); ListCtrl.GetItemRect(nItem, rcLabel, LVIR_LABEL); rcItem.left = rcLabel.left; InvalidateRect(rcItem, FALSE); } } // update changes UpdateWindow(); } ///////////////////////////////////////////////////////////////////////////// // CListViewEx diagnostics #ifdef _DEBUG void CListViewEx::Dump(CDumpContext& dc) const { CListView::Dump(dc); dc << "m_bFullRowSel = " << (UINT)m_bFullRowSel; dc << "\n"; dc << "m_cxStateImageOffset = " << m_cxStateImageOffset; dc << "\n"; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CListViewEx message handlers LRESULT CListViewEx::OnSetImageList(WPARAM wParam, LPARAM lParam) { if( (int) wParam == LVSIL_STATE) { int cx, cy; if(::ImageList_GetIconSize((HIMAGELIST)lParam, &cx, &cy)) m_cxStateImageOffset = cx; else m_cxStateImageOffset = 0; } return(Default()); } LRESULT CListViewEx::OnSetTextColor(WPARAM wParam, LPARAM lParam) { m_clrText = (COLORREF)lParam; return(Default()); } LRESULT CListViewEx::OnSetTextBkColor(WPARAM wParam, LPARAM lParam) { m_clrTextBk = (COLORREF)lParam; return(Default()); } LRESULT CListViewEx::OnSetBkColor(WPARAM wParam, LPARAM lParam) { m_clrBkgnd = (COLORREF)lParam; return(Default()); } void CListViewEx::OnSize(UINT nType, int cx, int cy) { m_cxClient = cx; CListView::OnSize(nType, cx, cy); } void CListViewEx::OnPaint() { // in full row select mode, we need to extend the clipping region // so we can paint a selection all the way to the right if (m_bClientWidthSel && (GetStyle() & LVS_TYPEMASK) == LVS_REPORT && GetFullRowSel()) { CRect rcAllLabels; GetListCtrl().GetItemRect(0, rcAllLabels, LVIR_BOUNDS); if(rcAllLabels.right < m_cxClient) { // need to call BeginPaint (in CPaintDC c-tor) // to get correct clipping rect CPaintDC dc(this); CRect rcClip; dc.GetClipBox(rcClip); rcClip.left = min(rcAllLabels.right-1, rcClip.left); rcClip.right = m_cxClient; InvalidateRect(rcClip, FALSE); // EndPaint will be called in CPaintDC d-tor } } CListView::OnPaint(); } void CListViewEx::OnSetFocus(CWnd* pOldWnd) { CListView::OnSetFocus(pOldWnd); // check if we are getting focus from label edit box if(pOldWnd!=NULL && pOldWnd->GetParent()==this) return; // repaint items that should change appearance if(m_bFullRowSel && (GetStyle() & LVS_TYPEMASK)==LVS_REPORT) RepaintSelectedItems(); } void CListViewEx::OnKillFocus(CWnd* pNewWnd) { CListView::OnKillFocus(pNewWnd); // check if we are losing focus to label edit box if(pNewWnd != NULL && pNewWnd->GetParent() == this) return; // repaint items that should change appearance if(m_bFullRowSel && (GetStyle() & LVS_TYPEMASK) == LVS_REPORT) RepaintSelectedItems(); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Listvwex.h����������������������������������������������������������������������������0100644�0000764�0000144�00000005677�06602560125�014764� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Listvwex.h,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_CListvwex_H__4DEC1954_F40B_11D1_93EC_080009DCA30B__INCLUDED_) #define AFX_CListvwex_H__4DEC1954_F40B_11D1_93EC_080009DCA30B__INCLUDED_ // ListVwEx.h : interface of the CListViewEx class // // This class provedes a full row selection mode for the report // mode list view control. // // This is a part of the Microsoft Foundation Classes C++ library. // Copyright (C) 1992-1997 Microsoft Corporation // All rights reserved. // // This source code is only intended as a supplement to the // Microsoft Foundation Classes Reference and related // electronic documentation provided with the library. // See these sources for detailed information regarding the // Microsoft Foundation Classes product. class CListViewEx : public CListView { DECLARE_DYNCREATE(CListViewEx) // Construction public: CListViewEx(); // Attributes protected: BOOL m_bFullRowSel; public: BOOL SetFullRowSel(BOOL bFillRowSel); BOOL GetFullRowSel(); BOOL m_bClientWidthSel; // Overrides protected: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CListViewEx) public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: //}}AFX_VIRTUAL // Implementation public: virtual ~CListViewEx(); #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; #endif protected: static LPCTSTR MakeShortString(CDC* pDC, LPCTSTR lpszLong, int nColumnLen, int nOffset); void RepaintSelectedItems(); // Implementation - client area width int m_cxClient; // Implementation - state icon width int m_cxStateImageOffset; afx_msg LRESULT OnSetImageList(WPARAM wParam, LPARAM lParam); // Implementation - list view colors COLORREF m_clrText; COLORREF m_clrTextBk; COLORREF m_clrBkgnd; afx_msg LRESULT OnSetTextColor(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnSetTextBkColor(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnSetBkColor(WPARAM wParam, LPARAM lParam); // Generated message map functions protected: //{{AFX_MSG(CListViewEx) afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnPaint(); afx_msg void OnSetFocus(CWnd* pOldWnd); afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // !defined(AFX_CListvwex_H__4DEC1954_F40B_11D1_93EC_080009DCA30B__INCLUDED_) �����������������������������������������������������������������libwww/WinCom/Load.cpp������������������������������������������������������������������������������0100644�0000764�0000144�00000006056�06602560125�014341� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Load.cpp,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Load.cpp : implementation file */ #include "stdafx.h" #include "wincom.h" #include "Load.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLoad dialog CLoad::CLoad( CWinComDoc * pDoc ) : CDialog(CLoad::IDD) { ASSERT(pDoc != NULL); m_pDoc = pDoc; //{{AFX_DATA_INIT(CVersionConflict) m_cacheValidate = 0; //}}AFX_DATA_INIT } void CLoad::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLoad) DDX_Control(pDX, IDC_LOAD_ADDRESS, m_loadList); DDX_Radio(pDX, IDC_CACHE_VALIDATION, m_cacheValidate); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLoad, CDialog) //{{AFX_MSG_MAP(CLoad) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLoad message handlers void CLoad::OnOK() { CDialog::OnOK(); CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); // Check address to load if (m_loadList.GetWindowTextLength()) { m_loadList.GetWindowText(m_address); if (m_address.IsEmpty()) return; // Get the base address (if any) CString base; m_loadList.GetLBText(0, base); char * address = HTParse(m_address, base.IsEmpty() ? "" : base, PARSE_ALL); address = HTSimplify(&address); m_address = address; m_loadList.SetWindowText(m_address); HT_FREE(address); HTAnchor * anchor = HTAnchor_findAddress(m_address); // Update the address combo box if (m_loadList.FindStringExact(-1, m_address) == CB_ERR) { m_loadList.InsertString(0, m_address); int srcLength = m_loadList.GetCount(); if (srcLength >= MAX_LIST_LENGTH) { int cnt; for (cnt=MAX_LIST_LENGTH; cnt < srcLength; cnt++) m_loadList.DeleteString(cnt); } // Write into INI file pApp->AddLoadAddressToIniFile(m_address); } // Start the request CRequest * request = new CRequest(m_pDoc); request->GetDocument(anchor, m_cacheValidate); } } BOOL CLoad::OnInitDialog() { CDialog::OnInitDialog(); // Setup the combo box CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); pApp->FillLoadComboBox(&m_loadList); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Load.h��������������������������������������������������������������������������������0100644�0000764�0000144�00000003535�06602560125�014005� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Load.h,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_LOAD_H__093300C6_43F1_11D2_93FE_080009DCA30B__INCLUDED_) #define AFX_LOAD_H__093300C6_43F1_11D2_93FE_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // Load.h : header file // #include "WinComDoc.h" ///////////////////////////////////////////////////////////////////////////// // CLoad dialog class CLoad : public CDialog { // Construction public: CLoad(CWinComDoc * pDoc); // Dialog Data //{{AFX_DATA(CLoad) enum { IDD = IDD_LOAD }; CComboBox m_loadList; int m_cacheValidate; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CLoad) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: CString m_address; CWinComDoc * m_pDoc; // Generated message map functions //{{AFX_MSG(CLoad) virtual void OnOK(); virtual BOOL OnInitDialog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_LOAD_H__093300C6_43F1_11D2_93FE_080009DCA30B__INCLUDED_) �������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Location.cpp��������������������������������������������������������������������������0100644�0000764�0000144�00000013174�06656075510�015241� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Location.cpp,v 1.10 2025/02/03 16:37:28 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Location.cpp : implementation file */ #include "stdafx.h" #include "WinCom.h" #include "Location.h" #include "MainFrm.h" #include "WinComDoc.h" #include "TabsView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLocation property page IMPLEMENT_DYNCREATE(CLocation, CPropertyPage) CLocation::CLocation() : CPropertyPage(CLocation::IDD) { //{{AFX_DATA_INIT(CLocation) //}}AFX_DATA_INIT } CLocation::~CLocation() { } void CLocation::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLocation) DDX_Control(pDX, IDC_SOURCE_URI, m_sourceList); DDX_Control(pDX, IDC_DESTINATION_URI, m_destinationList); DDX_Control(pDX, ID_SUBMIT, m_submit); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLocation, CPropertyPage) //{{AFX_MSG_MAP(CLocation) ON_BN_CLICKED(ID_BROWSE, OnBrowse) ON_BN_CLICKED(ID_SUBMIT, OnSubmit) ON_CBN_EDITCHANGE(IDC_SOURCE_URI, OnEditchangeSourceUri) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLocation message handlers void CLocation::OnBrowse() { CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); CFileDialog fd(TRUE); fd.m_ofn.lpstrInitialDir = pApp->GetIniCWD(); UpdateData(); if (fd.DoModal() == IDOK) { // Make the source an absolute URI CString path = fd.GetPathName(); char * fileaddr = HTLocalToWWW(path, NULL); if (fileaddr) { m_source = fileaddr; m_sourceList.SetWindowText(fileaddr); // Set the initial dir for next time int idx = path.ReverseFind('\\'); if (idx != -1) path.GetBufferSetLength(idx+1); pApp->SetIniCWD(path); HT_FREE(fileaddr); } /* Update the destination */ CString file = fd.GetFileName(); if (!file.IsEmpty()) { CString base = ""; char * escaped = HTEscape(file, URL_XALPHAS); char * destination = escaped; int length = m_destinationList.GetCount(); if (length > 0) { m_destinationList.GetLBText(0, base); if (!base.IsEmpty()) { destination = HTParse(escaped, base, PARSE_ALL); HT_FREE(escaped); } } destination = HTSimplify(&destination); m_destination = destination; m_destinationList.SetWindowText(m_destination); HT_FREE(destination); } // If change in source then update the entity and link info ASSERT(GetParentFrame()->GetActiveView()->IsKindOf(RUNTIME_CLASS(CTabsView))); CTabsView * view = (CTabsView *) GetParentFrame()->GetActiveView(); view->GetDocument()->m_EntityInfo.Clear(); view->GetDocument()->m_Links.Clear(); UpdateData(); } } void CLocation::OnEditchangeSourceUri() { UpdateData(); ASSERT(GetParentFrame()->GetActiveView()->IsKindOf(RUNTIME_CLASS(CTabsView))); CTabsView * view = (CTabsView *) GetParentFrame()->GetActiveView(); // If change in source then update the entity and link info view->GetDocument()->m_EntityInfo.Clear(); view->GetDocument()->m_Links.Clear(); } void CLocation::OnSubmit() { CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); // Check source and destination m_sourceList.GetWindowText(m_source); m_destinationList.GetWindowText(m_destination); if (m_source.IsEmpty() || m_destination.IsEmpty()) return; // Update the source combo box if (m_sourceList.FindStringExact(-1, m_source) == CB_ERR) { m_sourceList.InsertString(0, m_source); int srcLength = m_sourceList.GetCount(); if (srcLength >= MAX_LIST_LENGTH) { int cnt; for (cnt=MAX_LIST_LENGTH; cnt < srcLength; cnt++) m_sourceList.DeleteString(cnt); } // Write into INI file pApp->AddSourceToIniFile(m_source); } // Update the destination combo box if (m_destinationList.FindStringExact(-1, m_destination) == CB_ERR) { m_destinationList.InsertString(0, m_destination); int dstLength = m_destinationList.GetCount(); if (dstLength >= MAX_LIST_LENGTH) { int cnt; for (cnt=MAX_LIST_LENGTH; cnt < dstLength; cnt++) m_destinationList.DeleteString(cnt); } // Write into INI file pApp->AddDestinationToIniFile(m_destination); } // Update our data UpdateData(); // Call the document with a request request ASSERT(GetParentFrame()->GetActiveView()->IsKindOf(RUNTIME_CLASS(CTabsView))); CTabsView * view = (CTabsView *) GetParentFrame()->GetActiveView(); view->GetDocument()->SaveDocument(); } BOOL CLocation::OnInitDialog() { CPropertyPage::OnInitDialog(); CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); pApp->FillSourceComboBox(&m_sourceList); pApp->FillDestinationComboBox(&m_destinationList); return TRUE; } BOOL CLocation::OnKillActive() { m_sourceList.GetWindowText(m_source); m_destinationList.GetWindowText(m_destination); return CPropertyPage::OnKillActive(); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Location.h����������������������������������������������������������������������������0100644�0000764�0000144�00000004054�06602560125�014673� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Location.h,v 1.8 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_LOCATION_H__CF29CB7F_B627_11D1_93DF_080009DCA30B__INCLUDED_) #define AFX_LOCATION_H__CF29CB7F_B627_11D1_93DF_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // Location.h : header file // ///////////////////////////////////////////////////////////////////////////// // CLocation dialog class CRequest; class CLocation : public CPropertyPage { DECLARE_DYNCREATE(CLocation) // Construction public: CLocation(); ~CLocation(); CString m_source; CString m_destination; // Dialog Data //{{AFX_DATA(CLocation) enum { IDD = IDD_LOCATION }; CComboBox m_destinationList; CComboBox m_sourceList; CButton m_submit; //}}AFX_DATA // Overrides // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CLocation) public: virtual BOOL OnInitDialog(); virtual BOOL OnKillActive(); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Generated message map functions //{{AFX_MSG(CLocation) afx_msg void OnBrowse(); afx_msg void OnSubmit(); afx_msg void OnEditchangeSourceUri(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_LOCATION_H__CF29CB7F_B627_11D1_93DF_080009DCA30B__INCLUDED_) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/MainFrm.cpp���������������������������������������������������������������������������0100644�0000764�0000144�00000007067�06602560125�015016� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: MainFrm.cpp,v 1.4 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** MainFrm.cpp : implementation of the CMainFrame class */ #include "stdafx.h" #include "WinCom.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_WM_DROPFILES() //}}AFX_MSG_MAP // Global help commands ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFinder) ON_COMMAND(ID_HELP, CFrameWnd::OnHelp) ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp) ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder) END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CMainFrame construction/destruction CMainFrame::CMainFrame() { // TODO: add member initialization code here } CMainFrame::~CMainFrame() { } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; #if 0 if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } #endif if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } #if 0 // TODO: Remove this if you don't want tool tips or a resizeable toolbar m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); #endif // We accept drag and drop files DragAcceptFiles(); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style &= ~ (FWS_ADDTOTITLE | WS_HSCROLL | WS_VSCROLL | WS_THICKFRAME ); cs.dwExStyle &= ~ WS_EX_CLIENTEDGE; return CFrameWnd::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CMainFrame diagnostics #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers void CMainFrame::OnDropFiles(HDROP hDropInfo) { // TODO: Add your message handler code here and/or call default CFrameWnd::OnDropFiles(hDropInfo); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/MainFrm.h�����������������������������������������������������������������������������0100644�0000764�0000144�00000003677�06602560125�014466� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: MainFrm.h,v 1.4 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_MAINFRM_H__CF29CB57_B627_11D1_93DF_080009DCA30B__INCLUDED_) #define AFX_MAINFRM_H__CF29CB57_B627_11D1_93DF_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class CMainFrame : public CFrameWnd { protected: // create from serialization only CMainFrame(); DECLARE_DYNCREATE(CMainFrame) // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMainFrame) virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //}}AFX_VIRTUAL // Implementation public: virtual ~CMainFrame(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif CStatusBar m_wndStatusBar; protected: // control bar embedded members \ // Generated message map functions protected: //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnDropFiles(HDROP hDropInfo); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MAINFRM_H__CF29CB57_B627_11D1_93DF_080009DCA30B__INCLUDED_) �����������������������������������������������������������������libwww/WinCom/MakeHelp.bat��������������������������������������������������������������������������0100644�0000764�0000144�00000002534�06551175032�015133� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off REM -- First make map file from Microsoft Visual C++ generated resource.h echo // MAKEHELP.BAT generated Help Map file. Used by WINCOM.HPJ. >"hlp\WinCom.hm" echo. >>"hlp\WinCom.hm" echo // Commands (ID_* and IDM_*) >>"hlp\WinCom.hm" makehm ID_,HID_,0x10000 IDM_,HIDM_,0x10000 resource.h >>"hlp\WinCom.hm" echo. >>"hlp\WinCom.hm" echo // Prompts (IDP_*) >>"hlp\WinCom.hm" makehm IDP_,HIDP_,0x30000 resource.h >>"hlp\WinCom.hm" echo. >>"hlp\WinCom.hm" echo // Resources (IDR_*) >>"hlp\WinCom.hm" makehm IDR_,HIDR_,0x20000 resource.h >>"hlp\WinCom.hm" echo. >>"hlp\WinCom.hm" echo // Dialogs (IDD_*) >>"hlp\WinCom.hm" makehm IDD_,HIDD_,0x20000 resource.h >>"hlp\WinCom.hm" echo. >>"hlp\WinCom.hm" echo // Frame Controls (IDW_*) >>"hlp\WinCom.hm" makehm IDW_,HIDW_,0x50000 resource.h >>"hlp\WinCom.hm" REM -- Make help for Project WINCOM echo Building Win32 Help files start /wait hcw /C /E /M "hlp\WinCom.hpj" if errorlevel 1 goto :Error if not exist "hlp\WinCom.hlp" goto :Error if not exist "hlp\WinCom.cnt" goto :Error echo. if exist Debug\nul copy "hlp\WinCom.hlp" ..\Bin\Debug if exist Debug\nul copy "hlp\WinCom.cnt" ..\Bin\Debug if exist Release\nul copy "hlp\WinCom.hlp" ..\Bin\Release if exist Release\nul copy "hlp\WinCom.cnt" ..\Bin\Release echo. goto :done :Error echo hlp\WinCom.hpj(1) : error: Problem encountered creating help file :done echo. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Makefile.am���������������������������������������������������������������������������0100644�0000764�0000144�00000000341�06553721045�015006� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DOC := $(wildcard *.html) MAK := $(wildcard *.dsp *.dsw *.bat) WIN := $(wildcard *.rc *.ico *.h *.cpp) EXTRA_DIST = \ $(DOC) \ $(MAK) \ $(WIN) SUBDIRS = hlp res �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/NoMoreLostUpdates.html����������������������������������������������������������������0100644�0000764�0000144�00000010060�06632271151�017222� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Web Commander Solves the Lost Update Problem</TITLE> <LINK rel=STYLESHEET href="../StyleSheets/Area/Overview.css" type="text/css"> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000"> <P> <A HREF="../../resources.html"></A> <A HREF="/"></A> <B><A HREF="../../resources/mapserver.html">Web Commander</A></B> <H1> Web Commander Solves the Lost Update Problem </H1> <P> The <A HREF="/">Lost Update Problem</A> has been present in most distributed authoring sessions using rudimentary HTTP/1.0 features. the Web Commander can now demonstrate how to avoid this problem based on HTTP/1.1 features including persistent cache, strong etags, <TT>if-match</TT> header fields and <TT>HEAD</TT> requests. <P> A couple of notes: <UL> <LI> Web Commander uses the normal <A HREF="/">libwww Request API</A> without modifications <LI> As the requests contain the <TT>TE</TT> header field indicating that the client understands deflate, the server sends back deflated and chunked responses <LI> Web Commander only detects conflicts - it doesn't try to resolve them </UL> <H3> Saving a Document for the First Time </H3> <P> If the user wants to save a document that we don't know anything about then we have to issue a <TT>HEAD</TT> request before doing the save using a <TT>PUT</TT> request. The <TT>HEAD</TT> request is necessary as we don't know whether we are speaking to an HTTP/1.0 or an HTTP/1.1 server - only the latter understands etags. Note, that the <TT>PUT</TT> request uses the "<TT>If-None-Match: *</TT>" header field to ensure that no race condition occurs between the two requests. There are two situations that have to be handled: <DL> <DT> <EM><A HREF="tcpdumps/new-entry.txt">The document doesn't already exist</A></EM> <DD> The first trace shows a situation where the document doesn't exist and the <TT>PUT</TT> request is executed normally <DT> <EM><A HREF="tcpdumps/replace-entry.txt">The document already exists</A></EM> <DD> The second trace shows a situation where the document already exists. The user is then given two options in a GUI dialog box: to download the existing version or to override it. In the trace the user overrides the existing version which is done by removing any preconditions. </DL> <H3> Saving a Document for the 2nd or more Time </H3> <P> When a new document has been created on the server, it sends back an etag in the <TT>201 (Created)</TT> response. This etag is stored in our <A HREF="/">persistent HTTP/1.1 cache</A>. Once the etag is known, it is used on all subsequent <TT>PUT</TT> requests in a <TT>if-match</TT> header field. If the document hasn't changed, the etags will match and the <TT>PUT</TT> can proceed. However, if it has changed, then the etags will not match and the <TT>PUT</TT> can not proceed. Instead the user will be given the same two options as above, that is, either to get the new version or to override it. <DL> <DT> <EM><A HREF="tcpdumps/update-entry.txt">The document has not been changed</A></EM> <DD> This trace shows a <TT>PUT</TT> request with a&nbsp;<TT>if-match</TT> header field. In this situation the etag matches and the <TT>PUT</TT> request is executed as normal. <DT> <EM><A HREF="tcpdumps/override-entry.txt">The document has been changed</A></EM> <DD> The last trace shows a situation where someone else updated the document and so the etags don't match anymore. THe PUT therefore fails and the user is then presented with the option of downloading the new version of overriding the existing one. In this case, the existing version is simply overridden. </DL> <P> In both cases, the new etag sent back is saved in the persistent cache and the old etag deleted. <P> <HR> <ADDRESS> <A HREF="/">Henrik Frystyk Nielsen</A>,<BR> @(#) $Id: NoMoreLostUpdates.html,v 1.2 2025/12/05 17:50:33 frystyk Exp $ </ADDRESS> </BODY></HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Options.cpp���������������������������������������������������������������������������0100644�0000764�0000144�00000003655�06602560125�015117� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Options.cpp,v 1.3 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Options.cpp : implementation file */ #include "stdafx.h" #include "WinCom.h" #include "Options.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // COptions property page IMPLEMENT_DYNCREATE(COptions, CPropertyPage) COptions::COptions() : CPropertyPage(COptions::IDD) { } COptions::COptions( CWinComApp * pApp) : CPropertyPage(COptions::IDD) { //{{AFX_DATA_INIT(COptions) m_proxy = _T(""); m_proxy_prefix = _T("http"); //}}AFX_DATA_INIT m_pApp = pApp; pApp->m_pOptions = this; } COptions::~COptions() { } void COptions::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptions) DDX_CBString(pDX, IDC_PROXY, m_proxy); DDV_MaxChars(pDX, m_proxy, 1024); DDX_CBString(pDX, IDC_PROXY_PREFIX, m_proxy_prefix); DDV_MaxChars(pDX, m_proxy_prefix, 128); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(COptions, CPropertyPage) //{{AFX_MSG_MAP(COptions) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COptions message handlers �����������������������������������������������������������������������������������libwww/WinCom/Options.h�����������������������������������������������������������������������������0100644�0000764�0000144�00000004013�06602560125�014551� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Options.h,v 1.3 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_OPTIONS_H__CF29CB7E_B627_11D1_93DF_080009DCA30B__INCLUDED_) #define AFX_OPTIONS_H__CF29CB7E_B627_11D1_93DF_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // Options.h : header file // ///////////////////////////////////////////////////////////////////////////// // COptions dialog class CWinComApp; class COptions : public CPropertyPage { DECLARE_DYNCREATE(COptions) // Construction public: COptions( CWinComApp *pApp ); CWinComApp *m_pApp; COptions(); ~COptions(); // Dialog Data //{{AFX_DATA(COptions) enum { IDD = IDD_OPTIONS }; CString m_proxy; CString m_proxy_prefix; //}}AFX_DATA // Overrides // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(COptions) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(COptions) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_OPTIONS_H__CF29CB7E_B627_11D1_93DF_080009DCA30B__INCLUDED_) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Overview.html�������������������������������������������������������������������������0100644�0000764�0000144�00000006661�06632271151�015455� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>Web Commander - the libwww Win32 App</TITLE> <LINK rel=STYLESHEET href="../StyleSheets/Area/Overview.css" type="text/css"> </HEAD> <BODY BGCOLOR="#ffffff" TEXT="#000000"> <P> <A HREF="../../resources.html"></A> <A HREF="/"></A> <B>Web Commander</B> <H1> Web Commander </H1> <P ALIGN="center"> <A HREF="#Basics">Basics</A> | <A HREF="#Features">Features</A> | <A HREF="/">Release Notes</A> | <A HREF="/">Get Source</A> | <A HREF="#Binary">Binaries</A> |&nbsp;<A HREF="/">Help and Screen Shots</A> <P> <DIV class="intro"> The <B>Web Commander</B> is a Win32 application for getting, saving, and deleting documents remotely using HTTP/1.1. It allows the user to explicitly control the metadata describing the document to save including the language, type, charset, etc. <UL> <LI> <A HREF="/">Improved help documentation</A> <LI> Read how <A HREF="/">Web Commander solves the lost update problem</A>! </UL> <P> The Web Commander is part of the the libwww - the <A HREF="/">W3C Sample Code Library</A> and is available in both <A HREF="/">source</A> and <A HREF="#Binary">binary</A> versions. </DIV> <P> <HR> <H2> <A NAME="Basics">The Basics</A> </H2> <DL> <DT> Author(s) <DD> <A HREF="/">Henrik Frystyk Nielsen</A> <DT> Status <DD> An example application for <A HREF="/">libwww</A>. <DT> Plans <DD> New releases follow the releases of <A HREF="/">libwww</A> with no exception. <DT> Platforms <DD> It runs on Win32 - it's a Windows specific GUI application <DT> Getting the Source Code <DD> The Web Commander comes as an integral part of the <A HREF="/">libwww distribution package</A> but you can also get the <A HREF="#Binary">binary version</A> <DT> Forums <DD> Discussions on libwww and its example applications take place on <B>&lt;www-lib@w3.org</B>&gt; (<A HREF="http://lists.w3.org/Archives/Public/www-lib/">archives</A>). See the <A HREF="/">documentation for how to subscribe</A>. </DL> <H2> <A NAME="Binary">Binary Installation</A> </H2> <DL> <DT> <B>Looking for Win32 binaries?</B> <DD> Vladimir Kozlov has made a really cool libwww installshield for Win32 which is available from the IDM Web site </DL> <H2> <A NAME="Features">Features</A> </H2> <UL> <LI> Save a document from local disk, another HTTP server, or an FTP server onto your HTTP/1.1 server <LI> Delete and Get documents on your favorite HTTP/1.1 server <LI> Explicit control over metadata describing the source that you are saving like language, charset, etc. <LI> Support for version conflict detection - solves the lost update problem <LI> Support for proxies including ssh tunnelling <LI> See also the <A HREF="/">screen shots</A> for samples and help </UL> <P> <HR> <ADDRESS> <A HREF="/">Henrik Frystyk Nielsen</A>,<BR> @(#) $Id: Overview.html,v 1.10 2025/12/05 17:50:33 frystyk Exp $ </ADDRESS> </BODY></HTML> �������������������������������������������������������������������������������libwww/WinCom/Password.cpp��������������������������������������������������������������������������0100644�0000764�0000144�00000003724�06602560125�015263� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Password.cpp,v 1.3 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Password.cpp : implementation file */ #include "stdafx.h" #include "WinCom.h" #include "Password.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPassword dialog CPassword::CPassword( CUserParameters * UserParameters ) : CDialog(CPassword::IDD) { char * realm = UserParameters && UserParameters->m_input ? (char *) UserParameters->m_input : ""; if (!realm) realm = ""; char * uid = UserParameters && UserParameters->m_default ? (char *) UserParameters->m_default : ""; if (!uid) uid = ""; //{{AFX_DATA_INIT(CPassword) m_password = _T(""); m_username = _T(uid); m_realm = _T(realm); //}}AFX_DATA_INIT } void CPassword::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPassword) DDX_Text(pDX, IDC_PASSWORD, m_password); DDX_Text(pDX, IDC_UID, m_username); DDX_Text(pDX, IDC_REALM, m_realm); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPassword, CDialog) //{{AFX_MSG_MAP(CPassword) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPassword message handlers ��������������������������������������������libwww/WinCom/Password.h����������������������������������������������������������������������������0100644�0000764�0000144�00000003603�06602560125�014724� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Password.h,v 1.4 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_PASSWORD_H__B7CDBAE1_C4DC_11D1_93E1_080009DCA30B__INCLUDED_) #define AFX_PASSWORD_H__B7CDBAE1_C4DC_11D1_93E1_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // Password.h : header file // #include "UserParameters.h" ///////////////////////////////////////////////////////////////////////////// // CPassword dialog class CPassword : public CDialog { // Construction public: CPassword(CUserParameters * UserParameters); // Dialog Data //{{AFX_DATA(CPassword) enum { IDD = IDD_PASSWORD }; CString m_password; CString m_username; CString m_realm; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CPassword) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CPassword) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_PASSWORD_H__B7CDBAE1_C4DC_11D1_93E1_080009DCA30B__INCLUDED_) �����������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Progress.cpp��������������������������������������������������������������������������0100644�0000764�0000144�00000003242�06602560125�015260� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Progress.cpp,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Progress.cpp : implementation file */ #include "stdafx.h" #include "wincom.h" #include "Progress.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CProgress dialog CProgress::CProgress( CRequest * pRequest ) : CDialog(CProgress::IDD) { ASSERT(pRequest != NULL); m_pRequest = pRequest; //{{AFX_DATA_INIT(CProgress) //}}AFX_DATA_INIT } void CProgress::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CProgress) DDX_Control(pDX, IDCANCEL, m_cancel); DDX_Control(pDX, IDC_PROGRESS, m_progress); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CProgress, CDialog) //{{AFX_MSG_MAP(CProgress) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CProgress message handlers void CProgress::OnCancel() { CDialog::OnCancel(); m_pRequest->Cancel(); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Progress.h����������������������������������������������������������������������������0100644�0000764�0000144�00000003536�06602560125�014733� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Progress.h,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_PROGRESS_H__EC9E0464_44D4_11D2_BA98_00A024AA28DE__INCLUDED_) #define AFX_PROGRESS_H__EC9E0464_44D4_11D2_BA98_00A024AA28DE__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // Progress.h : header file // #include "Request.h" ///////////////////////////////////////////////////////////////////////////// // CProgress dialog class CProgress : public CDialog { // Construction public: CProgress (CRequest * pRequest); // Dialog Data //{{AFX_DATA(CProgress) enum { IDD = IDD_PROGRESS }; CButton m_cancel; CProgressCtrl m_progress; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CProgress) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: CRequest * m_pRequest; // Generated message map functions //{{AFX_MSG(CProgress) virtual void OnCancel(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_PROGRESS_H__EC9E0464_44D4_11D2_BA98_00A024AA28DE__INCLUDED_) ������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ProxySetup.cpp������������������������������������������������������������������������0100644�0000764�0000144�00000007214�06602560125�015621� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: ProxySetup.cpp,v 1.3 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** ProxySetup.cpp : implementation file */ #include "stdafx.h" #include "WinCom.h" #include "ProxySetup.h" // libwww code #include "WWWApp.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CProxySetup dialog CProxySetup::CProxySetup(CWnd* pParent /*=NULL*/) : CDialog(CProxySetup::IDD, pParent) { //{{AFX_DATA_INIT(CProxySetup) m_proxyPrefix = _T("http://*"); m_proxyException = _T(""); //}}AFX_DATA_INIT } void CProxySetup::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CProxySetup) DDX_CBString(pDX, IDC_PROXY_SERVER, m_proxy); DDX_CBString(pDX, IDC_USE_PROXY, m_proxyPrefix); DDX_CBString(pDX, IDC_USE_NO_PROXY, m_proxyException); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CProxySetup, CDialog) //{{AFX_MSG_MAP(CProxySetup) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CProxySetup message handlers void CProxySetup::AddProxyOptionsToIni (void) { CString strSection = "Options"; CString strProxyPrefixItem = "Proxy-prefix"; CString strProxyItem = "Proxy"; CString strExceptionItem = "Proxy-exception"; CWinApp * pApp = AfxGetApp(); ASSERT(pApp != NULL); pApp->WriteProfileString(strSection, strProxyPrefixItem, m_proxyPrefix); pApp->WriteProfileString(strSection, strProxyItem, m_proxy); pApp->WriteProfileString(strSection, strExceptionItem, m_proxyException); } BOOL CProxySetup::RegisterProxies (void) { // Delete all Registered proxies in libwww HTProxy_deleteAll(); HTNoProxy_deleteAll(); // regex for what to proxy if (!m_proxy.IsEmpty() && !m_proxyPrefix.IsEmpty()) { HTProxy_addRegex(m_proxyPrefix, m_proxy, -1); } // regex for what not to proxy if (!m_proxyException.IsEmpty()) { HTNoProxy_addRegex(m_proxyException, -1); } return TRUE; } BOOL CProxySetup::GetProxyOptions(void) { /* Read the INI file to find any persistent options */ CString strSection = "Options"; CString strProxyPrefixItem = "Proxy-prefix"; CString strProxyItem = "Proxy"; CString strExceptionItem = "Proxy-exception"; CWinApp * pApp = AfxGetApp(); ASSERT(pApp != NULL); CString proxyPrefix = pApp->GetProfileString(strSection, strProxyPrefixItem); if (!proxyPrefix.IsEmpty()) m_proxyPrefix = proxyPrefix; CString proxy = pApp->GetProfileString(strSection, strProxyItem); if (!proxy.IsEmpty()) m_proxy = proxy; CString proxyException = pApp->GetProfileString(strSection, strExceptionItem); if (!proxyException.IsEmpty()) m_proxyException = proxyException; return TRUE; } BOOL CProxySetup::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ProxySetup.h��������������������������������������������������������������������������0100644�0000764�0000144�00000003746�06602560125�015274� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: ProxySetup.h,v 1.3 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_PROXYSETUP_H__AA2EFDC9_015B_11D2_93F2_080009DCA30B__INCLUDED_) #define AFX_PROXYSETUP_H__AA2EFDC9_015B_11D2_93F2_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // ProxySetup.h : header file // ///////////////////////////////////////////////////////////////////////////// // CProxySetup dialog class CProxySetup : public CDialog { // Construction public: BOOL GetProxyOptions(); CProxySetup(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CProxySetup) enum { IDD = IDD_PROXIES }; CString m_proxy; CString m_proxyPrefix; CString m_proxyException; //}}AFX_DATA // Operations void AddProxyOptionsToIni (void); BOOL RegisterProxies (void); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CProxySetup) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CProxySetup) virtual BOOL OnInitDialog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_PROXYSETUP_H__AA2EFDC9_015B_11D2_93F2_080009DCA30B__INCLUDED_) ��������������������������libwww/WinCom/Request.cpp���������������������������������������������������������������������������0100644�0000764�0000144�00000026726�06657574416�015142� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Request.cpp,v 1.12 2025/02/08 14:47:42 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Request.cpp: implementation of the CRequest class. */ #include "stdafx.h" #include "WinCom.h" #include "Request.h" #include "VersionConflict.h" // From libwww #include "WWWLib.h" /* Global Library Include file */ #include "WWWApp.h" #include "WWWFile.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #define DEF_LAST_SEGMENT "index" ///////////////////////////////////////////////////////////////////////////// // Libwww filters /* ** Request termination handler */ PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { CRequest * req = (CRequest *) HTRequest_context(request); req->Cleanup(); delete req; return HT_OK; } /* ** 412 "Precondition failed" handler */ PRIVATE int precondition_handler (HTRequest * request, HTResponse * response, void * param, int status) { CRequest * req = (CRequest *) HTRequest_context(request); CVersionConflict conflict; req->Cleanup(); if (conflict.DoModal() == IDOK) { if (conflict.m_versionResolution == 0) { HTAnchor * source = req->Source(); HTAnchor * dest = req->Destination(); CRequest * new_req = new CRequest(req->m_pDoc); delete req; /* Start a new PUT request without preconditions */ new_req->PutDocument(source, dest, HT_NO_MATCH); /* Stop here */ return HT_ERROR; } else if (conflict.m_versionResolution == 1) { HTAnchor * address = req->Source(); CRequest * new_req = new CRequest(req->m_pDoc); delete req; /* Start a new GET request */ new_req->GetDocument(address, 2); /* Stop here */ return HT_ERROR; } else return HT_OK; /* Just finish the request */ } return HT_OK; } /* ** Request HEAD checker filter */ PRIVATE int check_handler (HTRequest * request, HTResponse * response, void * param, int status) { CRequest * req = (CRequest *) HTRequest_context(request); CVersionConflict conflict; req->Cleanup(); /* ** If head request showed that the document doesn't exist ** then just go ahead and PUT it. Otherwise ask for help */ if (status==HT_ERROR || status==HT_INTERRUPTED || status==HT_TIMEOUT) { delete req; return HT_ERROR; } else if (status==HT_NO_ACCESS || status==HT_NO_PROXY_ACCESS) { delete req; return HT_ERROR; } else if (abs(status)/100!=2) { HTAnchor * source = req->Source(); HTAnchor * dest = req->Destination(); CRequest * new_req = new CRequest(req->m_pDoc); delete req; /* Start a new PUT request with a "if-none-match *" precondition */ new_req->PutDocument(source, dest, HT_DONT_MATCH_ANY); } else if (conflict.DoModal() == IDOK) { if (conflict.m_versionResolution == 0) { HTAnchor * source = req->Source(); HTAnchor * dest = req->Destination(); CRequest * new_req = new CRequest(req->m_pDoc); delete req; /* Start a new PUT request without preconditions */ new_req->PutDocument(source, dest, HT_NO_MATCH); } else if (conflict.m_versionResolution == 1) { HTAnchor * address = req->Source(); CRequest * new_req = new CRequest(req->m_pDoc); delete req; /* Start a new GET request */ new_req->GetDocument(address, 2); } } return HT_ERROR; } ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// IMPLEMENT_DYNCREATE(CRequest, CObject) CRequest::CRequest(CWinComDoc * doc) { ASSERT(doc != NULL); m_pDoc = doc; m_pHTRequest = NULL; m_pSource = NULL; m_pDestination = NULL; m_file = NULL; // @@@ADD TO DOC LIST@@@ } CRequest::~CRequest() { // @@@REMOVE FROM DOC LIST@@@ } ///////////////////////////////////////////////////////////////////////////// // CWinComDoc commands BOOL CRequest::SetCacheValidation(int mode) { ASSERT(m_pHTRequest != NULL); HTReload reload = HT_CACHE_OK; switch (mode) { case 0: reload = HT_CACHE_OK; break; case 1: reload = HT_CACHE_VALIDATE; break; case 2: reload = HT_CACHE_END_VALIDATE; break; case 3: reload = HT_CACHE_FLUSH; break; default: reload = HT_CACHE_OK; } // Set the cache validation mode for this request HTRequest_setReloadMode(m_pHTRequest, reload); return TRUE; } int CRequest::GetDocument (HTAnchor * address, int cacheValidation) { char filebuf[1024]; ASSERT(address != NULL); char * uri = HTAnchor_address(address); m_pSource = address; CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); CFileDialog fd(FALSE); /* Find the start filename */ { char * name = NULL; char * suffix = HTBind_getSuffix(HTAnchor_parent(address)); char * uri_path = NULL; if (uri && (uri_path = HTParse(uri, "", PARSE_PATH|PARSE_PUNCTUATION))) { char * last_segment = strrchr(uri_path, '/'); if (last_segment && *(last_segment+1)) { StrAllocMCopy(&name, ++last_segment, NULL); } else { StrAllocMCopy(&name, DEF_LAST_SEGMENT, suffix ? suffix : "", NULL); } } strcpy(filebuf, name); fd.m_ofn.lpstrFile = filebuf; HT_FREE(name); HT_FREE(suffix); } /* Find the start folder */ fd.m_ofn.lpstrInitialDir = pApp->GetIniCWD(); if (fd.DoModal() == IDOK) { m_saveAs = fd.GetPathName(); // Set the initial dir for next time CString path = m_saveAs; int idx = path.ReverseFind('\\'); if (idx != -1) path.GetBufferSetLength(idx+1); pApp->SetIniCWD(path); /* Create a new libwww request object */ m_pHTRequest = HTRequest_new(); /* Set the context so that we can find it again */ HTRequest_setContext(m_pHTRequest, this); /* Terminating filters */ InitializeFilters(); /* Should we do cache validation? */ SetCacheValidation(cacheValidation); /* Progress bar */ m_pProgress = new CProgress(this); m_pProgress->Create(IDD_PROGRESS); m_pProgress->ShowWindow(SW_SHOW); /* Start the GET */ if (HTLoadToFile (uri, m_pHTRequest, m_saveAs) == NO) { HT_FREE(uri); return -1; } HT_FREE(uri); return 0; } HT_FREE(uri); return -1; } int CRequest::HeadDocument (HTAnchor * address, int cacheValidation) { ASSERT(address != NULL); m_pSource = address; /* Create a new libwww request object */ m_pHTRequest = HTRequest_new(); /* Set the context so that we can find it again */ HTRequest_setContext(m_pHTRequest, this); /* Should we do cache validation? */ SetCacheValidation(cacheValidation); /* Terminating filters */ InitializeFilters(); /* Progress bar */ m_pProgress = new CProgress(this); m_pProgress->Create(IDD_PROGRESS); m_pProgress->ShowWindow(SW_SHOW); /* Start the HEAD */ if (HTHeadAnchor(address, m_pHTRequest) == NO) { return -1; } return 0; } int CRequest::DeleteDocument (HTAnchor * address, HTPreconditions preconditions) { ASSERT(address != NULL); m_pSource = address; /* Create a new libwww request object */ m_pHTRequest = HTRequest_new(); /* Set the context so that we can find it again */ HTRequest_setContext(m_pHTRequest, this); /* Should we use preconditions? */ HTRequest_setPreconditions(m_pHTRequest, preconditions); /* Terminating filters */ InitializeFilters(); /* Progress bar */ m_pProgress = new CProgress(this); m_pProgress->Create(IDD_PROGRESS); m_pProgress->ShowWindow(SW_SHOW); /* Start the HEAD */ if (HTDeleteAnchor(address, m_pHTRequest) == NO) { return -1; } return 0; } int CRequest::PutDocument (HTAnchor * source, HTAnchor * destination, HTPreconditions preconditions) { ASSERT(source != NULL); ASSERT(destination != NULL); m_pSource = source; m_pDestination = destination; /* Create a new libwww request object */ m_pHTRequest = HTRequest_new(); /* Set the context so that we can find it again */ HTRequest_setContext(m_pHTRequest, this); /* Should we use preconditions? */ HTRequest_setPreconditions(m_pHTRequest, preconditions); /* Terminating filters */ InitializeFilters(); /* Progress bar */ m_pProgress = new CProgress(this); m_pProgress->Create(IDD_PROGRESS); m_pProgress->ShowWindow(SW_SHOW); /* Start the PUT */ if (HTPutDocumentAnchor(HTAnchor_parent(source), destination, m_pHTRequest) != YES) { return -1; } return 0; } int CRequest::PutDocumentWithPrecheck (HTAnchor * source, HTAnchor * destination) { ASSERT(source != NULL); ASSERT(destination != NULL); m_pSource = source; m_pDestination = destination; /* Create a new libwww request object */ m_pHTRequest = HTRequest_new(); /* Only use authentication and check AFTER filters */ HTRequest_addAfter(m_pHTRequest, HTAuthFilter, "http://*", NULL, HT_NO_ACCESS, HT_FILTER_MIDDLE, YES); HTRequest_addAfter(m_pHTRequest, HTAuthFilter, "http://*", NULL, HT_REAUTH, HT_FILTER_MIDDLE, YES); HTRequest_addAfter(m_pHTRequest, HTUseProxyFilter, "http://*", NULL, HT_USE_PROXY, HT_FILTER_MIDDLE, YES); HTRequest_addAfter(m_pHTRequest, check_handler, NULL, NULL, HT_ALL, HT_FILTER_MIDDLE, YES); /* Set the context so that we can find it again */ HTRequest_setContext(m_pHTRequest, this); /* Set cache validation */ SetCacheValidation(2); /* Progress bar */ m_pProgress = new CProgress(this); m_pProgress->Create(IDD_PROGRESS); m_pProgress->ShowWindow(SW_SHOW); /* Start the HEAD */ if (HTHeadAnchor(destination, m_pHTRequest) == NO) { return -1; } return 0; } int CRequest::Cancel() { if (m_pHTRequest) HTRequest_kill(m_pHTRequest); if (m_pProgress) m_pProgress = NULL; return 0; } BOOL CRequest::Cleanup() { if (m_file) { fclose(m_file); m_file = NULL; } if (m_pProgress) { m_pProgress->DestroyWindow(); m_pProgress = NULL; } return TRUE; } HTAnchor * CRequest::Source() { return m_pSource; } HTAnchor * CRequest::Destination() { return m_pDestination; } BOOL CRequest::InitializeFilters() { static BOOL initialized = NO; if (initialized == NO) { /* Add our own after filter to handle 412 precondition failed */ HTNet_addAfter(precondition_handler, NULL, NULL, HT_PRECONDITION_FAILED, HT_FILTER_MIDDLE); /* Add our own after filter to clecn up */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); initialized = YES; return TRUE; } return FALSE; } CProgressCtrl * CRequest::GetProgressBar() { return &(m_pProgress->m_progress); } ������������������������������������������libwww/WinCom/Request.h�����������������������������������������������������������������������������0100644�0000764�0000144�00000004030�06625051225�014546� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: Request.h,v 1.8 2025/11/19 17:17:09 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_REQUEST_H__E0D48280_C4BE_11D1_93E1_080009DCA30B__INCLUDED_) #define AFX_REQUEST_H__E0D48280_C4BE_11D1_93E1_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include "WWWLib.h" /* Global Library Include file */ #include "WinComDoc.h" #include "Progress.h" class CRequest : public CObject { DECLARE_DYNCREATE(CRequest) // Construction public: CRequest(CWinComDoc * doc = NULL); ~CRequest(); int GetDocument (HTAnchor * address, int cacheValidation); int HeadDocument (HTAnchor * address, int cacheValidation); int DeleteDocument (HTAnchor * address, HTPreconditions conditions); int PutDocument (HTAnchor * source, HTAnchor * destination, HTPreconditions conditions); int PutDocumentWithPrecheck (HTAnchor * source, HTAnchor * destination); int Cancel(); BOOL Cleanup(); CProgressCtrl * GetProgressBar(); HTAnchor * Source(); HTAnchor * Destination(); CWinComDoc *m_pDoc; protected: BOOL SetCacheValidation (int mode); HTRequest * m_pHTRequest; HTAnchor * m_pSource; HTAnchor * m_pDestination; CString m_saveAs; FILE * m_file; CProgress * m_pProgress; private: BOOL InitializeFilters(); }; #endif // !defined(AFX_REQUEST_H__E0D48280_C4BE_11D1_93E1_080009DCA30B__INCLUDED_) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/ScreenShots.html����������������������������������������������������������������������0100644�0000764�0000144�00000012332�06611452145�016100� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>Web Commander Help Screen Shots</title> <link rel="STYLESHEET" href="../StyleSheets/Area/Overview.css" type="text/css"> </head> <body BGCOLOR="#ffffff" TEXT="#000000"> <p><a HREF="../../resources.html"></a> <a HREF="/"></a> <b><a HREF="../../resources/mapserver.html">Web Commander</a></b> </p> <h1>Web Commander Help and Screen Shots </h1> <p>The goal of Web Commander is to give users an easy way of saving web documents to a server, and loading them to a local file or deleting them from a server. Web Commander has three basic commands corresponding to the goals: save, load and delete. If necessary, &nbsp; it is also possible to use the tool to do some advanced settings.</p> <p><em>Notice: The screen shots presented in this document are PNG images - if your browser doesn't understand the <a HREF="/">PNG image format</a> then they will show up as broken images.</em></p> <h2><a name="Saving a Document">Saving a Document</a></h2> <h3><a name="General Case">General Case</a></h3> <p>The most common use of this tool is when a user wants to save a document residing locally on his or her computer to a web server (HTTP server). This can be done by using the save document command. First you need to fill in the <em>Source</em> field with your local document name or use the <em>Browse</em> button to select the document.&nbsp; The <em>Destination</em> field contains the web address where you file is going to be saved to. To do the save you just need to press the <em>Submit</em> button and you are done after you receive a feedback message. In some rare occasions you may get an error message back. Usually this is because of a <a href="#Solving Version Conflicts">version conflict</a>.</p> <p align="center"></p> <p>When the document that is being saved resides in your local disk, it has<em> file:</em> at the beginning of the document pathname referring to local file address schema. The document may also reside on an FTP server or on an HTTP server. In that case<em> ftp:</em> and <em>http</em>: schemas are used correspondingly.</p> <p ALIGN="Center"> </p> <p ALIGN="Center"> </p> <p ALIGN="left">Web Commander can handle any type of document including binary formats, tar files, programs, etc. </p> <h3><a name="Solving Version Conflicts">Solving Version Conflicts </a></h3> <p>If somebody has saved an updated version of the same document that you are trying to save, Web Commander detects it and asks you what to do. </p> <p ALIGN="Center"> </p> <p>This feature can be turned on and off under the Options menu. </p> <h3><a name="Source Information">Source Information</a></h3> <p>Normally these settings are not needed while saving the documents. If you want to see what guesses are automatically being made of your source document, push the <em>Guess</em> button.</p> <h3><a name="Link Relationships">Link Relationships</a></h3> <p>Normally these settings are not needed. They can be used to add document relations to set of documents. For instance, if you are writing a book, you can define with <em>next</em> and <em>prev</em> type links that the source document containing one chapter of the book comes after one document and is before another.</p> <h2 ALIGN="Left"><a name="Loading a Document">Loading a Document</a> </h2> <p ALIGN="Left">You can also use Web Commander to simply load a document either from an HTTP server or an FTP server. The cache directives can help you reloading a document that you know has been changed in the mean time. Normally you can just use the default setting which is to get the nearest version that appears fresh. </p> <p ALIGN="Center"> </p> <h2><a name="Deleting a Document">Deleting a Document</a> </h2> <p>Web Commander can be used to delete a document on an HTTP server </p> <p ALIGN="Center"> </p> <h2><a name="Advanced Settings">Advanced Settings</a></h2> <h3><a name="Proxy Setup and SSH Tunnelling">Proxy Setup and SSH Tunnelling</a> </h3> <p>The proxy setup is very flexible as you can use regular expressions to say which request should go there. In this example, all requests going to <tt>http://jigedit.w3.org/*</tt> are tunnelled through a local host SSH tunnel ensuring real security. You can also do things like proxying all requests ending in &quot;<tt>.png</tt>&quot; though a particular proxy. </p> <p ALIGN="Center"> </p> <p>It could of course also be a normal HTTP proxy sitting on a firewall. </p> <hr> <address> <a HREF="/">Henrik Frystyk Nielsen</a>,<br> @(#) $Id: ScreenShots.html,v 1.3 2025/10/15 20:00:37 frystyk Exp $ </address> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/StdAfx.cpp����������������������������������������������������������������������������0100644�0000764�0000144�00000000314�06532054576�014654� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// stdafx.cpp : source file that includes just the standard includes // WinCom.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/StdAfx.h������������������������������������������������������������������������������0100644�0000764�0000144�00000001635�06551175033�014321� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #if !defined(AFX_STDAFX_H__CF29CB55_B627_11D1_93DF_080009DCA30B__INCLUDED_) #define AFX_STDAFX_H__CF29CB55_B627_11D1_93DF_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC extensions #include <afxcview.h> #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> // MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__CF29CB55_B627_11D1_93DF_080009DCA30B__INCLUDED_) ���������������������������������������������������������������������������������������������������libwww/WinCom/TabsView.cpp��������������������������������������������������������������������������0100644�0000764�0000144�00000014535�06602560125�015207� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: TabsView.cpp,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** TabsView.cpp : implementation of the CTabsView class */ #include "stdafx.h" #include "WinCom.h" #include "WinComDoc.h" #include "TabsView.h" #include "Location.h" #include "EntityInfo.h" #include "Links.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabsView IMPLEMENT_DYNCREATE(CTabsView, CView) BEGIN_MESSAGE_MAP(CTabsView, CView) //{{AFX_MSG_MAP(CTabsView) ON_WM_SIZE() ON_WM_CTLCOLOR() ON_WM_SETFOCUS() //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) ON_WM_ERASEBKGND() END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabsView construction/destruction CTabsView::CTabsView() { //{{AFX_DATA_INIT(CTabsView) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // TODO: add construction code here m_bSizedBefore = FALSE; m_pPropSheet = NULL; m_pLocation = NULL; m_pEntityInfo = NULL; m_pLinks = NULL; m_hWndFocus = NULL; } CTabsView::~CTabsView() { // explicitly delete sheet delete m_pPropSheet; } void CTabsView::DoDataExchange(CDataExchange* pDX) { CView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTabsView) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } ///////////////////////////////////////////////////////////////////////////// // CTabsView printing ///////////////////////////////////////////////////////////////////////////// // CTabsView diagnostics #ifdef _DEBUG void CTabsView::AssertValid() const { CView::AssertValid(); } void CTabsView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CWinComDoc* CTabsView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWinComDoc))); return (CWinComDoc*) m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CTabsView message handlers void CTabsView::OnSize(UINT nType, int cx, int cy) { if (nType != SIZE_MINIMIZED && cx != 0 && cy != 0 && m_pPropSheet != NULL) { if (m_bSizedBefore == FALSE) { m_bSizedBefore = TRUE; // get the size of the property sheet CRect rectSized; m_pPropSheet->GetWindowRect(rectSized); rectSized.InflateRect(0,0,0,40); // calculate the size of the frame CFrameWnd* pFrame = GetParentFrame(); if (pFrame != NULL) { pFrame->CalcWindowRect(rectSized,1); CWnd* pParent = pFrame->GetParent(); if (pParent != NULL) pParent->ScreenToClient(rectSized); // resize and reposition the frame pFrame->MoveWindow(rectSized); } } } } BOOL CTabsView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { ASSERT(pParentWnd != NULL); ASSERT_KINDOF(CFrameWnd, pParentWnd); if (!CWnd::Create(lpszClassName, lpszWindowName, dwStyle | WS_CLIPCHILDREN, rect, pParentWnd, nID, pContext)) { return FALSE; } // add your pages here! m_pLocation = &GetDocument()->m_Location; m_pEntityInfo = &GetDocument()->m_EntityInfo; m_pLinks = &GetDocument()->m_Links; // create the window object m_pPropSheet = new CPropertySheet; m_pPropSheet->AddPage(m_pLocation); m_pPropSheet->AddPage(m_pEntityInfo); m_pPropSheet->AddPage(m_pLinks); // create a modeless property page if (!m_pPropSheet->Create(this, DS_CONTEXTHELP | DS_SETFONT | WS_CHILD | WS_VISIBLE)) { DestroyWindow(); return FALSE; } m_pPropSheet->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE); // we use the style from the template - but make sure that // the WS_BORDER bit is correct. // the WS_BORDER bit will be whatever is in dwRequestedStyle m_pPropSheet->ModifyStyle(WS_BORDER|WS_CAPTION, dwStyle & (WS_BORDER|WS_CAPTION)); // Force the size requested. // Fake a call to OnSize()--it would have been called automatically // if this were using the base class implementation of Create(). CFrameWnd* pParentFrame = GetParentFrame(); CRect rectSize; m_pPropSheet->GetWindowRect(rectSize); pParentFrame->CalcWindowRect(rectSize); OnSize(SIZE_RESTORED, rectSize.Width(), rectSize.Height()); return TRUE; } BOOL CTabsView::OnEraseBkgnd(CDC* pDC) { CBrush* pOldBrush; CBrush backBrush; backBrush.CreateSolidBrush(::GetSysColor(COLOR_3DLIGHT)); backBrush.UnrealizeObject(); CRect rectClient; GetClientRect(rectClient); pOldBrush = pDC->SelectObject(&backBrush); pDC->Rectangle(rectClient); pDC->SelectObject(pOldBrush); return TRUE; } void CTabsView::OnDraw(CDC* pDC) { // we don't draw because the child window will do it all } void CTabsView::OnActivateView( BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { if (SaveFocusControl()) return; // don't call base class when focus is already set CView::OnActivateView(bActivate, pActivateView, pDeactiveView); } void CTabsView::OnActivateFrame(UINT nState, CFrameWnd* /*pFrameWnd*/) { if (nState == WA_INACTIVE) SaveFocusControl(); // save focus when frame loses activation } BOOL CTabsView::SaveFocusControl() { // save focus window if focus is on this window's controls HWND hWndFocus = ::GetFocus(); if (hWndFocus != NULL && ::IsChild(m_hWnd, hWndFocus)) { m_hWndFocus = hWndFocus; return TRUE; } return FALSE; } void CTabsView::OnSetFocus(CWnd*) { if (!::IsWindow(m_hWndFocus)) { // invalid or unknown focus window... let windows handle it m_hWndFocus = NULL; Default(); return; } // otherwise, set focus to the last known focus window ::SetFocus(m_hWndFocus); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/TabsView.h����������������������������������������������������������������������������0100644�0000764�0000144�00000005043�06602560125�014646� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: TabsView.h,v 1.3 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ class CTabsView : public CView { protected: // create from serialization only CTabsView(); DECLARE_DYNCREATE(CTabsView) public: //{{AFX_DATA(CTabsView) // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Attributes public: CWinComDoc* GetDocument(); // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabsView) public: virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView); //}}AFX_VIRTUAL virtual void OnActivateFrame(UINT nState, CFrameWnd* /*pFrameWnd*/); BOOL SaveFocusControl(); HWND m_hWndFocus; // Implementation public: virtual ~CTabsView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // tracks whether parent frame has already been sized. BOOL m_bSizedBefore; // property sheet is wired to MDI child frame and is not displayed CPropertySheet* m_pPropSheet; // one page for each menu so we can initialize controls // using OnInitDialog CPropertyPage* m_pLoad; CPropertyPage* m_pLocation; CPropertyPage* m_pEntityInfo; CPropertyPage* m_pLinks; afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg void OnDraw(CDC* pDC); // Generated message map functions protected: //{{AFX_MSG(CTabsView) afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnSetFocus(CWnd* pOldWnd); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #ifndef _DEBUG // debug version in TabsView.cpp inline CWinComDoc* CTabsView::GetDocument() { return (CWinComDoc*) m_pDocument; } #endif ///////////////////////////////////////////////////////////////////////////// ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/UserParameters.cpp��������������������������������������������������������������������0100644�0000764�0000144�00000013215�06613110072�016411� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: UserParameters.cpp,v 1.13 2025/10/20 13:29:30 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** UserParameters.cpp: implementation of the CUserParameters class. */ #include "stdafx.h" #include "WinCom.h" #include "Password.h" #include "MainFrm.h" /* Library include files */ #include "WWWLib.h" #include "WWWApp.h" #include "UserParameters.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif /* ------------------------------------------------------------------------- */ PUBLIC BOOL UserProgress (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { char * msg = HTDialog_progressMessage(request, op, msgnum, dfault, input); CRequest * req = (CRequest *) HTRequest_context(request); ASSERT(request != NULL); ASSERT(req != NULL); CProgressCtrl * progress = req->GetProgressBar(); switch (op) { case HT_PROG_READ: { long cl = HTAnchor_length(HTRequest_anchor(request)); if (cl > 0) { long b_read = HTRequest_bodyRead(request); double pro = (double) b_read/cl*100; progress->SetPos((int) pro); } } break; case HT_PROG_WRITE: { long cl = HTAnchor_length(HTRequest_entityAnchor(request)); if (cl > 0) { long b_written = HTRequest_bodyWritten(request); double pro = (double) b_written/cl*100; progress->SetPos((int) pro); } } break; } // Update pane 0 of the status bar if (msg) { CWinComDoc * doc = req->m_pDoc; if (doc) { POSITION pos = doc->GetFirstViewPosition(); CView * view = doc->GetNextView( pos ); CMainFrame * mainframe = (CMainFrame *) view->GetParentFrame(); mainframe->m_wndStatusBar.SetPaneText(ID_SEPARATOR, msg); } HT_FREE(msg); } return YES; } PUBLIC BOOL UserPrint (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { char * msg = HTDialog_errorMessage(request, op, msgnum, dfault, input); if (msg) { AfxMessageBox( msg, MB_OK | MB_ICONEXCLAMATION ); HT_FREE(msg); } return YES; } PUBLIC BOOL UserConfirm (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { WPARAM wParam = 0; int result = IDRETRY; BOOL status = YES; CUserParameters UserParams(request, op, msgnum, dfault, input, reply); switch (msgnum) { case HT_MSG_RETRY_PROXY_AUTH: result = AfxMessageBox(IDS_RETRY_PROXY_AUTH, MB_RETRYCANCEL | MB_ICONEXCLAMATION ); status = result==IDRETRY ? YES : NO; break; case HT_MSG_RETRY_AUTHENTICATION: result = AfxMessageBox(IDS_RETRY_AUTH, MB_RETRYCANCEL | MB_ICONEXCLAMATION ); status = result==IDRETRY ? YES : NO; break; case HT_MSG_CACHE_LOCK: result = AfxMessageBox(IDS_BREAK_CACHE_LOCK, MB_YESNO | MB_ICONSTOP | MB_DEFBUTTON2 ); status = result==IDYES ? YES : NO; break; default: status = YES; } return status; } PUBLIC BOOL UserPrompt (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { WPARAM wParam = 0; CUserParameters UserParams(request, op, msgnum, dfault, input, reply); return NO; } PUBLIC BOOL UserPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { WPARAM wParam = 0; CUserParameters UserParams(request, op, msgnum, dfault, input, reply); return NO; } PUBLIC BOOL UserNameAndPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { CUserParameters UserParams(request, op, msgnum, dfault, input, reply); CPassword AskUserNameAndPassword( &UserParams ); if (AskUserNameAndPassword.DoModal() == IDOK) { HTAlert_setReplyMessage(reply, AskUserNameAndPassword.m_username); HTAlert_setReplySecret(reply, AskUserNameAndPassword.m_password); return YES; } return NO; } ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// IMPLEMENT_DYNCREATE(CUserParameters, CObject) CUserParameters::CUserParameters() : CObject() { } CUserParameters::CUserParameters(HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { m_request = request; m_op = op; m_msgnum = msgnum; m_default = dfault; m_input = input; m_reply = reply; } CUserParameters::~CUserParameters() { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/UserParameters.h����������������������������������������������������������������������0100644�0000764�0000144�00000003433�06602560125�016065� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: UserParameters.h,v 1.4 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_UserParameters_H__B7CDBADF_C4DC_11D1_93E1_080009DCA30B__INCLUDED_) #define AFX_UserParameters_H__B7CDBADF_C4DC_11D1_93E1_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include "WWWLib.h" extern HTAlertCallback UserConfirm; extern HTAlertCallback UserPrompt; extern HTAlertCallback UserPassword; extern HTAlertCallback UserNameAndPassword; extern HTAlertCallback UserProgress; extern HTAlertCallback UserPrint; class CUserParameters : public CObject { DECLARE_DYNCREATE(CUserParameters) // Construction public: CUserParameters(HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply); CUserParameters(); ~CUserParameters(); HTRequest * m_request; HTAlertOpcode m_op; int m_msgnum; const char * m_default; void * m_input; HTAlertPar * m_reply; int m_type; char * m_buf; size_t m_bufLen; WPARAM * m_pWParam; }; #endif // !defined(AFX_UserParameters_H__B7CDBADF_C4DC_11D1_93E1_080009DCA30B__INCLUDED_) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/VersionConflict.cpp�������������������������������������������������������������������0100644�0000764�0000144�00000003272�06602560125�016566� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: VersionConflict.cpp,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** VersionConflict.cpp : implementation file */ #include "stdafx.h" #include "wincom.h" #include "VersionConflict.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CVersionConflict dialog CVersionConflict::CVersionConflict(CWnd* pParent /*=NULL*/) : CDialog(CVersionConflict::IDD, pParent) { //{{AFX_DATA_INIT(CVersionConflict) m_versionResolution = 0; //}}AFX_DATA_INIT } void CVersionConflict::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CVersionConflict) DDX_Radio(pDX, IDC_RESOLVE_CONFLICT1, m_versionResolution); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CVersionConflict, CDialog) //{{AFX_MSG_MAP(CVersionConflict) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CVersionConflict message handlers ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/VersionConflict.h���������������������������������������������������������������������0100644�0000764�0000144�00000003647�06602560125�016241� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: VersionConflict.h,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_VERSIONCONFLICT_H__AAC0C504_18AB_11D2_BA98_00A024AA28DE__INCLUDED_) #define AFX_VERSIONCONFLICT_H__AAC0C504_18AB_11D2_BA98_00A024AA28DE__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // VersionConflict.h : header file // ///////////////////////////////////////////////////////////////////////////// // CVersionConflict dialog class CVersionConflict : public CDialog { // Construction public: CVersionConflict(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CVersionConflict) enum { IDD = IDD_VERSION_CONFLICT }; int m_versionResolution; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CVersionConflict) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CVersionConflict) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_VERSIONCONFLICT_H__AAC0C504_18AB_11D2_BA98_00A024AA28DE__INCLUDED_) �����������������������������������������������������������������������������������������libwww/WinCom/WinCom.cpp����������������������������������������������������������������������������0100644�0000764�0000144�00000026210�06631524473�014660� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: WinCom.cpp,v 1.12 2025/12/03 15:07:39 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** WinCom.cpp : Defines the class behaviors for the application. */ #include "stdafx.h" #include "WinCom.h" #include "MainFrm.h" #include "WinComDoc.h" #include "TabsView.h" #include "Location.h" #include "EntityInfo.h" #include "Links.h" #include "ProxySetup.h" #include "CacheSetup.h" #include "Password.h" #include "VersionConflict.h" // From libwww #include "WWWLib.h" /* Global Library Include file */ #include "WWWApp.h" #include "WWWInit.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CWinComApp BEGIN_MESSAGE_MAP(CWinComApp, CWinApp) //{{AFX_MSG_MAP(CWinComApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_OPTIONS_PROXIES, OnOptionsProxies) ON_COMMAND(ID_CACHE_SETUP, OnCacheSetup) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CWinComApp construction CWinComApp::CWinComApp() { // TODO: add construction code here, m_pSourceList = NULL; m_pDestinationList = NULL; m_pLinkList = NULL; m_pLoadList = NULL; m_pDeleteList = NULL; m_detectVersionConflict = FALSE; m_showServerStatus = FALSE; // Place all significant initialization in InitInstance } ///////////////////////////////////////////////////////////////////////////// // The one and only CWinComApp object CWinComApp theApp; ///////////////////////////////////////////////////////////////////////////// // CWinComApp initialization BOOL CWinComApp::InitInstance() { // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif LoadStdProfileSettings(0); // Load standard INI file options (including MRU) /* Initialize libwww */ HTProfile_newNoCacheClient("WebCommander", "1.1"); /* Setup our own dialog handlers */ { //HTAlert_deleteAll(); HTAlert_add(UserProgress, HT_A_PROGRESS); HTAlert_add(UserPrint, HT_A_MESSAGE); HTAlert_add(UserConfirm, HT_A_CONFIRM); HTAlert_add(UserPrompt, HT_A_PROMPT); HTAlert_add(UserPassword, HT_A_SECRET); HTAlert_add(UserNameAndPassword, HT_A_USER_PW); } /* Setup our persistent cache */ CacheSetup.Init(); /* Set up amount of warning info wanted */ { m_showServerStatus = GetIniShowServerStatus(); int show_flag = m_showServerStatus ? HT_ERR_SHOW_PARS : 0; HTError_setShow((HTErrorShow) (HT_ERR_SHOW_INFO | show_flag)); } /* We don't care about case sensitivity when matching local files */ HTBind_caseSensitive(NO); CSingleDocTemplate * pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CWinComDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CTabsView)); AddDocTemplate(pDocTemplate); // Set up the MRU file lists static TCHAR BASED_CODE srcIniFileSection[] = _T("Most Recent Source Address"); static TCHAR BASED_CODE dstIniFileSection[] = _T("Most Recent Destination Address"); static TCHAR BASED_CODE lnkIniFileSection[] = _T("Most Recent Link Address"); static TCHAR BASED_CODE lodIniFileSection[] = _T("Most Recent Load Address"); static TCHAR BASED_CODE delIniFileSection[] = _T("Most Recent Delete Address"); static TCHAR BASED_CODE szIniFileEntry[] = _T("URI%d"); m_pSourceList = new CRecentFileList(1, srcIniFileSection, szIniFileEntry, MAX_LIST_LENGTH); m_pDestinationList = new CRecentFileList(1, dstIniFileSection, szIniFileEntry, MAX_LIST_LENGTH); m_pLinkList = new CRecentFileList(1, lnkIniFileSection, szIniFileEntry, MAX_LIST_LENGTH); m_pLoadList = new CRecentFileList(1, lodIniFileSection, szIniFileEntry, MAX_LIST_LENGTH); m_pDeleteList = new CRecentFileList(1, delIniFileSection, szIniFileEntry, MAX_LIST_LENGTH); ASSERT(m_pDestinationList != NULL); m_pDestinationList->ReadList(); ASSERT(m_pSourceList != NULL); m_pSourceList->ReadList(); ASSERT(m_pLinkList != NULL); m_pLinkList->ReadList(); ASSERT(m_pLoadList != NULL); m_pLoadList->ReadList(); ASSERT(m_pDeleteList != NULL); m_pDeleteList->ReadList(); // Setup proxies if (ProxySetup.GetProxyOptions() == TRUE) ProxySetup.RegisterProxies(); /* Create a new (empty) document */ OnFileNew(); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // INI implementation void CWinComApp::AddSourceToIniFile (LPCTSTR lpszPathName) { ASSERT(m_pSourceList != NULL); m_pSourceList->Add(lpszPathName); } int CWinComApp::GetSourceIniListSize (void) { ASSERT(m_pSourceList != NULL); return m_pSourceList->GetSize(); } void CWinComApp::AddDestinationToIniFile (LPCTSTR lpszPathName) { ASSERT(m_pDestinationList != NULL); m_pDestinationList->Add(lpszPathName); } int CWinComApp::GetDestinationIniListSize (void) { ASSERT(m_pDestinationList != NULL); return m_pDestinationList->GetSize(); } void CWinComApp::AddLoadAddressToIniFile (LPCTSTR lpszPathName) { ASSERT(m_pLoadList != NULL); m_pLoadList->Add(lpszPathName); } int CWinComApp::GetLoadAddressIniListSize (void) { ASSERT(m_pLoadList != NULL); return m_pLoadList->GetSize(); } void CWinComApp::AddDeleteAddressToIniFile (LPCTSTR lpszPathName) { ASSERT(m_pDeleteList != NULL); m_pDeleteList->Add(lpszPathName); } int CWinComApp::GetDeleteAddressIniListSize (void) { ASSERT(m_pDeleteList != NULL); return m_pDeleteList->GetSize(); } void CWinComApp::AddLinkToIniFile (LPCTSTR lpszPathName) { ASSERT(m_pLinkList != NULL); m_pLinkList->Add(lpszPathName); } int CWinComApp::GetLinkIniListSize(void) { ASSERT(m_pLinkList != NULL); return m_pLinkList->GetSize(); } static int FillComboBox (CRecentFileList * pList, CComboBox *pBox) { ASSERT(pList != NULL); ASSERT(pBox != NULL); int size = pList->GetSize(); int cnt; int index = 0; int status = 0; for (cnt=0; cnt<size; cnt++) { if ((* pList)[cnt]) { status = pBox->InsertString(index++, (* pList)[cnt]); if (status == CB_ERRSPACE || status == CB_ERR) break; } } return status; } int CWinComApp::FillLinkComboBox (CComboBox * pBox) { return FillComboBox(m_pLinkList, pBox); } int CWinComApp::FillSourceComboBox (CComboBox * pBox) { return FillComboBox(m_pSourceList, pBox); } int CWinComApp::FillDestinationComboBox (CComboBox * pBox) { return FillComboBox(m_pDestinationList, pBox); } int CWinComApp::FillLoadComboBox (CComboBox * pBox) { return FillComboBox(m_pLoadList, pBox); } int CWinComApp::FillDeleteComboBox (CComboBox * pBox) { return FillComboBox(m_pDeleteList, pBox); } BOOL CWinComApp::SetIniCWD (CString cwd) { CString strSection = "Application"; CString strCWD = "Current Directory"; m_currentDir = cwd; return WriteProfileString(strSection, strCWD, m_currentDir); } CString CWinComApp::GetIniCWD (void) { CString strSection = "Application"; CString strCWD = "Current Directory"; m_currentDir = GetProfileString(strSection, strCWD); return m_currentDir; } BOOL CWinComApp::SetIniDetectVersionConflict (BOOL detect) { CString strSection = "Application"; CString strCWD = "Detect Conflicts"; m_detectVersionConflict = detect; return WriteProfileInt(strSection, strCWD, m_detectVersionConflict); } BOOL CWinComApp::GetIniDetectVersionConflict (void) { CString strSection = "Application"; CString strCWD = "Detect Conflicts"; m_detectVersionConflict = GetProfileInt(strSection, strCWD, TRUE); return m_detectVersionConflict; } BOOL CWinComApp::SetIniShowServerStatus (BOOL show) { CString strSection = "Application"; CString strCWD = "Show Server Status"; m_showServerStatus = show; return WriteProfileInt(strSection, strCWD, m_showServerStatus); } BOOL CWinComApp::GetIniShowServerStatus (void) { CString strSection = "Application"; CString strCWD = "Show Server Status"; m_showServerStatus = GetProfileInt(strSection, strCWD, FALSE); return m_showServerStatus; } ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) // No message handlers //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() // App command to run the dialog void CWinComApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // CWinComApp commands int CWinComApp::Run() { // TODO: Add your specialized code here and/or call the base class return CWinApp::Run(); } int CWinComApp::ExitInstance() { /* Terminate cache */ CacheSetup.Terminate(); /* Terminate libwww */ HTProfile_delete(); ASSERT(m_pDestinationList != NULL); m_pDestinationList->WriteList(); delete m_pDestinationList; ASSERT(m_pSourceList != NULL); m_pSourceList->WriteList(); delete m_pSourceList; ASSERT(m_pLinkList != NULL); m_pLinkList->WriteList(); delete m_pLinkList; ASSERT(m_pLoadList != NULL); m_pLoadList->WriteList(); delete m_pLoadList; ASSERT(m_pDeleteList != NULL); m_pDeleteList->WriteList(); delete m_pDeleteList; return CWinApp::ExitInstance(); } void CWinComApp::OnOptionsProxies() { if (ProxySetup.DoModal() == IDOK) { ProxySetup.AddProxyOptionsToIni(); ProxySetup.RegisterProxies(); } } void CWinComApp::OnCacheSetup() { if (CacheSetup.DoModal() == IDOK) { CacheSetup.Terminate(); CacheSetup.Init(); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/WinCom.dsw����������������������������������������������������������������������������0100644�0000764�0000144�00000001027�06616717546�014702� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Microsoft Developer Studio Workspace File, Format Version 5.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "WinCom"=.\WinCom.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/WinCom.h������������������������������������������������������������������������������0100644�0000764�0000144�00000006616�06631524473�014335� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: WinCom.h,v 1.8 2025/12/03 15:07:39 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_WINCOM_H__CF29CB53_B627_11D1_93DF_080009DCA30B__INCLUDED_) #define AFX_WINCOM_H__CF29CB53_B627_11D1_93DF_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include <afxadv.h> #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif #include "resource.h" // main symbols #include "Request.h" // Added by ClassView #include "ProxySetup.h" // Added by ClassView #include "CacheSetup.h" // Added by ClassView #include "EntityInfo.h" // Added by ClassView #include "Location.h" // Added by ClassView #define MAX_LIST_LENGTH 8 ///////////////////////////////////////////////////////////////////////////// // CWinComApp: // See WinCom.cpp for the implementation of this class // class CWinComApp : public CWinApp { public: CWinComApp(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CWinComApp) public: virtual BOOL InitInstance(); virtual int Run(); virtual int ExitInstance(); //}}AFX_VIRTUAL // Operations void AddSourceToIniFile(LPCTSTR lpszPathName); int GetSourceIniListSize(void); int FillSourceComboBox (CComboBox * pBox); void AddDestinationToIniFile(LPCTSTR lpszPathName); int GetDestinationIniListSize(void); int FillDestinationComboBox (CComboBox * pBox); void AddLinkToIniFile(LPCTSTR lpszPathName); int GetLinkIniListSize(void); int FillLinkComboBox (CComboBox * pBox); void AddLoadAddressToIniFile(LPCTSTR lpszPathName); int GetLoadAddressIniListSize(void); int FillLoadComboBox (CComboBox * pBox); void AddDeleteAddressToIniFile(LPCTSTR lpszPathName); int GetDeleteAddressIniListSize(void); int FillDeleteComboBox (CComboBox * pBox); BOOL SetIniCWD (CString cwd); CString GetIniCWD (void); BOOL SetIniDetectVersionConflict (BOOL detect); BOOL GetIniDetectVersionConflict (void); BOOL SetIniShowServerStatus (BOOL show); BOOL GetIniShowServerStatus (void); // Implementation //{{AFX_MSG(CWinComApp) afx_msg void OnAppAbout(); afx_msg void OnOptionsProxies(); afx_msg void OnCacheSetup(); //}}AFX_MSG DECLARE_MESSAGE_MAP() protected: CString m_currentDir; CProxySetup ProxySetup; CCacheSetup CacheSetup; CRecentFileList * m_pSourceList; CRecentFileList * m_pDestinationList; CRecentFileList * m_pLinkList; CRecentFileList * m_pLoadList; CRecentFileList * m_pDeleteList; BOOL m_detectVersionConflict; BOOL m_showServerStatus; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_WINCOM_H__CF29CB53_B627_11D1_93DF_080009DCA30B__INCLUDED_) ������������������������������������������������������������������������������������������������������������������libwww/WinCom/WinCom.rc�����������������������������������������������������������������������������0100644�0000764�0000144�00000070244�07217662244�014510� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "#define _AFX_NO_SPLITTER_RESOURCES\r\n" "#define _AFX_NO_OLE_RESOURCES\r\n" "#define _AFX_NO_TRACKER_RESOURCES\r\n" "#define _AFX_NO_PROPERTY_RESOURCES\r\n" "\r\n" "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" "#ifdef _WIN32\r\n" "LANGUAGE 9, 1\r\n" "#pragma code_page(1252)\r\n" "#endif\r\n" "#include ""res\\WinCom.rc2"" // non-Microsoft Visual C++ edited resources\r\n" "#include ""afxres.rc"" // Standard components\r\n" "#include ""afxprint.rc"" // printing/print preview resources\r\n" "#endif\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDR_MAINFRAME ICON DISCARDABLE "res\\WinCom.ico" IDR_WINCOMTYPE ICON DISCARDABLE "res\\WinComDoc.ico" ///////////////////////////////////////////////////////////////////////////// // // Bitmap // IDR_MAINFRAME BITMAP MOVEABLE PURE "res\\Toolbar.bmp" IDB_LARGEICONS BITMAP DISCARDABLE "res\\Largeico.bmp" IDB_SMALLICONS BITMAP DISCARDABLE "res\\Smallico.bmp" IDB_STATEICONS BITMAP DISCARDABLE "res\\Stateico.bmp" ///////////////////////////////////////////////////////////////////////////// // // Toolbar // IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15 BEGIN BUTTON ID_FILE_NEW BUTTON ID_FILE_OPEN BUTTON ID_FILE_SAVE SEPARATOR BUTTON ID_EDIT_CUT BUTTON ID_EDIT_COPY BUTTON ID_EDIT_PASTE SEPARATOR BUTTON ID_FILE_PRINT BUTTON ID_APP_ABOUT BUTTON ID_CONTEXT_HELP END ///////////////////////////////////////////////////////////////////////////// // // Menu // IDR_MAINFRAME MENU PRELOAD DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&Load Document...", ID_LOAD_ADDRESS MENUITEM "&Delete Document...", ID_DELETE_ADDRESS MENUITEM SEPARATOR MENUITEM "E&xit", ID_APP_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO MENUITEM SEPARATOR MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE END POPUP "&Options" BEGIN MENUITEM "&Proxy Setup...", ID_OPTIONS_PROXIES MENUITEM "&Cache Setup...", ID_CACHE_SETUP MENUITEM SEPARATOR MENUITEM "&Detect Conflicts", ID_VERSION_CONFLICT MENUITEM "&Show Response Codes", ID_SHOW_SERVER_STATUS END POPUP "&Help" BEGIN MENUITEM "&Help Topics", ID_HELP_FINDER MENUITEM SEPARATOR MENUITEM "&About WebCommander...", ID_APP_ABOUT END END ///////////////////////////////////////////////////////////////////////////// // // Accelerator // IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE BEGIN "N", ID_FILE_NEW, VIRTKEY, CONTROL "O", ID_FILE_OPEN, VIRTKEY, CONTROL "S", ID_FILE_SAVE, VIRTKEY, CONTROL "P", ID_FILE_PRINT, VIRTKEY, CONTROL "Z", ID_EDIT_UNDO, VIRTKEY, CONTROL "X", ID_EDIT_CUT, VIRTKEY, CONTROL "C", ID_EDIT_COPY, VIRTKEY, CONTROL "V", ID_EDIT_PASTE, VIRTKEY, CONTROL VK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT VK_F6, ID_NEXT_PANE, VIRTKEY VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT VK_F1, ID_CONTEXT_HELP, VIRTKEY, SHIFT VK_F1, ID_HELP, VIRTKEY END ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 55 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About WinCom" FONT 8, "MS Sans Serif" BEGIN ICON IDR_MAINFRAME,IDC_STATIC,11,15,20,20 LTEXT "Henrik Frystyk Nielsen",IDC_STATIC,41,14,128,8 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP LTEXT "W3C Copyright (C) 1998-2001",IDC_STATIC,41,27,126,8 END IDD_LOCATION DIALOGEX 0, 0, 267, 98 STYLE WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Save Document" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN LTEXT "Source",IDC_STATIC,5,11,24,8 COMBOBOX IDC_SOURCE_URI,42,9,165,58,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, WS_EX_RTLREADING DEFPUSHBUTTON "Browse",ID_BROWSE,209,8,50,14 LTEXT "Destination",IDC_STATIC,5,27,36,8 COMBOBOX IDC_DESTINATION_URI,42,25,218,55,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, WS_EX_RTLREADING PUSHBUTTON "Submit",ID_SUBMIT,210,81,50,14 END IDD_ENTITY_INFO DIALOG DISCARDABLE 0, 0, 267, 98 STYLE WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Source Information" FONT 8, "MS Sans Serif" BEGIN LTEXT "Media type",IDC_STATIC,5,12,36,8 LTEXT "Encoding",IDC_STATIC,5,27,31,8 LTEXT "Language",IDC_STATIC,5,44,33,8 LTEXT "Charset",IDC_STATIC,5,60,25,8 COMBOBOX IDC_CONTENT_TYPE,42,9,84,56,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_TABSTOP COMBOBOX IDC_CONTENT_ENCODING,42,25,84,56,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_TABSTOP COMBOBOX IDC_CONTENT_LANGUAGE,42,42,84,56,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_TABSTOP COMBOBOX IDC_CONTENT_CHARSET,42,57,84,56,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_TABSTOP LTEXT "Length",IDC_STATIC,129,12,23,8 LTEXT "Last Modified",IDC_STATIC,129,27,43,8 LTEXT "Expires",IDC_STATIC,129,44,24,8 LTEXT "Entity Tag",IDC_STATIC,129,60,33,8 EDITTEXT IDC_CONTENT_LENGTH,174,9,86,13,ES_AUTOHSCROLL | ES_READONLY | ES_NUMBER EDITTEXT IDC_LAST_MODIFIED,174,25,86,13,ES_AUTOHSCROLL | ES_READONLY EDITTEXT IDC_EXPIRES,174,42,86,13,ES_AUTOHSCROLL | ES_READONLY | ES_NUMBER EDITTEXT IDC_ETAG,174,58,86,13,ES_AUTOHSCROLL | ES_READONLY | ES_NUMBER PUSHBUTTON "Guess",ID_GET_INFO,210,81,50,14 END IDD_PASSWORD DIALOG DISCARDABLE 0, 0, 186, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "User Name and Password" FONT 8, "MS Sans Serif" BEGIN EDITTEXT IDC_UID,58,26,121,14,ES_AUTOHSCROLL EDITTEXT IDC_PASSWORD,58,43,121,14,ES_PASSWORD | ES_AUTOHSCROLL LTEXT "Password",IDC_STATIC,16,45,32,8 LTEXT "User Name",IDC_STATIC,16,29,36,8 DEFPUSHBUTTON "OK",IDOK,77,61,50,14 PUSHBUTTON "Cancel",IDCANCEL,129,61,50,14 LTEXT "Realm",IDC_STATIC,16,13,21,8 EDITTEXT IDC_REALM,58,9,121,14,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP END IDD_LINKS DIALOGEX 0, 0, 267, 98 STYLE WS_CHILD | WS_CAPTION CAPTION "Link Relationships" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN LTEXT "Link Type",IDC_STATIC,5,12,32,8 COMBOBOX IDC_LINK_TYPE,42,9,84,56,CBS_DROPDOWN | CBS_SORT | WS_GROUP | WS_TABSTOP LTEXT "Destination",IDC_STATIC,5,27,36,8 COMBOBOX IDC_LINK,42,25,218,55,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP, WS_EX_RTLREADING CONTROL "Forward",IDC_LINK_REL,"Button",BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP | WS_TABSTOP,160,12,41,10 CONTROL "Reverse",IDC_LINK_REV,"Button",BS_AUTORADIOBUTTON | BS_NOTIFY,212,12,43,10 CONTROL "List2",IDC_LINK_RELS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SORTDESCENDING | WS_BORDER | WS_GROUP,6,40,254,39 PUSHBUTTON "Add",ID_LINK_ADD,157,81,50,14 PUSHBUTTON "Remove",ID_LINK_REMOVE,210,81,50,14,WS_DISABLED GROUPBOX "Direction",IDC_STATIC,147,3,113,21 END IDD_PROXIES DIALOG DISCARDABLE 0, 0, 259, 143 STYLE DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Proxy Setup" FONT 8, "MS Sans Serif" BEGIN GROUPBOX "Proxy Server",IDC_STATIC,7,7,245,67 LTEXT "Let all addresses matching this regular expression:", IDC_STATIC,13,18,158,8 COMBOBOX IDC_USE_PROXY,13,28,233,13,CBS_SIMPLE | CBS_SORT | WS_TABSTOP LTEXT "go through this proxy:",IDC_STATIC,13,46,68,8 COMBOBOX IDC_PROXY_SERVER,13,56,233,13,CBS_SIMPLE | CBS_SORT | WS_TABSTOP GROUPBOX "Exceptions",IDC_STATIC,7,79,245,40 LTEXT "Do not use any proxy for addresses matching this regular expression:", IDC_STATIC,13,90,216,8 COMBOBOX IDC_USE_NO_PROXY,13,100,233,13,CBS_SIMPLE | CBS_SORT | WS_TABSTOP DEFPUSHBUTTON "OK",IDOK,149,122,50,14 PUSHBUTTON "Cancel",IDCANCEL,202,122,50,14 END IDD_TABS DIALOG DISCARDABLE 0, 0, 298, 110 STYLE WS_CHILD FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "Submit",IDOK,238,12,50,14 CONTROL "Tab1",IDC_TABSMENU,"SysTabControl32",0x0,6,7,227,96 END IDD_VERSION_CONFLICT DIALOG DISCARDABLE 0, 0, 204, 90 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Version Conflict" FONT 8, "MS Sans Serif" BEGIN LTEXT "The version you are trying to save differs from the current version on the server. How do you want to proceed?", IDC_STATIC,14,10,176,27 CONTROL "Replace the current version on the server", IDC_RESOLVE_CONFLICT1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,26,40,147,10 CONTROL "Download the current version from the server", IDC_RESOLVE_CONFLICT2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,26,52,157,10 DEFPUSHBUTTON "OK",IDOK,95,69,50,14,WS_GROUP PUSHBUTTON "Abort",IDCANCEL,147,69,50,14,WS_GROUP END IDD_LOAD DIALOGEX 0, 0, 267, 101 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Load Document" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN LTEXT "Load a document and save it to local file...", IDC_STATIC,5,7,134,8 LTEXT "Address",IDC_STATIC,5,22,26,8 COMBOBOX IDC_LOAD_ADDRESS,42,20,218,55,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | WS_TABSTOP, WS_EX_RTLREADING CONTROL "Get nearest fresh version",IDC_CACHE_VALIDATION,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,26,38,95,10 CONTROL "Force validation at nearest remote cache", IDC_CACHE_VALIDATE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,26,49,145,10 CONTROL "Force validation at origin server", IDC_CACHE_END_VALIDATE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,26,60,114,10 CONTROL "Force full reload",IDC_CACHE_RELOAD,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,26,71,66,10 DEFPUSHBUTTON "Load",IDOK,158,80,50,14,WS_GROUP PUSHBUTTON "Cancel",IDCANCEL,210,80,50,14,WS_GROUP END IDD_PROGRESS DIALOG DISCARDABLE 0, 0, 211, 66 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION CAPTION "Operation in Progress..." FONT 8, "MS Sans Serif" BEGIN PUSHBUTTON "Cancel",IDCANCEL,154,46,50,14 CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER,7, 24,197,14 LTEXT "Working...",IDC_STATIC,8,11,38,8 END IDD_DELETE DIALOGEX 0, 0, 267, 63 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Delete Document" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN LTEXT "Remove a document on a remote server...",IDC_STATIC,5,7, 134,8 LTEXT "Address",IDC_STATIC,5,25,26,8 COMBOBOX IDC_DELETE_ADDRESS,42,23,218,55,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, WS_EX_RTLREADING PUSHBUTTON "Delete",IDOK,158,42,50,14 DEFPUSHBUTTON "Cancel",IDCANCEL,210,42,50,14 END IDD_CACHE_SETUP DIALOG DISCARDABLE 0, 0, 258, 106 STYLE DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Cache Setup" FONT 8, "MS Sans Serif" BEGIN GROUPBOX "Cache Root",IDC_STATIC,7,7,244,29 COMBOBOX IDC_CACHE_ROOT,13,17,232,13,CBS_SIMPLE | CBS_SORT | WS_DISABLED | WS_TABSTOP GROUPBOX "Cache Parameters",IDC_STATIC,7,38,244,43 LTEXT "Total Cache Size",IDC_STATIC,13,49,55,8 COMBOBOX IDC_CACHE_SIZE_T,86,47,26,13,CBS_SIMPLE | CBS_SORT | WS_TABSTOP CONTROL "Spin3",IDC_CACHE_SPIN_T,"msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,103,46,9,15 LTEXT "MBytes",IDC_STATIC,115,49,24,8 DEFPUSHBUTTON "Flush Cache",ID_CACHE_FLUSH,162,46,50,14 LTEXT "Max Size of Single File",IDC_STATIC,13,67,72,8 COMBOBOX IDC_CACHE_SIZE_S,86,64,26,13,CBS_SIMPLE | CBS_SORT | WS_TABSTOP CONTROL "Spin3",IDC_CACHE_SPIN_S,"msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,102,64,9,15 LTEXT "MBytes",IDC_STATIC,114,67,24,8 CONTROL "Cache Enabled",IDC_CACHE_ENABLE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,161,63,61,16 DEFPUSHBUTTON "OK",IDOK,148,85,50,14 PUSHBUTTON "Cancel",IDCANCEL,201,85,50,14 END #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "\0" VALUE "FileDescription", "WinCom MFC Application\0" VALUE "FileVersion", "1, 0, 0, 1\0" VALUE "InternalName", "WebCommander\0" VALUE "LegalCopyright", "Copyright (C) 1998-2001\0" VALUE "LegalTrademarks", "W3C\0" VALUE "OriginalFilename", "WinCom.exe\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "WebCommander Application\0" VALUE "ProductVersion", "1, 0, 0, 1\0" VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // !_MAC ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO DISCARDABLE BEGIN IDD_ABOUTBOX, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 210 TOPMARGIN, 7 BOTTOMMARGIN, 48 END IDD_LOCATION, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 260 TOPMARGIN, 7 BOTTOMMARGIN, 91 END IDD_ENTITY_INFO, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 260 TOPMARGIN, 7 BOTTOMMARGIN, 91 END IDD_PASSWORD, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 179 TOPMARGIN, 7 BOTTOMMARGIN, 75 END IDD_LINKS, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 260 TOPMARGIN, 7 BOTTOMMARGIN, 91 END IDD_PROXIES, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 252 TOPMARGIN, 7 BOTTOMMARGIN, 136 END IDD_TABS, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 291 TOPMARGIN, 7 BOTTOMMARGIN, 103 END IDD_VERSION_CONFLICT, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 197 TOPMARGIN, 7 BOTTOMMARGIN, 82 END IDD_LOAD, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 260 TOPMARGIN, 7 BOTTOMMARGIN, 94 END IDD_PROGRESS, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 204 TOPMARGIN, 7 BOTTOMMARGIN, 59 END IDD_DELETE, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 260 TOPMARGIN, 7 BOTTOMMARGIN, 56 END IDD_CACHE_SETUP, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 251 TOPMARGIN, 7 BOTTOMMARGIN, 99 END END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Dialog Info // IDD_LINKS DLGINIT BEGIN IDC_LINK_TYPE, 0x403, 11, 0 0x7473, 0x6c79, 0x7365, 0x6568, 0x7465, "\000" IDC_LINK_TYPE, 0x403, 6, 0 0x6e69, 0x6564, 0x0078, IDC_LINK_TYPE, 0x403, 5, 0 0x7270, 0x7665, "\000" IDC_LINK_TYPE, 0x403, 5, 0 0x656e, 0x7478, "\000" IDC_LINK_TYPE, 0x403, 4, 0 0x6f74, 0x0063, IDC_LINK_TYPE, 0x403, 3, 0 0x7075, "\000" IDC_LINK_TYPE, 0x403, 5, 0 0x6f64, 0x6e77, "\000" 0 END IDD_ENTITY_INFO DLGINIT BEGIN IDC_CONTENT_TYPE, 0x403, 10, 0 0x6574, 0x7478, 0x682f, 0x6d74, 0x006c, IDC_CONTENT_TYPE, 0x403, 11, 0 0x6574, 0x7478, 0x702f, 0x616c, 0x6e69, "\000" IDC_CONTENT_TYPE, 0x403, 10, 0 0x6d69, 0x6761, 0x2f65, 0x6967, 0x0066, IDC_CONTENT_TYPE, 0x403, 10, 0 0x6d69, 0x6761, 0x2f65, 0x6e70, 0x0067, IDC_CONTENT_ENCODING, 0x403, 9, 0 0x6f63, 0x706d, 0x6572, 0x7373, "\000" IDC_CONTENT_ENCODING, 0x403, 9, 0 0x6469, 0x6e65, 0x6974, 0x7974, "\000" IDC_CONTENT_ENCODING, 0x403, 8, 0 0x6564, 0x6c66, 0x7461, 0x0065, IDC_CONTENT_ENCODING, 0x403, 5, 0 0x7a67, 0x7069, "\000" IDC_CONTENT_LANGUAGE, 0x403, 3, 0 0x6e65, "\000" IDC_CONTENT_LANGUAGE, 0x403, 3, 0 0x7266, "\000" IDC_CONTENT_LANGUAGE, 0x403, 3, 0 0x706a, "\000" IDC_CONTENT_LANGUAGE, 0x403, 3, 0 0x6164, "\000" IDC_CONTENT_LANGUAGE, 0x403, 3, 0 0x6567, "\000" IDC_CONTENT_LANGUAGE, 0x403, 3, 0 0x6573, "\000" IDC_CONTENT_LANGUAGE, 0x403, 3, 0 0x6f6e, "\000" IDC_CONTENT_CHARSET, 0x403, 12, 0 0x7369, 0x2d6f, 0x3032, 0x3232, 0x6a2d, 0x0070, IDC_CONTENT_CHARSET, 0x403, 11, 0 0x7369, 0x2d6f, 0x3838, 0x3935, 0x312d, "\000" IDC_CONTENT_CHARSET, 0x403, 11, 0 0x7369, 0x2d6f, 0x3838, 0x3935, 0x322d, "\000" IDC_CONTENT_CHARSET, 0x403, 11, 0 0x7369, 0x2d6f, 0x3838, 0x3935, 0x332d, "\000" IDC_CONTENT_CHARSET, 0x403, 11, 0 0x7369, 0x2d6f, 0x3838, 0x3935, 0x342d, "\000" IDC_CONTENT_CHARSET, 0x403, 12, 0 0x6e75, 0x6369, 0x646f, 0x2d65, 0x2d31, 0x0031, IDC_CONTENT_CHARSET, 0x403, 6, 0 0x7475, 0x2d66, 0x0037, IDC_CONTENT_CHARSET, 0x403, 6, 0 0x7475, 0x2d66, 0x0038, 0 END ///////////////////////////////////////////////////////////////////////////// // // String Table // STRINGTABLE PRELOAD DISCARDABLE BEGIN AFX_IDS_APP_TITLE "WebCommander" AFX_IDS_IDLEMESSAGE "Ready" AFX_IDS_HELPMODEMESSAGE "Select an object on which to get Help" END STRINGTABLE DISCARDABLE BEGIN ID_INDICATOR_EXT "EXT" ID_INDICATOR_CAPS "CAP" ID_INDICATOR_NUM "NUM" ID_INDICATOR_SCRL "SCRL" ID_INDICATOR_OVR "OVR" ID_INDICATOR_REC "REC" END STRINGTABLE DISCARDABLE BEGIN ID_FILE_NEW "Create a new document\nNew" ID_FILE_OPEN "Open an existing document\nOpen" ID_FILE_CLOSE "Close the active document\nClose" ID_FILE_SAVE "Save the active document\nSave" ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup" ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup" ID_FILE_PRINT "Print the active document\nPrint" ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview" END STRINGTABLE DISCARDABLE BEGIN ID_APP_ABOUT "Display program information, version number and copyright\nAbout" ID_APP_EXIT "Quit the application\nExit" ID_HELP_INDEX "Opens Help\nHelp Topics" ID_HELP_FINDER "List Help topics\nHelp Topics" ID_HELP_USING "Display instructions about how to use help\nHelp" ID_CONTEXT_HELP "Display help for clicked on buttons, menus and windows\nHelp" ID_HELP "Display help for current task or command\nHelp" END STRINGTABLE DISCARDABLE BEGIN ID_FILE_MRU_FILE1 "Open this document" ID_FILE_MRU_FILE2 "Open this document" ID_FILE_MRU_FILE3 "Open this document" ID_FILE_MRU_FILE4 "Open this document" ID_FILE_MRU_FILE5 "Open this document" ID_FILE_MRU_FILE6 "Open this document" ID_FILE_MRU_FILE7 "Open this document" ID_FILE_MRU_FILE8 "Open this document" ID_FILE_MRU_FILE9 "Open this document" ID_FILE_MRU_FILE10 "Open this document" ID_FILE_MRU_FILE11 "Open this document" ID_FILE_MRU_FILE12 "Open this document" ID_FILE_MRU_FILE13 "Open this document" ID_FILE_MRU_FILE14 "Open this document" ID_FILE_MRU_FILE15 "Open this document" ID_FILE_MRU_FILE16 "Open this document" END STRINGTABLE DISCARDABLE BEGIN ID_NEXT_PANE "Switch to the next window pane\nNext Pane" ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" END STRINGTABLE DISCARDABLE BEGIN ID_WINDOW_SPLIT "Split the active window into panes\nSplit" END STRINGTABLE DISCARDABLE BEGIN ID_EDIT_CLEAR "Erase the selection\nErase" ID_EDIT_CLEAR_ALL "Erase everything\nErase All" ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" ID_EDIT_FIND "Find the specified text\nFind" ID_EDIT_PASTE "Insert Clipboard contents\nPaste" ID_EDIT_REPEAT "Repeat the last action\nRepeat" ID_EDIT_REPLACE "Replace specific text with different text\nReplace" ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" ID_EDIT_UNDO "Undo the last action\nUndo" ID_EDIT_REDO "Redo the previously undone action\nRedo" END STRINGTABLE DISCARDABLE BEGIN ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle ToolBar" ID_VIEW_STATUS_BAR "Show or hide the status bar\nToggle StatusBar" END STRINGTABLE DISCARDABLE BEGIN AFX_IDS_SCSIZE "Change the window size" AFX_IDS_SCMOVE "Change the window position" AFX_IDS_SCMINIMIZE "Reduce the window to an icon" AFX_IDS_SCMAXIMIZE "Enlarge the window to full size" AFX_IDS_SCNEXTWINDOW "Switch to the next document window" AFX_IDS_SCPREVWINDOW "Switch to the previous document window" AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents" END STRINGTABLE DISCARDABLE BEGIN AFX_IDS_SCRESTORE "Restore the window to normal size" AFX_IDS_SCTASKLIST "Activate Task List" END STRINGTABLE DISCARDABLE BEGIN AFX_IDS_PREVIEW_CLOSE "Close print preview mode\nCancel Preview" IDS_SOURCE "Source:" IDS_CANNOT_OPEN_FILE "Can't open source file" IDS_CANNOT_WRITE_TO_DESTINATION "Destination address must be of type ""http""" IDS_CANNOT_READ_FILE "Can't read local file" IDS_SUBMIT "Submit" IDS_RETRY_PROXY_AUTH "Proxy Authentication failed - retry?" IDS_RETRY_AUTH "Authentication failed - retry?" IDS_VERSION_CONFLICT "The version of the document that you are trying to save seems to be older than the existing version. Do you want to replace the existing version, download " END STRINGTABLE DISCARDABLE BEGIN ID_PROXY_SETUP "Access the Internet through one or more proxy servers" ID_OPTIONS_PROXIES "Define Proxies\nProxy Setup" ID_VERSION_CONFLICT "Detect Version Conflicts\nDetect Version Conflicts" ID_SHOW_SERVER_STATUS "Show the Server's Response Status Message\nShow the Server's Response Status Message" IP_CHECK_UPGRADE "Check the W3C site for available Upgrades\nCheck the W3C site for available Upgrades" ID_LOAD_ADDRESS "Load a Document\nLoad a Remote Document" ID_DELETE_DOCUMENT "Delete Document\nDelete Remote Document" ID_DELETE_ADDRESS "Delete a Document\nDelete a Remote Document" END STRINGTABLE DISCARDABLE BEGIN IDS_APP_VERSION "1.02" IDS_APP_UPGRADE "Do you want to check the W3C site to see if an upgrade is available?" IDS_BREAK_CACHE_LOCK "The persistent cache is currently locked. This may indicate that the cache is already in use.\n\nIf you are absolutely sure this is not the case then you can delete the lock.\n\nDo you want to delete the lock?" ID_APP_UPGRADE "Do you want to check the W3C site to see if an upgrade is available?" END STRINGTABLE DISCARDABLE BEGIN IDR_MAINFRAME "WebCommander\n\nWebCommander\n\n\nWebCommander.Document\nWebCommander Document" END STRINGTABLE DISCARDABLE BEGIN ID_CACHE_SETUP "Setup Persistent Cache\nSetup Persistent Cache" END #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // #define _AFX_NO_SPLITTER_RESOURCES #define _AFX_NO_OLE_RESOURCES #define _AFX_NO_TRACKER_RESOURCES #define _AFX_NO_PROPERTY_RESOURCES #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE 9, 1 #pragma code_page(1252) #endif #include "res\WinCom.rc2" // non-Microsoft Visual C++ edited resources #include "afxres.rc" // Standard components #include "afxprint.rc" // printing/print preview resources #endif ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/WinComDoc.cpp�������������������������������������������������������������������������0100644�0000764�0000144�00000015244�06625051225�015304� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: WinComDoc.cpp,v 1.7 2025/11/19 17:17:09 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** WinComDoc.cpp : implementation of the CWinComDoc class */ #include "stdafx.h" #include "WinCom.h" #include "WinComDoc.h" #include "Load.h" #include "Delete.h" // From libwww #include "WWWLib.h" #include "WWWApp.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define WEBCOMMANDER_LATEST "http://www.w3.org/WinCom/WinCom.zip" #define WEBCOMMANDER_THIS "http://www.w3.org/WinCom/WinCom-0.984.zip" ///////////////////////////////////////////////////////////////////////////// // CWinComDoc IMPLEMENT_DYNCREATE(CWinComDoc, CDocument) BEGIN_MESSAGE_MAP(CWinComDoc, CDocument) //{{AFX_MSG_MAP(CWinComDoc) ON_COMMAND(ID_VERSION_CONFLICT, OnVersionConflict) ON_UPDATE_COMMAND_UI(ID_VERSION_CONFLICT, OnUpdateVersionConflict) ON_COMMAND(ID_SHOW_SERVER_STATUS, OnShowServerStatus) ON_UPDATE_COMMAND_UI(ID_SHOW_SERVER_STATUS, OnUpdateShowServerStatus) ON_COMMAND(ID_APP_UPGRADE, OnAppUpgrade) ON_COMMAND(ID_LOAD_ADDRESS, OnLoadAddress) ON_COMMAND(ID_DELETE_ADDRESS, OnDeleteAddress) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CWinComDoc construction/destruction CWinComDoc::CWinComDoc() { CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); m_cwd = HTGetCurrentDirectoryURL(); m_detectVersionConflict = pApp->GetIniDetectVersionConflict(); m_showServerStatus = pApp->GetIniShowServerStatus(); } CWinComDoc::~CWinComDoc() { CWinComApp * pApp = (CWinComApp *) AfxGetApp(); ASSERT(pApp != NULL); HT_FREE(m_cwd); pApp->SetIniDetectVersionConflict(m_detectVersionConflict); pApp->SetIniShowServerStatus(m_showServerStatus); } BOOL CWinComDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: add reinitialization code here // (SDI documents will reuse this document) return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CWinComDoc serialization void CWinComDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } } ///////////////////////////////////////////////////////////////////////////// // CWinComDoc diagnostics #ifdef _DEBUG void CWinComDoc::AssertValid() const { CDocument::AssertValid(); } void CWinComDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CWinComDoc handling of created request objects BOOL CWinComDoc::AddRequest (CRequest * pRequest) { return TRUE; } BOOL CWinComDoc::DeleteRequest (CRequest * pRequest) { return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CWinComDoc commands BOOL CWinComDoc::SaveDocument() { CRequest * request = new CRequest(this); HTAnchor * source = NULL; HTAnchor * destination = NULL; // Create the source anchor char * src = HTParse(m_Location.m_source, m_cwd, PARSE_ALL); source = HTAnchor_findAddress(src); HT_FREE(src); /* If destination is not http://... then error */ if (!m_Location.m_destination.IsEmpty()) { char * access = HTParse(m_Location.m_destination, "", PARSE_ACCESS); if (strcasecomp(access, "http")) { CString strMessage; AfxFormatString1(strMessage, IDS_CANNOT_WRITE_TO_DESTINATION, m_Location.m_destination); AfxMessageBox(strMessage); HT_FREE(access); return FALSE; } else { char * dest = HTParse(m_Location.m_destination, m_cwd, PARSE_ALL); destination = HTAnchor_findAddress(dest); HT_FREE(dest); HT_FREE(access); } } // Do we have any metadata to set up? { HTParentAnchor * source_parent = HTAnchor_parent(source); if (!m_EntityInfo.m_mediaType.IsEmpty()) { HTAnchor_setFormat(source_parent, HTAtom_for(m_EntityInfo.m_mediaType)); } if (!m_EntityInfo.m_contentEncoding.IsEmpty()) { HTAnchor_deleteEncodingAll(source_parent); HTAnchor_addEncoding(source_parent, HTAtom_for(m_EntityInfo.m_contentEncoding)); } if (!m_EntityInfo.m_charset.IsEmpty()) { HTAnchor_setCharset(source_parent, HTAtom_for(m_EntityInfo.m_charset)); } if (!m_EntityInfo.m_language.IsEmpty()) { HTAnchor_deleteLanguageAll(source_parent); HTAnchor_addLanguage(source_parent, HTAtom_for(m_EntityInfo.m_language)); } } // Do we have any link relationships to set up? m_Links.AddLinkRelationships(source); /* Start the request */ if (m_detectVersionConflict) { char * etag = HTAnchor_etag(HTAnchor_parent(destination)); if (etag) { request->PutDocument(source, destination, HT_MATCH_THIS); } else { request->PutDocumentWithPrecheck(source, destination); } } else { request->PutDocument(source, destination, HT_NO_MATCH); } return TRUE; } void CWinComDoc::OnVersionConflict() { m_detectVersionConflict = !m_detectVersionConflict; } void CWinComDoc::OnUpdateVersionConflict(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_detectVersionConflict); } void CWinComDoc::OnShowServerStatus() { m_showServerStatus = !m_showServerStatus; int show_flag = m_showServerStatus ? HT_ERR_SHOW_PARS : 0; HTError_setShow((HTErrorShow) (HT_ERR_SHOW_INFO | show_flag)); } void CWinComDoc::OnUpdateShowServerStatus(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_showServerStatus); } void CWinComDoc::OnAppUpgrade() { if (AfxMessageBox(IDS_APP_UPGRADE, MB_YESNO | MB_ICONEXCLAMATION )) { #if 0 CRequest * request = new CRequest(this); request->m_pHTAnchor = HTAnchor_findAddress(WEBCOMMANDER_THIS); request->CheckDocument(FALSE); #endif } } void CWinComDoc::OnLoadAddress() { CLoad * load = new CLoad(this); load->DoModal(); } void CWinComDoc::OnDeleteAddress() { CDelete * del = new CDelete(this); del->DoModal(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/WinComDoc.h���������������������������������������������������������������������������0100644�0000764�0000144�00000005035�06602560125�014745� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: WinComDoc.h,v 1.6 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_WINCOMDOC_H__CF29CB59_B627_11D1_93DF_080009DCA30B__INCLUDED_) #define AFX_WINCOMDOC_H__CF29CB59_B627_11D1_93DF_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include "Links.h" #include "EntityInfo.h" #include "Location.h" #include "ProxySetup.h" class CRequest; class CWinComDoc : public CDocument { protected: // create from serialization only CWinComDoc(); DECLARE_DYNCREATE(CWinComDoc) // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CWinComDoc) public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); //}}AFX_VIRTUAL // Implementation public: BOOL AddRequest (CRequest * pRequest); BOOL DeleteRequest (CRequest * pRequest); BOOL SaveDocument (); char * m_cwd; // CList m_ActiveRequests; CProxySetup m_ProxySetup; CLocation m_Location; CEntityInfo m_EntityInfo; CLinks m_Links; virtual ~CWinComDoc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: BOOL m_detectVersionConflict; BOOL m_showServerStatus; // Generated message map functions protected: //{{AFX_MSG(CWinComDoc) afx_msg void OnVersionConflict(); afx_msg void OnUpdateVersionConflict(CCmdUI* pCmdUI); afx_msg void OnShowServerStatus(); afx_msg void OnUpdateShowServerStatus(CCmdUI* pCmdUI); afx_msg void OnAppUpgrade(); afx_msg void OnLoadAddress(); afx_msg void OnDeleteAddress(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_WINCOMDOC_H__CF29CB59_B627_11D1_93DF_080009DCA30B__INCLUDED_) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/WinComView.cpp������������������������������������������������������������������������0100644�0000764�0000144�00000007261�06602560125�015510� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: WinComView.cpp,v 1.3 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** WinComView.cpp : implementation of the CWinComView class */ #include "stdafx.h" #include "WinCom.h" #include "WinComDoc.h" #include "WinComView.h" #include "Location.h" #include "EntityInfo.h" #include "Links.h" #include "Password.h" // From libwww #include "WWWLib.h" /* Global Library Include file */ #include "WWWApp.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CWinComView IMPLEMENT_DYNCREATE(CWinComView, CFormView) BEGIN_MESSAGE_MAP(CWinComView, CFormView) //{{AFX_MSG_MAP(CWinComView) ON_BN_CLICKED(IDOK, OnSubmit) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CWinComView construction/destruction CWinComView::CWinComView() : CFormView(CWinComView::IDD) { //{{AFX_DATA_INIT(CWinComView) //}}AFX_DATA_INIT } CWinComView::~CWinComView() { } BOOL CWinComView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CFormView::PreCreateWindow(cs); } void CWinComView::OnInitialUpdate() { CFormView::OnInitialUpdate(); } ///////////////////////////////////////////////////////////////////////////// // CWinComView drawing void CWinComView::OnDraw(CDC* pDC) { CWinComDoc * doc = GetDocument(); ASSERT_VALID(doc); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); // Create the tab pages TC_ITEM TabCtrlItem; TabCtrlItem.mask = TCIF_TEXT; TabCtrlItem.pszText = "Location"; m_Tabs.InsertItem( 0, &TabCtrlItem ); #if 0 TabCtrlItem.pszText = "Natural Gas"; m_Tabs.InsertItem( 1, &TabCtrlItem ); TabCtrlItem.pszText = "Kryptonite"; m_Tabs.InsertItem( 2, &TabCtrlItem ); #endif } ///////////////////////////////////////////////////////////////////////////// // CWinComView printing BOOL CWinComView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CWinComView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CWinComView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CWinComView diagnostics #ifdef _DEBUG void CWinComView::AssertValid() const { CFormView::AssertValid(); } void CWinComView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CWinComDoc* CWinComView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWinComDoc))); return (CWinComDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CWinComView message handlers �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/WinComView.h��������������������������������������������������������������������������0100644�0000764�0000144�00000004535�06602560125�015156� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#) $Id: WinComView.h,v 1.2 2025/09/25 00:14:13 frystyk Exp $ ** ** W3C Web Commander can be found at "http://www.w3.org/WinCom/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. */ #if !defined(AFX_WINCOMVIEW_H__CF29CB5B_B627_11D1_93DF_080009DCA30B__INCLUDED_) #define AFX_WINCOMVIEW_H__CF29CB5B_B627_11D1_93DF_080009DCA30B__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class CWinComView : public CView { protected: // create from serialization only CWinComView(); DECLARE_DYNCREATE(CWinComView) // Attributes public: CWinComDoc* GetDocument(); // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CWinComView) public: virtual void OnDraw(CDC* pDC); // overridden to draw this view virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); //}}AFX_VIRTUAL // Implementation public: virtual ~CWinComView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generated message map functions protected: //{{AFX_MSG(CWinComView) // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #ifndef _DEBUG // debug version in WinComView.cpp inline CWinComDoc* CWinComView::GetDocument() { return (CWinComDoc*)m_pDocument; } #endif ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_WINCOMVIEW_H__CF29CB5B_B627_11D1_93DF_080009DCA30B__INCLUDED_) �������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/resource.h����������������������������������������������������������������������������0100644�0000764�0000144�00000011307�06631524473�014761� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by WinCom.rc // #define IDD_ABOUTBOX 100 #define ID_ANIMATION 101 #define IDR_MAINFRAME 128 #define IDR_WINCOMTYPE 129 #define IDD_OPTIONS 130 #define IDD_LOCATION 131 #define IDD_ENTITY_INFO 132 #define IDD_PROMPT 134 #define IDD_SUBMIT 134 #define IDD_CONFIRM 135 #define IDD_PASSWORD 136 #define IDD_LINKS 137 #define IDD_TABCTRL 139 #define IDD_PROXIES 140 #define IDD_TABS 141 #define IDB_LARGEICONS 146 #define IDB_SMALLICONS 150 #define IDB_STATEICONS 151 #define IDD_VERSION_CONFLICT 153 #define IDD_LOAD 154 #define IDD_PROGRESS 155 #define IDD_DELETE 156 #define IDD_CACHE_SETUP 160 #define IDC_SOURCE_URI 1001 #define IDC_DESTINATION_URI 1002 #define IDC_MEDIA_TYPE 1002 #define IDC_CONTENT_ENCODING 1003 #define IDC_CONTENT_LANGUAGE 1004 #define IDC_MEDIA_CHARSET 1005 #define IDC_PROXY 1005 #define IDC_CONTENT_CHARSET 1005 #define IDC_MEDIA_LANGUAGE 1006 #define IDC_UID 1006 #define IDC_PROXY_PREFIX 1006 #define IDC_CONTENT_TYPE 1006 #define IDC_PASSWORD 1007 #define IDC_ETAG 1007 #define IDC_MAX_AGE 1008 #define IDC_REALM 1008 #define IDC_EXPIRES 1008 #define ID_BROWSE 1009 #define ID_SUBMIT 1010 #define ID_CACHE_FLUSH 1010 #define IDC_LINK_TYPE 1011 #define ID_CANCEL 1011 #define ID_LINK_REMOVE 1012 #define IDC_CONTENT_LENGTH 1015 #define IDC_LAST_MODIFIED 1016 #define IDC_LINK 1018 #define IDC_TAB1 1019 #define IDC_TABSMENU 1019 #define IDC_PROXY_SERVER 1020 #define IDC_USE_PROXY 1021 #define ID_GET_INFO 1022 #define IDC_USE_NO_PROXY 1022 #define IDC_LINK_REL 1024 #define IDC_LINK_REV 1025 #define IDC_LINK_RELS 1027 #define ID_LINK_ADD 1028 #define IDC_RESOLVE_CONFLICT1 1030 #define IDC_RESOLVE_CONFLICT2 1031 #define IDC_LOAD_ADDRESS 1031 #define IDC_CACHE_VALIDATE 1032 #define IDC_PROGRESS 1033 #define IDC_CACHE_END_VALIDATE 1033 #define IDC_DELETE_ADDRESS 1034 #define IDC_CACHE_RELOAD 1034 #define IDC_CACHE_VALIDATION 1035 #define IDC_CACHE_SPIN_T 1044 #define IDC_CACHE_SIZE_T 1045 #define IDC_CACHE_SIZE_S 1046 #define IDC_CACHE_SPIN_S 1047 #define IDC_CACHE_ENABLE 1048 #define IDC_CACHE_ROOT 1049 #define ID_PROXY_SETUP 32771 #define ID_OPTIONS_PROXIES 32772 #define ID_VERSION_CONFLICT 32777 #define ID_SHOW_SERVER_STATUS 32778 #define IP_CHECK_UPGRADE 32779 #define ID_LOAD_ADDRESS 32781 #define ID_DELETE_DOCUMENT 32782 #define ID_DELETE_ADDRESS 32783 #define ID_CACHE_SETUP 32784 #define IDS_WINCOM 61446 #define IDS_SOURCE 61447 #define IDS_CANNOT_OPEN_FILE 61448 #define IDS_CANNOT_WRITE_TO_FILE 61449 #define IDS_CANNOT_WRITE_TO_DESTINATION 61449 #define IDS_CANNOT_READ_FILE 61451 #define IDS_SUBMIT 61452 #define IDS_RETRY_PROXY_AUTH 61453 #define IDS_RETRY_AUTH 61454 #define IDS_VERSION_CONFLICT 61455 #define IDS_APP_VERSION 61456 #define IDS_APP_UPGRADE 61457 #define IDS_BREAK_CACHE_LOCK 61459 #define ID_APP_UPGRADE 61460 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 161 #define _APS_NEXT_COMMAND_VALUE 32786 #define _APS_NEXT_CONTROL_VALUE 1050 #define _APS_NEXT_SYMED_VALUE 102 #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520577�013546� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/CVS/������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517411�014172� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/CVS/Root��������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517410�015035� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/CVS/Repository��������������������������������������������������������������������0100644�0000764�0000144�00000000022�07405517410�016262� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/CVS/Entries�����������������������������������������������������������������������0100644�0000764�0000144�00000002350�07405517411�015523� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/AfxCore.rtf/1.1/Sun May 24 17:59:38 1998// /AfxPrint.rtf/1.1/Sun May 24 17:59:38 1998// /AppExit.bmp/1.1/Sun May 24 18:10:43 1998/-kb/ /Bullet.bmp/1.1/Sun May 24 18:10:44 1998/-kb/ /CurArw2.bmp/1.1/Sun May 24 18:10:44 1998/-kb/ /CurArw4.bmp/1.1/Sun May 24 18:10:44 1998/-kb/ /CurHelp.bmp/1.1/Sun May 24 18:10:44 1998/-kb/ /EditCopy.bmp/1.1/Sun May 24 18:10:44 1998/-kb/ /EditCut.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /EditPast.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /EditUndo.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /FileNew.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /FileOpen.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /FilePrnt.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /FileSave.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /HlpSBar.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /HlpTBar.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /Makefile.am/1.1/Fri Jul 17 19:12:37 1998// /RecFirst.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /RecLast.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /RecNext.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /RecPrev.bmp/1.1/Sun May 24 18:10:45 1998/-kb/ /ScMenu.bmp/1.1/Sun May 24 18:10:46 1998/-kb/ /Scmax.bmp/1.1/Sun May 24 18:10:46 1998/-kb/ /Scmin.bmp/1.1/Sun May 24 18:10:46 1998/-kb/ /WinCom.cnt/1.1/Sun May 24 17:57:11 1998// /WinCom.hpj/1.2/Sun May 24 18:14:00 1998// D ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/Makefile��������������������������������������������������������������������������0100644�0000764�0000144�00000013772�07405520577�015215� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOC := $(wildcard *.rtf *.bmp *.cnt *.hpj) EXTRA_DIST = $(DOC) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu WinCom/hlp/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = WinCom/hlp distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WinCom/hlp/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������libwww/WinCom/hlp/AfxCore.rtf�����������������������������������������������������������������������0100644�0000764�0000144�00000143062�06532060012�015574� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{\rtf1\ansi \deff0\deflang1033{\fonttbl{\f0\froman\fcharset0\fprq2 Tms Rmn;}{\f1\froman\fcharset2\fprq2 Symbol;}{\f2\fswiss\fcharset0\fprq2 Helv;}{\f3\fmodern\fcharset0\fprq1 Courier;} {\f4\froman\fcharset0\fprq2 Times New Roman;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f6\froman\fcharset0\fprq2 MS Serif;}{\f7\fswiss\fcharset0\fprq2 MS Sans Serif;}{\f8\froman\fcharset0\fprq2 Times;}{\f9\fswiss\fcharset0\fprq2 Helvetica{\*\falt Arial};} {\f10\fswiss\fcharset0\fprq2 System;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f12\froman\fcharset0\fprq2 New York;}{\f13\fswiss\fcharset0\fprq2 Geneva;}{\f14\fmodern\fcharset0\fprq1 Fixedsys;}{\f15\fmodern\fcharset255\fprq1 Terminal;} {\f16\fswiss\fcharset0\fprq2 Small Fonts;}{\f17\fswiss\fcharset0\fprq2 MS Dialog;}{\f18\fswiss\fcharset0\fprq2 MS Dialog Light;}{\f19\fswiss\fcharset0\fprq2 MS SystemEx;}{\f20\fnil\fcharset2\fprq2 Marlett;}{\f21\fnil\fcharset2\fprq2 Wingdings;} {\f22\fmodern\fcharset2\fprq1 MS LineDraw;}{\f23\fdecor\fcharset0\fprq2 Algerian;}{\f24\fswiss\fcharset0\fprq2 Arial Rounded MT Bold;}{\f25\froman\fcharset0\fprq2 Bookman Old Style;}{\f26\fdecor\fcharset0\fprq2 Braggadocio;} {\f27\fswiss\fcharset0\fprq2 Britannic Bold;}{\f28\fscript\fcharset0\fprq2 Brush Script MT;}{\f29\fswiss\fcharset0\fprq2 Century Gothic;}{\f30\fdecor\fcharset0\fprq2 Colonna MT;}{\f31\fdecor\fcharset0\fprq2 Desdemona;} {\f32\froman\fcharset0\fprq2 Footlight MT Light;}{\f33\fswiss\fcharset0\fprq2 Impact;}{\f34\fdecor\fcharset0\fprq2 Kino MT;}{\f35\froman\fcharset0\fprq2 Wide Latin;}{\f36\fscript\fcharset0\fprq2 Matura MT Script Capitals;} {\f37\fdecor\fcharset0\fprq2 Playbill;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128; \red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar \fs20 \snext0 Normal;}{\s1\sb240\nowidctlpar \b\f2\ul \sbasedon0\snext0 heading 1;}{\s2\sb120\nowidctlpar \b\f2 \sbasedon0\snext0 heading 2;}{\s3\li360\nowidctlpar \b \sbasedon0\snext17 heading 3;}{\s4\li360\nowidctlpar \ul \sbasedon0\snext17 heading 4;}{\s5\li720\nowidctlpar \b\fs20 \sbasedon0\snext17 heading 5;}{\s6\li720\nowidctlpar \fs20\ul \sbasedon0\snext17 heading 6;}{\s7\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 7;}{\s8\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 8;}{\s9\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive\f0\fs16\up6\lang1033 \sbasedon10 footnote reference;}{\s16\nowidctlpar \fs20 \sbasedon0\snext16 footnote text;}{\s17\li720\nowidctlpar \fs20 \sbasedon0\snext17 Normal Indent;}{ \s18\fi-240\li480\sb80\nowidctlpar\tx480 \f9 \sbasedon0\snext18 nscba;}{\s19\fi-240\li240\sa20\nowidctlpar \f9 \sbasedon0\snext19 j;}{\s20\li480\sa20\nowidctlpar \f9 \sbasedon0\snext20 ij;}{\s21\sb80\sa20\nowidctlpar \f9 \sbasedon0\snext21 btb;}{ \s22\fi-240\li2400\sb20\sa20\nowidctlpar \f9\fs20 \sbasedon0\snext22 ctcb;}{\s23\fi-240\li480\sa40\nowidctlpar\tx480 \f9 \sbasedon0\snext23 ns;}{\s24\sa120\nowidctlpar \f9\fs28 \sbasedon0\snext24 TT;}{\s25\fi-240\li2400\sa20\nowidctlpar \f9 \sbasedon0\snext25 crtj;}{\s26\fi-240\li480\nowidctlpar\tx480 \f9 \sbasedon0\snext26 nsca;}{\s27\sa20\nowidctlpar \f9 \sbasedon0\snext27 bt;}{\s28\li240\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext28 Hf;}{\s29\li240\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext29 Hs;}{\s30\li480\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext30 RT;}{\s31\fi-2160\li2160\sb240\sa80\nowidctlpar\tx2160 \f9 \sbasedon0\snext31 c;}{\s32\li2160\sa20\nowidctlpar \f9 \sbasedon0\snext32 ct;}{\s33\li240\sa20\nowidctlpar \f9 \sbasedon0\snext33 it;}{\s34\li480\nowidctlpar \f9\fs20 \sbasedon0\snext34 nsct;}{\s35\fi-160\li400\sb80\sa40\nowidctlpar \f9 \sbasedon0\snext35 nscb;}{\s36\fi-2640\li2880\sb120\sa40\nowidctlpar\brdrb\brdrs\brdrw15 \brdrbtw\brdrs\brdrw15 \tx2880 \f9 \sbasedon0\snext36 HC2;}{\s37\fi-2640\li2880\sb120\sa20\nowidctlpar\tx2880 \f9 \sbasedon0\snext37 C2;}{\s38\fi-240\li2400\sa20\nowidctlpar \f9\fs20 \sbasedon0\snext38 ctc;}{\s39\li2160\sb160\nowidctlpar \f9 \sbasedon0\snext39 crt;}{ \s40\li480\sb20\sa40\nowidctlpar \f9 \sbasedon0\snext40 or;}{\s41\fi-259\li360\sb40\sa40\nowidctlpar\tx360 \f7\fs20 \sbasedon0\snext41 Ln1;}{\s42\li115\sb80\sa80\nowidctlpar \f7\fs20 \sbasedon0\snext0 *Intro;}{\s43\li115\sb80\sa80\keepn\nowidctlpar \b\f7 \sbasedon3\snext42 *Title;}{\s44\fi-245\li360\sb80\nowidctlpar \f7\fs20 \snext44 *Jl;}{\s45\li360\sb40\sa40\nowidctlpar \f7\fs20 \snext0 Lp1;}{\s46\fi-1800\li1915\sb60\sl-240\slmult0\nowidctlpar\tx1915 \f7\fs20 \sbasedon0\snext46 Tph;}{ \s47\li115\sb120\sa80\nowidctlpar \b\f7\fs20 \snext41 Proch;}{\*\cs48 \additive\super \sbasedon10 endnote reference;}}{\info{\title AFXCORE}{\subject MFC Core RTF Help}{\author AFX}{\creatim\yr1992\mo10\dy7\hr11\min4}{\version1}{\edmins1}{\nofpages0} {\nofwords0}{\nofchars0}{\vern49221}}\widowctrl\ftnbj\aenddoc\hyphcaps0 \fet0\sectd \linex576\endnhere {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3 \pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}} {\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} main_index}}{\fs16\up6 }{\b\f2\fs24\up6 <<YourApp>> Help Index}{\b\f2 \par }{\f9 \par }{\b\f2 How To ... \par }{\f2 \tab <<add your application-specific "how to" topics here>>}{\f9\ulw \par \par }{\b\f2 Commands \par }{\f2 \tab }{\f2\uldb File menu}{\v\f2 menu_file}{\f2 \par \tab }{\f2\uldb Edit menu}{\v\f2 menu_edit}{\f2\uldb \par }{\f2 \tab }{\f2\uldb Record menu}{\v\f2 menu_record}{\f2 \par \tab }{\f2\uldb View menu}{\v\f2 menu_view}{\f2 \par \tab }{\f2\uldb Window menu}{\v\f2 menu_window}{\f2 \par \tab }{\f2\uldb Help menu}{\v\f2 menu_help}{\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} menu_file}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} File menu commands}}{\f2 }{\b\f2 File menu commands}{\f2 \par \par The File menu offers the following commands: \par \par }\trowd \trgaph108\trleft-108 \cellx1302\cellx8622 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb New}{\v\f2 HID_FILE_NEW}{\f2 \cell Creates a new document.\cell }\pard \widctlpar\intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1302\cellx8622 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Open}{\v\f2 HID_FILE_OPEN}{\f2\uldb \cell }{\f2 Opens an existing document.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Close}{\v\f2 HID_FILE_CLOSE}{\f2\uldb \cell }{\f2 Closes an opened document.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Save}{\v\f2 HID_FILE_SAVE}{\f2\uldb \cell }{\f2 Saves an opened document using the same file name.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Save As}{\v\f2 HID_FILE_SAVE_AS}{\f2\uldb \cell }{\f2 Saves an opened document to a specified file name.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Print}{\v\f2 HID_FILE_PRINT}{\f2\uldb \cell }{\f2 Prints a document.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Print Preview}{\v\f2 HID_FILE_PRINT_PREVIEW}{\f2\uldb \cell }{\f2 Displays the document on the screen as it would appear printed.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Print Setup}{\v\f2 HID_FILE_PRINT_SETUP}{\f2\uldb \cell }{\f2 Selects a printer and printer connection. \cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Send...}{\v\f2 HID_FILE_SEND_MAIL}{\f2\uldb \cell }{\f2 Sends the active document through electronic mail.\cell }\pard \widctlpar\intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1302\cellx8622 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Exit}{\v\f2 HID_APP_EXIT}{\f2 \tab \par }{\f2\uldb \cell }{\f2 Exits <<YourApp>>.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} menu_edit}}{\b\f2 Edit menu commands}{\f2 \par \par The Edit menu offers the following commands: \par }\pard \fi-720\li720\sl240\slmult0\widctlpar {\f2 \par }\trowd \trgaph108\trleft-108 \cellx1497\cellx10212 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Undo}{\v\f2 HID_EDIT_UNDO}{\f2 \cell Reverse previous editing operation.\cell }\pard \widctlpar\intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1497 \cellx10212 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Cut}{\v\f2 HID_EDIT_CUT}{\f2\uldb \cell }{\f2 Deletes data from the document and moves it to the clipboard.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Copy}{\v\f2 HID_EDIT_COPY}{\f2\uldb \cell }{\f2 Copies data from the document to the clipboard.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Paste}{\v\f2 HID_EDIT_PASTE}{\f2\uldb \cell }{\f2 Pastes data from the clipboard into the document.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Paste Link}{\v\f2 HID_EDIT_PASTE_LINK}{\f2\uldb \cell }{\f2 Pastes from the clipboard a link to data in another application.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Insert New Object}{\v\f2\uldb HID_OLE_INSERT_NEW}{\f2\uldb \cell }{\f2 Inserts and embeds an object, such as a chart or an equation in a document.\cell }\pard \widctlpar\intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1497\cellx10212 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Links}{\v\f2 HID_OLE_EDIT_LINKS}{ \f2\uldb \cell }{\f2 List and edit links to embedded documents.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \fi-720\li720\sl240\slmult0\widctlpar {\f2 \par }\pard \sl240\slmult0\widctlpar {\f2 \tab \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} menu_view}}{\b\f2 View menu commands}{\f2 \par \par The View menu offers the following commands: \par \par }\trowd \trgaph108\trleft-108 \cellx1272\cellx7452 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Toolbar}{\v\f2 HID_VIEW_TOOLBAR}{\f2\uldb \cell }{\f2 Shows or hides the toolbar.\cell }\pard \widctlpar\intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1272\cellx7452 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Status Bar}{\v\f2 HID_VIEW_STATUS_BAR}{\f2\uldb \cell }\pard \fi-720\li720\sl240\slmult0\widctlpar\intbl {\f2 Shows or hides the status bar. \par }\pard \sl240\slmult0\widctlpar\intbl {\f2 \cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} menu_window}}{\b\f2 Window menu commands}{\f2 \par \par The Window menu offers the following commands, which enable you to arrange multiple views of multiple documents in the application window: \par \par }\trowd \trgaph108\trleft-108 \cellx1572\cellx7752 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb New Window}{\v\f2 HID_WINDOW_NEW}{\f2\uldb \cell }{\f2 Creates a new window that views the same document.\cell }\pard \widctlpar\intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1572\cellx7752 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Cascade}{\v\f2 HID_WINDOW_CASCADE}{\f2\uldb \cell }{\f2 Arranges windows in an overlapped fashion.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0 \widctlpar\intbl {\f2\uldb Tile}{\v\f2 HID_WINDOW_TILE}{\f2\uldb \cell }{\f2 Arranges windows in non-overlapped tiles.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Arrange Icons}{\v\f2 HID_WINDOW_ARRANGE}{ \f2\uldb \cell }\pard \fi-720\li720\sl240\slmult0\widctlpar\intbl {\f2 Arranges icons of closed windows.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Split}{\v\f2 HID_WINDOW_SPLIT}{\f2\uldb \cell }\pard \fi-720\li720\sl240\slmult0\widctlpar\intbl {\f2 Split the active window into panes.\cell }\pard \widctlpar\intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1572\cellx7752 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Window 1, 2, ...}{\v\f2 HID_WINDOW_ALL}{\f2\uldb \cell }\pard \fi-720\li720\sl240\slmult0\widctlpar\intbl {\f2 Goes to specified window.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \fi-720\li720\sl240\slmult0\widctlpar {\f2 \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} menu_help}}{\b\f2 Help menu commands}{\f2 \par \par The Help menu offers the following commands, which provide you assistance with this application: \par \par }\trowd \trgaph108\trleft-108 \cellx1077\cellx7257 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb Help Topics}{\v\f2 HID_HELP_INDEX}{\f2\uldb \cell }\pard \fi-720\li720\sl240\slmult0\widctlpar\intbl {\f2 Offers you an index to topics on which you can get help.\cell }\pard \widctlpar\intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1077\cellx7257 \pard \sl240\slmult0\widctlpar\intbl {\f2\uldb About}{\v\f2 HID_APP_ABOUT}{\f2\uldb \cell }\pard \fi-720\li720\sl240\slmult0\widctlpar\intbl {\f2 Displays the version number of this application.\cell }\pard \widctlpar\intbl {\f2 \row }\pard \fi-720\li720\sl240\slmult0\widctlpar {\f2 \par \par }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_FILE_NEW}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 $ {\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} File New command}}{\f2 }{\b\f2 New command (File menu)}{\f2 \par \par Use this command to create a new document in <<YourApp>>. Select the type of new file you want to create in the }{\f2\uldb File New dialog box}{\v AFX_HIDD_NEWTYPEDLG}. {\f2 << Remove previous sentence if your application supports only one document type. >> \par \par You can open an existing document with the }{\f2\uldb Open command}{\v HID_FILE_OPEN}{\f2 . \par \par }{\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Toolbar:\tab \{bmc filenew.bmp\} \par Keys:\tab CTRL+N \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDD_NEWTYPEDLG}}{\b\f2 File New dialog box \par }{\f2 \par << Delete this help topic if your application supports only one document type. >> \par \par Specify the type of document you wish to create: \par << List your application's document types here >>\page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_FILE_OPEN}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{ \cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} File Open command}}{\f2 }{\b\f2 Open command (File menu)}{\f2 \par \par Use this command to open an existing document in a new window. You can open multiple documents at once. Use the Window menu to switch among the multiple open documents. See }{\f2\uldb Window 1, 2, ... command}{\v\f2 HID_WINDOW_ALL}{\f2 . \par \par You can create new documents with the }{\f2\uldb New command}{\v HID_FILE_NEW}{\f2 . \par \par }{\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Toolbar:\tab \{bmc fileopen.bmp\} \par Keys:\tab CTRL+O \par }\pard \li360\sl240\slmult0\widctlpar {\f2 \par }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDD_FILEOPEN}}{\b\f2 File Open dialog box \par }{\f2 \par The following options allow you to specify which file to open: \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 File Name \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Type or select the filename you want to open. This box lists files with the extension you select in the List Files of Type box. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 List Files of Type \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Select the type of file you want to open: \par << List your application's file types here. >> \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Drives \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Select the drive in which <<YourApp>> stores the file that you want to open. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Directories \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Select the directory in which <<YourApp>> stores the file that you want to open. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Network... \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Choose this button to connect to a network location, assigning it a new drive letter. \par \par }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_FILE_CLOSE}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 $ {\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} File Close command}}{\f2 }{\b\f2 Close command (File menu)}{\f2 \par \par Use this command to close all windows containing the active document. <<YourApp>> suggests that you save changes to your document before you close it. If you close a document without saving, you lose all changes made since the last time you saved it. B efore closing an untitled document, <<YourApp>> displays the }{\f2\uldb Save As dialog box}{\v AFX_HIDD_FILESAVE}{\f2 and suggests that you name and save the document. \par \par You can also close a document by using the Close icon on the document's window, as shown below: \par \{bml scmenu.bmp\} \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_FILE_SAVE}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} File Save command}}{\f2 }{\b\f2 Save command (File menu)}{\f2 \par \par Use this command to save the active document to its current name and directory. When you save a document for the first time, <<YourApp>> displays the }{\f2\uldb Save As dialog box}{\v AFX_HIDD_FILESAVE}{\f2 so you can name your document. If you want to change the name and directory of an existing document before you save it, choose the }{\f2\uldb Save As command}{\v HID_FILE_SAVE_AS}{\f2 . \par \par }{\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Toolbar:\tab \{bmc filesave.bmp\} \par Keys:\tab CTRL+S \par }\pard \li360\sl240\slmult0\widctlpar {\f2 \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_FILE_SAVE_AS}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} File Save As command}}{\f2 }{\b\f2 Save As command (File menu)}{\f2 \par \par Use this command to save and name the active document. <<YourApp>> displays the }{\f2\uldb Save As dialog box}{\v AFX_HIDD_FILESAVE}{\f2 so you can name your document. \par \par To save a document with its existing name and directory, use the }{\f2\uldb Save command}{\v HID_FILE_SAVE}{\f2 . \par \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_FILE_SEND_MAIL}}{\b\f2 Send command (File menu)}{\f2 \par \par Use this command to send the active document through electronic mail. This command presents a mail window with the active document attached to it. You may then fill out the To: field, Subject: field, etc., and add text to the body of the message if you wish. When you are finished you may click the "Send" button to send the message. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDD_FILESAVE}}{\b\f2 File Save As dialog box \par }{\f2 \par The following options allow you to specify the name and location of the file you're about to save: \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 File Name \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Type a new filename to save a document with a different name. A filename can contain up to eight characters and an extension of up to three characters. <<YourApp>> adds the extension you specify in the Save File As Type box. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Drives \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Select the drive in which you want to store the document. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Directories \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Select the directory in which you want to store the document. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Network... \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Choose this button to connect to a network location, assigning it a new drive letter. \par \par }\pard \sl240\slmult0\widctlpar {\f2 << Add other File Save As dialog box options depending on which ones your application chooses via the OFN_ flags of the OPENFILENAME structure used by the CFileDialog. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} HID_FILE_MRU_FILE1}}{\f2 }{\cs15\fs16\up6 K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} File 1, 2, 3, 4 command}}{\f2 }{\b\f2 1, 2, 3, 4 command (File menu)}{\f2 \par \par Use the numbers and filenames listed at the bottom of the File menu to open the last four documents you closed. Choose the number that corresponds with the document you want to open. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_APP_EXIT}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} exit}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 { \cs15\fs16\up6 $} File Exit command}}{\f2 }{\b\f2 Exit command (File menu)}{\f2 \par \par Use this command to end your <<YourApp>> session. You can also use the Close command on the application Control menu. <<YourApp>> prompts you to save documents with unsaved changes. \par } \par {\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Mouse:\tab Double-click the application's Control menu button. \par \tab \{bmc appexit.bmp\} \par Keys:\tab ALT+F4 \par }\pard \sl240\slmult0\widctlpar \page {\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_UNDO}}{\b\f2 Undo/Can't Undo command (Edit menu)}{\f2 \par \par << Your application's user interface for Undo may differ from the one described below. Modify this help text accordingly. >> \par \par Use this command to reverse the last editing action, if possible. The name of the command changes, depending on what the last action was. The Undo command changes to Can't Undo on the menu if you cannot reverse your last action. \par \par }{\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Toolbar:\tab \{bmc editundo.bmp\} \par Keys:\tab CTRL+Z or \par \tab ALT-BACKSPACE\tab \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_REDO}}{\b\f2 Redo command (Edit menu)}{\f2 \par \par << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_CUT}}{\b\f2 Cut command (Edit menu)}{\f2 \par \par Use this command to remove the currently selected data from the document and put it on the clipboard. This command is unavailable if there is no data currently selected. \par \par Cutting data to the clipboard replaces the contents previously stored there. \par \par }{\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Toolbar:\tab \{bmc editcut.bmp\} \par Keys:\tab CTRL+X \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_COPY}}{\b\f2 Copy command (Edit menu)}{\f2 \par \par Use this command to copy selected data onto the clipboard. This command is unavailable if there is no data currently selected. \par \par Copying data to the clipboard replaces the contents previously stored there. \par \par }{\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Toolbar:\tab \{bmc editcopy.bmp\} \par Keys:\tab CTRL+C \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_PASTE}}{\b\f2 Paste command (Edit menu)}{\f2 \par \par Use this command to insert a copy of the clipboard contents at the insertion point. This command is unavailable if the clipboard is empty. \par \par }{\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Toolbar:\tab \{bmc editpast.bmp\} \par Keys:\tab CTRL+V \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_VIEW_TOOLBAR}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} toolbar}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} View Toolbar command}}{\f2 }{\b\f2 Toolbar command (View menu)}{\f2 \par \par Use this command to display and hide the Toolbar, which includes buttons for some of the most common commands in <<YourApp>>, such as File Open. A check mark appears next to the menu item when the Toolbar is displayed. \par \par See }{\f2\uldb Toolbar}{\v\f2 AFX_HIDW_TOOLBAR}{\f2 for help on using the toolbar. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDW_TOOLBAR}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} toolbar}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} toolbar}}{\f2 }{\b\f2 Toolbar}{\f2 \par \{bml hlptbar.bmp\} \par \par The toolbar is displayed across the top of the application window, below the menu bar. The toolbar provides quick mouse access to many tools used in <<YourApp>>, \par \par To hide or display the Toolbar, choose Toolbar from the View menu (ALT, V, T). \par \par << Add or remove toolbar buttons from the list below according to which ones your application offers. >> \par \par }\pard \sl240\slmult0\widctlpar\brdrb\brdrs\brdrw15\brsp20 \tx1080 {\b\f2 Click\tab To}{\f2 \par }\pard \fi-1080\li1080\sl240\slmult0\widctlpar\tx1080 {\f2 \{bmc filenew.bmp\}\tab Open a new document. \par \par \{bmc fileopen.bmp\}\tab Open an existing document. <<YourApp>> displays the Open dialog box, in which you can locate and open the desired file. \par \par \{bmc filesave.bmp\}\tab Save the active document or template with its current name. If you have not named the document, <<YourApp>> displays the Save As dialog box. \par \par \{bmc fileprnt.bmp\}\tab Print the active document. \par \par \{bmc editcut.bmp\}\tab Remove selected data from the document and stores it on the clipboard. \par \par \{bmc editcopy.bmp\}\tab Copy the selection to the clipboard. \par \par \{bmc editpast.bmp\}\tab Insert the contents of the clipboard at the insertion point. \par \par \{bmc editundo.bmp\}\tab Reverse the last editing. Note: You cannot undo some actions. \par \par \{bmc recfirst.bmp\}\tab Go to the first record in the current selection. \par \par \{bmc recprev.bmp\}\tab Go to the previous record in the current selection. \par \par \{bmc recnext.bmp\}\tab Go to the next record in the current selection. \par \par \{bmc reclast.bmp\}\tab Go to the last record in the current selection. \par \par }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_VIEW_STATUS_BAR}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} status bar}}{\f2 }{\cs15\fs16\up6 $ {\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} View Status Bar Command}}{\b\f2 Status Bar command (View menu) \par }{\f2 \par Use this command to display and hide the Status Bar, which describes the action to be executed by the selected menu item or depressed toolbar button, and keyboard latch state. A check mark appears next to the menu item when the Status Bar is displayed. \par \par See }{\f2\uldb Status Bar}{\v\f2 AFX_HIDW_STATUS_BAR}{\f2 for help on using the status bar. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDW_STATUS_BAR}K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} status bar}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \sl240\slmult0 \widctlpar \fs20 {\cs15\fs16\up6 $} status bar}}{\b\f2 Status Bar}{\f2 \par \{bml hlpsbar.bmp\} \par \par The status bar is displayed at the bottom of the <<YourApp>> window. To display or hide the status bar, use the Status Bar command in the View menu. \par \par The left area of the status bar describes actions of menu items as you use the arrow keys to navigate through menus. This area similarly shows messages that describe the actions of toolbar buttons as you depress them, before releasing them. If after vie wing the description of the toolbar button command you wish not to execute the command, then release the mouse button while the pointer is off the toolbar button. \par \par The right areas of the status bar indicate which of the following keys are latched down: \par \par }\pard \sl240\slmult0\widctlpar\tx1440 {\b\f2 Indicator\tab Description}{\f2 \par }\pard \fi-1440\li1440\sa120\sl240\slmult0\widctlpar\tx1440 {\f2 CAP\tab The Caps Lock key is latched down. \par NUM\tab The Num Lock key is latched down. \par SCRL\tab The Scroll Lock key is latched down. \par }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_WINDOW_NEW}}{\b\f2 New command (Window menu)}{\f2 \par \par Use this command to open a new window with the same contents as the act ive window. You can open multiple document windows to display different parts or views of a document at the same time. If you change the contents in one window, all other windows containing the same document reflect those changes. When you open a new w indow, it becomes the active window and is displayed on top of all other open windows. \par \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_WINDOW_CASCADE}}{\b\f2 Cascade command (Window menu)}{\f2 \par \par Use this command to arrange multiple opened windows in an overlapped fashion. \par \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_WINDOW_TILE}}{\b\f2 Tile command (Window menu)}{\f2 \par \par Use this command to arrange multiple opened windows in a non-overlapped fashion. \par \par \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_WINDOW_TILE_HORZ}}{\b\f2 Tile Horizontal command (Window menu)}{\f2 \par \par Use this command to vertically arrange multiple opened windows in a non-overlapped fashion. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_WINDOW_TILE_VERT}}{\b\f2 Tile Vertical command (Window menu)}{\f2 \par \par Use this command to arrange multiple opened windows side by side. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_WINDOW_ARRANGE}}{\b\f2 Window Arrange Icons Command}{\f2 \par \par Use this command to arrange the icons for minimized windows at the bottom of the main window. If there is an open document window at the bottom of the main window, then some or all of the icons may not be visible because they will be underneath this docu ment window.\page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_WINDOW_SPLIT}}{\b\f2 Split Command (Window menu) \par \par }{\f2 Use this command to split the active window into panes. You may then use the mouse or the keyboard arrows to move the splitter bars. When you are finished, press the mouse button or enter to le ave the splitter bars in their new location. Pressing escape keeps the splitter bars in their original location. << In a single document interface application, this command will appear on the View menu. >>\page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_WINDOW_ALL}}{\b\f2 1, 2, ... command (Window menu)}{\f2 \par \par <<YourApp>> displays a list of currently open document windows at the bottom of the Window menu. A check mark appears in front of the document name of the active window. Choose a document from this list to make its window active. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_HELP_INDEX}}{\b\f2 Index command (Help menu) \par }{\f2 \par Use this command to display the opening screen of Help. From the opening screen, you can jump to step-by-step instructions for using <<YourApp>> and various types of reference information. \par \par Once you open Help, you can click the Contents button whenever you want to return to the opening screen. \par \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_HELP_USING}}{\b\f2 Using Help command (Help menu) \par }{\f2 \par Use this command for instructions about using Help. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_APP_ABOUT}}{\b\f2 About command (Help menu) \par }{\f2 \par Use this command to display the copyright notice and version number of your copy of <<YourApp>>. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_CONTEXT_HELP}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Help Using Help Command}}{\b\f2 Context Help command \par }{\f2 \{bml curhelp.bmp\} \par \par Use the Context Help command to obtain help on some portion of <<YourApp>>. When you choose the Toolbar's Context Help button, the mouse pointer will change to an arrow and question mark. Then click somewhere in the <<YourApp>> window, such as another T oolbar button. The Help topic will be shown for the item you clicked. \par \par }{\b\f2 Shortcut \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Keys:\tab SHIFT+F1 \par }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_HT_CAPTION}}{\b\f2 Title Bar} \par \par {\f2 << Show your application's title bar here. >> \par \par }\pard\plain \s42\fi-360\li360\widctlpar\tx360 \f7\fs20 {\f2 The title bar is located along the top of a window. It contains the name of the application and document. \par }\pard\plain \widctlpar \fs20 {\f2 \par }\pard\plain \s42\fi-360\li360\widctlpar\tx360 \f7\fs20 {\f2 To move the window, drag the title bar. Note: You can also move dialog boxes by dragging their title bars. \par }\pard\plain \widctlpar \fs20 {\f2 \par }\pard \fi-360\li360\widctlpar\tx360 {\f2 A title bar may contain the following elements: \par }\pard\plain \s41\fi-360\li360\sb40\sa40\widctlpar\tx360 \f7\fs20 {\f2 \{bmc bullet.bmp\}\tab Application Control-menu button \par \{bmc bullet.bmp\}\tab Document Control-menu button \par \{bmc bullet.bmp\}\tab Maximize button \par \{bmc bullet.bmp\}\tab Minimize button \par \{bmc bullet.bmp\}\tab Name of the application \par \{bmc bullet.bmp\}\tab Name of the document \par \{bmc bullet.bmp\}\tab Restore button \par }\pard\plain \sl240\slmult0\widctlpar \fs20 {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} scrollbars}}{\f2 }{\b\f2 Scroll bars}{\f2 \par \par Displayed at the right and bottom edges of the document window. The scroll boxes inside the scroll bars indicate your vertical and horizontal location in the document. You can use the mouse to scroll to other parts of the document. \par \par << Describe the actions of the various parts of the scrollbar, according to how they behave in your application. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_SIZE}}{\b\f2 Size command (System menu)} \par \par {\f2 Use this command to display a four-headed arrow so you can size the active window with the arrow keys. \par \{bml curarw4.bmp\} \par \par After the pointer changes to the four-headed arrow: \par }\pard \fi-360\li360\sb60\sl240\slmult0\widctlpar {\f2 1.\tab Press one of the DIRECTION keys (left, right, up, or down arrow key) to move the pointer to the border you want to move. \par 2.\tab Press a DIRECTION key to move the border. \par 3.\tab Press ENTER when the window is the size you want. \par }\pard \sl240\slmult0\widctlpar {\f2 \par Note: This command is unavailable if you maximize the window. \par } \par {\b\f2 Shortcut}{\b \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Mouse:\tab Drag the size bars at the corners or edges of the window. \par }\pard \li360\sl240\slmult0\widctlpar {\f2 \par }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_MOVE}}{\b\f2 Move command (Control menu) \par }{\f2 \par Use this command to display a four-headed arrow so you can move the active window or dialog box with the arrow keys. \par \{bmc curarw4.bmp\} \par \par Note: This command is unavailable if you maximize the window. \par \par }{\b\f2 Shortcut \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Keys:\tab CTRL+F7 \par \par }\pard \sl240\slmult0\widctlpar\tx1440 {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_MINIMIZE}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} System Minimize Command} }{\b\f2 Minimize command (application Control menu) \par }\pard \sl240\slmult0\widctlpar {\f2 \par Use this command to reduce the <<YourApp>> window to an icon. \par }\pard \fi-360\li360\sl240\slmult0\widctlpar {\b \par }{\b\f2 Shortcut}{\f2 \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Mouse:\tab Click the minimize icon \{bmc scmin.bmp\} on the title bar. \par Keys:\tab ALT+F9 \par }\pard \fi-360\li1080\sl240\slmult0\widctlpar \par \pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_MAXIMIZE}}{\b\f2 Maximize command (System menu) \par }{\f2 \par Use this command to enlarge the active window to fill the available space. \par }\pard \fi-360\li360\sl240\slmult0\widctlpar {\b\f2 \par Shortcut}{\f2 \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Mouse:\tab Click the maximize icon \{bmc scmax.bmp\} on the title bar; or double-click the title bar. \par Keys:\tab CTRL+F10 enlarges a document window. \par }\pard \fi-360\li1080\sl240\slmult0\widctlpar \par \pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_NEXTWINDOW}}{\b\f2 Next Window command (document Control menu) \par }{\f2 \par Use this command to switch to the next open document window. <<YourApp>> determines which window is next according to the order in which you opened the windows. \par \par }{\b\f2 Shortcut \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Keys:\tab CTRL+F6 \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_PREVWINDOW}}{\b\f2 Previous Window command (document Control menu) \par }{\f2 \par Use this command to switch to the previous open document window. <<YourApp>> determines which window is previous according to the order in which you opened the windows. \par \par }{\b\f2 Shortcut \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Keys:\tab SHIFT+CTRL+F6 \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_CLOSE}}{\b\f2 Close command (Control menus) \par }{\f2 \par Use this command to close the active window or dialog box. \par \par Double-clicking a Control-menu box is the same as choosing the Close command. \par \{bml appexit.bmp\} \par \par Note: If you have multiple windows open for a single document, the Close command on the document Control menu closes only one window at a time. You can close all windows at once with the Close command on the File menu. \par \par }{\b\f2 Shortcuts \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Keys: \tab CTRL+F4 closes a document window \par \tab ALT+F4 closes the <<YourType>> window or dialog box \par }\pard \sl240\slmult0\widctlpar {\f2 \tab \tab \tab \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_RESTORE}}{\b\f2 Restore command (Control menu) \par }{\f2 \par Use this command to return the active window to its size and position before you chose the Maximize or Minimize command. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_SC_TASKLIST}}{\b\f2 Switch to command (application Control menu) \par }{\f2 \par Use this command to display a list of all open applications. Use this "Task List" to switch to or close an application on the list. \par \par }{\b\f2 Shortcut \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Keys:\tab CTRL+ESC \par }\pard \sl240\slmult0\widctlpar {\f2 \par }{\b\f2 Dialog Box Options \par }{\f2 When you choose the Switch To command, you will be presented with a dialog box with the following options: \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Task List \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Select the application you want to switch to or close. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Switch To \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Makes the selected application active. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 End Task \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Closes the selected application. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Cancel \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Closes the Task List box. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Cascade \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Arranges open applications so they overlap and you can see each title bar. This option does not affect applications reduced to icons. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Tile \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Arranges open applications into windows that do not overlap. This option does not affect applications reduced to icons. \par }\pard \sb60\sl240\slmult0\widctlpar {\b\f2 Arrange Icons \par }\pard \li360\sl240\slmult0\widctlpar {\f2 Arranges the icons of all minimized applications across the bottom of the screen. \par }\pard \sl240\slmult0\widctlpar {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_VIEW_RULER}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} View Ruler Command}}{\b\f2 Ruler command (View menu) \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDD_FONT}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Choose Font Dialog}}{\b\f2 Choose Font dialog box \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDD_COLOR}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Choose Color Dialog}}{\b\f2 Choose Color dialog box \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_FIND}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Edit Find Command}}{\b\f2 Find command (Edit menu) \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDD_FIND}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Find Dialog}}{\b\f2 Find dialog box \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_REPLACE}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Edit Replace Command}}{\b\f2 Replace command (Edit menu) \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDD_REPLACE}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Replace Dialog}}{\b\f2 Replace dialog box \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_REPEAT}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Edit Repeat Command}}{\b\f2 Repeat command (Edit menu) \par \par }{\f2 Use this command to repeat the last editing command carried out. The Repeat menu item changes to Can't Repeat if you cannot repeat your last action. \par \par }{\b\f2 Shortcut \par }\pard \fi-1080\li1440\sl240\slmult0\widctlpar\tx1440 {\f2 Key:\tab F4 \par }\pard \sl240\slmult0\widctlpar {\f2 \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_CLEAR}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Edit Clear Command}}{\b\f2 Clear command (Edit menu) \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_EDIT_CLEAR_ALL}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Edit Clear All}}{\b\f2 Clear All command (Edit menu) \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_NEXT_PANE}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Next Pane Command}}{\b\f2 Next Pane \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_PREV_PANE}${\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 $} Prev Pane Command}}{\b\f2 Prev Pane \par \par }{\f2 << Write application-specific help here. >> \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HIDR_DOC1TYPE}}{\b\f2 Modifying the Document \par }{\f2 \par << Write application-specific help here that provides an overview of how the user should modify a document using your application. \par \par If your application supports multiple document types and you want to have a distinct help topic for each, then use the help context i.d. generated by running the MAKEHELP.BAT file produced by AppWizard. Alternatively, run MAKEHM as follows: \par \par \tab makehm IDR_HIDR_,0x2000 resource.h \par \par If the IDR_ symbol for one of your document types is, for example, IDR_CHARTTYPE, then the help context i.d. generated by MAKEHM will be HIDR_CHARTTYPE. \par \par Note, AppWizard defines the HIDR_DOC1TYPE help context i.d. used by this help topic for the first document type supported by your appl ication. AppWizard produces an alias in the .HPJ file for your application, mapping HIDR_DOC1TYPE to the HIDR_ produced by MAKEHM for that document type. >> \par \par \page \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \sl240\slmult0\widctlpar \fs20 {\cs15\fs16\up6 #} HID_HT_NOWHERE}}{\b\f2 No Help Available} \par \par {\f2 No help is available for this area of the window. \par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} AFX_HIDP_default \par }}{\f2 }{\b\f2 No Help Available \par } \par {\f2 No help is available for this message box. \par } \par {\f2 << If you wish to author help specific to each message box prompt, then remove the AFX_HIDP_xxx values from the [ALIAS] section of your .HPJ file, and author a topic for each AFX_HIDP_xxx value. For example, AFX_HIDP_INVALID_FILENAME is the help topic for the Invalid Filename message box. >> \par \par }\pard \widctlpar \par }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/AfxPrint.rtf����������������������������������������������������������������������0100644�0000764�0000144�00000026143�06532060012�016000� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{\rtf1\ansi \deff0\deflang1024{\fonttbl{\f0\froman Times New Roman;}{\f1\froman Symbol;}{\f2\fswiss Arial;}{\f3\froman Tms Rmn;}{\f4\fswiss Helv;}{\f5\fswiss Helvetica;}{\f6\fswiss MS Sans Serif;}} {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue127;\red0\green127\blue127;\red0\green127\blue0; \red127\green0\blue127;\red127\green0\blue0;\red127\green127\blue0;\red127\green127\blue127;\red192\green192\blue192;}{\stylesheet{\s244 \f3\fs16\up6\lang1033 \sbasedon0\snext0 footnote reference;}{\s245 \f3\fs20\lang1033 \sbasedon0\snext245 footnote text;}{\s246\li720 \i\f3\fs20\lang1033 \sbasedon0\snext255 heading 9;}{\s247\li720 \i\f3\fs20\lang1033 \sbasedon0\snext255 heading 8;}{\s248\li720 \i\f3\fs20\lang1033 \sbasedon0\snext255 heading 7;}{\s249\li720 \f3\fs20\ul\lang1033 \sbasedon0\snext255 heading 6;}{\s250\li720 \b\f3\fs20\lang1033 \sbasedon0\snext255 heading 5;}{\s251\li360 \f3\ul\lang1033 \sbasedon0\snext255 heading 4;}{\s252\li360 \b\f3\lang1033 \sbasedon0\snext255 heading 3;}{\s253\sb120 \b\f4\lang1033 \sbasedon0\snext0 heading 2;}{\s254\sb240 \b\f4\ul\lang1033 \sbasedon0\snext0 heading 1;}{\s255\li720 \f3\fs20\lang1033 \sbasedon0\snext255 Normal Indent;}{\f3\fs20\lang1033 \snext0 Normal;}{\s2\fi-240\li480\sb80\tx480 \f5\lang1033 \sbasedon0\snext2 nscba;}{\s3\fi-240\li240\sa20 \f5\lang1033 \sbasedon0\snext3 j;}{\s4\li480\sa20 \f5\lang1033 \sbasedon0\snext4 ij;}{\s5\sb80\sa20 \f5\lang1033 \sbasedon0\snext5 btb;}{\s6\fi-240\li2400\sb20\sa20 \f5\fs20\lang1033 \sbasedon0\snext6 ctcb;} {\s7\fi-240\li480\sa40\tx480 \f5\lang1033 \sbasedon0\snext7 ns;}{\s8\sa120 \f5\fs28\lang1033 \sbasedon0\snext8 TT;}{\s9\fi-240\li2400\sa20 \f5\lang1033 \sbasedon0\snext9 crtj;}{\s10\fi-240\li480\tx480 \f5\lang1033 \sbasedon0\snext10 nsca;}{\s11\sa20 \f5\lang1033 \sbasedon0\snext11 bt;}{\s12\li240\sb120\sa40 \f5\lang1033 \sbasedon0\snext12 Hf;}{\s13\li240\sb120\sa40 \f5\lang1033 \sbasedon0\snext13 Hs;}{\s14\li480\sb120\sa40 \f5\lang1033 \sbasedon0\snext14 RT;}{\s15\fi-2160\li2160\sb240\sa80\tx2160 \f5\lang1033 \sbasedon0\snext15 c;}{\s16\li2160\sa20 \f5\lang1033 \sbasedon0\snext16 ct;}{\s17\li240\sa20 \f5\lang1033 \sbasedon0\snext17 it;}{\s18\li480 \f5\fs20\lang1033 \sbasedon0\snext18 nsct;}{\s19\fi-160\li400\sb80\sa40 \f5\lang1033 \sbasedon0\snext19 nscb;}{\s20\fi-2640\li2880\sb120\sa40\brdrb\brdrs\brdrw15 \brdrbtw\brdrs\brdrw15 \tx2880 \f5\lang1033 \sbasedon0\snext20 HC2;}{\s21\fi-2640\li2880\sb120\sa20\tx2880 \f5\lang1033 \sbasedon0\snext21 C2;}{\s22\fi-240\li2400\sa20 \f5\fs20\lang1033 \sbasedon0\snext22 ctc;}{\s23\li2160\sb160 \f5\lang1033 \sbasedon0\snext23 crt;}{\s24\li480\sb20\sa40 \f5\lang1033 \sbasedon0\snext24 or;}{\s25\fi-259\li360\sb40\sa40\tx360 \f6\fs20\lang1033 \sbasedon0\snext25 Ln1;}{\s26\li115\sb80\sa80 \f6\fs20\lang1033 \sbasedon0\snext0 *Intro;}{\s27\li115\sb80\sa80\keepn \b\f6\lang1033 \sbasedon252\snext26 *Title;}{\s28\fi-245\li360\sb80 \f6\fs20\lang1033 \snext28 *Jl;}{\s29\li360\sb40\sa40 \f6\fs20\lang1033 \snext0 Lp1;}{ \s30\fi-1800\li1915\sb60\sl-240\tx1915 \f6\fs20\lang1033 \sbasedon0\snext30 Tph;}{\s31\li115\sb120\sa80 \b\f6\fs20\lang1033 \snext25 Proch;}}{\info{\title AFXPRINT}{\subject MFC Print RTF Help}{\author AFX}{\creatim\yr1992\mo10\dy7\hr12\min33}{\version1} {\edmins46}{\nofpages1}{\nofwords65536}{\nofchars65536}{\vern16433}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0 \widowctrl\ftnbj \sectd \linex0\endnhere \pard\plain \sl240 \f3\fs20\lang1033 {\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # HID_FILE_PRINT}}{\fs16\up6 K{\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 K} printing and print preview}}{\f4 }{\fs16\up6 ${\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 $} File Print command} }{\f4 }{\b\f4 Print command (File menu)}{\b\f4 \par }{\f4 \par }{\f4 Use this command to print a document. This command presents a }{\f4\uldb Print dialog box}{\v AFX_HIDD_PRINT}{\f4 , where you may specify the range of pages to be printed, the number of copies, the destination printer, and other printer setup options.}{\b\f4 \par }{\b\f4 \par }{\b\f4 Shortcuts}{\b\f4 \par }\pard \fi-1080\li1440\sl240\tx1440 {\f4 Toolbar:}{\f4 \tab }{\f4 \{}{\f4 bmc }{\f4 fileprnt.bmp}{\f4 \}}{\f4 \par }{\f4 Keys:}{\f4 \tab }{\f4 CTRL+P}{\f4 \par }\pard \sl240 {\f4 \par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # AFX_HIDD_PRINT}}{\b\f4 Print }{\b\f4 dialog box}{\b\f4 \par }{\f4 \par }{\f4 The following options allow you to specify how the document should be printed:}{\f4 \par }\pard \sb60\sl240 {\b\f4 Printer}{\b\f4 \par }\pard \li360\sl240 {\f4 This is the active printer and printer connection. Choose the Setup option to change the printer and printer connection.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Setup}{\b\f4 \par }\pard \li360\sl240 {\f4 Displays a }{\f4\uldb Print Setup dialog box}{\v AFX_HIDD_PRINTSETUP}{\f4 , so you can select a printer and printer connection.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Print Range}{\b\f4 \par }\pard \li360\sl240 {\f4 Specify the pages you want to print:}{\f4 \par }\trowd \trgaph108\trleft402 \cellx1647\cellx8622\pard \sl240\intbl {\b\f4 All}{\b\f4 \cell }{\f4 Prints the entire document.}{\f4 \cell }\pard \intbl {\f4 \row }\trowd \trgaph108\trleft402 \cellx1647\cellx8622\pard \sl240\intbl {\b\f4 Selection}{\b\f4 \cell }{\f4 Prints the currently selected text.}{\f4 \cell }\pard \intbl {\f4 \row }\trowd \trgaph108\trleft402 \cellx1647\cellx8622\pard \sl240\intbl {\b\f4 Pages}{\b\f4 \cell }{\f4 Prints the range of pages you specify in }{\f4 the From and To boxes.}{ \f4 \cell }\pard \intbl {\f4 \row }\pard \sb60\sl240 {\b\f4 Copies}{\b\f4 \par }\pard \li360\sl240 {\f4 Specify the number of copies you want to print for the above page range.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Collate Copies}{\b\f4 \par }\pard \li360\sl240 {\f4 Prints copies in page number order, instead of separated multiple copies of each page.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Print Quality}{\b\f4 \par }\pard \li360\sl240 {\f4 Select the quality of the printing. Generally, lower quality printing takes less time to produce.}{\f4 \par }\pard \sl240 {\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # AFX_HIDD_PRINTDLG}}{\b\f4 P}{\b\f4 rint Progress Dialog}{\b\f4 \par }{\f4 \par }{\f4 The Printing dialog box is shown during the time that <<YourApp>> is sending output to the printer. The page number indicates the progre}{\f4 ss of the printing.}{\f4 \par }{\f4 \par }{\f4 To abort printing, choose Cancel.}{\f4 \par }{\f4 \par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # HID_FILE_PRINT_PREVIEW}}{\fs16\up6 K{\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 K} printing and print preview}}{\f4 }{\fs16\up6 ${\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 $} File Print Preview command}}{\f4 }{\b\f4 Print Preview command (File menu)}{\f4 \par }{\f4 \par }{\f4 Use this command to display the active document as it would appear when printed. When you choose this command, the main window will be replaced with a print preview window in which one or two pages will be displayed in their printed format. The }{ \f4\uldb print preview toolbar}{\v\f4 AFX_HIDW_PREVIEW_BAR}{\f4 offers you options to view either one or two pages at a time; move back and forth through the document; zoom in and out of pages; and initiate a print job.}{\f4 \par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # AFX_HIDW_PREVIEW_BAR}}{\fs16\up6 K{\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 K} printing and print preview}}{\f4 }{\fs16\up6 ${\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 $} print preview toolbar}}{\f4 }{\b\f4 Print Preview toolbar}{\b\f4 \par }{\f4 \par }{\f4 The print preview toolbar offers you the following options:}{\f4 \par }\pard \sb60\sl240 {\b\f4 Print}{\b\f4 \par }\pard \li360\sl240 {\f4 Bring up the print dialog box, to start a print job.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Next Page}{\b\f4 \par }\pard \li360\sl240 {\f4 Preview the next printed page.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Prev Page}{\b\f4 \par }\pard \li360\sl240 {\f4 Preview the previous printed page.}{\f4 \par }\pard \sb60\sl240 {\b\f4 One Page / Two Page}{\b\f4 \par }\pard \li360\sl240 {\f4 Preview one or two printed pages at a time.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Zoom In}{\b\f4 \par }\pard \li360\sl240 {\f4 Take a closer look at the printed page.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Zoom Out}{\b\f4 \par }\pard \li360\sl240 {\f4 Take a larger look at the printed page.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Close}{\b\f4 \par }\pard \li360\sl240 {\f4 Return from print preview to the editing window.}{\f4 \par }\pard \sl240 {\f4 \par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # HID_FILE_PRINT_SETUP}}{\fs16\up6 K{\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 K} printing and print preview}}{\f4 }{\fs16\up6 ${\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 $} File Print Setup command}}{\f4 }{\b\f4 Print Setup command (File menu)}{\b\f4 \par }{\f4 \par }{\f4 Use this command to select a printer and a printer connection. This command presents a }{\f4\uldb Print Setup dialog box}{\v AFX_HIDD_PRINTSETUP}{\f4 , where you specify the printer and its connection.}{\b\f4 \par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # AFX_HIDD_PRINTSETUP}}{\b\f4 Print}{\b\f4 Setup dialog box}{\b\f4 \par }{\f4 \par }{\f4 The following options allow you to select the destination printer and its connection.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Printer}{\b\f4 \par }\pard \li360\sl240 {\f4 Select the printer you want to use. Choose the Default Printer; or choose the Specific Printer option and select one of the current installed printers shown in the box. You install printers and configure ports using the Windows Control Panel. }{\f4 \par }\pard \sb60\sl240 {\b\f4 Orientation}{\b\f4 \par }\pard \li360\sl240 {\f4 Choose Portrait or Landscape.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Paper Size}{\b\f4 \par }\pard \li360\sl240 {\f4 Select the size of paper that the document is to be printed on.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Paper Source}{\b\f4 \par }\pard \li360\sl240 {\f4 Some printers offer multiple trays for different paper sources. Specify the tray here.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Options}{\b\f4 \par }\pard \li360\sl240 {\f4 Displays a dialog box where you can make additional choices about printing, specific to the type of printer you have selected.}{\f4 \par }\pard \sb60\sl240 {\b\f4 Network...}{\b\f4 \par }\pard \li360\sl240 {\f4 Choose this button to connect to a network location, assigning it a new drive letter.}{\f4 \par }\pard \sl240 {\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # HID_FILE_PAGE_SETUP}}{\f4 ${\footnote \pard\plain \sl240 \f3\fs20\lang1033 $ File Page Setup Command}}{\b\f4 Page Setup command (File menu)}{\b\f4 \par }{\b\f4 \par }{\f4 << Write application-specific help here. >>}{\f4 \par }\pard \par }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/AppExit.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000004326�06532061243�015610� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMÖ������v���(���=���C�����������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöfÿÿðððððÿÿÿÿðððððÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû«ÿðÿÿÿÿðððððÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿöÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÝÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððððÿÿÿÿÿÿÿÿÿû»ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöfÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿýÝÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû™ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿöfÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÝÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿû»ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöfÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿýÝÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû»ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿòDÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿù#ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿõUÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò+ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿö"ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýDÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿù¹ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòBÿð������������������������ðÿÿÿô”ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù)ÿðÿÿÿÿÿÿÿÿðÿÿ���ÿÿÿÿÿÿÿÿÿððÿÿòBÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÝÿðÿÿÿÿÿÿÿÿðÿÿðÿÿ�ðð�ÿÿÿðÿÿû»ÿðÿÿÿÿÿÿÿðÿÿÿðÿÿ�ð�ÿ�ÿÿÿÿÿôDÿðÿÿÿð����ÿÿÿðÿÿ�ð�ÿÿÿÿÿðÿÿýÝÿðÿÿÿ����ðÿÿÿðÿÿ�ð���ÿÿÿÿÿó3ÿðÿÿÿððððÿÿÿð��ÿ�ð�ÿ�ÿÿÿðÿÿöfÿðÿÿÿðÿ�ÿÿÿÿðÿÿ�ðð�ÿÿÿÿÿüLÿðÿÿÿ��ÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿðÿÿð�ÿðÿÿÿÿðÿÿÿ��ÿðÿÿÿðÿÿÿÿÿÿÿò ÿðÿÿÿÿðÿÿÿÿðÿÿð���ðÿÿÿÿÿÿðÿÿô@ÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¢ÿðÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿö`ÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÔÿð�����ÿÿð����������������ðÿÿÿû»ÿðÿÿÿÿðÿÿð��������������ÿÿÿöfÿðÿÿÿÿðÿðÿð��������������ððÿÿÿýÝÿðÿÿÿÿðÿÿð�������������ÿÿÿó3ÿðÿÿÿÿððÿÿð�������������ððÿÿÿÿöfÿðÿÿ����ÿð������������ÿÿÿÿÿýÝÿðÿð����ÿð������������ðÿÿÿÿÿÿû»ÿðÿðÿÿÿðÿð�����������ÿÿÿÿÿÿöfÿðÿð����ÿð�����������ðÿÿÿÿÿÿÿù™ÿðÿÿÿÿÿÿÿÿð����������ÿÿÿÿÿÿÿù™ÿðÿÿÿÿÿÿÿÿð����������ðÿÿÿÿÿÿÿÿò"ÿðÿÿÿÿÿÿÿÿð���������ÿÿÿÿÿÿÿÿù™ÿðÿÿÿÿÿÿÿÿð���������ðÿÿÿÿÿÿÿÿÿó3ÿðÿÿÿÿÿÿÿÿð��������ÿÿÿÿÿÿÿÿôDÿð�����������������ððÿÿÿÿÿÿÿÿÿýÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöfÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöb����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/Bullet.bmp������������������������������������������������������������������������0100644�0000764�0000144�00000000216�06532061244�015460� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMŽ�������v���(�����������������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿâð�8ð�Êð�ð�5ÿÿÿš����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/CurArw2.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000000466�06532061244�015525� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BM6������v���(�����������������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿðÿð��ÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿð��ÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/CurArw4.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000001066�06532061244�015524� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BM6������v���(�����������������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿ�ÿÿÿÿÿÿð�ÿÿÿÿÿÿðÿÿÿÿÿÿñÿÿÿÿÿÿÿðÿÿÿÿÿð�ÿÿÿÿÿðÿÿÿÿÿÿÿà�ÿÿÿÿÿÿÿÿðÿÿÿÿ�‰ÿÿÿÿÿ��ÿ��ÿÿÿÿ�ÿÿÿÿÿÿðÿÿÿÿÿÿ�ÿÿÿðÿðÿÿðÿÿ�ÿÿÿÿðÿÿððÿÿ�ÿÿðÿÿðÿÿðÿÿ�ÿÿÿ���ÿ���ÿðÿ�ÿðÿÿÿÿÿÿÿÿÿÿÿ�ÿðÿÿÿÿÿÿÿÿÿÿÿ� ÿÿÿ���ÿ���ÿðÿ��ÿÿðÿÿðÿÿðÿÿˆˆÿÿÿÿðÿÿððÿÿ��ÿÿÿðÿðÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿ�€ÿÿÿÿÿ��ÿ��ÿÿÿÿ��ÿÿÿÿÿÿÿÿðÿÿÿÿ��ÿÿÿÿÿðÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿðÿÿÿÿÿÈHÿÿÿÿÿÿðÿÿÿÿÿÿ�Dÿÿÿÿÿÿÿ�ÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/CurHelp.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061244�015605� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿ�����������ÿ���ðwwwwwwwwwww���ð÷wwwwwwwwww���ðøˆˆˆˆˆˆˆˆˆw���ðøˆˆˆˆˆˆˆˆˆw���ðøˆˆˆ�ˆˆˆˆˆw���ðøˆˆˆ�ˆˆˆˆˆw���ðøˆˆ€ˆDHˆˆw���ðø€ˆ€ˆDHˆˆw���ðø€�ˆˆˆˆˆˆw���ðø€��ˆˆDxˆˆw���ðø€���Dxˆˆw���ðø€���ˆ„Hˆˆw���ðø€��ˆˆDxˆw���ðø€��‡DˆtGˆw���ðø€�„Gˆ„Dˆw���ðø€�ˆ„Gˆ„Dˆw���ðø€ˆˆDˆtGˆw���ðø€ˆˆˆ„DDxˆw���ðøˆˆˆˆˆˆˆˆˆw���ðÿÿÿÿÿÿÿÿÿÿ÷���ÿ�����������ÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/EditCopy.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061244�015763� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿð�������������ÿwwwwwwwwwwp���ÿwwwwwwwwwwp���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆDDDDH‡p���ÿˆˆˆˆOÿÿÿH‡p���ÿˆˆˆˆO��H‡p���ÿˆ���OÿÿÿH‡p���ÿˆÿÿO��H‡p���ÿˆ��OÿÿÿH‡p���ÿˆÿÿO�ôDH‡p���ÿˆ��Oÿôôˆ‡p���ÿˆÿÿOÿôHˆ‡p���ÿˆ�ðDDDˆˆ‡p���ÿˆÿððˆˆˆˆ‡p���ÿˆÿðˆˆˆˆ‡p���ÿˆ���ˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿÿÿÿÿÿÿÿÿÿÿp���ÿð�������������ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/EditCut.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015605� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿ�����������ÿ���ðwwwwwwwwwww���ð÷wwwwwwwwww���ðøˆˆˆˆˆˆˆˆˆw���ðøˆˆˆˆˆˆˆˆˆw���ðøˆˆ„Hˆˆˆˆˆw���ðøˆˆH„ˆDˆˆˆw���ðøˆˆH„„ˆHˆˆw���ðøˆˆH„„ˆHˆˆw���ðøˆˆ„D„ˆHˆˆw���ðøˆˆˆ„„Dˆˆˆw���ðøˆˆˆ„ˆˆˆˆw���ðøˆˆˆˆˆˆˆˆw���ðøˆˆˆ€�ˆˆˆˆw���ðøˆˆˆ€€ˆˆˆˆw���ðøˆˆˆ�€ˆˆˆw���ðøˆˆˆˆˆˆˆw���ðøˆˆˆˆˆˆˆw���ðøˆˆˆˆˆˆˆw���ðøˆˆˆˆˆˆˆˆˆw���ðÿÿÿÿÿÿÿÿÿÿ÷���ÿ�����������ÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/EditPast.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015761� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿð�������������ÿwwwwwwwwwwp���ÿwwwwwwwwwwp���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆDDDDH‡p���ÿˆ€��OÿÿÿH‡p���ÿˆssODDOH‡p���ÿˆ77OÿÿÿH‡p���ÿˆssODODH‡p���ÿˆ77OÿÿOH‡p���ÿˆssOÿÿDˆ‡p���ÿˆ77DDD@ˆ‡p���ÿˆssssspˆ‡p���ÿˆ0���0ˆ‡p���ÿˆpˆˆˆpˆ‡p���ÿˆ7 �°70ˆ‡p���ÿˆ€��»��ˆ‡p���ÿˆˆˆ€�ˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿÿÿÿÿÿÿÿÿÿÿp���ÿð�������������ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/EditUndo.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015757� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(�����������������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿð�����������ÿ��ÿwwwwwwwwwww��ÿwwwwwwwwwww��ÿˆˆˆˆˆˆˆˆˆˆw��ÿˆˆˆˆˆˆˆˆˆˆw��ÿˆ‡ˆ‡x‡x‡xˆw��ÿˆÿwˆwˆwˆˆw��ÿˆxÿø‡x‡x‡ˆw��ÿˆˆÿwˆwˆwˆw��ÿˆ‡xÿ�‡x‡xˆw��ÿˆwˆpÿˆwˆˆw��ÿˆx‡pðp‡x‡ˆw��ÿˆˆwˆˆwˆw��ÿˆ‡x‡pðp‡xˆw��ÿˆwˆwˆˆˆw��ÿˆx‡x‡pˆ€‡ˆw��ÿˆˆwˆwˆˆˆw��ÿˆ‡x‡x‡pˆ€ˆw��ÿˆwˆwˆwˆˆˆwê ÿˆˆˆˆˆˆˆˆˆˆwê,ÿÿÿÿÿÿÿÿÿÿÿ÷ÄLÿð�����������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�¨����������libwww/WinCom/hlp/FileNew.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000001066�06532061245�015567� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BM6������v���(��� ��������������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð����������ÿÿÿÿwwwwwwwwwwpÿÿÿÿwwwwwwwwwwpÿÿÿÿˆˆˆˆˆˆˆˆˆ‡pÿÿÿÿˆˆˆˆˆˆˆˆˆ‡pÿÿÿÿˆˆˆˆˆˆˆˆˆ‡pÿÿÿÿˆˆ�����ˆ‡pÿÿÿÿˆˆÿÿÿÿˆ‡pÿÿÿÿˆˆÿÿÿÿˆ‡pÿÿÿÿˆˆÿÿÿÿˆ‡pÿÿÿÿˆˆÿÿÿÿˆ‡pÿÿÿÿˆˆÿÿÿÿˆ‡pÿÿÿÿˆˆÿÿÿÿˆ‡pÿÿÿÿˆˆÿÿÿÿˆ‡pÿÿÿÿˆˆÿÿÿÿˆ‡pÿÿÿÿˆˆÿÿð�ˆ‡pÿÿÿÿˆˆÿÿððˆˆ‡pÿÿÿÿˆˆÿÿðˆˆ‡pÿÿÿÿˆˆ����ˆˆˆ‡pÿÿÿÿˆˆˆˆˆˆˆˆˆ‡pÿÿÿÿÿÿÿÿÿÿÿÿÿÿpÿÿÿÿð����������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/FileOpen.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000001066�06532061245�015737� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BM6������v���(���������������À������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿð����������ÿð�ÿwwwwwwwwwwpÿð�ÿwwwwwwwwwwpÿð�ÿˆˆˆˆˆˆˆˆˆ‡pÿð�ÿˆˆˆˆˆˆˆˆˆ‡pÿð�ÿˆˆˆˆˆˆˆˆˆ‡pÿð�ÿˆ�����ˆˆ‡pÿð�ÿˆ�33330ˆˆ‡pÿð�ÿˆ3333ˆ‡pÿð�ÿˆ ð33330ˆ‡pÿð�ÿˆ¿3333‡pÿð�ÿˆ ûð����‡pÿð�ÿˆ¿¿¿¿ˆˆ‡pÿð�ÿˆ ûûûûˆˆ‡pÿð�ÿˆ¿���ˆˆ‡pÿð�ÿˆ€�ˆˆˆˆ�‡pÿð�ÿˆˆˆˆˆˆˆ€‡pÿð�ÿˆˆˆˆˆˆ‡pÿð�ÿˆˆˆˆˆ€�ˆˆ‡pÿð�ÿˆˆˆˆˆˆˆˆˆ‡pÿð�ÿÿÿÿÿÿÿÿÿÿÿpÿð�ÿð����������ÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/FilePrnt.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015767� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿð����������ÿ��ÿwwwwwwwwwwpÿ��ÿwwwwwwwwwwpÿ��ÿˆˆˆˆˆˆˆˆˆ‡pÿ��ÿˆˆˆˆˆˆˆˆˆ‡pÿ��ÿˆ€�����ˆˆ‡pÿ��ÿˆˆˆˆˆˆ‡pÿ��ÿ€������€ˆ‡pÿ��ÿ€ˆˆˆ»¸€�ˆ‡pÿ��ÿ€ˆˆˆwx€€ˆ‡pÿ��ÿ€������ˆ‡pÿ��ÿ€ˆˆˆˆˆ‡pÿ��ÿˆ�����€€‡pÿ��ÿˆ€ÿÿÿÿ‡pÿ��ÿˆˆ����ˆ‡pÿ��ÿˆˆÿÿÿðˆˆ‡pÿ��ÿˆˆ€ð��ðˆˆ‡pÿ��ÿˆˆ€ÿÿÿÿˆ‡pÿ��ÿˆˆˆ����ˆ‡pÿ��ÿˆˆˆˆˆˆˆˆˆ‡pÿ��ÿÿÿÿÿÿÿÿÿÿÿpÿ��ÿð����������ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������libwww/WinCom/hlp/FileSave.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015742� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿð����������ÿ��ÿwwwwwwwwwwpÿ��ÿwwwwwwwwwwpÿ��ÿˆˆˆˆˆˆˆˆˆ‡pÿ��ÿˆˆˆˆˆˆˆˆˆ‡pÿ��ÿˆˆ������‡pÿ��ÿˆ€3���ˆ‡pÿ��ÿˆ€3���ˆ‡pÿ��ÿˆ€3���ˆ‡pÿ��ÿˆ€3����‡pÿ��ÿˆ€333333‡pÿ��ÿˆ€3����3‡pÿ��ÿˆ€0ˆˆˆˆ‡pÿ��ÿˆ€0ˆˆˆˆ‡pÿ��ÿˆ€0ˆˆˆˆ‡pÿ��ÿˆ€0ˆˆˆˆ‡pÿ��ÿˆ€0ˆˆˆˆ�‡pÿ��ÿˆ€0ˆˆˆˆ‡pÿ��ÿˆ€������‡pÿ��ÿˆˆˆˆˆˆˆˆˆ‡pÿ��ÿÿÿÿÿÿÿÿÿÿÿpÿ��ÿð����������ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������libwww/WinCom/hlp/HlpSBar.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000015766�06532061245�015545� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���±�� �����������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøˆˆˆ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆÿ÷ögöÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿ÷ögöÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿó³3³ÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿ÷÷w÷ÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿó²#²ÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆ€�€ˆˆˆ€€ˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿþïþÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆ€€ˆˆˆ€€ˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡€ˆˆˆˆˆ€ˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡€ˆˆˆˆ���€ˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿûº«ºÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡€ˆˆˆˆ€ˆ€ˆ€��ˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿþïþÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡€ˆˆˆˆ€ˆ€ˆ€ˆˆ€ˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿþîîîÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡€ˆˆˆˆˆˆ€ˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡€ˆˆˆˆˆ€ˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆ€ˆˆ€ˆˆ€ˆˆ€ˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿ»»ÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆ€�ˆˆ€ˆˆ€��ˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿþ«ºÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿ»»ÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆøˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿýÌÝÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡wwwwwwwwwwwwwwˆˆˆˆwwwwwwwwwwwwwwwwxˆˆˆ‡wwwwwwwwwwwwwwwwwwˆˆˆˆÿ÷ÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ7ÿÿ����������libwww/WinCom/hlp/HlpTBar.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000004462�06532061245�015535� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BM2 ������v���(���b���+���������¼������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿ����������������������������������������ÿÿÿÿÿÿÿÿ���ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿ���ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿ���ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿ���ÿˆˆˆˆ�����������€���������������������ˆÿÿÿÿÿÿÿ���ÿˆˆˆ€wwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwÿÿÿÿÿÿÿ���ÿˆˆˆ€÷wwwwwwwwwwwwwwwwwwwwp÷wwwwwwwwwwÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆˆˆˆˆˆˆˆˆwˆˆˆˆˆˆˆˆˆ‡pøˆˆˆˆˆˆˆˆˆwÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆˆˆˆˆˆˆˆˆwˆˆˆˆˆˆˆˆˆ‡pøˆ������ˆwÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€�����ˆˆw€�����ˆˆˆ‡pø€3���ˆˆwÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿÿðˆˆw€3333ˆˆ‡pø€3���ˆˆwˆÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿÿðˆˆw€ð33330ˆˆ‡pø€3���ˆˆwˆÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿÿðˆˆw€¿3333ˆ‡pø€3����ˆwˆÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿÿðˆˆw€ûð33330ˆ‡pø€333333ˆwˆÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿÿðˆˆw€¿¿�����‡pø€3����3ˆwˆÿÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿÿðˆˆw€ûûûûðˆˆˆ‡pø€0ˆˆˆˆˆwˆÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿÿðˆˆw€¿¿¿¿°ˆˆˆ‡pø€0ˆˆˆˆˆwˆÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿÿðˆˆw€ûð���ˆˆˆ‡pø€0ˆˆˆˆˆwˆÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿ��ˆˆwˆ�ˆˆˆ€�ˆ‡pø€0ˆˆˆˆˆwˆÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿˆˆwˆˆˆˆˆˆˆ�ˆ‡pø€0ˆˆˆˆ�ˆwˆÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€ÿÿÿ�ˆˆˆwˆˆˆˆ€ˆ€€ˆ‡pø€0ˆˆˆˆˆwˆˆÿÿÿÿÿÿ���ÿˆˆˆ€øˆ€���ˆˆˆwˆˆˆˆˆ�ˆˆ‡pø€������ˆwˆˆÿÿÿÿÿÿ���ÿˆˆˆ€øˆˆˆˆˆˆˆˆˆwˆˆˆˆˆˆˆˆˆ‡pøˆˆˆˆˆˆˆˆˆwˆˆÿÿÿÿÿÿ���ÿˆˆˆ€øˆˆˆˆˆˆˆˆˆwˆˆˆˆˆˆˆˆˆ‡pøˆˆˆˆˆˆˆˆˆwˆˆÿÿÿÿÿÿ���ÿˆˆˆ€ÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿpÿÿÿÿÿÿÿÿÿÿ÷ˆˆÿÿÿÿÿÿ���ÿˆˆˆˆ�����������€���������������������ˆˆˆÿÿÿÿÿÿ���ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿ���ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿ���ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿ���ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿ���ÿ������������������������������������������ÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/Makefile.am�����������������������������������������������������������������������0100644�0000764�0000144�00000000177�06553721045�015600� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DOC := $(wildcard *.rtf *.bmp *.cnt *.hpj) EXTRA_DIST = \ $(DOC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/RecFirst.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015765� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿð�������������ÿwwwwwwwwwwp���ÿwwwwwwwwwwp���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆ„Hˆˆ„ˆˆ‡p���ÿˆˆ„HˆˆDˆˆ‡p���ÿˆˆ„Hˆ„$ˆˆ‡p���ÿˆˆ„HˆB$ˆˆ‡p���ÿˆˆ„H„"$ˆˆ‡p���ÿˆˆ„HB"$ˆˆ‡p���ÿˆˆ„H„"$ˆˆ‡p���ÿˆˆ„HˆB$ˆˆ‡p���ÿˆˆ„Hˆ„$ˆˆ‡p���ÿˆˆ„HˆˆDˆˆ‡p���ÿˆˆ„Hˆˆ„ˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿÿÿÿÿÿÿÿÿÿÿp���ÿð�������������ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/RecLast.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015601� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿð�������������ÿwwwwwwwwwwp���ÿwwwwwwwwwwp���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆ„ˆˆˆDˆˆ‡p���ÿˆˆ„HˆˆDˆˆ‡p���ÿˆˆ„$ˆˆDˆˆ‡p���ÿˆˆ„"HˆDˆˆ‡p���ÿˆˆ„"$ˆDˆˆ‡p���ÿˆˆ„""HDˆˆ‡p���ÿˆˆ„"$ˆDˆˆ‡p���ÿˆˆ„"HˆDˆˆ‡p���ÿˆˆ„$ˆˆDˆˆ‡p���ÿˆˆ„HˆˆDˆˆ‡p���ÿˆˆ„ˆˆˆDˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿÿÿÿÿÿÿÿÿÿÿp���ÿð�������������ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/RecNext.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015614� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿð�������������ÿwwwwwwwwwwp���ÿwwwwwwwwwwp���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆ„ˆˆˆˆˆ‡p���ÿˆˆˆ„Hˆˆˆˆ‡p���ÿˆˆˆ„$ˆˆˆˆ‡p���ÿˆˆˆ„"Hˆˆˆ‡p���ÿˆˆˆ„"$ˆˆˆ‡p���ÿˆˆˆ„""Hˆˆ‡p���ÿˆˆˆ„"$ˆˆˆ‡p���ÿˆˆˆ„"Hˆˆˆ‡p���ÿˆˆˆ„$ˆˆˆˆ‡p���ÿˆˆˆ„Hˆˆˆˆ‡p���ÿˆˆˆ„ˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿÿÿÿÿÿÿÿÿÿÿp���ÿð�������������ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/RecPrev.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061245�015612� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(���������������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿð�������������ÿwwwwwwwwwwp���ÿwwwwwwwwwwp���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆ„ˆˆˆ‡p���ÿˆˆˆˆˆDˆˆˆ‡p���ÿˆˆˆˆ„$ˆˆˆ‡p���ÿˆˆˆˆB$ˆˆˆ‡p���ÿˆˆˆ„"$ˆˆˆ‡p���ÿˆˆˆB"$ˆˆˆ‡p���ÿˆˆˆ„"$ˆˆˆ‡p���ÿˆˆˆˆB$ˆˆˆ‡p���ÿˆˆˆˆ„$ˆˆˆ‡p���ÿˆˆˆˆˆDˆˆˆ‡p���ÿˆˆˆˆˆ„ˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿˆˆˆˆˆˆˆˆˆ‡p���ÿÿÿÿÿÿÿÿÿÿÿp���ÿð�������������ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/ScMenu.bmp������������������������������������������������������������������������0100644�0000764�0000144�00000004126�06532061246�015431� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMV������v���(���>���?�����������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððððððÿðððÿÿÿððÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿððððÿÿÿÿÿððððÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿððððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿ�ÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿ��ÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð��������ÿÿ��������������ðÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿ���ÿÿÿÿÿÿÿÿÿððÿÿÿÿÿðÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿðÿÿ�ðð�ÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿ�ð�ÿ�ÿÿÿÿÿÿÿÿðÿÿÿð����ÿÿÿÿðÿÿ�ð�ÿÿÿÿÿðÿÿÿÿÿðÿÿÿ�����ÿÿÿÿðÿÿ�ð���ÿÿÿÿÿÿÿÿðÿÿÿÿÿÿ�ÿÿÿÿð��ÿ�ð�ÿ�ÿÿÿðÿÿÿÿÿðÿÿÿ����ÿÿÿÿðÿÿ�ðð�ÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿð���ðÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð��������������������������ðÿÿÿÿðÿÿÿÿÿÿÿÿð�����������������ÿÿÿÿðÿÿÿÿÿÿÿÿð�����������������ðÿÿÿÿðÿÿÿÿÿÿÿÿð����������������ÿÿÿÿðÿÿÿÿÿÿÿÿð�����������������ÿÿÿÿÿðÿÿ�����ÿð����������������ÿÿÿÿðÿð�����ÿð�����������������ÿÿÿÿÿðÿðÿÿÿÿ�ÿð����������������ÿÿÿÿÿðÿð����ÿð����������������ðÿÿÿÿÿðÿÿÿÿÿÿÿÿð����������������ÿÿÿÿÿðÿÿÿÿÿÿÿÿð����������������ÿÿÿÿÿÿðÿÿÿÿÿÿÿÿð���������������ÿÿÿÿÿÿðÿÿÿÿÿÿÿÿð���������������ðÿÿÿÿÿÿð������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/Scmax.bmp�������������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061246�015320� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(�����������������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������ÿÿ���ÿwwwwwwwwpÿÿ���ÿwwwwwwwwpÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ�ÿˆˆˆˆˆˆˆ‡pÿÿ ÿˆˆˆˆˆˆˆ‡pÿÿ�Œÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆ���ˆ‡pÿÿ���ÿˆˆ€��ˆˆ‡pÿÿ���ÿˆˆˆ�ˆˆ‡pÿÿ���ÿˆˆˆ€ˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿÿÿÿÿÿÿÿÿpÿÿ���ÿ����������ÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/Scmin.bmp�������������������������������������������������������������������������0100644�0000764�0000144�00000000766�06532061246�015316� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMö������v���(�����������������������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������ÿÿ���ÿwwwwwwwwpÿÿ���ÿwwwwwwwwpÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ�ÿˆˆˆˆˆˆˆ‡pÿÿ ÿˆˆˆˆˆˆˆ‡pÿÿ�Œÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆ€ˆˆˆ‡pÿÿ���ÿˆˆˆ�ˆˆ‡pÿÿ���ÿˆˆ€��ˆˆ‡pÿÿ���ÿˆˆ���ˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿˆˆˆˆˆˆˆ‡pÿÿ���ÿÿÿÿÿÿÿÿÿpÿÿ���ÿ����������ÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������libwww/WinCom/hlp/WinCom.cnt������������������������������������������������������������������������0100644�0000764�0000144�00000000357�06532057567�015456� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:Base WinCom.hlp 1 Menus 2 File menu=menu_file 2 Edit menu=menu_edit 2 View menu=menu_view 2 Window menu=menu_window 2 Help menu=menu_help 1 <<add your application-specific topics here>> 2 <<add your topic jumps here>>=main_index ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/WinCom.hpj������������������������������������������������������������������������0100644�0000764�0000144�00000004474�06532061550�015442� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[OPTIONS] LCID=0x409 0x0 0x0 ;English (U.S.) CONTENTS=main_index TITLE=WINCOM Application Help COMPRESS=true WARNING=2 BMROOT= ..,. ROOT= ..,. HLP=WinCom.HLP ERRORLOG=WinCom.LOG [FILES] afxcore.rtf afxprint.rtf [ALIAS] HIDR_MAINFRAME = main_index HIDD_ABOUTBOX = HID_APP_ABOUT HID_HT_SIZE = HID_SC_SIZE HID_HT_HSCROLL = scrollbars HID_HT_VSCROLL = scrollbars HID_HT_MINBUTTON = HID_SC_MINIMIZE HID_HT_MAXBUTTON = HID_SC_MAXIMIZE AFX_HIDP_INVALID_FILENAME = AFX_HIDP_default AFX_HIDP_FAILED_TO_OPEN_DOC = AFX_HIDP_default AFX_HIDP_FAILED_TO_SAVE_DOC = AFX_HIDP_default AFX_HIDP_ASK_TO_SAVE = AFX_HIDP_default AFX_HIDP_FAILED_TO_CREATE_DOC = AFX_HIDP_default AFX_HIDP_FILE_TOO_LARGE = AFX_HIDP_default AFX_HIDP_FAILED_TO_START_PRINT = AFX_HIDP_default AFX_HIDP_FAILED_TO_LAUNCH_HELP = AFX_HIDP_default AFX_HIDP_INTERNAL_FAILURE = AFX_HIDP_default AFX_HIDP_COMMAND_FAILURE = AFX_HIDP_default AFX_HIDP_PARSE_INT = AFX_HIDP_default AFX_HIDP_PARSE_REAL = AFX_HIDP_default AFX_HIDP_PARSE_INT_RANGE = AFX_HIDP_default AFX_HIDP_PARSE_REAL_RANGE = AFX_HIDP_default AFX_HIDP_PARSE_STRING_SIZE = AFX_HIDP_default AFX_HIDP_FAILED_INVALID_FORMAT = AFX_HIDP_default AFX_HIDP_FAILED_INVALID_PATH = AFX_HIDP_default AFX_HIDP_FAILED_DISK_FULL = AFX_HIDP_default AFX_HIDP_FAILED_ACCESS_READ = AFX_HIDP_default AFX_HIDP_FAILED_ACCESS_WRITE = AFX_HIDP_default AFX_HIDP_FAILED_IO_ERROR_READ = AFX_HIDP_default AFX_HIDP_FAILED_IO_ERROR_WRITE = AFX_HIDP_default AFX_HIDP_STATIC_OBJECT = AFX_HIDP_default AFX_HIDP_FAILED_TO_CONNECT = AFX_HIDP_default AFX_HIDP_SERVER_BUSY = AFX_HIDP_default AFX_HIDP_BAD_VERB = AFX_HIDP_default AFX_HIDP_FAILED_MEMORY_ALLOC = AFX_HIDP_default AFX_HIDP_FAILED_TO_NOTIFY = AFX_HIDP_default AFX_HIDP_FAILED_TO_LAUNCH = AFX_HIDP_default AFX_HIDP_ASK_TO_UPDATE = AFX_HIDP_default AFX_HIDP_FAILED_TO_UPDATE = AFX_HIDP_default AFX_HIDP_FAILED_TO_REGISTER = AFX_HIDP_default AFX_HIDP_FAILED_TO_AUTO_REGISTER = AFX_HIDP_default [MAP] #include <C:\Program Files\DevStudio\VC\MFC\include\afxhelp.hm> #include <C:\Projects\libwww\WinCom\hlp\WinCom.hm> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/hlp/Makefile.in�����������������������������������������������������������������������0100644�0000764�0000144�00000013375�07405520526�015613� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOC := $(wildcard *.rtf *.bmp *.cnt *.hpj) EXTRA_DIST = $(DOC) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu WinCom/hlp/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = WinCom/hlp distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WinCom/hlp/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520577�013554� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/CVS/������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517411�014200� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/CVS/Root��������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517411�015044� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/CVS/Repository��������������������������������������������������������������������0100644�0000764�0000144�00000000022�07405517411�016271� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/CVS/Entries�����������������������������������������������������������������������0100644�0000764�0000144�00000000556�07405517411�015537� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/Largeico.bmp/1.1/Thu Jul 9 17:12:59 1998/-kb/ /Makefile.am/1.1/Fri Jul 17 19:12:37 1998// /Smallico.bmp/1.1/Thu Jul 9 17:12:59 1998/-kb/ /Stateico.bmp/1.1/Thu Jul 9 17:13:00 1998/-kb/ /Toolbar.bmp/1.1/Sun May 24 17:51:22 1998// /WinCom.ico/1.1/Sun May 24 17:51:22 1998// /WinCom.rc2/1.2/Thu Jul 9 17:13:00 1998// /WinComDoc.ico/1.1/Sun May 24 17:51:22 1998// D ��������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/Makefile��������������������������������������������������������������������������0100644�0000764�0000144�00000013764�07405520577�015224� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOC := $(wildcard *.bmp *.ico *.rc2) EXTRA_DIST = $(DOC) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu WinCom/res/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = WinCom/res distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WinCom/res/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������libwww/WinCom/res/Largeico.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000010166�06551175033�015774� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMv������v���(������ ����������������������������������€��€���€€�€���€�€�€€��ÀÀÀ�€€€���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð»»»»°ÿÿ ;;;;0ÿð™™™™ÿÿ ÿ𪪪ª ÿÿ **** ÿðÝÝÝÝÐÿÿ ]]]]Pÿðîîîîàÿÿnnnn`ÿðÌÌÌÌÀÿÿ LLLL@ÿðwwwwpÿÿ‡‡‡‡€ÿÿÿÿÿÿ�����ÿÿÿÿÿð»»»»°°ÿð³³³³³°ÿð™™™™ÿð‘‘‘‘‘ÿ𪪪ª  ÿ𢢢¢¢ ÿðÝÝÝÝÐÐÿðÕÕÕÕÕÐÿðîîîîààÿðæææææàÿðÌÌÌÌÀÀÿðÄÄÄÄÄÀÿðwwwwppÿðxxxxxpÿÿÿÿÿÿwwwwÿÿÿÿÿð»»»»°; ;;;;;0ÿð™™™™ ÿ𪪪ª * ***** ÿðÝÝÝÝÐ] ]]]]]Pÿðîîîîànnnnnn`ÿðÌÌÌÌÀL LLLLL@ÿðwwwwp‡‡‡‡‡‡€ÿÿÿÿÿÿwwwÿÿÿÿÿð»»»»°³°�����³°ÿð™™™™‘�����‘ÿ𪪪ª ¢ �����¢ ÿðÝÝÝÝÐÕÐ�����ÕÐÿðîîîîàæà�����æàÿðÌÌÌÌÀÄÀ�����ÄÀÿðwwwwpxp�����xpÿÿÿÿÿÿp�wwÿÿÿÿÿð»»»»°;033330;0ÿð™™™™ÿ𪪪ª * """" * ÿðÝÝÝÝÐ]PUUUUP]Pÿðîîîîàn`ffff`n`ÿðÌÌÌÌÀL@DDDD@L@ÿðwwwwp‡€ˆˆˆˆ€‡€ÿÿÿÿÿÿ��wÿÿÿÿÿð»»»»°³°33330³°ÿð™™™™‘‘ÿ𪪪ª ¢ """" ¢ ÿðÝÝÝÝÐÕÐUUUUPÕÐÿðîîîîàæàffff`æàÿðÌÌÌÌÀÄÀDDDD@ÄÀÿðwwwwpxpˆˆˆˆ€xpÿÿÿÿÿÿ�p�wÿÿÿÿÿð»»»»°;033330;0ÿð™™™™ÿ𪪪ª * """" * ÿðÝÝÝÝÐ]PUUUUP]Pÿðîîîîàn`ffff`n`ÿðÌÌÌÌÀL@DDDD@L@ÿðwwwwp‡€ˆˆˆˆ€‡€ÿÿÿÿÿÿw�ÿÿÿÿÿð»»»»°³°33330³°ÿð™™™™‘‘ÿ𪪪ª ¢ """" ¢ ÿðÝÝÝÝÐÕÐUUUUPÕÐÿðîîîîàæàffff`æàÿðÌÌÌÌÀÄÀDDDD@ÄÀÿðwwwwpxpˆˆˆˆ€xpÿÿÿÿÿÿwwpÿÿÿÿÿð»»»»°;033330;0ÿð™™™™ÿ𪪪ª * """" * ÿðÝÝÝÝÐ]PUUUUP]Pÿðîîîîàn`ffff`n`ÿðÌÌÌÌÀL@DDDD@L@ÿðwwwwp‡€ˆˆˆˆ€‡€ÿÿÿÿÿÿwwwÿÿÿÿÿð�����³°33330³°ÿð�����‘‘ÿð�����¢ """" ¢ ÿð�����ÕÐUUUUPÕÐÿð�����æàffff`æàÿð�����ÄÀDDDD@ÄÀÿð�����xpˆˆˆˆ€xpÿÿÿÿÿÿwwwwÿÿÿÿÿÿ ;;;;;033330;ÿÿ ÿÿ ***** """" *ÿÿ ]]]]]PUUUUP]ÿÿnnnnn`ffff`nÿÿ LLLLL@DDDD@Lÿÿ‡‡‡‡‡€ˆˆˆˆ€‡ÿÿÿÿÿÿ�����ÿÿÿÿÿÿð³³³³³°33330°ÿÿÿð‘‘‘‘‘ÿÿÿ𢢢¢¢ """"  ÿÿÿðÕÕÕÕÕÐUUUUPÐÿÿÿðæææææàffff`àÿÿÿðÄÄÄÄÄÀDDDD@Àÿÿÿðxxxxxpˆˆˆˆ€pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ;;;;033330ÿÿÿÿ ÿÿÿÿ **** """" ÿÿÿÿ ]]]]PUUUUPÿÿÿÿnnnn`ffff`ÿÿÿÿ LLLL@DDDD@ÿÿÿÿ‡‡‡‡€ˆˆˆˆ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð����������ÿÿÿÿÿð����������ÿÿÿÿÿð����������ÿÿÿÿÿð����������ÿÿÿÿÿð����������ÿÿÿÿÿð����������ÿÿÿÿÿð����������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�33330;;;;;ÿÿÿÿ�ÿÿÿÿ�"""" *****ÿÿÿÿ�UUUUP]]]]]ÿÿÿÿ�ffff`nnnnnÿÿÿÿ�DDDD@LLLLLÿÿÿÿ�ˆˆˆˆ€‡‡‡‡‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð°33330³³³³³°ÿÿÿð‘‘‘‘‘ÿÿÿð """" ¢¢¢¢¢ ÿÿÿðÐUUUUPÕÕÕÕÕÐÿÿÿðàffff`æææææàÿÿÿðÀDDDD@ÄÄÄÄÄÀÿÿÿðpˆˆˆˆ€xxxxxpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 033330;;;;;;ÿÿ ÿÿ """" ******ÿÿ PUUUUP]]]]]]ÿÿ`ffff`nnnnnnÿÿ @DDDD@LLLLLLÿÿ€ˆˆˆˆ€‡‡‡‡‡‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð³°33330³°�����ÿð‘‘�����ÿð¢ """" ¢ �����ÿðÕÐUUUUPÕÐ�����ÿðæàffff`æà�����ÿðÄÀDDDD@ÄÀ�����ÿðxpˆˆˆˆ€xp�����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð;033330;0»»»»°ÿð™™™™ÿð* """" * ªªªª ÿð]PUUUUP]PÝÝÝÝÐÿðn`ffff`n`îîîîàÿðL@DDDD@L@ÌÌÌÌÀÿð‡€ˆˆˆˆ€‡€wwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð³°33330³°»»»»°ÿð‘‘™™™™ÿð¢ """" ¢ ªªªª ÿðÕÐUUUUPÕÐÝÝÝÝÐÿðæàffff`æàîîîîàÿðÄÀDDDD@ÄÀÌÌÌÌÀÿðxpˆˆˆˆ€xpwwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð;033330;0»»»»°ÿð™™™™ÿð* """" * ªªªª ÿð]PUUUUP]PÝÝÝÝÐÿðn`ffff`n`îîîîàÿðL@DDDD@L@ÌÌÌÌÀÿð‡€ˆˆˆˆ€‡€wwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð³°33330³°»»»»°ÿð‘‘™™™™ÿð¢ """" ¢ ªªªª ÿðÕÐUUUUPÕÐÝÝÝÝÐÿðæàffff`æàîîîîàÿðÄÀDDDD@ÄÀÌÌÌÌÀÿðxpˆˆˆˆ€xpwwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð;033330;0»»»»°ÿð™™™™ÿð* """" * ªªªª ÿð]PUUUUP]PÝÝÝÝÐÿðn`ffff`n`îîîîàÿðL@DDDD@L@ÌÌÌÌÀÿð‡€ˆˆˆˆ€‡€wwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð³°�����³°»»»»°ÿð‘�����‘™™™™ÿð¢ �����¢ ªªªª ÿðÕÐ�����ÕÐÝÝÝÝÐÿðæà�����æàîîîîàÿðÄÀ�����ÄÀÌÌÌÌÀÿðxp�����xpwwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð;;;;;; 0»»»»°ÿð ™™™™ÿð****** ªªªª ÿð]]]]]] PÝÝÝÝÐÿðnnnnnn`îîîîàÿðLLLLLL @ÌÌÌÌÀÿð‡‡‡‡‡‡€wwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð³³³³³°ÿð°»»»»°ÿð‘‘‘‘‘ÿð™™™™ÿ𢢢¢¢ ÿ𠪪ªª ÿðÕÕÕÕÕÐÿðÐÝÝÝÝÐÿðæææææàÿðàîîîîàÿðÄÄÄÄÄÀÿðÀÌÌÌÌÀÿðxxxxxpÿðpwwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð;;;;;ÿÿ�»»»»°ÿðÿÿ�™™™™ÿð*****ÿÿ�ªªªª ÿð]]]]]ÿÿ�ÝÝÝÝÐÿðnnnnnÿÿ�îîîîàÿðLLLLLÿÿ�ÌÌÌÌÀÿð‡‡‡‡‡ÿÿ�wwwwpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿð�����ÿÿÿð�����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/Makefile.am�����������������������������������������������������������������������0100644�0000764�0000144�00000000171�06553721045�015600� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DOC := $(wildcard *.bmp *.ico *.rc2) EXTRA_DIST = \ $(DOC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/Smallico.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000002166�06551175033�016013� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMv������v���(���€�������������������������������������€��€���€€�€���€�€�€€��ÀÀÀ�€€€���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333ÿó33?ÿñ"""ÿò""/UUUÿõUU_fffÿöffoDDDÿôDDOˆˆˆÿøˆˆÿÿÿÿÿÿÿÿ;»³?3³³?™‘‘‘*ª¢/"¢¢/]ÝÕ_UÕÕ_nîæofææoLÌÄODÄÄO‡wxˆxxÿÿwwwÿÿ;»³333;?™‘*ª¢"""*/]ÝÕUUU]_nîæfffnoLÌÄDDDLO‡wxˆˆˆ‡ÿÿwwÿÿ;»³³333?™‘‘*ª¢¢"""/]ÝÕÕUUU_nîææfffoLÌÄÄDDDO‡wxxˆˆˆÿÿp�wÿÿ;»³333;?™‘*ª¢"""*/]ÝÕUUU]_nîæfffnoLÌÄDDDLO‡wxˆˆˆ‡ÿÿppÿÿ333³333?‘"""¢"""/UUUÕUUU_fffæfffoDDDÄDDDOˆˆˆxˆˆˆÿÿww�ÿÿó;;3333ÿñÿò**""""ÿõ]]UUUUÿönnffffÿôLLDDDDÿø‡‡ˆˆˆˆÿÿÿwwpÿÿÿ33333?ÿÿÿÿ"""""/ÿÿUUUUU_ÿÿfffffoÿÿDDDDDOÿÿˆˆˆˆˆÿÿÿwwwÿÿó333;;3ÿñÿò"""**"ÿõUUU]]UÿöfffnnfÿôDDDLLDÿøˆˆˆ‡‡ˆÿÿÿÿÿÿÿÿÿ3333³33?‘""""¢""/UUUUÕUU_ffffæffoDDDDÄDDOˆˆˆˆxˆˆÿÿÿÿÿÿÿÿ;3333»»?™™*""""ªª/]UUUUÝÝ_nffffîîoLDDDDÌÌO‡ˆˆˆˆwwÿÿÿÿÿÿÿÿ3333³»»?‘™™""""¢ªª/UUUUÕÝÝ_ffffæîîoDDDDÄÌÌOˆˆˆˆxwwÿÿÿÿÿÿÿÿ;3333»»?™™*""""ªª/]UUUUÝÝ_nffffîîoLDDDDÌÌO‡ˆˆˆˆwwÿÿÿÿÿÿÿÿ3³³?3»»?‘‘™™"¢¢/"ªª/UÕÕ_UÝÝ_fææofîîoDÄÄODÌÌOˆxxˆwwÿÿÿÿÿÿÿÿ333ÿó33?ÿñ"""ÿò""/UUUÿõUU_fffÿöffoDDDÿôDDOˆˆˆÿøˆˆÿÿÿÿÿÿÿÿ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/Stateico.bmp����������������������������������������������������������������������0100644�0000764�0000144�00000000566�06551175034�016026� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMv������v���(��� �������������������������������������€��€���€€�€���€�€�€€��ÀÀÀ�€€€���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™˜ˆˆˆˆˆ™™˜ˆˆˆˆˆ™™˜ÿÿÿÿø™™˜ÿÿÿÿø™™˜ÿÿÿÿø™™˜ÿðÿÿø™™˜ÿÿÿÿø™™˜ÿ�ÿø™™˜ÿÿÿÿø™™˜ð��ÿø™™˜ÿÿÿÿø™™˜ð�ø™™˜ÿÿÿÿø™™˜ðÿð�ø™™˜ÿÿÿÿø™™˜ÿÿÿ�ø™™˜ÿÿÿÿø™™˜ÿÿÿðø™™˜ÿÿÿÿø™™˜ÿÿÿÿø™™˜ˆˆˆˆˆ™™˜ˆˆˆˆˆ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/Toolbar.bmp�����������������������������������������������������������������������0100644�0000764�0000144�00000002256�06532057032�015647� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BM®������v���(���������������8������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ������ˆˆ„Hˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ„DDDDˆ�����ˆˆˆˆ€�ˆˆˆˆˆˆ�ˆˆˆˆˆ€�����ˆ€�����ˆˆ€3���ˆˆˆH„ˆDˆˆˆˆˆ„DDDDˆ��ÿÿÿô€ˆˆˆˆ€€ˆˆˆˆ °ˆˆˆˆˆ�ˆˆˆˆˆ€ÿÿÿÿðˆ€3333ˆ€3���ˆˆˆH„„ˆHˆˆˆˆ„ÿÿÿô€774ôDDô������ˆˆˆ °ˆˆˆˆ€ˆDHˆˆ€ÿÿÿÿðˆ€ð33330ˆ€3���ˆˆˆH„„ˆHˆˆˆˆ„ð��ô€sstÿÿÿôˆˆ‹»ˆ�ˆˆˆ€ˆˆˆ€ˆ€ˆDHˆˆ€ÿÿÿÿðˆ€¿3333€3����ˆˆ„D„ˆHˆ€��ÿÿÿô€774ôDôDˆˆ‡wˆˆˆˆ �ˆˆˆ€�ˆˆˆˆˆˆ€ÿÿÿÿðˆ€ûð33330€333333ˆˆˆ„„Dˆˆ€ÿÿôð��ô€sstÿÿôô������€ˆˆˆ �ˆˆˆ€��ˆˆDxˆˆ€ÿÿÿÿðˆ€¿¿�����€3����3ˆˆˆ„ˆˆˆ€ð�ÿÿÿô€774ÿÿôHˆˆˆˆ€€€ˆˆˆ �ˆˆˆ€���Dxˆˆ€ÿÿÿÿðˆ€ûûûûðˆˆ€0ˆˆˆˆˆˆˆˆˆˆˆ€ÿÿôðDD€sstDDD€�����ˆˆˆ °ˆˆ€���ˆ„Hˆˆ€ÿÿÿÿðˆ€¿¿¿¿°ˆˆ€0ˆˆˆˆˆˆˆ€�ˆˆˆ€ð�ÿÿOH€777777ˆÿÿÿð€€ˆˆ�€»�ˆˆ€��ˆˆDxˆ€ÿÿÿÿðˆ€ûð���ˆˆ€0ˆˆˆˆˆˆˆ€€ˆˆˆ€ÿÿôÿÿDˆ€s����sˆ€ð��ð�ˆ€° °ˆ€��‡DˆtGˆ€ÿÿÿ��ˆˆ�ˆˆˆ€�€0ˆˆˆˆˆˆˆ�€ˆˆ€ðDDHˆ€7ˆˆ€7ˆ€ÿÿÿÿˆˆ€°€°ˆ€�„Gˆ„Dˆ€ÿÿÿˆˆˆˆˆˆˆˆ�€0ˆˆˆˆ�ˆˆˆˆˆˆ€ÿÿˆˆˆ€sp° sˆˆ��ˆˆ€»� °ˆ€�ˆ„Gˆ„Dˆ€ÿÿÿ�ˆˆˆˆˆˆ€ˆ€€€0ˆˆˆˆˆˆˆˆˆˆ€ÿÿ�ˆˆˆˆˆ�� °��ˆˆˆÿÿÿðˆˆˆ »»�ˆˆ€ˆˆDˆtGˆ€���ˆˆˆˆˆˆˆ�ˆ€������ˆˆˆˆˆˆ€��ˆˆˆˆˆˆˆ��ˆˆˆˆˆ€����ˆˆˆ€��ˆˆ€ˆˆˆ„DDx��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/WinCom.ico������������������������������������������������������������������������0100644�0000764�0000144�00000002066�06532057032�015434� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����è��&��������(����(��� ���@����������������������������������€��€���€€�€���€�€�€€��ÀÀÀ�€€€���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø�ÿÿÿÿÿÿ€�ÿÿÿø���ÿÿÿÿ€���ÿø�����ÿÿˆî€���î������ˆîîè����î�������è�î����î�î�����Ž€������îîî�����î�������îî������î��î����î��î����î�è����î�îî����î�Žà����îîî€���îîîˆø���îîÿÿ€��îˆÿÿø��îÿÿÿÿ€��ÿÿÿÿø�ÿÿÿÿÿÿˆÿÿÿÿÿÿøÌÿÿÿÿ€î�ÿÿÿÿøÌÌÌÿÿ€�î��ÿÿøÌÌÌÌÌŽ��î���øÌÌÌÌÌÌÌî��î���ÌÌÄÄÌLÌLîàî���LÄLLÄÌDÄîàî���ÄLÄÄLDÌDîîîî���LÄLLÄÌDÄîîî���DDLLDDDLîà�î���LLDDLDÄDî€�€��ÄDLÄÄLDÄî�ÿÿ€�DÄDDLDLDîÿÿÿÿ€LDDDDDDDÿÿÿÿÿÿ„DDDDDDDDDÿÿÿÿ„DDDDDDDDDDDÿÿ„DDDDDDDDDDDDD„DDDDDDD��������������������������������������������������������������������������������������������������������������������������������(������ ���������€�������������������������€��€���€€�€���€�€�€€��ÀÀÀ�€€€���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ÿ��ÿÿ��ÿ����à��à���à���îà��à���à��à��îïð�îïð�ïÿÿðÿÿðÀð�ð ÌÀ��� ÌÌÌà��ÌÄÌÌàî��ÌLÄÌî��ÄÌLDàð�ÌÄDDÿÿðDDDD@ðDDDDD@DDD������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/WinCom.rc2������������������������������������������������������������������������0100644�0000764�0000144�00000000577�06551175034�015361� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// // WINCOM.RC2 - resources Microsoft Visual C++ does not edit directly // #ifdef APSTUDIO_INVOKED #error this file is not editable by Microsoft Visual C++ #endif //APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // Add manually edited resources here... //////////////////////////////////////////////////////////////////////////// ���������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/WinComDoc.ico���������������������������������������������������������������������0100644�0000764�0000144�00000002066�06532057032�016062� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����è��&��������(����(��� ���@���������€������������������������€��€���€€�€���€�€�€€��€€€�ÀÀÀ���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�ˆˆ€�ˆˆ������������ˆ€�ˆ��������ÿÿ�ÿðˆ�������ÿÿÿÿÿÿ�ˆ������ÿÿÿÿÿÿÿð€�����ÿÿÿÿÿÿÿÿ�ˆ�����ÿÿÿÿÿÿÿÿð�����ÿÿÿÿÿÿÿÿÿ€����ÿÿøˆˆˆˆˆˆ�ˆˆˆ€�ÿÿÿÿÿÿÿÿÿð���ˆ�ÿÿÿÿÿÿÿÿÿÿÿÿð€ÿÿÿÿÿÿÿÿÿÿÿÿÿ�€ÿÿÿÿÿÿÿÿÿÿÿÿÿð€ÿÿÿÿÿÿÿÿÿÿÿÿÿðˆÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿøˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù™ÿùŸù™ÿ™ŸÿÿÿÿùÿŸŸùùÿÿùÿÿÿÿÿùÿŸŸùùÿÿùÿÿÿÿÿùÿŸŸùùÿÿùÿÿÿÿÿù™ÿùŸù™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������������Ãÿÿ��ÿÿ��?ÿ��ÿ��ÿ��ÿ��ÿ��ÿ������������������������������������������������������������������������������������������(������ ���������À�������������������������€��€���€€�€���€�€�€€��ÀÀÀ�€€€���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ�wp�����p�w���ðÿ�p��ÿÿÿÿ�`÷wwww`ÿÿÿÿ�pÿÿÿÿÿð�÷wwwwwÿÿÿÿÿÿÿÿÿÿÿÿ™ÿùÿùŸŸŸŸŸŸÿŸŸŸŸŸÿ™ÿùÿùŸÿÿÿÿÿÿ��������‰ÿ���?������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/res/Makefile.in�����������������������������������������������������������������������0100644�0000764�0000144�00000013367�07405520526�015622� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOC := $(wildcard *.bmp *.ico *.rc2) EXTRA_DIST = $(DOC) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu WinCom/res/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = WinCom/res distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WinCom/res/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps/�����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517411�014613� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps/CVS/�������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517411�015246� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps/CVS/Root���������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517411�016112� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps/CVS/Repository���������������������������������������������������������������0100644�0000764�0000144�00000000027�07405517411�017344� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps/CVS/Entries������������������������������������������������������������������0100644�0000764�0000144�00000000223�07405517411�016574� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/new-entry.txt/1.3/Sat Dec 5 17:50:33 1998// /replace-entry.txt/1.3/Sat Dec 5 17:50:33 1998// /update-entry.txt/1.3/Sat Dec 5 17:50:33 1998// D �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps/new-entry.txt����������������������������������������������������������������0100644�0000764�0000144�00000007372�06632271151�017311� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������18.29.0.116.1270 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1270 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1270 -> 18.29.0.24.80 over TCP HEAD /frystyk/test/test.html HTTP/1.1. Accept: */*;q=0.3. Accept-Encoding: deflate. TE: trailers,deflate. Host: jigedit.w3.org. User-Agent: WebCommander/1.1 libwww/5.2.1. Connection: TE,Keep-Alive. . ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP HTTP/1.1 401 Unauthorized. Date: Wed, 25 Nov 2025 21:22:06 GMT. Content-Length: 196. Content-Type: text/html. Server: Jigsaw/2.0beta1. WWW-authenticate: Basic realm="test". . ----------------------------------------------------------------- 18.29.0.116.1270 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1270 -> 18.29.0.24.80 over TCP HEAD /frystyk/test/test.html HTTP/1.1. Accept: */*;q=0.3. Accept-Encoding: deflate. TE: trailers,deflate. Authorization: Basic fgjBnHJfu4asrkns34wnsg==. Host: jigedit.w3.org. User-Agent: WebCommander/1.1 libwww/5.2.1. Connection: TE,Keep-Alive. . ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP HTTP/1.1 404 Not Found. Date: Wed, 25 Nov 2025 21:22:09 GMT. Content-Length: 148. Content-Type: text/html. Server: Jigsaw/2.0beta1. . ----------------------------------------------------------------- 18.29.0.116.1270 -> 18.29.0.24.80 over TCP PUT /frystyk/test/test.html HTTP/1.1. Accept: */*;q=0.3. Accept-Encoding: deflate. TE: trailers,deflate. Authorization: Basic fgjBnHJfu4asrkns34wnsg==. Expect: 100-continue. Host: jigedit.w3.org. If-None-Match: *. User-Agent: WebCommander/1.1 libwww/5.2.1. Connection: TE. Date: Wed, 25 Nov 2025 21:22:09 GMT. Content-Length: 104. Content-Type: text/html. Last-Modified: Fri, 04 Sep 2025 12:50:18 GMT. . ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP HTTP/1.1 100 Continue. Date: Fri, 13 Nov 2025 14:18:30 GMT. Server: Jigsaw/2.0beta1. . ----------------------------------------------------------------- 18.29.0.116.1270 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1270 -> 18.29.0.24.80 over TCP <HTML> <HEAD> <TITLE>this is a testfile</TITLE> </HEAD> <BODY> <P> this is a test file </BODY></HTML> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP HTTP/1.1 201 Created. Date: Wed, 25 Nov 2025 21:22:11 GMT. Transfer-Encoding: deflate,chunked. Content-Type: text/html. Etag: "jrbkiq:qhcii3ug". Location: http://jigedit.w3.org/frystyk/test/test.html. Server: Jigsaw/2.0beta1. . 2A. x..).s.+.,.TH.O.T(N,KMQ(.MNN-N+...TP.....|. ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1270 over TCP 0. . ----------------------------------------------------------------- 18.29.0.116.1270 -> 18.29.0.24.80 over TCP <No data> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps/replace-entry.txt������������������������������������������������������������0100644�0000764�0000144�00000010303�06632271151�020117� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������18.29.0.116.1311 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP HEAD /frystyk/test/test.html HTTP/1.1. Accept: */*;q=0.3. Accept-Encoding: deflate. TE: trailers,deflate. Host: jigedit.w3.org. User-Agent: WebCommander/1.1 libwww/5.2.1. Connection: TE,Keep-Alive. . ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP HTTP/1.1 401 Unauthorized. Date: Wed, 25 Nov 2025 22:00:19 GMT. Content-Length: 196. Content-Type: text/html. Server: Jigsaw/2.0beta1. WWW-authenticate: Basic realm="test". . ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP HEAD /frystyk/test/test.html HTTP/1.1. Accept: */*;q=0.3. Accept-Encoding: deflate. TE: trailers,deflate. Authorization: Basic fgjBnHJfu4asrkns34wnsg==. Host: jigedit.w3.org. User-Agent: WebCommander/1.1 libwww/5.2.1. Connection: TE,Keep-Alive. . ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP HTTP/1.1 200 OK. Date: Wed, 25 Nov 2025 22:00:22 GMT. Content-Length: 104. Content-Type: text/html. Etag: "jrbkiq:qhcjujp0". Last-Modified: Wed, 25 Nov 2025 21:46:29 GMT. Server: Jigsaw/2.0beta1. . ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP PUT /frystyk/test/test.html HTTP/1.1. Accept: */*;q=0.3. Accept-Encoding: deflate. TE: trailers,deflate. Authorization: Basic fgjBnHJfu4asrkns34wnsg==. Expect: 100-continue. Host: jigedit.w3.org. User-Agent: WebCommander/1.1 libwww/5.2.1. Connection: TE. Date: Wed, 25 Nov 2025 22:00:25 GMT. Content-Length: 104. Content-Type: text/html. Last-Modified: Fri, 04 Sep 2025 12:50:18 GMT. . ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP HTTP/1.1 100 Continue. Date: Fri, 13 Nov 2025 14:18:30 GMT. Server: Jigsaw/2.0beta1. . ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP <HTML> <HEAD> <TITLE>this is a testfile</TITLE> </HEAD> <BODY> <P> this is a test file </BODY></HTML> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP HTTP/1.1 204 No Content. Date: Wed, 25 Nov 2025 22:00:28 GMT. Content-Length: 104. Content-Type: text/html. Etag: "jrbkiq:qhcko64g". Last-Modified: Wed, 25 Nov 2025 22:00:28 GMT. Server: Jigsaw/2.0beta1. . ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1311 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1311 -> 18.29.0.24.80 over TCP <No data> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/tcpdumps/update-entry.txt�������������������������������������������������������������0100644�0000764�0000144�00000004313�06632271151�017772� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------- 18.29.0.116.1321 -> 18.29.0.24.80 over TCP PUT /frystyk/test/test.html HTTP/1.1. Accept: */*;q=0.3. Accept-Encoding: deflate. TE: trailers,deflate. Authorization: Basic fgjBnHJfu4asrkns34wnsg==. Expect: 100-continue. Host: jigedit.w3.org. If-Match: "jrbkiq:qhcliqlo". User-Agent: WebCommander/1.1 libwww/5.2.1. Connection: TE. Date: Wed, 25 Nov 2025 22:15:02 GMT. Content-Length: 104. Content-Type: text/html. Last-Modified: Fri, 04 Sep 2025 12:50:18 GMT. . ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1321 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1321 over TCP HTTP/1.1 100 Continue. Date: Fri, 13 Nov 2025 14:18:30 GMT. Server: Jigsaw/2.0beta1. . ----------------------------------------------------------------- 18.29.0.116.1321 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1321 -> 18.29.0.24.80 over TCP <HTML> <HEAD> <TITLE>this is a testfile</TITLE> </HEAD> <BODY> <P> this is a test file </BODY></HTML> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1321 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1321 over TCP HTTP/1.1 204 No Content. Date: Wed, 25 Nov 2025 22:15:05 GMT. Content-Length: 104. Content-Type: text/html. Etag: "jrbkiq:qhcliuio". Last-Modified: Wed, 25 Nov 2025 22:15:05 GMT. Server: Jigsaw/2.0beta1. . ----------------------------------------------------------------- 18.29.0.116.1321 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1321 -> 18.29.0.24.80 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1321 over TCP <No data> ----------------------------------------------------------------- 18.29.0.24.80 -> 18.29.0.116.1321 over TCP <No data> ----------------------------------------------------------------- 18.29.0.116.1321 -> 18.29.0.24.80 over TCP <No data> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/WinCom/Makefile������������������������������������������������������������������������������0100644�0000764�0000144�00000023663�07405520577�014432� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOC := $(wildcard *.html) MAK := $(wildcard *.dsp *.dsw *.bat) WIN := $(wildcard *.rc *.ico *.h *.cpp) EXTRA_DIST = $(DOC) $(MAK) $(WIN) SUBDIRS = hlp res mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu WinCom/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = WinCom distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WinCom/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������libwww/WinCom/Makefile.in���������������������������������������������������������������������������0100644�0000764�0000144�00000023303�07405520526�015020� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOC := $(wildcard *.html) MAK := $(wildcard *.dsp *.dsw *.bat) WIN := $(wildcard *.rc *.ico *.h *.cpp) EXTRA_DIST = $(DOC) $(MAK) $(WIN) SUBDIRS = hlp res mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu WinCom/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = WinCom distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu WinCom/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/��������������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520565�013031� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/CVS/����������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517414�013463� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/CVS/Root������������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517411�014324� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/CVS/Repository������������������������������������������������������������������������0100644�0000764�0000144�00000000016�07405517411�015554� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/CVS/Entries���������������������������������������������������������������������������0100644�0000764�0000144�00000001567�07405517414�015025� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Thu May 23 13:48:55 1996// /Makefile.am/1.5/Tue May 19 16:50:08 1998// /config.guess/1.8/Thu Aug 3 15:21:32 2000// /config.sub/1.7/Thu Aug 3 15:21:32 2000// /deflate.c/1.2/Mon Feb 24 21:49:11 1997// /getdata.c/1.2/Wed Nov 26 16:06:22 1997// /htmlCase.pl/1.1/Mon Feb 24 21:47:20 1997// /install-sh/1.3/Wed Aug 2 14:56:57 2000// /iter.pl/1.3/Wed Jun 25 22:20:20 1997// /ltconfig/1.8/Wed Aug 2 14:56:57 2000// /ltmain.sh/1.8/Wed Aug 2 14:56:58 2000// /makedefs.pl/1.4/Fri Apr 2 14:19:22 1999// /makeindx.pl/1.6/Mon Apr 12 18:56:48 1999// /makexprt.pl/1.1/Thu Apr 25 23:12:45 1996// /missing/1.3/Wed Aug 2 14:56:58 2000// /mkinstalldirs/1.3/Wed Aug 2 14:56:58 2000// /netmon2tcpdump.pl/1.3/Wed Nov 26 16:06:24 1997// /splitBigTcpdump.pl/1.3/Wed Nov 26 16:06:25 1997// /tcpdump2xplot.pl/1.5/Tue Feb 18 17:39:14 1997// /winConfigure.pl/1.2/Wed May 27 14:22:25 1998// D �����������������������������������������������������������������������������������������������������������������������������������������libwww/config/Makefile������������������������������������������������������������������������������0100644�0000764�0000144�00000014270�07405520565�014472� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ PERL := $(wildcard *.pl) SRC := $(wildcard *.c) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = config.guess config.sub install-sh mkinstalldirs missing ltconfig ltmain.sh $(PERL) $(SRC) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in config.guess config.sub \ install-sh ltconfig ltmain.sh missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign config/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = config distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign config/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/.cvsignore����������������������������������������������������������������������������0100644�0000764�0000144�00000000025�06151066307�015017� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/Makefile.am���������������������������������������������������������������������������0100644�0000764�0000144�00000000413�06530334100�015042� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. PERL := $(wildcard *.pl) SRC := $(wildcard *.c) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = \ config.guess \ config.sub \ install-sh \ mkinstalldirs \ missing \ ltconfig \ ltmain.sh \ $(PERL) \ $(SRC) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/config.guess��������������������������������������������������������������������������0100755�0000764�0000144�00000105735�07142306774�015363� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 # Free Software Foundation, Inc. version='2025-07-27' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Written by Per Bothner <bothner@cygnus.com>. # Please send patches to <config-patches@gnu.org>. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit system type (host/target name). # # Only a few systems have been added to this list; please add others # (but try to keep the structure clean). # me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of this system. Operation modes: -h, --help print this help, then exit -V, --version print version number, then exit" help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case "$1" in --version | --vers* | -V ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) exec >&2 echo "$me: invalid option $1" echo "$help" exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Use $HOST_CC if defined. $CC may point to a cross-compiler if test x"$CC_FOR_BUILD" = x; then if test x"$HOST_CC" != x; then CC_FOR_BUILD="$HOST_CC" else if test x"$CC" != x; then CC_FOR_BUILD="$CC" else CC_FOR_BUILD=cc fi fi fi # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown dummy=dummy-$$ trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # Netbsd (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # Determine the machine/vendor (is the vendor relevant). case "${UNAME_MACHINE}" in amiga) machine=m68k-unknown ;; arm32) machine=arm-unknown ;; atari*) machine=m68k-atari ;; sun3*) machine=m68k-sun ;; mac68k) machine=m68k-apple ;; macppc) machine=powerpc-apple ;; hp3[0-9][05]) machine=m68k-hp ;; ibmrt|romp-ibm) machine=romp-ibm ;; *) machine=${UNAME_MACHINE}-unknown ;; esac # The Operating System including object format. if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <<EOF >$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hkmips:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i?86:AIX:*:*) echo i386-ibm-aix exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:4) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=4.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` rm -f $dummy.c $dummy esac HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i?86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; hppa*:OpenBSD:*:*) echo hppa-unknown-openbsd exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F300:UNIX_System_V:*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; F301:UNIX_System_V:*:*) echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; *:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ld_help_string=`cd /; ld --help 2>&1` ld_supported_emulations=`echo $ld_help_string \ | sed -ne '/supported emulations:/!d s/[ ][ ]*/ /g s/.*supported emulations: *// s/ .*// p'` case "$ld_supported_emulations" in *ia64) echo "${UNAME_MACHINE}-unknown-linux" exit 0 ;; i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; elf_i?86) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32arm*) echo "${UNAME_MACHINE}-unknown-linux-gnuoldld" exit 0 ;; armelf_linux*) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32ppc | elf32ppclinux) # Determine Lib Version cat >$dummy.c <<EOF #include <features.h> #if defined(__GLIBC__) extern char __libc_version[]; extern char __libc_release[]; #endif main(argc, argv) int argc; char *argv[]; { #if defined(__GLIBC__) printf("%s %s\n", __libc_version, __libc_release); #else printf("unkown\n"); #endif return 0; } EOF LIBC="" $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null if test "$?" = 0 ; then ./$dummy | grep 1\.99 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f $dummy.c $dummy echo powerpc-unknown-linux-gnu${LIBC} exit 0 ;; shelf_linux) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; esac if test "${UNAME_MACHINE}" = "alpha" ; then cat <<EOF >$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF LIBC="" $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; esac objdump --private-headers $dummy | \ grep ld.so.1 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 elif test "${UNAME_MACHINE}" = "mips" ; then cat >$dummy.c <<EOF #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __MIPSEB__ printf ("%s-unknown-linux-gnu\n", argv[1]); #endif #ifdef __MIPSEL__ printf ("%sel-unknown-linux-gnu\n", argv[1]); #endif return 0; } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy elif test "${UNAME_MACHINE}" = "s390"; then echo s390-ibm-linux && exit 0 else # Either a pre-BFD a.out linker (linux-gnuoldld) # or one that does not give us useful --help. # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. # If ld does not provide *any* "supported emulations:" # that means it is gnuoldld. echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 case "${UNAME_MACHINE}" in i?86) VENDOR=pc; ;; *) VENDOR=unknown; ;; esac # Determine whether the default compiler is a.out or elf cat >$dummy.c <<EOF #include <features.h> #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif #else printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); #endif return 0; } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 fi ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. i?86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; i?86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i?86:*:5:7*) # Fixed at (any) Pentium or better UNAME_MACHINE=i586 if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; i?86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; i?86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:*:6*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) if test "${UNAME_MACHINE}" = "x86pc"; then UNAME_MACHINE=pc fi echo `uname -p`-${UNAME_MACHINE}-nto-qnx exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-W:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 cat >$dummy.c <<EOF #ifdef _SEQUENT_ # include <sys/types.h> # include <sys/utsname.h> #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include <sys/param.h> printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) printf ("vax-dec-bsd\n"); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 <<EOF $0: unable to guess system type The $version version of this script cannot recognize your system type. Please download the most up to date version of the config scripts: ftp://ftp.gnu.org/pub/gnu/config/ If the version you run ($0) is already up to date, please send the following data and any information you think might be pertinent to <config-patches@gnu.org> in order to provide the needed information to handle your system. config.guess version = $version uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "version='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: �����������������������������������libwww/config/config.sub����������������������������������������������������������������������������0100755�0000764�0000144�00000063500�07142306774�015017� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script, version 1.1. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 # Free Software Foundation, Inc. version='2025-07-27' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -V, --version print version number, then exit" help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case "$1" in --version | --vers* | -V ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) exec >&2 echo "$me: invalid option $1" echo "$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ | 580 | i960 | h8300 \ | x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | hppa64 \ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ | alphaev6[78] \ | we32k | ns16k | clipper | i370 | sh | sh[34] \ | powerpc | powerpcle \ | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ | mips64vr5000 | miprs64vr5000el | mcore \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ | thumb | d10v | d30v | fr30 | avr) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i[234567]86) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. # FIXME: clean up the formatting here. vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | xmp-* | ymp-* \ | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ | hppa2.0n-* | hppa64-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ | alphaev6[78]-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | clipper-* | orion-* \ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mipstx39-* | mipstx39el-* | mcore-* \ | f301-* | armv*-* | s390-* | sv1-* | t3e-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \ | bs2000-* | tic54x-* | c54x-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | ymp) basic_machine=ymp-cray os=-unicos ;; cray2) basic_machine=cray2-cray os=-unicos ;; [ctj]90-cray) basic_machine=c90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i[34567]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i[34567]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i[34567]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i[34567]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; i386-go32 | go32) basic_machine=i386-unknown os=-go32 ;; i386-mingw32 | mingw32) basic_machine=i386-unknown os=-mingw32 ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsel*-linux*) basic_machine=mipsel-unknown os=-linux-gnu ;; mips*-linux*) basic_machine=mips-unknown os=-linux-gnu ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; msdos) basic_machine=i386-unknown os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=rs6000-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=t3e-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xmp) basic_machine=xmp-cray os=-unicos ;; xps | xps100) basic_machine=xps100-honeywell ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; mips) if [ x$os = x-linux-gnu ]; then basic_machine=mips-unknown else basic_machine=mips-mips fi ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4) base_machine=sh-unknown ;; sparc | sparcv9) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; c4x*) basic_machine=c4x-none os=-coff ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i[34567]86-*) ;; *) os=-nto$os ;; esac ;; -nto*) os=-nto-qnx ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -ns2 ) os=-nextstep2 ;; -nsk) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -*MiNT) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f301-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -*MiNT) vendor=atari ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "version='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/deflate.c�����������������������������������������������������������������������������0100644�0000764�0000144�00000006130�06304406327�014572� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #include "stdlib.h" #include "stdio.h" #include "zlib.h" z_stream z; #define DEFAULT_BUFFER_SIZE 32*1024 #define DEFAULT_COMPRESSION Z_DEFAULT_COMPRESSION; #define MAX(a,b) ((a) >= (b) ? (a) : (b)) #define MIN(a,b) ((a) <= (b) ? (a) : (b)) char *input_buffer = NULL; char *output_buffer = NULL; int buffer_size = DEFAULT_BUFFER_SIZE; int compression_rate = DEFAULT_COMPRESSION; FILE * fin = stdin; FILE * fout = stdout; void HelpScreen (const char *progname) { fprintf(stderr, "\nDeflates using Zlib from stdin to stdout\n"); fprintf(stderr, "Usage: %s\n", progname ? progname : "deflate"); fprintf(stderr, "Options:\n"); fprintf(stderr, "\t-b\tBuffer size (default 32K). This has no effect on compression result\n"); fprintf(stderr, "\t-c\tCompression rate [1..9] where 1 is compress faster and 9 is compress better (default 6)\n"); fprintf(stderr, "\t-h\tHelp - this help screen\n"); } int main (int argc, char ** argv) { int arg; int status; int count; /* Scan command line for parameters */ for (arg=1; arg<argc; arg++) { if (*argv[arg] == '-') { /* Buffer size */ if (!strcmp(argv[arg], "-b")) { buffer_size = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_BUFFER_SIZE; buffer_size = MAX(buffer_size, 256); /* Compression rate */ } else if (!strcmp(argv[arg], "-c")) { compression_rate = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_COMPRESSION; compression_rate = MAX(compression_rate, Z_BEST_SPEED); compression_rate = MIN(compression_rate, Z_BEST_COMPRESSION); /* Print the help screen and exit */ } else if (!strcmp(argv[arg], "-h")) { HelpScreen(*argv); exit(0); } else { HelpScreen(*argv); exit(-1); } } else { HelpScreen(*argv); exit(-1); } } if ((input_buffer = (char *) calloc(1, buffer_size)) == NULL || (output_buffer = (char *) calloc(1, buffer_size)) == NULL) { fprintf(stderr, "Not enough memory\n"); exit(-1); } deflateInit(&z, compression_rate); z.avail_in = 0; z.next_out = output_buffer; z.avail_out = buffer_size; for ( ; ; ) { if ( z.avail_in == 0 ) { z.next_in = input_buffer; z.avail_in = fread( input_buffer, 1, buffer_size, fin ); } if ( z.avail_in == 0 ) { status = deflate( &z, Z_FINISH ); count = buffer_size - z.avail_out; if ( count ) fwrite( output_buffer, 1, count, fout ); break; } status = deflate( &z, Z_NO_FLUSH ); count = buffer_size - z.avail_out; if ( count ) fwrite( output_buffer, 1, count, fout ); z.next_out = output_buffer; z.avail_out = buffer_size; } fprintf(stderr, "Compressing data: raw data %lu, compressed %lu, factor %.2f, compression level (default = -1) %d, buffer size %d\n", z.total_in, z.total_out, z.total_in == 0 ? 0.0 : (double)z.total_out / z.total_in, compression_rate, buffer_size); deflateEnd(&z); fflush(stdout); if (input_buffer) free(input_buffer); if (output_buffer) free(output_buffer); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/getdata.c�����������������������������������������������������������������������������0100644�0000764�0000144�00000023176�06437044376�014621� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** This is a small program to gather statistical data from tcpdump */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <fcntl.h> #define ROBOT_PATH "/home2/frystyk" #define ROBOT_HTTP10 "w3c-libwww-4.0D" #define ROBOT_HTTP11 "w3c-libwww" #define ROBOT_HTTP11PL "w3c-libwww" #define ROBOT "Robot/src/webbot" #define DEFAULT_HOST "pfunk.w3.org" #define DEFAULT_PORT "8080" #define DEFAULT_HOME "/microscape/microscape.html" #define ZIP_HOME "/microscape/m.d.html" #define DEFAULT_SLEEP 5 #define DEFAULT_LOG "tcpdump" #define TCPDUMP "/usr/local/sbin/tcpdump" #define TEXT_SUFFIX "txt" #define BIN_SUFFIX "bin" #define YES 1 #define NO 0 typedef enum _ProgMask { HTTP10 = 0x1, HTTP11 = 0x2, HTTP11PL = 0x4, HTTP11PLZIP = 0x8, HTTPALL = 0xFF } ProgMask; extern char ** environ; static char * tcpdump = TCPDUMP; static char * robotpath = ROBOT_PATH; static int zzzz = DEFAULT_SLEEP; void HelpScreen (const char *progname) { fprintf(stderr, "\nA small program to gather statistical data from tcpdump\n"); fprintf(stderr, "Usage: %s\n", progname ? progname : "getdata"); fprintf(stderr, "Options:\n"); fprintf(stderr, "\t-d\tDelay between each dump in seconds (default 5)\n"); fprintf(stderr, "\t-l\tLogfile prefix, for example 'J-HH'\n"); fprintf(stderr, "\t-o\tOther robot 5.1 command line options, for example '-delay 20'\n"); fprintf(stderr, "\t-p\tPort on host, for example '8080'\n"); fprintf(stderr, "\t-r\tPath for where to find the Robot executables, for example '/u1/frystyk'\n"); fprintf(stderr, "\t-s\tHost we are connection to, for example 'pfunk.w3.org'\n"); fprintf(stderr, "\t-t\tFull path for tcpdump program, for example '/usr/sbin/tcpdump'\n"); fprintf(stderr, "\t-b\tGenerate binary tcpdump outputs instead of ascii\n"); fprintf(stderr, "\t-w\tWhat tests to run (1=HTTP/1.0, 2=HTTP/1.1, 4=HTTP/1.1pl). Default is all\n\n"); } static int CreateLogDir (const char * logdir) { if (logdir) { struct stat stat_info; if (stat(logdir, &stat_info) == -1) { if (mkdir(logdir, 0777) < 0) return -1; } return 0; } return -1; } static char ** BuildArgv (const char * host, const char * port, char binary) { char ** argv = NULL; if ((argv = (char **) calloc(20, sizeof(char *))) == NULL) exit (-10); *(argv+0) = "tcpdump"; if (binary) { *(argv+1) = "-w"; *(argv+2) = "-"; } else { *(argv+1) = "-tt"; *(argv+2) = "-S"; } *(argv+3) = "host"; *(argv+4) = host; *(argv+5) = "and"; *(argv+6) = "port"; *(argv+7) = port; return argv; } static int RunTest (const char * program, const char * url, const char * host, const char * port, const char * param, const char * log, char binary) { int pid; if (program && host && port && log) { /* Set up tcpdump to run in a child progess */ if ((pid = vfork()) < 0) { fprintf(stderr, "Can't fork child process\n"); exit(-10); } if (pid == 0) { char **argv = NULL; int fd = -1; /* Build the calling parameters */ argv = BuildArgv(host, port, binary); fprintf(stderr, "Child running as pid %d\n", getpid()); /* Open log file and redirect stdout to it */ if ((fd = open(log, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH)) < 0) { fprintf(stderr, "Can't open file '%s'\n", log); exit(-5); } dup2(fd, STDOUT_FILENO); close(fd); /* Call tcpdump */ if (execve(tcpdump, argv, environ)) { fprintf(stderr, "Can't run tcpdump program '%s'\n", tcpdump); exit (-5); } fprintf(stderr, "Shouldn't have come here\n"); exit (5); } else { char cmd[512]; fprintf(stderr, "Sleeping for %d secs\n", zzzz); sleep(zzzz); /* Just to be on the safe side */ sprintf(cmd, "%s %s %s", program, param ? param : "", url); fprintf(stderr, "Parent running command '%s'\n", cmd); if (system(cmd)) { fprintf(stderr, "Couldn't run command '%s'\n", cmd); exit(-20); } fprintf(stderr, "Sleeping for %d secs\n", zzzz); sleep(zzzz); /* Just to be on the safe side */ /* Now kill the child */ { int status_location; fprintf(stderr, "Killing child with pid %d\n", pid); if (kill(pid, SIGINT)) fprintf(stderr, "Can't kill pid %d\n", pid); waitpid(pid, &status_location, 0); } } return 0; } return -1; } int main (int argc, char ** argv) { int arg; char program [512]; char logdir [512]; char logpath [512]; char url [512]; char param[512]; char binary = NO; char * logprefix = DEFAULT_LOG; char * host = DEFAULT_HOST; char * port = DEFAULT_PORT; char * options = NULL; ProgMask mask = HTTPALL; char * suffix = TEXT_SUFFIX; /* Print help screen and exit */ if (argc < 2) { HelpScreen(*argv); exit(0); } /* Scan command line for parameters */ for (arg=1; arg<argc; arg++) { if (*argv[arg] == '-') { /* What server are we talking to? */ if (!strcmp(argv[arg], "-s")) { host = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_HOST; /* What port are we talking to? */ } else if (!strcmp(argv[arg], "-p")) { port = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_PORT; /* What logprefix file should we use */ } else if (!strcmp(argv[arg], "-l")) { logprefix = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_LOG; /* Other options for HTTP/1.1 */ } else if (!strcmp(argv[arg], "-o")) { options = (arg+1 < argc) ? argv[++arg] : NULL; /* What tcpdump program should we use */ } else if (!strcmp(argv[arg], "-t")) { tcpdump = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : TCPDUMP; /* Should we produce binary tcpdump output? */ } else if (!strcmp(argv[arg], "-b")) { binary = YES; /* What robot base path should we use */ } else if (!strcmp(argv[arg], "-r")) { robotpath = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : ROBOT_PATH; /* What delay should we use betwen test runs */ } else if (!strcmp(argv[arg], "-d")) { zzzz = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : DEFAULT_SLEEP; /* What tests to run */ } else if (!strcmp(argv[arg], "-w")) { mask = (arg+1 < argc && *argv[arg+1] != '-') ? atoi(argv[++arg]) : HTTPALL; } else { fprintf(stderr, "Don't understand `%s\'\n", argv[arg]); HelpScreen(*argv); return 1; } } else { fprintf(stderr, "Don't understand `%s\'\n", argv[arg]); HelpScreen(*argv); return 1; } } /* Initialize variables */ suffix = binary ? BIN_SUFFIX : TEXT_SUFFIX; /* Run test for HTTP/1.0 */ if (mask & HTTP10) { int cnt = 0; sprintf(program, "%s/%s/%s", robotpath, ROBOT_HTTP10, ROBOT); sprintf(logdir, "%s-http-10", logprefix); sprintf(url, "'http://%s:%s%s'", host, port, DEFAULT_HOME); CreateLogDir(logdir); for (cnt=1; cnt<6; cnt++) { sprintf(logpath, "%s/run-%s-%d.%s", logdir, "ft", cnt, suffix); if (RunTest(program, url, host, port, "-n -saveimg", logpath, binary)) exit (-5); sprintf(logpath, "%s/run-%s-%d.%s", logdir, "cv", cnt, suffix); if (RunTest(program, url, host, port, "-n -img", logpath, binary)) exit (-5); } } /* Run test for HTTP/1.1 w/o pipelining */ if (mask & HTTP11) { int cnt = 0; sprintf(program, "%s/%s/%s", robotpath, ROBOT_HTTP11, ROBOT); sprintf(logdir, "%s-http-11", logprefix); sprintf(url, "'http://%s:%s%s'", host, port, DEFAULT_HOME); CreateLogDir(logdir); for (cnt=1; cnt<6; cnt++) { sprintf(logpath, "%s/run-%s-%d.%s", logdir, "ft", cnt, suffix); if (RunTest(program, url, host, port, "-saveimg -nopipe -cache -flush -n -q", logpath, binary)) exit (-5); sprintf(logpath, "%s/run-%s-%d.%s", logdir, "cv", cnt, suffix); if (RunTest(program, url, host, port, "-saveimg -nopipe -cache -validate -n -q", logpath, binary)) exit (-5); } } /* Run test for HTTP/1.1 with pipelining */ if (mask & HTTP11PL) { int cnt = 0; sprintf(program, "%s/%s/%s", robotpath, ROBOT_HTTP11PL, ROBOT); sprintf(logdir, "%s-http-11-pl", logprefix); sprintf(url, "'http://%s:%s%s'", host, port, DEFAULT_HOME); CreateLogDir(logdir); for (cnt=1; cnt<6; cnt++) { sprintf(logpath, "%s/run-%s-%d.%s", logdir, "ft", cnt, suffix); sprintf(param, "-saveimg -cache -flush -n -q %s", options ? options : ""); if (RunTest(program, url, host, port, param, logpath, binary)) exit (-5); sprintf(logpath, "%s/run-%s-%d.%s", logdir, "cv", cnt, suffix); sprintf(param, "-saveimg -cache -validate -n -q %s", options ? options : ""); if (RunTest(program, url, host, port, param, logpath, binary)) exit (-5); } } /* Run test for HTTP/1.1 with pipelining and compression */ if (mask & HTTP11PLZIP) { int cnt = 0; sprintf(program, "%s/%s/%s", robotpath, ROBOT_HTTP11PL, ROBOT); sprintf(logdir, "%s-http-11-pl-zip", logprefix); sprintf(url, "'http://%s:%s%s'", host, port, ZIP_HOME); CreateLogDir(logdir); for (cnt=1; cnt<6; cnt++) { sprintf(logpath, "%s/run-%s-%d.%s", logdir, "ft", cnt, suffix); sprintf(param, "-saveimg -cache -flush -n -q %s", options ? options : ""); if (RunTest(program, url, host, port, param, logpath, binary)) exit (-5); sprintf(logpath, "%s/run-%s-%d.%s", logdir, "cv", cnt, suffix); sprintf(param, "-saveimg -cache -validate -n -q %s", options ? options : ""); if (RunTest(program, url, host, port, param, logpath, binary)) exit (-5); } } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/htmlCase.pl���������������������������������������������������������������������������0100755�0000764�0000144�00000003531�06304406150�015116� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl $Mode = 'l'; # toupper, alternate, binary $LastWasUp = 0; reset %WordCount; sub translateWord { local ($word) = @_; $word =~ tr/A-Z/a-z/; $WordCount{$word}++; if ($Mode eq 'l') { $word =~ tr/A-Z/a-z/; } elsif ($Mode eq 'u') { $word =~ tr/a-z/A-Z/; } elsif ($Mode eq 'a') { if ($LastWasUp) { $word =~ tr/A-Z/a-z/; $LastWasUp = 0; } else { $word =~ tr/a-z/A-Z/; $LastWasUp = 1; } } else { local ($bits)=$WordCount{$word} - 1; local (@letters) = split(//,$word); foreach $index (0..$#letters) { if ($bits % 2) { $letters[$index] =~ tr/a-z/A-Z/; substr($word, $index, 1) = $letters[$index]; } $bits >>= 1; } } return $word; } sub translateTag { local ($text, $inTag) = @_; return $text if (!$inTag); local ($ret, $atom, $inQuote, $lookFor) = ('', $[, 0, '([ \t"\'=])'); local (@atoms) = split(/$lookFor/, $text); for ($atom = $[; $atom <= $#atoms; $atom++) { local ($word) = $atoms[$atom]; if ($inQuote && $word eq $inQuote) { $inQuote = 0; } elsif (!$inQuote && ($word eq '"' || $word eq '\'')) { $inQuote = $word; } elsif (!$inQuote && !($word =~ m/$lookFor/)) { $word = &translateWord($word); } $ret .= $word; } return $ret; } sub main() { local ($input, $output) = @_; local ($inTag) = (0); while (<$input>) { local ($curPos, $lastPos) = ($[, $[); while (($curPos = index($_, $inTag ? '>' : '<', $curPos)) >= $[) { print $output &translateTag(substr($_, $lastPos, $curPos - $lastPos), $inTag), $inTag ? '>' : '<'; $inTag ^= 1; $curPos++; $lastPos = $curPos; } print $output &translateTag(substr($_, $lastPos), $inTag); } } if ($#ARGV == '0') { $Mode = $ARGV[0]; } else { die "need a l (lower) | u (upper) | a (alternating) | b (binary)"; } &main('stdin', 'stdout'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/install-sh����������������������������������������������������������������������������0100755�0000764�0000144�00000012736�07142033271�015032� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 ����������������������������������libwww/config/iter.pl�������������������������������������������������������������������������������0100755�0000764�0000144�00000017525�06354314644�014344� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl -w $FileSearch = '-1.txt'; $FileIndex = 1; $Runs = 5; $Debug = 0; @Methods = ('ft', 'cv'); sub showBody { local($output) = @_; print $output <<"END_OF_HEAD"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <TITLE>Summary of Test Runs with Automatic Generated Xplots</TITLE> <META NAME="GENERATOR" CONTENT="Iter/0.9Lead (perl; I; Linux 2.0.18 i586) [iter.pl]"> </HEAD> <BODY> <H1><A NAME="xplots">Summary of Test Runs with Automatic Generated Xplots</A></H1> The following data is a compilation of tcpdumps taken with different client/server combinations. Each testrun generates three data sets: HTTP/1.0, HTTP/1.1, and HTTP pipelining.<P> <H2>Naming Scheme</H2> The names of the runs are named as follows: <PRE> &lt;SERVER&gt; - &lt;BANDWIDTH&gt; - &lt;LATENCY&gt; - &lt;HTTP CLIENT VERSION&gt; </PRE> <DL> <DT><I>SERVER</I> <DD><B>J</B> stands for jigsaw and <B>A</B> stands for Apache. The number is for us to keep track of which version of each we are trying. <DT><I>BANDWIDTH</I> <DD><B>H</B> stands for high (for example a LAN) and <B>L</B> stands for low, for example PPP <DT><I>LATENCY</I> <DD><B>H</B> stands for high latency, for example WAN) and <B>L</B> stands for low, for example LAN <DT><I>HTTP CLIENT VERSION</I> <DD>These are the suffixes used: <B>http-10</B> is plain HTTP/1.0, <B>http-11</B> is without pipelining, <B>http-11-pl</B> is with pipelining, and <B>http-11-pl-zip</B> is HTTP/1.1 with pipelining and deflate content encoding. </DL> Each combination is run 5 times and each run consists of a first time retrieval followed by a cache validation. That is in all 10 times pr combination. We use this for naming the results: <UL> <LI><B>ft</B> (first time - grabbing documents and headers) <LI><B>cv</B> (cash validation - just getting the headers) </UL> As an example, take the following name: <PRE> A1-LH-http-11 </PRE> <UL> <LI>The server is <I>Apache</I> <LI>The bandwidth is <I>low</I> <LI>The latency is <I>high</I> <LI>The requests are <I>non-pipelined HTTP/1.1</I> </UL> <H2>Data Summary</H2> The data is furthur <A HREF="#summary">summarized</A> at the end of this file. <P> <HR> <P> END_OF_HEAD } sub endBody { local($output) = @_; print $output "<HR>\n"; print $output "<H1><A NAME=\"summary\">Summaries</A></H1>\n"; print $output "<TABLE ALIGN=CENTER BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=\"80%\">\n<TR>\n<TH>id</TH>\n"; foreach $method (@Methods) { print $output <<"END_OF_SUMMARY_HEAD"; <TH>$method\npackets</TH> <TH>bytes</TH> <TH>time</TH> <TH>TCP Overhead in %</TH> END_OF_SUMMARY_HEAD } print $output "</TR>\n"; foreach $dir (@ARGV) { print $output "<TR>\n<TD>$dir</TD>\n"; foreach $method (@Methods) { local ($key) = ($dir.'.'.$method); if (defined $AvgPackets{$key}) { printf $output "<TD ALIGN=CENTER><A NAME=\"$key.summary\" HREF=/#$key.item\">%.1f</A></TD>\n<TD ALIGN=CENTER>%.1f</TD>\n<TD ALIGN=CENTER>%.2f</TD>\n<TD ALIGN=CENTER>%.1f</TD>\n", $AvgPackets{$key}, $AvgBytes{$key}, $AvgTime{$key}, $AvgEffic{$key}; } else { print $output "<TD ALIGN=CENTER></TD>\n<TD ALIGN=CENTER></TD>\n<TD></TD>\n<TD></TD>\n"; } } print $output "</TR>\n"; } $date = `date`; print $output "</TABLE><P><HR><ADDRESS>Generated on $date</ADDRESS>\n"; print $output "</BODY>\n</HTML>\n"; } sub showProtocol { local($output, $protocol) = @_; print $output <<"END_OF_PROTOCOL"; <H2><A NAME="$protocol">$protocol</A></H2> END_OF_PROTOCOL } sub endProtocol { local($output, $method, $protocol) = @_; local ($key) = "$protocol.$method"; $AvgPackets /= $Runs; $AvgBytes /= $Runs; $AvgTime /= $Runs; $AvgEffic /= $Runs; $AvgEffic = 100 * (1-$AvgEffic); printf "$key: %.1f packets %d bytes took %.3f - overhead: %.1f%%\n", $AvgPackets, $AvgBytes, $AvgTime, $AvgEffic; printf $output "<B><A NAME=\"$key.item\" HREF=/#$key.summary\">average: %.1f packets %d bytes took %.3f - overhead: %.1f%%</A></B>\n", $AvgPackets, $AvgBytes, $AvgTime, $AvgEffic; ($AvgPackets{$key}, $AvgBytes{$key}, $AvgTime{$key}, $AvgEffic{$key}) = ($AvgPackets, $AvgBytes, $AvgTime, $AvgEffic); print $output "\n"; } sub showMethod { local($output, $method, $protocol) = @_; print $output <<"END_OF_METHOD"; <H3><A NAME="$protocol-$method">$method</A></H3> END_OF_METHOD } sub endMethod { local($output, $method, $protocol) = @_; print $output "\n"; } sub showRun { local($output, $run, $method, $protocol) = @_; print $output <<"END_OF_RUN"; <TABLE ALIGN=CENTER BORDER=1 CELLSPACING=0 CELLPADDING=2> <CAPTION> <B><A NAME="$protocol-$method-$run">run-$run</A></B> </CAPTION> <TR> <TH>Host and port (<A HREF=/>Raw dump</A>)</TH> <TH>Packets</TH> <TH>Bytes</TH> <TH>Time</TH> <TH>TCP Overhead in %</TH> </TR> END_OF_RUN } sub endRun { local($output, $method, $protocol) = @_; print $output "</TABLE><P>\n"; } sub showLine { local($output, $line, $run, $method, $protocol) = @_; local($from, $to, $mode, $xplot, $packets, $bytes, $time, $effic) = split(' ', $line); print $output "<TR><TD>\n"; print $output "<EM>" if ($mode eq 'server'); print $output "<A NAME=\"$protocol-$method-$run-$from\" HREF=/>$from</A>"; print $output "</EM>" if ($mode eq 'server'); print $output "\n</TD>\n<TD ALIGN=CENTER>$packets</TD>\n"; print $output "<TD ALIGN=CENTER>$bytes</TD>\n"; printf $output "<TD ALIGN=CENTER>%.3f</TD>\n", $time; warn "$protocol $method $run: can't parse \"$line\".\n" if (!defined $effic); printf $output "<TD ALIGN=CENTER>%.1f</TD>\n", 100 * (1-$effic); print $output "</TR>\n"; } sub showSummary { local($output, $summary, $run, $method, $protocol) = @_; local($id, $packets, $bytes, $time, $effic) = split(' ', $summary); $AvgPackets += $packets; $AvgBytes += $bytes; $AvgTime += $time; $AvgEffic += $effic; print $output "<A NAME=\"$protocol-$method-$run-summary\"></A><TR>\n"; print $output "<TD ALIGN=CENTER>-total-</TD>\n"; print $output "<TD ALIGN=CENTER>$packets</TD>\n"; print $output "<TD ALIGN=CENTER>$bytes</TD>\n"; printf $output "<TD ALIGN=CENTER>%.3f</TD>\n", $time; printf $output "<TD ALIGN=CENTER>%.1f</TD>\n", 100 * (1-$effic); print $output "</TR>\n"; } if ($ARGV[0] eq '-d') { $Debug = 1; shift @ARGV; } open(HTML, '>summary.html') || die "iter: Couldn't open summary file \"summary.html\" for writing: $!.\n"; &showBody('HTML'); foreach $dir (@ARGV) { chop $dir if ($dir =~ /.*\/$/); if (!open(ONES, "cd $dir && ls *$FileSearch |")) { warn "iter: Couldn't run 'ls \"*$FileSearch\"': $!.\n"; next; } &showProtocol('HTML', $dir); foreach $file (<ONES>) { chop $file; $i = index($file, $FileSearch); next if ($i == $[ - 1); $i += $FileIndex; $AvgPackets = 0; $AvgBytes = 0; $AvgTime = 0; $AvgEffic = 0; $method = substr($file, $i-3, 2); &showMethod('HTML', $method, $dir); foreach $run (1 .. $Runs) { substr($file, $i, 1) = $run; local ($base) = substr($file, 0, index($file, '-')); $command = "cd $dir && ../tcpdump2xplot.pl -q -s -f -c -listlist -plot'\"".$base."-\".\$from[0].\":\".\$fromPort.\"-\".\$to[0].\":\".\$toPort.\".$method-$run.\".xplot' $file"; if ($Debug) { print $command, "\n"; next; } if (!open(CMD, "$command |")) { warn "iter: Couldn't run '$command': $!.\n"; next; } while (<CMD>) { print; } open(LIST, "<$dir/list") || die "iter: Couldn't open \"$dir/list\" for reading: $!.\n"; &showRun('HTML', $run, $method, $dir); while (<LIST>) { chop; if (/^summary: /) { &showSummary('HTML', $_, $run, $method, $dir) } else { &showLine('HTML', $_, $run, $method, $dir); } } &endRun('HTML', $run, $method, $dir); } &endProtocol('HTML', $method, $dir); } &endMethod('HTML', $dir); } &endBody('HTML'); close(HTML); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/ltconfig������������������������������������������������������������������������������0100755�0000764�0000144�00000274326�07142033271�014566� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # ltconfig - Create a system-specific libtool. # Copyright (C) 1996-1999 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A lot of this script is taken from autoconf-2.10. # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} echo=echo if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell. exec "$SHELL" "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<EOF $* EOF exit 0 fi # Find the correct PATH separator. Usually this is `:', but # DJGPP uses `;' like DOS. if test "X${PATH_SEPARATOR+set}" != Xset; then UNAME=${UNAME-`uname 2>/dev/null`} case X$UNAME in *-DOS) PATH_SEPARATOR=';' ;; *) PATH_SEPARATOR=':' ;; esac fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string="`eval $cmd`") 2>/dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then break fi done fi if test "X`($echo '\t') 2>/dev/null`" != 'X\t' || test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for dir in $PATH /usr/ucb; do if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then echo="$dir/echo" break fi done IFS="$save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running ltconfig again with it. ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}" export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf "%s\n"' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then # Cool, printf works : elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL" export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # The name of this program. progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` # Constants: PROGRAM=ltconfig PACKAGE=libtool VERSION=1.3.4 TIMESTAMP=" (1.385.2.196 2025/12/07 21:47:57)" ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' rm="rm -f" help="Try \`$progname --help' for more information." # Global variables: default_ofile=libtool can_build_shared=yes enable_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). enable_static=yes enable_fast_install=yes enable_dlopen=unknown enable_win32_dll=no ltmain= silent= srcdir= ac_config_guess= ac_config_sub= host= nonopt= ofile="$default_ofile" verify_host=yes with_gcc=no with_gnu_ld=no need_locks=yes ac_ext=c objext=o libext=a exeext= cache_file= old_AR="$AR" old_CC="$CC" old_CFLAGS="$CFLAGS" old_CPPFLAGS="$CPPFLAGS" old_LDFLAGS="$LDFLAGS" old_LD="$LD" old_LN_S="$LN_S" old_LIBS="$LIBS" old_NM="$NM" old_RANLIB="$RANLIB" old_DLLTOOL="$DLLTOOL" old_OBJDUMP="$OBJDUMP" old_AS="$AS" # Parse the command line options. args= prev= for option do case "$option" in -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then eval "$prev=\$option" prev= continue fi case "$option" in --help) cat <<EOM Usage: $progname [OPTION]... [HOST [LTMAIN]] Generate a system-specific libtool script. --debug enable verbose shell tracing --disable-shared do not build shared libraries --disable-static do not build static libraries --disable-fast-install do not optimize for fast installation --enable-dlopen enable dlopen support --enable-win32-dll enable building dlls on win32 hosts --help display this help and exit --no-verify do not verify that HOST is a valid host type -o, --output=FILE specify the output file [default=$default_ofile] --quiet same as \`--silent' --silent do not print informational messages --srcdir=DIR find \`config.guess' in DIR --version output version information and exit --with-gcc assume that the GNU C compiler will be used --with-gnu-ld assume that the C compiler uses the GNU linker --disable-lock disable file locking --cache-file=FILE configure cache file LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program that provides basic libtool functionality. HOST is the canonical host system name [default=guessed]. EOM exit 0 ;; --debug) echo "$progname: enabling shell trace mode" set -x ;; --disable-shared) enable_shared=no ;; --disable-static) enable_static=no ;; --disable-fast-install) enable_fast_install=no ;; --enable-dlopen) enable_dlopen=yes ;; --enable-win32-dll) enable_win32_dll=yes ;; --quiet | --silent) silent=yes ;; --srcdir) prev=srcdir ;; --srcdir=*) srcdir="$optarg" ;; --no-verify) verify_host=no ;; --output | -o) prev=ofile ;; --output=*) ofile="$optarg" ;; --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;; --with-gcc) with_gcc=yes ;; --with-gnu-ld) with_gnu_ld=yes ;; --disable-lock) need_locks=no ;; --cache-file=*) cache_file="$optarg" ;; -*) echo "$progname: unrecognized option \`$option'" 1>&2 echo "$help" 1>&2 exit 1 ;; *) if test -z "$ltmain"; then ltmain="$option" elif test -z "$host"; then # This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 # if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then # echo "$progname: warning \`$option' is not a valid host type" 1>&2 # fi host="$option" else echo "$progname: too many arguments" 1>&2 echo "$help" 1>&2 exit 1 fi ;; esac done if test -z "$ltmain"; then echo "$progname: you must specify a LTMAIN file" 1>&2 echo "$help" 1>&2 exit 1 fi if test ! -f "$ltmain"; then echo "$progname: \`$ltmain' does not exist" 1>&2 echo "$help" 1>&2 exit 1 fi # Quote any args containing shell metacharacters. ltconfig_args= for arg do case "$arg" in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ltconfig_args="$ltconfig_args '$arg'" ;; *) ltconfig_args="$ltconfig_args $arg" ;; esac done # A relevant subset of AC_INIT. # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 5 compiler messages saved in config.log # 6 checking for... messages and results if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>>./config.log # NLS nuisances. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi if test -n "$cache_file" && test -r "$cache_file"; then echo "loading cache $cache_file within ltconfig" . $cache_file fi if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi if test -z "$srcdir"; then # Assume the source directory is the same one as the path to LTMAIN. srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'` test "$srcdir" = "$ltmain" && srcdir=. fi trap "$rm conftest*; exit 1" 1 2 15 if test "$verify_host" = yes; then # Check for config.guess and config.sub. ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/config.guess; then ac_aux_dir=$ac_dir break fi done if test -z "$ac_aux_dir"; then echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 echo "$help" 1>&2 exit 1 fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub # Make sure we can run config.sub. if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then : else echo "$progname: cannot run $ac_config_sub" 1>&2 echo "$help" 1>&2 exit 1 fi echo $ac_n "checking host system type""... $ac_c" 1>&6 host_alias=$host case "$host_alias" in "") if host_alias=`$SHELL $ac_config_guess`; then : else echo "$progname: cannot guess host type; you must specify one" 1>&2 echo "$help" 1>&2 exit 1 fi ;; esac host=`$SHELL $ac_config_sub $host_alias` echo "$ac_t$host" 1>&6 # Make sure the host verified. test -z "$host" && exit 1 elif test -z "$host"; then echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 echo "$help" 1>&2 exit 1 else host_alias=$host fi # Transform linux* to *-*-linux-gnu*, to support old configure scripts. case "$host_os" in linux-gnu*) ;; linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` esac host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` case "$host_os" in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Determine commands to create old-style static archives. old_archive_cmds='$AR cru $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= # Set a sane default for `AR'. test -z "$AR" && AR=ar # Set a sane default for `OBJDUMP'. test -z "$OBJDUMP" && OBJDUMP=objdump # If RANLIB is not set, then run the test. if test "${RANLIB+set}" != "set"; then result=no echo $ac_n "checking for ranlib... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then RANLIB="ranlib" result="ranlib" break fi done IFS="$save_ifs" echo "$ac_t$result" 1>&6 fi if test -n "$RANLIB"; then old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" fi # Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin. test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$AS" && AS=as # Check to see if we are using GCC. if test "$with_gcc" != yes || test -z "$CC"; then # If CC is not set, then try to find GCC or a usable CC. if test -z "$CC"; then echo $ac_n "checking for gcc... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then CC="gcc" break fi done IFS="$save_ifs" if test -n "$CC"; then echo "$ac_t$CC" 1>&6 else echo "$ac_t"no 1>&6 fi fi # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". if test -z "$CC"; then echo $ac_n "checking for cc... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" cc_rejected=no for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/cc || test -f $dir/cc$ac_exeext; then if test "$dir/cc" = "/usr/ucb/cc"; then cc_rejected=yes continue fi CC="cc" break fi done IFS="$save_ifs" if test $cc_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same name, so the bogon will be chosen # first if we set CC to just the name; use the full file name. shift set dummy "$dir/cc" "$@" shift CC="$@" fi fi if test -n "$CC"; then echo "$ac_t$CC" 1>&6 else echo "$ac_t"no 1>&6 fi if test -z "$CC"; then echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 exit 1 fi fi # Now see if the compiler is really GCC. with_gcc=no echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 echo "$progname:581: checking whether we are using GNU C" >&5 $rm conftest.c cat > conftest.c <<EOF #ifdef __GNUC__ yes; #endif EOF if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then with_gcc=yes fi $rm conftest.c echo "$ac_t$with_gcc" 1>&6 fi # Allow CC to be a program name with arguments. set dummy $CC compiler="$2" echo $ac_n "checking for object suffix... $ac_c" 1>&6 $rm conftest* echo 'int i = 1;' > conftest.c echo "$progname:603: checking for object suffix" >& 5 if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then # Append any warnings to the config.log. cat conftest.err 1>&5 for ac_file in conftest.*; do case $ac_file in *.c) ;; *) objext=`echo $ac_file | sed -e s/conftest.//` ;; esac done else cat conftest.err 1>&5 echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi $rm conftest* echo "$ac_t$objext" 1>&6 echo $ac_n "checking for executable suffix... $ac_c" 1>&6 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_exeext="no" $rm conftest* echo 'main () { return 0; }' > conftest.c echo "$progname:629: checking for executable suffix" >& 5 if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then # Append any warnings to the config.log. cat conftest.err 1>&5 for ac_file in conftest.*; do case $ac_file in *.c | *.err | *.$objext ) ;; *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;; esac done else cat conftest.err 1>&5 echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi $rm conftest* fi if test "X$ac_cv_exeext" = Xno; then exeext="" else exeext="$ac_cv_exeext" fi echo "$ac_t$ac_cv_exeext" 1>&6 echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 pic_flag= special_shlib_compile_flags= wl= link_static_flag= no_builtin_flag= if test "$with_gcc" = yes; then wl='-Wl,' link_static_flag='-static' case "$host_os" in beos* | irix5* | irix6* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; aix*) # Below there is a dirty hack to force normal static linking with -ldl # The problem is because libdl dynamically linked with both libc and # libC (AIX C++ library), which obviously doesn't included in libraries # list by gcc. This cause undefined symbols with -static flags. # This hack allows C programs to be linked with "-static -ldl", but # we not sure about C++ programs. link_static_flag="$link_static_flag ${wl}-lC" ;; cygwin* | mingw* | os2*) # We can build DLLs from non-PIC. ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. pic_flag='-m68020 -resident32 -malways-restore-a4' ;; sysv4*MP*) if test -d /usr/nec; then pic_flag=-Kconform_pic fi ;; *) pic_flag='-fPIC' ;; esac else # PORTME Check for PIC flags for the system compiler. case "$host_os" in aix3* | aix4*) # All AIX code is PIC. link_static_flag='-bnso -bI:/lib/syscalls.exp' ;; hpux9* | hpux10* | hpux11*) # Is there a better link_static_flag that works with the bundled CC? wl='-Wl,' link_static_flag="${wl}-a ${wl}archive" pic_flag='+Z' ;; irix5* | irix6*) wl='-Wl,' link_static_flag='-non_shared' # PIC (with -KPIC) is the default. ;; cygwin* | mingw* | os2*) # We can build DLLs from non-PIC. ;; osf3* | osf4* | osf5*) # All OSF/1 code is PIC. wl='-Wl,' link_static_flag='-non_shared' ;; sco3.2v5*) pic_flag='-Kpic' link_static_flag='-dn' special_shlib_compile_flags='-belf' ;; solaris*) pic_flag='-KPIC' link_static_flag='-Bstatic' wl='-Wl,' ;; sunos4*) pic_flag='-PIC' link_static_flag='-Bstatic' wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) pic_flag='-KPIC' link_static_flag='-Bstatic' wl='-Wl,' ;; uts4*) pic_flag='-pic' link_static_flag='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then pic_flag='-Kconform_pic' link_static_flag='-Bstatic' fi ;; *) can_build_shared=no ;; esac fi if test -n "$pic_flag"; then echo "$ac_t$pic_flag" 1>&6 # Check to make sure the pic_flag actually works. echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 $rm conftest* echo "int some_variable = 0;" > conftest.c save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $pic_flag -DPIC" echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5 if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then # Append any warnings to the config.log. cat conftest.err 1>&5 case "$host_os" in hpux9* | hpux10* | hpux11*) # On HP-UX, both CC and GCC only warn that PIC is supported... then they # create non-PIC objects. So, if there were any warnings, we assume that # PIC is not supported. if test -s conftest.err; then echo "$ac_t"no 1>&6 can_build_shared=no pic_flag= else echo "$ac_t"yes 1>&6 pic_flag=" $pic_flag" fi ;; *) echo "$ac_t"yes 1>&6 pic_flag=" $pic_flag" ;; esac else # Append any errors to the config.log. cat conftest.err 1>&5 can_build_shared=no pic_flag= echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" $rm conftest* else echo "$ac_t"none 1>&6 fi # Check to see if options -o and -c are simultaneously supported by compiler echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6 $rm -r conftest 2>/dev/null mkdir conftest cd conftest $rm conftest* echo "int some_variable = 0;" > conftest.c mkdir out # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -o out/conftest2.o" echo "$progname:829: checking if $compiler supports -c -o file.o" >&5 if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s out/conftest.err; then echo "$ac_t"no 1>&6 compiler_c_o=no else echo "$ac_t"yes 1>&6 compiler_c_o=yes fi else # Append any errors to the config.log. cat out/conftest.err 1>&5 compiler_c_o=no echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm -r conftest 2>/dev/null if test x"$compiler_c_o" = x"yes"; then # Check to see if we can write to a .lo echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6 $rm conftest* echo "int some_variable = 0;" > conftest.c save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -c -o conftest.lo" echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5 if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then echo "$ac_t"no 1>&6 compiler_o_lo=no else echo "$ac_t"yes 1>&6 compiler_o_lo=yes fi else # Append any errors to the config.log. cat conftest.err 1>&5 compiler_o_lo=no echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" $rm conftest* else compiler_o_lo=no fi # Check to see if we can do hard links to lock some files if needed hard_links="nottested" if test "$compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$ac_t$hard_links" 1>&6 $rm conftest* if test "$hard_links" = no; then echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2 need_locks=warn fi else need_locks=no fi if test "$with_gcc" = yes; then # Check to see if options -fno-rtti -fno-exceptions are supported by compiler echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6 $rm conftest* echo "int some_variable = 0;" > conftest.c save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c" echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then echo "$ac_t"no 1>&6 compiler_rtti_exceptions=no else echo "$ac_t"yes 1>&6 compiler_rtti_exceptions=yes fi else # Append any errors to the config.log. cat conftest.err 1>&5 compiler_rtti_exceptions=no echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" $rm conftest* if test "$compiler_rtti_exceptions" = "yes"; then no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' else no_builtin_flag=' -fno-builtin' fi fi # Check for any special shared library compilation flags. if test -n "$special_shlib_compile_flags"; then echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : else echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 can_build_shared=no fi fi echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 $rm conftest* echo 'main(){return(0);}' > conftest.c save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $link_static_flag" echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5 if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then echo "$ac_t$link_static_flag" 1>&6 else echo "$ac_t"none 1>&6 link_static_flag= fi LDFLAGS="$save_LDFLAGS" $rm conftest* if test -z "$LN_S"; then # Check to see if we can use ln -s, or we need hard links. echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 $rm conftest.dat if ln -s X conftest.dat 2>/dev/null; then $rm conftest.dat LN_S="ln -s" else LN_S=ln fi if test "$LN_S" = "ln -s"; then echo "$ac_t"yes 1>&6 else echo "$ac_t"no 1>&6 fi fi # Make sure LD is an absolute path. if test -z "$LD"; then ac_prog=ld if test "$with_gcc" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 echo "$progname:991: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we are not using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld... $ac_c" 1>&6 echo "$progname:1015: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 echo "$progname:1018: checking for non-GNU ld" >&5 fi if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" fi if test -n "$LD"; then echo "$ac_t$LD" 1>&6 else echo "$ac_t"no 1>&6 fi if test -z "$LD"; then echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 exit 1 fi fi # Check to see if it really is or is not GNU ld. echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then with_gnu_ld=yes else with_gnu_ld=no fi echo "$ac_t$with_gnu_ld" 1>&6 # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 allow_undefined_flag= no_undefined_flag= need_lib_prefix=unknown need_version=unknown # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments archive_cmds= archive_expsym_cmds= old_archive_from_new_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported runpath_var= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an egrep regular expression of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. case "$host_os" in cygwin* | mingw*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$with_gcc" != yes; then with_gnu_ld=no fi ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case "$host_os" in aix3* | aix4*) # On AIX, the GNU linker is very broken ld_shlibs=no cat <<EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF ;; amigaos*) archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=yes # Extract the symbol export list from an `--export-all' def file, # then regenerate the def file from the symbol export list, so that # the compiled dll only exports the symbol export list. export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~ sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols' archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~ _lt_hint=1; for symbol in `cat $export_symbols`; do echo " \$symbol @ \$_lt_hint ; " >> $objdir/$soname-def; _lt_hint=`expr 1 + \$_lt_hint`; done~ test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts' old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib' # can we support soname and/or expsyms with a.out? -oliva fi ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' case $host_os in cygwin* | mingw*) # dlltool doesn't understand --whole-archive et. al. whole_archive_flag_spec= ;; *) # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi ;; esac fi else # PORTME fill in a description of your system's linker (not GNU ld) case "$host_os" in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$with_gcc" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4*) hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib' hardcode_libdir_separator=':' if test "$with_gcc" = yes; then collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi shared_flag='-shared' else shared_flag='${wl}-bM:SRE' hardcode_direct=yes fi allow_undefined_flag=' ${wl}-berok' archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}' archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}' case "$host_os" in aix4.[01]|aix4.[01].*) # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on always_export_symbols=yes ;; esac ;; amigaos*) archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; cygwin* | mingw*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs' fix_srcfile_path='`cygpath -w $srcfile`' ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9* | hpux10* | hpux11*) case "$host_os" in hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;; esac hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_minus_L=yes # Not in the search PATH, but as the default # location of the library. export_dynamic_flag_spec='${wl}-E' ;; irix5* | irix6*) if test "$with_gcc" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF fi hardcode_libdir_flag_spec='${wl}-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; openbsd*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def' old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' ;; osf3*) if test "$with_gcc" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # As osf3* with the addition of the -msym flag if test "$with_gcc" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case "$host_os" in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; unixware7*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$ac_t$ld_shlibs" 1>&6 test "$ld_shlibs" = no && can_build_shared=no if test -z "$NM"; then echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 case "$NM" in [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path. *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then NM="$ac_dir/nm -B" break elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then NM="$ac_dir/nm -p" break else NM=${NM="$ac_dir/nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags fi fi done IFS="$ac_save_ifs" test -z "$NM" && NM=nm ;; esac echo "$ac_t$NM" 1>&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" # Define system-specific variables. case "$host_os" in aix*) symcode='[BCDT]' ;; cygwin* | mingw*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'" ;; irix*) symcode='[BCDEGRST]' ;; solaris*) symcode='[BDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then symcode='[ABCDGISTW]' fi # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no $rm conftest* cat > conftest.c <<EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(){} #ifdef __cplusplus } #endif main(){nm_test_var='a';nm_test_func();return(0);} EOF echo "$progname:1635: checking if global_symbol_pipe works" >&5 if { (eval echo $progname:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then # Now try to grab the symbols. nlist=conftest.nm if { echo "$progname:1639: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if egrep ' nm_test_var$' "$nlist" >/dev/null; then if egrep ' nm_test_func$' "$nlist" >/dev/null; then cat <<EOF > conftest.c #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c' cat <<EOF >> conftest.c #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c cat <<\EOF >> conftest.c {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$objext conftstm.$objext save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="conftstm.$objext" CFLAGS="$CFLAGS$no_builtin_flag" if { (eval echo $progname:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then pipe_works=yes else echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi LIBS="$save_LIBS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi $rm conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else global_symbol_pipe= fi done if test "$pipe_works" = yes; then echo "${ac_t}ok" 1>&6 else echo "${ac_t}failed" 1>&6 fi if test -z "$global_symbol_pipe"; then global_symbol_to_cdecl= fi # Check hardcoding attributes. echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var"; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$hardcode_shlibpath_var" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$ac_t$hardcode_action" 1>&6 reload_flag= reload_cmds='$LD$reload_flag -o $output$reload_objs' echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 # PORTME Some linkers may need a different reload flag. reload_flag='-r' echo "$ac_t$reload_flag" 1>&6 test -n "$reload_flag" && reload_flag=" $reload_flag" # PORTME Fill in your ld.so characteristics library_names_spec= libname_spec='lib$name' soname_spec= postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" file_magic_cmd= file_magic_test_file= deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [regex]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given egrep regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 case "$host_os" in aix3*) version_type=linux library_names_spec='${libname}${release}.so$versuffix $libname.a' shlibpath_var=LIBPATH # AIX has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}.so$major' ;; aix4*) version_type=linux # AIX has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. # We preserve .a as extension for shared libraries though AIX4.2 # and later linker supports .so library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a' shlibpath_var=LIBPATH deplibs_check_method=pass_all ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}.so' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH deplibs_check_method=pass_all lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' file_magic_cmd=/usr/bin/file file_magic_test_file=/shlib/libc.so sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" export_dynamic_flag_spec=-rdynamic # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw*) version_type=windows need_version=no need_lib_prefix=no if test "$with_gcc" = yes; then library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a' else library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' fi dynamic_linker='Win32 ld.exe' deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' file_magic_cmd='${OBJDUMP} -f' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case "$version_type" in freebsd-elf*) deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' file_magic_cmd=/usr/bin/file file_magic_test_file=`echo /usr/lib/libc.so*` library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' need_version=no need_lib_prefix=no ;; freebsd-*) deplibs_check_method=unknown library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case "$host_os" in freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. dynamic_linker="$host_os dld.sl" version_type=sunos need_lib_prefix=no need_version=no shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' soname_spec='${libname}${release}.sl$major' # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6*) version_type=irix need_lib_prefix=no need_version=no soname_spec='${libname}${release}.so.$major' library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so' case "$host_os" in irix5*) libsuff= shlibsuff= # this will be overridden with pass_all, but let us keep it just in case deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ;; *) case "$LD" in # libtool.m4 will add one of these switches to LD *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" file_magic_cmd=/usr/bin/file file_magic_test_file=`echo /lib${libsuff}/libc.so*` deplibs_check_method='pass_all' ;; # No shared lib support for Linux oldld, aout, or coff. linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) dynamic_linker=no ;; # This must be Linux ELF. linux-gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' file_magic_cmd=/usr/bin/file file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` if test -f /lib/ld.so.1; then dynamic_linker='GNU ld.so' else # Only the GNU ld.so supports shared libraries on MkLinux. case "$host_cpu" in powerpc*) dynamic_linker=no ;; *) dynamic_linker='Linux ld.so' ;; esac fi ;; netbsd*) version_type=sunos if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' soname_spec='${libname}${release}.so$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH ;; openbsd*) version_type=sunos if test "$with_gnu_ld" = yes; then need_lib_prefix=no need_version=no fi library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH ;; os2*) libname_spec='$name' need_lib_prefix=no library_names_spec='$libname.dll $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_version=no soname_spec='${libname}${release}.so' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' shlibpath_var=LD_LIBRARY_PATH # this will be overridden with pass_all, but let us keep it just in case deplibs_check_method='file_magic COFF format alpha shared library' file_magic_cmd=/usr/bin/file file_magic_test_file=/shlib/libc.so deplibs_check_method='pass_all' sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}.so$major' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib" file_magic_cmd=/usr/bin/file file_magic_test_file=/lib/libc.so ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH case "$host_vendor" in ncr) deplibs_check_method='pass_all' ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' file_magic_cmd=/usr/bin/file file_magic_test_file=`echo /usr/lib/libc.so*` ;; esac ;; uts4*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' soname_spec='$libname.so.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; *) dynamic_linker=no ;; esac echo "$ac_t$dynamic_linker" 1>&6 test "$dynamic_linker" = no && can_build_shared=no # Report the final consequences. echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 # Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in # configure.in, otherwise build static only libraries. case "$host_os" in cygwin* | mingw* | os2*) if test x$can_build_shared = xyes; then test x$enable_win32_dll = xno && can_build_shared=no echo "checking if package supports dlls... $can_build_shared" 1>&6 fi ;; esac if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then case "$deplibs_check_method" in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | egrep "$file_magic_regex" > /dev/null; then : else cat <<EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) test "$enable_shared" = yes && enable_static=no ;; esac echo "$ac_t$enable_shared" 1>&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "checking whether to build static libraries... $enable_static" 1>&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi echo $ac_n "checking for objdir... $ac_c" 1>&6 rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. objdir=_libs fi rmdir .libs 2>/dev/null echo "$ac_t$objdir" 1>&6 if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then lt_cv_dlopen=no lt_cv_dlopen_libs= echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 echo "$progname:2212: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <<EOF #line 2220 "ltconfig" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen(); int main() { dlopen() ; return 0; } EOF if { (eval echo $progname:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen""... $ac_c" 1>&6 echo "$progname:2252: checking for dlopen" >&5 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 2257 "ltconfig" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else dlopen(); #endif ; return 0; } EOF if { (eval echo $progname:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dlopen=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_dlopen=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dlopen" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 echo "$progname:2299: checking for dld_link in -ldld" >&5 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <<EOF #line 2307 "ltconfig" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link(); int main() { dld_link() ; return 0; } EOF if { (eval echo $progname:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for shl_load""... $ac_c" 1>&6 echo "$progname:2339: checking for shl_load" >&5 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 2344 "ltconfig" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else shl_load(); #endif ; return 0; } EOF if { (eval echo $progname:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_shl_load=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_shl_load=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="shl_load" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 echo "$progname:2387: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <<EOF #line 2395 "ltconfig" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load(); int main() { shl_load() ; return 0; } EOF if { (eval echo $progname:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else echo "$ac_t""no" 1>&6 fi fi fi fi fi fi if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes fi case "$lt_cv_dlopen" in dlopen) for ac_hdr in dlfcn.h; do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "$progname:2452: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 2457 "ltconfig" #include <$ac_hdr> int fnord = 0; EOF ac_try="$ac_compile >/dev/null 2>conftest.out" { (eval echo $progname:2462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi done if test "x$ac_cv_header_dlfcn_h" = xyes; then CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" fi eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" LIBS="$lt_cv_dlopen_libs $LIBS" echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 echo "$progname:2490: checking whether a program can dlopen itself" >&5 if test "${lt_cv_dlopen_self+set}" = set; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then lt_cv_dlopen_self=cross else cat > conftest.c <<EOF #line 2498 "ltconfig" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LTDL_GLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LTDL_GLOBAL DL_GLOBAL # else # define LTDL_GLOBAL 0 # endif #endif /* We may have to define LTDL_LAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LTDL_LAZY_OR_NOW # ifdef RTLD_LAZY # define LTDL_LAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LTDL_LAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LTDL_LAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LTDL_LAZY_OR_NOW DL_NOW # else # define LTDL_LAZY_OR_NOW 0 # endif # endif # endif # endif #endif fnord() { int i=42;} main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } EOF if { (eval echo $progname:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then lt_cv_dlopen_self=yes else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* lt_cv_dlopen_self=no fi rm -fr conftest* fi fi echo "$ac_t""$lt_cv_dlopen_self" 1>&6 if test "$lt_cv_dlopen_self" = yes; then LDFLAGS="$LDFLAGS $link_static_flag" echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 echo "$progname:2563: checking whether a statically linked program can dlopen itself" >&5 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then lt_cv_dlopen_self_static=cross else cat > conftest.c <<EOF #line 2571 "ltconfig" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LTDL_GLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LTDL_GLOBAL DL_GLOBAL # else # define LTDL_GLOBAL 0 # endif #endif /* We may have to define LTDL_LAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LTDL_LAZY_OR_NOW # ifdef RTLD_LAZY # define LTDL_LAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LTDL_LAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LTDL_LAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LTDL_LAZY_OR_NOW DL_NOW # else # define LTDL_LAZY_OR_NOW 0 # endif # endif # endif # endif #endif fnord() { int i=42;} main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } EOF if { (eval echo $progname:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then lt_cv_dlopen_self_static=yes else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* lt_cv_dlopen_self_static=no fi rm -fr conftest* fi fi echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 fi ;; esac case "$lt_cv_dlopen_self" in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case "$lt_cv_dlopen_self_static" in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Copy echo and quote the copy, instead of the original, because it is # used later. ltecho="$echo" if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then ltecho="$CONFIG_SHELL \$0 --fallback-echo" fi LTSHELL="$SHELL" LTCONFIG_VERSION="$VERSION" # Only quote variables if we're using ltmain.sh. case "$ltmain" in *.sh) # Now quote all the things that may contain metacharacters. for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \ old_LD old_LDFLAGS old_LIBS \ old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \ AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \ reload_flag reload_cmds wl \ pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ thread_safe_flag_spec whole_archive_flag_spec libname_spec \ library_names_spec soname_spec \ RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \ file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \ finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ hardcode_libdir_flag_spec hardcode_libdir_separator \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do case "$var" in reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ postinstall_cmds | postuninstall_cmds | \ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case "$ltecho" in *'\$0 --fallback-echo"') ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac trap "$rm \"$ofile\"; exit 1" 1 2 15 echo "creating $ofile" $rm "$ofile" cat <<EOF > "$ofile" #! $SHELL # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. # # Copyright (C) 1996-1999 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="sed -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi ### BEGIN LIBTOOL CONFIG EOF cfgfile="$ofile" ;; *) # Double-quote the variables that need it (for aesthetics). for var in old_CC old_CFLAGS old_CPPFLAGS \ old_LD old_LDFLAGS old_LIBS \ old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do eval "$var=\\\"\$var\\\"" done # Just create a config file. cfgfile="$ofile.cfg" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 echo "creating $cfgfile" $rm "$cfgfile" cat <<EOF > "$cfgfile" # `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) EOF ;; esac cat <<EOF >> "$cfgfile" # Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # # CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\ # LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\ # NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\ # DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\ # $0$ltconfig_args # # Compiler and other test output produced by $progname, useful for # debugging $progname, is in ./config.log if it exists. # The version of $progname that generated this script. LTCONFIG_VERSION=$LTCONFIG_VERSION # Shell to use when invoking shell scripts. SHELL=$LTSHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$ltecho # The archiver. AR=$AR # The default C compiler. CC=$CC # The linker used to build libraries. LD=$LD # Whether we need hard or soft links. LN_S=$LN_S # A BSD-compatible nm program. NM=$NM # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$reload_flag reload_cmds=$reload_cmds # How to pass a linker flag through the compiler. wl=$wl # Object file suffix (normally "o"). objext="$objext" # Old archive suffix (normally "a"). libext="$libext" # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$pic_flag # Does compiler simultaneously support -c and -o options? compiler_c_o=$compiler_c_o # Can we write directly to a .lo ? compiler_o_lo=$compiler_o_lo # Must we lock files when doing compilation ? need_locks=$need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$link_static_flag # Compiler flag to turn off builtin functions. no_builtin_flag=$no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$library_names_spec # The coded name of the library, if different from the real name. soname_spec=$soname_spec # Commands used to build and install an old-style archive. RANLIB=$RANLIB old_archive_cmds=$old_archive_cmds old_postinstall_cmds=$old_postinstall_cmds old_postuninstall_cmds=$old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$old_archive_from_new_cmds # Commands used to build and install a shared archive. archive_cmds=$archive_cmds archive_expsym_cmds=$archive_expsym_cmds postinstall_cmds=$postinstall_cmds postuninstall_cmds=$postuninstall_cmds # Method to check whether dependent libraries are shared objects. deplibs_check_method=$deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$global_symbol_to_cdecl # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$hardcode_libdir_separator # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Compile-time system search path for libraries sys_lib_search_path_spec=$sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$exclude_expsyms # Symbols that must always be exported. include_expsyms=$include_expsyms EOF case "$ltmain" in *.sh) echo '### END LIBTOOL CONFIG' >> "$ofile" echo >> "$ofile" case "$host_os" in aix3*) cat <<\EOF >> "$ofile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # Append the ltmain.sh script. sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1) # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? chmod +x "$ofile" ;; *) # Compile the libtool program. echo "FIXME: would compile $ltmain" ;; esac test -n "$cache_file" || exit 0 # AC_CACHE_SAVE trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/ltmain.sh�����������������������������������������������������������������������������0100644�0000764�0000144�00000327706�07142033272�014655� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun ltconfig. # # Copyright (C) 1996-1999 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<EOF $* EOF exit 0 fi # The name of this program. progname=`$echo "$0" | sed 's%^.*/%%'` modename="$progname" # Constants. PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.3.4 TIMESTAMP=" (1.385.2.196 2025/12/07 21:47:57)" default_mode= help="Try \`$progname --help' for more information." magic="%%%MAGIC variable%%%" mkdir="mkdir" mv="mv -f" rm="rm -f" # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' SP2NL='tr \040 \012' NL2SP='tr \015\012 \040\040' # NLS nuisances. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). # We save the old values to restore during execute mode. if test "${LC_ALL+set}" = set; then save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL fi if test "${LANG+set}" = set; then save_LANG="$LANG"; LANG=C; export LANG fi if test "$LTCONFIG_VERSION" != "$VERSION"; then echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then echo "$modename: not configured to build any kind of library" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" # Parse our command line options once, thoroughly. while test $# -gt 0 do arg="$1" shift case "$arg" in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case "$prev" in execute_dlfiles) eval "$prev=\"\$$prev \$arg\"" ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case "$arg" in --help) show_help=yes ;; --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" exit 0 ;; --config) sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 exit 0 ;; --debug) echo "$progname: enabling shell trace mode" set -x ;; --dry-run | -n) run=: ;; --features) echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit 0 ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --quiet | --silent) show=: ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit 1 ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then case "$nonopt" in *cc | *++ | gcc* | *-gcc*) mode=link for arg do case "$arg" in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit 1 fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case "$mode" in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= lastarg= srcfile="$nonopt" suppress_output= user_target=no for arg do # Accept any command-line options. case "$arg" in -o) if test "$user_target" != "no"; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit 1 fi user_target=next ;; -static) build_old_libs=yes continue ;; esac case "$user_target" in next) # The next one is the -o target name user_target=yes continue ;; yes) # We got the output file user_target=set libobj="$arg" continue ;; esac # Accept the current argument as the source file. lastarg="$srcfile" srcfile="$arg" # Aesthetically quote the previous argument. # Backslashify any backslashes, double quotes, and dollar signs. # These are the only characters that are still specially # interpreted inside of double-quoted scrings. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly in scan # sets, so we specify it separately. case "$lastarg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) lastarg="\"$lastarg\"" ;; esac # Add the previous argument to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi done case "$user_target" in set) ;; no) # Get the name of the library object. libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; *) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit 1 ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSfmso]' case "$libobj" in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case "$libobj" in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit 1 ;; esac if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit 1 fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $libobj" else removelist="$libobj" fi $run $rm $removelist trap "$run $rm $removelist; exit 1" 1 2 15 # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit 1" 1 2 15 else need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until ln "$0" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile # All platforms use -DPIC, to notify preprocessed assembler code. command="$base_compile $srcfile $pic_flag -DPIC" if test "$build_old_libs" = yes; then lo_libobj="$libobj" dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$libobj"; then dir="$objdir" else dir="$dir/$objdir" fi libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` if test -d "$dir"; then $show "$rm $libobj" $run $rm $libobj else $show "$mkdir $dir" $run $mkdir $dir status=$? if test $status -ne 0 && test ! -d $dir; then exit $status fi fi fi if test "$compiler_o_lo" = yes; then output_obj="$libobj" command="$command -o $output_obj" elif test "$compiler_c_o" = yes; then output_obj="$obj" command="$command -o $output_obj" fi $run $rm "$output_obj" $show "$command" if $run eval "$command"; then : else test -n "$output_obj" && $run $rm $removelist exit 1 fi if test "$need_locks" = warn && test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed, then go on to compile the next one if test x"$output_obj" != x"$libobj"; then $show "$mv $output_obj $libobj" if $run $mv $output_obj $libobj; then : else error=$? $run $rm $removelist exit $error fi fi # If we have no pic_flag, then copy the object into place and finish. if test -z "$pic_flag" && test "$build_old_libs" = yes; then # Rename the .lo from within objdir to obj if test -f $obj; then $show $rm $obj $run $rm $obj fi $show "$mv $libobj $obj" if $run $mv $libobj $obj; then : else error=$? $run $rm $removelist exit $error fi xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` # Now arrange that obj and lo_libobj become the same file $show "(cd $xdir && $LN_S $baseobj $libobj)" if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then exit 0 else error=$? $run $rm $removelist exit $error fi fi # Allow error messages only from the first compilation. suppress_output=' >/dev/null 2>&1' fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then command="$base_compile $srcfile" if test "$compiler_c_o" = yes; then command="$command -o $obj" output_obj="$obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" $run $rm "$output_obj" $show "$command" if $run eval "$command"; then : else $run $rm $removelist exit 1 fi if test "$need_locks" = warn && test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed if test x"$output_obj" != x"$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Create an invalid libtool object if no PIC, so that we do not # accidentally link it into a program. if test "$build_libtool_libs" != yes; then $show "echo timestamp > $libobj" $run eval "echo timestamp > \$libobj" || exit $? else # Move the .lo from within objdir $show "$mv $libobj $lo_libobj" if $run $mv $libobj $lo_libobj; then : else error=$? $run $rm $removelist exit $error fi fi fi # Unlock the critical section if it was locked if test "$need_locks" != no; then $rm "$lockfile" fi exit 0 ;; # libtool link mode link) modename="$modename: link" case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invokation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes # This is a source program that is used to create dlls on Windows # Don't remove nor modify the starting and closing comments # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include <windows.h> # #undef WIN32_LEAN_AND_MEAN # #include <stdio.h> # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include <cygwin/cygwin_dll.h> # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ # This is a source program that is used to create import libraries # on Windows for dlls which lack them. Don't remove nor modify the # starting and closing comments # /* impgen.c starts here */ # /* Copyright (C) 1999 Free Software Foundation, Inc. # # This file is part of GNU libtool. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # */ # # #include <stdio.h> /* for printf() */ # #include <unistd.h> /* for open(), lseek(), read() */ # #include <fcntl.h> /* for O_RDONLY, O_BINARY */ # #include <string.h> /* for strdup() */ # # static unsigned int # pe_get16 (fd, offset) # int fd; # int offset; # { # unsigned char b[2]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 2); # return b[0] + (b[1]<<8); # } # # static unsigned int # pe_get32 (fd, offset) # int fd; # int offset; # { # unsigned char b[4]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 4); # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # static unsigned int # pe_as32 (ptr) # void *ptr; # { # unsigned char *b = ptr; # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # int # main (argc, argv) # int argc; # char *argv[]; # { # int dll; # unsigned long pe_header_offset, opthdr_ofs, num_entries, i; # unsigned long export_rva, export_size, nsections, secptr, expptr; # unsigned long name_rvas, nexp; # unsigned char *expdata, *erva; # char *filename, *dll_name; # # filename = argv[1]; # # dll = open(filename, O_RDONLY|O_BINARY); # if (!dll) # return 1; # # dll_name = filename; # # for (i=0; filename[i]; i++) # if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') # dll_name = filename + i +1; # # pe_header_offset = pe_get32 (dll, 0x3c); # opthdr_ofs = pe_header_offset + 4 + 20; # num_entries = pe_get32 (dll, opthdr_ofs + 92); # # if (num_entries < 1) /* no exports */ # return 1; # # export_rva = pe_get32 (dll, opthdr_ofs + 96); # export_size = pe_get32 (dll, opthdr_ofs + 100); # nsections = pe_get16 (dll, pe_header_offset + 4 +2); # secptr = (pe_header_offset + 4 + 20 + # pe_get16 (dll, pe_header_offset + 4 + 16)); # # expptr = 0; # for (i = 0; i < nsections; i++) # { # char sname[8]; # unsigned long secptr1 = secptr + 40 * i; # unsigned long vaddr = pe_get32 (dll, secptr1 + 12); # unsigned long vsize = pe_get32 (dll, secptr1 + 16); # unsigned long fptr = pe_get32 (dll, secptr1 + 20); # lseek(dll, secptr1, SEEK_SET); # read(dll, sname, 8); # if (vaddr <= export_rva && vaddr+vsize > export_rva) # { # expptr = fptr + (export_rva - vaddr); # if (export_rva + export_size > vaddr + vsize) # export_size = vsize - (export_rva - vaddr); # break; # } # } # # expdata = (unsigned char*)malloc(export_size); # lseek (dll, expptr, SEEK_SET); # read (dll, expdata, export_size); # erva = expdata - export_rva; # # nexp = pe_as32 (expdata+24); # name_rvas = pe_as32 (expdata+32); # # printf ("EXPORTS\n"); # for (i = 0; i<nexp; i++) # { # unsigned long name_rva = pe_as32 (erva+name_rvas+i*4); # printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i); # } # # return 0; # } # /* impgen.c ends here */ ;; *) allow_undefined=yes ;; esac compile_command="$nonopt" finalize_command="$nonopt" compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= linkopts= if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else lib_search_path= fi # now prepend the system-specific ones eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= link_against_libtool_libs= ltlibs= module=no objs= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= # We need to know -static, to get the right output filenames. for arg do case "$arg" in -all-static | -static) if test "X$arg" = "X-all-static"; then if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test $# -gt 0; do arg="$1" shift # If the previous option needs an argument, assign it. if test -n "$prev"; then case "$prev" in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case "$prev" in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case "$arg" in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit 1 fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case "$arg" in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi prevarg="$arg" case "$arg" in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: not more than one -exported-symbols argument allowed" exit 1 fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case "$dir" in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 absdir="$dir" fi dir="$absdir" ;; esac case " $deplibs " in *" $arg "*) ;; *) deplibs="$deplibs $arg";; esac case " $lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir";; esac case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2*) dllsearchdir=`cd "$dir" && pwd || echo "$dir"` case ":$dllsearchpath:" in ::) dllsearchpath="$dllsearchdir";; *":$dllsearchdir:"*) ;; *) dllsearchpath="$dllsearchpath:$dllsearchdir";; esac ;; esac ;; -l*) if test "$arg" = "-lc"; then case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) # These systems don't actually have c library (as such) continue ;; esac elif test "$arg" = "-lm"; then case "$host" in *-*-cygwin* | *-*-beos*) # These systems don't actually have math library (as such) continue ;; esac fi deplibs="$deplibs $arg" ;; -module) module=yes continue ;; -no-undefined) allow_undefined=no continue ;; -o) prev=output ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case "$dir" in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # If we have no pic_flag, then this is the same as -all-static. if test -z "$pic_flag" && test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac ;; *.o | *.obj | *.a | *.lib) # A standard object. objs="$objs $arg" ;; *.lo) # A library object. if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` prev= fi libobjs="$libobjs $arg" ;; *.la) # A libtool-controlled library. dlname= libdir= library_names= old_library= # Check to see that this really is a libtool archive. if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 exit 1 fi # If the library was installed with an old release of libtool, # it will not redefine variable installed. installed=yes # Read the .la file # If there is no directory component, then add one. case "$arg" in */* | *\\*) . $arg ;; *) . ./$arg ;; esac # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 exit 1 fi # Find the relevant object directory and library name. name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` if test "X$installed" = Xyes; then dir="$libdir" else dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$arg"; then dir="$objdir" else dir="$dir/$objdir" fi fi if test -n "$dependency_libs"; then # Extract -R and -L from dependency_libs temp_deplibs= for deplib in $dependency_libs; do case "$deplib" in -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'` case " $rpath $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; -L*) case "$compile_command $temp_deplibs " in *" $deplib "*) ;; *) temp_deplibs="$temp_deplibs $deplib";; esac temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'` case " $lib_search_path " in *" $temp_dir "*) ;; *) lib_search_path="$lib_search_path $temp_dir";; esac ;; *) temp_deplibs="$temp_deplibs $deplib";; esac done dependency_libs="$temp_deplibs" fi if test -z "$libdir"; then # It is a libtool convenience library, so add in its objects. convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$deplibs$dependency_libs" compile_command="$compile_command $dir/$old_library$dependency_libs" finalize_command="$finalize_command $dir/$old_library$dependency_libs" continue fi # This library was specified with -dlopen. if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking statically, # we need to preload. prev=dlprefiles else # We should not create a dependency on this library, but we # may need any libraries it requires. compile_command="$compile_command$dependency_libs" finalize_command="$finalize_command$dependency_libs" prev= continue fi fi # The library was specified with -dlpreopen. if test "$prev" = dlprefiles; then # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then dlprefiles="$dlprefiles $dir/$old_library" else dlprefiles="$dlprefiles $dir/$linklib" fi prev= fi if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then link_against_libtool_libs="$link_against_libtool_libs $arg" if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # We need an absolute path. case "$dir" in [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 absdir="$dir" fi ;; esac # This is the magic to use -rpath. # Skip directories that are in the system default run-time # search path, unless they have been requested with -R. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac lib_linked=yes case "$hardcode_action" in immediate | unsupported) if test "$hardcode_direct" = no; then compile_command="$compile_command $dir/$linklib" deplibs="$deplibs $dir/$linklib" case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2*) dllsearchdir=`cd "$dir" && pwd || echo "$dir"` if test -n "$dllsearchpath"; then dllsearchpath="$dllsearchpath:$dllsearchdir" else dllsearchpath="$dllsearchdir" fi ;; esac elif test "$hardcode_minus_L" = no; then case "$host" in *-*-sunos*) compile_shlibpath="$compile_shlibpath$dir:" ;; esac case "$compile_command " in *" -L$dir "*) ;; *) compile_command="$compile_command -L$dir";; esac compile_command="$compile_command -l$name" deplibs="$deplibs -L$dir -l$name" elif test "$hardcode_shlibpath_var" = no; then case ":$compile_shlibpath:" in *":$dir:"*) ;; *) compile_shlibpath="$compile_shlibpath$dir:";; esac compile_command="$compile_command -l$name" deplibs="$deplibs -l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then compile_command="$compile_command $absdir/$linklib" deplibs="$deplibs $absdir/$linklib" elif test "$hardcode_minus_L" = yes; then case "$compile_command " in *" -L$absdir "*) ;; *) compile_command="$compile_command -L$absdir";; esac compile_command="$compile_command -l$name" deplibs="$deplibs -L$absdir -l$name" elif test "$hardcode_shlibpath_var" = yes; then case ":$compile_shlibpath:" in *":$absdir:"*) ;; *) compile_shlibpath="$compile_shlibpath$absdir:";; esac compile_command="$compile_command -l$name" deplibs="$deplibs -l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit 1 fi # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then finalize_command="$finalize_command $libdir/$linklib" elif test "$hardcode_minus_L" = yes; then case "$finalize_command " in *" -L$libdir "*) ;; *) finalize_command="$finalize_command -L$libdir";; esac finalize_command="$finalize_command -l$name" elif test "$hardcode_shlibpath_var" = yes; then case ":$finalize_shlibpath:" in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:";; esac finalize_command="$finalize_command -l$name" else # We cannot seem to hardcode it, guess we'll fake it. case "$finalize_command " in *" -L$dir "*) ;; *) finalize_command="$finalize_command -L$libdir";; esac finalize_command="$finalize_command -l$name" fi else # Transform directly to old archives if we don't build new libraries. if test -n "$pic_flag" && test -z "$old_library"; then $echo "$modename: cannot find static library for \`$arg'" 1>&2 exit 1 fi # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_command="$compile_command $dir/$linklib" finalize_command="$finalize_command $dir/$linklib" else case "$compile_command " in *" -L$dir "*) ;; *) compile_command="$compile_command -L$dir";; esac compile_command="$compile_command -l$name" case "$finalize_command " in *" -L$dir "*) ;; *) finalize_command="$finalize_command -L$dir";; esac finalize_command="$finalize_command -l$name" fi fi # Add in any libraries that this one depends upon. compile_command="$compile_command$dependency_libs" finalize_command="$finalize_command$dependency_libs" continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac ;; esac # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" case "$output" in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit 1 ;; *.a | *.lib) if test -n "$link_against_libtool_libs"; then $echo "$modename: error: cannot link libtool libraries into archives" 1>&2 exit 1 fi if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" ;; *.la) # Make sure we only generate libraries of the form `libNAME.la'. case "$outputname" in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi if test -n "$objs"; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 exit 1 fi # How the heck are we supposed to write a wrapper for a shared library? if test -n "$link_against_libtool_libs"; then $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2 exit 1 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test $# -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. libext=al oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi dependency_libs="$deplibs" if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit 1 fi current="$2" revision="$3" age="$4" # Check that each of the things are valid numbers. case "$current" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case "$revision" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case "$age" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac if test $age -gt $current; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 fi # Calculate the version variables. major= versuffix= verstring= case "$version_type" in none) ;; irix) major=`expr $current - $age + 1` versuffix="$major.$revision" verstring="sgi$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test $loop != 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="sgi$major.$iface:$verstring" done ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test $loop != 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; windows) # Like Linux, but with '-' rather than '.', since we only # want one extension on Windows 95. major=`expr $current - $age` versuffix="-$major-$age-$revision" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= verstring="0.0" if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi dependency_libs="$deplibs" case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *) # Add libc to deplibs on all other systems. deplibs="$deplibs -lc" ;; esac fi # Create the output directory, or remove our outputs if we need to. if test -d $output_objdir; then $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* else $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test $status -ne 0 && test ! -d $output_objdir; then exit $status fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi if test "$build_libtool_libs" = yes; then # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case "$deplibs_check_method" in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behaviour. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c <<EOF int main() { return 0; } EOF $rm conftest $CC -o conftest conftest.c $deplibs if test $? -eq 0 ; then ldd_output=`ldd conftest` for i in $deplibs; do name="`expr $i : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test "$name" != "" ; then libname=`eval \\$echo \"$libname_spec\"` deplib_matches=`eval \\$echo \"$library_names_spec\"` set dummy $deplib_matches deplib_match=$2 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then newdeplibs="$newdeplibs $i" else droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else newdeplibs="$newdeplibs $i" fi done else # Error occured in the first compile. Let's try to salvage the situation: # Compile a seperate program for each library. for i in $deplibs; do name="`expr $i : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test "$name" != "" ; then $rm conftest $CC -o conftest conftest.c $i # Did it work? if test $? -eq 0 ; then ldd_output=`ldd conftest` libname=`eval \\$echo \"$libname_spec\"` deplib_matches=`eval \\$echo \"$library_names_spec\"` set dummy $deplib_matches deplib_match=$2 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then newdeplibs="$newdeplibs $i" else droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else droppeddeps=yes echo echo "*** Warning! Library $i is needed by this library but I was not able to" echo "*** make it link in! You will probably need to install it or some" echo "*** library that it depends on before this library will be fully" echo "*** functional. Installing it before continuing would be even better." fi else newdeplibs="$newdeplibs $i" fi done fi ;; file_magic*) set dummy $deplibs_check_method file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`" for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test "$name" != "" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | sed 's/.* -> //'` case "$potliblink" in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | sed 10q \ | egrep "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done if test -n "$a_deplib" ; then droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | grep . >/dev/null; then echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" echo "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Get the real and link names of the library. eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Ensure that we have .o objects for linkers which dislike .lo # (e.g. aix) in case we are running --disable-static for obj in $libobjs; do xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` if test ! -f $xdir/$oldobj; then $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? fi done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols eval cmds=\"$export_symbols_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case "$xlib" in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linkopts="$linkopts $flag" fi # Do each of the archive commands. if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval cmds=\"$archive_expsym_cmds\" else eval cmds=\"$archive_cmds\" fi IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; *.lo | *.o | *.obj) if test -n "$link_against_libtool_libs"; then $echo "$modename: error: cannot link libtool libraries into objects" 1>&2 exit 1 fi if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case "$output" in *.lo) if test -n "$objs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case "$xlib" in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" output="$obj" eval cmds=\"$reload_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. $show "echo timestamp > $libobj" $run eval "echo timestamp > $libobj" || exit $? exit 0 fi if test -n "$pic_flag"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" eval cmds=\"$reload_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" else # Just create a symlink. $show $rm $libobj $run $rm $libobj xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$libobj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` $show "(cd $xdir && $LN_S $oldobj $baseobj)" $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 ;; # Anything else should be a program. *) if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$compile_rpath " in *" $libdir "*) ;; *) compile_rpath="$compile_rpath $libdir" ;; esac case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the binary in the object directory, then wrap it. if test ! -d $output_objdir; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test $status -ne 0 && test ! -d $output_objdir; then exit $status fi fi if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case "$dlsyms" in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`echo "$arg" | sed -e 's%^.*/%%'` $run eval 'echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = {\ " sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr_t) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case "$host" in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit 1 ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case "$dir" in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $0 --fallback-echo"; then case "$0" in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; *) qecho="$SHELL `pwd`/$0 --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`echo $output|sed 's,.exe$,,'` ;; esac $rm $output trap "$rm $output; exit 1" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: link_against_libtool_libs='$link_against_libtool_libs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then echo >> $output "\ program=lt-'$outputname' progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if (cd \"\$thisdir\" && eval \$relink_command); then : else $rm \"\$progdir/\$file\" exit 1 fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in *-*-cygwin* | *-*-mingw | *-*-os2*) # win32 systems need to use the prog path for dll # lookup to work $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ # Export the path to the program. PATH=\"\$progdir:\$PATH\" export PATH exec \$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit 1 fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " chmod +x $output fi exit 0 ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case "$xlib" in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then eval cmds=\"$old_archive_from_new_cmds\" else # Ensure that we have .o objects in place in case we decided # not to build a shared library, and have fallen back to building # static libs even though --disable-static was passed! for oldobj in $oldobjs; do if test ! -f $oldobj; then xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$oldobj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` $show "(cd $xdir && ${LN_S} $obj $baseobj)" $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? fi done eval cmds=\"$old_archive_cmds\" fi IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case "$output" in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" if test -n "$xrpath"; then temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" done dependency_libs="$temp_xrpath $dependency_libs" fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i fi $rm $output $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$dlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Directory that this library needs to be installed in: libdir='$install_libdir'\ " done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $? ;; esac exit 0 ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case "$arg" in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit 1 fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test $# -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit 1 fi fi case "$destdir" in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case "$file" in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case "$file" in *.a | *.lib) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi library_names= old_library= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" test "X$dir" = "X$file/" && dir= dir="$dir$objdir" # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift # Install the shared library and build the symlinks. $show "$install_prog $dir/$realname $destdir/$realname" $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? if test $# -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" eval cmds=\"$postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case "$destfile" in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.o | *.obj) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit 0 ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then link_against_libtool_libs= relink_command= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Check the variables that should have been set. if test -z "$link_against_libtool_libs"; then $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 exit 1 fi finalize=yes for lib in $link_against_libtool_libs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case "$lib" in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : else $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? # Do each command in the postinstall commands. eval cmds=\"$old_postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec $SHELL $0 --finish$current_libdirs exit 1 fi exit 0 ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. eval cmds=\"$finish_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit 0 echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do echo " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" echo "more information, such as the ld(1) and ld.so(8) manual pages." echo "----------------------------------------------------------------------" exit 0 ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit 1 fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit 1 fi dir= case "$file" in *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit 1 fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case "$file" in -*) ;; *) # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved enviroment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now actually exec the command. eval "exec \$cmd$args" $echo "$modename: cannot exec \$cmd$args" exit 1 else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit 0 fi ;; # libtool uninstall mode uninstall) modename="$modename: uninstall" rm="$nonopt" files= for arg do case "$arg" in -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit 1 fi for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` rmfiles="$file" case "$name" in *.la) # Possibly a libtool archive, so verify it. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $dir/$n" done test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" $show "$rm $rmfiles" $run $rm $rmfiles if test -n "$library_names"; then # Do each command in the postuninstall commands. eval cmds=\"$postuninstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. eval cmds=\"$old_postuninstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi ;; *.lo) if test "$build_old_libs" = yes; then oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` rmfiles="$rmfiles $dir/$oldobj" fi $show "$rm $rmfiles" $run $rm $rmfiles ;; *) $show "$rm $rmfiles" $run $rm $rmfiles ;; esac done exit 0 ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit 1 ;; esac $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit 1 fi # test -z "$show_help" # We need to display help for each of the modes. case "$mode" in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --version print version information MODE must be one of the following: compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE." exit 0 ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac echo $echo "Try \`$modename --help' for more information about other modes." exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: ����������������������������������������������������������libwww/config/makedefs.pl���������������������������������������������������������������������������0100755�0000764�0000144�00000006463�06701150752�015151� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl # # syntax: makedefs.pl [options] [files | @[filelist]] # where options are # -d<directory>: look for files in <directory>. # -header<text>: add <text> to top of file. # -e: no more options (like grep -e). Allows access to files with # a leading - in their name. # <files> is one or more files in the form <filename[@<offset>]> # where <filename> is a file in which to look for functions. # <offset> is the desired offset for the first functions. The <offset> # directive will be ignored if it will cause a conflict with a # function offset already defined in the def file. # [filelist] is a file containing these lists. If ommited, makedefs # looks to stdin for a filelist. # # example call: ../../../config/makedefs.pl -headerEXPORTS -d.. @wwwcore.files # read the list of files from wwwcore.files, grep these files for 'PUBLIC', # and send the output to stdout. # # EGP July 5 96 # $NumberDefs'granularity = 100; # how much the index changes for each file $NumberDefs'at = 24; # target at sign column $NumberDefs'tab = 8; # how wide a tab looks in your editor $NumberDefs'offset = 0; # starting number $NumberDefs'index; $WorkDir = ''; sub NumberDefs'numberEach { package NumberDefs; local($name, $passedOffset) = @_; if ($name eq "") { print "\n"; next; } if ($passedOffset && $passedOffset > $offset) { $index = $offset = $passedOffset; } elsif ($name =~ /^;/) { $index = $offset = (int($index / $granularity) +1) * $granularity; } print $name; $len = length($name); if ($len >= $at) { print " "; } else { $tabz = (($at-$len)/$tab); for ($i = 0; $i < $tabz; $i++) { print "\t"; } } print "@ ", $index, "\n"; $index ++; } # numberAll - call this to renumber a def file # sub NumberDefs'numberAll { package NumberDefs; $INPUT = $_[0]; while(<$INPUT>) { local($name) = split(" ",$_); &NumberDefs'numberEach($name); } } sub GrepPublic { local($source, $offset) = split('@', @_[0]); if (!open (SOURCE, $WorkDir.$source)) { warn "Can't open $WorkDir$source: $!\n"; return; } &NumberDefs'numberEach(';'.$source, $offset); # add source file as a source while (<SOURCE>) { if (!/^PUBLIC\s/) { next; } if (!/(\w*)\W*\(/) { warn "assuming global: ", $_; next; } local($func) = $1; # printf "\$_:\"%s\" \$func:\"%s\"\n", $_, $func; &NumberDefs'numberEach($func); } } sub ReadArg { local($arg) = substr(@_[0], 1); return 0 if ($arg eq 'e'); if (substr($arg, 0, 6) eq 'header') { print substr($arg, 6), "\n"; } elsif (substr($arg, 0, 1) eq 'd') { $WorkDir = substr($arg, 1); $WorkDir .= '/' if (!($WorkDir =~ /\/$/)); } else { print "unknown argument \"$arg\".\n"; } return 1; } while (@ARGV[0] =~ /^-/ && &ReadArg(shift(@ARGV))) {} if (@ARGV[0] =~ /^@(.*)/) { local($name) = $1; if ($name =~ /\w+/) { if (!open(LIST, $name)) { die "Can't open \"$name\", $!"; } while (<LIST>) { chop; &GrepPublic($_); print "\n"; } exit 0; } while (<STDIN>) { chop; &GrepPublic($_); print "\n"; } exit 0; } foreach $source (@ARGV) { &GrepPublic($source); } #&NumberDefs'numberAll(STDIN); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/makeindx.pl���������������������������������������������������������������������������0100755�0000764�0000144�00000020150�06704440760�015163� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl #<PRE> netscape <B>insists</B> on interperting this as html # # makeindx.pl <html directory|html file list> <@header files list|header file> # # for example, from the Library/User directory: # ../../config/makeindx.pl ../src ../src/WWW*.html # what it does: # 1. get a list of all the html files in ../src. # 2. read each DLL definition (../src/WWW*.html) and associate it with # each of its embedded files (included header files). # 3. read all the html files from 1 and scan for functions. # 4. print these sorted by function name, # 5. DLL name, # 6. and module name # # EGP July 5 96 # # output an HTML pointer to $source[#$naneTag] labeled $name # also output and optional extra pointer to $dll named $dll sub numberEach { local($source, $name, $nameTag, $dll) = @_; if ($name eq "") { print "\n"; next; } # $dll =~ s/\.docs//; print " <LI><A HREF=/ if (defined($nameTag)) { print "#$nameTag"; } print "\">$name</A>"; if (defined($dll) && $dll ne '') { print " --- <A HREF=/#$dll\">$dll</A>"; } print "\n"; } # find functions in a module sub findFunctions { local($source, $nameTag) = @_; return if ($source =~ /sysdep/); return if ($source =~ /WWW/); if (!open (SOURCE, $source)) { warn "Can't open $source: $!\n"; return; } $source =~ s/.*\/(\w+\.html)/$1/; while (<SOURCE>) { if (/<A +NAME *= *"([^"]*)">/i) #" { $nameTag = $1; } s/<[^>]*>//g; if (!/^extern\s/) { next; } local($func); # func ( if (/(\w*)\W*\(/) { $func = $1; # ^extern [const|unsigned|signed] word func; } elsif (/^extern\W+const|unsigned|signed\W+\w*\W+(\w*);/){ $func = $1; } elsif (/^extern\W+\w*\W+(\w*);/){ $func = $1; # func, func } elsif (/,/) { while (/(\w+)\W*,(.*)/) { $func = $1; $_ = $2; $Functions{$func} = $source.'#'.$nameTag; push(@FunctionList, $func); } if (/(\w+)\W*;/) { $func = $1; } else { /(\w+)/; $func = $1; warn "likely line wrap for list ($source,$.): \"$_\"?\n"; } } else { warn "skipping ($source,$.)g: \"$_\"?\n"; next; } $Functions{$func} = $source.'#'.$nameTag; push(@FunctionList, $func); # print "$func $Functions{$func}\n"; } } #sub getDLLs #{ # local($list) = @_; # open(LIST, $list) || die "Couldn't open list file \"$list\":$!\n"; # $list =~ s/.*\/(\w+\.docs)/$1/; # $list =~ s/\.docs//; # push(@DLLList, $list); # while (<LIST>) { # chop; # if (defined($Modules{$_})) { # $Modules{$_} .= "#$list"; # $DLLS{$_} .= "$list"; # } else { # warn "unknown file \"$_\".\n"; # } # } #} # reads include file for a DLL and looks for included modules sub getDLLs { local($list) = @_; return if ($list eq "WWWLib.html"); open(LIST, "grep \"#include\" $list|grep -v sysdep|") || die "Couldn't open list file \"$list\":$!\n"; $list =~ s/.*\/(\w+\.html)/$1/; $list =~ s/\.html//; push(@DLLList, $list); while (<LIST>) { chop; s/<[^>]*>//g; s/#include\s+\"//; s/\.h\".*/.html/; if (defined($Modules{$_})) { $Modules{$_} .= "#$list"; $DLLS{$_} .= "$list"; } else { warn "unknown file \"$_\" in \"$list\".\n"; } } } sub printHeader { print <<"EndOfHeader"; <HTML> <HEAD> <TITLE>Libwww Exported Functions</TITLE> </HEAD> <BODY> <H1> Libwww Exported Functions </H1> Here is a list of all exported functions in the libwww API sorted by interface module. For more comprehensive descriptions, see the <A HREF="/">user documentation</A> <UL> <LI><A HREF=#WWWUtil>Basic Utilities</A> <LI><A HREF=#WWWCore>Libwww core functions</A> <LI><A HREF=#WWWInit>Initialization Utilities</A> <LI><A HREF=#WWWApp>Application Utilities and Access functions</A> <LI><A HREF=#WWWTrans>Transport Package</A> <LI><A HREF=#WWWMux>Mux Protocol (experimental)</A> <LI><A HREF=#WWWMIME>MIME Package</A> <LI><A HREF=#WWWFile>Local file access</A> <LI><A HREF=#WWWGophe>Gopher access</A> <LI><A HREF=#WWWFTP>FTP access</A> <LI><A HREF=#WWWHTTP>HTTP access</A> <LI><A HREF=#WWWNews>News access</A> <LI><A HREF=#WWWTelnt>Telnet access</A> <LI><A HREF=#WWWWAIS>WAIS access</A> <LI><A HREF=#WWWCache>Persistent HTTP/1.1 cache</A> <LI><A HREF=#WWWStream>Stream Package</A> <LI><A HREF=#WWWDir>Directory Browsing Package</A> <LI><A HREF=#WWWZip>Zlib deflate/inflate streams</A> <LI><A HREF=#WWWHTML>HTML parser</A> <LI><A HREF=#WWWXML>XML parser</A> <LI><A HREF=#WWWSQL>SQL logging facilities</A> </UL> EndOfHeader } sub printByFunction { print <<"EndOfByFunction"; </UL> <P> <A NAME="byFunction"><H2>Sorted by Function Name</H2></A> <UL> EndOfByFunction } sub printByDLL { print <<"EndOfByDLL"; </UL> <P> <A NAME="byDLL"><H2>Sorted by Interface Collection</H2></A> <UL> EndOfByDLL } sub printDLLName { local($dll, $link) = @_; ($link .= substr($dll, 0, 4)) =~ tr/a-z/A-Z/; $link = $Dir.$link.substr($dll, 4).'.html'; print <<"EndOfDLLName"; </UL> <P> <A NAME="$dll"><A HREF="/"><H3>$dll</H3></A></A> <UL> EndOfDLLName } sub printByModule { print <<"EndOfByModule"; </UL> <P> <A NAME="byModule"><H2>Sorted by Individual Module</H2></A> <UL> EndOfByModule } sub printModuleName { local($module, $dll, $text, $link) = @_; $link = $Dir.$module; $text = "from the <A HREF=/#$dll\">$dll</A> module\n" if(defined($dll)); print <<"EndOfModuleName"; </UL> <P> <A NAME="$module"><A HREF="/"><H3>$module</H3></A></A> $text <UL> EndOfModuleName } sub printFooter { $date = `date`; print <<"EndOfFooter"; </UL> This list was generated automatily and may be regenerated at any time. Please see <A HREF="/">makeindx.pl script</A> for instructions. <P> <HR> <ADDRESS> Last Updated $date </ADDRESS> </BODY> </HTML> EndOfFooter } sub readModules { local($check, $line) = @_; # get a list of the modules if (-d $check) { open(CHECK, "ls -1 $check/*.html |") || die "Can open ls -1 $check/*.html |: $!\n"; $Dir = $check; $Dir .= '/' if(!($Dir =~ /\/$/)); } else { open(CHECK, $check) || die "Can open $check: $!\n"; $Dir = $check =~ /(.*\/)\w+\.html$/; } # put this list into %Modules and @ModuleList while ($line = <CHECK>) { chop($line); $line =~ s/.*\/(\w+\.html)/$1/; # get name from path next if($line =~ /^WWW/); next if($line eq 'sysdep.html'); $Modules{$line} .= ' 1st'; # Define $Modules{$module} push(@ModuleList, $line); # add to ModuleList } } &readModules(shift(@ARGV)); # step 1 # 2. find out in what DLLs these modules reside (eg HTReqMan is in wwwcore) if (@ARGV[0] =~ /@(.*)/) { local($name) = $1; if ($name =~ /\w+/) { if (!open(LIST, $name)) { die "Can't open \"$1\", $!"; } while (<LIST>) { chop; &getDLLs($_); } } else { while (<STDIN>) { chop; &getDLLs($_); } } } else { foreach $source (@ARGV) { &getDLLs($source); } } &printHeader; @ModuleList = sort @ModuleList; @DLLList = sort @DLLList; # 3. scan for funtions in these modules foreach $file (@ModuleList) { &findFunctions($Dir.$file); } @FunctionList = sort @FunctionList; # 4. output sorted by DLL name &printByDLL; foreach $checkDll (@DLLList) { printDLLName($checkDll); foreach $func (@FunctionList) { local($source, $nameTag) = split('#', $Functions{$func}); undef($nameTag) if ($nameTag eq ''); local($dll) = $DLLS{$source}; next if($dll ne $checkDll); &numberEach($source, $func, $nameTag); } } # 5. output sorted by module name #&printByModule; #foreach $module (@ModuleList) { # local($dll) = $DLLS{$module}; # printModuleName($module, $dll); # foreach $func (@FunctionList) { # local($source, $nameTag) = split('#', $Functions{$func}); # undef($nameTag) if ($nameTag eq ''); # next if($source ne $module); # &numberEach($source, $func, $nameTag); # } #} # 6. output sorted by function name #&printByFunction; #foreach $func (@FunctionList) { # local($source, $nameTag) = split('#', $Functions{$func}); # undef($nameTag) if ($nameTag eq ''); # local($dll) = $DLLS{$source}; # &numberEach($source, $func, $nameTag, $dll); #} &printFooter; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/makexprt.pl���������������������������������������������������������������������������0100755�0000764�0000144�00000000322�06140003355�015202� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl -ni if (!/^PUBLIC\s/) { print; next; } if (!/(\w*)\W*\(/) { warn "assuming global: ", $_; next; } local($func) = $1; s/$func/EXPORT $func/; s/\*EXPORT/\* EXPORT/; print; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/missing�������������������������������������������������������������������������������0100755�0000764�0000144�00000014213�07142033272�014416� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997 Free Software Foundation, Inc. # Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing - GNU libit 0.0" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/mkinstalldirs�������������������������������������������������������������������������0100755�0000764�0000144�00000001323�07142033272�015623� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman <friedman@prep.ai.mit.edu> # Created: 2025-05-16 # Public domain # $Id: mkinstalldirs,v 1.3 2025/08/02 14:56:58 kahan Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/netmon2tcpdump.pl���������������������������������������������������������������������0100755�0000764�0000144�00000004201�06437044400�016333� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl sub main { local ($input, $output) = @_; local ($line); local ($lineNo) = (0); while (($line = <$input>)) { local ($num, $time, $srcMac, $dstMac, $type, $rest); chop $line; $lineNo++; $line =~ /^(\d+)\s+([\d\.]+)\s+([\dA-F]+)\s+([\dA-F]+)\s+(\w+)\s+(.*)/ || die "IP: No match on line $lineNo: $_.\n"; ($num, $time, $srcMac, $dstMac, $type, $rest) = ($1, $2, $3, $4, $5, $6); if ($type eq 'TCP') { local ($flags, $len, $seqStart, $seqEnd, $ack, $win, $srcPort, $dstPort, $srcIP, $dstIP); $rest =~ /^([A-Z\.]+),\s+len:\s+(\d+),\s+seq:\s*(\d+)-(\d+),\s+ack:\s*(\d+),\s+win:\s*(\d+),\s+src:\s+(\d+)\s+dst:\s+(\d+)\s+([\w\d\.]+)\s+([\w\d\.]+)\s+IP/ || die "TCP: No match on line $lineNo: $_.\n"; ($flags, $len, $seqStart, $seqEnd, $ack, $win, $srcPort, $dstPort, $srcIP, $dstIP) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10); $flags =~ s/\.|A//g; $flags = '.' if ($flags eq ''); print $output "$time $srcIP.$srcPort > $dstIP.$dstPort: $flags"; print $output " $seqStart:$seqEnd(", $seqEnd - $seqStart, ")" if ($seqEnd != $seqStart || $flags =~ /S/); print $output " ack $ack" if ($ack); print $output " win $win" if ($win); print $output "\n"; } elsif ($type == 'ICMP') { local ($message, $whatIsA, $a, $whatIsB, $b, $srcIP, $dstIP); $rest =~ /^([^,]*),\s+(From|To)\s+([\w\d\.]+)\s+(To|From)\s+([\w\d\.]+)\s+([\w\d\.]+)\s+([\w\d\.]+)\s+IP/ || die "ICMP: No match on line $lineNo: $_.\n"; local ($message, $whatIsA, $a, $whatIsB, $b, $srcIP, $dstIP) = ($1, $2, $3, $4, $5, $6, $7); print $output "$time $srcIP > $dstIP: "; if ($message eq 'Echo') { print $output "echo request"; } elsif ($message eq 'Echo Reply') { print $output "echo reply"; } else { die "IP: Don't know how to handle message \"$message\".\n"; } print $output "\n"; $from = ''; $to = ''; } else { die "IP: Don't know how to handle \"$type\".\n"; } } } open(INPUT, "<BIG.www26.robot.netmon.BIG") || die "Can't open input: $!\n"; open(OUTPUT, ">BIG.www26.robot.tcpdump.BIG") || die "Can't open output: $!\n"; main('INPUT', 'OUTPUT'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/splitBigTcpdump.pl��������������������������������������������������������������������0100755�0000764�0000144�00000007141�06437044401�016475� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl -w @Locations = ('BIG'); $InPrefix = 'BIG.www26.msiens.tcpdump.'; @OutTemplates = ('"A1-LH-netscape-10/" . $location . "-ft-" . $run . ".txt"', '"A1-LH-netscape-10/" . $location . "-cv-" . $run . ".txt"', '"J5-LH-iexplore-10/" . $location . "-ft-" . $run . ".txt"', '"J5-LH-iexplore-10/" . $location . "-cv-" . $run . ".txt"', '"J5-LH-netscape-10/" . $location . "-ft-" . $run . ".txt"', '"J5-LH-netscape-10/" . $location . "-cv-" . $run . ".txt"', '"A1-LH-iexplore-10/" . $location . "-ft-" . $run . ".txt"', '"A1-LH-iexplore-10/" . $location . "-cv-" . $run . ".txt"'); @PingChecks = (1, 2, 7, 8, 3, 4, 5, 6); $Runs = 3; #$InPrefix = 'BIG.www26.tcpdump.robot.'; #@OutTemplates = ('"A1-LH-http-11/" . $location . "-ft-" . $run . ".txt"', # '"A1-LH-http-11/" . $location . "-cv-" . $run . ".txt"', # '"J5-LH-http-11/" . $location . "-ft-" . $run . ".txt"', # '"J5-LH-http-11/" . $location . "-cv-" . $run . ".txt"', # '"A1-LH-http-11-pl/" . $location . "-ft-" . $run . ".txt"', # '"A1-LH-http-11-pl/" . $location . "-cv-" . $run . ".txt"', # '"J5-LH-http-11-pl/" . $location . "-ft-" . $run . ".txt"', # '"J5-LH-http-11-pl/" . $location . "-cv-" . $run . ".txt"', # '"A1-LH-http-11-pl-zip/" . $location . "-ft-" . $run . ".txt"', # '"A1-LH-http-11-pl-zip/" . $location . "-cv-" . $run . ".txt"', # '"J5-LH-http-11-pl-zip/" . $location . "-ft-" . $run . ".txt"', # '"J5-LH-http-11-pl-zip/" . $location . "-cv-" . $run . ".txt"'); #@PingChecks = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); #$Runs = 5; $Client = 'BIG'; $Server = 'www26'; sub main { local ($location); foreach $location (@Locations) { # print "location: \"$location\".\n"; local ($input) = $InPrefix . $location; open (INPUT, "<$input") || die "Can't open \"$input\": $!.\n"; local ($lineNo, $pass) = (0, ''); local ($run); for ($run = 1; $run <= $Runs; $run++) { # print "run: \"$run\".\n"; local ($outTemplate, $pingCheck); local (@pingChecks) = @PingChecks; foreach $outTemplate (@OutTemplates) { $pingCheck = shift(@pingChecks); # print "pre - outTemplate: \"$outTemplate\".\n"; local ($outFile, $otherFile); $outFile = eval $outTemplate; $otherFile = $outFile . '.other'; print "$input:$lineNo: starting \"$outFile\"\n"; open (OUTFILE, ">$outFile") || die "Can't open \"$outFile\": $!.\n"; open (OTHERFILE, ">$otherFile") || die "Can't open \"$otherFile\": $!.\n"; local ($ignoreOthers, $echo) = (1, 0); goto havePass if ($pass ne ''); while (<INPUT>) { $lineNo++; havePass: if ($pass ne '') { $_ = $pass; $pass = ''; } /[\d.]+\s+(\S+)\s>\s(\S+):/; local ($from, $to) = ($1, $2); if (!defined $from || !defined $to) { warn "$input:$lineNo: couldn't parse \"$_\".\n" if (!/ arp /); $from = '-' if (!defined $from); $to = '-' if (!defined $to); } if (($from =~ /$Client/ && $to =~ /$Server/) || ($from =~ /$Server/ && $to =~ /$Client/)) { if (/echo/) { if (/echo request/) { $ignoreOthers = 1; } else { $echo++; #print "$input:$lineNo: echo: $echo pingCheck: $pingCheck.\n"; last if ($echo == $pingCheck); } } else { if ($echo) { if (/: R /) { warn "$input:$lineNo: reset ignored.\n"; } elsif (/: S /) { warn "$input:$lineNo: not enough pings.\n"; $pass = $_; last; } } else { $ignoreOthers = 0; print OUTFILE $_; } } } else { if (!$ignoreOthers) { print OTHERFILE $_; } } } close OUTFILE; close OTHERFILE; } } close INPUT; } } &main; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/tcpdump2xplot.pl����������������������������������������������������������������������0100755�0000764�0000144�00000026112�06302364502�016205� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl # -*- Perl -*- # # Copyright 1996 Massachusetts Institute of Technology # # Permission to use, copy, modify, and distribute this software and # its documentation for any purpose and without fee is hereby # granted, provided that both the above copyright notice and this # permission notice appear in all copies, that both the above # copyright notice and this permission notice appear in all # supporting documentation, and that the name of M.I.T. not be used # in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. M.I.T. makes # no representations about the suitability of this software for any # purpose. It is provided "as is" without express or implied # warranty. # # THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS # ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT # SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # defaults: $Plotwindow = 0; $PlotTemplate = '$from[0].":".$fromPort."-".$to[0].":".$toPort.".xplot"'; $Tcpdump = 'STDIN'; $Usage_first = 1; $BreakOnSyns = 0; $EndOnFins = 0; $Quiet = 0; $Cumulative = 0; $TimeConvert = 0; $ForceRelative = 0; $FinThreshold = 1; # seconds # other initializations #$Packets; #$Bytes; #$StartTime = 0; #$LastTime; #$State; # 'synSent', 'synRecvd', 'synackSent', 'synackRecvd', 'finSent', 'finRecvd', 'finackSent', 'finackRecvd' #$ListFile; sub usage { return if (!$Usage_first); $Usage_first = 0; print <<"END_OF_USAGE"; Usage: $0 [-w] [-s] [-c] [-plot[filename]] [-list[filename]] [-?] [-help] -w: plot window. -s: break up conversations on syns. -f: ignore socket activity after a fin (until socket is re-used) -c: cumulative - adds all data coming from a server -plot[filename]: plot packets in <filename>. The <filename> may be built out of $from (host and port), $fromHost, $fromPort, $from[0..n] for the segments of the domain name. '$from.".xplot"' would be abc.def.com:1234. The corresponding fields exist for the to field. default: '$from[0].":".$fromPort."-".$to[0].":".$toPort.".xplot"'. -list[filename]: output the list of generated plot files to filename. -r: relative sequence numbers. -t: time convert - insure that time is in decimal number of seconds. -q: quiet - no visible output. -?/-help: this message. END_OF_USAGE } sub ReadArg { local($arg) = substr(@_[0], 1); return 0 if ($arg eq 'e'); if ($arg eq '?' || $arg eq 'help') { &usage; exit(0); } elsif ($arg eq 'w') { $Plotwindow = 1; } elsif ($arg eq 's') { $BreakOnSyns = 1; } elsif ($arg =~ /^f(\d*)/) { $EndOnFins = 1; $FinThreshold = $1 if ($1 ne ''); } elsif ($arg eq 'c') { $Cumulative = 1; } elsif (substr($arg, 0, 4) eq 'plot') { $PlotTemplate = substr($arg, 4); } elsif (substr($arg, 0, 4) eq 'list') { $ListFile = substr($arg, 4); open($ListFile, ">$ListFile") || die "error opening \"$ListFile\" for writing: $!\n"; } elsif ($arg eq 't') { $TimeConvert = 1; } elsif ($arg eq 'r') { $ForceRelative = 1; } elsif ($arg eq 'q') { $Quiet = 1; } else { &usage(); print "unknown argument \"$arg\".\n"; } return 1; } sub justSeconds { local($time) = @_; return $time if (!($time =~ /:/)); local($hr, $mn, $sec) = split(':', $time, 3); return $hr*3600 + $mn*60 + $sec; } sub subTimes { local($big, $little) = @_; $big = &justSeconds($big); $little = &justSeconds($little); return ($big - $little); } sub newConversation { local($from, $to, $time) = @_; # create variables for PlotTemplate $from =~ /(.*)\.(\d+)$/; local($fromHost, $fromPort) = ($1, $2); local(@from) = split('\.', $fromHost); $to =~ /(.*)\.(\d+)$/; local($toHost, $toPort) = ($1, $2); local(@to) = split('\.', $toHost); # create Xplot file from template $XplotName{$from} = eval($PlotTemplate); open($from, ">$XplotName{$from}") || die "error opening \"$from\" for writing: $!\n"; print $from "timeval signed\ntitle\n$from-->$to\n"; # initialize conversation $To{$from} = $to; $LastSendSeq{$from.'-'.$to} = -1; $StartTime{$from} = $time; push(@Froms, $from); $AckOffset{$from} = $SeqOffset{$from} = 0; $Ignored{$from.'-'.$to} = 0; } sub closeOut { local($from) = @_; print $from "go\n"; $TotalPackets += $Packets{$from}; $TotalBytes += $Bytes{$from}; print "$from: $Packets{$from} packets $Bytes{$from} bytes took ", &subTimes($LastTime{$from}, $StartTime{$from}), "\n" if (!Quiet); $Mode{$from} = 'client' if (!defined($Mode{$from})); # added to handle bogus NT netmon dumps print $ListFile "$from $To{$from} $Mode{$from} $XplotName{$from} $Packets{$from} $Bytes{$from} ", &subTimes($LastTime{$from}, $StartTime{$from}), ' ', $Bytes{$from}/($Bytes{$from} + $Packets{$from}*40), "\n" if $ListFile; $MaxLast = $LastTime{$from} if (!defined($MaxLast) || $LastTime{$from} > $MaxLast); $MinFirst = $StartTime{$from} if (!defined($MinFirst) || $StartTime{$from} < $MinFirst); } sub clearOut { local($from, $to) = @_; # these attributes are specific to a conversation delete $LastSendSeq{$from.'-'.$to}; delete $FirstSeq{$from.'-'.$to}; delete $LastAckTime{$from.'-'.$to}; delete $LastAckSeq{$from.'-'.$to}; delete $LastWind{$from.'-'.$to}; # these stats are aggregated for all converstaions on a server delete $Packets{$from}; delete $Bytes{$from}; delete $LastTime{$from}; delete $StartTime{$from}; delete $Mode{$from}; delete $Served{$from}; # not needed now because server is never cleared delete $To{$from}; delete $XplotName{$from}; delete $Ignored{$from.'-'.$to}; } sub removeFrom { local($from) = @_; local($i); foreach $i ($[ .. $#Froms) { if ($Froms[$i] eq $from) { splice(@Froms, $i, 1); return 1; } } return 0; } while (@ARGV[0] =~ /^-/ && &ReadArg(shift(@ARGV))) {} if (($inputFile = shift(@ARGV))) { open (TCPDUMP, "<$inputFile") || die "error opening \"$inputFile\" for reading: $!\n"; $Tcpdump = 'TCPDUMP'; } for ($lineNo = 1; <$Tcpdump>; $lineNo++) { local($ackIsZero) = (0); chop; split(/ /); $time = $_[0]; $from = $_[1]; $to = $_[3]; chop($to); # strip off colon $flags = $_[4]; last if (/\d+\s+packets/); if ($_[2] ne '>') { print stderr "tcpdump2xplot: Malformed entry in dump file $inputFile:$lineNo \"$_\"\n"; next; } $time = &justSeconds($time) if ($TimeConvert); &newConversation($from, $to, $time) if (!(defined($StartTime{$from}))); if ($flags =~ /S/) { if ($Mode{$from} eq 'client') { # re-used client socket's syn if ($BreakOnSyns) { &closeOut($from); &removeFrom($from); &clearOut($from, $to); &newConversation($from, $to, $time); $Mode{$from} = 'client'; } } elsif ($Mode{$from} eq 'server') { # server's syn $Served{$from}++; } else { # client socket's syn $Mode{$from} = 'client'; $Mode{$to} = 'server'; } } if ($flags =~ /F/ && $Mode{$from} eq 'client' && $EndOnFins && !$Ignored{$from.'-'.$to}) { local ($dif) = $time - $LastTime{$from}; if ($dif > $FinThreshold) { print stderr "tcpdump2xplot: delayed F ($dif seconds) in dump file $inputFile:$lineNo \"$_\"\n"; } $Ignored{$from.'-'.$to} = 1; } next if ($Ignored{$from.'-'.$to} || $Ignored{$to.'-'.$from}); $LastTime{$from} = $time; $Packets{$from}++; if (/$flags ([0-9]*):([0-9]*)\(([0-9]*)\) /) { $LastSendSeq{$from.'-'.$to} = $sendseq = $1; $sendseqlast = $2; $datalength = $3; $Bytes{$from} += $3; if (!defined $FirstSeq{$from.'-'.$to}) { if ($ForceRelative) { $LastSendSeq{$from.'-'.$to} = $sendseq = 0; $sendseqlast = $2 - $1; $FirstSeq{$from.'-'.$to} = 0; $ackIsZero = 1; } else { $FirstSeq{$from.'-'.$to} = $1; } } } else { $sendseq = $LastSendSeq{$from.'-'.$to}; $sendseqlast = $LastSendSeq{$from.'-'.$to}; } if (/win ([0-9]*)/) { # remove space in "]*) /" to handle win <num><EOL> - EGP $window = $1; } else { $window = -1; } if (/ack ([0-9]*) /) { $ack = $ackIsZero ? 0 : $1; } else { $ack = -1; } if ($Cumulative) { # adjust sequence number to be relative to last ack. $sendseqlast -= $sendseq - $SeqOffset{$from}; $sendseq = $SeqOffset{$from}; $SeqOffset{$from} = $sendseqlast; } else { # adjust sequence number to be relative to start of conversation. $sendseq -= $FirstSeq{$from.'-'.$to}; $sendseqlast -= $FirstSeq{$from.'-'.$to}; } print $from "darrow $time $sendseq\n"; print $from "uarrow $time $sendseqlast\n"; print $from "line $time $sendseq $time $sendseqlast\n"; if ($ack != -1) { $winend = $ack + $window; if (defined $LastAckTime{$to.'-'.$from}) { local($lastAckSeq, $ackSeq) = ($LastAckSeq{$to.'-'.$from}, $ack); if ($Cumulative) { # adjust sequence number to be relative to last ack. $ackSeq -= $lastAckSeq - $AckOffset{$to}; $lastAckSeq = $AckOffset{$to}; $AckOffset{$to} = $ackSeq; } else { # adjust sequence number to be relative to start of conversation. $lastAckSeq -= $FirstSeq{$to.'-'.$from}; $ackSeq -= $FirstSeq{$to.'-'.$from}; } print $to "line $LastAckTime{$to.'-'.$from} $lastAckSeq "; print $to "$time $lastAckSeq\n"; if ($LastAckSeq{$to.'-'.$from} != $ack) { print $to "line $time $lastAckSeq $time $ackSeq\n"; } else { print $to "dtick $time $ackSeq\n"; } if ($Plotwindow) { local($lastWinSeq, $winSeq) = ($LastWind{$to.'-'.$from}, $winend); if ($Cumulative) { # adjust sequence number to be relative to last ack. $winSeq -= $lastWinSeq - $AckOffset{$to}; $lastWinSeq = $AckOffset{$to}; } else { # adjust sequence number to be relative to start of conversation. $lastWinSeq -= $FirstSeq{$to.'-'.$from}; $winSeq -= $FirstSeq{$to.'-'.$from}; } print $to "line $LastAckTime{$to.'-'.$from} $lastWinSeq "; print $to "$time $lastWinSeq\n"; if ($LastWind{$to.'-'.$from} != $winend) { print $to "line $time $lastWinSeq $time $winSeq\n"; } else { print $to "utick $time $winSeq\n"; } } } $LastAckTime{$to.'-'.$from} = $time; $LastAckSeq{$to.'-'.$from} = $ack; $LastWind{$to.'-'.$from} = $winend; } } foreach $from (@Froms) { &closeOut($from); } print "summary: $TotalPackets packets $TotalBytes bytes took ", &subTimes($MaxLast, $MinFirst), " efficiency: ", $TotalBytes/($TotalBytes + $TotalPackets*40), "\n" if (!Queit); print $ListFile "summary: $TotalPackets $TotalBytes ", &subTimes($MaxLast, $MinFirst), " ", $TotalBytes/($TotalBytes + $TotalPackets*40), "\n" if ($ListFile); close($ListFile) if ($ListFile); exit 0; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/winConfigure.pl�����������������������������������������������������������������������0100755�0000764�0000144�00000007370�06533020641�016023� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/perl # # syntax: winConfigure.pl <top directory> # # EGP May 26 98 # my $top = shift; $top =~ s/\/$//; my $arg0 = $0; $arg0 =~ s/\/[^\/]+$//; (defined $top) || ($top = '.'); &checkDir($top); sub parseMakefile { my $dir = shift; my $defs = shift; my $file = $dir.'/Makefile.am'; local *FILE; open(FILE, "< $file") || die "can't open \"$file\": $!"; my $continuation = ''; # lines ending in a \\ while (<FILE>) { my $line = $_; $line =~ s/#.*//; my $fullLine = $continuation.$line; $continuation = ''; ($line =~ s/\s*\\$//) && ($continuation .= $fullLine, next); ($line =~ m/:/) && ($continuation = $fullLine, next); ($fullLine =~ m/:/) && ($line =~ m/^\s+\S+/) && ($continuation = $fullLine,next); # $fullLine =~ s/\n/ /g; # 'cause I can't seem to match "as\ndf"=~m/^.*$/ !!! (&getDef($fullLine, $defs)) && (next); # ($fullLine =~ m/(\S+)\s*=\s*(.+)/) && ($DEFS{$1} = $2, next); # ($fullLine =~ m/(\S+)\s*:\s*(.+)/) && ($RULES{$1} = $2, next); ($line eq "\n") || (warn "what is $file:$.:\"$line\"?\n"); } &getDef($continuation); # ($continuation =~ m/(\S+)\s*=\s*(.+)/) && ($DEFS{$1} = $2); # ($continuation =~ m/(\S+)\s*:\s*(.+)/) && ($RULES{$1} = $2); } sub getDef { my $check = shift; my $defs = shift; chomp $check; if ($check =~ m/\A(\S+)\s*=/m) { my ($name, $value) = split('=', $check, 2); $name =~ s/\s//g; $value =~ s/\\//g; $value =~ s/\s+/ /g; $value =~ s/^\s//; my @values = split(' ', $value); $$defs{$name} = \@values; return 1; } # now something for rules... someday - EGP if ($check =~ m/\A(\S+)\s*:/m) { return 1; } return 0; } # use makedefs.pl; sub checkDir { my $dir = shift; my (%DEFS); my (%DEPENDENTS, %VERBS); &parseMakefile($dir, \%DEFS); my @subdirs = @{$DEFS{'SUBDIRS'}}; my @builtSources = @{$DEFS{'BUILT_SOURCES'}}; my $built; foreach $built (@{$DEFS{'BUILT_SOURCES'}}) { my $dest = $dir.'/'.$built; my $input = $dest; $input =~ s/\.[^\.\/]*$/.files/; if ($built =~ m/\.def$/) { `perl $arg0/makedefs.pl -headerEXPORTS -d$dir/.. \@$input > $dest`; } else { &htmlToH($dest); } } my $subdir; foreach $subdir (@{$DEFS{'SUBDIRS'}}) { &checkDir($dir.'/'.$subdir); } } sub htmlToH { my $output = shift; my $input = $output; local (*OPEN, *CLOSE, *NL) = (\0, \1, \2); my %transition = ( '_TEXT' => ['','',''], 'html' => ['','',''], 'title' => [' ','',''], 'pre' => [' ','',' '], 'h1' => ['!','!',''], 'h2' => ['.','.',''], 'h3' => ['(',')',''], 'ul' => [' ','',' '], 'li' => ['o ','',' '], ); if ($output =~ m/\.h$/) { $transition{'html'} = ["/*","*/",""]; $transition{'pre'} = ["*/\n","\n/*",""]; } $input =~ s/\.[^\.\/]*$//; $input .= '.html'; (open(INPUT, "< $input")) || (warn "can't open input file \"$input\": $!", return); (open(OUTPUT, "> $output")) || (warn "can't open output file \"$output\": $!", return); my $contents = join('', <INPUT>); my $inTag = 0; my $tag = ''; my $elem; foreach $elem (split('[<>]', $contents)) { if ($inTag) { # print OUTPUT ${$transition{$tag}}[$CLOSE] if (defined $transition{$tag}); ($close, $tag, $space, $rest) = $elem =~ m/(\/?)(\S+)(\s*)(.*)/si; $tag =~ tr/A-Z/a-z/; if ($close eq '/') { print OUTPUT $ {$transition{$tag}}[$CLOSE] if (defined $transition{$tag}); } else { print OUTPUT $ {$transition{$tag}}[$OPEN] if (defined $transition{$tag}); } } else { (defined $transition{$tag}) && ($elem =~ s/\n/"\n".$ {$transition{$tag}}[$NL]/ge); $elem =~ s/\&lt;/</g; $elem =~ s/\&gt;/>/g; $elem =~ s/\&amp;/&/g; print OUTPUT $elem; } $inTag ^= 1; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/config/Makefile.in���������������������������������������������������������������������������0100644�0000764�0000144�00000013676�07405520524�015103� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ PERL := $(wildcard *.pl) SRC := $(wildcard *.c) AUTOMAKE_OPTIONS = foreign EXTRA_DIST = config.guess config.sub install-sh mkinstalldirs missing ltconfig ltmain.sh $(PERL) $(SRC) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in config.guess config.sub \ install-sh ltconfig ltmain.sh missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign config/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = config distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign config/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������libwww/modules/�������������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520565�013234� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/CVS/���������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517414�013666� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/CVS/Root�����������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517414�014532� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/CVS/Repository�����������������������������������������������������������������������0100644�0000764�0000144�00000000017�07405517414�015763� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/CVS/Entries��������������������������������������������������������������������������0100644�0000764�0000144�00000000131�07405517414�015212� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Mon Apr 12 20:27:20 1999// /Makefile.am/1.1/Sun Feb 21 23:56:18 1999// D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/CVS/Entries.Log����������������������������������������������������������������������0100644�0000764�0000144�00000000032�07405517416�015734� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/expat//// A D/md5//// ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/�������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520566�014356� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/CVS/���������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517414�015007� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/CVS/Root�����������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517414�015653� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/CVS/Repository�����������������������������������������������������������������0100644�0000764�0000144�00000000025�07405517414�017103� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/CVS/Entries��������������������������������������������������������������������0100644�0000764�0000144�00000000337�07405517414�016343� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Mon Apr 12 20:27:20 1999// /MPL-1_0.html/1.1/Sun Feb 21 23:56:18 1999// /Makefile.am/1.1/Sun Feb 21 23:56:18 1999// /expat.html/1.3/Mon Aug 28 08:52:00 2000// /gplelect.html/1.1/Sun Feb 21 23:56:18 1999// D �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/CVS/Entries.Log����������������������������������������������������������������0100644�0000764�0000144�00000000040�07405517415�017053� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A D/xmlparse//// A D/xmltok//// ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/����������������������������������������������������������������������0040755�0000764�0000144�00000000000�07422617431�016206� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/CVS/������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517415�016643� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/CVS/Root��������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517414�017506� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/CVS/Repository��������������������������������������������������������0100644�0000764�0000144�00000000036�07405517414�020740� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/CVS/Entries�����������������������������������������������������������0100644�0000764�0000144�00000000407�07405517415�020175� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Mon Feb 22 01:04:24 1999// /Makefile.am/1.6/Wed Jun 14 08:53:42 2000// /hashtable.c/1.2/Wed Jun 14 08:53:42 2000// /hashtable.h/1.2/Wed Jun 14 08:53:42 2000// /xmlparse.c/1.4/Mon Aug 28 08:52:01 2000// /xmlparse.h/1.3/Mon Aug 28 08:52:01 2000// D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/Makefile��������������������������������������������������������������0100644�0000764�0000144�00000026351�07405520566�017655� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ LDFLAGS = -version-info "1:0:1" CFLAGS = -g -O2 -DXML_NS lib_LTLIBRARIES = libxmlparse.la EXTRA_LTLIBRARIES = libxmlparse.la INCLUDES = -I$(srcdir)/../xmltok libxmlparse_la_SOURCES = hashtable.h hashtable.c xmlparse.c libxmlparse_la_LDFLAGS = -rpath $(libdir) pkginclude_HEADERS = xmlparse.h mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../../.. CPPFLAGS = LIBS = -ldl libxmlparse_la_LIBADD = libxmlparse_la_OBJECTS = hashtable.lo xmlparse.lo COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(pkginclude_HEADERS) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/hashtable.P .deps/xmlparse.P SOURCES = $(libxmlparse_la_SOURCES) OBJECTS = $(libxmlparse_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/expat/xmlparse/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libxmlparse.la: $(libxmlparse_la_OBJECTS) $(libxmlparse_la_DEPENDENCIES) $(LINK) $(libxmlparse_la_LDFLAGS) $(libxmlparse_la_OBJECTS) $(libxmlparse_la_LIBADD) $(LIBS) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgincludedir) @list='$(pkginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p"; \ $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) list='$(pkginclude_HEADERS)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkgincludedir)/$$p; \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules/expat/xmlparse distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/expat/xmlparse/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-pkgincludeHEADERS install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(pkgincludedir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool uninstall-pkgincludeHEADERS \ install-pkgincludeHEADERS tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/.cvsignore������������������������������������������������������������0100644�0000764�0000144�00000000033�06664126430�020200� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.deps Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/Makefile.am�����������������������������������������������������������0100644�0000764�0000144�00000000566�07121644026�020242� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. LDFLAGS = -version-info "1:0:1" CFLAGS = @CFLAGS@ -DXML_NS lib_LTLIBRARIES = \ @XMLPARSE@ EXTRA_LTLIBRARIES = \ libxmlparse.la INCLUDES = -I$(srcdir)/../xmltok libxmlparse_la_SOURCES = \ hashtable.h \ hashtable.c \ xmlparse.c libxmlparse_la_LDFLAGS = -rpath $(libdir) pkginclude_HEADERS = \ xmlparse.h ������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/hashtable.c�����������������������������������������������������������0100644�0000764�0000144�00000007023�07121644026�020300� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in csompliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #include "xmldef.h" #ifdef XML_UNICODE_WCHAR_T #ifndef XML_UNICODE #define XML_UNICODE #endif #endif #include "hashtable.h" #define INIT_SIZE 64 static int keyeq(KEY s1, KEY s2) { for (; *s1 == *s2; s1++, s2++) if (*s1 == 0) return 1; return 0; } static unsigned long hash(KEY s) { unsigned long h = 0; while (*s) h = (h << 5) + h + (unsigned char)*s++; return h; } NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize) { size_t i; if (table->size == 0) { if (!createSize) return 0; table->v = calloc(INIT_SIZE, sizeof(NAMED *)); if (!table->v) return 0; table->size = INIT_SIZE; table->usedLim = INIT_SIZE / 2; i = hash(name) & (table->size - 1); } else { unsigned long h = hash(name); for (i = h & (table->size - 1); table->v[i]; i == 0 ? i = table->size - 1 : --i) { if (keyeq(name, table->v[i]->name)) return table->v[i]; } if (!createSize) return 0; if (table->used == table->usedLim) { /* check for overflow */ size_t newSize = table->size * 2; NAMED **newV = calloc(newSize, sizeof(NAMED *)); if (!newV) return 0; for (i = 0; i < table->size; i++) if (table->v[i]) { size_t j; for (j = hash(table->v[i]->name) & (newSize - 1); newV[j]; j == 0 ? j = newSize - 1 : --j) ; newV[j] = table->v[i]; } free(table->v); table->v = newV; table->size = newSize; table->usedLim = newSize/2; for (i = h & (table->size - 1); table->v[i]; i == 0 ? i = table->size - 1 : --i) ; } } table->v[i] = calloc(1, createSize); if (!table->v[i]) return 0; table->v[i]->name = name; (table->used)++; return table->v[i]; } void hashTableDestroy(HASH_TABLE *table) { size_t i; for (i = 0; i < table->size; i++) { NAMED *p = table->v[i]; if (p) free(p); } free(table->v); } void hashTableInit(HASH_TABLE *p) { p->size = 0; p->usedLim = 0; p->used = 0; p->v = 0; } void hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) { iter->p = table->v; iter->end = iter->p + table->size; } NAMED *hashTableIterNext(HASH_TABLE_ITER *iter) { while (iter->p != iter->end) { NAMED *tem = *(iter->p)++; if (tem) return tem; } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/hashtable.h�����������������������������������������������������������0100644�0000764�0000144�00000003724�07121644026�020311� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #include <stddef.h> #ifdef XML_UNICODE #ifdef XML_UNICODE_WCHAR_T typedef const wchar_t *KEY; #else /* not XML_UNICODE_WCHAR_T */ typedef const unsigned short *KEY; #endif /* not XML_UNICODE_WCHAR_T */ #else /* not XML_UNICODE */ typedef const char *KEY; #endif /* not XML_UNICODE */ typedef struct { KEY name; } NAMED; typedef struct { NAMED **v; size_t size; size_t used; size_t usedLim; } HASH_TABLE; NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize); void hashTableInit(HASH_TABLE *); void hashTableDestroy(HASH_TABLE *); typedef struct { NAMED **p; NAMED **end; } HASH_TABLE_ITER; void hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); NAMED *hashTableIterNext(HASH_TABLE_ITER *); ��������������������������������������������libwww/modules/expat/xmlparse/xmlparse.c������������������������������������������������������������0100644�0000764�0000144�00000310552�07152424061�020203� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #include "xmldef.h" #include "xmlparse.h" #ifdef XML_UNICODE #define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX #define XmlConvert XmlUtf16Convert #define XmlGetInternalEncoding XmlGetUtf16InternalEncoding #define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS #define XmlEncode XmlUtf16Encode #define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((unsigned long)s) & 1)) typedef unsigned short ICHAR; #else #define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX #define XmlConvert XmlUtf8Convert #define XmlGetInternalEncoding XmlGetUtf8InternalEncoding #define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS #define XmlEncode XmlUtf8Encode #define MUST_CONVERT(enc, s) (!(enc)->isUtf8) typedef char ICHAR; #endif #ifndef XML_NS #define XmlInitEncodingNS XmlInitEncoding #define XmlInitUnknownEncodingNS XmlInitUnknownEncoding #undef XmlGetInternalEncodingNS #define XmlGetInternalEncodingNS XmlGetInternalEncoding #define XmlParseXmlDeclNS XmlParseXmlDecl #endif #ifdef XML_UNICODE_WCHAR_T #define XML_T(x) L ## x #else #define XML_T(x) x #endif /* Round up n to be a multiple of sz, where sz is a power of 2. */ #define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) #include "xmltok.h" #include "xmlrole.h" #include "hashtable.h" #define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */ #define INIT_DATA_BUF_SIZE 1024 #define INIT_ATTS_SIZE 16 #define INIT_BLOCK_SIZE 1024 #define INIT_BUFFER_SIZE 1024 #define EXPAND_SPARE 24 typedef struct binding { struct prefix *prefix; struct binding *nextTagBinding; struct binding *prevPrefixBinding; const struct attribute_id *attId; XML_Char *uri; int uriLen; int uriAlloc; } BINDING; typedef struct prefix { const XML_Char *name; BINDING *binding; } PREFIX; typedef struct { const XML_Char *str; const XML_Char *localPart; int uriLen; } TAG_NAME; typedef struct tag { struct tag *parent; const char *rawName; int rawNameLength; TAG_NAME name; char *buf; char *bufEnd; BINDING *bindings; } TAG; typedef struct { const XML_Char *name; const XML_Char *textPtr; int textLen; const XML_Char *systemId; const XML_Char *base; const XML_Char *publicId; const XML_Char *notation; char open; } ENTITY; typedef struct block { struct block *next; int size; XML_Char s[1]; } BLOCK; typedef struct { BLOCK *blocks; BLOCK *freeBlocks; const XML_Char *end; XML_Char *ptr; XML_Char *start; } STRING_POOL; /* The XML_Char before the name is used to determine whether an attribute has been specified. */ typedef struct attribute_id { XML_Char *name; PREFIX *prefix; char maybeTokenized; char xmlns; } ATTRIBUTE_ID; typedef struct { const ATTRIBUTE_ID *id; char isCdata; const XML_Char *value; } DEFAULT_ATTRIBUTE; typedef struct { const XML_Char *name; PREFIX *prefix; int nDefaultAtts; int allocDefaultAtts; DEFAULT_ATTRIBUTE *defaultAtts; } ELEMENT_TYPE; typedef struct { HASH_TABLE generalEntities; HASH_TABLE elementTypes; HASH_TABLE attributeIds; HASH_TABLE prefixes; STRING_POOL pool; int complete; int standalone; #ifdef XML_DTD HASH_TABLE paramEntities; #endif /* XML_DTD */ PREFIX defaultPrefix; } DTD; typedef struct open_internal_entity { const char *internalEventPtr; const char *internalEventEndPtr; struct open_internal_entity *next; ENTITY *entity; } OPEN_INTERNAL_ENTITY; typedef enum XML_Error Processor(XML_Parser parser, const char *start, const char *end, const char **endPtr); static Processor prologProcessor; static Processor prologInitProcessor; static Processor contentProcessor; static Processor cdataSectionProcessor; #ifdef XML_DTD static Processor ignoreSectionProcessor; #endif /* XML_DTD */ static Processor epilogProcessor; static Processor errorProcessor; static Processor externalEntityInitProcessor; static Processor externalEntityInitProcessor2; static Processor externalEntityInitProcessor3; static Processor externalEntityContentProcessor; static enum XML_Error handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName); static enum XML_Error processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *, const char *); static enum XML_Error initializeEncoding(XML_Parser parser); static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr); static enum XML_Error processInternalParamEntity(XML_Parser parser, ENTITY *entity); static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *start, const char *end, const char **endPtr); static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr); #ifdef XML_DTD static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr); #endif /* XML_DTD */ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, const char *s, TAG_NAME *tagNamePtr, BINDING **bindingsPtr); static int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr); static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, int isCdata, const XML_Char *dfltValue); static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *, STRING_POOL *); static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *, STRING_POOL *); static ATTRIBUTE_ID * getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static void reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static const XML_Char *getContext(XML_Parser parser); static int setContext(XML_Parser parser, const XML_Char *context); static void normalizePublicId(XML_Char *s); static int dtdInit(DTD *); static void dtdDestroy(DTD *); static int dtdCopy(DTD *newDtd, const DTD *oldDtd); static int copyEntityTable(HASH_TABLE *, STRING_POOL *, const HASH_TABLE *); #ifdef XML_DTD static void dtdSwap(DTD *, DTD *); #endif /* XML_DTD */ static void poolInit(STRING_POOL *); static void poolClear(STRING_POOL *); static void poolDestroy(STRING_POOL *); static XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end); static XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end); static int poolGrow(STRING_POOL *pool); static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s); static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n); #define poolStart(pool) ((pool)->start) #define poolEnd(pool) ((pool)->ptr) #define poolLength(pool) ((pool)->ptr - (pool)->start) #define poolChop(pool) ((void)--(pool->ptr)) #define poolLastChar(pool) (((pool)->ptr)[-1]) #define poolDiscard(pool) ((pool)->ptr = (pool)->start) #define poolFinish(pool) ((pool)->start = (pool)->ptr) #define poolAppendChar(pool, c) \ (((pool)->ptr == (pool)->end && !poolGrow(pool)) \ ? 0 \ : ((*((pool)->ptr)++ = c), 1)) typedef struct { /* The first member must be userData so that the XML_GetUserData macro works. */ void *m_userData; void *m_handlerArg; char *m_buffer; /* first character to be parsed */ const char *m_bufferPtr; /* past last character to be parsed */ char *m_bufferEnd; /* allocated end of buffer */ const char *m_bufferLim; long m_parseEndByteIndex; const char *m_parseEndPtr; XML_Char *m_dataBuf; XML_Char *m_dataBufEnd; XML_StartElementHandler m_startElementHandler; XML_EndElementHandler m_endElementHandler; XML_CharacterDataHandler m_characterDataHandler; XML_ProcessingInstructionHandler m_processingInstructionHandler; XML_CommentHandler m_commentHandler; XML_StartCdataSectionHandler m_startCdataSectionHandler; XML_EndCdataSectionHandler m_endCdataSectionHandler; XML_DefaultHandler m_defaultHandler; XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; XML_NotationDeclHandler m_notationDeclHandler; XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; XML_NotStandaloneHandler m_notStandaloneHandler; XML_ExternalEntityRefHandler m_externalEntityRefHandler; void *m_externalEntityRefHandlerArg; XML_UnknownEncodingHandler m_unknownEncodingHandler; const ENCODING *m_encoding; INIT_ENCODING m_initEncoding; const ENCODING *m_internalEncoding; const XML_Char *m_protocolEncodingName; int m_ns; void *m_unknownEncodingMem; void *m_unknownEncodingData; void *m_unknownEncodingHandlerData; void (*m_unknownEncodingRelease)(void *); PROLOG_STATE m_prologState; Processor *m_processor; enum XML_Error m_errorCode; const char *m_eventPtr; const char *m_eventEndPtr; const char *m_positionPtr; OPEN_INTERNAL_ENTITY *m_openInternalEntities; int m_defaultExpandInternalEntities; int m_tagLevel; ENTITY *m_declEntity; const XML_Char *m_declNotationName; const XML_Char *m_declNotationPublicId; ELEMENT_TYPE *m_declElementType; ATTRIBUTE_ID *m_declAttributeId; char m_declAttributeIsCdata; DTD m_dtd; const XML_Char *m_curBase; TAG *m_tagStack; TAG *m_freeTagList; BINDING *m_inheritedBindings; BINDING *m_freeBindingList; int m_attsSize; int m_nSpecifiedAtts; ATTRIBUTE *m_atts; POSITION m_position; STRING_POOL m_tempPool; STRING_POOL m_temp2Pool; char *m_groupConnector; unsigned m_groupSize; int m_hadExternalDoctype; XML_Char m_namespaceSeparator; #ifdef XML_DTD enum XML_ParamEntityParsing m_paramEntityParsing; XML_Parser m_parentParser; #endif } Parser; #define userData (((Parser *)parser)->m_userData) #define handlerArg (((Parser *)parser)->m_handlerArg) #define startElementHandler (((Parser *)parser)->m_startElementHandler) #define endElementHandler (((Parser *)parser)->m_endElementHandler) #define characterDataHandler (((Parser *)parser)->m_characterDataHandler) #define processingInstructionHandler (((Parser *)parser)->m_processingInstructionHandler) #define commentHandler (((Parser *)parser)->m_commentHandler) #define startCdataSectionHandler (((Parser *)parser)->m_startCdataSectionHandler) #define endCdataSectionHandler (((Parser *)parser)->m_endCdataSectionHandler) #define defaultHandler (((Parser *)parser)->m_defaultHandler) #define startDoctypeDeclHandler (((Parser *)parser)->m_startDoctypeDeclHandler) #define endDoctypeDeclHandler (((Parser *)parser)->m_endDoctypeDeclHandler) #define unparsedEntityDeclHandler (((Parser *)parser)->m_unparsedEntityDeclHandler) #define notationDeclHandler (((Parser *)parser)->m_notationDeclHandler) #define startNamespaceDeclHandler (((Parser *)parser)->m_startNamespaceDeclHandler) #define endNamespaceDeclHandler (((Parser *)parser)->m_endNamespaceDeclHandler) #define notStandaloneHandler (((Parser *)parser)->m_notStandaloneHandler) #define externalEntityRefHandler (((Parser *)parser)->m_externalEntityRefHandler) #define externalEntityRefHandlerArg (((Parser *)parser)->m_externalEntityRefHandlerArg) #define unknownEncodingHandler (((Parser *)parser)->m_unknownEncodingHandler) #define encoding (((Parser *)parser)->m_encoding) #define initEncoding (((Parser *)parser)->m_initEncoding) #define internalEncoding (((Parser *)parser)->m_internalEncoding) #define unknownEncodingMem (((Parser *)parser)->m_unknownEncodingMem) #define unknownEncodingData (((Parser *)parser)->m_unknownEncodingData) #define unknownEncodingHandlerData \ (((Parser *)parser)->m_unknownEncodingHandlerData) #define unknownEncodingRelease (((Parser *)parser)->m_unknownEncodingRelease) #define protocolEncodingName (((Parser *)parser)->m_protocolEncodingName) #define ns (((Parser *)parser)->m_ns) #define prologState (((Parser *)parser)->m_prologState) #define processor (((Parser *)parser)->m_processor) #define errorCode (((Parser *)parser)->m_errorCode) #define eventPtr (((Parser *)parser)->m_eventPtr) #define eventEndPtr (((Parser *)parser)->m_eventEndPtr) #define positionPtr (((Parser *)parser)->m_positionPtr) #define position (((Parser *)parser)->m_position) #define openInternalEntities (((Parser *)parser)->m_openInternalEntities) #define defaultExpandInternalEntities (((Parser *)parser)->m_defaultExpandInternalEntities) #define tagLevel (((Parser *)parser)->m_tagLevel) #define buffer (((Parser *)parser)->m_buffer) #define bufferPtr (((Parser *)parser)->m_bufferPtr) #define bufferEnd (((Parser *)parser)->m_bufferEnd) #define parseEndByteIndex (((Parser *)parser)->m_parseEndByteIndex) #define parseEndPtr (((Parser *)parser)->m_parseEndPtr) #define bufferLim (((Parser *)parser)->m_bufferLim) #define dataBuf (((Parser *)parser)->m_dataBuf) #define dataBufEnd (((Parser *)parser)->m_dataBufEnd) #define dtd (((Parser *)parser)->m_dtd) #define curBase (((Parser *)parser)->m_curBase) #define declEntity (((Parser *)parser)->m_declEntity) #define declNotationName (((Parser *)parser)->m_declNotationName) #define declNotationPublicId (((Parser *)parser)->m_declNotationPublicId) #define declElementType (((Parser *)parser)->m_declElementType) #define declAttributeId (((Parser *)parser)->m_declAttributeId) #define declAttributeIsCdata (((Parser *)parser)->m_declAttributeIsCdata) #define freeTagList (((Parser *)parser)->m_freeTagList) #define freeBindingList (((Parser *)parser)->m_freeBindingList) #define inheritedBindings (((Parser *)parser)->m_inheritedBindings) #define tagStack (((Parser *)parser)->m_tagStack) #define atts (((Parser *)parser)->m_atts) #define attsSize (((Parser *)parser)->m_attsSize) #define nSpecifiedAtts (((Parser *)parser)->m_nSpecifiedAtts) #define tempPool (((Parser *)parser)->m_tempPool) #define temp2Pool (((Parser *)parser)->m_temp2Pool) #define groupConnector (((Parser *)parser)->m_groupConnector) #define groupSize (((Parser *)parser)->m_groupSize) #define hadExternalDoctype (((Parser *)parser)->m_hadExternalDoctype) #define namespaceSeparator (((Parser *)parser)->m_namespaceSeparator) #ifdef XML_DTD #define parentParser (((Parser *)parser)->m_parentParser) #define paramEntityParsing (((Parser *)parser)->m_paramEntityParsing) #endif /* XML_DTD */ #ifdef _MSC_VER #ifdef _DEBUG Parser *asParser(XML_Parser parser) { return parser; } #endif #endif XML_Parser XML_ParserCreate(const XML_Char *encodingName) { XML_Parser parser = malloc(sizeof(Parser)); if (!parser) return parser; processor = prologInitProcessor; XmlPrologStateInit(&prologState); userData = 0; handlerArg = 0; startElementHandler = 0; endElementHandler = 0; characterDataHandler = 0; processingInstructionHandler = 0; commentHandler = 0; startCdataSectionHandler = 0; endCdataSectionHandler = 0; defaultHandler = 0; startDoctypeDeclHandler = 0; endDoctypeDeclHandler = 0; unparsedEntityDeclHandler = 0; notationDeclHandler = 0; startNamespaceDeclHandler = 0; endNamespaceDeclHandler = 0; notStandaloneHandler = 0; externalEntityRefHandler = 0; externalEntityRefHandlerArg = parser; unknownEncodingHandler = 0; buffer = 0; bufferPtr = 0; bufferEnd = 0; parseEndByteIndex = 0; parseEndPtr = 0; bufferLim = 0; declElementType = 0; declAttributeId = 0; declEntity = 0; declNotationName = 0; declNotationPublicId = 0; memset(&position, 0, sizeof(POSITION)); errorCode = XML_ERROR_NONE; eventPtr = 0; eventEndPtr = 0; positionPtr = 0; openInternalEntities = 0; tagLevel = 0; tagStack = 0; freeTagList = 0; freeBindingList = 0; inheritedBindings = 0; attsSize = INIT_ATTS_SIZE; atts = malloc(attsSize * sizeof(ATTRIBUTE)); nSpecifiedAtts = 0; dataBuf = malloc(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); groupSize = 0; groupConnector = 0; hadExternalDoctype = 0; unknownEncodingMem = 0; unknownEncodingRelease = 0; unknownEncodingData = 0; unknownEncodingHandlerData = 0; namespaceSeparator = '!'; #ifdef XML_DTD parentParser = 0; paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; #endif ns = 0; poolInit(&tempPool); poolInit(&temp2Pool); protocolEncodingName = encodingName ? poolCopyString(&tempPool, encodingName) : 0; curBase = 0; if (!dtdInit(&dtd) || !atts || !dataBuf || (encodingName && !protocolEncodingName)) { XML_ParserFree(parser); return 0; } dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; XmlInitEncoding(&initEncoding, &encoding, 0); internalEncoding = XmlGetInternalEncoding(); return parser; } XML_Parser XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) { static const XML_Char implicitContext[] = { XML_T('x'), XML_T('m'), XML_T('l'), XML_T('='), XML_T('h'), XML_T('t'), XML_T('t'), XML_T('p'), XML_T(':'), XML_T('/'), XML_T('/'), XML_T('w'), XML_T('w'), XML_T('w'), XML_T('.'), XML_T('w'), XML_T('3'), XML_T('.'), XML_T('o'), XML_T('r'), XML_T('g'), XML_T('/'), XML_T('X'), XML_T('M'), XML_T('L'), XML_T('/'), XML_T('1'), XML_T('9'), XML_T('9'), XML_T('8'), XML_T('/'), XML_T('n'), XML_T('a'), XML_T('m'), XML_T('e'), XML_T('s'), XML_T('p'), XML_T('a'), XML_T('c'), XML_T('e'), XML_T('\0') }; XML_Parser parser = XML_ParserCreate(encodingName); if (parser) { XmlInitEncodingNS(&initEncoding, &encoding, 0); ns = 1; internalEncoding = XmlGetInternalEncodingNS(); namespaceSeparator = nsSep; } if (!setContext(parser, implicitContext)) { XML_ParserFree(parser); return 0; } return parser; } int XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) { if (!encodingName) protocolEncodingName = 0; else { protocolEncodingName = poolCopyString(&tempPool, encodingName); if (!protocolEncodingName) return 0; } return 1; } XML_Parser XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context, const XML_Char *encodingName) { XML_Parser parser = oldParser; DTD *oldDtd = &dtd; XML_StartElementHandler oldStartElementHandler = startElementHandler; XML_EndElementHandler oldEndElementHandler = endElementHandler; XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler; XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler; XML_CommentHandler oldCommentHandler = commentHandler; XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler; XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler; XML_DefaultHandler oldDefaultHandler = defaultHandler; XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler; XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler; XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler; XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler; XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler; void *oldUserData = userData; void *oldHandlerArg = handlerArg; int oldDefaultExpandInternalEntities = defaultExpandInternalEntities; void *oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg; #ifdef XML_DTD int oldParamEntityParsing = paramEntityParsing; #endif parser = (ns ? XML_ParserCreateNS(encodingName, namespaceSeparator) : XML_ParserCreate(encodingName)); if (!parser) return 0; startElementHandler = oldStartElementHandler; endElementHandler = oldEndElementHandler; characterDataHandler = oldCharacterDataHandler; processingInstructionHandler = oldProcessingInstructionHandler; commentHandler = oldCommentHandler; startCdataSectionHandler = oldStartCdataSectionHandler; endCdataSectionHandler = oldEndCdataSectionHandler; defaultHandler = oldDefaultHandler; startNamespaceDeclHandler = oldStartNamespaceDeclHandler; endNamespaceDeclHandler = oldEndNamespaceDeclHandler; notStandaloneHandler = oldNotStandaloneHandler; externalEntityRefHandler = oldExternalEntityRefHandler; unknownEncodingHandler = oldUnknownEncodingHandler; userData = oldUserData; if (oldUserData == oldHandlerArg) handlerArg = userData; else handlerArg = parser; if (oldExternalEntityRefHandlerArg != oldParser) externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; defaultExpandInternalEntities = oldDefaultExpandInternalEntities; #ifdef XML_DTD paramEntityParsing = oldParamEntityParsing; if (context) { #endif /* XML_DTD */ if (!dtdCopy(&dtd, oldDtd) || !setContext(parser, context)) { XML_ParserFree(parser); return 0; } processor = externalEntityInitProcessor; #ifdef XML_DTD } else { dtdSwap(&dtd, oldDtd); parentParser = oldParser; XmlPrologStateInitExternalEntity(&prologState); dtd.complete = 1; hadExternalDoctype = 1; } #endif /* XML_DTD */ return parser; } static void destroyBindings(BINDING *bindings) { for (;;) { BINDING *b = bindings; if (!b) break; bindings = b->nextTagBinding; free(b->uri); free(b); } } void XML_ParserFree(XML_Parser parser) { for (;;) { TAG *p; if (tagStack == 0) { if (freeTagList == 0) break; tagStack = freeTagList; freeTagList = 0; } p = tagStack; tagStack = tagStack->parent; free(p->buf); destroyBindings(p->bindings); free(p); } destroyBindings(freeBindingList); destroyBindings(inheritedBindings); poolDestroy(&tempPool); poolDestroy(&temp2Pool); #ifdef XML_DTD if (parentParser) { if (hadExternalDoctype) dtd.complete = 0; dtdSwap(&dtd, &((Parser *)parentParser)->m_dtd); } #endif /* XML_DTD */ dtdDestroy(&dtd); free((void *)atts); free(groupConnector); free(buffer); free(dataBuf); free(unknownEncodingMem); if (unknownEncodingRelease) unknownEncodingRelease(unknownEncodingData); free(parser); } void XML_UseParserAsHandlerArg(XML_Parser parser) { handlerArg = parser; } void XML_SetUserData(XML_Parser parser, void *p) { if (handlerArg == userData) handlerArg = userData = p; else userData = p; } int XML_SetBase(XML_Parser parser, const XML_Char *p) { if (p) { p = poolCopyString(&dtd.pool, p); if (!p) return 0; curBase = p; } else curBase = 0; return 1; } const XML_Char *XML_GetBase(XML_Parser parser) { return curBase; } int XML_GetSpecifiedAttributeCount(XML_Parser parser) { return nSpecifiedAtts; } void XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end) { startElementHandler = start; endElementHandler = end; } void XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler) { characterDataHandler = handler; } void XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler handler) { processingInstructionHandler = handler; } void XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler) { commentHandler = handler; } void XML_SetCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start, XML_EndCdataSectionHandler end) { startCdataSectionHandler = start; endCdataSectionHandler = end; } void XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler) { defaultHandler = handler; defaultExpandInternalEntities = 0; } void XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler) { defaultHandler = handler; defaultExpandInternalEntities = 1; } void XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, XML_EndDoctypeDeclHandler end) { startDoctypeDeclHandler = start; endDoctypeDeclHandler = end; } void XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler handler) { unparsedEntityDeclHandler = handler; } void XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler) { notationDeclHandler = handler; } void XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end) { startNamespaceDeclHandler = start; endNamespaceDeclHandler = end; } void XML_SetNotStandaloneHandler(XML_Parser parser, XML_NotStandaloneHandler handler) { notStandaloneHandler = handler; } void XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler) { externalEntityRefHandler = handler; } void XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg) { if (arg) externalEntityRefHandlerArg = arg; else externalEntityRefHandlerArg = parser; } void XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *data) { unknownEncodingHandler = handler; unknownEncodingHandlerData = data; } int XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing parsing) { #ifdef XML_DTD paramEntityParsing = parsing; return 1; #else return parsing == XML_PARAM_ENTITY_PARSING_NEVER; #endif } int XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) { if (len == 0) { if (!isFinal) return 1; positionPtr = bufferPtr; errorCode = processor(parser, bufferPtr, parseEndPtr = bufferEnd, 0); if (errorCode == XML_ERROR_NONE) return 1; eventEndPtr = eventPtr; processor = errorProcessor; return 0; } else if (bufferPtr == bufferEnd) { const char *end; int nLeftOver; parseEndByteIndex += len; positionPtr = s; if (isFinal) { errorCode = processor(parser, s, parseEndPtr = s + len, 0); if (errorCode == XML_ERROR_NONE) return 1; eventEndPtr = eventPtr; processor = errorProcessor; return 0; } errorCode = processor(parser, s, parseEndPtr = s + len, &end); if (errorCode != XML_ERROR_NONE) { eventEndPtr = eventPtr; processor = errorProcessor; return 0; } XmlUpdatePosition(encoding, positionPtr, end, &position); nLeftOver = s + len - end; if (nLeftOver) { if (buffer == 0 || nLeftOver > bufferLim - buffer) { /* FIXME avoid integer overflow */ buffer = buffer == 0 ? malloc(len * 2) : realloc(buffer, len * 2); /* FIXME storage leak if realloc fails */ if (!buffer) { errorCode = XML_ERROR_NO_MEMORY; eventPtr = eventEndPtr = 0; processor = errorProcessor; return 0; } bufferLim = buffer + len * 2; } memcpy(buffer, end, nLeftOver); bufferPtr = buffer; bufferEnd = buffer + nLeftOver; } return 1; } else { memcpy(XML_GetBuffer(parser, len), s, len); return XML_ParseBuffer(parser, len, isFinal); } } int XML_ParseBuffer(XML_Parser parser, int len, int isFinal) { const char *start = bufferPtr; positionPtr = start; bufferEnd += len; parseEndByteIndex += len; errorCode = processor(parser, start, parseEndPtr = bufferEnd, isFinal ? (const char **)0 : &bufferPtr); if (errorCode == XML_ERROR_NONE) { if (!isFinal) XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); return 1; } else { eventEndPtr = eventPtr; processor = errorProcessor; return 0; } } void *XML_GetBuffer(XML_Parser parser, int len) { if (len > bufferLim - bufferEnd) { /* FIXME avoid integer overflow */ int neededSize = len + (bufferEnd - bufferPtr); if (neededSize <= bufferLim - buffer) { memmove(buffer, bufferPtr, bufferEnd - bufferPtr); bufferEnd = buffer + (bufferEnd - bufferPtr); bufferPtr = buffer; } else { char *newBuf; int bufferSize = bufferLim - bufferPtr; if (bufferSize == 0) bufferSize = INIT_BUFFER_SIZE; do { bufferSize *= 2; } while (bufferSize < neededSize); newBuf = malloc(bufferSize); if (newBuf == 0) { errorCode = XML_ERROR_NO_MEMORY; return 0; } bufferLim = newBuf + bufferSize; if (bufferPtr) { memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr); free(buffer); } bufferEnd = newBuf + (bufferEnd - bufferPtr); bufferPtr = buffer = newBuf; } } return bufferEnd; } enum XML_Error XML_GetErrorCode(XML_Parser parser) { return errorCode; } long XML_GetCurrentByteIndex(XML_Parser parser) { if (eventPtr) return parseEndByteIndex - (parseEndPtr - eventPtr); return -1; } int XML_GetCurrentByteCount(XML_Parser parser) { if (eventEndPtr && eventPtr) return eventEndPtr - eventPtr; return 0; } int XML_GetCurrentLineNumber(XML_Parser parser) { if (eventPtr) { XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); positionPtr = eventPtr; } return position.lineNumber + 1; } int XML_GetCurrentColumnNumber(XML_Parser parser) { if (eventPtr) { XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); positionPtr = eventPtr; } return position.columnNumber; } void XML_DefaultCurrent(XML_Parser parser) { if (defaultHandler) { if (openInternalEntities) reportDefault(parser, internalEncoding, openInternalEntities->internalEventPtr, openInternalEntities->internalEventEndPtr); else reportDefault(parser, encoding, eventPtr, eventEndPtr); } } const XML_LChar *XML_ErrorString(int code) { static const XML_LChar *message[] = { 0, XML_T("out of memory"), XML_T("syntax error"), XML_T("no element found"), XML_T("not well-formed"), XML_T("unclosed token"), XML_T("unclosed token"), XML_T("mismatched tag"), XML_T("duplicate attribute"), XML_T("junk after document element"), XML_T("illegal parameter entity reference"), XML_T("undefined entity"), XML_T("recursive entity reference"), XML_T("asynchronous entity"), XML_T("reference to invalid character number"), XML_T("reference to binary entity"), XML_T("reference to external entity in attribute"), XML_T("xml processing instruction not at start of external entity"), XML_T("unknown encoding"), XML_T("encoding specified in XML declaration is incorrect"), XML_T("unclosed CDATA section"), XML_T("error in processing external entity reference"), XML_T("document is not standalone") }; if (code > 0 && code < sizeof(message)/sizeof(message[0])) return message[code]; return 0; } static enum XML_Error contentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { return doContent(parser, 0, encoding, start, end, endPtr); } static enum XML_Error externalEntityInitProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = initializeEncoding(parser); if (result != XML_ERROR_NONE) return result; processor = externalEntityInitProcessor2; return externalEntityInitProcessor2(parser, start, end, endPtr); } static enum XML_Error externalEntityInitProcessor2(XML_Parser parser, const char *start, const char *end, const char **endPtr) { const char *next; int tok = XmlContentTok(encoding, start, end, &next); switch (tok) { case XML_TOK_BOM: start = next; break; case XML_TOK_PARTIAL: if (endPtr) { *endPtr = start; return XML_ERROR_NONE; } eventPtr = start; return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (endPtr) { *endPtr = start; return XML_ERROR_NONE; } eventPtr = start; return XML_ERROR_PARTIAL_CHAR; } processor = externalEntityInitProcessor3; return externalEntityInitProcessor3(parser, start, end, endPtr); } static enum XML_Error externalEntityInitProcessor3(XML_Parser parser, const char *start, const char *end, const char **endPtr) { const char *next; int tok = XmlContentTok(encoding, start, end, &next); switch (tok) { case XML_TOK_XML_DECL: { enum XML_Error result = processXmlDecl(parser, 1, start, next); if (result != XML_ERROR_NONE) return result; start = next; } break; case XML_TOK_PARTIAL: if (endPtr) { *endPtr = start; return XML_ERROR_NONE; } eventPtr = start; return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (endPtr) { *endPtr = start; return XML_ERROR_NONE; } eventPtr = start; return XML_ERROR_PARTIAL_CHAR; } processor = externalEntityContentProcessor; tagLevel = 1; return doContent(parser, 1, encoding, start, end, endPtr); } static enum XML_Error externalEntityContentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { return doContent(parser, 1, encoding, start, end, endPtr); } static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *s, const char *end, const char **nextPtr) { const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; for (;;) { const char *next = s; /* XmlContentTok doesn't always set the last arg */ int tok = XmlContentTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_TRAILING_CR: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } *eventEndPP = end; if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, end); if (startTagLevel == 0) return XML_ERROR_NO_ELEMENTS; if (tagLevel != startTagLevel) return XML_ERROR_ASYNC_ENTITY; return XML_ERROR_NONE; case XML_TOK_NONE: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } if (startTagLevel > 0) { if (tagLevel != startTagLevel) return XML_ERROR_ASYNC_ENTITY; return XML_ERROR_NONE; } return XML_ERROR_NO_ELEMENTS; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_ENTITY_REF: { const XML_Char *name; ENTITY *entity; XML_Char ch = XmlPredefinedEntityName(enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (ch) { if (characterDataHandler) characterDataHandler(handlerArg, &ch, 1); else if (defaultHandler) reportDefault(parser, enc, s, next); break; } name = poolStoreString(&dtd.pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0); poolDiscard(&dtd.pool); if (!entity) { if (dtd.complete || dtd.standalone) return XML_ERROR_UNDEFINED_ENTITY; if (defaultHandler) reportDefault(parser, enc, s, next); break; } if (entity->open) return XML_ERROR_RECURSIVE_ENTITY_REF; if (entity->notation) return XML_ERROR_BINARY_ENTITY_REF; if (entity) { if (entity->textPtr) { enum XML_Error result; OPEN_INTERNAL_ENTITY openEntity; if (defaultHandler && !defaultExpandInternalEntities) { reportDefault(parser, enc, s, next); break; } entity->open = 1; openEntity.next = openInternalEntities; openInternalEntities = &openEntity; openEntity.entity = entity; openEntity.internalEventPtr = 0; openEntity.internalEventEndPtr = 0; result = doContent(parser, tagLevel, internalEncoding, (char *)entity->textPtr, (char *)(entity->textPtr + entity->textLen), 0); entity->open = 0; openInternalEntities = openEntity.next; if (result) return result; } else if (externalEntityRefHandler) { const XML_Char *context; entity->open = 1; context = getContext(parser); entity->open = 0; if (!context) return XML_ERROR_NO_MEMORY; if (!externalEntityRefHandler(externalEntityRefHandlerArg, context, entity->base, entity->systemId, entity->publicId)) return XML_ERROR_EXTERNAL_ENTITY_HANDLING; poolDiscard(&tempPool); } else if (defaultHandler) reportDefault(parser, enc, s, next); } break; } case XML_TOK_START_TAG_WITH_ATTS: if (!startElementHandler) { enum XML_Error result = storeAtts(parser, enc, s, 0, 0); if (result) return result; } /* fall through */ case XML_TOK_START_TAG_NO_ATTS: { TAG *tag; if (freeTagList) { tag = freeTagList; freeTagList = freeTagList->parent; } else { tag = malloc(sizeof(TAG)); if (!tag) return XML_ERROR_NO_MEMORY; tag->buf = malloc(INIT_TAG_BUF_SIZE); if (!tag->buf) return XML_ERROR_NO_MEMORY; tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; } tag->bindings = 0; tag->parent = tagStack; tagStack = tag; tag->name.localPart = 0; tag->rawName = s + enc->minBytesPerChar; tag->rawNameLength = XmlNameLength(enc, tag->rawName); if (nextPtr) { /* Need to guarantee that: tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)) <= tag->bufEnd - sizeof(XML_Char) */ if (tag->rawNameLength + (int)(sizeof(XML_Char) - 1) + (int)sizeof(XML_Char) > tag->bufEnd - tag->buf) { int bufSize = tag->rawNameLength * 4; bufSize = ROUND_UP(bufSize, sizeof(XML_Char)); tag->buf = realloc(tag->buf, bufSize); if (!tag->buf) return XML_ERROR_NO_MEMORY; tag->bufEnd = tag->buf + bufSize; } memcpy(tag->buf, tag->rawName, tag->rawNameLength); tag->rawName = tag->buf; } ++tagLevel; if (startElementHandler) { enum XML_Error result; XML_Char *toPtr; for (;;) { const char *rawNameEnd = tag->rawName + tag->rawNameLength; const char *fromPtr = tag->rawName; int bufSize; if (nextPtr) toPtr = (XML_Char *)(tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char))); else toPtr = (XML_Char *)tag->buf; tag->name.str = toPtr; XmlConvert(enc, &fromPtr, rawNameEnd, (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1); if (fromPtr == rawNameEnd) break; bufSize = (tag->bufEnd - tag->buf) << 1; tag->buf = realloc(tag->buf, bufSize); if (!tag->buf) return XML_ERROR_NO_MEMORY; tag->bufEnd = tag->buf + bufSize; if (nextPtr) tag->rawName = tag->buf; } *toPtr = XML_T('\0'); result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); if (result) return result; startElementHandler(handlerArg, tag->name.str, (const XML_Char **)atts); poolClear(&tempPool); } else { tag->name.str = 0; if (defaultHandler) reportDefault(parser, enc, s, next); } break; } case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: if (!startElementHandler) { enum XML_Error result = storeAtts(parser, enc, s, 0, 0); if (result) return result; } /* fall through */ case XML_TOK_EMPTY_ELEMENT_NO_ATTS: if (startElementHandler || endElementHandler) { const char *rawName = s + enc->minBytesPerChar; enum XML_Error result; BINDING *bindings = 0; TAG_NAME name; name.str = poolStoreString(&tempPool, enc, rawName, rawName + XmlNameLength(enc, rawName)); if (!name.str) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); result = storeAtts(parser, enc, s, &name, &bindings); if (result) return result; poolFinish(&tempPool); if (startElementHandler) startElementHandler(handlerArg, name.str, (const XML_Char **)atts); if (endElementHandler) { if (startElementHandler) *eventPP = *eventEndPP; endElementHandler(handlerArg, name.str); } poolClear(&tempPool); while (bindings) { BINDING *b = bindings; if (endNamespaceDeclHandler) endNamespaceDeclHandler(handlerArg, b->prefix->name); bindings = bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; b->prefix->binding = b->prevPrefixBinding; } } else if (defaultHandler) reportDefault(parser, enc, s, next); if (tagLevel == 0) return epilogProcessor(parser, next, end, nextPtr); break; case XML_TOK_END_TAG: if (tagLevel == startTagLevel) return XML_ERROR_ASYNC_ENTITY; else { int len; const char *rawName; TAG *tag = tagStack; tagStack = tag->parent; tag->parent = freeTagList; freeTagList = tag; rawName = s + enc->minBytesPerChar*2; len = XmlNameLength(enc, rawName); if (len != tag->rawNameLength || memcmp(tag->rawName, rawName, len) != 0) { *eventPP = rawName; return XML_ERROR_TAG_MISMATCH; } --tagLevel; if (endElementHandler && tag->name.str) { if (tag->name.localPart) { XML_Char *to = (XML_Char *)tag->name.str + tag->name.uriLen; const XML_Char *from = tag->name.localPart; while ((*to++ = *from++) != 0) ; } endElementHandler(handlerArg, tag->name.str); } else if (defaultHandler) reportDefault(parser, enc, s, next); while (tag->bindings) { BINDING *b = tag->bindings; if (endNamespaceDeclHandler) endNamespaceDeclHandler(handlerArg, b->prefix->name); tag->bindings = tag->bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; b->prefix->binding = b->prevPrefixBinding; } if (tagLevel == 0) return epilogProcessor(parser, next, end, nextPtr); } break; case XML_TOK_CHAR_REF: { int n = XmlCharRefNumber(enc, s); if (n < 0) return XML_ERROR_BAD_CHAR_REF; if (characterDataHandler) { XML_Char buf[XML_ENCODE_MAX]; characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf)); } else if (defaultHandler) reportDefault(parser, enc, s, next); } break; case XML_TOK_XML_DECL: return XML_ERROR_MISPLACED_XML_PI; case XML_TOK_DATA_NEWLINE: if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_CDATA_SECT_OPEN: { enum XML_Error result; if (startCdataSectionHandler) startCdataSectionHandler(handlerArg); #if 0 /* Suppose you doing a transformation on a document that involves changing only the character data. You set up a defaultHandler and a characterDataHandler. The defaultHandler simply copies characters through. The characterDataHandler does the transformation and writes the characters out escaping them as necessary. This case will fail to work if we leave out the following two lines (because & and < inside CDATA sections will be incorrectly escaped). However, now we have a start/endCdataSectionHandler, so it seems easier to let the user deal with this. */ else if (characterDataHandler) characterDataHandler(handlerArg, dataBuf, 0); #endif else if (defaultHandler) reportDefault(parser, enc, s, next); result = doCdataSection(parser, enc, &next, end, nextPtr); if (!next) { processor = cdataSectionProcessor; return result; } } break; case XML_TOK_TRAILING_RSQB: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } if (characterDataHandler) { if (MUST_CONVERT(enc, s)) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); } else characterDataHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s); } else if (defaultHandler) reportDefault(parser, enc, s, end); if (startTagLevel == 0) { *eventPP = end; return XML_ERROR_NO_ELEMENTS; } if (tagLevel != startTagLevel) { *eventPP = end; return XML_ERROR_ASYNC_ENTITY; } return XML_ERROR_NONE; case XML_TOK_DATA_CHARS: if (characterDataHandler) { if (MUST_CONVERT(enc, s)) { for (;;) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = s; characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); if (s == next) break; *eventPP = s; } } else characterDataHandler(handlerArg, (XML_Char *)s, (XML_Char *)next - (XML_Char *)s); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_PI: if (!reportProcessingInstruction(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_COMMENT: if (!reportComment(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; break; default: if (defaultHandler) reportDefault(parser, enc, s, next); break; } *eventPP = s = next; } /* not reached */ } /* If tagNamePtr is non-null, build a real list of attributes, otherwise just check the attributes for well-formedness. */ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, TAG_NAME *tagNamePtr, BINDING **bindingsPtr) { ELEMENT_TYPE *elementType = 0; int nDefaultAtts = 0; const XML_Char **appAtts; /* the attribute list to pass to the application */ int attIndex = 0; int i; int n; int nPrefixes = 0; BINDING *binding; const XML_Char *localPart; /* lookup the element type name */ if (tagNamePtr) { elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str, 0); if (!elementType) { tagNamePtr->str = poolCopyString(&dtd.pool, tagNamePtr->str); if (!tagNamePtr->str) return XML_ERROR_NO_MEMORY; elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str, sizeof(ELEMENT_TYPE)); if (!elementType) return XML_ERROR_NO_MEMORY; if (ns && !setElementTypePrefix(parser, elementType)) return XML_ERROR_NO_MEMORY; } nDefaultAtts = elementType->nDefaultAtts; } /* get the attributes from the tokenizer */ n = XmlGetAttributes(enc, attStr, attsSize, atts); if (n + nDefaultAtts > attsSize) { int oldAttsSize = attsSize; attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; atts = realloc((void *)atts, attsSize * sizeof(ATTRIBUTE)); if (!atts) return XML_ERROR_NO_MEMORY; if (n > oldAttsSize) XmlGetAttributes(enc, attStr, n, atts); } appAtts = (const XML_Char **)atts; for (i = 0; i < n; i++) { /* add the name and value to the attribute list */ ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name, atts[i].name + XmlNameLength(enc, atts[i].name)); if (!attId) return XML_ERROR_NO_MEMORY; /* detect duplicate attributes */ if ((attId->name)[-1]) { if (enc == encoding) eventPtr = atts[i].name; return XML_ERROR_DUPLICATE_ATTRIBUTE; } (attId->name)[-1] = 1; appAtts[attIndex++] = attId->name; if (!atts[i].normalized) { enum XML_Error result; int isCdata = 1; /* figure out whether declared as other than CDATA */ if (attId->maybeTokenized) { int j; for (j = 0; j < nDefaultAtts; j++) { if (attId == elementType->defaultAtts[j].id) { isCdata = elementType->defaultAtts[j].isCdata; break; } } } /* normalize the attribute value */ result = storeAttributeValue(parser, enc, isCdata, atts[i].valuePtr, atts[i].valueEnd, &tempPool); if (result) return result; if (tagNamePtr) { appAtts[attIndex] = poolStart(&tempPool); poolFinish(&tempPool); } else poolDiscard(&tempPool); } else if (tagNamePtr) { /* the value did not need normalizing */ appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, atts[i].valueEnd); if (appAtts[attIndex] == 0) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); } /* handle prefixed attribute names */ if (attId->prefix && tagNamePtr) { if (attId->xmlns) { /* deal with namespace declarations here */ if (!addBinding(parser, attId->prefix, attId, appAtts[attIndex], bindingsPtr)) return XML_ERROR_NO_MEMORY; --attIndex; } else { /* deal with other prefixed names later */ attIndex++; nPrefixes++; (attId->name)[-1] = 2; } } else attIndex++; } nSpecifiedAtts = attIndex; /* do attribute defaulting */ if (tagNamePtr) { int j; for (j = 0; j < nDefaultAtts; j++) { const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + j; if (!(da->id->name)[-1] && da->value) { if (da->id->prefix) { if (da->id->xmlns) { if (!addBinding(parser, da->id->prefix, da->id, da->value, bindingsPtr)) return XML_ERROR_NO_MEMORY; } else { (da->id->name)[-1] = 2; nPrefixes++; appAtts[attIndex++] = da->id->name; appAtts[attIndex++] = da->value; } } else { (da->id->name)[-1] = 1; appAtts[attIndex++] = da->id->name; appAtts[attIndex++] = da->value; } } } appAtts[attIndex] = 0; } i = 0; if (nPrefixes) { /* expand prefixed attribute names */ for (; i < attIndex; i += 2) { if (appAtts[i][-1] == 2) { ATTRIBUTE_ID *id; ((XML_Char *)(appAtts[i]))[-1] = 0; id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, appAtts[i], 0); if (id->prefix->binding) { int j; const BINDING *b = id->prefix->binding; const XML_Char *s = appAtts[i]; for (j = 0; j < b->uriLen; j++) { if (!poolAppendChar(&tempPool, b->uri[j])) return XML_ERROR_NO_MEMORY; } while (*s++ != ':') ; do { if (!poolAppendChar(&tempPool, *s)) return XML_ERROR_NO_MEMORY; } while (*s++); appAtts[i] = poolStart(&tempPool); poolFinish(&tempPool); } if (!--nPrefixes) break; } else ((XML_Char *)(appAtts[i]))[-1] = 0; } } /* clear the flags that say whether attributes were specified */ for (; i < attIndex; i += 2) ((XML_Char *)(appAtts[i]))[-1] = 0; if (!tagNamePtr) return XML_ERROR_NONE; for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) binding->attId->name[-1] = 0; /* expand the element type name */ if (elementType->prefix) { binding = elementType->prefix->binding; if (!binding) return XML_ERROR_NONE; localPart = tagNamePtr->str; while (*localPart++ != XML_T(':')) ; } else if (dtd.defaultPrefix.binding) { binding = dtd.defaultPrefix.binding; localPart = tagNamePtr->str; } else return XML_ERROR_NONE; tagNamePtr->localPart = localPart; tagNamePtr->uriLen = binding->uriLen; i = binding->uriLen; do { if (i == binding->uriAlloc) { binding->uri = realloc(binding->uri, (binding->uriAlloc *= 2) * sizeof(XML_Char)); if (!binding->uri) return XML_ERROR_NO_MEMORY; } binding->uri[i++] = *localPart; } while (*localPart++); tagNamePtr->str = binding->uri; return XML_ERROR_NONE; } static int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr) { BINDING *b; int len; for (len = 0; uri[len]; len++) ; if (namespaceSeparator) len++; if (freeBindingList) { b = freeBindingList; if (len > b->uriAlloc) { b->uri = realloc(b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); if (!b->uri) return 0; b->uriAlloc = len + EXPAND_SPARE; } freeBindingList = b->nextTagBinding; } else { b = malloc(sizeof(BINDING)); if (!b) return 0; b->uri = malloc(sizeof(XML_Char) * (len + EXPAND_SPARE)); if (!b->uri) { free(b); return 0; } b->uriAlloc = len + EXPAND_SPARE; } b->uriLen = len; memcpy(b->uri, uri, len * sizeof(XML_Char)); if (namespaceSeparator) b->uri[len - 1] = namespaceSeparator; b->prefix = prefix; b->attId = attId; b->prevPrefixBinding = prefix->binding; if (*uri == XML_T('\0') && prefix == &dtd.defaultPrefix) prefix->binding = 0; else prefix->binding = b; b->nextTagBinding = *bindingsPtr; *bindingsPtr = b; if (startNamespaceDeclHandler) startNamespaceDeclHandler(handlerArg, prefix->name, prefix->binding ? uri : 0); return 1; } /* The idea here is to avoid using stack for each CDATA section when the whole file is parsed with one call. */ static enum XML_Error cdataSectionProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doCdataSection(parser, encoding, &start, end, endPtr); if (start) { processor = contentProcessor; return contentProcessor(parser, start, end, endPtr); } return result; } /* startPtr gets set to non-null is the section is closed, and to null if the section is not yet closed. */ static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, const char *end, const char **nextPtr) { const char *s = *startPtr; const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; *eventPP = s; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; *startPtr = 0; for (;;) { const char *next; int tok = XmlCdataSectionTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_CDATA_SECT_CLOSE: if (endCdataSectionHandler) endCdataSectionHandler(handlerArg); #if 0 /* see comment under XML_TOK_CDATA_SECT_OPEN */ else if (characterDataHandler) characterDataHandler(handlerArg, dataBuf, 0); #endif else if (defaultHandler) reportDefault(parser, enc, s, next); *startPtr = next; return XML_ERROR_NONE; case XML_TOK_DATA_NEWLINE: if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_DATA_CHARS: if (characterDataHandler) { if (MUST_CONVERT(enc, s)) { for (;;) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = next; characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); if (s == next) break; *eventPP = s; } } else characterDataHandler(handlerArg, (XML_Char *)s, (XML_Char *)next - (XML_Char *)s); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL_CHAR: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_PARTIAL: case XML_TOK_NONE: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_CDATA_SECTION; default: abort(); } *eventPP = s = next; } /* not reached */ } #ifdef XML_DTD /* The idea here is to avoid using stack for each IGNORE section when the whole file is parsed with one call. */ static enum XML_Error ignoreSectionProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doIgnoreSection(parser, encoding, &start, end, endPtr); if (start) { processor = prologProcessor; return prologProcessor(parser, start, end, endPtr); } return result; } /* startPtr gets set to non-null is the section is closed, and to null if the section is not yet closed. */ static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, const char *end, const char **nextPtr) { const char *next; int tok; const char *s = *startPtr; const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; *eventPP = s; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; *startPtr = 0; tok = XmlIgnoreSectionTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_IGNORE_SECT: if (defaultHandler) reportDefault(parser, enc, s, next); *startPtr = next; return XML_ERROR_NONE; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL_CHAR: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_PARTIAL: case XML_TOK_NONE: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */ default: abort(); } /* not reached */ } #endif /* XML_DTD */ static enum XML_Error initializeEncoding(XML_Parser parser) { const char *s; #ifdef XML_UNICODE char encodingBuf[128]; if (!protocolEncodingName) s = 0; else { int i; for (i = 0; protocolEncodingName[i]; i++) { if (i == sizeof(encodingBuf) - 1 || protocolEncodingName[i] >= 0x80 || protocolEncodingName[i] < 0) { encodingBuf[0] = '\0'; break; } encodingBuf[i] = (char)protocolEncodingName[i]; } encodingBuf[i] = '\0'; s = encodingBuf; } #else s = protocolEncodingName; #endif if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s)) return XML_ERROR_NONE; return handleUnknownEncoding(parser, protocolEncodingName); } static enum XML_Error processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *s, const char *next) { const char *encodingName = 0; const ENCODING *newEncoding = 0; const char *version; int standalone = -1; if (!(ns ? XmlParseXmlDeclNS : XmlParseXmlDecl)(isGeneralTextEntity, encoding, s, next, &eventPtr, &version, &encodingName, &newEncoding, &standalone)) return XML_ERROR_SYNTAX; if (!isGeneralTextEntity && standalone == 1) { dtd.standalone = 1; #ifdef XML_DTD if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; #endif /* XML_DTD */ } if (defaultHandler) reportDefault(parser, encoding, s, next); if (!protocolEncodingName) { if (newEncoding) { if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) { eventPtr = encodingName; return XML_ERROR_INCORRECT_ENCODING; } encoding = newEncoding; } else if (encodingName) { enum XML_Error result; const XML_Char *s = poolStoreString(&tempPool, encoding, encodingName, encodingName + XmlNameLength(encoding, encodingName)); if (!s) return XML_ERROR_NO_MEMORY; result = handleUnknownEncoding(parser, s); poolDiscard(&tempPool); if (result == XML_ERROR_UNKNOWN_ENCODING) eventPtr = encodingName; return result; } } return XML_ERROR_NONE; } static enum XML_Error handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) { if (unknownEncodingHandler) { XML_Encoding info; int i; for (i = 0; i < 256; i++) info.map[i] = -1; info.convert = 0; info.data = 0; info.release = 0; if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, &info)) { ENCODING *enc; unknownEncodingMem = malloc(XmlSizeOfUnknownEncoding()); if (!unknownEncodingMem) { if (info.release) info.release(info.data); return XML_ERROR_NO_MEMORY; } enc = (ns ? XmlInitUnknownEncodingNS : XmlInitUnknownEncoding)(unknownEncodingMem, info.map, info.convert, info.data); if (enc) { unknownEncodingData = info.data; unknownEncodingRelease = info.release; encoding = enc; return XML_ERROR_NONE; } } if (info.release) info.release(info.data); } return XML_ERROR_UNKNOWN_ENCODING; } static enum XML_Error prologInitProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { enum XML_Error result = initializeEncoding(parser); if (result != XML_ERROR_NONE) return result; processor = prologProcessor; return prologProcessor(parser, s, end, nextPtr); } static enum XML_Error prologProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { const char *next; int tok = XmlPrologTok(encoding, s, end, &next); return doProlog(parser, encoding, s, end, tok, next, nextPtr); } static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr) { #ifdef XML_DTD static const XML_Char externalSubsetName[] = { '#' , '\0' }; #endif /* XML_DTD */ const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } for (;;) { int role; *eventPP = s; *eventEndPP = next; if (tok <= 0) { if (nextPtr != 0 && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: #ifdef XML_DTD if (enc != encoding) return XML_ERROR_NONE; if (parentParser) { if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc) == XML_ROLE_ERROR) return XML_ERROR_SYNTAX; hadExternalDoctype = 0; return XML_ERROR_NONE; } #endif /* XML_DTD */ return XML_ERROR_NO_ELEMENTS; default: tok = -tok; next = end; break; } } role = XmlTokenRole(&prologState, tok, s, next, enc); switch (role) { case XML_ROLE_XML_DECL: { enum XML_Error result = processXmlDecl(parser, 0, s, next); if (result != XML_ERROR_NONE) return result; enc = encoding; } break; case XML_ROLE_DOCTYPE_NAME: if (startDoctypeDeclHandler) { const XML_Char *name = poolStoreString(&tempPool, enc, s, next); if (!name) return XML_ERROR_NO_MEMORY; startDoctypeDeclHandler(handlerArg, name); poolClear(&tempPool); } break; #ifdef XML_DTD case XML_ROLE_TEXT_DECL: { enum XML_Error result = processXmlDecl(parser, 1, s, next); if (result != XML_ERROR_NONE) return result; enc = encoding; } break; #endif /* XML_DTD */ case XML_ROLE_DOCTYPE_PUBLIC_ID: #ifdef XML_DTD declEntity = (ENTITY *)lookup(&dtd.paramEntities, externalSubsetName, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; #endif /* XML_DTD */ /* fall through */ case XML_ROLE_ENTITY_PUBLIC_ID: if (!XmlIsPublicId(enc, s, next, eventPP)) return XML_ERROR_SYNTAX; if (declEntity) { XML_Char *tem = poolStoreString(&dtd.pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!tem) return XML_ERROR_NO_MEMORY; normalizePublicId(tem); declEntity->publicId = tem; poolFinish(&dtd.pool); } break; case XML_ROLE_DOCTYPE_CLOSE: if (dtd.complete && hadExternalDoctype) { dtd.complete = 0; #ifdef XML_DTD if (paramEntityParsing && externalEntityRefHandler) { ENTITY *entity = (ENTITY *)lookup(&dtd.paramEntities, externalSubsetName, 0); if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) return XML_ERROR_EXTERNAL_ENTITY_HANDLING; } #endif /* XML_DTD */ if (!dtd.complete && !dtd.standalone && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; } if (endDoctypeDeclHandler) endDoctypeDeclHandler(handlerArg); break; case XML_ROLE_INSTANCE_START: processor = contentProcessor; return contentProcessor(parser, s, end, nextPtr); case XML_ROLE_ATTLIST_ELEMENT_NAME: { const XML_Char *name = poolStoreString(&dtd.pool, enc, s, next); if (!name) return XML_ERROR_NO_MEMORY; declElementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, name, sizeof(ELEMENT_TYPE)); if (!declElementType) return XML_ERROR_NO_MEMORY; if (declElementType->name != name) poolDiscard(&dtd.pool); else { poolFinish(&dtd.pool); if (!setElementTypePrefix(parser, declElementType)) return XML_ERROR_NO_MEMORY; } break; } case XML_ROLE_ATTRIBUTE_NAME: declAttributeId = getAttributeId(parser, enc, s, next); if (!declAttributeId) return XML_ERROR_NO_MEMORY; declAttributeIsCdata = 0; break; case XML_ROLE_ATTRIBUTE_TYPE_CDATA: declAttributeIsCdata = 1; break; case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE: case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE: if (dtd.complete && !defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, 0)) return XML_ERROR_NO_MEMORY; break; case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: case XML_ROLE_FIXED_ATTRIBUTE_VALUE: { const XML_Char *attVal; enum XML_Error result = storeAttributeValue(parser, enc, declAttributeIsCdata, s + enc->minBytesPerChar, next - enc->minBytesPerChar, &dtd.pool); if (result) return result; attVal = poolStart(&dtd.pool); poolFinish(&dtd.pool); if (dtd.complete && !defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, attVal)) return XML_ERROR_NO_MEMORY; break; } case XML_ROLE_ENTITY_VALUE: { enum XML_Error result = storeEntityValue(parser, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (declEntity) { declEntity->textPtr = poolStart(&dtd.pool); declEntity->textLen = poolLength(&dtd.pool); poolFinish(&dtd.pool); } else poolDiscard(&dtd.pool); if (result != XML_ERROR_NONE) return result; } break; case XML_ROLE_DOCTYPE_SYSTEM_ID: if (!dtd.standalone #ifdef XML_DTD && !paramEntityParsing #endif /* XML_DTD */ && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; hadExternalDoctype = 1; #ifndef XML_DTD break; #else /* XML_DTD */ if (!declEntity) { declEntity = (ENTITY *)lookup(&dtd.paramEntities, externalSubsetName, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; } /* fall through */ #endif /* XML_DTD */ case XML_ROLE_ENTITY_SYSTEM_ID: if (declEntity) { declEntity->systemId = poolStoreString(&dtd.pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!declEntity->systemId) return XML_ERROR_NO_MEMORY; declEntity->base = curBase; poolFinish(&dtd.pool); } break; case XML_ROLE_ENTITY_NOTATION_NAME: if (declEntity) { declEntity->notation = poolStoreString(&dtd.pool, enc, s, next); if (!declEntity->notation) return XML_ERROR_NO_MEMORY; poolFinish(&dtd.pool); if (unparsedEntityDeclHandler) { *eventEndPP = s; unparsedEntityDeclHandler(handlerArg, declEntity->name, declEntity->base, declEntity->systemId, declEntity->publicId, declEntity->notation); } } break; case XML_ROLE_GENERAL_ENTITY_NAME: { const XML_Char *name; if (XmlPredefinedEntityName(enc, s, next)) { declEntity = 0; break; } name = poolStoreString(&dtd.pool, enc, s, next); if (!name) return XML_ERROR_NO_MEMORY; if (dtd.complete) { declEntity = (ENTITY *)lookup(&dtd.generalEntities, name, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; if (declEntity->name != name) { poolDiscard(&dtd.pool); declEntity = 0; } else poolFinish(&dtd.pool); } else { poolDiscard(&dtd.pool); declEntity = 0; } } break; case XML_ROLE_PARAM_ENTITY_NAME: #ifdef XML_DTD if (dtd.complete) { const XML_Char *name = poolStoreString(&dtd.pool, enc, s, next); if (!name) return XML_ERROR_NO_MEMORY; declEntity = (ENTITY *)lookup(&dtd.paramEntities, name, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; if (declEntity->name != name) { poolDiscard(&dtd.pool); declEntity = 0; } else poolFinish(&dtd.pool); } #else /* not XML_DTD */ declEntity = 0; #endif /* not XML_DTD */ break; case XML_ROLE_NOTATION_NAME: declNotationPublicId = 0; declNotationName = 0; if (notationDeclHandler) { declNotationName = poolStoreString(&tempPool, enc, s, next); if (!declNotationName) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); } break; case XML_ROLE_NOTATION_PUBLIC_ID: if (!XmlIsPublicId(enc, s, next, eventPP)) return XML_ERROR_SYNTAX; if (declNotationName) { XML_Char *tem = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!tem) return XML_ERROR_NO_MEMORY; normalizePublicId(tem); declNotationPublicId = tem; poolFinish(&tempPool); } break; case XML_ROLE_NOTATION_SYSTEM_ID: if (declNotationName && notationDeclHandler) { const XML_Char *systemId = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!systemId) return XML_ERROR_NO_MEMORY; *eventEndPP = s; notationDeclHandler(handlerArg, declNotationName, curBase, systemId, declNotationPublicId); } poolClear(&tempPool); break; case XML_ROLE_NOTATION_NO_SYSTEM_ID: if (declNotationPublicId && notationDeclHandler) { *eventEndPP = s; notationDeclHandler(handlerArg, declNotationName, curBase, 0, declNotationPublicId); } poolClear(&tempPool); break; case XML_ROLE_ERROR: switch (tok) { case XML_TOK_PARAM_ENTITY_REF: return XML_ERROR_PARAM_ENTITY_REF; case XML_TOK_XML_DECL: return XML_ERROR_MISPLACED_XML_PI; default: return XML_ERROR_SYNTAX; } #ifdef XML_DTD case XML_ROLE_IGNORE_SECT: { enum XML_Error result; if (defaultHandler) reportDefault(parser, enc, s, next); result = doIgnoreSection(parser, enc, &next, end, nextPtr); if (!next) { processor = ignoreSectionProcessor; return result; } } break; #endif /* XML_DTD */ case XML_ROLE_GROUP_OPEN: if (prologState.level >= groupSize) { if (groupSize) groupConnector = realloc(groupConnector, groupSize *= 2); else groupConnector = malloc(groupSize = 32); if (!groupConnector) return XML_ERROR_NO_MEMORY; } groupConnector[prologState.level] = 0; break; case XML_ROLE_GROUP_SEQUENCE: if (groupConnector[prologState.level] == '|') return XML_ERROR_SYNTAX; groupConnector[prologState.level] = ','; break; case XML_ROLE_GROUP_CHOICE: if (groupConnector[prologState.level] == ',') return XML_ERROR_SYNTAX; groupConnector[prologState.level] = '|'; break; case XML_ROLE_PARAM_ENTITY_REF: #ifdef XML_DTD case XML_ROLE_INNER_PARAM_ENTITY_REF: if (paramEntityParsing && (dtd.complete || role == XML_ROLE_INNER_PARAM_ENTITY_REF)) { const XML_Char *name; ENTITY *entity; name = poolStoreString(&dtd.pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0); poolDiscard(&dtd.pool); if (!entity) { /* FIXME what to do if !dtd.complete? */ return XML_ERROR_UNDEFINED_ENTITY; } if (entity->open) return XML_ERROR_RECURSIVE_ENTITY_REF; if (entity->textPtr) { enum XML_Error result; result = processInternalParamEntity(parser, entity); if (result != XML_ERROR_NONE) return result; break; } if (role == XML_ROLE_INNER_PARAM_ENTITY_REF) return XML_ERROR_PARAM_ENTITY_REF; if (externalEntityRefHandler) { dtd.complete = 0; entity->open = 1; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) { entity->open = 0; return XML_ERROR_EXTERNAL_ENTITY_HANDLING; } entity->open = 0; if (dtd.complete) break; } } #endif /* XML_DTD */ if (!dtd.standalone && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; dtd.complete = 0; if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_ROLE_NONE: switch (tok) { case XML_TOK_PI: if (!reportProcessingInstruction(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_COMMENT: if (!reportComment(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; break; } break; } if (defaultHandler) { switch (tok) { case XML_TOK_PI: case XML_TOK_COMMENT: case XML_TOK_BOM: case XML_TOK_XML_DECL: #ifdef XML_DTD case XML_TOK_IGNORE_SECT: #endif /* XML_DTD */ case XML_TOK_PARAM_ENTITY_REF: break; default: #ifdef XML_DTD if (role != XML_ROLE_IGNORE_SECT) #endif /* XML_DTD */ reportDefault(parser, enc, s, next); } } s = next; tok = XmlPrologTok(enc, s, end, &next); } /* not reached */ } static enum XML_Error epilogProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { processor = epilogProcessor; eventPtr = s; for (;;) { const char *next; int tok = XmlPrologTok(encoding, s, end, &next); eventEndPtr = next; switch (tok) { case -XML_TOK_PROLOG_S: if (defaultHandler) { eventEndPtr = end; reportDefault(parser, encoding, s, end); } /* fall through */ case XML_TOK_NONE: if (nextPtr) *nextPtr = end; return XML_ERROR_NONE; case XML_TOK_PROLOG_S: if (defaultHandler) reportDefault(parser, encoding, s, next); break; case XML_TOK_PI: if (!reportProcessingInstruction(parser, encoding, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_COMMENT: if (!reportComment(parser, encoding, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_INVALID: eventPtr = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (nextPtr) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; default: return XML_ERROR_JUNK_AFTER_DOC_ELEMENT; } eventPtr = s = next; } } #ifdef XML_DTD static enum XML_Error processInternalParamEntity(XML_Parser parser, ENTITY *entity) { const char *s, *end, *next; int tok; enum XML_Error result; OPEN_INTERNAL_ENTITY openEntity; entity->open = 1; openEntity.next = openInternalEntities; openInternalEntities = &openEntity; openEntity.entity = entity; openEntity.internalEventPtr = 0; openEntity.internalEventEndPtr = 0; s = (char *)entity->textPtr; end = (char *)(entity->textPtr + entity->textLen); tok = XmlPrologTok(internalEncoding, s, end, &next); result = doProlog(parser, internalEncoding, s, end, tok, next, 0); entity->open = 0; openInternalEntities = openEntity.next; return result; } #endif /* XML_DTD */ static enum XML_Error errorProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { return errorCode; } static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata, const char *ptr, const char *end, STRING_POOL *pool) { enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, end, pool); if (result) return result; if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) poolChop(pool); if (!poolAppendChar(pool, XML_T('\0'))) return XML_ERROR_NO_MEMORY; return XML_ERROR_NONE; } static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata, const char *ptr, const char *end, STRING_POOL *pool) { for (;;) { const char *next; int tok = XmlAttributeValueTok(enc, ptr, end, &next); switch (tok) { case XML_TOK_NONE: return XML_ERROR_NONE; case XML_TOK_INVALID: if (enc == encoding) eventPtr = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (enc == encoding) eventPtr = ptr; return XML_ERROR_INVALID_TOKEN; case XML_TOK_CHAR_REF: { XML_Char buf[XML_ENCODE_MAX]; int i; int n = XmlCharRefNumber(enc, ptr); if (n < 0) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BAD_CHAR_REF; } if (!isCdata && n == 0x20 /* space */ && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) break; n = XmlEncode(n, (ICHAR *)buf); if (!n) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BAD_CHAR_REF; } for (i = 0; i < n; i++) { if (!poolAppendChar(pool, buf[i])) return XML_ERROR_NO_MEMORY; } } break; case XML_TOK_DATA_CHARS: if (!poolAppend(pool, enc, ptr, next)) return XML_ERROR_NO_MEMORY; break; break; case XML_TOK_TRAILING_CR: next = ptr + enc->minBytesPerChar; /* fall through */ case XML_TOK_ATTRIBUTE_VALUE_S: case XML_TOK_DATA_NEWLINE: if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) break; if (!poolAppendChar(pool, 0x20)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_ENTITY_REF: { const XML_Char *name; ENTITY *entity; XML_Char ch = XmlPredefinedEntityName(enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (ch) { if (!poolAppendChar(pool, ch)) return XML_ERROR_NO_MEMORY; break; } name = poolStoreString(&temp2Pool, enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0); poolDiscard(&temp2Pool); if (!entity) { if (dtd.complete) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_UNDEFINED_ENTITY; } } else if (entity->open) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_RECURSIVE_ENTITY_REF; } else if (entity->notation) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BINARY_ENTITY_REF; } else if (!entity->textPtr) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; } else { enum XML_Error result; const XML_Char *textEnd = entity->textPtr + entity->textLen; entity->open = 1; result = appendAttributeValue(parser, internalEncoding, isCdata, (char *)entity->textPtr, (char *)textEnd, pool); entity->open = 0; if (result) return result; } } break; default: abort(); } ptr = next; } /* not reached */ } static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *entityTextPtr, const char *entityTextEnd) { STRING_POOL *pool = &(dtd.pool); for (;;) { const char *next; int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); switch (tok) { case XML_TOK_PARAM_ENTITY_REF: #ifdef XML_DTD if (parentParser || enc != encoding) { enum XML_Error result; const XML_Char *name; ENTITY *entity; name = poolStoreString(&tempPool, enc, entityTextPtr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0); poolDiscard(&tempPool); if (!entity) { if (enc == encoding) eventPtr = entityTextPtr; return XML_ERROR_UNDEFINED_ENTITY; } if (entity->open) { if (enc == encoding) eventPtr = entityTextPtr; return XML_ERROR_RECURSIVE_ENTITY_REF; } if (entity->systemId) { if (enc == encoding) eventPtr = entityTextPtr; return XML_ERROR_PARAM_ENTITY_REF; } entity->open = 1; result = storeEntityValue(parser, internalEncoding, (char *)entity->textPtr, (char *)(entity->textPtr + entity->textLen)); entity->open = 0; if (result) return result; break; } #endif /* XML_DTD */ eventPtr = entityTextPtr; return XML_ERROR_SYNTAX; case XML_TOK_NONE: return XML_ERROR_NONE; case XML_TOK_ENTITY_REF: case XML_TOK_DATA_CHARS: if (!poolAppend(pool, enc, entityTextPtr, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_TRAILING_CR: next = entityTextPtr + enc->minBytesPerChar; /* fall through */ case XML_TOK_DATA_NEWLINE: if (pool->end == pool->ptr && !poolGrow(pool)) return XML_ERROR_NO_MEMORY; *(pool->ptr)++ = 0xA; break; case XML_TOK_CHAR_REF: { XML_Char buf[XML_ENCODE_MAX]; int i; int n = XmlCharRefNumber(enc, entityTextPtr); if (n < 0) { if (enc == encoding) eventPtr = entityTextPtr; return XML_ERROR_BAD_CHAR_REF; } n = XmlEncode(n, (ICHAR *)buf); if (!n) { if (enc == encoding) eventPtr = entityTextPtr; return XML_ERROR_BAD_CHAR_REF; } for (i = 0; i < n; i++) { if (pool->end == pool->ptr && !poolGrow(pool)) return XML_ERROR_NO_MEMORY; *(pool->ptr)++ = buf[i]; } } break; case XML_TOK_PARTIAL: if (enc == encoding) eventPtr = entityTextPtr; return XML_ERROR_INVALID_TOKEN; case XML_TOK_INVALID: if (enc == encoding) eventPtr = next; return XML_ERROR_INVALID_TOKEN; default: abort(); } entityTextPtr = next; } /* not reached */ } static void normalizeLines(XML_Char *s) { XML_Char *p; for (;; s++) { if (*s == XML_T('\0')) return; if (*s == 0xD) break; } p = s; do { if (*s == 0xD) { *p++ = 0xA; if (*++s == 0xA) s++; } else *p++ = *s++; } while (*s); *p = XML_T('\0'); } static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { const XML_Char *target; XML_Char *data; const char *tem; if (!processingInstructionHandler) { if (defaultHandler) reportDefault(parser, enc, start, end); return 1; } start += enc->minBytesPerChar * 2; tem = start + XmlNameLength(enc, start); target = poolStoreString(&tempPool, enc, start, tem); if (!target) return 0; poolFinish(&tempPool); data = poolStoreString(&tempPool, enc, XmlSkipS(enc, tem), end - enc->minBytesPerChar*2); if (!data) return 0; normalizeLines(data); processingInstructionHandler(handlerArg, target, data); poolClear(&tempPool); return 1; } static int reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { XML_Char *data; if (!commentHandler) { if (defaultHandler) reportDefault(parser, enc, start, end); return 1; } data = poolStoreString(&tempPool, enc, start + enc->minBytesPerChar * 4, end - enc->minBytesPerChar * 3); if (!data) return 0; normalizeLines(data); commentHandler(handlerArg, data); poolClear(&tempPool); return 1; } static void reportDefault(XML_Parser parser, const ENCODING *enc, const char *s, const char *end) { if (MUST_CONVERT(enc, s)) { const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } do { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = s; defaultHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); *eventPP = s; } while (s != end); } else defaultHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s); } static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, int isCdata, const XML_Char *value) { DEFAULT_ATTRIBUTE *att; if (value) { /* The handling of default attributes gets messed up if we have a default which duplicates a non-default. */ int i; for (i = 0; i < type->nDefaultAtts; i++) if (attId == type->defaultAtts[i].id) return 1; } if (type->nDefaultAtts == type->allocDefaultAtts) { if (type->allocDefaultAtts == 0) { type->allocDefaultAtts = 8; type->defaultAtts = malloc(type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE)); } else { type->allocDefaultAtts *= 2; type->defaultAtts = realloc(type->defaultAtts, type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE)); } if (!type->defaultAtts) return 0; } att = type->defaultAtts + type->nDefaultAtts; att->id = attId; att->value = value; att->isCdata = isCdata; if (!isCdata) attId->maybeTokenized = 1; type->nDefaultAtts += 1; return 1; } static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) { const XML_Char *name; for (name = elementType->name; *name; name++) { if (*name == XML_T(':')) { PREFIX *prefix; const XML_Char *s; for (s = elementType->name; s != name; s++) { if (!poolAppendChar(&dtd.pool, *s)) return 0; } if (!poolAppendChar(&dtd.pool, XML_T('\0'))) return 0; prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX)); if (!prefix) return 0; if (prefix->name == poolStart(&dtd.pool)) poolFinish(&dtd.pool); else poolDiscard(&dtd.pool); elementType->prefix = prefix; } } return 1; } static ATTRIBUTE_ID * getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { ATTRIBUTE_ID *id; const XML_Char *name; if (!poolAppendChar(&dtd.pool, XML_T('\0'))) return 0; name = poolStoreString(&dtd.pool, enc, start, end); if (!name) return 0; ++name; id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, name, sizeof(ATTRIBUTE_ID)); if (!id) return 0; if (id->name != name) poolDiscard(&dtd.pool); else { poolFinish(&dtd.pool); if (!ns) ; else if (name[0] == 'x' && name[1] == 'm' && name[2] == 'l' && name[3] == 'n' && name[4] == 's' && (name[5] == XML_T('\0') || name[5] == XML_T(':'))) { if (name[5] == '\0') id->prefix = &dtd.defaultPrefix; else id->prefix = (PREFIX *)lookup(&dtd.prefixes, name + 6, sizeof(PREFIX)); id->xmlns = 1; } else { int i; for (i = 0; name[i]; i++) { if (name[i] == XML_T(':')) { int j; for (j = 0; j < i; j++) { if (!poolAppendChar(&dtd.pool, name[j])) return 0; } if (!poolAppendChar(&dtd.pool, XML_T('\0'))) return 0; id->prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX)); if (id->prefix->name == poolStart(&dtd.pool)) poolFinish(&dtd.pool); else poolDiscard(&dtd.pool); break; } } } } return id; } #define CONTEXT_SEP XML_T('\f') static const XML_Char *getContext(XML_Parser parser) { HASH_TABLE_ITER iter; int needSep = 0; if (dtd.defaultPrefix.binding) { int i; int len; if (!poolAppendChar(&tempPool, XML_T('='))) return 0; len = dtd.defaultPrefix.binding->uriLen; if (namespaceSeparator != XML_T('\0')) len--; for (i = 0; i < len; i++) if (!poolAppendChar(&tempPool, dtd.defaultPrefix.binding->uri[i])) return 0; needSep = 1; } hashTableIterInit(&iter, &(dtd.prefixes)); for (;;) { int i; int len; const XML_Char *s; PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter); if (!prefix) break; if (!prefix->binding) continue; if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) return 0; for (s = prefix->name; *s; s++) if (!poolAppendChar(&tempPool, *s)) return 0; if (!poolAppendChar(&tempPool, XML_T('='))) return 0; len = prefix->binding->uriLen; if (namespaceSeparator != XML_T('\0')) len--; for (i = 0; i < len; i++) if (!poolAppendChar(&tempPool, prefix->binding->uri[i])) return 0; needSep = 1; } hashTableIterInit(&iter, &(dtd.generalEntities)); for (;;) { const XML_Char *s; ENTITY *e = (ENTITY *)hashTableIterNext(&iter); if (!e) break; if (!e->open) continue; if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) return 0; for (s = e->name; *s; s++) if (!poolAppendChar(&tempPool, *s)) return 0; needSep = 1; } if (!poolAppendChar(&tempPool, XML_T('\0'))) return 0; return tempPool.start; } static int setContext(XML_Parser parser, const XML_Char *context) { const XML_Char *s = context; while (*context != XML_T('\0')) { if (*s == CONTEXT_SEP || *s == XML_T('\0')) { ENTITY *e; if (!poolAppendChar(&tempPool, XML_T('\0'))) return 0; e = (ENTITY *)lookup(&dtd.generalEntities, poolStart(&tempPool), 0); if (e) e->open = 1; if (*s != XML_T('\0')) s++; context = s; poolDiscard(&tempPool); } else if (*s == '=') { PREFIX *prefix; if (poolLength(&tempPool) == 0) prefix = &dtd.defaultPrefix; else { if (!poolAppendChar(&tempPool, XML_T('\0'))) return 0; prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&tempPool), sizeof(PREFIX)); if (!prefix) return 0; if (prefix->name == poolStart(&tempPool)) poolFinish(&tempPool); else poolDiscard(&tempPool); } for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0'); context++) if (!poolAppendChar(&tempPool, *context)) return 0; if (!poolAppendChar(&tempPool, XML_T('\0'))) return 0; if (!addBinding(parser, prefix, 0, poolStart(&tempPool), &inheritedBindings)) return 0; poolDiscard(&tempPool); if (*context != XML_T('\0')) ++context; s = context; } else { if (!poolAppendChar(&tempPool, *s)) return 0; s++; } } return 1; } static void normalizePublicId(XML_Char *publicId) { XML_Char *p = publicId; XML_Char *s; for (s = publicId; *s; s++) { switch (*s) { case 0x20: case 0xD: case 0xA: if (p != publicId && p[-1] != 0x20) *p++ = 0x20; break; default: *p++ = *s; } } if (p != publicId && p[-1] == 0x20) --p; *p = XML_T('\0'); } static int dtdInit(DTD *p) { poolInit(&(p->pool)); hashTableInit(&(p->generalEntities)); hashTableInit(&(p->elementTypes)); hashTableInit(&(p->attributeIds)); hashTableInit(&(p->prefixes)); p->complete = 1; p->standalone = 0; #ifdef XML_DTD hashTableInit(&(p->paramEntities)); #endif /* XML_DTD */ p->defaultPrefix.name = 0; p->defaultPrefix.binding = 0; return 1; } #ifdef XML_DTD static void dtdSwap(DTD *p1, DTD *p2) { DTD tem; memcpy(&tem, p1, sizeof(DTD)); memcpy(p1, p2, sizeof(DTD)); memcpy(p2, &tem, sizeof(DTD)); } #endif /* XML_DTD */ static void dtdDestroy(DTD *p) { HASH_TABLE_ITER iter; hashTableIterInit(&iter, &(p->elementTypes)); for (;;) { ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); if (!e) break; if (e->allocDefaultAtts != 0) free(e->defaultAtts); } hashTableDestroy(&(p->generalEntities)); #ifdef XML_DTD hashTableDestroy(&(p->paramEntities)); #endif /* XML_DTD */ hashTableDestroy(&(p->elementTypes)); hashTableDestroy(&(p->attributeIds)); hashTableDestroy(&(p->prefixes)); poolDestroy(&(p->pool)); } /* Do a deep copy of the DTD. Return 0 for out of memory; non-zero otherwise. The new DTD has already been initialized. */ static int dtdCopy(DTD *newDtd, const DTD *oldDtd) { HASH_TABLE_ITER iter; /* Copy the prefix table. */ hashTableIterInit(&iter, &(oldDtd->prefixes)); for (;;) { const XML_Char *name; const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter); if (!oldP) break; name = poolCopyString(&(newDtd->pool), oldP->name); if (!name) return 0; if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX))) return 0; } hashTableIterInit(&iter, &(oldDtd->attributeIds)); /* Copy the attribute id table. */ for (;;) { ATTRIBUTE_ID *newA; const XML_Char *name; const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter); if (!oldA) break; /* Remember to allocate the scratch byte before the name. */ if (!poolAppendChar(&(newDtd->pool), XML_T('\0'))) return 0; name = poolCopyString(&(newDtd->pool), oldA->name); if (!name) return 0; ++name; newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name, sizeof(ATTRIBUTE_ID)); if (!newA) return 0; newA->maybeTokenized = oldA->maybeTokenized; if (oldA->prefix) { newA->xmlns = oldA->xmlns; if (oldA->prefix == &oldDtd->defaultPrefix) newA->prefix = &newDtd->defaultPrefix; else newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldA->prefix->name, 0); } } /* Copy the element type table. */ hashTableIterInit(&iter, &(oldDtd->elementTypes)); for (;;) { int i; ELEMENT_TYPE *newE; const XML_Char *name; const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter); if (!oldE) break; name = poolCopyString(&(newDtd->pool), oldE->name); if (!name) return 0; newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name, sizeof(ELEMENT_TYPE)); if (!newE) return 0; if (oldE->nDefaultAtts) { newE->defaultAtts = (DEFAULT_ATTRIBUTE *)malloc(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); if (!newE->defaultAtts) return 0; } newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; if (oldE->prefix) newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldE->prefix->name, 0); for (i = 0; i < newE->nDefaultAtts; i++) { newE->defaultAtts[i].id = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; if (oldE->defaultAtts[i].value) { newE->defaultAtts[i].value = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); if (!newE->defaultAtts[i].value) return 0; } else newE->defaultAtts[i].value = 0; } } /* Copy the entity tables. */ if (!copyEntityTable(&(newDtd->generalEntities), &(newDtd->pool), &(oldDtd->generalEntities))) return 0; #ifdef XML_DTD if (!copyEntityTable(&(newDtd->paramEntities), &(newDtd->pool), &(oldDtd->paramEntities))) return 0; #endif /* XML_DTD */ newDtd->complete = oldDtd->complete; newDtd->standalone = oldDtd->standalone; return 1; } static int copyEntityTable(HASH_TABLE *newTable, STRING_POOL *newPool, const HASH_TABLE *oldTable) { HASH_TABLE_ITER iter; const XML_Char *cachedOldBase = 0; const XML_Char *cachedNewBase = 0; hashTableIterInit(&iter, oldTable); for (;;) { ENTITY *newE; const XML_Char *name; const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter); if (!oldE) break; name = poolCopyString(newPool, oldE->name); if (!name) return 0; newE = (ENTITY *)lookup(newTable, name, sizeof(ENTITY)); if (!newE) return 0; if (oldE->systemId) { const XML_Char *tem = poolCopyString(newPool, oldE->systemId); if (!tem) return 0; newE->systemId = tem; if (oldE->base) { if (oldE->base == cachedOldBase) newE->base = cachedNewBase; else { cachedOldBase = oldE->base; tem = poolCopyString(newPool, cachedOldBase); if (!tem) return 0; cachedNewBase = newE->base = tem; } } } else { const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, oldE->textLen); if (!tem) return 0; newE->textPtr = tem; newE->textLen = oldE->textLen; } if (oldE->notation) { const XML_Char *tem = poolCopyString(newPool, oldE->notation); if (!tem) return 0; newE->notation = tem; } } return 1; } static void poolInit(STRING_POOL *pool) { pool->blocks = 0; pool->freeBlocks = 0; pool->start = 0; pool->ptr = 0; pool->end = 0; } static void poolClear(STRING_POOL *pool) { if (!pool->freeBlocks) pool->freeBlocks = pool->blocks; else { BLOCK *p = pool->blocks; while (p) { BLOCK *tem = p->next; p->next = pool->freeBlocks; pool->freeBlocks = p; p = tem; } } pool->blocks = 0; pool->start = 0; pool->ptr = 0; pool->end = 0; } static void poolDestroy(STRING_POOL *pool) { BLOCK *p = pool->blocks; while (p) { BLOCK *tem = p->next; free(p); p = tem; } pool->blocks = 0; p = pool->freeBlocks; while (p) { BLOCK *tem = p->next; free(p); p = tem; } pool->freeBlocks = 0; pool->ptr = 0; pool->start = 0; pool->end = 0; } static XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end) { if (!pool->ptr && !poolGrow(pool)) return 0; for (;;) { XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); if (ptr == end) break; if (!poolGrow(pool)) return 0; } return pool->start; } static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s) { do { if (!poolAppendChar(pool, *s)) return 0; } while (*s++); s = pool->start; poolFinish(pool); return s; } static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n) { if (!pool->ptr && !poolGrow(pool)) return 0; for (; n > 0; --n, s++) { if (!poolAppendChar(pool, *s)) return 0; } s = pool->start; poolFinish(pool); return s; } static XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end) { if (!poolAppend(pool, enc, ptr, end)) return 0; if (pool->ptr == pool->end && !poolGrow(pool)) return 0; *(pool->ptr)++ = 0; return pool->start; } static int poolGrow(STRING_POOL *pool) { if (pool->freeBlocks) { if (pool->start == 0) { pool->blocks = pool->freeBlocks; pool->freeBlocks = pool->freeBlocks->next; pool->blocks->next = 0; pool->start = pool->blocks->s; pool->end = pool->start + pool->blocks->size; pool->ptr = pool->start; return 1; } if (pool->end - pool->start < pool->freeBlocks->size) { BLOCK *tem = pool->freeBlocks->next; pool->freeBlocks->next = pool->blocks; pool->blocks = pool->freeBlocks; pool->freeBlocks = tem; memcpy(pool->blocks->s, pool->start, (pool->end - pool->start) * sizeof(XML_Char)); pool->ptr = pool->blocks->s + (pool->ptr - pool->start); pool->start = pool->blocks->s; pool->end = pool->start + pool->blocks->size; return 1; } } if (pool->blocks && pool->start == pool->blocks->s) { int blockSize = (pool->end - pool->start)*2; pool->blocks = realloc(pool->blocks, offsetof(BLOCK, s) + blockSize * sizeof(XML_Char)); if (!pool->blocks) return 0; pool->blocks->size = blockSize; pool->ptr = pool->blocks->s + (pool->ptr - pool->start); pool->start = pool->blocks->s; pool->end = pool->start + blockSize; } else { BLOCK *tem; int blockSize = pool->end - pool->start; if (blockSize < INIT_BLOCK_SIZE) blockSize = INIT_BLOCK_SIZE; else blockSize *= 2; tem = malloc(offsetof(BLOCK, s) + blockSize * sizeof(XML_Char)); if (!tem) return 0; tem->size = blockSize; tem->next = pool->blocks; pool->blocks = tem; memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char)); pool->ptr = tem->s + (pool->ptr - pool->start); pool->start = tem->s; pool->end = tem->s + blockSize; } return 1; } ������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/xmlparse.h������������������������������������������������������������0100644�0000764�0000144�00000047061�07152424061�020212� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #ifndef XmlParse_INCLUDED #define XmlParse_INCLUDED 1 #ifdef __cplusplus extern "C" { #endif #ifndef XMLPARSEAPI #define XMLPARSEAPI /* as nothing */ #endif typedef void *XML_Parser; #ifdef XML_UNICODE_WCHAR_T /* XML_UNICODE_WCHAR_T will work only if sizeof(wchar_t) == 2 and wchar_t uses Unicode. */ /* Information is UTF-16 encoded as wchar_ts */ #ifndef XML_UNICODE #define XML_UNICODE #endif #include <stddef.h> typedef wchar_t XML_Char; typedef wchar_t XML_LChar; #else /* not XML_UNICODE_WCHAR_T */ #ifdef XML_UNICODE /* Information is UTF-16 encoded as unsigned shorts */ typedef unsigned short XML_Char; typedef char XML_LChar; #else /* not XML_UNICODE */ /* Information is UTF-8 encoded. */ typedef char XML_Char; typedef char XML_LChar; #endif /* not XML_UNICODE */ #endif /* not XML_UNICODE_WCHAR_T */ /* Constructs a new parser; encoding is the encoding specified by the external protocol or null if there is none specified. */ XML_Parser XMLPARSEAPI XML_ParserCreate(const XML_Char *encoding); /* Constructs a new parser and namespace processor. Element type names and attribute names that belong to a namespace will be expanded; unprefixed attribute names are never expanded; unprefixed element type names are expanded only if there is a default namespace. The expanded name is the concatenation of the namespace URI, the namespace separator character, and the local part of the name. If the namespace separator is '\0' then the namespace URI and the local part will be concatenated without any separator. When a namespace is not declared, the name and prefix will be passed through without expansion. */ XML_Parser XMLPARSEAPI XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); /* atts is array of name/value pairs, terminated by 0; names and values are 0 terminated. */ typedef void (*XML_StartElementHandler)(void *userData, const XML_Char *name, const XML_Char **atts); typedef void (*XML_EndElementHandler)(void *userData, const XML_Char *name); /* s is not 0 terminated. */ typedef void (*XML_CharacterDataHandler)(void *userData, const XML_Char *s, int len); /* target and data are 0 terminated */ typedef void (*XML_ProcessingInstructionHandler)(void *userData, const XML_Char *target, const XML_Char *data); /* data is 0 terminated */ typedef void (*XML_CommentHandler)(void *userData, const XML_Char *data); typedef void (*XML_StartCdataSectionHandler)(void *userData); typedef void (*XML_EndCdataSectionHandler)(void *userData); /* This is called for any characters in the XML document for which there is no applicable handler. This includes both characters that are part of markup which is of a kind that is not reported (comments, markup declarations), or characters that are part of a construct which could be reported but for which no handler has been supplied. The characters are passed exactly as they were in the XML document except that they will be encoded in UTF-8. Line boundaries are not normalized. Note that a byte order mark character is not passed to the default handler. There are no guarantees about how characters are divided between calls to the default handler: for example, a comment might be split between multiple calls. */ typedef void (*XML_DefaultHandler)(void *userData, const XML_Char *s, int len); /* This is called for the start of the DOCTYPE declaration when the name of the DOCTYPE is encountered. */ typedef void (*XML_StartDoctypeDeclHandler)(void *userData, const XML_Char *doctypeName); /* This is called for the start of the DOCTYPE declaration when the closing > is encountered, but after processing any external subset. */ typedef void (*XML_EndDoctypeDeclHandler)(void *userData); /* This is called for a declaration of an unparsed (NDATA) entity. The base argument is whatever was set by XML_SetBase. The entityName, systemId and notationName arguments will never be null. The other arguments may be. */ typedef void (*XML_UnparsedEntityDeclHandler)(void *userData, const XML_Char *entityName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName); /* This is called for a declaration of notation. The base argument is whatever was set by XML_SetBase. The notationName will never be null. The other arguments can be. */ typedef void (*XML_NotationDeclHandler)(void *userData, const XML_Char *notationName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); /* When namespace processing is enabled, these are called once for each namespace declaration. The call to the start and end element handlers occur between the calls to the start and end namespace declaration handlers. For an xmlns attribute, prefix will be null. For an xmlns="" attribute, uri will be null. */ typedef void (*XML_StartNamespaceDeclHandler)(void *userData, const XML_Char *prefix, const XML_Char *uri); typedef void (*XML_EndNamespaceDeclHandler)(void *userData, const XML_Char *prefix); /* This is called if the document is not standalone (it has an external subset or a reference to a parameter entity, but does not have standalone="yes"). If this handler returns 0, then processing will not continue, and the parser will return a XML_ERROR_NOT_STANDALONE error. */ typedef int (*XML_NotStandaloneHandler)(void *userData); /* This is called for a reference to an external parsed general entity. The referenced entity is not automatically parsed. The application can parse it immediately or later using XML_ExternalEntityParserCreate. The parser argument is the parser parsing the entity containing the reference; it can be passed as the parser argument to XML_ExternalEntityParserCreate. The systemId argument is the system identifier as specified in the entity declaration; it will not be null. The base argument is the system identifier that should be used as the base for resolving systemId if systemId was relative; this is set by XML_SetBase; it may be null. The publicId argument is the public identifier as specified in the entity declaration, or null if none was specified; the whitespace in the public identifier will have been normalized as required by the XML spec. The context argument specifies the parsing context in the format expected by the context argument to XML_ExternalEntityParserCreate; context is valid only until the handler returns, so if the referenced entity is to be parsed later, it must be copied. The handler should return 0 if processing should not continue because of a fatal error in the handling of the external entity. In this case the calling parser will return an XML_ERROR_EXTERNAL_ENTITY_HANDLING error. Note that unlike other handlers the first argument is the parser, not userData. */ typedef int (*XML_ExternalEntityRefHandler)(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); /* This structure is filled in by the XML_UnknownEncodingHandler to provide information to the parser about encodings that are unknown to the parser. The map[b] member gives information about byte sequences whose first byte is b. If map[b] is c where c is >= 0, then b by itself encodes the Unicode scalar value c. If map[b] is -1, then the byte sequence is malformed. If map[b] is -n, where n >= 2, then b is the first byte of an n-byte sequence that encodes a single Unicode scalar value. The data member will be passed as the first argument to the convert function. The convert function is used to convert multibyte sequences; s will point to a n-byte sequence where map[(unsigned char)*s] == -n. The convert function must return the Unicode scalar value represented by this byte sequence or -1 if the byte sequence is malformed. The convert function may be null if the encoding is a single-byte encoding, that is if map[b] >= -1 for all bytes b. When the parser is finished with the encoding, then if release is not null, it will call release passing it the data member; once release has been called, the convert function will not be called again. Expat places certain restrictions on the encodings that are supported using this mechanism. 1. Every ASCII character that can appear in a well-formed XML document, other than the characters $@\^`{}~ must be represented by a single byte, and that byte must be the same byte that represents that character in ASCII. 2. No character may require more than 4 bytes to encode. 3. All characters encoded must have Unicode scalar values <= 0xFFFF, (ie characters that would be encoded by surrogates in UTF-16 are not allowed). Note that this restriction doesn't apply to the built-in support for UTF-8 and UTF-16. 4. No Unicode character may be encoded by more than one distinct sequence of bytes. */ typedef struct { int map[256]; void *data; int (*convert)(void *data, const char *s); void (*release)(void *data); } XML_Encoding; /* This is called for an encoding that is unknown to the parser. The encodingHandlerData argument is that which was passed as the second argument to XML_SetUnknownEncodingHandler. The name argument gives the name of the encoding as specified in the encoding declaration. If the callback can provide information about the encoding, it must fill in the XML_Encoding structure, and return 1. Otherwise it must return 0. If info does not describe a suitable encoding, then the parser will return an XML_UNKNOWN_ENCODING error. */ typedef int (*XML_UnknownEncodingHandler)(void *encodingHandlerData, const XML_Char *name, XML_Encoding *info); void XMLPARSEAPI XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end); void XMLPARSEAPI XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler); void XMLPARSEAPI XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler handler); void XMLPARSEAPI XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler); void XMLPARSEAPI XML_SetCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start, XML_EndCdataSectionHandler end); /* This sets the default handler and also inhibits expansion of internal entities. The entity reference will be passed to the default handler. */ void XMLPARSEAPI XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler); /* This sets the default handler but does not inhibit expansion of internal entities. The entity reference will not be passed to the default handler. */ void XMLPARSEAPI XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler); void XMLPARSEAPI XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, XML_EndDoctypeDeclHandler end); void XMLPARSEAPI XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler handler); void XMLPARSEAPI XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler); void XMLPARSEAPI XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end); void XMLPARSEAPI XML_SetNotStandaloneHandler(XML_Parser parser, XML_NotStandaloneHandler handler); void XMLPARSEAPI XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler); /* If a non-null value for arg is specified here, then it will be passed as the first argument to the external entity ref handler instead of the parser object. */ void XMLPARSEAPI XML_SetExternalEntityRefHandlerArg(XML_Parser, void *arg); void XMLPARSEAPI XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *encodingHandlerData); /* This can be called within a handler for a start element, end element, processing instruction or character data. It causes the corresponding markup to be passed to the default handler. */ void XMLPARSEAPI XML_DefaultCurrent(XML_Parser parser); /* This value is passed as the userData argument to callbacks. */ void XMLPARSEAPI XML_SetUserData(XML_Parser parser, void *userData); /* Returns the last value set by XML_SetUserData or null. */ #define XML_GetUserData(parser) (*(void **)(parser)) /* This is equivalent to supplying an encoding argument to XML_ParserCreate. It must not be called after XML_Parse or XML_ParseBuffer. */ int XMLPARSEAPI XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); /* If this function is called, then the parser will be passed as the first argument to callbacks instead of userData. The userData will still be accessible using XML_GetUserData. */ void XMLPARSEAPI XML_UseParserAsHandlerArg(XML_Parser parser); /* Sets the base to be used for resolving relative URIs in system identifiers in declarations. Resolving relative identifiers is left to the application: this value will be passed through as the base argument to the XML_ExternalEntityRefHandler, XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base argument will be copied. Returns zero if out of memory, non-zero otherwise. */ int XMLPARSEAPI XML_SetBase(XML_Parser parser, const XML_Char *base); const XML_Char XMLPARSEAPI * XML_GetBase(XML_Parser parser); /* Returns the number of the attributes passed in last call to the XML_StartElementHandler that were specified in the start-tag rather than defaulted. */ int XMLPARSEAPI XML_GetSpecifiedAttributeCount(XML_Parser parser); /* Parses some input. Returns 0 if a fatal error is detected. The last call to XML_Parse must have isFinal true; len may be zero for this call (or any other). */ int XMLPARSEAPI XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); void XMLPARSEAPI * XML_GetBuffer(XML_Parser parser, int len); int XMLPARSEAPI XML_ParseBuffer(XML_Parser parser, int len, int isFinal); /* Creates an XML_Parser object that can parse an external general entity; context is a '\0'-terminated string specifying the parse context; encoding is a '\0'-terminated string giving the name of the externally specified encoding, or null if there is no externally specified encoding. The context string consists of a sequence of tokens separated by formfeeds (\f); a token consisting of a name specifies that the general entity of the name is open; a token of the form prefix=uri specifies the namespace for a particular prefix; a token of the form =uri specifies the default namespace. This can be called at any point after the first call to an ExternalEntityRefHandler so longer as the parser has not yet been freed. The new parser is completely independent and may safely be used in a separate thread. The handlers and userData are initialized from the parser argument. Returns 0 if out of memory. Otherwise returns a new XML_Parser object. */ XML_Parser XMLPARSEAPI XML_ExternalEntityParserCreate(XML_Parser parser, const XML_Char *context, const XML_Char *encoding); enum XML_ParamEntityParsing { XML_PARAM_ENTITY_PARSING_NEVER, XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, XML_PARAM_ENTITY_PARSING_ALWAYS }; /* Controls parsing of parameter entities (including the external DTD subset). If parsing of parameter entities is enabled, then references to external parameter entities (including the external DTD subset) will be passed to the handler set with XML_SetExternalEntityRefHandler. The context passed will be 0. Unlike external general entities, external parameter entities can only be parsed synchronously. If the external parameter entity is to be parsed, it must be parsed during the call to the external entity ref handler: the complete sequence of XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and XML_ParserFree calls must be made during this call. After XML_ExternalEntityParserCreate has been called to create the parser for the external parameter entity (context must be 0 for this call), it is illegal to make any calls on the old parser until XML_ParserFree has been called on the newly created parser. If the library has been compiled without support for parameter entity parsing (ie without XML_DTD being defined), then XML_SetParamEntityParsing will return 0 if parsing of parameter entities is requested; otherwise it will return non-zero. */ int XMLPARSEAPI XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing parsing); enum XML_Error { XML_ERROR_NONE, XML_ERROR_NO_MEMORY, XML_ERROR_SYNTAX, XML_ERROR_NO_ELEMENTS, XML_ERROR_INVALID_TOKEN, XML_ERROR_UNCLOSED_TOKEN, XML_ERROR_PARTIAL_CHAR, XML_ERROR_TAG_MISMATCH, XML_ERROR_DUPLICATE_ATTRIBUTE, XML_ERROR_JUNK_AFTER_DOC_ELEMENT, XML_ERROR_PARAM_ENTITY_REF, XML_ERROR_UNDEFINED_ENTITY, XML_ERROR_RECURSIVE_ENTITY_REF, XML_ERROR_ASYNC_ENTITY, XML_ERROR_BAD_CHAR_REF, XML_ERROR_BINARY_ENTITY_REF, XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, XML_ERROR_MISPLACED_XML_PI, XML_ERROR_UNKNOWN_ENCODING, XML_ERROR_INCORRECT_ENCODING, XML_ERROR_UNCLOSED_CDATA_SECTION, XML_ERROR_EXTERNAL_ENTITY_HANDLING, XML_ERROR_NOT_STANDALONE }; /* If XML_Parse or XML_ParseBuffer have returned 0, then XML_GetErrorCode returns information about the error. */ enum XML_Error XMLPARSEAPI XML_GetErrorCode(XML_Parser parser); /* These functions return information about the current parse location. They may be called when XML_Parse or XML_ParseBuffer return 0; in this case the location is the location of the character at which the error was detected. They may also be called from any other callback called to report some parse event; in this the location is the location of the first of the sequence of characters that generated the event. */ int XMLPARSEAPI XML_GetCurrentLineNumber(XML_Parser parser); int XMLPARSEAPI XML_GetCurrentColumnNumber(XML_Parser parser); long XMLPARSEAPI XML_GetCurrentByteIndex(XML_Parser parser); /* Return the number of bytes in the current event. Returns 0 if the event is in an internal entity. */ int XMLPARSEAPI XML_GetCurrentByteCount(XML_Parser parser); /* For backwards compatibility with previous versions. */ #define XML_GetErrorLineNumber XML_GetCurrentLineNumber #define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber #define XML_GetErrorByteIndex XML_GetCurrentByteIndex /* Frees memory used by the parser. */ void XMLPARSEAPI XML_ParserFree(XML_Parser parser); /* Returns a string describing the error. */ const XML_LChar XMLPARSEAPI *XML_ErrorString(int code); #ifdef __cplusplus } #endif #endif /* not XmlParse_INCLUDED */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/Makefile.in�����������������������������������������������������������0100644�0000764�0000144�00000025751�07405520524�020257� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ LDFLAGS = -version-info "1:0:1" CFLAGS = @CFLAGS@ -DXML_NS lib_LTLIBRARIES = @XMLPARSE@ EXTRA_LTLIBRARIES = libxmlparse.la INCLUDES = -I$(srcdir)/../xmltok libxmlparse_la_SOURCES = hashtable.h hashtable.c xmlparse.c libxmlparse_la_LDFLAGS = -rpath $(libdir) pkginclude_HEADERS = xmlparse.h mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../../.. CPPFLAGS = @CPPFLAGS@ LIBS = @LIBS@ libxmlparse_la_LIBADD = libxmlparse_la_OBJECTS = hashtable.lo xmlparse.lo COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(pkginclude_HEADERS) DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/hashtable.P .deps/xmlparse.P SOURCES = $(libxmlparse_la_SOURCES) OBJECTS = $(libxmlparse_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/expat/xmlparse/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libxmlparse.la: $(libxmlparse_la_OBJECTS) $(libxmlparse_la_DEPENDENCIES) $(LINK) $(libxmlparse_la_LDFLAGS) $(libxmlparse_la_OBJECTS) $(libxmlparse_la_LIBADD) $(LIBS) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgincludedir) @list='$(pkginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p"; \ $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) list='$(pkginclude_HEADERS)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkgincludedir)/$$p; \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules/expat/xmlparse distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/expat/xmlparse/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-pkgincludeHEADERS install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(pkgincludedir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool uninstall-pkgincludeHEADERS \ install-pkgincludeHEADERS tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������libwww/modules/expat/xmlparse/.deps/����������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520671�017217� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/.deps/hashtable.P�����������������������������������������������������0100644�0000764�0000144�00000002467�07405520665�021304� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hashtable.lo hashtable.o : hashtable.c ../xmltok/xmldef.h /usr/include/string.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/endian.h /usr/include/bits/endian.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/stdlib.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/alloca.h hashtable.h hashtable.c : ../xmltok/xmldef.h : /usr/include/string.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/stdlib.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/alloca.h : hashtable.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmlparse/.deps/xmlparse.P������������������������������������������������������0100644�0000764�0000144�00000002641�07405520671�021173� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������xmlparse.lo xmlparse.o : xmlparse.c ../xmltok/xmldef.h /usr/include/string.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/endian.h /usr/include/bits/endian.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/stdlib.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/alloca.h xmlparse.h ../xmltok/xmltok.h ../xmltok/xmlrole.h \ hashtable.h xmlparse.c : ../xmltok/xmldef.h : /usr/include/string.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/stdlib.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/alloca.h : xmlparse.h : ../xmltok/xmltok.h : ../xmltok/xmlrole.h : hashtable.h : �����������������������������������������������������������������������������������������������libwww/modules/expat/.cvsignore���������������������������������������������������������������������0100644�0000764�0000144�00000000033�06704453450�016345� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.deps Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/MPL-1_0.html�������������������������������������������������������������������0100644�0000764�0000144�00000047303�06664116442�016255� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<TITLE>Mozilla Public License version 1.0</TITLE> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000"> <P ALIGN=CENTER> <FONT SIZE="+2"><B>MOZILLA PUBLIC LICENSE</B></FONT><BR> <B>Version 1.0</B> </P> <P><HR WIDTH="20%"><P> <P><B>1. Definitions.</B> <UL> <B>1.1. ``Contributor''</B> means each entity that creates or contributes to the creation of Modifications. <P><B>1.2. ``Contributor Version''</B> means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. <P><B>1.3. ``Covered Code''</B> means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof<B>.</B> <P><B>1.4. ``Electronic Distribution Mechanism''</B> means a mechanism generally accepted in the software development community for the electronic transfer of data. <P><B>1.5. ``Executable''</B> means Covered Code in any form other than Source Code. <P><B>1.6. ``Initial Developer''</B> means the individual or entity identified as the Initial Developer in the Source Code notice required by <B>Exhibit A</B>. <P><B>1.7. ``Larger Work''</B> means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. <P><B>1.8. ``License''</B> means this document. <P><B>1.9. ``Modifications''</B> means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: <UL> <P><B>A.</B> Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. <P><B>B.</B> Any new file that contains any part of the Original Code or previous Modifications. </UL> <P><B>1.10. ``Original Code''</B> means Source Code of computer software code which is described in the Source Code notice required by <B>Exhibit A</B> as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. <P><B>1.11. ``Source Code''</B> means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. <P><B>1.12. ``You''</B> means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, ``You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, ``control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity. </UL> <B>2. Source Code License.</B> <UL> <B>2.1. The Initial Developer Grant.</B> <BR>The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: <UL> <P><B>(a)</B> to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and <P><B>(b)</B> under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell (``Utilize'') the Original Code (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or combinations. </UL> <P><B>2.2. Contributor Grant.</B> <BR>Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: <UL> <P><B>(a)</B> to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code or as part of a Larger Work; and <P><B>(b)</B> under patents now or hereafter owned or controlled by Contributor, to Utilize the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Contributor Version (or portions thereof), and not to any greater extent that may be necessary to Utilize further Modifications or combinations. </UL> </UL> <B>3. Distribution Obligations.</B> <UL> <B>3.1. Application of License.</B> <BR>The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section <B>2.2</B>. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section <B>6.1</B>, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section <B>3.5</B>. <P><B>3.2. Availability of Source Code.</B> <BR>Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. <P><B>3.3. Description of Modifications.</B> <BR>You must cause all Covered Code to which you contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. <P><B>3.4. Intellectual Property Matters</B> <UL> <P><B>(a) Third Party Claims</B>. <BR>If You have knowledge that a party claims an intellectual property right in particular functionality or code (or its utilization under this License), you must include a text file with the source code distribution titled ``LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after You make Your Modification available as described in Section <B>3.2</B>, You shall promptly modify the LEGAL file in all copies You make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. <P><B>(b) Contributor APIs</B>. <BR>If Your Modification is an application programming interface and You own or control patents which are reasonably necessary to implement that API, you must also include this information in the LEGAL file. </UL> <P><B>3.5. Required Notices.</B> <BR>You must duplicate the notice in <B>Exhibit A</B> in each file of the Source Code, and this License in any documentation for the Source Code, where You describe recipients' rights relating to Covered Code. If You created one or more Modification(s), You may add your name as a Contributor to the notice described in <B>Exhibit A</B>. If it is not possible to put such notice in a particular Source Code file due to its structure, then you must include such notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. <P><B>3.6. Distribution of Executable Versions.</B> <BR>You may distribute Covered Code in Executable form only if the requirements of Section <B>3.1-3.5</B> have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section <B>3.2</B>. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. <P><B>3.7. Larger Works.</B> <BR>You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. </UL> <B>4. Inability to Comply Due to Statute or Regulation.</B> <UL> <P>If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section <B>3.4</B> and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. </UL> <B>5. Application of this License.</B> <UL> This License applies to code to which the Initial Developer has attached the notice in <B>Exhibit A</B>, and to related Covered Code. </UL> <B>6. Versions of the License.</B> <UL> <B>6.1. New Versions</B>. <BR>Netscape Communications Corporation (``Netscape'') may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. <P><B>6.2. Effect of New Versions</B>. <BR>Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. <P><B>6.3. Derivative Works</B>. <BR>If you create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), you must (a) rename Your license so that the phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or any confusingly similar phrase do not appear anywhere in your license and (b) otherwise make it clear that your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in <B>Exhibit A</B> shall not of themselves be deemed to be modifications of this License.) </UL> <B>7. DISCLAIMER OF WARRANTY.</B> <UL> COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. </UL> <B>8. TERMINATION.</B> <UL> This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. </UL> <B>9. LIMITATION OF LIABILITY.</B> <UL> UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. </UL> <B>10. U.S. GOVERNMENT END USERS.</B> <UL> The Covered Code is a ``commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software'' and ``commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. </UL> <B>11. MISCELLANEOUS.</B> <UL> This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in, the United States of America: (a) unless otherwise agreed in writing, all disputes relating to this License (excepting any dispute relating to intellectual property rights) shall be subject to final and binding arbitration, with the losing party paying all costs of arbitration; (b) any arbitration relating to this Agreement shall be held in Santa Clara County, California, under the auspices of JAMS/EndDispute; and (c) any litigation relating to this Agreement shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. </UL> <B>12. RESPONSIBILITY FOR CLAIMS.</B> <UL> Except in cases where another Contributor has failed to comply with Section <B>3.4</B>, You are responsible for damages arising, directly or indirectly, out of Your utilization of rights under this License, based on the number of copies of Covered Code you made available, the revenues you received from utilizing such rights, and other relevant factors. You agree to work with affected parties to distribute responsibility on an equitable basis. </UL> <B>EXHIBIT A.</B> <UL> ``The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ <P>Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. <P>The Original Code is ______________________________________. <P>The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved. <P>Contributor(s): ______________________________________.'' </UL> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/Makefile.am��������������������������������������������������������������������0100644�0000764�0000144�00000000221�06664116442�016402� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) SUBDIRS = xmltok xmlparse �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/expat.html���������������������������������������������������������������������0100644�0000764�0000144�00000006243�07152424060�016356� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <HTML> <TITLE>expat</TITLE> <BODY> <H1>expat - XML Parser Toolkit</H1> <H3>Version 19991013</H3> <P>Copyright (c) 1998, 1999 James Clark. Expat is subject to the Mozilla Public License Version 1.1. Alternatively you may use expat under the GNU General Public License instead. Please contact me if you wish to negotiate an alternative license.</P> <P>This is a test version of expat which adds support for parsing external DTDs and parameter entities. Compiling with -DXML_DTD enables this support. There's a new <CODE>-p</CODE> option for xmlwf which will cause it to process external DTDs and parameter entities; this implies the <CODE>-x</CODE> option. See the comment above <CODE>XML_SetParamEntityParsing</CODE> in <CODE>xmlparse.h</CODE> for the API addition that enables this.</P> <P>Expat is an <A HREF="http://www.w3.org/TR/1998/REC-xml-19980210">XML 1.0</A> parser written in C. It aims to be fully conforming. It is currently not a validating XML processor. The current production version of expat can be downloaded from <A href = "ftp://ftp.jclark.com/pub/xml/expat.zip" >ftp://ftp.jclark.com/pub/xml/expat.zip</A>.</P> <P>The directory <SAMP>xmltok</SAMP> contains a low-level library for tokenizing XML. The interface is documented in <SAMP>xmltok/xmltok.h</SAMP>.</P> <P>The directory <SAMP>xmlparse</SAMP> contains an XML parser library which is built on top of the <SAMP>xmltok</SAMP> library. The interface is documented in <SAMP>xmlparse/xmlparse.h</SAMP>. The directory <SAMP>sample</SAMP> contains a simple example program using this interface; <SAMP>sample/build.bat</SAMP> is a batch file to build the example using Visual C++.</P> <P>The directory <SAMP>xmlwf</SAMP> contains the <SAMP>xmlwf</SAMP> application, which uses the <SAMP>xmlparse</SAMP> library. The arguments to <SAMP>xmlwf</SAMP> are one or more files which are each to be checked for well-formedness. An option <SAMP>-d <VAR>dir</VAR></SAMP> can be specified; for each well-formed input file the corresponding <A href="http://www.jclark.com/xml/canonxml.html">canonical XML</A> will be written to <SAMP>dir/<VAR>f</VAR></SAMP>, where <SAMP><VAR>f</VAR></SAMP> is the filename (without any path) of the input file. A <CODE>-x</CODE> option will cause references to external general entities to be processed. A <CODE>-s</CODE> option will make documents that are not standalone cause an error (a document is considered standalone if either it is intrinsically standalone because it has no external subset and no references to parameter entities in the internal subset or it is declared as standalone in the XML declaration).</P> <P>The <SAMP>bin</SAMP> directory contains Win32 executables. The <SAMP>lib</SAMP> directory contains Win32 import libraries.</P> <P>Answers to some frequently asked questions about expat can be found in the <A HREF="http://www.jclark.com/xml/expatfaq.html">expat FAQ</A>.</P> <P></P> <ADDRESS> <A HREF="mailto:jjc@jclark.com">James Clark</A> </ADDRESS> </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/gplelect.html������������������������������������������������������������������0100644�0000764�0000144�00000003265�06664116442�017046� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <HTML> <TITLE>Using the GPL for expat</TITLE> <BODY> <H1>Using the GPL for expat</H1> <P>Instead of using the Mozilla Public License, you may instead elect to use the GNU General Public License (GPL) for a particular copy of expat. The election to use the GPL is irrevocable for that particular copy. If you do elect to use the GPL, then you must replace the copyright notice on each file with the following:</P> <PRE> expat XML parser Copyright (C) 1998 James Clark This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. </PRE> <P>and you must change readme.html to say that an election has been made to use this copy under the GPL. If you redistribute expat, you should also include a copy of the GPL.</P> <P>Note that I will probably not accept patches under terms that allow me to distribute them only under the GPL.</P> <P></P> <ADDRESS> <A HREF="mailto:jjc@jclark.com">James Clark</A> </ADDRESS> </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07422617431�015671� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/CVS/��������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517416�016327� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/CVS/Root����������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517415�017172� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/CVS/Repository����������������������������������������������������������0100644�0000764�0000144�00000000034�07405517415�020422� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/CVS/Entries�������������������������������������������������������������0100644�0000764�0000144�00000001331�07405517416�017656� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Mon Feb 22 01:04:24 1999// /Makefile.am/1.6/Mon Aug 28 08:52:01 2000// /ascii.h/1.1/Mon Aug 28 08:52:01 2000// /asciitab.h/1.2/Wed Jun 14 08:53:42 2000// /dllmain.c/1.2/Wed Jun 14 08:53:42 2000// /iasciitab.h/1.2/Wed Jun 14 08:53:42 2000// /latin1tab.h/1.2/Wed Jun 14 08:53:42 2000// /nametab.h/1.1/Sun Feb 21 23:56:18 1999// /utf8tab.h/1.2/Wed Jun 14 08:53:42 2000// /xmldef.h/1.2/Wed Jun 14 08:53:42 2000// /xmlrole.c/1.3/Mon Aug 28 08:52:01 2000// /xmlrole.h/1.3/Mon Aug 28 08:52:01 2000// /xmltok.c/1.3/Mon Aug 28 08:52:01 2000// /xmltok.h/1.3/Mon Aug 28 08:52:01 2000// /xmltok_impl.c/1.3/Mon Aug 28 08:52:01 2000// /xmltok_impl.h/1.2/Wed Jun 14 08:53:42 2000// /xmltok_ns.c/1.2/Mon Aug 28 08:52:01 2000// D �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/Makefile����������������������������������������������������������������0100644�0000764�0000144�00000025116�07405520566�017336� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ LDFLAGS = -version-info "1:0:1" CFLAGS = -g -O2 -DXML_NS lib_LTLIBRARIES = libxmltok.la EXTRA_LTLIBRARIES = libxmltok.la libxmltok_la_SOURCES = ascii.h asciitab.h iasciitab.h latin1tab.h nametab.h utf8tab.h xmldef.h xmlrole.h xmltok.h xmltok_impl.h xmlrole.c xmltok.c libxmltok_la_LDFLAGS = -rpath $(libdir) EXTRA_DIST = xmltok_impl.c xmltok_ns.c mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../../.. CPPFLAGS = LIBS = -ldl libxmltok_la_LIBADD = libxmltok_la_OBJECTS = xmlrole.lo xmltok.lo COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/xmlrole.P .deps/xmltok.P SOURCES = $(libxmltok_la_SOURCES) OBJECTS = $(libxmltok_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/expat/xmltok/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libxmltok.la: $(libxmltok_la_OBJECTS) $(libxmltok_la_DEPENDENCIES) $(LINK) $(libxmltok_la_LDFLAGS) $(libxmltok_la_OBJECTS) $(libxmltok_la_LIBADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules/expat/xmltok distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/expat/xmltok/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/.cvsignore��������������������������������������������������������������0100644�0000764�0000144�00000000033�06664126430�017663� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.deps Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/Makefile.am�������������������������������������������������������������0100644�0000764�0000144�00000000712�07152424061�017715� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. LDFLAGS = -version-info "1:0:1" CFLAGS = @CFLAGS@ -DXML_NS lib_LTLIBRARIES = \ @XMLTOK@ EXTRA_LTLIBRARIES = \ libxmltok.la libxmltok_la_SOURCES = \ ascii.h \ asciitab.h \ iasciitab.h \ latin1tab.h \ nametab.h \ utf8tab.h \ xmldef.h \ xmlrole.h \ xmltok.h \ xmltok_impl.h \ xmlrole.c \ xmltok.c libxmltok_la_LDFLAGS = -rpath $(libdir) EXTRA_DIST = \ xmltok_impl.c \ xmltok_ns.c ������������������������������������������������������libwww/modules/expat/xmltok/ascii.h�����������������������������������������������������������������0100644�0000764�0000144�00000005632�07152424061�017130� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #define ASCII_A 0x41 #define ASCII_B 0x42 #define ASCII_C 0x43 #define ASCII_D 0x44 #define ASCII_E 0x45 #define ASCII_F 0x46 #define ASCII_G 0x47 #define ASCII_H 0x48 #define ASCII_I 0x49 #define ASCII_J 0x4A #define ASCII_K 0x4B #define ASCII_L 0x4C #define ASCII_M 0x4D #define ASCII_N 0x4E #define ASCII_O 0x4F #define ASCII_P 0x50 #define ASCII_Q 0x51 #define ASCII_R 0x52 #define ASCII_S 0x53 #define ASCII_T 0x54 #define ASCII_U 0x55 #define ASCII_V 0x56 #define ASCII_W 0x57 #define ASCII_X 0x58 #define ASCII_Y 0x59 #define ASCII_Z 0x5A #define ASCII_a 0x61 #define ASCII_b 0x62 #define ASCII_c 0x63 #define ASCII_d 0x64 #define ASCII_e 0x65 #define ASCII_f 0x66 #define ASCII_g 0x67 #define ASCII_h 0x68 #define ASCII_i 0x69 #define ASCII_j 0x6A #define ASCII_k 0x6B #define ASCII_l 0x6C #define ASCII_m 0x6D #define ASCII_n 0x6E #define ASCII_o 0x6F #define ASCII_p 0x70 #define ASCII_q 0x71 #define ASCII_r 0x72 #define ASCII_s 0x73 #define ASCII_t 0x74 #define ASCII_u 0x75 #define ASCII_v 0x76 #define ASCII_w 0x77 #define ASCII_x 0x78 #define ASCII_y 0x79 #define ASCII_z 0x7A #define ASCII_0 0x30 #define ASCII_1 0x31 #define ASCII_2 0x32 #define ASCII_3 0x33 #define ASCII_4 0x34 #define ASCII_5 0x35 #define ASCII_6 0x36 #define ASCII_7 0x37 #define ASCII_8 0x38 #define ASCII_9 0x39 #define ASCII_TAB 0x09 #define ASCII_SPACE 0x20 #define ASCII_EXCL 0x21 #define ASCII_QUOT 0x22 #define ASCII_AMP 0x26 #define ASCII_APOS 0x27 #define ASCII_MINUS 0x2D #define ASCII_PERIOD 0x2E #define ASCII_COLON 0x3A #define ASCII_SEMI 0x3B #define ASCII_LT 0x3C #define ASCII_EQUALS 0x3D #define ASCII_GT 0x3E #define ASCII_LSQB 0x5B #define ASCII_RSQB 0x5D #define ASCII_UNDERSCORE 0x5F ������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/asciitab.h��������������������������������������������������������������0100644�0000764�0000144�00000005544�07121644026�017622� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ /* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, /* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML, /* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, /* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, /* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, /* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, /* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, /* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, /* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, /* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, /* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, ������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/dllmain.c���������������������������������������������������������������0100644�0000764�0000144�00000002642�07121644026�017452� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #define STRICT 1 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) { return TRUE; } ����������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/iasciitab.h�������������������������������������������������������������0100644�0000764�0000144�00000005652�07121644026�017773� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ /* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */ /* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, /* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML, /* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, /* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, /* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, /* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, /* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, /* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, /* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, /* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, /* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, ��������������������������������������������������������������������������������������libwww/modules/expat/xmltok/latin1tab.h�������������������������������������������������������������0100644�0000764�0000144�00000005631�07121644026�017717� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ /* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, /* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME, /* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, /* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, �������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/nametab.h���������������������������������������������������������������0100644�0000764�0000144�00000015612�06664116442�017456� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������static const unsigned namingBitmap[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, 0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, 0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, 0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, 0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000, 0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060, 0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003, 0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, 0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001, 0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003, 0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000, 0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003, 0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003, 0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000, 0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF, 0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB, 0x40000000, 0xF580C900, 0x00000007, 0x02010800, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00004C40, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003, 0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, 0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, 0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, 0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, 0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF, 0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF, 0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF, 0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF, 0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF, 0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0, 0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1, 0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3, 0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80, 0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3, 0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3, 0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000, 0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000, 0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF, 0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFF0000, 0x00000002, 0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, 0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF, }; static const unsigned char nmstrtPages[] = { 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned char namePages[] = { 0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00, 0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; ����������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/utf8tab.h���������������������������������������������������������������0100644�0000764�0000144�00000005547�07121644026�017423� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ /* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4, /* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML, /* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM, ���������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/xmldef.h����������������������������������������������������������������0100644�0000764�0000144�00000003757�07121644026�017326� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #include <string.h> #ifdef XML_WINLIB #define WIN32_LEAN_AND_MEAN #define STRICT #include <windows.h> #define malloc(x) HeapAlloc(GetProcessHeap(), 0, (x)) #define calloc(x, y) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (x)*(y)) #define free(x) HeapFree(GetProcessHeap(), 0, (x)) #define realloc(x, y) HeapReAlloc(GetProcessHeap(), 0, x, y) #define abort() /* as nothing */ #else /* not XML_WINLIB */ #include <stdlib.h> #endif /* not XML_WINLIB */ /* This file can be used for any definitions needed in particular environments. */ #ifdef MOZILLA #include "nspr.h" #define malloc(x) PR_Malloc(x) #define realloc(x, y) PR_Realloc((x), (y)) #define calloc(x, y) PR_Calloc((x),(y)) #define free(x) PR_Free(x) #define int int32 #endif /* MOZILLA */ �����������������libwww/modules/expat/xmltok/xmlrole.c���������������������������������������������������������������0100644�0000764�0000144�00000071667�07152424061�017530� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #include "xmldef.h" #include "xmlrole.h" #include "ascii.h" /* Doesn't check: that ,| are not mixed in a model group content of literals */ static const char KW_ANY[] = { ASCII_A, ASCII_N, ASCII_Y, '\0' }; static const char KW_ATTLIST[] = { ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' }; static const char KW_CDATA[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_DOCTYPE[] = { ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' }; static const char KW_ELEMENT[] = { ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' }; static const char KW_EMPTY[] = { ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' }; static const char KW_ENTITIES[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' }; static const char KW_ENTITY[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; static const char KW_FIXED[] = { ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' }; static const char KW_ID[] = { ASCII_I, ASCII_D, '\0' }; static const char KW_IDREF[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; static const char KW_IDREFS[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; static const char KW_IGNORE[] = { ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' }; static const char KW_IMPLIED[] = { ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' }; static const char KW_INCLUDE[] = { ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' }; static const char KW_NDATA[] = { ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_NMTOKEN[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; static const char KW_NMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' }; static const char KW_NOTATION[] = { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, '\0' }; static const char KW_PCDATA[] = { ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_PUBLIC[] = { ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' }; static const char KW_REQUIRED[] = { ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D, '\0' }; static const char KW_SYSTEM[] = { ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' }; #ifndef MIN_BYTES_PER_CHAR #define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) #endif #ifdef XML_DTD #define setTopLevel(state) \ ((state)->handler = ((state)->documentEntity \ ? internalSubset \ : externalSubset1)) #else /* not XML_DTD */ #define setTopLevel(state) ((state)->handler = internalSubset) #endif /* not XML_DTD */ typedef int PROLOG_HANDLER(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc); static PROLOG_HANDLER prolog0, prolog1, prolog2, doctype0, doctype1, doctype2, doctype3, doctype4, doctype5, internalSubset, entity0, entity1, entity2, entity3, entity4, entity5, entity6, entity7, entity8, entity9, notation0, notation1, notation2, notation3, notation4, attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6, attlist7, attlist8, attlist9, element0, element1, element2, element3, element4, element5, element6, element7, #ifdef XML_DTD externalSubset0, externalSubset1, condSect0, condSect1, condSect2, #endif /* XML_DTD */ declClose, error; static int common(PROLOG_STATE *state, int tok); static int prolog0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: state->handler = prolog1; return XML_ROLE_NONE; case XML_TOK_XML_DECL: state->handler = prolog1; return XML_ROLE_XML_DECL; case XML_TOK_PI: state->handler = prolog1; return XML_ROLE_NONE; case XML_TOK_COMMENT: state->handler = prolog1; case XML_TOK_BOM: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (!XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_DOCTYPE)) break; state->handler = doctype0; return XML_ROLE_NONE; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int prolog1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_PI: case XML_TOK_COMMENT: case XML_TOK_BOM: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (!XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_DOCTYPE)) break; state->handler = doctype0; return XML_ROLE_NONE; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int prolog2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_PI: case XML_TOK_COMMENT: return XML_ROLE_NONE; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int doctype0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = doctype1; return XML_ROLE_DOCTYPE_NAME; } return common(state, tok); } static int doctype1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = internalSubset; return XML_ROLE_NONE; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = doctype3; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = doctype2; return XML_ROLE_NONE; } break; } return common(state, tok); } static int doctype2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = doctype3; return XML_ROLE_DOCTYPE_PUBLIC_ID; } return common(state, tok); } static int doctype3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = doctype4; return XML_ROLE_DOCTYPE_SYSTEM_ID; } return common(state, tok); } static int doctype4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = internalSubset; return XML_ROLE_NONE; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; } return common(state, tok); } static int doctype5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; } return common(state, tok); } static int internalSubset(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ENTITY)) { state->handler = entity0; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ATTLIST)) { state->handler = attlist0; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ELEMENT)) { state->handler = element0; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_NOTATION)) { state->handler = notation0; return XML_ROLE_NONE; } break; case XML_TOK_PI: case XML_TOK_COMMENT: return XML_ROLE_NONE; case XML_TOK_PARAM_ENTITY_REF: return XML_ROLE_PARAM_ENTITY_REF; case XML_TOK_CLOSE_BRACKET: state->handler = doctype5; return XML_ROLE_NONE; } return common(state, tok); } #ifdef XML_DTD static int externalSubset0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { state->handler = externalSubset1; if (tok == XML_TOK_XML_DECL) return XML_ROLE_TEXT_DECL; return externalSubset1(state, tok, ptr, end, enc); } static int externalSubset1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_COND_SECT_OPEN: state->handler = condSect0; return XML_ROLE_NONE; case XML_TOK_COND_SECT_CLOSE: if (state->includeLevel == 0) break; state->includeLevel -= 1; return XML_ROLE_NONE; case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_CLOSE_BRACKET: break; case XML_TOK_NONE: if (state->includeLevel) break; return XML_ROLE_NONE; default: return internalSubset(state, tok, ptr, end, enc); } return common(state, tok); } #endif /* XML_DTD */ static int entity0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_PERCENT: state->handler = entity1; return XML_ROLE_NONE; case XML_TOK_NAME: state->handler = entity2; return XML_ROLE_GENERAL_ENTITY_NAME; } return common(state, tok); } static int entity1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: state->handler = entity7; return XML_ROLE_PARAM_ENTITY_NAME; } return common(state, tok); } static int entity2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = entity4; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = entity3; return XML_ROLE_NONE; } break; case XML_TOK_LITERAL: state->handler = declClose; return XML_ROLE_ENTITY_VALUE; } return common(state, tok); } static int entity3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = entity4; return XML_ROLE_ENTITY_PUBLIC_ID; } return common(state, tok); } static int entity4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = entity5; return XML_ROLE_ENTITY_SYSTEM_ID; } return common(state, tok); } static int entity5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { state->handler = entity6; return XML_ROLE_NONE; } break; } return common(state, tok); } static int entity6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: state->handler = declClose; return XML_ROLE_ENTITY_NOTATION_NAME; } return common(state, tok); } static int entity7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = entity9; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = entity8; return XML_ROLE_NONE; } break; case XML_TOK_LITERAL: state->handler = declClose; return XML_ROLE_ENTITY_VALUE; } return common(state, tok); } static int entity8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = entity9; return XML_ROLE_ENTITY_PUBLIC_ID; } return common(state, tok); } static int entity9(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = declClose; return XML_ROLE_ENTITY_SYSTEM_ID; } return common(state, tok); } static int notation0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: state->handler = notation1; return XML_ROLE_NOTATION_NAME; } return common(state, tok); } static int notation1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = notation3; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = notation2; return XML_ROLE_NONE; } break; } return common(state, tok); } static int notation2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = notation4; return XML_ROLE_NOTATION_PUBLIC_ID; } return common(state, tok); } static int notation3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = declClose; return XML_ROLE_NOTATION_SYSTEM_ID; } return common(state, tok); } static int notation4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = declClose; return XML_ROLE_NOTATION_SYSTEM_ID; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_NOTATION_NO_SYSTEM_ID; } return common(state, tok); } static int attlist0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist1; return XML_ROLE_ATTLIST_ELEMENT_NAME; } return common(state, tok); } static int attlist1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist2; return XML_ROLE_ATTRIBUTE_NAME; } return common(state, tok); } static int attlist2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: { static const char *types[] = { KW_CDATA, KW_ID, KW_IDREF, KW_IDREFS, KW_ENTITY, KW_ENTITIES, KW_NMTOKEN, KW_NMTOKENS, }; int i; for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++) if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { state->handler = attlist8; return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; } } if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { state->handler = attlist5; return XML_ROLE_NONE; } break; case XML_TOK_OPEN_PAREN: state->handler = attlist3; return XML_ROLE_NONE; } return common(state, tok); } static int attlist3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NMTOKEN: case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist4; return XML_ROLE_ATTRIBUTE_ENUM_VALUE; } return common(state, tok); } static int attlist4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_CLOSE_PAREN: state->handler = attlist8; return XML_ROLE_NONE; case XML_TOK_OR: state->handler = attlist3; return XML_ROLE_NONE; } return common(state, tok); } static int attlist5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_PAREN: state->handler = attlist6; return XML_ROLE_NONE; } return common(state, tok); } static int attlist6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: state->handler = attlist7; return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; } return common(state, tok); } static int attlist7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_CLOSE_PAREN: state->handler = attlist8; return XML_ROLE_NONE; case XML_TOK_OR: state->handler = attlist6; return XML_ROLE_NONE; } return common(state, tok); } /* default value */ static int attlist8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_POUND_NAME: if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_IMPLIED)) { state->handler = attlist1; return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; } if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_REQUIRED)) { state->handler = attlist1; return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; } if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_FIXED)) { state->handler = attlist9; return XML_ROLE_NONE; } break; case XML_TOK_LITERAL: state->handler = attlist1; return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; } return common(state, tok); } static int attlist9(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_LITERAL: state->handler = attlist1; return XML_ROLE_FIXED_ATTRIBUTE_VALUE; } return common(state, tok); } static int element0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element1; return XML_ROLE_ELEMENT_NAME; } return common(state, tok); } static int element1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { state->handler = declClose; return XML_ROLE_CONTENT_EMPTY; } if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { state->handler = declClose; return XML_ROLE_CONTENT_ANY; } break; case XML_TOK_OPEN_PAREN: state->handler = element2; state->level = 1; return XML_ROLE_GROUP_OPEN; } return common(state, tok); } static int element2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_POUND_NAME: if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_PCDATA)) { state->handler = element3; return XML_ROLE_CONTENT_PCDATA; } break; case XML_TOK_OPEN_PAREN: state->level = 2; state->handler = element6; return XML_ROLE_GROUP_OPEN; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT; case XML_TOK_NAME_QUESTION: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_OPT; case XML_TOK_NAME_ASTERISK: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_REP; case XML_TOK_NAME_PLUS: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_PLUS; } return common(state, tok); } static int element3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_CLOSE_PAREN: case XML_TOK_CLOSE_PAREN_ASTERISK: state->handler = declClose; return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_OR: state->handler = element4; return XML_ROLE_NONE; } return common(state, tok); } static int element4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element5; return XML_ROLE_CONTENT_ELEMENT; } return common(state, tok); } static int element5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_CLOSE_PAREN_ASTERISK: state->handler = declClose; return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_OR: state->handler = element4; return XML_ROLE_NONE; } return common(state, tok); } static int element6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_PAREN: state->level += 1; return XML_ROLE_GROUP_OPEN; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT; case XML_TOK_NAME_QUESTION: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_OPT; case XML_TOK_NAME_ASTERISK: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_REP; case XML_TOK_NAME_PLUS: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_PLUS; } return common(state, tok); } static int element7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_CLOSE_PAREN: state->level -= 1; if (state->level == 0) state->handler = declClose; return XML_ROLE_GROUP_CLOSE; case XML_TOK_CLOSE_PAREN_ASTERISK: state->level -= 1; if (state->level == 0) state->handler = declClose; return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_CLOSE_PAREN_QUESTION: state->level -= 1; if (state->level == 0) state->handler = declClose; return XML_ROLE_GROUP_CLOSE_OPT; case XML_TOK_CLOSE_PAREN_PLUS: state->level -= 1; if (state->level == 0) state->handler = declClose; return XML_ROLE_GROUP_CLOSE_PLUS; case XML_TOK_COMMA: state->handler = element6; return XML_ROLE_GROUP_SEQUENCE; case XML_TOK_OR: state->handler = element6; return XML_ROLE_GROUP_CHOICE; } return common(state, tok); } #ifdef XML_DTD static int condSect0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { state->handler = condSect1; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { state->handler = condSect2; return XML_ROLE_NONE; } break; } return common(state, tok); } static int condSect1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = externalSubset1; state->includeLevel += 1; return XML_ROLE_NONE; } return common(state, tok); } static int condSect2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = externalSubset1; return XML_ROLE_IGNORE_SECT; } return common(state, tok); } #endif /* XML_DTD */ static int declClose(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_NONE; } return common(state, tok); } #if 0 static int ignore(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_DECL_CLOSE: state->handler = internalSubset; return 0; default: return XML_ROLE_NONE; } return common(state, tok); } #endif static int error(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { return XML_ROLE_NONE; } static int common(PROLOG_STATE *state, int tok) { #ifdef XML_DTD if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) return XML_ROLE_INNER_PARAM_ENTITY_REF; #endif state->handler = error; return XML_ROLE_ERROR; } void XmlPrologStateInit(PROLOG_STATE *state) { state->handler = prolog0; #ifdef XML_DTD state->documentEntity = 1; state->includeLevel = 0; #endif /* XML_DTD */ } #ifdef XML_DTD void XmlPrologStateInitExternalEntity(PROLOG_STATE *state) { state->handler = externalSubset0; state->documentEntity = 0; state->includeLevel = 0; } #endif /* XML_DTD */ �������������������������������������������������������������������������libwww/modules/expat/xmltok/xmlrole.h���������������������������������������������������������������0100644�0000764�0000144�00000007012�07152424061�017514� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #ifndef XmlRole_INCLUDED #define XmlRole_INCLUDED 1 #include "xmltok.h" #ifdef __cplusplus extern "C" { #endif enum { XML_ROLE_ERROR = -1, XML_ROLE_NONE = 0, XML_ROLE_XML_DECL, XML_ROLE_INSTANCE_START, XML_ROLE_DOCTYPE_NAME, XML_ROLE_DOCTYPE_SYSTEM_ID, XML_ROLE_DOCTYPE_PUBLIC_ID, XML_ROLE_DOCTYPE_CLOSE, XML_ROLE_GENERAL_ENTITY_NAME, XML_ROLE_PARAM_ENTITY_NAME, XML_ROLE_ENTITY_VALUE, XML_ROLE_ENTITY_SYSTEM_ID, XML_ROLE_ENTITY_PUBLIC_ID, XML_ROLE_ENTITY_NOTATION_NAME, XML_ROLE_NOTATION_NAME, XML_ROLE_NOTATION_SYSTEM_ID, XML_ROLE_NOTATION_NO_SYSTEM_ID, XML_ROLE_NOTATION_PUBLIC_ID, XML_ROLE_ATTRIBUTE_NAME, XML_ROLE_ATTRIBUTE_TYPE_CDATA, XML_ROLE_ATTRIBUTE_TYPE_ID, XML_ROLE_ATTRIBUTE_TYPE_IDREF, XML_ROLE_ATTRIBUTE_TYPE_IDREFS, XML_ROLE_ATTRIBUTE_TYPE_ENTITY, XML_ROLE_ATTRIBUTE_TYPE_ENTITIES, XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN, XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS, XML_ROLE_ATTRIBUTE_ENUM_VALUE, XML_ROLE_ATTRIBUTE_NOTATION_VALUE, XML_ROLE_ATTLIST_ELEMENT_NAME, XML_ROLE_IMPLIED_ATTRIBUTE_VALUE, XML_ROLE_REQUIRED_ATTRIBUTE_VALUE, XML_ROLE_DEFAULT_ATTRIBUTE_VALUE, XML_ROLE_FIXED_ATTRIBUTE_VALUE, XML_ROLE_ELEMENT_NAME, XML_ROLE_CONTENT_ANY, XML_ROLE_CONTENT_EMPTY, XML_ROLE_CONTENT_PCDATA, XML_ROLE_GROUP_OPEN, XML_ROLE_GROUP_CLOSE, XML_ROLE_GROUP_CLOSE_REP, XML_ROLE_GROUP_CLOSE_OPT, XML_ROLE_GROUP_CLOSE_PLUS, XML_ROLE_GROUP_CHOICE, XML_ROLE_GROUP_SEQUENCE, XML_ROLE_CONTENT_ELEMENT, XML_ROLE_CONTENT_ELEMENT_REP, XML_ROLE_CONTENT_ELEMENT_OPT, XML_ROLE_CONTENT_ELEMENT_PLUS, #ifdef XML_DTD XML_ROLE_TEXT_DECL, XML_ROLE_IGNORE_SECT, XML_ROLE_INNER_PARAM_ENTITY_REF, #endif /* XML_DTD */ XML_ROLE_PARAM_ENTITY_REF }; typedef struct prolog_state { int (*handler)(struct prolog_state *state, int tok, const char *ptr, const char *end, const ENCODING *enc); unsigned level; #ifdef XML_DTD unsigned includeLevel; int documentEntity; #endif /* XML_DTD */ } PROLOG_STATE; void XMLTOKAPI XmlPrologStateInit(PROLOG_STATE *); #ifdef XML_DTD void XMLTOKAPI XmlPrologStateInitExternalEntity(PROLOG_STATE *); #endif /* XML_DTD */ #define XmlTokenRole(state, tok, ptr, end, enc) \ (((state)->handler)(state, tok, ptr, end, enc)) #ifdef __cplusplus } #endif #endif /* not XmlRole_INCLUDED */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/xmltok.c����������������������������������������������������������������0100644�0000764�0000144�00000114007�07152424061�017346� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #include "xmldef.h" #include "xmltok.h" #include "nametab.h" #ifdef XML_DTD #define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok) #else #define IGNORE_SECTION_TOK_VTABLE /* as nothing */ #endif #define VTABLE1 \ { PREFIX(prologTok), PREFIX(contentTok), \ PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \ { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \ PREFIX(sameName), \ PREFIX(nameMatchesAscii), \ PREFIX(nameLength), \ PREFIX(skipS), \ PREFIX(getAtts), \ PREFIX(charRefNumber), \ PREFIX(predefinedEntityName), \ PREFIX(updatePosition), \ PREFIX(isPublicId) #define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16) #define UCS2_GET_NAMING(pages, hi, lo) \ (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F))) /* A 2 byte UTF-8 representation splits the characters 11 bits between the bottom 5 and 6 bits of the bytes. We need 8 bits to index into pages, 3 bits to add to that index and 5 bits to generate the mask. */ #define UTF8_GET_NAMING2(pages, byte) \ (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \ + ((((byte)[0]) & 3) << 1) \ + ((((byte)[1]) >> 5) & 1)] \ & (1 << (((byte)[1]) & 0x1F))) /* A 3 byte UTF-8 representation splits the characters 16 bits between the bottom 4, 6 and 6 bits of the bytes. We need 8 bits to index into pages, 3 bits to add to that index and 5 bits to generate the mask. */ #define UTF8_GET_NAMING3(pages, byte) \ (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \ + ((((byte)[1]) >> 2) & 0xF)] \ << 3) \ + ((((byte)[1]) & 3) << 1) \ + ((((byte)[2]) >> 5) & 1)] \ & (1 << (((byte)[2]) & 0x1F))) #define UTF8_GET_NAMING(pages, p, n) \ ((n) == 2 \ ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \ : ((n) == 3 \ ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \ : 0)) #define UTF8_INVALID3(p) \ ((*p) == 0xED \ ? (((p)[1] & 0x20) != 0) \ : ((*p) == 0xEF \ ? ((p)[1] == 0xBF && ((p)[2] == 0xBF || (p)[2] == 0xBE)) \ : 0)) #define UTF8_INVALID4(p) ((*p) == 0xF4 && ((p)[1] & 0x30) != 0) static int isNever(const ENCODING *enc, const char *p) { return 0; } static int utf8_isName2(const ENCODING *enc, const char *p) { return UTF8_GET_NAMING2(namePages, (const unsigned char *)p); } static int utf8_isName3(const ENCODING *enc, const char *p) { return UTF8_GET_NAMING3(namePages, (const unsigned char *)p); } #define utf8_isName4 isNever static int utf8_isNmstrt2(const ENCODING *enc, const char *p) { return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p); } static int utf8_isNmstrt3(const ENCODING *enc, const char *p) { return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p); } #define utf8_isNmstrt4 isNever #define utf8_isInvalid2 isNever static int utf8_isInvalid3(const ENCODING *enc, const char *p) { return UTF8_INVALID3((const unsigned char *)p); } static int utf8_isInvalid4(const ENCODING *enc, const char *p) { return UTF8_INVALID4((const unsigned char *)p); } struct normal_encoding { ENCODING enc; unsigned char type[256]; #ifdef XML_MIN_SIZE int (*byteType)(const ENCODING *, const char *); int (*isNameMin)(const ENCODING *, const char *); int (*isNmstrtMin)(const ENCODING *, const char *); int (*byteToAscii)(const ENCODING *, const char *); int (*charMatches)(const ENCODING *, const char *, int); #endif /* XML_MIN_SIZE */ int (*isName2)(const ENCODING *, const char *); int (*isName3)(const ENCODING *, const char *); int (*isName4)(const ENCODING *, const char *); int (*isNmstrt2)(const ENCODING *, const char *); int (*isNmstrt3)(const ENCODING *, const char *); int (*isNmstrt4)(const ENCODING *, const char *); int (*isInvalid2)(const ENCODING *, const char *); int (*isInvalid3)(const ENCODING *, const char *); int (*isInvalid4)(const ENCODING *, const char *); }; #ifdef XML_MIN_SIZE #define STANDARD_VTABLE(E) \ E ## byteType, \ E ## isNameMin, \ E ## isNmstrtMin, \ E ## byteToAscii, \ E ## charMatches, #else #define STANDARD_VTABLE(E) /* as nothing */ #endif #define NORMAL_VTABLE(E) \ E ## isName2, \ E ## isName3, \ E ## isName4, \ E ## isNmstrt2, \ E ## isNmstrt3, \ E ## isNmstrt4, \ E ## isInvalid2, \ E ## isInvalid3, \ E ## isInvalid4 static int checkCharRefNumber(int); #include "xmltok_impl.h" #include "ascii.h" #ifdef XML_MIN_SIZE #define sb_isNameMin isNever #define sb_isNmstrtMin isNever #endif #ifdef XML_MIN_SIZE #define MINBPC(enc) ((enc)->minBytesPerChar) #else /* minimum bytes per character */ #define MINBPC(enc) 1 #endif #define SB_BYTE_TYPE(enc, p) \ (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)]) #ifdef XML_MIN_SIZE static int sb_byteType(const ENCODING *enc, const char *p) { return SB_BYTE_TYPE(enc, p); } #define BYTE_TYPE(enc, p) \ (((const struct normal_encoding *)(enc))->byteType(enc, p)) #else #define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p) #endif #ifdef XML_MIN_SIZE #define BYTE_TO_ASCII(enc, p) \ (((const struct normal_encoding *)(enc))->byteToAscii(enc, p)) static int sb_byteToAscii(const ENCODING *enc, const char *p) { return *p; } #else #define BYTE_TO_ASCII(enc, p) (*(p)) #endif #define IS_NAME_CHAR(enc, p, n) \ (((const struct normal_encoding *)(enc))->isName ## n(enc, p)) #define IS_NMSTRT_CHAR(enc, p, n) \ (((const struct normal_encoding *)(enc))->isNmstrt ## n(enc, p)) #define IS_INVALID_CHAR(enc, p, n) \ (((const struct normal_encoding *)(enc))->isInvalid ## n(enc, p)) #ifdef XML_MIN_SIZE #define IS_NAME_CHAR_MINBPC(enc, p) \ (((const struct normal_encoding *)(enc))->isNameMin(enc, p)) #define IS_NMSTRT_CHAR_MINBPC(enc, p) \ (((const struct normal_encoding *)(enc))->isNmstrtMin(enc, p)) #else #define IS_NAME_CHAR_MINBPC(enc, p) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) (0) #endif #ifdef XML_MIN_SIZE #define CHAR_MATCHES(enc, p, c) \ (((const struct normal_encoding *)(enc))->charMatches(enc, p, c)) static int sb_charMatches(const ENCODING *enc, const char *p, int c) { return *p == c; } #else /* c is an ASCII character */ #define CHAR_MATCHES(enc, p, c) (*(p) == c) #endif #define PREFIX(ident) normal_ ## ident #include "xmltok_impl.c" #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */ UTF8_cval1 = 0x00, UTF8_cval2 = 0xc0, UTF8_cval3 = 0xe0, UTF8_cval4 = 0xf0 }; static void utf8_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { char *to; const char *from; if (fromLim - *fromP > toLim - *toP) { /* Avoid copying partial characters. */ for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--) if (((unsigned char)fromLim[-1] & 0xc0) != 0x80) break; } for (to = *toP, from = *fromP; from != fromLim; from++, to++) *to = *from; *fromP = from; *toP = to; } static void utf8_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { unsigned short *to = *toP; const char *from = *fromP; while (from != fromLim && to != toLim) { switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) { case BT_LEAD2: *to++ = ((from[0] & 0x1f) << 6) | (from[1] & 0x3f); from += 2; break; case BT_LEAD3: *to++ = ((from[0] & 0xf) << 12) | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f); from += 3; break; case BT_LEAD4: { unsigned long n; if (to + 1 == toLim) break; n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f); n -= 0x10000; to[0] = (unsigned short)((n >> 10) | 0xD800); to[1] = (unsigned short)((n & 0x3FF) | 0xDC00); to += 2; from += 4; } break; default: *to++ = *from++; break; } } *fromP = from; *toP = to; } #ifdef XML_NS static const struct normal_encoding utf8_encoding_ns = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #include "asciitab.h" #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #endif static const struct normal_encoding utf8_encoding = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #ifdef XML_NS static const struct normal_encoding internal_utf8_encoding_ns = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #include "iasciitab.h" #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #endif static const struct normal_encoding internal_utf8_encoding = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; static void latin1_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { for (;;) { unsigned char c; if (*fromP == fromLim) break; c = (unsigned char)**fromP; if (c & 0x80) { if (toLim - *toP < 2) break; *(*toP)++ = ((c >> 6) | UTF8_cval2); *(*toP)++ = ((c & 0x3f) | 0x80); (*fromP)++; } else { if (*toP == toLim) break; *(*toP)++ = *(*fromP)++; } } } static void latin1_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { while (*fromP != fromLim && *toP != toLim) *(*toP)++ = (unsigned char)*(*fromP)++; } #ifdef XML_NS static const struct normal_encoding latin1_encoding_ns = { { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(sb_) }; #endif static const struct normal_encoding latin1_encoding = { { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(sb_) }; static void ascii_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { while (*fromP != fromLim && *toP != toLim) *(*toP)++ = *(*fromP)++; } #ifdef XML_NS static const struct normal_encoding ascii_encoding_ns = { { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, { #include "asciitab.h" /* BT_NONXML == 0 */ }, STANDARD_VTABLE(sb_) }; #endif static const struct normal_encoding ascii_encoding = { { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON /* BT_NONXML == 0 */ }, STANDARD_VTABLE(sb_) }; static int unicode_byte_type(char hi, char lo) { switch ((unsigned char)hi) { case 0xD8: case 0xD9: case 0xDA: case 0xDB: return BT_LEAD4; case 0xDC: case 0xDD: case 0xDE: case 0xDF: return BT_TRAIL; case 0xFF: switch ((unsigned char)lo) { case 0xFF: case 0xFE: return BT_NONXML; } break; } return BT_NONASCII; } #define DEFINE_UTF16_TO_UTF8(E) \ static \ void E ## toUtf8(const ENCODING *enc, \ const char **fromP, const char *fromLim, \ char **toP, const char *toLim) \ { \ const char *from; \ for (from = *fromP; from != fromLim; from += 2) { \ int plane; \ unsigned char lo2; \ unsigned char lo = GET_LO(from); \ unsigned char hi = GET_HI(from); \ switch (hi) { \ case 0: \ if (lo < 0x80) { \ if (*toP == toLim) { \ *fromP = from; \ return; \ } \ *(*toP)++ = lo; \ break; \ } \ /* fall through */ \ case 0x1: case 0x2: case 0x3: \ case 0x4: case 0x5: case 0x6: case 0x7: \ if (toLim - *toP < 2) { \ *fromP = from; \ return; \ } \ *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \ *(*toP)++ = ((lo & 0x3f) | 0x80); \ break; \ default: \ if (toLim - *toP < 3) { \ *fromP = from; \ return; \ } \ /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \ *(*toP)++ = ((hi >> 4) | UTF8_cval3); \ *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \ *(*toP)++ = ((lo & 0x3f) | 0x80); \ break; \ case 0xD8: case 0xD9: case 0xDA: case 0xDB: \ if (toLim - *toP < 4) { \ *fromP = from; \ return; \ } \ plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \ *(*toP)++ = ((plane >> 2) | UTF8_cval4); \ *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \ from += 2; \ lo2 = GET_LO(from); \ *(*toP)++ = (((lo & 0x3) << 4) \ | ((GET_HI(from) & 0x3) << 2) \ | (lo2 >> 6) \ | 0x80); \ *(*toP)++ = ((lo2 & 0x3f) | 0x80); \ break; \ } \ } \ *fromP = from; \ } #define DEFINE_UTF16_TO_UTF16(E) \ static \ void E ## toUtf16(const ENCODING *enc, \ const char **fromP, const char *fromLim, \ unsigned short **toP, const unsigned short *toLim) \ { \ /* Avoid copying first half only of surrogate */ \ if (fromLim - *fromP > ((toLim - *toP) << 1) \ && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \ fromLim -= 2; \ for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \ *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \ } #define SET2(ptr, ch) \ (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8))) #define GET_LO(ptr) ((unsigned char)(ptr)[0]) #define GET_HI(ptr) ((unsigned char)(ptr)[1]) DEFINE_UTF16_TO_UTF8(little2_) DEFINE_UTF16_TO_UTF16(little2_) #undef SET2 #undef GET_LO #undef GET_HI #define SET2(ptr, ch) \ (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF))) #define GET_LO(ptr) ((unsigned char)(ptr)[1]) #define GET_HI(ptr) ((unsigned char)(ptr)[0]) DEFINE_UTF16_TO_UTF8(big2_) DEFINE_UTF16_TO_UTF16(big2_) #undef SET2 #undef GET_LO #undef GET_HI #define LITTLE2_BYTE_TYPE(enc, p) \ ((p)[1] == 0 \ ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \ : unicode_byte_type((p)[1], (p)[0])) #define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1) #define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c) #define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0]) #define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0]) #ifdef XML_MIN_SIZE static int little2_byteType(const ENCODING *enc, const char *p) { return LITTLE2_BYTE_TYPE(enc, p); } static int little2_byteToAscii(const ENCODING *enc, const char *p) { return LITTLE2_BYTE_TO_ASCII(enc, p); } static int little2_charMatches(const ENCODING *enc, const char *p, int c) { return LITTLE2_CHAR_MATCHES(enc, p, c); } static int little2_isNameMin(const ENCODING *enc, const char *p) { return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p); } static int little2_isNmstrtMin(const ENCODING *enc, const char *p) { return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p); } #undef VTABLE #define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16 #else /* not XML_MIN_SIZE */ #undef PREFIX #define PREFIX(ident) little2_ ## ident #define MINBPC(enc) 2 /* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ #define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p) #define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p) #define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c) #define IS_NAME_CHAR(enc, p, n) 0 #define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) #define IS_NMSTRT_CHAR(enc, p, n) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) #include "xmltok_impl.c" #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR #endif /* not XML_MIN_SIZE */ #ifdef XML_NS static const struct normal_encoding little2_encoding_ns = { { VTABLE, 2, 0, #if XML_BYTE_ORDER == 12 1 #else 0 #endif }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif static const struct normal_encoding little2_encoding = { { VTABLE, 2, 0, #if XML_BYTE_ORDER == 12 1 #else 0 #endif }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #if XML_BYTE_ORDER != 21 #ifdef XML_NS static const struct normal_encoding internal_little2_encoding_ns = { { VTABLE, 2, 0, 1 }, { #include "iasciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif static const struct normal_encoding internal_little2_encoding = { { VTABLE, 2, 0, 1 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif #define BIG2_BYTE_TYPE(enc, p) \ ((p)[0] == 0 \ ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \ : unicode_byte_type((p)[0], (p)[1])) #define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1) #define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c) #define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1]) #define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1]) #ifdef XML_MIN_SIZE static int big2_byteType(const ENCODING *enc, const char *p) { return BIG2_BYTE_TYPE(enc, p); } static int big2_byteToAscii(const ENCODING *enc, const char *p) { return BIG2_BYTE_TO_ASCII(enc, p); } static int big2_charMatches(const ENCODING *enc, const char *p, int c) { return BIG2_CHAR_MATCHES(enc, p, c); } static int big2_isNameMin(const ENCODING *enc, const char *p) { return BIG2_IS_NAME_CHAR_MINBPC(enc, p); } static int big2_isNmstrtMin(const ENCODING *enc, const char *p) { return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p); } #undef VTABLE #define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16 #else /* not XML_MIN_SIZE */ #undef PREFIX #define PREFIX(ident) big2_ ## ident #define MINBPC(enc) 2 /* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ #define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p) #define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p) #define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c) #define IS_NAME_CHAR(enc, p, n) 0 #define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p) #define IS_NMSTRT_CHAR(enc, p, n) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) #include "xmltok_impl.c" #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR #endif /* not XML_MIN_SIZE */ #ifdef XML_NS static const struct normal_encoding big2_encoding_ns = { { VTABLE, 2, 0, #if XML_BYTE_ORDER == 21 1 #else 0 #endif }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif static const struct normal_encoding big2_encoding = { { VTABLE, 2, 0, #if XML_BYTE_ORDER == 21 1 #else 0 #endif }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #if XML_BYTE_ORDER != 12 #ifdef XML_NS static const struct normal_encoding internal_big2_encoding_ns = { { VTABLE, 2, 0, 1 }, { #include "iasciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif static const struct normal_encoding internal_big2_encoding = { { VTABLE, 2, 0, 1 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif #undef PREFIX static int streqci(const char *s1, const char *s2) { for (;;) { char c1 = *s1++; char c2 = *s2++; if (ASCII_a <= c1 && c1 <= ASCII_z) c1 += ASCII_A - ASCII_a; if (ASCII_a <= c2 && c2 <= ASCII_z) c2 += ASCII_A - ASCII_a; if (c1 != c2) return 0; if (!c1) break; } return 1; } static void initUpdatePosition(const ENCODING *enc, const char *ptr, const char *end, POSITION *pos) { normal_updatePosition(&utf8_encoding.enc, ptr, end, pos); } static int toAscii(const ENCODING *enc, const char *ptr, const char *end) { char buf[1]; char *p = buf; XmlUtf8Convert(enc, &ptr, end, &p, p + 1); if (p == buf) return -1; else return buf[0]; } static int isSpace(int c) { switch (c) { case 0x20: case 0xD: case 0xA: case 0x9: return 1; } return 0; } /* Return 1 if there's just optional white space or there's an S followed by name=val. */ static int parsePseudoAttribute(const ENCODING *enc, const char *ptr, const char *end, const char **namePtr, const char **nameEndPtr, const char **valPtr, const char **nextTokPtr) { int c; char open; if (ptr == end) { *namePtr = 0; return 1; } if (!isSpace(toAscii(enc, ptr, end))) { *nextTokPtr = ptr; return 0; } do { ptr += enc->minBytesPerChar; } while (isSpace(toAscii(enc, ptr, end))); if (ptr == end) { *namePtr = 0; return 1; } *namePtr = ptr; for (;;) { c = toAscii(enc, ptr, end); if (c == -1) { *nextTokPtr = ptr; return 0; } if (c == ASCII_EQUALS) { *nameEndPtr = ptr; break; } if (isSpace(c)) { *nameEndPtr = ptr; do { ptr += enc->minBytesPerChar; } while (isSpace(c = toAscii(enc, ptr, end))); if (c != ASCII_EQUALS) { *nextTokPtr = ptr; return 0; } break; } ptr += enc->minBytesPerChar; } if (ptr == *namePtr) { *nextTokPtr = ptr; return 0; } ptr += enc->minBytesPerChar; c = toAscii(enc, ptr, end); while (isSpace(c)) { ptr += enc->minBytesPerChar; c = toAscii(enc, ptr, end); } if (c != ASCII_QUOT && c != ASCII_APOS) { *nextTokPtr = ptr; return 0; } open = c; ptr += enc->minBytesPerChar; *valPtr = ptr; for (;; ptr += enc->minBytesPerChar) { c = toAscii(enc, ptr, end); if (c == open) break; if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z) && !(ASCII_0 <= c && c <= ASCII_9) && c != ASCII_PERIOD && c != ASCII_MINUS && c != ASCII_UNDERSCORE) { *nextTokPtr = ptr; return 0; } } *nextTokPtr = ptr + enc->minBytesPerChar; return 1; } static const char KW_version[] = { ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0' }; static const char KW_encoding[] = { ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, ASCII_i, ASCII_n, ASCII_g, '\0' }; static const char KW_standalone[] = { ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, ASCII_l, ASCII_o, ASCII_n, ASCII_e, '\0' }; static const char KW_yes[] = { ASCII_y, ASCII_e, ASCII_s, '\0' }; static const char KW_no[] = { ASCII_n, ASCII_o, '\0' }; static int doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *, const char *, const char *), int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **encodingName, const ENCODING **encoding, int *standalone) { const char *val = 0; const char *name = 0; const char *nameEnd = 0; ptr += 5 * enc->minBytesPerChar; end -= 2 * enc->minBytesPerChar; if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr) || !name) { *badPtr = ptr; return 0; } if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) { if (!isGeneralTextEntity) { *badPtr = name; return 0; } } else { if (versionPtr) *versionPtr = val; if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { *badPtr = ptr; return 0; } if (!name) { if (isGeneralTextEntity) { /* a TextDecl must have an EncodingDecl */ *badPtr = ptr; return 0; } return 1; } } if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) { int c = toAscii(enc, val, end); if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z)) { *badPtr = val; return 0; } if (encodingName) *encodingName = val; if (encoding) *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar); if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { *badPtr = ptr; return 0; } if (!name) return 1; } if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone) || isGeneralTextEntity) { *badPtr = name; return 0; } if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) { if (standalone) *standalone = 1; } else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) { if (standalone) *standalone = 0; } else { *badPtr = val; return 0; } while (isSpace(toAscii(enc, ptr, end))) ptr += enc->minBytesPerChar; if (ptr != end) { *badPtr = ptr; return 0; } return 1; } static int checkCharRefNumber(int result) { switch (result >> 8) { case 0xD8: case 0xD9: case 0xDA: case 0xDB: case 0xDC: case 0xDD: case 0xDE: case 0xDF: return -1; case 0: if (latin1_encoding.type[result] == BT_NONXML) return -1; break; case 0xFF: if (result == 0xFFFE || result == 0xFFFF) return -1; break; } return result; } int XmlUtf8Encode(int c, char *buf) { enum { /* minN is minimum legal resulting value for N byte sequence */ min2 = 0x80, min3 = 0x800, min4 = 0x10000 }; if (c < 0) return 0; if (c < min2) { buf[0] = (c | UTF8_cval1); return 1; } if (c < min3) { buf[0] = ((c >> 6) | UTF8_cval2); buf[1] = ((c & 0x3f) | 0x80); return 2; } if (c < min4) { buf[0] = ((c >> 12) | UTF8_cval3); buf[1] = (((c >> 6) & 0x3f) | 0x80); buf[2] = ((c & 0x3f) | 0x80); return 3; } if (c < 0x110000) { buf[0] = ((c >> 18) | UTF8_cval4); buf[1] = (((c >> 12) & 0x3f) | 0x80); buf[2] = (((c >> 6) & 0x3f) | 0x80); buf[3] = ((c & 0x3f) | 0x80); return 4; } return 0; } int XmlUtf16Encode(int charNum, unsigned short *buf) { if (charNum < 0) return 0; if (charNum < 0x10000) { buf[0] = charNum; return 1; } if (charNum < 0x110000) { charNum -= 0x10000; buf[0] = (charNum >> 10) + 0xD800; buf[1] = (charNum & 0x3FF) + 0xDC00; return 2; } return 0; } struct unknown_encoding { struct normal_encoding normal; int (*convert)(void *userData, const char *p); void *userData; unsigned short utf16[256]; char utf8[256][4]; }; int XmlSizeOfUnknownEncoding(void) { return sizeof(struct unknown_encoding); } static int unknown_isName(const ENCODING *enc, const char *p) { int c = ((const struct unknown_encoding *)enc) ->convert(((const struct unknown_encoding *)enc)->userData, p); if (c & ~0xFFFF) return 0; return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF); } static int unknown_isNmstrt(const ENCODING *enc, const char *p) { int c = ((const struct unknown_encoding *)enc) ->convert(((const struct unknown_encoding *)enc)->userData, p); if (c & ~0xFFFF) return 0; return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF); } static int unknown_isInvalid(const ENCODING *enc, const char *p) { int c = ((const struct unknown_encoding *)enc) ->convert(((const struct unknown_encoding *)enc)->userData, p); return (c & ~0xFFFF) || checkCharRefNumber(c) < 0; } static void unknown_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { char buf[XML_UTF8_ENCODE_MAX]; for (;;) { const char *utf8; int n; if (*fromP == fromLim) break; utf8 = ((const struct unknown_encoding *)enc)->utf8[(unsigned char)**fromP]; n = *utf8++; if (n == 0) { int c = ((const struct unknown_encoding *)enc) ->convert(((const struct unknown_encoding *)enc)->userData, *fromP); n = XmlUtf8Encode(c, buf); if (n > toLim - *toP) break; utf8 = buf; *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP] - (BT_LEAD2 - 2); } else { if (n > toLim - *toP) break; (*fromP)++; } do { *(*toP)++ = *utf8++; } while (--n != 0); } } static void unknown_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { while (*fromP != fromLim && *toP != toLim) { unsigned short c = ((const struct unknown_encoding *)enc)->utf16[(unsigned char)**fromP]; if (c == 0) { c = (unsigned short)((const struct unknown_encoding *)enc) ->convert(((const struct unknown_encoding *)enc)->userData, *fromP); *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP] - (BT_LEAD2 - 2); } else (*fromP)++; *(*toP)++ = c; } } ENCODING * XmlInitUnknownEncoding(void *mem, int *table, int (*convert)(void *userData, const char *p), void *userData) { int i; struct unknown_encoding *e = mem; for (i = 0; i < sizeof(struct normal_encoding); i++) ((char *)mem)[i] = ((char *)&latin1_encoding)[i]; for (i = 0; i < 128; i++) if (latin1_encoding.type[i] != BT_OTHER && latin1_encoding.type[i] != BT_NONXML && table[i] != i) return 0; for (i = 0; i < 256; i++) { int c = table[i]; if (c == -1) { e->normal.type[i] = BT_MALFORM; /* This shouldn't really get used. */ e->utf16[i] = 0xFFFF; e->utf8[i][0] = 1; e->utf8[i][1] = 0; } else if (c < 0) { if (c < -4) return 0; e->normal.type[i] = BT_LEAD2 - (c + 2); e->utf8[i][0] = 0; e->utf16[i] = 0; } else if (c < 0x80) { if (latin1_encoding.type[c] != BT_OTHER && latin1_encoding.type[c] != BT_NONXML && c != i) return 0; e->normal.type[i] = latin1_encoding.type[c]; e->utf8[i][0] = 1; e->utf8[i][1] = (char)c; e->utf16[i] = c == 0 ? 0xFFFF : c; } else if (checkCharRefNumber(c) < 0) { e->normal.type[i] = BT_NONXML; /* This shouldn't really get used. */ e->utf16[i] = 0xFFFF; e->utf8[i][0] = 1; e->utf8[i][1] = 0; } else { if (c > 0xFFFF) return 0; if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff)) e->normal.type[i] = BT_NMSTRT; else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff)) e->normal.type[i] = BT_NAME; else e->normal.type[i] = BT_OTHER; e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1); e->utf16[i] = c; } } e->userData = userData; e->convert = convert; if (convert) { e->normal.isName2 = unknown_isName; e->normal.isName3 = unknown_isName; e->normal.isName4 = unknown_isName; e->normal.isNmstrt2 = unknown_isNmstrt; e->normal.isNmstrt3 = unknown_isNmstrt; e->normal.isNmstrt4 = unknown_isNmstrt; e->normal.isInvalid2 = unknown_isInvalid; e->normal.isInvalid3 = unknown_isInvalid; e->normal.isInvalid4 = unknown_isInvalid; } e->normal.enc.utf8Convert = unknown_toUtf8; e->normal.enc.utf16Convert = unknown_toUtf16; return &(e->normal.enc); } /* If this enumeration is changed, getEncodingIndex and encodings must also be changed. */ enum { UNKNOWN_ENC = -1, ISO_8859_1_ENC = 0, US_ASCII_ENC, UTF_8_ENC, UTF_16_ENC, UTF_16BE_ENC, UTF_16LE_ENC, /* must match encodingNames up to here */ NO_ENC }; static const char KW_ISO_8859_1[] = { ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, ASCII_5, ASCII_9, ASCII_MINUS, ASCII_1, '\0' }; static const char KW_US_ASCII[] = { ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, ASCII_C, ASCII_I, ASCII_I, '\0' }; static const char KW_UTF_8[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0' }; static const char KW_UTF_16[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0' }; static const char KW_UTF_16BE[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_B, ASCII_E, '\0' }; static const char KW_UTF_16LE[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E, '\0' }; static int getEncodingIndex(const char *name) { static const char *encodingNames[] = { KW_ISO_8859_1, KW_US_ASCII, KW_UTF_8, KW_UTF_16, KW_UTF_16BE, KW_UTF_16LE, }; int i; if (name == 0) return NO_ENC; for (i = 0; i < sizeof(encodingNames)/sizeof(encodingNames[0]); i++) if (streqci(name, encodingNames[i])) return i; return UNKNOWN_ENC; } /* For binary compatibility, we store the index of the encoding specified at initialization in the isUtf16 member. */ #define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16) #define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i) /* This is what detects the encoding. encodingTable maps from encoding indices to encodings; INIT_ENC_INDEX(enc) is the index of the external (protocol) specified encoding; state is XML_CONTENT_STATE if we're parsing an external text entity, and XML_PROLOG_STATE otherwise. */ static int initScan(const ENCODING **encodingTable, const INIT_ENCODING *enc, int state, const char *ptr, const char *end, const char **nextTokPtr) { const ENCODING **encPtr; if (ptr == end) return XML_TOK_NONE; encPtr = enc->encPtr; if (ptr + 1 == end) { /* only a single byte available for auto-detection */ #ifndef XML_DTD /* FIXME */ /* a well-formed document entity must have more than one byte */ if (state != XML_CONTENT_STATE) return XML_TOK_PARTIAL; #endif /* so we're parsing an external text entity... */ /* if UTF-16 was externally specified, then we need at least 2 bytes */ switch (INIT_ENC_INDEX(enc)) { case UTF_16_ENC: case UTF_16LE_ENC: case UTF_16BE_ENC: return XML_TOK_PARTIAL; } switch ((unsigned char)*ptr) { case 0xFE: case 0xFF: case 0xEF: /* possibly first byte of UTF-8 BOM */ if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; /* fall through */ case 0x00: case 0x3C: return XML_TOK_PARTIAL; } } else { switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) { case 0xFEFF: if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; *nextTokPtr = ptr + 2; *encPtr = encodingTable[UTF_16BE_ENC]; return XML_TOK_BOM; /* 00 3C is handled in the default case */ case 0x3C00: if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC || INIT_ENC_INDEX(enc) == UTF_16_ENC) && state == XML_CONTENT_STATE) break; *encPtr = encodingTable[UTF_16LE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); case 0xFFFE: if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; *nextTokPtr = ptr + 2; *encPtr = encodingTable[UTF_16LE_ENC]; return XML_TOK_BOM; case 0xEFBB: /* Maybe a UTF-8 BOM (EF BB BF) */ /* If there's an explicitly specified (external) encoding of ISO-8859-1 or some flavour of UTF-16 and this is an external text entity, don't look for the BOM, because it might be a legal data. */ if (state == XML_CONTENT_STATE) { int e = INIT_ENC_INDEX(enc); if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC || e == UTF_16_ENC) break; } if (ptr + 2 == end) return XML_TOK_PARTIAL; if ((unsigned char)ptr[2] == 0xBF) { *encPtr = encodingTable[UTF_8_ENC]; return XML_TOK_BOM; } break; default: if (ptr[0] == '\0') { /* 0 isn't a legal data character. Furthermore a document entity can only start with ASCII characters. So the only way this can fail to be big-endian UTF-16 if it it's an external parsed general entity that's labelled as UTF-16LE. */ if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC) break; *encPtr = encodingTable[UTF_16BE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } else if (ptr[1] == '\0') { /* We could recover here in the case: - parsing an external entity - second byte is 0 - no externally specified encoding - no encoding declaration by assuming UTF-16LE. But we don't, because this would mean when presented just with a single byte, we couldn't reliably determine whether we needed further bytes. */ if (state == XML_CONTENT_STATE) break; *encPtr = encodingTable[UTF_16LE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } break; } } *encPtr = encodingTable[INIT_ENC_INDEX(enc)]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } #define NS(x) x #define ns(x) x #include "xmltok_ns.c" #undef NS #undef ns #ifdef XML_NS #define NS(x) x ## NS #define ns(x) x ## _ns #include "xmltok_ns.c" #undef NS #undef ns ENCODING * XmlInitUnknownEncodingNS(void *mem, int *table, int (*convert)(void *userData, const char *p), void *userData) { ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData); if (enc) ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON; return enc; } #endif /* XML_NS */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/xmltok.h����������������������������������������������������������������0100644�0000764�0000144�00000025665�07152424061�017366� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #ifndef XmlTok_INCLUDED #define XmlTok_INCLUDED 1 #ifdef __cplusplus extern "C" { #endif #ifndef XMLTOKAPI #define XMLTOKAPI /* as nothing */ #endif /* The following token may be returned by XmlContentTok */ #define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be start of illegal ]]> sequence */ /* The following tokens may be returned by both XmlPrologTok and XmlContentTok */ #define XML_TOK_NONE -4 /* The string to be scanned is empty */ #define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan; might be part of CRLF sequence */ #define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */ #define XML_TOK_PARTIAL -1 /* only part of a token */ #define XML_TOK_INVALID 0 /* The following tokens are returned by XmlContentTok; some are also returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok */ #define XML_TOK_START_TAG_WITH_ATTS 1 #define XML_TOK_START_TAG_NO_ATTS 2 #define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */ #define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 #define XML_TOK_END_TAG 5 #define XML_TOK_DATA_CHARS 6 #define XML_TOK_DATA_NEWLINE 7 #define XML_TOK_CDATA_SECT_OPEN 8 #define XML_TOK_ENTITY_REF 9 #define XML_TOK_CHAR_REF 10 /* numeric character reference */ /* The following tokens may be returned by both XmlPrologTok and XmlContentTok */ #define XML_TOK_PI 11 /* processing instruction */ #define XML_TOK_XML_DECL 12 /* XML decl or text decl */ #define XML_TOK_COMMENT 13 #define XML_TOK_BOM 14 /* Byte order mark */ /* The following tokens are returned only by XmlPrologTok */ #define XML_TOK_PROLOG_S 15 #define XML_TOK_DECL_OPEN 16 /* <!foo */ #define XML_TOK_DECL_CLOSE 17 /* > */ #define XML_TOK_NAME 18 #define XML_TOK_NMTOKEN 19 #define XML_TOK_POUND_NAME 20 /* #name */ #define XML_TOK_OR 21 /* | */ #define XML_TOK_PERCENT 22 #define XML_TOK_OPEN_PAREN 23 #define XML_TOK_CLOSE_PAREN 24 #define XML_TOK_OPEN_BRACKET 25 #define XML_TOK_CLOSE_BRACKET 26 #define XML_TOK_LITERAL 27 #define XML_TOK_PARAM_ENTITY_REF 28 #define XML_TOK_INSTANCE_START 29 /* The following occur only in element type declarations */ #define XML_TOK_NAME_QUESTION 30 /* name? */ #define XML_TOK_NAME_ASTERISK 31 /* name* */ #define XML_TOK_NAME_PLUS 32 /* name+ */ #define XML_TOK_COND_SECT_OPEN 33 /* <![ */ #define XML_TOK_COND_SECT_CLOSE 34 /* ]]> */ #define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */ #define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */ #define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */ #define XML_TOK_COMMA 38 /* The following token is returned only by XmlAttributeValueTok */ #define XML_TOK_ATTRIBUTE_VALUE_S 39 /* The following token is returned only by XmlCdataSectionTok */ #define XML_TOK_CDATA_SECT_CLOSE 40 /* With namespace processing this is returned by XmlPrologTok for a name with a colon. */ #define XML_TOK_PREFIXED_NAME 41 #ifdef XML_DTD #define XML_TOK_IGNORE_SECT 42 #endif /* XML_DTD */ #ifdef XML_DTD #define XML_N_STATES 4 #else /* not XML_DTD */ #define XML_N_STATES 3 #endif /* not XML_DTD */ #define XML_PROLOG_STATE 0 #define XML_CONTENT_STATE 1 #define XML_CDATA_SECTION_STATE 2 #ifdef XML_DTD #define XML_IGNORE_SECTION_STATE 3 #endif /* XML_DTD */ #define XML_N_LITERAL_TYPES 2 #define XML_ATTRIBUTE_VALUE_LITERAL 0 #define XML_ENTITY_VALUE_LITERAL 1 /* The size of the buffer passed to XmlUtf8Encode must be at least this. */ #define XML_UTF8_ENCODE_MAX 4 /* The size of the buffer passed to XmlUtf16Encode must be at least this. */ #define XML_UTF16_ENCODE_MAX 2 typedef struct position { /* first line and first column are 0 not 1 */ unsigned long lineNumber; unsigned long columnNumber; } POSITION; typedef struct { const char *name; const char *valuePtr; const char *valueEnd; char normalized; } ATTRIBUTE; struct encoding; typedef struct encoding ENCODING; struct encoding { int (*scanners[XML_N_STATES])(const ENCODING *, const char *, const char *, const char **); int (*literalScanners[XML_N_LITERAL_TYPES])(const ENCODING *, const char *, const char *, const char **); int (*sameName)(const ENCODING *, const char *, const char *); int (*nameMatchesAscii)(const ENCODING *, const char *, const char *, const char *); int (*nameLength)(const ENCODING *, const char *); const char *(*skipS)(const ENCODING *, const char *); int (*getAtts)(const ENCODING *enc, const char *ptr, int attsMax, ATTRIBUTE *atts); int (*charRefNumber)(const ENCODING *enc, const char *ptr); int (*predefinedEntityName)(const ENCODING *, const char *, const char *); void (*updatePosition)(const ENCODING *, const char *ptr, const char *end, POSITION *); int (*isPublicId)(const ENCODING *enc, const char *ptr, const char *end, const char **badPtr); void (*utf8Convert)(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim); void (*utf16Convert)(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim); int minBytesPerChar; char isUtf8; char isUtf16; }; /* Scan the string starting at ptr until the end of the next complete token, but do not scan past eptr. Return an integer giving the type of token. Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. Return XML_TOK_PARTIAL when the string does not contain a complete token; nextTokPtr will not be set. Return XML_TOK_INVALID when the string does not start a valid token; nextTokPtr will be set to point to the character which made the token invalid. Otherwise the string starts with a valid token; nextTokPtr will be set to point to the character following the end of that token. Each data character counts as a single token, but adjacent data characters may be returned together. Similarly for characters in the prolog outside literals, comments and processing instructions. */ #define XmlTok(enc, state, ptr, end, nextTokPtr) \ (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) #define XmlPrologTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) #define XmlContentTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) #define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) #ifdef XML_DTD #define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) #endif /* XML_DTD */ /* This is used for performing a 2nd-level tokenization on the content of a literal that has already been returned by XmlTok. */ #define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) #define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) #define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) #define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2)) #define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) #define XmlNameLength(enc, ptr) \ (((enc)->nameLength)(enc, ptr)) #define XmlSkipS(enc, ptr) \ (((enc)->skipS)(enc, ptr)) #define XmlGetAttributes(enc, ptr, attsMax, atts) \ (((enc)->getAtts)(enc, ptr, attsMax, atts)) #define XmlCharRefNumber(enc, ptr) \ (((enc)->charRefNumber)(enc, ptr)) #define XmlPredefinedEntityName(enc, ptr, end) \ (((enc)->predefinedEntityName)(enc, ptr, end)) #define XmlUpdatePosition(enc, ptr, end, pos) \ (((enc)->updatePosition)(enc, ptr, end, pos)) #define XmlIsPublicId(enc, ptr, end, badPtr) \ (((enc)->isPublicId)(enc, ptr, end, badPtr)) #define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) #define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) typedef struct { ENCODING initEnc; const ENCODING **encPtr; } INIT_ENCODING; int XMLTOKAPI XmlParseXmlDecl(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **encodingNamePtr, const ENCODING **namedEncodingPtr, int *standalonePtr); int XMLTOKAPI XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name); const ENCODING XMLTOKAPI *XmlGetUtf8InternalEncoding(void); const ENCODING XMLTOKAPI *XmlGetUtf16InternalEncoding(void); int XMLTOKAPI XmlUtf8Encode(int charNumber, char *buf); int XMLTOKAPI XmlUtf16Encode(int charNumber, unsigned short *buf); int XMLTOKAPI XmlSizeOfUnknownEncoding(void); ENCODING XMLTOKAPI * XmlInitUnknownEncoding(void *mem, int *table, int (*conv)(void *userData, const char *p), void *userData); int XMLTOKAPI XmlParseXmlDeclNS(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **encodingNamePtr, const ENCODING **namedEncodingPtr, int *standalonePtr); int XMLTOKAPI XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name); const ENCODING XMLTOKAPI *XmlGetUtf8InternalEncodingNS(); const ENCODING XMLTOKAPI *XmlGetUtf16InternalEncodingNS(); ENCODING XMLTOKAPI * XmlInitUnknownEncodingNS(void *mem, int *table, int (*conv)(void *userData, const char *p), void *userData); #ifdef __cplusplus } #endif #endif /* not XmlTok_INCLUDED */ ���������������������������������������������������������������������������libwww/modules/expat/xmltok/xmltok_impl.c�����������������������������������������������������������0100644�0000764�0000144�00000122056�07152424061�020372� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ #ifndef IS_INVALID_CHAR #define IS_INVALID_CHAR(enc, ptr, n) (0) #endif #define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (IS_INVALID_CHAR(enc, ptr, n)) { \ *(nextTokPtr) = (ptr); \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define INVALID_CASES(ptr, nextTokPtr) \ INVALID_LEAD_CASE(2, ptr, nextTokPtr) \ INVALID_LEAD_CASE(3, ptr, nextTokPtr) \ INVALID_LEAD_CASE(4, ptr, nextTokPtr) \ case BT_NONXML: \ case BT_MALFORM: \ case BT_TRAIL: \ *(nextTokPtr) = (ptr); \ return XML_TOK_INVALID; #define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (!IS_NAME_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \ case BT_NONASCII: \ if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ case BT_NMSTRT: \ case BT_HEX: \ case BT_DIGIT: \ case BT_NAME: \ case BT_MINUS: \ ptr += MINBPC(enc); \ break; \ CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \ CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \ CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr) #define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \ case BT_NONASCII: \ if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ case BT_NMSTRT: \ case BT_HEX: \ ptr += MINBPC(enc); \ break; \ CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \ CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \ CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr) #ifndef PREFIX #define PREFIX(ident) ident #endif /* ptr points to character following "<!-" */ static int PREFIX(scanComment)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr != end) { if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) { *nextTokPtr = ptr; return XML_TOK_INVALID; } ptr += MINBPC(enc); while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { INVALID_CASES(ptr, nextTokPtr) case BT_MINUS: if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) { if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_COMMENT; } break; default: ptr += MINBPC(enc); break; } } } return XML_TOK_PARTIAL; } /* ptr points to character following "<!" */ static int PREFIX(scanDecl)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { case BT_MINUS: return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_LSQB: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_COND_SECT_OPEN; case BT_NMSTRT: case BT_HEX: ptr += MINBPC(enc); break; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { case BT_PERCNT: if (ptr + MINBPC(enc) == end) return XML_TOK_PARTIAL; /* don't allow <!ENTITY% foo "whatever"> */ switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) { case BT_S: case BT_CR: case BT_LF: case BT_PERCNT: *nextTokPtr = ptr; return XML_TOK_INVALID; } /* fall through */ case BT_S: case BT_CR: case BT_LF: *nextTokPtr = ptr; return XML_TOK_DECL_OPEN; case BT_NMSTRT: case BT_HEX: ptr += MINBPC(enc); break; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } static int PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end, int *tokPtr) { int upper = 0; *tokPtr = XML_TOK_PI; if (end - ptr != MINBPC(enc)*3) return 1; switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_x: break; case ASCII_X: upper = 1; break; default: return 1; } ptr += MINBPC(enc); switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_m: break; case ASCII_M: upper = 1; break; default: return 1; } ptr += MINBPC(enc); switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_l: break; case ASCII_L: upper = 1; break; default: return 1; } if (upper) return 0; *tokPtr = XML_TOK_XML_DECL; return 1; } /* ptr points to character following "<?" */ static int PREFIX(scanPi)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { int tok; const char *target = ptr; if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_S: case BT_CR: case BT_LF: if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) { *nextTokPtr = ptr; return XML_TOK_INVALID; } ptr += MINBPC(enc); while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { INVALID_CASES(ptr, nextTokPtr) case BT_QUEST: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { *nextTokPtr = ptr + MINBPC(enc); return tok; } break; default: ptr += MINBPC(enc); break; } } return XML_TOK_PARTIAL; case BT_QUEST: if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) { *nextTokPtr = ptr; return XML_TOK_INVALID; } ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { *nextTokPtr = ptr + MINBPC(enc); return tok; } /* fall through */ default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } static int PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB }; int i; /* CDATA[ */ if (end - ptr < 6 * MINBPC(enc)) return XML_TOK_PARTIAL; for (i = 0; i < 6; i++, ptr += MINBPC(enc)) { if (!CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) { *nextTokPtr = ptr; return XML_TOK_INVALID; } } *nextTokPtr = ptr; return XML_TOK_CDATA_SECT_OPEN; } static int PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_NONE; if (MINBPC(enc) > 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) break; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr -= MINBPC(enc); break; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CDATA_SECT_CLOSE; case BT_CR: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; case BT_LF: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; INVALID_CASES(ptr, nextTokPtr) default: ptr += MINBPC(enc); break; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_DATA_CHARS; \ } \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONXML: case BT_MALFORM: case BT_TRAIL: case BT_CR: case BT_LF: case BT_RSQB: *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } /* ptr points to character following "</" */ static int PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_S: case BT_CR: case BT_LF: for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { case BT_S: case BT_CR: case BT_LF: break; case BT_GT: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_END_TAG; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; #ifdef XML_NS case BT_COLON: /* no need to check qname syntax here, since end-tag must match exactly */ ptr += MINBPC(enc); break; #endif case BT_GT: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_END_TAG; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } /* ptr points to character following "&#X" */ static int PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { case BT_DIGIT: case BT_HEX: break; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { case BT_DIGIT: case BT_HEX: break; case BT_SEMI: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CHAR_REF; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } } return XML_TOK_PARTIAL; } /* ptr points to character following "&#" */ static int PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr != end) { if (CHAR_MATCHES(enc, ptr, ASCII_x)) return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); switch (BYTE_TYPE(enc, ptr)) { case BT_DIGIT: break; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { case BT_DIGIT: break; case BT_SEMI: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CHAR_REF; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } } return XML_TOK_PARTIAL; } /* ptr points to character following "&" */ static int PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) case BT_NUM: return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_SEMI: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_ENTITY_REF; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } /* ptr points to character following first character of attribute name */ static int PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { #ifdef XML_NS int hadColon = 0; #endif while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) #ifdef XML_NS case BT_COLON: if (hadColon) { *nextTokPtr = ptr; return XML_TOK_INVALID; } hadColon = 1; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) default: *nextTokPtr = ptr; return XML_TOK_INVALID; } break; #endif case BT_S: case BT_CR: case BT_LF: for (;;) { int t; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; t = BYTE_TYPE(enc, ptr); if (t == BT_EQUALS) break; switch (t) { case BT_S: case BT_LF: case BT_CR: break; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } /* fall through */ case BT_EQUALS: { int open; #ifdef XML_NS hadColon = 0; #endif for (;;) { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; open = BYTE_TYPE(enc, ptr); if (open == BT_QUOT || open == BT_APOS) break; switch (open) { case BT_S: case BT_LF: case BT_CR: break; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } ptr += MINBPC(enc); /* in attribute value */ for (;;) { int t; if (ptr == end) return XML_TOK_PARTIAL; t = BYTE_TYPE(enc, ptr); if (t == open) break; switch (t) { INVALID_CASES(ptr, nextTokPtr) case BT_AMP: { int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr); if (tok <= 0) { if (tok == XML_TOK_INVALID) *nextTokPtr = ptr; return tok; } break; } case BT_LT: *nextTokPtr = ptr; return XML_TOK_INVALID; default: ptr += MINBPC(enc); break; } } ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { case BT_S: case BT_CR: case BT_LF: break; case BT_SOL: goto sol; case BT_GT: goto gt; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } /* ptr points to closing quote */ for (;;) { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) case BT_S: case BT_CR: case BT_LF: continue; case BT_GT: gt: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_START_TAG_WITH_ATTS; case BT_SOL: sol: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_EMPTY_ELEMENT_WITH_ATTS; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } break; } break; } default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } /* ptr points to character following "<" */ static int PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { #ifdef XML_NS int hadColon; #endif if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) case BT_EXCL: if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { case BT_MINUS: return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_LSQB: return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr); } *nextTokPtr = ptr; return XML_TOK_INVALID; case BT_QUEST: return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_SOL: return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr); default: *nextTokPtr = ptr; return XML_TOK_INVALID; } #ifdef XML_NS hadColon = 0; #endif /* we have a start-tag */ while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) #ifdef XML_NS case BT_COLON: if (hadColon) { *nextTokPtr = ptr; return XML_TOK_INVALID; } hadColon = 1; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) default: *nextTokPtr = ptr; return XML_TOK_INVALID; } break; #endif case BT_S: case BT_CR: case BT_LF: { ptr += MINBPC(enc); while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) case BT_GT: goto gt; case BT_SOL: goto sol; case BT_S: case BT_CR: case BT_LF: ptr += MINBPC(enc); continue; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr); } return XML_TOK_PARTIAL; } case BT_GT: gt: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_START_TAG_NO_ATTS; case BT_SOL: sol: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_EMPTY_ELEMENT_NO_ATTS; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } static int PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_NONE; if (MINBPC(enc) > 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_LT: return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_AMP: return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_CR: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; case BT_LF: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_RSQB; if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) break; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_RSQB; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr -= MINBPC(enc); break; } *nextTokPtr = ptr; return XML_TOK_INVALID; INVALID_CASES(ptr, nextTokPtr) default: ptr += MINBPC(enc); break; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_DATA_CHARS; \ } \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_RSQB: if (ptr + MINBPC(enc) != end) { if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) { ptr += MINBPC(enc); break; } if (ptr + 2*MINBPC(enc) != end) { if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) { ptr += MINBPC(enc); break; } *nextTokPtr = ptr + 2*MINBPC(enc); return XML_TOK_INVALID; } } /* fall through */ case BT_AMP: case BT_LT: case BT_NONXML: case BT_MALFORM: case BT_TRAIL: case BT_CR: case BT_LF: *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } /* ptr points to character following "%" */ static int PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) case BT_S: case BT_LF: case BT_CR: case BT_PERCNT: *nextTokPtr = ptr; return XML_TOK_PERCENT; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_SEMI: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_PARAM_ENTITY_REF; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } static int PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_CR: case BT_LF: case BT_S: case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR: *nextTokPtr = ptr; return XML_TOK_POUND_NAME; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return -XML_TOK_POUND_NAME; } static int PREFIX(scanLit)(int open, const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { while (ptr != end) { int t = BYTE_TYPE(enc, ptr); switch (t) { INVALID_CASES(ptr, nextTokPtr) case BT_QUOT: case BT_APOS: ptr += MINBPC(enc); if (t != open) break; if (ptr == end) return -XML_TOK_LITERAL; *nextTokPtr = ptr; switch (BYTE_TYPE(enc, ptr)) { case BT_S: case BT_CR: case BT_LF: case BT_GT: case BT_PERCNT: case BT_LSQB: return XML_TOK_LITERAL; default: return XML_TOK_INVALID; } default: ptr += MINBPC(enc); break; } } return XML_TOK_PARTIAL; } static int PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { int tok; if (ptr == end) return XML_TOK_NONE; if (MINBPC(enc) > 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_QUOT: return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_APOS: return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_LT: { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { case BT_EXCL: return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_QUEST: return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_NMSTRT: case BT_HEX: case BT_NONASCII: case BT_LEAD2: case BT_LEAD3: case BT_LEAD4: *nextTokPtr = ptr - MINBPC(enc); return XML_TOK_INSTANCE_START; } *nextTokPtr = ptr; return XML_TOK_INVALID; } case BT_CR: if (ptr + MINBPC(enc) == end) return -XML_TOK_PROLOG_S; /* fall through */ case BT_S: case BT_LF: for (;;) { ptr += MINBPC(enc); if (ptr == end) break; switch (BYTE_TYPE(enc, ptr)) { case BT_S: case BT_LF: break; case BT_CR: /* don't split CR/LF pair */ if (ptr + MINBPC(enc) != end) break; /* fall through */ default: *nextTokPtr = ptr; return XML_TOK_PROLOG_S; } } *nextTokPtr = ptr; return XML_TOK_PROLOG_S; case BT_PERCNT: return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_COMMA: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_COMMA; case BT_LSQB: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OPEN_BRACKET; case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return -XML_TOK_CLOSE_BRACKET; if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { if (ptr + MINBPC(enc) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) { *nextTokPtr = ptr + 2*MINBPC(enc); return XML_TOK_COND_SECT_CLOSE; } } *nextTokPtr = ptr; return XML_TOK_CLOSE_BRACKET; case BT_LPAR: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OPEN_PAREN; case BT_RPAR: ptr += MINBPC(enc); if (ptr == end) return -XML_TOK_CLOSE_PAREN; switch (BYTE_TYPE(enc, ptr)) { case BT_AST: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_ASTERISK; case BT_QUEST: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_QUESTION; case BT_PLUS: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_PLUS; case BT_CR: case BT_LF: case BT_S: case BT_GT: case BT_COMMA: case BT_VERBAR: case BT_RPAR: *nextTokPtr = ptr; return XML_TOK_CLOSE_PAREN; } *nextTokPtr = ptr; return XML_TOK_INVALID; case BT_VERBAR: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OR; case BT_GT: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DECL_CLOSE; case BT_NUM: return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr); #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (IS_NMSTRT_CHAR(enc, ptr, n)) { \ ptr += n; \ tok = XML_TOK_NAME; \ break; \ } \ if (IS_NAME_CHAR(enc, ptr, n)) { \ ptr += n; \ tok = XML_TOK_NMTOKEN; \ break; \ } \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NMSTRT: case BT_HEX: tok = XML_TOK_NAME; ptr += MINBPC(enc); break; case BT_DIGIT: case BT_NAME: case BT_MINUS: #ifdef XML_NS case BT_COLON: #endif tok = XML_TOK_NMTOKEN; ptr += MINBPC(enc); break; case BT_NONASCII: if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { ptr += MINBPC(enc); tok = XML_TOK_NAME; break; } if (IS_NAME_CHAR_MINBPC(enc, ptr)) { ptr += MINBPC(enc); tok = XML_TOK_NMTOKEN; break; } /* fall through */ default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_GT: case BT_RPAR: case BT_COMMA: case BT_VERBAR: case BT_LSQB: case BT_PERCNT: case BT_S: case BT_CR: case BT_LF: *nextTokPtr = ptr; return tok; #ifdef XML_NS case BT_COLON: ptr += MINBPC(enc); switch (tok) { case XML_TOK_NAME: if (ptr == end) return XML_TOK_PARTIAL; tok = XML_TOK_PREFIXED_NAME; switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) default: tok = XML_TOK_NMTOKEN; break; } break; case XML_TOK_PREFIXED_NAME: tok = XML_TOK_NMTOKEN; break; } break; #endif case BT_PLUS: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_PLUS; case BT_AST: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_ASTERISK; case BT_QUEST: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_QUESTION; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return -tok; } static int PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { const char *start; if (ptr == end) return XML_TOK_NONE; start = ptr; while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_AMP: if (ptr == start) return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_LT: /* this is for inside entity references */ *nextTokPtr = ptr; return XML_TOK_INVALID; case BT_LF: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_CR: if (ptr == start) { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_S: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_ATTRIBUTE_VALUE_S; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } static int PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { const char *start; if (ptr == end) return XML_TOK_NONE; start = ptr; while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_AMP: if (ptr == start) return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_PERCNT: if (ptr == start) return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_LF: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_CR: if (ptr == start) { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } #ifdef XML_DTD static int PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { int level = 0; if (MINBPC(enc) > 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); end = ptr + n; } } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { INVALID_CASES(ptr, nextTokPtr) case BT_LT: if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) { if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) { ++level; ptr += MINBPC(enc); } } break; case BT_RSQB: if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr += MINBPC(enc); if (level == 0) { *nextTokPtr = ptr; return XML_TOK_IGNORE_SECT; } --level; } } break; default: ptr += MINBPC(enc); break; } } return XML_TOK_PARTIAL; } #endif /* XML_DTD */ static int PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end, const char **badPtr) { ptr += MINBPC(enc); end -= MINBPC(enc); for (; ptr != end; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { case BT_DIGIT: case BT_HEX: case BT_MINUS: case BT_APOS: case BT_LPAR: case BT_RPAR: case BT_PLUS: case BT_COMMA: case BT_SOL: case BT_EQUALS: case BT_QUEST: case BT_CR: case BT_LF: case BT_SEMI: case BT_EXCL: case BT_AST: case BT_PERCNT: case BT_NUM: #ifdef XML_NS case BT_COLON: #endif break; case BT_S: if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) { *badPtr = ptr; return 0; } break; case BT_NAME: case BT_NMSTRT: if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f)) break; default: switch (BYTE_TO_ASCII(enc, ptr)) { case 0x24: /* $ */ case 0x40: /* @ */ break; default: *badPtr = ptr; return 0; } break; } } return 1; } /* This must only be called for a well-formed start-tag or empty element tag. Returns the number of attributes. Pointers to the first attsMax attributes are stored in atts. */ static int PREFIX(getAtts)(const ENCODING *enc, const char *ptr, int attsMax, ATTRIBUTE *atts) { enum { other, inName, inValue } state = inName; int nAtts = 0; int open = 0; /* defined when state == inValue; initialization just to shut up compilers */ for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { #define START_NAME \ if (state == other) { \ if (nAtts < attsMax) { \ atts[nAtts].name = ptr; \ atts[nAtts].normalized = 1; \ } \ state = inName; \ } #define LEAD_CASE(n) \ case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONASCII: case BT_NMSTRT: case BT_HEX: START_NAME break; #undef START_NAME case BT_QUOT: if (state != inValue) { if (nAtts < attsMax) atts[nAtts].valuePtr = ptr + MINBPC(enc); state = inValue; open = BT_QUOT; } else if (open == BT_QUOT) { state = other; if (nAtts < attsMax) atts[nAtts].valueEnd = ptr; nAtts++; } break; case BT_APOS: if (state != inValue) { if (nAtts < attsMax) atts[nAtts].valuePtr = ptr + MINBPC(enc); state = inValue; open = BT_APOS; } else if (open == BT_APOS) { state = other; if (nAtts < attsMax) atts[nAtts].valueEnd = ptr; nAtts++; } break; case BT_AMP: if (nAtts < attsMax) atts[nAtts].normalized = 0; break; case BT_S: if (state == inName) state = other; else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized && (ptr == atts[nAtts].valuePtr || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open)) atts[nAtts].normalized = 0; break; case BT_CR: case BT_LF: /* This case ensures that the first attribute name is counted Apart from that we could just change state on the quote. */ if (state == inName) state = other; else if (state == inValue && nAtts < attsMax) atts[nAtts].normalized = 0; break; case BT_GT: case BT_SOL: if (state != inValue) return nAtts; break; default: break; } } /* not reached */ } static int PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) { int result = 0; /* skip &# */ ptr += 2*MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_x)) { for (ptr += MINBPC(enc); !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { int c = BYTE_TO_ASCII(enc, ptr); switch (c) { case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4: case ASCII_5: case ASCII_6: case ASCII_7: case ASCII_8: case ASCII_9: result <<= 4; result |= (c - ASCII_0); break; case ASCII_A: case ASCII_B: case ASCII_C: case ASCII_D: case ASCII_E: case ASCII_F: result <<= 4; result += 10 + (c - ASCII_A); break; case ASCII_a: case ASCII_b: case ASCII_c: case ASCII_d: case ASCII_e: case ASCII_f: result <<= 4; result += 10 + (c - ASCII_a); break; } if (result >= 0x110000) return -1; } } else { for (; !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { int c = BYTE_TO_ASCII(enc, ptr); result *= 10; result += (c - ASCII_0); if (result >= 0x110000) return -1; } } return checkCharRefNumber(result); } static int PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, const char *end) { switch ((end - ptr)/MINBPC(enc)) { case 2: if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) { switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_l: return ASCII_LT; case ASCII_g: return ASCII_GT; } } break; case 3: if (CHAR_MATCHES(enc, ptr, ASCII_a)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_m)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_p)) return ASCII_AMP; } } break; case 4: switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_q: ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_u)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_o)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_t)) return ASCII_QUOT; } } break; case ASCII_a: ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_p)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_o)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_s)) return ASCII_APOS; } } break; } } return 0; } static int PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2) { for (;;) { switch (BYTE_TYPE(enc, ptr1)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (*ptr1++ != *ptr2++) \ return 0; LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2) #undef LEAD_CASE /* fall through */ if (*ptr1++ != *ptr2++) return 0; break; case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 1) { if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 2) { if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 3) { if (*ptr2++ != *ptr1++) return 0; } } } break; default: if (MINBPC(enc) == 1 && *ptr1 == *ptr2) return 1; switch (BYTE_TYPE(enc, ptr2)) { case BT_LEAD2: case BT_LEAD3: case BT_LEAD4: case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: return 0; default: return 1; } } } /* not reached */ } static int PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1, const char *end1, const char *ptr2) { for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) { if (ptr1 == end1) return 0; if (!CHAR_MATCHES(enc, ptr1, *ptr2)) return 0; } return ptr1 == end1; } static int PREFIX(nameLength)(const ENCODING *enc, const char *ptr) { const char *start = ptr; for (;;) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: ptr += MINBPC(enc); break; default: return ptr - start; } } } static const char *PREFIX(skipS)(const ENCODING *enc, const char *ptr) { for (;;) { switch (BYTE_TYPE(enc, ptr)) { case BT_LF: case BT_CR: case BT_S: ptr += MINBPC(enc); break; default: return ptr; } } } static void PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end, POSITION *pos) { while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_LF: pos->columnNumber = (unsigned)-1; pos->lineNumber++; ptr += MINBPC(enc); break; case BT_CR: pos->lineNumber++; ptr += MINBPC(enc); if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); pos->columnNumber = (unsigned)-1; break; default: ptr += MINBPC(enc); break; } pos->columnNumber++; } } #undef DO_LEAD_CASE #undef MULTIBYTE_CASES #undef INVALID_CASES #undef CHECK_NAME_CASE #undef CHECK_NAME_CASES #undef CHECK_NMSTRT_CASE #undef CHECK_NMSTRT_CASES ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/xmltok_impl.h�����������������������������������������������������������0100644�0000764�0000144�00000003434�07121644026�020376� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is expat. The Initial Developer of the Original Code is James Clark. Portions created by James Clark are Copyright (C) 1998, 1999 James Clark. All Rights Reserved. Contributor(s): Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. */ enum { BT_NONXML, BT_MALFORM, BT_LT, BT_AMP, BT_RSQB, BT_LEAD2, BT_LEAD3, BT_LEAD4, BT_TRAIL, BT_CR, BT_LF, BT_GT, BT_QUOT, BT_APOS, BT_EQUALS, BT_QUEST, BT_EXCL, BT_SOL, BT_SEMI, BT_NUM, BT_LSQB, BT_S, BT_NMSTRT, BT_COLON, BT_HEX, BT_DIGIT, BT_NAME, BT_MINUS, BT_OTHER, /* known not to be a name or name start character */ BT_NONASCII, /* might be a name or name start character */ BT_PERCNT, BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, BT_COMMA, BT_VERBAR }; #include <stddef.h> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/xmltok_ns.c�������������������������������������������������������������0100644�0000764�0000144�00000004563�07152424061�020053� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const ENCODING *NS(XmlGetUtf8InternalEncoding)(void) { return &ns(internal_utf8_encoding).enc; } const ENCODING *NS(XmlGetUtf16InternalEncoding)(void) { #if XML_BYTE_ORDER == 12 return &ns(internal_little2_encoding).enc; #elif XML_BYTE_ORDER == 21 return &ns(internal_big2_encoding).enc; #else const short n = 1; return *(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc; #endif } static const ENCODING *NS(encodings)[] = { &ns(latin1_encoding).enc, &ns(ascii_encoding).enc, &ns(utf8_encoding).enc, &ns(big2_encoding).enc, &ns(big2_encoding).enc, &ns(little2_encoding).enc, &ns(utf8_encoding).enc /* NO_ENC */ }; static int NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr); } static int NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr); } int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name) { int i = getEncodingIndex(name); if (i == UNKNOWN_ENC) return 0; SET_INIT_ENC_INDEX(p, i); p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); p->initEnc.updatePosition = initUpdatePosition; p->encPtr = encPtr; *encPtr = &(p->initEnc); return 1; } static const ENCODING *NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) { #define ENCODING_MAX 128 char buf[ENCODING_MAX]; char *p = buf; int i; XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); if (ptr != end) return 0; *p = 0; if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) return enc; i = getEncodingIndex(buf); if (i == UNKNOWN_ENC) return 0; return NS(encodings)[i]; } int NS(XmlParseXmlDecl)(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **encodingName, const ENCODING **encoding, int *standalone) { return doParseXmlDecl(NS(findEncoding), isGeneralTextEntity, enc, ptr, end, badPtr, versionPtr, encodingName, encoding, standalone); } ���������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/Makefile.in�������������������������������������������������������������0100644�0000764�0000144�00000024516�07405520524�017740� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ LDFLAGS = -version-info "1:0:1" CFLAGS = @CFLAGS@ -DXML_NS lib_LTLIBRARIES = @XMLTOK@ EXTRA_LTLIBRARIES = libxmltok.la libxmltok_la_SOURCES = ascii.h asciitab.h iasciitab.h latin1tab.h nametab.h utf8tab.h xmldef.h xmlrole.h xmltok.h xmltok_impl.h xmlrole.c xmltok.c libxmltok_la_LDFLAGS = -rpath $(libdir) EXTRA_DIST = xmltok_impl.c xmltok_ns.c mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../../.. CPPFLAGS = @CPPFLAGS@ LIBS = @LIBS@ libxmltok_la_LIBADD = libxmltok_la_OBJECTS = xmlrole.lo xmltok.lo COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/xmlrole.P .deps/xmltok.P SOURCES = $(libxmltok_la_SOURCES) OBJECTS = $(libxmltok_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/expat/xmltok/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libxmltok.la: $(libxmltok_la_OBJECTS) $(libxmltok_la_DEPENDENCIES) $(LINK) $(libxmltok_la_LDFLAGS) $(libxmltok_la_OBJECTS) $(libxmltok_la_LIBADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules/expat/xmltok distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/expat/xmltok/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/.deps/������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520664�016704� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/.deps/xmlrole.P���������������������������������������������������������0100644�0000764�0000144�00000002475�07405520654�020513� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������xmlrole.lo xmlrole.o : xmlrole.c xmldef.h /usr/include/string.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/endian.h /usr/include/bits/endian.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/stdlib.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/alloca.h xmlrole.h xmltok.h ascii.h xmlrole.c : xmldef.h : /usr/include/string.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/stdlib.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/alloca.h : xmlrole.h : xmltok.h : ascii.h : ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/xmltok/.deps/xmltok.P����������������������������������������������������������0100644�0000764�0000144�00000002761�07405520664�020346� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������xmltok.lo xmltok.o : xmltok.c xmldef.h /usr/include/string.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \ /usr/include/bits/string.h /usr/include/bits/string2.h \ /usr/include/endian.h /usr/include/bits/endian.h \ /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/sched.h /usr/include/stdlib.h \ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ /usr/include/alloca.h xmltok.h nametab.h xmltok_impl.h ascii.h \ xmltok_impl.c asciitab.h utf8tab.h iasciitab.h latin1tab.h xmltok_ns.c xmltok.c : xmldef.h : /usr/include/string.h : /usr/include/features.h : /usr/include/sys/cdefs.h : /usr/include/gnu/stubs.h : /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h : /usr/include/bits/string.h : /usr/include/bits/string2.h : /usr/include/endian.h : /usr/include/bits/endian.h : /usr/include/bits/types.h : /usr/include/bits/pthreadtypes.h : /usr/include/bits/sched.h : /usr/include/stdlib.h : /usr/include/sys/types.h : /usr/include/time.h : /usr/include/sys/select.h : /usr/include/bits/select.h : /usr/include/bits/sigset.h : /usr/include/bits/time.h : /usr/include/sys/sysmacros.h : /usr/include/alloca.h : xmltok.h : nametab.h : xmltok_impl.h : ascii.h : xmltok_impl.c : asciitab.h : utf8tab.h : iasciitab.h : latin1tab.h : xmltok_ns.c : ���������������libwww/modules/expat/Makefile�����������������������������������������������������������������������0100644�0000764�0000144�00000023604�07405520566�016020� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = xmltok xmlparse mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/expat/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules/expat distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/expat/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������libwww/modules/expat/Makefile.in��������������������������������������������������������������������0100644�0000764�0000144�00000023221�07405520524�016412� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = xmltok xmlparse mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/expat/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules/expat distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/expat/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/.cvsignore���������������������������������������������������������������������������0100644�0000764�0000144�00000000033�06704453450�015224� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.deps Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/Makefile.am��������������������������������������������������������������������������0100644�0000764�0000144�00000000213�06664116442�015262� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. DOCS := $(wildcard *.html *.gif) EXTRA_DIST = \ $(DOCS) SUBDIRS = expat md5 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/���������������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07422617431�013717� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/CVS/�����������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405517416�014355� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/CVS/Root�������������������������������������������������������������������������0100644�0000764�0000144�00000000056�07405517416�015221� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:pserver:anonymous@dev.w3.org:/sources/public ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/CVS/Repository�������������������������������������������������������������������0100644�0000764�0000144�00000000023�07405517416�016447� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/CVS/Entries����������������������������������������������������������������������0100644�0000764�0000144�00000000245�07405517416�015707� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Mon Feb 22 01:04:24 1999// /Makefile.am/1.1/Mon Feb 22 01:04:24 1999// /md5.c/1.1/Sun Feb 21 23:56:18 1999// /md5.h/1.1/Sun Feb 21 23:56:18 1999// D �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/Makefile�������������������������������������������������������������������������0100644�0000764�0000144�00000024472�07405520567�015371� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = ../.. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = ../.. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ lib_LTLIBRARIES = libmd5.la libmd5_la_LDFLAGS = -version-info "1:0:1" libmd5_la_SOURCES = md5.c md5.h DOCS := $(wildcard *.html) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../.. CPPFLAGS = LDFLAGS = LIBS = -ldl libmd5_la_LIBADD = libmd5_la_OBJECTS = md5.lo CFLAGS = -g -O2 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/md5.P SOURCES = $(libmd5_la_SOURCES) OBJECTS = $(libmd5_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/md5/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libmd5.la: $(libmd5_la_OBJECTS) $(libmd5_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libmd5_la_LDFLAGS) $(libmd5_la_OBJECTS) $(libmd5_la_LIBADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules/md5 distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/md5/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/.cvsignore�����������������������������������������������������������������������0100644�0000764�0000144�00000000033�06664126430�015711� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.deps Makefile.in Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/Makefile.am����������������������������������������������������������������������0100644�0000764�0000144�00000000335�06664126430�015752� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with Automake to create Makefile.in. lib_LTLIBRARIES = libmd5.la libmd5_la_LDFLAGS = -version-info "1:0:1" libmd5_la_SOURCES = \ md5.c \ md5.h DOCS := $(wildcard *.html) EXTRA_DIST = \ $(DOCS) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/md5.c����������������������������������������������������������������������������0100644�0000764�0000144�00000024243�06664116442�014555� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm */ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ #include "md5.h" /* Constants for MD5Transform routine. */ #define S11 7 #define S12 12 #define S13 17 #define S14 22 #define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10 #define S43 15 #define S44 21 static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64])); static void Encode PROTO_LIST ((unsigned char *, UINT4 *, unsigned int)); static void Decode PROTO_LIST ((UINT4 *, unsigned char *, unsigned int)); static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int)); static unsigned char PADDING[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* F, G, H and I are basic MD5 functions. */ #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) /* ROTATE_LEFT rotates x left n bits. */ #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is separate from addition to prevent recomputation. */ #define FF(a, b, c, d, x, s, ac) { \ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define GG(a, b, c, d, x, s, ac) { \ (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define HH(a, b, c, d, x, s, ac) { \ (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define II(a, b, c, d, x, s, ac) { \ (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } /* MD5 initialization. Begins an MD5 operation, writing a new context. */ void MD5Init (context) MD5_CTX *context; /* context */ { context->count[0] = context->count[1] = 0; /* Load magic initialization constants. */ context->state[0] = 0x67452301; context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; } /* MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context. */ void MD5Update (context, input, inputLen) MD5_CTX *context; /* context */ unsigned char *input; /* input block */ unsigned int inputLen; /* length of input block */ { unsigned int i, index, partLen; /* Compute number of bytes mod 64 */ index = (unsigned int)((context->count[0] >> 3) & 0x3F); /* Update number of bits */ if ((context->count[0] += ((UINT4)inputLen << 3)) < ((UINT4)inputLen << 3)) context->count[1]++; context->count[1] += ((UINT4)inputLen >> 29); partLen = 64 - index; /* Transform as many times as possible. */ if (inputLen >= partLen) { MD5_memcpy ((POINTER)&context->buffer[index], (POINTER)input, partLen); MD5Transform (context->state, context->buffer); for (i = partLen; i + 63 < inputLen; i += 64) MD5Transform (context->state, &input[i]); index = 0; } else i = 0; /* Buffer remaining input */ MD5_memcpy ((POINTER)&context->buffer[index], (POINTER)&input[i], inputLen-i); } /* MD5 finalization. Ends an MD5 message-digest operation, writing the the message digest and zeroizing the context. */ void MD5Final (digest, context) unsigned char digest[16]; /* message digest */ MD5_CTX *context; /* context */ { unsigned char bits[8]; unsigned int index, padLen; /* Save number of bits */ Encode (bits, context->count, 8); /* Pad out to 56 mod 64. */ index = (unsigned int)((context->count[0] >> 3) & 0x3f); padLen = (index < 56) ? (56 - index) : (120 - index); MD5Update (context, PADDING, padLen); /* Append length (before padding) */ MD5Update (context, bits, 8); /* Store state in digest */ Encode (digest, context->state, 16); /* Zeroize sensitive information. */ MD5_memset ((POINTER)context, 0, sizeof (*context)); } /* MD5 basic transformation. Transforms state based on block. */ static void MD5Transform (state, block) UINT4 state[4]; unsigned char block[64]; { UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; Decode (x, block, 64); /* Round 1 */ FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ /* Round 2 */ GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */ HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ /* Round 4 */ II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; /* Zeroize sensitive information. */ MD5_memset ((POINTER)x, 0, sizeof (x)); } /* Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4. */ static void Encode (output, input, len) unsigned char *output; UINT4 *input; unsigned int len; { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) { output[j] = (unsigned char)(input[i] & 0xff); output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); } } /* Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4. */ static void Decode (output, input, len) UINT4 *output; unsigned char *input; unsigned int len; { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); } /* Note: Replace "for loop" with standard memcpy if possible. */ static void MD5_memcpy (output, input, len) POINTER output; POINTER input; unsigned int len; { unsigned int i; for (i = 0; i < len; i++) output[i] = input[i]; } /* Note: Replace "for loop" with standard memset if possible. */ static void MD5_memset (output, value, len) POINTER output; int value; unsigned int len; { unsigned int i; for (i = 0; i < len; i++) ((char *)output)[i] = (char)value; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/md5.h����������������������������������������������������������������������������0100644�0000764�0000144�00000004126�06664116442�014560� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MD5.H - header file for MD5C.C */ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* RSAREF types and constants */ /* PROTOTYPES should be set to one if and only if the compiler supports function argument prototyping. The following makes PROTOTYPES default to 0 if it has not already been defined with C compiler flags. */ #ifndef PROTOTYPES #define PROTOTYPES 1 #endif /* POINTER defines a generic pointer type */ typedef unsigned char *POINTER; /* UINT2 defines a two byte word */ typedef unsigned short int UINT2; /* UINT4 defines a four byte word */ typedef unsigned long int UINT4; /* PROTO_LIST is defined depending on how PROTOTYPES is defined above. If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it returns an empty list. */ #if PROTOTYPES #define PROTO_LIST(list) list #else #define PROTO_LIST(list) () #endif /* MD5 context. */ typedef struct { UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } MD5_CTX; void MD5Init PROTO_LIST ((MD5_CTX *)); void MD5Update PROTO_LIST ((MD5_CTX *, unsigned char *, unsigned int)); void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/Makefile.in����������������������������������������������������������������������0100644�0000764�0000144�00000024112�07405520524�015756� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ lib_LTLIBRARIES = libmd5.la libmd5_la_LDFLAGS = -version-info "1:0:1" libmd5_la_SOURCES = md5.c md5.h DOCS := $(wildcard *.html) EXTRA_DIST = $(DOCS) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../../wwwconf.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libmd5_la_LIBADD = libmd5_la_OBJECTS = md5.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best DEP_FILES = .deps/md5.P SOURCES = $(libmd5_la_SOURCES) OBJECTS = $(libmd5_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/md5/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libmd5.la: $(libmd5_la_OBJECTS) $(libmd5_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libmd5_la_LDFLAGS) $(libmd5_la_OBJECTS) $(libmd5_la_LIBADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules/md5 distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/md5/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/.deps/���������������������������������������������������������������������������0040755�0000764�0000144�00000000000�07405520673�014732� 5����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/md5/.deps/md5.P����������������������������������������������������������������������0100644�0000764�0000144�00000000053�07405520673�015533� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������md5.lo md5.o : md5.c md5.h md5.c : md5.h : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/Makefile�����������������������������������������������������������������������������0100644�0000764�0000144�00000023543�07405520566�014701� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh srcdir = . top_srcdir = .. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = .. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PREVIOUS_VERSION = 5.3.1 PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = expat md5 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/modules/Makefile.in��������������������������������������������������������������������������0100644�0000764�0000144�00000023163�07405520524�015276� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PREVIOUS_VERSION = @PREVIOUS_VERSION@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ DOCS := $(wildcard *.html *.gif) EXTRA_DIST = $(DOCS) SUBDIRS = expat md5 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = ../wwwconf.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = modules distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu modules/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/aclocal.m4�����������������������������������������������������������������������������������0100644�0000764�0000144�00000115306�07405520522�013420� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl aclocal.m4 generated automatically by aclocal 1.4 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. AC_DEFUN(AC_SYS_AFS_SYSNAME, [ AC_CHECK_PROG(ac_afsws_fs_found, fs, yes) AC_MSG_CHECKING(AFS system name) AC_CACHE_VAL(ac_cv_sys_afs_sysname, [ if test -n $ac_afsws_fs_found ; then ac_cv_sys_afs_sysname=`fs sysname|tr "'" " "|sed -e 's/Current sysname is //' -e 's/ //'` if test -z $ac_cv_sys_afs_sysname ; then ac_cv_sys_afs_sysname=bad_sysname fi else ac_cv_sys_afs_sysname=unknown_sysname fi ]) ac_sys_afs_sysname=$ac_cv_sys_afs_sysname AC_MSG_RESULT($ac_sys_afs_sysname) AC_SUBST(ac_sys_afs_sysname)dnl ])dnl dnl --------------------------------------------------------- ## dnl Use AC_PROG_INSTALL, supplementing it with INSTALL_SCRIPT ## dnl substitution. ## dnl --------------------------------------------------------- ## dnl AC_DEFUN(fp_PROG_INSTALL, dnl [AC_PROG_INSTALL dnl test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL} -m 755' dnl AC_SUBST(INSTALL_SCRIPT)dnl dnl ]) dnl AC_PATH_WAIS(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) AC_DEFUN(AC_PATH_WAIS, [ AC_MSG_CHECKING(for WAIS) AC_CACHE_VAL(ac_cv_path_wais, [ WAISPATH="$WAISPATH ${srcdir}/*WAIS* ${srcdir}/*wais* ${srcdir}/../*WAIS* ${srcdir}/../../*WAIS* ${srcdir}/../../../*WAIS* ${srcdir}/../*wais* ${srcdir}/../../*wais* ${srcdir}/../../../*wais*" for ac_dir in $WAISPATH ; do if test -f ${ac_dir}/include/wais.h; then ac_cv_path_wais=$ac_dir break; fi done ]) ac_path_wais=$ac_cv_path_wais test -z "$ac_path_wais" && ac_path_wais=missing AC_MSG_RESULT($ac_path_wais) if test -n "$ac_cv_path_wais"; then LIBS="$LIBS $ac_path_wais/bin/client.a $ac_path_wais/bin/wais.a" ifelse([$1], , :, [$1]) ifelse([$2], , , [else $2 ])dnl fi ]) dnl AC_PATH_TCL(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) AC_DEFUN(AC_PATH_TCL, [ AC_MSG_CHECKING(for TCL) AC_CACHE_VAL(ac_cv_path_tcl, [ TCLLIB="$TCLLIB /usr/local/lib/libtcl*.a" for ac_dir in $TCLLIB ; do if test -f $ac_dir; then ac_cv_path_tcl=$ac_dir break; fi done ]) LIBTCL="" ac_path_tcl=$ac_cv_path_tcl test -z "$ac_path_tcl" && ac_path_tcl=missing AC_MSG_RESULT($ac_path_tcl) if test -n "$ac_cv_path_tcl"; then LIBTCL="$ac_path_tcl" ifelse([$1], , :, [$1]) ifelse([$2], , , [else $2 ])dnl fi ]) dnl AC_PATH_SOCKS(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) AC_DEFUN(AC_PATH_SOCKS, [ AC_MSG_CHECKING(for SOCKS) AC_CACHE_VAL(ac_cv_path_socks, [ AC_CHECK_LIB(socks, main, ac_cv_path_socks=installed, [ SOCKSPATH="$SOCKSPATH ${srcdir}/../*SOCKS* ${srcdir}/../../*SOCKS* ${srcdir}/../../../*SOCKS* ${srcdir}/../*socks* ${srcdir}/../../*socks* ${srcdir}/../../../*socks*" for ac_dir in $SOCKSPATH; do if test -f $ac_dir/lib/libsocks.a ; then ac_cv_path_socks=$ac_dir/lib break; fi done ]) ]) ac_path_socks=$ac_cv_path_socks test -z "$ac_path_socks" && ac_path_socks=missing AC_MSG_RESULT($ac_path_socks) if test -n "$ac_cv_path_socks" && test "$ac_path_socks" != installed ; then LIBS="$LIBS $ac_path_socks/libsocks.a" fi; if test -n $ac_cv_path_socks; then ifelse([$1], , :, [$1]) ifelse([$2], , , [else $2 ])dnl fi ]) dnl AC_PROG_CC_STATIC AC_DEFUN(AC_PROG_CC_STATIC, [AC_REQUIRE([AC_PROG_CC])dnl AC_MSG_CHECKING(if the C compiler accepts -static) AC_CACHE_VAL(ac_cv_prog_cc_static, [ ac_save_cflags="$CFLAGS" CFLAGS="-static" AC_TRY_LINK(,[int main(){return(0);}], ac_cv_prog_cc_static=yes,ac_cv_prog_cc_static=no) CFLAGS="$ac_save_cflags" ])dnl AC_MSG_RESULT($ac_cv_prog_cc_static) if test $ac_cv_prog_cc_static = yes; then CFLAGS="$CFLAGS -static" fi ]) dnl AC_PROG_CC_DEBUG AC_DEFUN(AC_PROG_CC_DEBUG, [AC_REQUIRE([AC_PROG_CC])dnl AC_MSG_CHECKING(if the C compiler accepts -g) AC_CACHE_VAL(ac_cv_prog_cc_debug, [ ac_save_cflags="$CFLAGS" CFLAGS="-g" AC_TRY_LINK(,[int main(){return(0);}], ac_cv_prog_cc_debug=yes,ac_cv_prog_cc_debug=no) CFLAGS="$ac_save_cflags" ])dnl AC_MSG_RESULT($ac_cv_prog_cc_debug) if test $ac_cv_prog_cc_debug = yes; then CFLAGS="$CFLAGS -g" fi ]) dnl AC_TYPE_FD_SET AC_DEFUN(AC_TYPE_FD_SET, [AC_MSG_CHECKING(for fd_set) AC_CACHE_VAL(ac_cv_type_fd_set, [ AC_HEADER_INCLUDE(tmp_inc_select, sys/select.h select.h) AC_EGREP_CPP(fd_set, [$tmp_inc_select #include <sys/types.h> #ifdef STDC_HEADERS #include <stdlib.h> #endif ], ac_cv_type_fd_set=yes, ac_cv_type_fd_set=no)])dnl AC_MSG_RESULT($ac_cv_type_fd_set) if test $ac_cv_type_fd_set = no; then AC_DEFINE(fd_set, unsigned int) fi ]) dnl AC_C_EXTERN_TYPEDEF_FUNC AC_DEFUN(AC_C_EXTERN_TYPEDEF_FUNC, [AC_MSG_CHECKING(if an extern declaration of a typedefed function may precede its definition) AC_CACHE_VAL(ac_cv_c_extern_typedef_func, [AC_TRY_COMPILE([ typedef int foo_t(); extern foo_t foo; int foo() { return 0; } ], , ac_cv_c_extern_typedef_func=yes, ac_cv_c_extern_typedef_func=no)])dnl AC_MSG_RESULT($ac_cv_c_extern_typedef_func) if test $ac_cv_c_extern_typedef_func = no ; then AC_DEFINE(NO_EXTERN_TYPEDEF_FUNC) fi ]) dnl AC_C_PTR_UNDEF_STRUCT AC_DEFUN(AC_C_PTR_UNDEF_STRUCT, [AC_MSG_CHECKING(if pointers to undefined structures are allowed) AC_CACHE_VAL(ac_cv_c_ptr_undef_struct, [AC_TRY_COMPILE([typedef struct _foo foo; extern foo *bar();], bar();, ac_cv_c_ptr_undef_struct=yes, ac_cv_c_ptr_undef_struct=no)])dnl AC_MSG_RESULT($ac_cv_c_ptr_undef_struct) if test $ac_cv_c_ptr_undef_struct = no; then AC_DEFINE(NO_PTR_UNDEF_STRUCT) fi ]) dnl AC_PROG_TELNET_L dnl Ok, it's a hack of a method. Got anything better? AC_DEFUN(AC_PROG_TELNET_L, [ AC_MSG_CHECKING(if telnet accepts the -l flag) AC_CACHE_VAL(ac_cv_prog_telnet_l, [ if test -r `which telnet` \ && strings `which telnet` | egrep 'usage.*-l' > /dev/null ; then ac_cv_prog_telnet_l=yes else ac_cv_prog_telnet_l=no fi])dnl AC_MSG_RESULT($ac_cv_prog_telnet_l) if test $ac_cv_prog_telnet_l = yes; then AC_DEFINE(TELNET_MINUS_L) fi ]) dnl AC_FILE_RESOLV_CONF dnl Yeah, it should be very general. So sue me. AC_DEFUN(AC_FILE_RESOLV_CONF, [ AC_MSG_CHECKING(for resolver configuration file) AC_CACHE_VAL(ac_cv_file_resolv_conf, [ if test -f /etc/resolv.conf; then ac_cv_file_resolv_conf=/etc/resolv.conf fi])dnl AC_MSG_RESULT($ac_cv_file_resolv_conf) if test -n $ac_cv_file_resolv_conf; then AC_DEFINE_UNQUOTED(RESOLV_CONF, "$ac_cv_file_resolv_conf") fi ]) dnl AC_CHECK_EXTERN(EXTERN, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) AC_DEFUN(AC_CHECK_EXTERN, [ AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(ac_cv_extern_$1, [ AC_TRY_LINK(ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus extern "C" #endif ])dnl [extern char * $1; ], [ * $1 = '\0'; ], eval "ac_cv_extern_$1=yes", eval "ac_cv_extern_$1=no")])dnl if eval "test \"`echo '$ac_cv_extern_'$1`\" = yes"; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) ifelse([$3], , , [$3 ])dnl fi ]) dnl AC_CHECK_EXTERNS(EXTERN... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) AC_DEFUN(AC_CHECK_EXTERNS, [for ac_exter in $1 do AC_CHECK_EXTERN($ac_exter, [changequote(, )dnl ac_tr_exter=HAVE_`echo $ac_exter | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` changequote([, ])dnl AC_DEFINE_UNQUOTED($ac_tr_exter) $2], $3)dnl done ]) dnl AC_C_VOLATILE AC_DEFUN(AC_C_VOLATILE, [ AC_MSG_CHECKING([for working volatile]) AC_CACHE_VAL(ac_cv_c_volatile, [ AC_TRY_COMPILE(,[ extern volatile int errno; ], ac_cv_c_volatile=yes, ac_cv_c_volatile=no)])dnl AC_MSG_RESULT($ac_cv_c_volatile) if test $ac_cv_c_volatile = no; then AC_DEFINE(volatile, ) fi ]) dnl AC_C_NOSHARE AC_DEFUN(AC_C_NOSHARE, [ AC_MSG_CHECKING([for working noshare]) AC_CACHE_VAL(ac_cv_c_noshare, [ AC_TRY_COMPILE(,[ extern noshare int errno; ], ac_cv_c_noshare=yes, ac_cv_c_noshare=no)])dnl AC_MSG_RESULT($ac_cv_c_noshare) if test $ac_cv_c_noshare = no; then AC_DEFINE(noshare, ) fi ]) dnl AC_HEADER_INCLUDE(VARIABLE, INCLUDES) AC_DEFUN(AC_HEADER_INCLUDE, [ $1="" for ac_hdr in $2; do AC_TRY_CPP([#include <$ac_hdr>], [ $1="[#]include <$ac_hdr>" break]) done ]) dnl AC_WEIRD_ACCEPT dnl I couldn't even think of an appropriate name for this macro. dnl On some platforms (e.g., Sequent/Dynix), the accept(2) call dnl must be called on nonblocking sockets for the remote dnl connect(2) call to complete. Their man page says: dnl dnl NOTES dnl In DYNIX/ptx, the accept call actually completes the network dnl connect. BSD systems typically complete the connection dnl independently of the accept call. This can have the effect dnl of blocking the remote connect call until the accept call is dnl executed. dnl dnl The below program tests for this behaivour. If it exits zero, dnl then it would appear we're on one of these screwed machines; dnl a negative code means we're on a normal machine and a positive dnl means the test failed but we'll assume normal behaviour. dnl dnl I would like to thank Bill Rushka <wcr@aps.org> for his kind help dnl in working this out. Any problems with this macro or program are dnl strictly my (<roeber@cern.ch>) fault. dnl AC_DEFUN(AC_WEIRD_ACCEPT, [ AC_MSG_CHECKING(for unusual accept call) AC_CACHE_VAL(ac_cv_weird_accept, [ AC_HEADER_INCLUDE(tmp_inc_types, sys/types.h types.h) AC_HEADER_INCLUDE(tmp_inc_socket, sys/socket.h socket.h) AC_HEADER_INCLUDE(tmp_inc_in, netinet/in.h in.h) AC_HEADER_INCLUDE(tmp_inc_inet, arpa/inet.h inet.h) AC_HEADER_INCLUDE(tmp_inc_fcntl, sys/fcntl.h fcntl.h) AC_HEADER_INCLUDE(tmp_inc_file, sys/file.h file.h) AC_HEADER_INCLUDE(tmp_inc_time, sys/time.h time.h) AC_HEADER_INCLUDE(tmp_inc_wait, sys/wait.h wait.h) AC_TRY_RUN([ #include <stdio.h> $tmp_inc_types $tmp_inc_socket $tmp_inc_in $tmp_inc_inet $tmp_inc_fcntl $tmp_inc_file $tmp_inc_time $tmp_inc_wait #ifndef INADDR_LOOPBACK #define INADDR_LOOPBACK 0x7F000001 #endif int main() { int s, t, f, a; struct sockaddr_in sin, tin; int sin_len, tin_len; struct timeval v; fd_set d; sin_len = tin_len = sizeof(struct sockaddr_in); if( (s = socket(AF_INET, SOCK_STREAM, 0)) == -1 ) exit(1); if( (f = fcntl(s, F_GETFL, 0)) == -1 ) exit(2); f |= FNDELAY; if( fcntl(s, F_SETFL, f) == -1 ) exit(3); sin.sin_family = AF_INET; sin.sin_port = htons(0); sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if( bind(s, (struct sockaddr *)&sin, sin_len) == -1 ) exit(4); if( getsockname(s, (struct sockaddr *)&sin, &sin_len) == -1 ) exit(5); if( listen(s, 2) == -1 ) exit(6); switch( fork() ) { case -1: exit(7); case 0: break; default: (void)wait(&a); exit(((int)a) >> 8); } (void)close(s); if( (t = socket(AF_INET, SOCK_STREAM, 0)) == -1 ) exit(8); if( (f = fcntl(t, F_GETFL, 0)) == -1 ) exit(9); f |= FNDELAY; if( fcntl(t, F_SETFL, f) == -1 ) exit(10); tin.sin_family = AF_INET; tin.sin_port = sin.sin_port; tin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if( connect(t, (struct sockaddr *)&tin, tin_len) != -1 ) exit(-1); v.tv_sec = 2; v.tv_usec = 0; FD_SET(t, &d); switch( select(sizeof(int), 0, &d, 0, &v) ) { case -1: exit(11); case 0: exit(0); case 1: exit(-2); } return -1; } ], ac_cv_weird_accept=yes, ac_cv_weird_accept=no, ac_cv_weird_accept=xcc)]) AC_MSG_RESULT($ac_cv_weird_accept) if test $ac_cv_weird_accept = yes; then AC_DEFINE(WEIRD_ACCEPT) fi ]) dnl AC_HEADER_TIOCGWINSZ AC_DEFUN(AC_HEADER_TIOCGWINSZ, [ AC_MSG_CHECKING([for TIOCGWINSZ get-window-size capability]) AC_CACHE_VAL(ac_cv_header_tiocgwinsz, [ AC_HEADER_INCLUDE(tmp_inc_termios, sys/termios.h termios.h) AC_EGREP_HEADER(yes, [ $tmp_inc_termios #ifdef TIOCGWINSZ yes #endif ], ac_cv_header_tiocgwinsz=yes, ac_cv_header_tiocgwinsz=no)])dnl AC_MSG_RESULT($ac_cv_header_tiocgwinsz) if test $ac_cv_header_tiocgwinsz = yes; then AC_DEFINE(GET_SCREEN_SIZE) fi ]) dnl AC_SYS_NEED_SIGNAL_RESET dnl If signal handlers need to be reset, define NEED_SIGNAL_RESET AC_DEFUN(AC_SYS_NEED_SIGNAL_RESET, [ AC_MSG_CHECKING(if signal handlers need to be reset) AC_CACHE_VAL(ac_cv_sys_need_signal_reset, [ AC_TRY_RUN( [ handle_hup(){return;} main(){signal(1, handle_hup);kill(getpid(),1); exit(((int *)signal(1, handle_hup))==((int *)handle_hup));}], ac_cv_sys_need_signal_reset=yes, ac_cv_sys_need_signal_reset=no, ac_cv_sys_need_signal_reset=cross-compiling) ]) AC_MSG_RESULT($ac_cv_sys_need_signal_reset) if test $ac_cv_sys_need_signal_reset = yes; then AC_DEFINE(NEED_SIGNAL_RESET) fi ])dnl dnl AC_TYPE_STATUS_T dnl Define status_t to be whatever wait/wait3/waitpid want. AC_DEFUN(AC_TYPE_STATUS_T, [ AC_MSG_CHECKING(for what the wait calls want) AC_CACHE_VAL(ac_cv_type_status_t, [ AC_TRY_COMPILE([#include <sys/types.h> #include <sys/wait.h> ], [union wait x; wait3(&x, 0, NULL);], ac_cv_type_status_t="union wait", ac_cv_type_status_t=int)]) AC_MSG_RESULT($ac_cv_type_status_t) AC_DEFINE_UNQUOTED(status_t, $ac_cv_type_status_t) ])dnl dnl AC_STRUCT_GMTOFF dnl If struct tm contains tm_gmtoff, define HAVE_TM_GMTOFF. Otherwise, dnl if timezone and/or altzone exist, define HAVE_TIMEZONE and/or dnl HAVE_ALTZONE respectively. Finally, if the timezone value is dnl backwards, define NEGATIVE_TIMEZONE. AC_DEFUN(AC_STRUCT_GMTOFF, [ AC_REQUIRE([AC_STRUCT_TM])dnl AC_MSG_CHECKING([for tm_gmtoff in struct tm]) AC_CACHE_VAL(ac_cv_struct_gmtoff, [ AC_TRY_COMPILE([#include <sys/types.h> #include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;], ac_cv_struct_gmtoff=yes, ac_cv_struct_gmtoff=no)]) AC_MSG_RESULT($ac_cv_struct_gmtoff) if test $ac_cv_struct_gmtoff = yes; then AC_DEFINE(HAVE_TM_GMTOFF) fi AC_MSG_CHECKING(for time.h that defines timezone) AC_CACHE_VAL(ac_cv_extern_timezone, [AC_TRY_COMPILE([#include <time.h>], [return timezone;], ac_cv_extern_timezone=yes, ac_cv_extern_timezone=no)]) AC_MSG_RESULT($ac_cv_extern_timezone) if test $ac_cv_extern_timezone = yes; then AC_DEFINE(HAVE_TIMEZONE) fi dnl Borrowed from the Python distribution... AC_MSG_CHECKING(for time.h that defines altzone) AC_CACHE_VAL(ac_cv_extern_altzone, [AC_TRY_COMPILE([#include <time.h>], [return altzone;], ac_cv_extern_altzone=yes, ac_cv_extern_altzone=no)]) AC_MSG_RESULT($ac_cv_extern_altzone) if test $ac_cv_extern_altzone = yes; then AC_DEFINE(HAVE_ALTZONE) fi AC_MSG_CHECKING(for time.h that defines daylight) AC_CACHE_VAL(ac_cv_extern_daylight, [AC_TRY_COMPILE([#include <time.h>], [return daylight;], ac_cv_extern_daylight=yes, ac_cv_extern_daylight=no)]) AC_MSG_RESULT($ac_cv_extern_daylight) if test $ac_cv_extern_daylight = yes; then AC_DEFINE(HAVE_DAYLIGHT) fi if test $ac_cv_extern_timezone = yes; then AC_REQUIRE([AC_ISC_POSIX])dnl AC_MSG_CHECKING(if timezone is backwards) AC_CACHE_VAL(ac_cv_backwards_timezone, dnl Bletcherosity alert! This will work for the USA and Europe, and dnl countries sharing their timezones. It will be exactly wrong for dnl the Atlantic ocean, bits of Russia, and minor third-world dnl countries. The far East will default to "no," regardless of dnl platform. If you can come up with something better, great -- dnl Please let me know! [ AC_TRY_RUN([main(){ extern long timezone; switch( timezone/3600 ) { /* OK: */ case 5: case 6: case 7: case 8: /* USA */ case 0: case -1: case -2: /* Europe */ exit(0); /* Backwards: */ case -5: case -6: case -7: case -8: /* USA */ case 1: case 2: /* Europe */ exit(1); /* Other country -- default to ok: */ default: exit(0); } return 0;}], ac_cv_backwards_timezone=no, ac_cv_backwards_timezone=yes, ac_cv_backwards_timezone=cross-compiling)]) AC_MSG_RESULT($ac_cv_backwards_timezone) if test $ac_cv_backwards_timezone = yes; then AC_DEFINE(NEGATIVE_TIMEZONE) fi fi ])dnl dnl AC_OUTPUT_PARALLEL(DIRECTORY...) define(AC_OUTPUT_PARALLEL, [ define([AC_LIST_PARALLEL_DIRS], [$1])dnl subdirs="AC_LIST_PARALLEL_DIRS" AC_SUBST(subdirs)dnl if test "$no_recursion" != yes; then # Remove --cache-file and --srcdir arguments so they do not pile up. ac_sub_configure_args= ac_prev= for ac_arg in $ac_configure_args; do if test -n "$ac_prev"; then ac_prev= continue fi case "$ac_arg" in -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; esac done for ac_config_dir in $1; do # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. if test ! -d ${srcdir}/../$ac_config_dir; then continue fi echo configuring in $ac_config_dir ac_pd=`pwd` ac_bn=`basename $ac_pd` AC_SUBST(ac_bn) case "${srcdir}" in .) ;; *) if test -d ${srcdir}/../$ac_config_dir/$ac_bn || mkdir ${srcdir}/../$ac_config_dir/$ac_bn; then :; else AC_MSG_ERROR(can not create `pwd`/${srcdir}/../$ac_config_dir/$bn) fi ;; esac ac_popdir=`pwd` cd ${srcdir}/../$ac_config_dir/$ac_bn ac_sub_srcdir=${srcdir} # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_sub_srcdir/configure; then ac_sub_configure=$ac_sub_srcdir/configure elif test -f $ac_sub_srcdir/configure.in; then ac_sub_configure=$ac_configure else AC_MSG_WARN(no configuration information is in $ac_sub_srcdir) dnl AC_MSG_WARN(no configuration information is in $ac_config_dir) ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then echo "[running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args ] --srcdir=$ac_sub_srcdir" # The eval makes quoting arguments work. if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --srcdir=$ac_sub_srcdir then : else AC_MSG_ERROR($ac_sub_configure failed for $ac_config_dir) fi fi cd $ac_popdir done fi ]) dnl AC_STRUCT_DIRENT_INO AC_DEFUN(AC_STRUCT_DIRENT_INO, [ AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(if directory entries have inodes) AC_CACHE_VAL(ac_cv_struct_dirent_ino, [ AC_TRY_COMPILE([#if HAVE_DIRENT_H #include <dirent.h> #else #define dirent direct #if HAVE_SYS_NDIR_H #include <sys/ndir.h> #endif #if HAVE_SYS_DIR_H #include <sys/dir.h> #endif #if HAVE_DIR_H #include <ndir.h> #endif #endif ], [struct dirent foo; foo.d_ino;], ac_cv_struct_dirent_ino=yes, ac_cv_struct_dirent_ino=no)]) AC_MSG_RESULT($ac_cv_struct_dirent_ino) if test $ac_cv_struct_dirent_ino = yes ; then AC_DEFINE(HAVE_DIRENT_INO) fi ]) dnl AC_STRUCT_WINSIZE AC_DEFUN(AC_STRUCT_WINSIZE, [ AC_CACHE_CHECK(for winsize structure, ac_cv_struct_winsize, [ AC_TRY_COMPILE([ #ifdef HAVE_TERMIOS_H #include <termios.h> #endif #ifdef HAVE_SYS_IOCTL_H #include <sys/ioctl.h> #endif ], [struct winsize foo;], ac_cv_struct_winsize=yes, ac_cv_struct_winsize=no)]) if test $ac_cv_struct_winsize = yes ; then AC_DEFINE(HAVE_WINSIZE) fi ]) dnl AC_CHECK_SIZEOF_TYPE_T AC_DEFUN(AC_CHECK_SIZEOF_TIME_T, [AC_CACHE_CHECK(for whether time_t is long, ac_cv_c_long_time_t, [AC_TRY_RUN([ #include <time.h> int main() { exit(sizeof(time_t) == sizeof(long)); }], ac_cv_c_long_time_t=no, ac_cv_c_long_time_t=yes) ]) if test $ac_cv_c_long_time_t = yes; then AC_DEFINE(HAVE_LONG_TIME_T) fi ]) dnl AC_CHECK_SIZEOF_SIZE_T AC_DEFUN(AC_CHECK_SIZEOF_SIZE_T, [AC_CACHE_CHECK(for whether size_t is long, ac_cv_c_long_size_t, [AC_TRY_RUN([ #include <stddef.h> int main() { exit(sizeof(size_t) == sizeof(int)); }], ac_cv_c_long_size_t=yes, ac_cv_c_long_size_t=no) ]) if test $ac_cv_c_long_size_t = yes; then AC_DEFINE(HAVE_LONG_SIZE_T) fi ]) dnl AC_ADDLIB AC_DEFUN(AC_ADDLIB, [ AC_MSG_CHECKING([for $1]) LP=`dirname $1` LN=`basename $1 | sed 's/lib\(.*\)\.a/\1/g'` AC_MSG_RESULT([-L$LP -l$LN]) LIBS="$LIBS -L$LP -l$LN" ]) dnl AC_DECL_NEED_SYS_ERR (Let me know if you have a better name.) dnl Some systems don't have strerror; *do* have sys_errlist and sys_nerr, dnl but don't declare them. SunOS, for instance. dnl This isn't a perfect test, but we can combine it with HAVE_STRERROR, dnl HAVE_SYS_ERRLIST and HAVE_SYS_NERR. AC_DEFUN(AC_DECL_NEED_SYS_ERR, [ AC_MSG_CHECKING(if sys_errlist must be declared) AC_CACHE_VAL(ac_cv_decl_need_sys_errlist, [ AC_HEADER_INCLUDE(tmp_inc_errno, errno.h sys/errno.h) AC_TRY_COMPILE([$tmp_inc_errno], [*sys_errlist;], ac_cv_decl_need_sys_errlist=no, ac_cv_decl_need_sys_errlist=yes)]) AC_MSG_RESULT($ac_cv_decl_need_sys_errlist) if test $ac_cv_decl_need_sys_errlist = yes ; then AC_DEFINE(NEED_SYS_ERRLIST_DECLARED) fi AC_MSG_CHECKING(if sys_nerr must be declared) AC_CACHE_VAL(ac_cv_decl_need_sys_nerr, [ AC_HEADER_INCLUDE(tmp_inc_errno, errno.h sys/errno.h) AC_TRY_COMPILE([$tmp_inc_errno], [sys_nerr;], ac_cv_decl_need_sys_nerr=no, ac_cv_decl_need_sys_nerr=yes)]) AC_MSG_RESULT($ac_cv_decl_need_sys_nerr) if test $ac_cv_decl_need_sys_nerr = yes ; then AC_DEFINE(NEED_SYS_NERR_DECLARED) fi ])dnl # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 dnl Usage: dnl AM_INIT_AUTOMAKE(package,version, [no-define]) AC_DEFUN(AM_INIT_AUTOMAKE, [AC_REQUIRE([AC_PROG_INSTALL]) PACKAGE=[$1] AC_SUBST(PACKAGE) VERSION=[$2] AC_SUBST(VERSION) dnl test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi ifelse([$3],, AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) AC_REQUIRE([AM_SANITY_CHECK]) AC_REQUIRE([AC_ARG_PROGRAM]) dnl FIXME This is truly gross. missing_dir=`cd $ac_aux_dir && pwd` AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_REQUIRE([AC_PROG_MAKE_SET])]) # # Check to make sure that the build environment is sane. # AC_DEFUN(AM_SANITY_CHECK, [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "[$]*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "[$]*" != "X $srcdir/configure conftestfile" \ && test "[$]*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "[$]2" = conftestfile ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi rm -f conftest* AC_MSG_RESULT(yes)]) dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) dnl The program must properly implement --version. AC_DEFUN(AM_MISSING_PROG, [AC_MSG_CHECKING(for working $2) # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if ($2 --version) < /dev/null > /dev/null 2>&1; then $1=$2 AC_MSG_RESULT(found) else $1="$3/missing $2" AC_MSG_RESULT(missing) fi AC_SUBST($1)]) # Like AC_CONFIG_HEADER, but automatically create stamp file. AC_DEFUN(AM_CONFIG_HEADER, [AC_PREREQ([2.12]) AC_CONFIG_HEADER([$1]) dnl When config.status generates a header, we must update the stamp-h file. dnl This file resides in the same directory as the config header dnl that is generated. We must strip everything past the first ":", dnl and everything past the last "/". AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, <<am_indx=1 for am_file in <<$1>>; do case " <<$>>CONFIG_HEADERS " in *" <<$>>am_file "*<<)>> echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx ;; esac am_indx=`expr "<<$>>am_indx" + 1` done<<>>dnl>>) changequote([,]))]) # serial 40 AC_PROG_LIBTOOL AC_DEFUN(AC_PROG_LIBTOOL, [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl # Save cache, so that ltconfig can load it AC_CACHE_SAVE # Actually configure libtool. ac_aux_dir is where install-sh is found. CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ || AC_MSG_ERROR([libtool configure failed]) # Reload cache, that may have been modified by ltconfig AC_CACHE_LOAD # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl # Redirect the config.log output again, so that the ltconfig log is not # clobbered by the next message. exec 5>>./config.log ]) AC_DEFUN(AC_LIBTOOL_SETUP, [AC_PREREQ(2.13)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl dnl case "$target" in NONE) lt_target="$host" ;; *) lt_target="$target" ;; esac # Check for any special flags to pass to ltconfig. # # the following will cause an existing older ltconfig to fail, so # we ignore this at the expense of the cache file... Checking this # will just take longer ... bummer! #libtool_flags="--cache-file=$cache_file" # test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], [libtool_flags="$libtool_flags --enable-dlopen"]) ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], [libtool_flags="$libtool_flags --enable-win32-dll"]) AC_ARG_ENABLE(libtool-lock, [ --disable-libtool-lock avoid locking (might break parallel builds)]) test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" # Some flags need to be propagated to the compiler or linker for good # libtool support. case "$lt_target" in *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case "`/usr/bin/file conftest.o`" in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], [*-*-cygwin* | *-*-mingw*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; ]) esac ]) # AC_LIBTOOL_DLOPEN - enable checks for dlopen support AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) # AC_ENABLE_SHARED - implement the --enable-shared flag # Usage: AC_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. AC_DEFUN(AC_ENABLE_SHARED, [dnl define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(shared, changequote(<<, >>)dnl << --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} case "$enableval" in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$ac_save_ifs" ;; esac], enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl ]) # AC_DISABLE_SHARED - set the default shared flag to --disable-shared AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no)]) # AC_ENABLE_STATIC - implement the --enable-static flag # Usage: AC_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. AC_DEFUN(AC_ENABLE_STATIC, [dnl define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(static, changequote(<<, >>)dnl << --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} case "$enableval" in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$ac_save_ifs" ;; esac], enable_static=AC_ENABLE_STATIC_DEFAULT)dnl ]) # AC_DISABLE_STATIC - set the default static flag to --disable-static AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no)]) # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(fast-install, changequote(<<, >>)dnl << --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} case "$enableval" in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$ac_save_ifs" ;; esac], enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl ]) # AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no)]) # AC_PROG_LD - find the path to the GNU or non-GNU linker AC_DEFUN(AC_PROG_LD, [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld if test "$ac_cv_prog_gcc" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. changequote(,)dnl [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' changequote([,])dnl # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(ac_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then ac_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else ac_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$ac_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_PROG_LD_GNU ]) AC_DEFUN(AC_PROG_LD_GNU, [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then ac_cv_prog_gnu_ld=yes else ac_cv_prog_gnu_ld=no fi]) ]) # AC_PROG_NM - find the path to a BSD-compatible name lister AC_DEFUN(AC_PROG_NM, [AC_MSG_CHECKING([for BSD-compatible nm]) AC_CACHE_VAL(ac_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. ac_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -B" break elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -p" break else ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm fi]) NM="$ac_cv_path_NM" AC_MSG_RESULT([$NM]) ]) # AC_CHECK_LIBM - check for math library AC_DEFUN(AC_CHECK_LIBM, [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case "$lt_target" in *-*-beos* | *-*-cygwin*) # These system don't have libm ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, main, LIBM="-lm") ;; esac ]) # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for # the libltdl convenience library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-convenience to the # configure arguments. Note that LIBLTDL and INCLTDL are not # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not # provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed # with '${top_builddir}/' and INCLTDL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case "$enable_ltdl_convenience" in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; esac LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) ]) # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for # the libltdl installable library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-install to the configure # arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is # AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed # libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed # with '${top_srcdir}/' (note the single quotes!). If your package is # not flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, main, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then AC_MSG_WARN([libltdl not installed, but installation disabled]) else enable_ltdl_install=yes fi ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" INCLTDL= fi ]) dnl old names AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl dnl This is just to silence aclocal about the macro not being used ifelse([AC_DISABLE_FAST_INSTALL])dnl ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/wwwconf.h������������������������������������������������������������������������������������0100644�0000764�0000144�00000034664�07405520601�013430� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wwwconf.h. Generated automatically by configure. */ /* wwwconf.h.in. Generated automatically from configure.in by autoheader. */ /* Define if type char is unsigned and you are not using gcc. */ #ifndef __CHAR_UNSIGNED__ /* #undef __CHAR_UNSIGNED__ */ #endif /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define to the type of elements in the array set by `getgroups'. Usually this is either `int' or `gid_t'. */ #define GETGROUPS_T gid_t /* Define to `int' if <sys/types.h> doesn't define. */ /* #undef gid_t */ /* Define if you don't have vprintf but do have _doprnt. */ /* #undef HAVE_DOPRNT */ /* Define if the `long double' type works. */ #define HAVE_LONG_DOUBLE 1 /* Define if you have the strftime function. */ #define HAVE_STRFTIME 1 /* Define if you have <sys/wait.h> that is POSIX.1 compatible. */ #define HAVE_SYS_WAIT_H 1 /* Define if your struct tm has tm_zone. */ #define HAVE_TM_ZONE 1 /* Define if you don't have tm_zone but do have the external array tzname. */ /* #undef HAVE_TZNAME */ /* Define if you have the vprintf function. */ #define HAVE_VPRINTF 1 /* Define to `int' if <sys/types.h> doesn't define. */ /* #undef mode_t */ /* Define to `int' if <sys/types.h> doesn't define. */ /* #undef pid_t */ /* Define if you need to in order for stat and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define as the return type of signal handlers (int or void). */ #define RETSIGTYPE void /* Define to `unsigned' if <sys/types.h> doesn't define. */ /* #undef size_t */ /* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both <sys/time.h> and <time.h>. */ #define TIME_WITH_SYS_TIME 1 /* Define if your <sys/time.h> declares struct tm. */ /* #undef TM_IN_SYS_TIME */ /* Define to `int' if <sys/types.h> doesn't define. */ /* #undef uid_t */ /* Define if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ /* #undef WORDS_BIGENDIAN */ /* Define to enable direct WAIS access. */ /* #undef HT_DIRECT_WAIS */ /* Define to enable mysql access. */ /* #undef HT_MYSQL */ /* Define to enable MD5 for HTTP access authentication. */ #define HT_MD5 1 /* Define to enable expat XML parser. */ #define HT_EXPAT 1 /* Define to enable Zlib compression / decompression support. */ /* #undef HT_ZLIB */ /* Define to enable POSIX RegEx support. */ /* #undef HT_POSIX_REGEX */ /* Define to enable support for enabling a rules file w/o user interaction. */ /* #undef HT_AUTOMATIC_RULES */ /* Define to enable SOCKS firewall-breaching code. */ /* #undef SOCKS */ /* #undef SOCKS4 */ /* #undef SOCKS5 */ /* Define to build Cyrillic version. */ /* #undef CYRILLIC */ /* Define to use internal signal handler */ /* #undef WWWLIB_SIG */ /* Define to build using reentrant system calls. */ /* #undef HT_REENTRANT */ /* Define to use the two-argument variant of ctime_r */ /* #undef HAVE_CTIME_R_2 */ /* Define to use the three-argument variant of ctime_r */ /* #undef HAVE_CTIME_R_3 */ /* Define to use the two-argument variant of readdir_r */ /* #undef HAVE_READDIR_R_2 */ /* Define to use the three-argument variant of readdir_r */ /* #undef HAVE_READDIR_R_3 */ /* Define to use the three-argument variant of gethostbyname_r */ /* #undef HAVE_GETHOSTBYNAME_R_3 */ /* Define to use the five-argument variant of gethostbyname_r */ /* #undef HAVE_GETHOSTBYNAME_R_5 */ /* Define to use the six-argument variant of gethostbyname_r */ /* #undef HAVE_GETHOSTBYNAME_R_6 */ /* Define to use the five-argument variant of gethostbyaddr_r */ /* #undef HAVE_GETHOSTBYADDR_R_5 */ /* Define to use the seven-argument variant of gethostbyaddr_r */ /* #undef HAVE_GETHOSTBYADDR_R_7 */ /* Define to use the eight-argument variant of gethostbyaddr_r */ /* #undef HAVE_GETHOSTBYADDR_R_8 */ /* Define if getlogin_r returns an integer */ /* #undef GETLOGIN_R_RETURNS_INT */ /* Define if getlogin_r returns a pointer */ /* #undef GETLOGIN_R_RETURNS_POINTER */ /* Define to be the package name. */ #define W3C_PACKAGE "w3c-libwww" /* Define to be the version. */ #define W3C_VERSION "5.3.2" /* Define this to be the prefix for cache files. */ #define CACHE_FILE_PREFIX "/usr/wsrc/" /* Define to disable Nagle's algorithm */ #define HT_NO_NAGLE 1 /* Define to disable HTTP/1.1 pipelining */ /* #undef HT_NO_PIPELINING */ /* Define to disable HTTP/1.1 pipelining */ /* #undef HT_NO_PIPELINING */ /* Define to enable MUX as HTTP transport */ /* #undef HT_MUX */ /* Define this if it's not typedef'd automatically. */ #define BOOLEAN char /* Define this to be the location of the resolver configuration file. */ #define RESOLV_CONF "/etc/resolv.conf" /* Define this to be the rlogin program name. */ #define RLOGIN_PROGRAM "rlogin" /* Define this to be the telnet program name. */ #define TELNET_PROGRAM "telnet" /* Define this to be the tn3270 program name. */ /* #undef TN3270_PROGRAM */ /* Define this if it isn't in the header files. */ /* #undef u_char */ /* For removing a file */ /* #undef unlink */ /* Define this if it isn't in the header files. */ /* #undef u_short */ /* Define this if it isn't in the header files. */ /* #undef u_long */ /* Define if type_t is of type long */ #define HAVE_LONG_TIME_T 1 /* Define if size_t is of type long */ /* #undef HAVE_LONG_SIZE_T */ /* The number of bytes in a char. */ #define SIZEOF_CHAR 1 /* The number of bytes in a char *. */ #define SIZEOF_CHAR_P 4 /* The number of bytes in a int. */ #define SIZEOF_INT 4 /* The number of bytes in a long. */ #define SIZEOF_LONG 4 /* Define if you have the chdir function. */ #define HAVE_CHDIR 1 /* Define if you have the fcntl function. */ #define HAVE_FCNTL 1 /* Define if you have the getcwd function. */ #define HAVE_GETCWD 1 /* Define if you have the getdomainname function. */ #define HAVE_GETDOMAINNAME 1 /* Define if you have the gethostname function. */ #define HAVE_GETHOSTNAME 1 /* Define if you have the getlogin function. */ #define HAVE_GETLOGIN 1 /* Define if you have the getpass function. */ #define HAVE_GETPASS 1 /* Define if you have the getpid function. */ #define HAVE_GETPID 1 /* Define if you have the getsockopt function. */ #define HAVE_GETSOCKOPT 1 /* Define if you have the gettimeofday function. */ #define HAVE_GETTIMEOFDAY 1 /* Define if you have the getwd function. */ #define HAVE_GETWD 1 /* Define if you have the ioctl function. */ #define HAVE_IOCTL 1 /* Define if you have the memcpy function. */ #define HAVE_MEMCPY 1 /* Define if you have the mktime function. */ #define HAVE_MKTIME 1 /* Define if you have the opendir function. */ #define HAVE_OPENDIR 1 /* Define if you have the readdir function. */ #define HAVE_READDIR 1 /* Define if you have the select function. */ #define HAVE_SELECT 1 /* Define if you have the setsockopt function. */ #define HAVE_SETSOCKOPT 1 /* Define if you have the socket function. */ #define HAVE_SOCKET 1 /* Define if you have the strchr function. */ #define HAVE_STRCHR 1 /* Define if you have the strerror function. */ #define HAVE_STRERROR 1 /* Define if you have the strtol function. */ #define HAVE_STRTOL 1 /* Define if you have the sysinfo function. */ #define HAVE_SYSINFO 1 /* Define if you have the tempnam function. */ #define HAVE_TEMPNAM 1 /* Define if you have the timegm function. */ #define HAVE_TIMEGM 1 /* Define if you have the tzset function. */ #define HAVE_TZSET 1 /* Define if you have the <appkit.h> header file. */ /* #undef HAVE_APPKIT_H */ /* Define if you have the <appkit/appkit.h> header file. */ /* #undef HAVE_APPKIT_APPKIT_H */ /* Define if you have the <arpa/inet.h> header file. */ #define HAVE_ARPA_INET_H 1 /* Define if you have the <bsdtime.h> header file. */ /* #undef HAVE_BSDTIME_H */ /* Define if you have the <bsdtypes.h> header file. */ /* #undef HAVE_BSDTYPES_H */ /* Define if you have the <ctype.h> header file. */ #define HAVE_CTYPE_H 1 /* Define if you have the <curses.h> header file. */ #define HAVE_CURSES_H 1 /* Define if you have the <cursesX.h> header file. */ /* #undef HAVE_CURSESX_H */ /* Define if you have the <dir.h> header file. */ /* #undef HAVE_DIR_H */ /* Define if you have the <direct.h> header file. */ /* #undef HAVE_DIRECT_H */ /* Define if you have the <dirent.h> header file. */ #define HAVE_DIRENT_H 1 /* Define if you have the <dn.h> header file. */ /* #undef HAVE_DN_H */ /* Define if you have the <dnetdb.h> header file. */ /* #undef HAVE_DNETDB_H */ /* Define if you have the <errno.h> header file. */ #define HAVE_ERRNO_H 1 /* Define if you have the <fcntl.h> header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the <grp.h> header file. */ #define HAVE_GRP_H 1 /* Define if you have the <in.h> header file. */ /* #undef HAVE_IN_H */ /* Define if you have the <inet.h> header file. */ /* #undef HAVE_INET_H */ /* Define if you have the <libc.h> header file. */ /* #undef HAVE_LIBC_H */ /* Define if you have the <limits.h> header file. */ #define HAVE_LIMITS_H 1 /* Define if you have the <malloc.h> header file. */ #define HAVE_MALLOC_H 1 /* Define if you have the <manifest.h> header file. */ /* #undef HAVE_MANIFEST_H */ /* Define if you have the <memory.h> header file. */ #define HAVE_MEMORY_H 1 /* Define if you have the <ndir.h> header file. */ /* #undef HAVE_NDIR_H */ /* Define if you have the <net/errno.h> header file. */ /* #undef HAVE_NET_ERRNO_H */ /* Define if you have the <netdb.h> header file. */ #define HAVE_NETDB_H 1 /* Define if you have the <netinet/in.h> header file. */ #define HAVE_NETINET_IN_H 1 /* Define if you have the <netinet/tcp.h> header file. */ #define HAVE_NETINET_TCP_H 1 /* Define if you have the <pwd.h> header file. */ #define HAVE_PWD_H 1 /* Define if you have the <regex.h> header file. */ #define HAVE_REGEX_H 1 /* Define if you have the <resource.h> header file. */ /* #undef HAVE_RESOURCE_H */ /* Define if you have the <rxposix.h> header file. */ /* #undef HAVE_RXPOSIX_H */ /* Define if you have the <select.h> header file. */ /* #undef HAVE_SELECT_H */ /* Define if you have the <socket.h> header file. */ /* #undef HAVE_SOCKET_H */ /* Define if you have the <stat.h> header file. */ /* #undef HAVE_STAT_H */ /* Define if you have the <stdefs.h> header file. */ /* #undef HAVE_STDEFS_H */ /* Define if you have the <stdio.h> header file. */ #define HAVE_STDIO_H 1 /* Define if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 /* Define if you have the <string.h> header file. */ #define HAVE_STRING_H 1 /* Define if you have the <strings.h> header file. */ #define HAVE_STRINGS_H 1 /* Define if you have the <sys/dir.h> header file. */ /* #undef HAVE_SYS_DIR_H */ /* Define if you have the <sys/errno.h> header file. */ #define HAVE_SYS_ERRNO_H 1 /* Define if you have the <sys/fcntl.h> header file. */ #define HAVE_SYS_FCNTL_H 1 /* Define if you have the <sys/file.h> header file. */ #define HAVE_SYS_FILE_H 1 /* Define if you have the <sys/ioctl.h> header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define if you have the <sys/ipc.h> header file. */ #define HAVE_SYS_IPC_H 1 /* Define if you have the <sys/limits.h> header file. */ /* #undef HAVE_SYS_LIMITS_H */ /* Define if you have the <sys/machine.h> header file. */ /* #undef HAVE_SYS_MACHINE_H */ /* Define if you have the <sys/ndir.h> header file. */ /* #undef HAVE_SYS_NDIR_H */ /* Define if you have the <sys/resource.h> header file. */ #define HAVE_SYS_RESOURCE_H 1 /* Define if you have the <sys/select.h> header file. */ #define HAVE_SYS_SELECT_H 1 /* Define if you have the <sys/socket.h> header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define if you have the <sys/stat.h> header file. */ #define HAVE_SYS_STAT_H 1 /* Define if you have the <sys/syslog> header file. */ /* #undef HAVE_SYS_SYSLOG */ /* Define if you have the <sys/systeminfo.h> header file. */ /* #undef HAVE_SYS_SYSTEMINFO_H */ /* Define if you have the <sys/time.h> header file. */ #define HAVE_SYS_TIME_H 1 /* Define if you have the <sys/types.h> header file. */ #define HAVE_SYS_TYPES_H 1 /* Define if you have the <sys/unistd.h> header file. */ #define HAVE_SYS_UNISTD_H 1 /* Define if you have the <syslog.h> header file. */ #define HAVE_SYSLOG_H 1 /* Define if you have the <tcp.h> header file. */ /* #undef HAVE_TCP_H */ /* Define if you have the <termios.h> header file. */ #define HAVE_TERMIOS_H 1 /* Define if you have the <time.h> header file. */ #define HAVE_TIME_H 1 /* Define if you have the <types.h> header file. */ /* #undef HAVE_TYPES_H */ /* Define if you have the <unistd.h> header file. */ #define HAVE_UNISTD_H 1 /* Define if you have the <unixlib.h> header file. */ /* #undef HAVE_UNIXLIB_H */ /* Define if you have the <wais.h> header file. */ /* #undef HAVE_WAIS_H */ /* Define if you have the <wais/wais.h> header file. */ /* #undef HAVE_WAIS_WAIS_H */ /* Define if you have the dl library (-ldl). */ #define HAVE_LIBDL 1 /* Define if you have the inet library (-linet). */ /* #undef HAVE_LIBINET */ /* Define if you have the nsl library (-lnsl). */ /* #undef HAVE_LIBNSL */ /* Define if you have the socket library (-lsocket). */ /* #undef HAVE_LIBSOCKET */ /* Name of package */ #define PACKAGE "w3c-libwww" /* Version number of package */ #define VERSION "5.3.2" /* Define this if you have the external variable 'socket_errno'. */ /* #undef HAVE_SOCKET_ERRNO */ /* Define this if you have the external variable 'sys_errlist'. */ /* #undef HAVE_SYS_ERRLIST */ /* Define this if you have the external variable 'sys_nerr'. */ /* #undef HAVE_SYS_NERR */ /* Define this if you have the external variable 'timezone' */ #define HAVE_TIMEZONE 1 /* Define this if you have the external variable 'altzone' */ /* #undef HAVE_ALTZONE */ /* Define this if you have the external variable 'altzone' */ #define HAVE_DAYLIGHT 1 /* Define this if you have the uxc$inetdef.h header file. */ /* #undef HAVE_UXC_INETDEF_H */ /* Define this if directory entries have inodes. */ /* #undef HAVE_DIRENT_INO */ /* Define this if tm structure includes a tm_gmtoff entry. */ #define HAVE_TM_GMTOFF 1 /* Define this if your ioctl understands the winsize structure. */ #define HAVE_WINSIZE 1 /* Define this if the extern timezone is negative. */ /* #undef NEGATIVE_TIMEZONE */ /* Define this if sys_errlist must be declared (if it exists). */ /* #undef NEED_SYS_ERRLIST_DECLARED */ /* Define this if sys_nerr must be declared (if it exists). */ /* #undef NEED_SYS_NERR_DECLARED */ ����������������������������������������������������������������������������libwww/stamp-h.in�����������������������������������������������������������������������������������0100644�0000764�0000144�00000000000�07405520524�013443� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/libtool��������������������������������������������������������������������������������������0100755�0000764�0000144�00000347650�07405520555�013171� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # libtool - Provide generalized library-building support services. # Generated automatically by ltconfig (GNU libtool 1.3.4 (1.385.2.196 2025/12/07 21:47:57)) # NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. # # Copyright (C) 1996-1999 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="sed -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi ### BEGIN LIBTOOL CONFIG # Libtool was configured as follows, on host xcalibur.dmsolutions.ca: # # CC="gcc" CFLAGS="-g -O2" CPPFLAGS="" \ # LD="/usr/bin/ld" LDFLAGS="" LIBS="" \ # NM="/usr/bin/nm -B" RANLIB="ranlib" LN_S="ln -s" \ # DLLTOOL="" OBJDUMP="" AS="" \ # config/ltconfig --with-gcc --with-gnu-ld --no-verify config/ltmain.sh i686-pc-linux-gnu # # Compiler and other test output produced by ltconfig, useful for # debugging ltconfig, is in ./config.log if it exists. # The version of ltconfig that generated this script. LTCONFIG_VERSION="1.3.4" # Shell to use when invoking shell scripts. SHELL="/bin/sh" # Whether or not to build shared libraries. build_libtool_libs=yes # Whether or not to build static libraries. build_old_libs=yes # Whether or not to optimize for fast installation. fast_install=yes # The host system. host_alias=i686-pc-linux-gnu host=i686-pc-linux-gnu # An echo program that does not interpret backslashes. echo="echo" # The archiver. AR="ar" # The default C compiler. CC="gcc" # The linker used to build libraries. LD="/usr/bin/ld" # Whether we need hard or soft links. LN_S="ln -s" # A BSD-compatible nm program. NM="/usr/bin/nm -B" # Used on cygwin: DLL creation program. DLLTOOL="dlltool" # Used on cygwin: object dumper. OBJDUMP="objdump" # Used on cygwin: assembler. AS="as" # The name of the directory that contains temporary libtool files. objdir=.libs # How to create reloadable object files. reload_flag=" -r" reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" # How to pass a linker flag through the compiler. wl="-Wl," # Object file suffix (normally "o"). objext="o" # Old archive suffix (normally "a"). libext="a" # Executable file suffix (normally ""). exeext="" # Additional compiler flags for building library objects. pic_flag=" -fPIC" # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" # Can we write directly to a .lo ? compiler_o_lo="yes" # Must we lock files when doing compilation ? need_locks="no" # Do we need the lib prefix for modules? need_lib_prefix=no # Do we need a version for libraries? need_version=no # Whether dlopen is supported. dlopen=unknown # Whether dlopen of programs is supported. dlopen_self=unknown # Whether dlopen of statically linked programs is supported. dlopen_self_static=unknown # Compiler flag to prevent dynamic linking. link_static_flag="-static" # Compiler flag to turn off builtin functions. no_builtin_flag=" -fno-builtin -fno-rtti -fno-exceptions" # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="\${wl}--export-dynamic" # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" # Compiler flag to generate thread-safe objects. thread_safe_flag_spec="" # Library versioning type. version_type=linux # Format of library name prefix. libname_spec="lib\$name" # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec="\${libname}\${release}.so\$versuffix \${libname}\${release}.so\$major \$libname.so" # The coded name of the library, if different from the real name. soname_spec="\${libname}\${release}.so\$major" # Commands used to build and install an old-style archive. RANLIB="ranlib" old_archive_cmds="\$AR cru \$oldlib\$oldobjs~\$RANLIB \$oldlib" old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib" old_postuninstall_cmds="" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="" # Commands used to build and install a shared archive. archive_cmds="\$CC -shared \$libobjs \$deplibs \$linkopts \${wl}-soname \$wl\$soname -o \$lib" archive_expsym_cmds="\$CC -shared \$libobjs \$deplibs \$linkopts \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" postinstall_cmds="" postuninstall_cmds="" # Method to check whether dependent libraries are shared objects. deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )" # Command to use when deplibs_check_method == file_magic. file_magic_cmd="/usr/bin/file" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="" # Flag that forces no undefined symbols. no_undefined_flag="" # Commands used to finish a libtool library installation in a directory. finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" # Same as above, but a single script fragment to be evaled but not shown. finish_eval="" # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW]\\)[ ][ ]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" # Transform the output of nm in a proper C declaration global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern char \\1;/p'" # This is the shared library runtime path variable. runpath_var=LD_RUN_PATH # This is the shared library path variable. shlibpath_var=LD_LIBRARY_PATH # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=no # How to hardcode a shared library path into an executable. hardcode_action=immediate # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist. hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct=no # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=no # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=unsupported # Compile-time system search path for libraries sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" # Run-time system search path for libraries sys_lib_dlsearch_path_spec="/lib /usr/lib" # Fix the shell variable $srcfile for the compiler. fix_srcfile_path="" # Set to yes if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | sed 's/.* //' | sort | uniq > \$export_symbols" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Symbols that must always be exported. include_expsyms="" ### END LIBTOOL CONFIG # ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun ltconfig. # # Copyright (C) 1996-1999 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<EOF $* EOF exit 0 fi # The name of this program. progname=`$echo "$0" | sed 's%^.*/%%'` modename="$progname" # Constants. PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.3.4 TIMESTAMP=" (1.385.2.196 2025/12/07 21:47:57)" default_mode= help="Try \`$progname --help' for more information." magic="%%%MAGIC variable%%%" mkdir="mkdir" mv="mv -f" rm="rm -f" # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' SP2NL='tr \040 \012' NL2SP='tr \015\012 \040\040' # NLS nuisances. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). # We save the old values to restore during execute mode. if test "${LC_ALL+set}" = set; then save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL fi if test "${LANG+set}" = set; then save_LANG="$LANG"; LANG=C; export LANG fi if test "$LTCONFIG_VERSION" != "$VERSION"; then echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then echo "$modename: not configured to build any kind of library" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" # Parse our command line options once, thoroughly. while test $# -gt 0 do arg="$1" shift case "$arg" in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case "$prev" in execute_dlfiles) eval "$prev=\"\$$prev \$arg\"" ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case "$arg" in --help) show_help=yes ;; --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" exit 0 ;; --config) sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 exit 0 ;; --debug) echo "$progname: enabling shell trace mode" set -x ;; --dry-run | -n) run=: ;; --features) echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit 0 ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --quiet | --silent) show=: ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit 1 ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then case "$nonopt" in *cc | *++ | gcc* | *-gcc*) mode=link for arg do case "$arg" in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit 1 fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case "$mode" in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= lastarg= srcfile="$nonopt" suppress_output= user_target=no for arg do # Accept any command-line options. case "$arg" in -o) if test "$user_target" != "no"; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit 1 fi user_target=next ;; -static) build_old_libs=yes continue ;; esac case "$user_target" in next) # The next one is the -o target name user_target=yes continue ;; yes) # We got the output file user_target=set libobj="$arg" continue ;; esac # Accept the current argument as the source file. lastarg="$srcfile" srcfile="$arg" # Aesthetically quote the previous argument. # Backslashify any backslashes, double quotes, and dollar signs. # These are the only characters that are still specially # interpreted inside of double-quoted scrings. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly in scan # sets, so we specify it separately. case "$lastarg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) lastarg="\"$lastarg\"" ;; esac # Add the previous argument to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi done case "$user_target" in set) ;; no) # Get the name of the library object. libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; *) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit 1 ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSfmso]' case "$libobj" in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case "$libobj" in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit 1 ;; esac if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit 1 fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $libobj" else removelist="$libobj" fi $run $rm $removelist trap "$run $rm $removelist; exit 1" 1 2 15 # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit 1" 1 2 15 else need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until ln "$0" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile # All platforms use -DPIC, to notify preprocessed assembler code. command="$base_compile $srcfile $pic_flag -DPIC" if test "$build_old_libs" = yes; then lo_libobj="$libobj" dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$libobj"; then dir="$objdir" else dir="$dir/$objdir" fi libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` if test -d "$dir"; then $show "$rm $libobj" $run $rm $libobj else $show "$mkdir $dir" $run $mkdir $dir status=$? if test $status -ne 0 && test ! -d $dir; then exit $status fi fi fi if test "$compiler_o_lo" = yes; then output_obj="$libobj" command="$command -o $output_obj" elif test "$compiler_c_o" = yes; then output_obj="$obj" command="$command -o $output_obj" fi $run $rm "$output_obj" $show "$command" if $run eval "$command"; then : else test -n "$output_obj" && $run $rm $removelist exit 1 fi if test "$need_locks" = warn && test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed, then go on to compile the next one if test x"$output_obj" != x"$libobj"; then $show "$mv $output_obj $libobj" if $run $mv $output_obj $libobj; then : else error=$? $run $rm $removelist exit $error fi fi # If we have no pic_flag, then copy the object into place and finish. if test -z "$pic_flag" && test "$build_old_libs" = yes; then # Rename the .lo from within objdir to obj if test -f $obj; then $show $rm $obj $run $rm $obj fi $show "$mv $libobj $obj" if $run $mv $libobj $obj; then : else error=$? $run $rm $removelist exit $error fi xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` # Now arrange that obj and lo_libobj become the same file $show "(cd $xdir && $LN_S $baseobj $libobj)" if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then exit 0 else error=$? $run $rm $removelist exit $error fi fi # Allow error messages only from the first compilation. suppress_output=' >/dev/null 2>&1' fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then command="$base_compile $srcfile" if test "$compiler_c_o" = yes; then command="$command -o $obj" output_obj="$obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" $run $rm "$output_obj" $show "$command" if $run eval "$command"; then : else $run $rm $removelist exit 1 fi if test "$need_locks" = warn && test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed if test x"$output_obj" != x"$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Create an invalid libtool object if no PIC, so that we do not # accidentally link it into a program. if test "$build_libtool_libs" != yes; then $show "echo timestamp > $libobj" $run eval "echo timestamp > \$libobj" || exit $? else # Move the .lo from within objdir $show "$mv $libobj $lo_libobj" if $run $mv $libobj $lo_libobj; then : else error=$? $run $rm $removelist exit $error fi fi fi # Unlock the critical section if it was locked if test "$need_locks" != no; then $rm "$lockfile" fi exit 0 ;; # libtool link mode link) modename="$modename: link" case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invokation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes # This is a source program that is used to create dlls on Windows # Don't remove nor modify the starting and closing comments # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include <windows.h> # #undef WIN32_LEAN_AND_MEAN # #include <stdio.h> # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include <cygwin/cygwin_dll.h> # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ # This is a source program that is used to create import libraries # on Windows for dlls which lack them. Don't remove nor modify the # starting and closing comments # /* impgen.c starts here */ # /* Copyright (C) 1999 Free Software Foundation, Inc. # # This file is part of GNU libtool. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # */ # # #include <stdio.h> /* for printf() */ # #include <unistd.h> /* for open(), lseek(), read() */ # #include <fcntl.h> /* for O_RDONLY, O_BINARY */ # #include <string.h> /* for strdup() */ # # static unsigned int # pe_get16 (fd, offset) # int fd; # int offset; # { # unsigned char b[2]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 2); # return b[0] + (b[1]<<8); # } # # static unsigned int # pe_get32 (fd, offset) # int fd; # int offset; # { # unsigned char b[4]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 4); # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # static unsigned int # pe_as32 (ptr) # void *ptr; # { # unsigned char *b = ptr; # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # int # main (argc, argv) # int argc; # char *argv[]; # { # int dll; # unsigned long pe_header_offset, opthdr_ofs, num_entries, i; # unsigned long export_rva, export_size, nsections, secptr, expptr; # unsigned long name_rvas, nexp; # unsigned char *expdata, *erva; # char *filename, *dll_name; # # filename = argv[1]; # # dll = open(filename, O_RDONLY|O_BINARY); # if (!dll) # return 1; # # dll_name = filename; # # for (i=0; filename[i]; i++) # if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') # dll_name = filename + i +1; # # pe_header_offset = pe_get32 (dll, 0x3c); # opthdr_ofs = pe_header_offset + 4 + 20; # num_entries = pe_get32 (dll, opthdr_ofs + 92); # # if (num_entries < 1) /* no exports */ # return 1; # # export_rva = pe_get32 (dll, opthdr_ofs + 96); # export_size = pe_get32 (dll, opthdr_ofs + 100); # nsections = pe_get16 (dll, pe_header_offset + 4 +2); # secptr = (pe_header_offset + 4 + 20 + # pe_get16 (dll, pe_header_offset + 4 + 16)); # # expptr = 0; # for (i = 0; i < nsections; i++) # { # char sname[8]; # unsigned long secptr1 = secptr + 40 * i; # unsigned long vaddr = pe_get32 (dll, secptr1 + 12); # unsigned long vsize = pe_get32 (dll, secptr1 + 16); # unsigned long fptr = pe_get32 (dll, secptr1 + 20); # lseek(dll, secptr1, SEEK_SET); # read(dll, sname, 8); # if (vaddr <= export_rva && vaddr+vsize > export_rva) # { # expptr = fptr + (export_rva - vaddr); # if (export_rva + export_size > vaddr + vsize) # export_size = vsize - (export_rva - vaddr); # break; # } # } # # expdata = (unsigned char*)malloc(export_size); # lseek (dll, expptr, SEEK_SET); # read (dll, expdata, export_size); # erva = expdata - export_rva; # # nexp = pe_as32 (expdata+24); # name_rvas = pe_as32 (expdata+32); # # printf ("EXPORTS\n"); # for (i = 0; i<nexp; i++) # { # unsigned long name_rva = pe_as32 (erva+name_rvas+i*4); # printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i); # } # # return 0; # } # /* impgen.c ends here */ ;; *) allow_undefined=yes ;; esac compile_command="$nonopt" finalize_command="$nonopt" compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= linkopts= if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else lib_search_path= fi # now prepend the system-specific ones eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= link_against_libtool_libs= ltlibs= module=no objs= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= # We need to know -static, to get the right output filenames. for arg do case "$arg" in -all-static | -static) if test "X$arg" = "X-all-static"; then if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test $# -gt 0; do arg="$1" shift # If the previous option needs an argument, assign it. if test -n "$prev"; then case "$prev" in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case "$prev" in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case "$arg" in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit 1 fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case "$arg" in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi prevarg="$arg" case "$arg" in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: not more than one -exported-symbols argument allowed" exit 1 fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case "$dir" in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 absdir="$dir" fi dir="$absdir" ;; esac case " $deplibs " in *" $arg "*) ;; *) deplibs="$deplibs $arg";; esac case " $lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir";; esac case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2*) dllsearchdir=`cd "$dir" && pwd || echo "$dir"` case ":$dllsearchpath:" in ::) dllsearchpath="$dllsearchdir";; *":$dllsearchdir:"*) ;; *) dllsearchpath="$dllsearchpath:$dllsearchdir";; esac ;; esac ;; -l*) if test "$arg" = "-lc"; then case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) # These systems don't actually have c library (as such) continue ;; esac elif test "$arg" = "-lm"; then case "$host" in *-*-cygwin* | *-*-beos*) # These systems don't actually have math library (as such) continue ;; esac fi deplibs="$deplibs $arg" ;; -module) module=yes continue ;; -no-undefined) allow_undefined=no continue ;; -o) prev=output ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case "$dir" in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # If we have no pic_flag, then this is the same as -all-static. if test -z "$pic_flag" && test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac ;; *.o | *.obj | *.a | *.lib) # A standard object. objs="$objs $arg" ;; *.lo) # A library object. if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` prev= fi libobjs="$libobjs $arg" ;; *.la) # A libtool-controlled library. dlname= libdir= library_names= old_library= # Check to see that this really is a libtool archive. if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 exit 1 fi # If the library was installed with an old release of libtool, # it will not redefine variable installed. installed=yes # Read the .la file # If there is no directory component, then add one. case "$arg" in */* | *\\*) . $arg ;; *) . ./$arg ;; esac # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 exit 1 fi # Find the relevant object directory and library name. name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` if test "X$installed" = Xyes; then dir="$libdir" else dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$arg"; then dir="$objdir" else dir="$dir/$objdir" fi fi if test -n "$dependency_libs"; then # Extract -R and -L from dependency_libs temp_deplibs= for deplib in $dependency_libs; do case "$deplib" in -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'` case " $rpath $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; -L*) case "$compile_command $temp_deplibs " in *" $deplib "*) ;; *) temp_deplibs="$temp_deplibs $deplib";; esac temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'` case " $lib_search_path " in *" $temp_dir "*) ;; *) lib_search_path="$lib_search_path $temp_dir";; esac ;; *) temp_deplibs="$temp_deplibs $deplib";; esac done dependency_libs="$temp_deplibs" fi if test -z "$libdir"; then # It is a libtool convenience library, so add in its objects. convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$deplibs$dependency_libs" compile_command="$compile_command $dir/$old_library$dependency_libs" finalize_command="$finalize_command $dir/$old_library$dependency_libs" continue fi # This library was specified with -dlopen. if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking statically, # we need to preload. prev=dlprefiles else # We should not create a dependency on this library, but we # may need any libraries it requires. compile_command="$compile_command$dependency_libs" finalize_command="$finalize_command$dependency_libs" prev= continue fi fi # The library was specified with -dlpreopen. if test "$prev" = dlprefiles; then # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then dlprefiles="$dlprefiles $dir/$old_library" else dlprefiles="$dlprefiles $dir/$linklib" fi prev= fi if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then link_against_libtool_libs="$link_against_libtool_libs $arg" if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # We need an absolute path. case "$dir" in [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 absdir="$dir" fi ;; esac # This is the magic to use -rpath. # Skip directories that are in the system default run-time # search path, unless they have been requested with -R. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac lib_linked=yes case "$hardcode_action" in immediate | unsupported) if test "$hardcode_direct" = no; then compile_command="$compile_command $dir/$linklib" deplibs="$deplibs $dir/$linklib" case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2*) dllsearchdir=`cd "$dir" && pwd || echo "$dir"` if test -n "$dllsearchpath"; then dllsearchpath="$dllsearchpath:$dllsearchdir" else dllsearchpath="$dllsearchdir" fi ;; esac elif test "$hardcode_minus_L" = no; then case "$host" in *-*-sunos*) compile_shlibpath="$compile_shlibpath$dir:" ;; esac case "$compile_command " in *" -L$dir "*) ;; *) compile_command="$compile_command -L$dir";; esac compile_command="$compile_command -l$name" deplibs="$deplibs -L$dir -l$name" elif test "$hardcode_shlibpath_var" = no; then case ":$compile_shlibpath:" in *":$dir:"*) ;; *) compile_shlibpath="$compile_shlibpath$dir:";; esac compile_command="$compile_command -l$name" deplibs="$deplibs -l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then compile_command="$compile_command $absdir/$linklib" deplibs="$deplibs $absdir/$linklib" elif test "$hardcode_minus_L" = yes; then case "$compile_command " in *" -L$absdir "*) ;; *) compile_command="$compile_command -L$absdir";; esac compile_command="$compile_command -l$name" deplibs="$deplibs -L$absdir -l$name" elif test "$hardcode_shlibpath_var" = yes; then case ":$compile_shlibpath:" in *":$absdir:"*) ;; *) compile_shlibpath="$compile_shlibpath$absdir:";; esac compile_command="$compile_command -l$name" deplibs="$deplibs -l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit 1 fi # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then finalize_command="$finalize_command $libdir/$linklib" elif test "$hardcode_minus_L" = yes; then case "$finalize_command " in *" -L$libdir "*) ;; *) finalize_command="$finalize_command -L$libdir";; esac finalize_command="$finalize_command -l$name" elif test "$hardcode_shlibpath_var" = yes; then case ":$finalize_shlibpath:" in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:";; esac finalize_command="$finalize_command -l$name" else # We cannot seem to hardcode it, guess we'll fake it. case "$finalize_command " in *" -L$dir "*) ;; *) finalize_command="$finalize_command -L$libdir";; esac finalize_command="$finalize_command -l$name" fi else # Transform directly to old archives if we don't build new libraries. if test -n "$pic_flag" && test -z "$old_library"; then $echo "$modename: cannot find static library for \`$arg'" 1>&2 exit 1 fi # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_command="$compile_command $dir/$linklib" finalize_command="$finalize_command $dir/$linklib" else case "$compile_command " in *" -L$dir "*) ;; *) compile_command="$compile_command -L$dir";; esac compile_command="$compile_command -l$name" case "$finalize_command " in *" -L$dir "*) ;; *) finalize_command="$finalize_command -L$dir";; esac finalize_command="$finalize_command -l$name" fi fi # Add in any libraries that this one depends upon. compile_command="$compile_command$dependency_libs" finalize_command="$finalize_command$dependency_libs" continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac ;; esac # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" case "$output" in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit 1 ;; *.a | *.lib) if test -n "$link_against_libtool_libs"; then $echo "$modename: error: cannot link libtool libraries into archives" 1>&2 exit 1 fi if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" ;; *.la) # Make sure we only generate libraries of the form `libNAME.la'. case "$outputname" in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi if test -n "$objs"; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 exit 1 fi # How the heck are we supposed to write a wrapper for a shared library? if test -n "$link_against_libtool_libs"; then $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2 exit 1 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test $# -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. libext=al oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi dependency_libs="$deplibs" if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit 1 fi current="$2" revision="$3" age="$4" # Check that each of the things are valid numbers. case "$current" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case "$revision" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case "$age" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac if test $age -gt $current; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 fi # Calculate the version variables. major= versuffix= verstring= case "$version_type" in none) ;; irix) major=`expr $current - $age + 1` versuffix="$major.$revision" verstring="sgi$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test $loop != 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="sgi$major.$iface:$verstring" done ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test $loop != 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; windows) # Like Linux, but with '-' rather than '.', since we only # want one extension on Windows 95. major=`expr $current - $age` versuffix="-$major-$age-$revision" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= verstring="0.0" if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi dependency_libs="$deplibs" case "$host" in *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *) # Add libc to deplibs on all other systems. deplibs="$deplibs -lc" ;; esac fi # Create the output directory, or remove our outputs if we need to. if test -d $output_objdir; then $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* else $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test $status -ne 0 && test ! -d $output_objdir; then exit $status fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi if test "$build_libtool_libs" = yes; then # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case "$deplibs_check_method" in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behaviour. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c <<EOF int main() { return 0; } EOF $rm conftest $CC -o conftest conftest.c $deplibs if test $? -eq 0 ; then ldd_output=`ldd conftest` for i in $deplibs; do name="`expr $i : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test "$name" != "" ; then libname=`eval \\$echo \"$libname_spec\"` deplib_matches=`eval \\$echo \"$library_names_spec\"` set dummy $deplib_matches deplib_match=$2 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then newdeplibs="$newdeplibs $i" else droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else newdeplibs="$newdeplibs $i" fi done else # Error occured in the first compile. Let's try to salvage the situation: # Compile a seperate program for each library. for i in $deplibs; do name="`expr $i : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test "$name" != "" ; then $rm conftest $CC -o conftest conftest.c $i # Did it work? if test $? -eq 0 ; then ldd_output=`ldd conftest` libname=`eval \\$echo \"$libname_spec\"` deplib_matches=`eval \\$echo \"$library_names_spec\"` set dummy $deplib_matches deplib_match=$2 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then newdeplibs="$newdeplibs $i" else droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else droppeddeps=yes echo echo "*** Warning! Library $i is needed by this library but I was not able to" echo "*** make it link in! You will probably need to install it or some" echo "*** library that it depends on before this library will be fully" echo "*** functional. Installing it before continuing would be even better." fi else newdeplibs="$newdeplibs $i" fi done fi ;; file_magic*) set dummy $deplibs_check_method file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`" for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test "$name" != "" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | sed 's/.* -> //'` case "$potliblink" in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | sed 10q \ | egrep "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done if test -n "$a_deplib" ; then droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | grep . >/dev/null; then echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" echo "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Get the real and link names of the library. eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Ensure that we have .o objects for linkers which dislike .lo # (e.g. aix) in case we are running --disable-static for obj in $libobjs; do xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` if test ! -f $xdir/$oldobj; then $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? fi done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols eval cmds=\"$export_symbols_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case "$xlib" in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linkopts="$linkopts $flag" fi # Do each of the archive commands. if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval cmds=\"$archive_expsym_cmds\" else eval cmds=\"$archive_cmds\" fi IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; *.lo | *.o | *.obj) if test -n "$link_against_libtool_libs"; then $echo "$modename: error: cannot link libtool libraries into objects" 1>&2 exit 1 fi if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case "$output" in *.lo) if test -n "$objs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case "$xlib" in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" output="$obj" eval cmds=\"$reload_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. $show "echo timestamp > $libobj" $run eval "echo timestamp > $libobj" || exit $? exit 0 fi if test -n "$pic_flag"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" eval cmds=\"$reload_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" else # Just create a symlink. $show $rm $libobj $run $rm $libobj xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$libobj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` $show "(cd $xdir && $LN_S $oldobj $baseobj)" $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 ;; # Anything else should be a program. *) if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$compile_rpath " in *" $libdir "*) ;; *) compile_rpath="$compile_rpath $libdir" ;; esac case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the binary in the object directory, then wrap it. if test ! -d $output_objdir; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test $status -ne 0 && test ! -d $output_objdir; then exit $status fi fi if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case "$dlsyms" in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`echo "$arg" | sed -e 's%^.*/%%'` $run eval 'echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = {\ " sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr_t) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case "$host" in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit 1 ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case "$dir" in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $0 --fallback-echo"; then case "$0" in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; *) qecho="$SHELL `pwd`/$0 --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`echo $output|sed 's,.exe$,,'` ;; esac $rm $output trap "$rm $output; exit 1" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: link_against_libtool_libs='$link_against_libtool_libs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then echo >> $output "\ program=lt-'$outputname' progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if (cd \"\$thisdir\" && eval \$relink_command); then : else $rm \"\$progdir/\$file\" exit 1 fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in *-*-cygwin* | *-*-mingw | *-*-os2*) # win32 systems need to use the prog path for dll # lookup to work $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ # Export the path to the program. PATH=\"\$progdir:\$PATH\" export PATH exec \$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit 1 fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " chmod +x $output fi exit 0 ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case "$xlib" in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then eval cmds=\"$old_archive_from_new_cmds\" else # Ensure that we have .o objects in place in case we decided # not to build a shared library, and have fallen back to building # static libs even though --disable-static was passed! for oldobj in $oldobjs; do if test ! -f $oldobj; then xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$oldobj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` $show "(cd $xdir && ${LN_S} $obj $baseobj)" $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? fi done eval cmds=\"$old_archive_cmds\" fi IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case "$output" in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" if test -n "$xrpath"; then temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" done dependency_libs="$temp_xrpath $dependency_libs" fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i fi $rm $output $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$dlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Directory that this library needs to be installed in: libdir='$install_libdir'\ " done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $? ;; esac exit 0 ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case "$arg" in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit 1 fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test $# -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit 1 fi fi case "$destdir" in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case "$file" in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case "$file" in *.a | *.lib) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi library_names= old_library= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" test "X$dir" = "X$file/" && dir= dir="$dir$objdir" # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift # Install the shared library and build the symlinks. $show "$install_prog $dir/$realname $destdir/$realname" $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? if test $# -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" eval cmds=\"$postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case "$destfile" in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.o | *.obj) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit 0 ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then link_against_libtool_libs= relink_command= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Check the variables that should have been set. if test -z "$link_against_libtool_libs"; then $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 exit 1 fi finalize=yes for lib in $link_against_libtool_libs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case "$lib" in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : else $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? # Do each command in the postinstall commands. eval cmds=\"$old_postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec $SHELL $0 --finish$current_libdirs exit 1 fi exit 0 ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. eval cmds=\"$finish_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit 0 echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do echo " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" echo "more information, such as the ld(1) and ld.so(8) manual pages." echo "----------------------------------------------------------------------" exit 0 ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit 1 fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit 1 fi dir= case "$file" in *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit 1 fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case "$file" in -*) ;; *) # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved enviroment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now actually exec the command. eval "exec \$cmd$args" $echo "$modename: cannot exec \$cmd$args" exit 1 else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit 0 fi ;; # libtool uninstall mode uninstall) modename="$modename: uninstall" rm="$nonopt" files= for arg do case "$arg" in -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit 1 fi for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` rmfiles="$file" case "$name" in *.la) # Possibly a libtool archive, so verify it. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $dir/$n" done test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" $show "$rm $rmfiles" $run $rm $rmfiles if test -n "$library_names"; then # Do each command in the postuninstall commands. eval cmds=\"$postuninstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. eval cmds=\"$old_postuninstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi ;; *.lo) if test "$build_old_libs" = yes; then oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` rmfiles="$rmfiles $dir/$oldobj" fi $show "$rm $rmfiles" $run $rm $rmfiles ;; *) $show "$rm $rmfiles" $run $rm $rmfiles ;; esac done exit 0 ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit 1 ;; esac $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit 1 fi # test -z "$show_help" # We need to display help for each of the modes. case "$mode" in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --version print version information MODE must be one of the following: compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE." exit 0 ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac echo $echo "Try \`$modename --help' for more information about other modes." exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: ����������������������������������������������������������������������������������������libwww/stamp-h��������������������������������������������������������������������������������������0100644�0000764�0000144�00000000035�07405521137�013047� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Tue Dec 11 19:18:39 EST 2001 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/wwwconf.h.in���������������������������������������������������������������������������������0100644�0000764�0000144�00000032773�07405520523�014037� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wwwconf.h.in. Generated automatically from configure.in by autoheader. */ /* Define if type char is unsigned and you are not using gcc. */ #ifndef __CHAR_UNSIGNED__ #undef __CHAR_UNSIGNED__ #endif /* Define to empty if the keyword does not work. */ #undef const /* Define to the type of elements in the array set by `getgroups'. Usually this is either `int' or `gid_t'. */ #undef GETGROUPS_T /* Define to `int' if <sys/types.h> doesn't define. */ #undef gid_t /* Define if you don't have vprintf but do have _doprnt. */ #undef HAVE_DOPRNT /* Define if the `long double' type works. */ #undef HAVE_LONG_DOUBLE /* Define if you have the strftime function. */ #undef HAVE_STRFTIME /* Define if you have <sys/wait.h> that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define if your struct tm has tm_zone. */ #undef HAVE_TM_ZONE /* Define if you don't have tm_zone but do have the external array tzname. */ #undef HAVE_TZNAME /* Define if you have the vprintf function. */ #undef HAVE_VPRINTF /* Define to `int' if <sys/types.h> doesn't define. */ #undef mode_t /* Define to `int' if <sys/types.h> doesn't define. */ #undef pid_t /* Define if you need to in order for stat and other things to work. */ #undef _POSIX_SOURCE /* Define as the return type of signal handlers (int or void). */ #undef RETSIGTYPE /* Define to `unsigned' if <sys/types.h> doesn't define. */ #undef size_t /* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */ #undef STAT_MACROS_BROKEN /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if you can safely include both <sys/time.h> and <time.h>. */ #undef TIME_WITH_SYS_TIME /* Define if your <sys/time.h> declares struct tm. */ #undef TM_IN_SYS_TIME /* Define to `int' if <sys/types.h> doesn't define. */ #undef uid_t /* Define if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ #undef WORDS_BIGENDIAN /* Define to enable direct WAIS access. */ #undef HT_DIRECT_WAIS /* Define to enable mysql access. */ #undef HT_MYSQL /* Define to enable MD5 for HTTP access authentication. */ #undef HT_MD5 /* Define to enable expat XML parser. */ #undef HT_EXPAT /* Define to enable Zlib compression / decompression support. */ #undef HT_ZLIB /* Define to enable POSIX RegEx support. */ #undef HT_POSIX_REGEX /* Define to enable support for enabling a rules file w/o user interaction. */ #undef HT_AUTOMATIC_RULES /* Define to enable SOCKS firewall-breaching code. */ #undef SOCKS #undef SOCKS4 #undef SOCKS5 /* Define to build Cyrillic version. */ #undef CYRILLIC /* Define to use internal signal handler */ #undef WWWLIB_SIG /* Define to build using reentrant system calls. */ #undef HT_REENTRANT /* Define to use the two-argument variant of ctime_r */ #undef HAVE_CTIME_R_2 /* Define to use the three-argument variant of ctime_r */ #undef HAVE_CTIME_R_3 /* Define to use the two-argument variant of readdir_r */ #undef HAVE_READDIR_R_2 /* Define to use the three-argument variant of readdir_r */ #undef HAVE_READDIR_R_3 /* Define to use the three-argument variant of gethostbyname_r */ #undef HAVE_GETHOSTBYNAME_R_3 /* Define to use the five-argument variant of gethostbyname_r */ #undef HAVE_GETHOSTBYNAME_R_5 /* Define to use the six-argument variant of gethostbyname_r */ #undef HAVE_GETHOSTBYNAME_R_6 /* Define to use the five-argument variant of gethostbyaddr_r */ #undef HAVE_GETHOSTBYADDR_R_5 /* Define to use the seven-argument variant of gethostbyaddr_r */ #undef HAVE_GETHOSTBYADDR_R_7 /* Define to use the eight-argument variant of gethostbyaddr_r */ #undef HAVE_GETHOSTBYADDR_R_8 /* Define if getlogin_r returns an integer */ #undef GETLOGIN_R_RETURNS_INT /* Define if getlogin_r returns a pointer */ #undef GETLOGIN_R_RETURNS_POINTER /* Define to be the package name. */ #undef W3C_PACKAGE /* Define to be the version. */ #undef W3C_VERSION /* Define this to be the prefix for cache files. */ #undef CACHE_FILE_PREFIX /* Define to disable Nagle's algorithm */ #undef HT_NO_NAGLE /* Define to disable HTTP/1.1 pipelining */ #undef HT_NO_PIPELINING /* Define to disable HTTP/1.1 pipelining */ #undef HT_NO_PIPELINING /* Define to enable MUX as HTTP transport */ #undef HT_MUX /* Define this if it's not typedef'd automatically. */ #undef BOOLEAN /* Define this to be the location of the resolver configuration file. */ #undef RESOLV_CONF /* Define this to be the rlogin program name. */ #undef RLOGIN_PROGRAM /* Define this to be the telnet program name. */ #undef TELNET_PROGRAM /* Define this to be the tn3270 program name. */ #undef TN3270_PROGRAM /* Define this if it isn't in the header files. */ #undef u_char /* For removing a file */ #undef unlink /* Define this if it isn't in the header files. */ #undef u_short /* Define this if it isn't in the header files. */ #undef u_long /* Define if type_t is of type long */ #undef HAVE_LONG_TIME_T /* Define if size_t is of type long */ #undef HAVE_LONG_SIZE_T /* The number of bytes in a char. */ #undef SIZEOF_CHAR /* The number of bytes in a char *. */ #undef SIZEOF_CHAR_P /* The number of bytes in a int. */ #undef SIZEOF_INT /* The number of bytes in a long. */ #undef SIZEOF_LONG /* Define if you have the chdir function. */ #undef HAVE_CHDIR /* Define if you have the fcntl function. */ #undef HAVE_FCNTL /* Define if you have the getcwd function. */ #undef HAVE_GETCWD /* Define if you have the getdomainname function. */ #undef HAVE_GETDOMAINNAME /* Define if you have the gethostname function. */ #undef HAVE_GETHOSTNAME /* Define if you have the getlogin function. */ #undef HAVE_GETLOGIN /* Define if you have the getpass function. */ #undef HAVE_GETPASS /* Define if you have the getpid function. */ #undef HAVE_GETPID /* Define if you have the getsockopt function. */ #undef HAVE_GETSOCKOPT /* Define if you have the gettimeofday function. */ #undef HAVE_GETTIMEOFDAY /* Define if you have the getwd function. */ #undef HAVE_GETWD /* Define if you have the ioctl function. */ #undef HAVE_IOCTL /* Define if you have the memcpy function. */ #undef HAVE_MEMCPY /* Define if you have the mktime function. */ #undef HAVE_MKTIME /* Define if you have the opendir function. */ #undef HAVE_OPENDIR /* Define if you have the readdir function. */ #undef HAVE_READDIR /* Define if you have the select function. */ #undef HAVE_SELECT /* Define if you have the setsockopt function. */ #undef HAVE_SETSOCKOPT /* Define if you have the socket function. */ #undef HAVE_SOCKET /* Define if you have the strchr function. */ #undef HAVE_STRCHR /* Define if you have the strerror function. */ #undef HAVE_STRERROR /* Define if you have the strtol function. */ #undef HAVE_STRTOL /* Define if you have the sysinfo function. */ #undef HAVE_SYSINFO /* Define if you have the tempnam function. */ #undef HAVE_TEMPNAM /* Define if you have the timegm function. */ #undef HAVE_TIMEGM /* Define if you have the tzset function. */ #undef HAVE_TZSET /* Define if you have the <appkit.h> header file. */ #undef HAVE_APPKIT_H /* Define if you have the <appkit/appkit.h> header file. */ #undef HAVE_APPKIT_APPKIT_H /* Define if you have the <arpa/inet.h> header file. */ #undef HAVE_ARPA_INET_H /* Define if you have the <bsdtime.h> header file. */ #undef HAVE_BSDTIME_H /* Define if you have the <bsdtypes.h> header file. */ #undef HAVE_BSDTYPES_H /* Define if you have the <ctype.h> header file. */ #undef HAVE_CTYPE_H /* Define if you have the <curses.h> header file. */ #undef HAVE_CURSES_H /* Define if you have the <cursesX.h> header file. */ #undef HAVE_CURSESX_H /* Define if you have the <dir.h> header file. */ #undef HAVE_DIR_H /* Define if you have the <direct.h> header file. */ #undef HAVE_DIRECT_H /* Define if you have the <dirent.h> header file. */ #undef HAVE_DIRENT_H /* Define if you have the <dn.h> header file. */ #undef HAVE_DN_H /* Define if you have the <dnetdb.h> header file. */ #undef HAVE_DNETDB_H /* Define if you have the <errno.h> header file. */ #undef HAVE_ERRNO_H /* Define if you have the <fcntl.h> header file. */ #undef HAVE_FCNTL_H /* Define if you have the <grp.h> header file. */ #undef HAVE_GRP_H /* Define if you have the <in.h> header file. */ #undef HAVE_IN_H /* Define if you have the <inet.h> header file. */ #undef HAVE_INET_H /* Define if you have the <libc.h> header file. */ #undef HAVE_LIBC_H /* Define if you have the <limits.h> header file. */ #undef HAVE_LIMITS_H /* Define if you have the <malloc.h> header file. */ #undef HAVE_MALLOC_H /* Define if you have the <manifest.h> header file. */ #undef HAVE_MANIFEST_H /* Define if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H /* Define if you have the <ndir.h> header file. */ #undef HAVE_NDIR_H /* Define if you have the <net/errno.h> header file. */ #undef HAVE_NET_ERRNO_H /* Define if you have the <netdb.h> header file. */ #undef HAVE_NETDB_H /* Define if you have the <netinet/in.h> header file. */ #undef HAVE_NETINET_IN_H /* Define if you have the <netinet/tcp.h> header file. */ #undef HAVE_NETINET_TCP_H /* Define if you have the <pwd.h> header file. */ #undef HAVE_PWD_H /* Define if you have the <regex.h> header file. */ #undef HAVE_REGEX_H /* Define if you have the <resource.h> header file. */ #undef HAVE_RESOURCE_H /* Define if you have the <rxposix.h> header file. */ #undef HAVE_RXPOSIX_H /* Define if you have the <select.h> header file. */ #undef HAVE_SELECT_H /* Define if you have the <socket.h> header file. */ #undef HAVE_SOCKET_H /* Define if you have the <stat.h> header file. */ #undef HAVE_STAT_H /* Define if you have the <stdefs.h> header file. */ #undef HAVE_STDEFS_H /* Define if you have the <stdio.h> header file. */ #undef HAVE_STDIO_H /* Define if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define if you have the <sys/dir.h> header file. */ #undef HAVE_SYS_DIR_H /* Define if you have the <sys/errno.h> header file. */ #undef HAVE_SYS_ERRNO_H /* Define if you have the <sys/fcntl.h> header file. */ #undef HAVE_SYS_FCNTL_H /* Define if you have the <sys/file.h> header file. */ #undef HAVE_SYS_FILE_H /* Define if you have the <sys/ioctl.h> header file. */ #undef HAVE_SYS_IOCTL_H /* Define if you have the <sys/ipc.h> header file. */ #undef HAVE_SYS_IPC_H /* Define if you have the <sys/limits.h> header file. */ #undef HAVE_SYS_LIMITS_H /* Define if you have the <sys/machine.h> header file. */ #undef HAVE_SYS_MACHINE_H /* Define if you have the <sys/ndir.h> header file. */ #undef HAVE_SYS_NDIR_H /* Define if you have the <sys/resource.h> header file. */ #undef HAVE_SYS_RESOURCE_H /* Define if you have the <sys/select.h> header file. */ #undef HAVE_SYS_SELECT_H /* Define if you have the <sys/socket.h> header file. */ #undef HAVE_SYS_SOCKET_H /* Define if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define if you have the <sys/syslog> header file. */ #undef HAVE_SYS_SYSLOG /* Define if you have the <sys/systeminfo.h> header file. */ #undef HAVE_SYS_SYSTEMINFO_H /* Define if you have the <sys/time.h> header file. */ #undef HAVE_SYS_TIME_H /* Define if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define if you have the <sys/unistd.h> header file. */ #undef HAVE_SYS_UNISTD_H /* Define if you have the <syslog.h> header file. */ #undef HAVE_SYSLOG_H /* Define if you have the <tcp.h> header file. */ #undef HAVE_TCP_H /* Define if you have the <termios.h> header file. */ #undef HAVE_TERMIOS_H /* Define if you have the <time.h> header file. */ #undef HAVE_TIME_H /* Define if you have the <types.h> header file. */ #undef HAVE_TYPES_H /* Define if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define if you have the <unixlib.h> header file. */ #undef HAVE_UNIXLIB_H /* Define if you have the <wais.h> header file. */ #undef HAVE_WAIS_H /* Define if you have the <wais/wais.h> header file. */ #undef HAVE_WAIS_WAIS_H /* Define if you have the dl library (-ldl). */ #undef HAVE_LIBDL /* Define if you have the inet library (-linet). */ #undef HAVE_LIBINET /* Define if you have the nsl library (-lnsl). */ #undef HAVE_LIBNSL /* Define if you have the socket library (-lsocket). */ #undef HAVE_LIBSOCKET /* Name of package */ #undef PACKAGE /* Version number of package */ #undef VERSION /* Define this if you have the external variable 'socket_errno'. */ #undef HAVE_SOCKET_ERRNO /* Define this if you have the external variable 'sys_errlist'. */ #undef HAVE_SYS_ERRLIST /* Define this if you have the external variable 'sys_nerr'. */ #undef HAVE_SYS_NERR /* Define this if you have the external variable 'timezone' */ #undef HAVE_TIMEZONE /* Define this if you have the external variable 'altzone' */ #undef HAVE_ALTZONE /* Define this if you have the external variable 'altzone' */ #undef HAVE_DAYLIGHT /* Define this if you have the uxc$inetdef.h header file. */ #undef HAVE_UXC_INETDEF_H /* Define this if directory entries have inodes. */ #undef HAVE_DIRENT_INO /* Define this if tm structure includes a tm_gmtoff entry. */ #undef HAVE_TM_GMTOFF /* Define this if your ioctl understands the winsize structure. */ #undef HAVE_WINSIZE /* Define this if the extern timezone is negative. */ #undef NEGATIVE_TIMEZONE /* Define this if sys_errlist must be declared (if it exists). */ #undef NEED_SYS_ERRLIST_DECLARED /* Define this if sys_nerr must be declared (if it exists). */ #undef NEED_SYS_NERR_DECLARED �����libwww/Makefile�������������������������������������������������������������������������������������0100644�0000764�0000144�00000041171�07405520565�013225� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Process this file with Automake to create Makefile.in. # (c) COPYRIGHT MIT 1995. # Please first read the full copyright statement in the file COPYRIGH. # @(#) $Id: Makefile.am,v 1.38 2025/09/01 12:18:52 kahan Exp $ # .h files are distributed but originally are made from the # self-documenting hypertext files. SHELL = /bin/sh srcdir = . top_srcdir = . prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin sbindir = ${exec_prefix}/sbin libexecdir = ${exec_prefix}/libexec datadir = ${prefix}/share sysconfdir = ${prefix}/etc sharedstatedir = ${prefix}/com localstatedir = ${prefix}/var libdir = ${exec_prefix}/lib infodir = ${prefix}/info mandir = ${prefix}/man includedir = ${prefix}/include oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/w3c-libwww pkglibdir = $(libdir)/w3c-libwww pkgincludedir = $(includedir)/w3c-libwww top_builddir = . ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake AUTOHEADER = autoheader INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = i686-pc-linux-gnu build_triplet = i686-pc-linux-gnu host_alias = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu target_alias = i686-pc-linux-gnu target_triplet = i686-pc-linux-gnu AR = /usr/bin/ar AS = @AS@ A_STDIO = CC = gcc CHMOD = /bin/chmod COMPRESS = /bin/gzip CP = /bin/cp CVS = /usr/bin/cvs CVS2SQL = DLLTOOL = @DLLTOOL@ EXEEXT = HTLIBXML = ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la HTSQL = HTSQLLOG = HTWAIS = HTXML = HTXML.lo HTZLIB = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBWWWMD5 = ${top_builddir}/modules/md5/libmd5.la LIBWWWSQL = LIBWWWSSL = LIBWWWWAIS = LIBWWWXML = ${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la LIBWWWZIP = LN_S = ln -s LWWWMD5 = -lmd5 LWWWSQL = LWWWSSL = LWWWWAIS = LWWWXML = -lwwwxml -lxmltok -lxmlparse LWWWZIP = MAKEINFO = makeinfo MKDIR = /bin/mkdir OBJDUMP = @OBJDUMP@ PACKAGE = w3c-libwww PURIFY_CACHE = /tmp/purify.cache RANLIB = ranlib RM = /bin/rm SED = /bin/sed SHOWXML = showxml ptri stri rdf_parse_file rdf_parse_buffer SSLINC = TAR = /bin/tar VERSION = 5.3.2 WWWMD5 = libmd5.la WWWSQL = WWWSSL = WWWSSLEX = WWWWAIS = WWWXML = libwwwxml.la WWWZIP = XMLPARSE = libxmlparse.la XMLTOK = libxmltok.la ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = perl have_resolv_conf = /etc/resolv.conf have_rlogin = rlogin have_telnet = telnet have_tn3270 = icondir = ${prefix}/share/w3c-libwww subdirs = @subdirs@ SUFFIXES = .html BUILT_SOURCES = COPYRIGH EXTRA_DIST = $(BUILT_SOURCES) README.html INSTALL.html COPYRIGHT.html PATCHES.html LICENSE.html # This is our install script provided by Soren Sandmann bin_SCRIPTS = libwww-config # We do not have _all_ GNU files so add this to avoid warnings AUTOMAKE_OPTIONS = foreign # These are the sub directories SUBDIRS = config modules Library PICS-client LineMode Robot ComLine WinCom Icons # Tag before making distribution. Also, don't make a distribution if # checks fail. CVSSTUFF = config modules Library PICS-client LineMode Robot ComLine WinCom Icons Makefile.am acconfig.h acinclude.m4 aclocal.m4 wwwconf.h.in configure.in # If not indicated otherwise then use this to make the CVS diff with PREVIOUS_VERSION = 5.3.1 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = wwwconf.h CONFIG_CLEAN_FILES = libwww-config w3c-libwww.spec SCRIPTS = $(bin_SCRIPTS) DIST_COMMON = ./stamp-h.in ChangeLog Makefile.am Makefile.in acconfig.h \ acinclude.m4 aclocal.m4 configure configure.in libwww-config.in \ w3c-libwww.spec.in wwwconf.h.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .html $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status $(ACLOCAL_M4): configure.in acinclude.m4 cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) wwwconf.h: stamp-h @if test ! -f $@; then \ rm -f stamp-h; \ $(MAKE) stamp-h; \ else :; fi stamp-h: $(srcdir)/wwwconf.h.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES= CONFIG_HEADERS=wwwconf.h \ $(SHELL) ./config.status @echo timestamp > stamp-h 2> /dev/null $(srcdir)/wwwconf.h.in: $(srcdir)/stamp-h.in @if test ! -f $@; then \ rm -f $(srcdir)/stamp-h.in; \ $(MAKE) $(srcdir)/stamp-h.in; \ else :; fi $(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h cd $(top_srcdir) && $(AUTOHEADER) @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null mostlyclean-hdr: clean-hdr: distclean-hdr: -rm -f wwwconf.h maintainer-clean-hdr: libwww-config: $(top_builddir)/config.status libwww-config.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status w3c-libwww.spec: $(top_builddir)/config.status w3c-libwww.spec.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_SCRIPTS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ else if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ else :; fi; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) list='$(bin_SCRIPTS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) wwwconf.h.in $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)wwwconf.h.in$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags wwwconf.h.in $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist -rm -rf $(distdir) GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz mkdir $(distdir)/=build mkdir $(distdir)/=inst dc_install_base=`cd $(distdir)/=inst && pwd`; \ cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) dist -rm -rf $(distdir) @banner="$(distdir).tar.gz is ready for distribution"; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes" dist: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) dist-all: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive all-recursive-am: wwwconf.h $(MAKE) $(AM_MAKEFLAGS) all-recursive install-exec-am: install-binSCRIPTS install-exec-local install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binSCRIPTS uninstall: uninstall-recursive all-am: Makefile $(SCRIPTS) wwwconf.h all-redirect: all-recursive-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-hdr clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-hdr distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive -rm -f config.status .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ uninstall-binSCRIPTS install-binSCRIPTS install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ install-exec-local install-exec-am install-exec install-data-am \ install-data install-am install uninstall-am uninstall all-redirect \ all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean legal : $(BUILT_SOURCES) @echo Generated built sources # We need to install the config.h header file as well. As this file # is platform specific, we do not install it with the other libwww include files install-exec-local: @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(includedir) $(INSTALL_DATA) $(top_builddir)/$(CONFIG_HEADER) $(DESTDIR)$(includedir)/$(CONFIG_HEADER); # Extra distribution files in zip format and in compress dist-hook: chmod -R a+r $(distdir) zip -rq $(distdir).zip $(distdir) $(TAR) chof $(distdir).tar $(distdir) compress -f $(distdir).tar cvs-tag: cvs -q tag -F `echo "Release-$(VERSION)" | sed 's/\./-/g'` $(CVSSTUFF) cvs-export-member: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ rm -rf $$subdir/member; \ cvs export -d $$subdir/member \ -r `echo "Release-$(VERSION)" | sed 's/\./-/g'` WWW/$$subdir; \ done && test -z "$$fail" cvs-export-pub: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ rm -rf $$subdir/pub; \ cvs export -d $$subdir/pub \ -r `echo "Release-$(VERSION)" | sed 's/\./-/g'` WWW/$$subdir; \ done && test -z "$$fail" cvs-diff: thisver=`echo "Release-$(VERSION)" | sed 's/\./-/g'`; \ prevver=`echo "Release-$(PREVIOUS_VERSION)" | sed 's/\./-/g'`; \ cvs -f diff -w -c -r $$prevver -r $$thisver $(CVSSTUFF) \ > $(PACKAGE)-$(PREVIOUS_VERSION)-$(VERSION).diff # Generate the include files (normally done automaticly) inc: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ (cd $$subdir/src && $(MAKE) $$target) \ || case "$(MFLAGS)" in *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" # # Hypertext supplied in text format # $(top_srcdir)/COPYRIGH : $(top_srcdir)/COPYRIGHT.html ifdef WWW -$(WWW) -p -na $(top_srcdir)/COPYRIGHT.html \ -o $(top_srcdir)/COPYRIGH endif # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libwww/libwww-config��������������������������������������������������������������������������������0100644�0000764�0000144�00000002576�07405520565�014274� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # (c) COPYRIGHT MIT 1995. # Please first read the full copyright statement in the file COPYRIGH. # @(#) $Id: libwww-config.in,v 1.6 2025/06/23 18:05:01 frystyk Exp $ # # Thanks to Soren Sandmann for providing first version of this script! prefix=/usr/local exec_prefix=${prefix} exec_prefix_set=no usage="\ Usage: libwww-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--libs] [--cflags]" if test $# -eq 0; then echo "${usage}" 1>&2 exit 1 fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo $prefix ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo $exec_prefix ;; --version) echo 5.3.2 ;; --cflags) echo -I${prefix}/include -I${prefix}/include/w3c-libwww -DHAVE_CONFIG_H ;; --libs) echo -L${exec_prefix}/lib -lwwwxml -lxmltok -lxmlparse -lwwwinit -lwwwapp -lwwwhtml -lwwwtelnet -lwwwnews -lwwwhttp -lwwwmime -lwwwgopher -lwwwftp -lwwwfile -lwwwdir -lwwwcache -lwwwstream -lwwwmux -lwwwtrans -lwwwcore -lwwwutils -lmd5 -ldl ;; *) echo "${usage}" 1>&2 exit 1 ;; esac shift done ����������������������������������������������������������������������������������������������������������������������������������libwww/w3c-libwww.spec������������������������������������������������������������������������������0100644�0000764�0000144�00000006557�07405520565�014457� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Note that this is NOT a relocatable package %define ver 5.3.2 %define rel 3 %define prefix /usr/ Vendor: W3C World Wide Web Consortium Name: w3c-libwww Version: %ver Release: %rel Copyright: W3C (see: http://www.w3.org/Consortium/Legal/copyright-software.html), (L)GPL compatible Group: System Environment/Libraries Source: http://www.w3.org/Library/Distribution/w3c-libwww-%{ver}.tar.gz URL: http://www.w3.org/Library BuildRoot: /var/tmp/%{name}-root Icon: Lib48x.gif Packager: someone@w3.org Summary: General-purpose Web API written in C %description Libwww is a general-purpose Web API written in C for Unix and Windows (Win32). With a highly extensible and layered API, it can accommodate many different types of applications including clients, robots, etc. The purpose of libwww is to provide a highly optimized HTTP sample implementation as well as other Internet protocols and to serve as a testbed for protocol experiments. Libwww also supports HTTPS, thru OpenSSL. Because of the US export restrictions, we can't distribute the libwwwssl pre-compiled library. You'll have to compile libwww yourself to use it. %package devel Summary: Libraries and header files for programs that use libwww. Group: Development/Libraries Requires: w3c-libwww %description devel Static libraries and header files for libwww, which are available as public libraries. %package apps Summary: Applications built using Libwww web library: e.g. Robot, command line tool, etc. Group: Applications/Internet Requires: w3c-libwww Icon: robot48x.gif %description apps Web applications built using Libwww: Robot, Command line tool, line mode browser. The Robot can crawl web sites faster, and with lower load, than any other web walker that we know of, due to its extensive pipelining and use of HTTP/1.1. The command line tool (w3c) is very useful for manipulation of Web sites that implement more than just HTTP GET (e.g. PUT, POST, etc.). The line mode browser is a minimal line mode web browser; often useful to convert to ascii text. Currently unavailable until someone updates it to some new interfaces. (hint, hint...) %prep %setup -q %build # for RPM 2.9 and greater #%configure --enable-shared --with-gnu-ld --with-regex --with-zlib [ -f configure.in ] CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --enable-shared --with-gnu-ld --with-regex --with-zlib make %install rm -rf $RPM_BUILD_ROOT make prefix=$RPM_BUILD_ROOT%{prefix} install ( cd $RPM_BUILD_ROOT chmod +x ./usr/lib/lib{www*,xml*,md5}.so.0.* strip ./usr/bin/* || : ) %clean rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files %defattr(-,root,root) %{prefix}/lib/libwww*.so.* %{prefix}/lib/libxml*.so.* %{prefix}/lib/libmd5.so.* %{prefix}/share/w3c-libwww %doc *.html */*.html */*/*.html Icons/*/*.gif %files apps %defattr(-,root,root) %{prefix}/bin/webbot %{prefix}/bin/w3c %files devel %defattr(-,root,root) %{prefix}/bin/libwww-config %{prefix}/lib/lib*.a %{prefix}/lib/lib*.la %{prefix}/lib/lib*.so %{prefix}/include/xmlparse.h %{prefix}/include/w3c-libwww %changelog * Fri Aug 04 2000 Jose Kahan <jose@w3.org) - Added blurb about the OpenSSL support, some esthetical changes * Mon Apr 12 1999 Jim Gettys <jg@w3.org) - down covert for older RPM currently widespread * Mon Apr 12 1999 Jeff Johnson <jbj@redhat.com> - repackage for Red Hat 6.0. �������������������������������������������������������������������������������������������������������������������������������������������������libwww/Makefile.in����������������������������������������������������������������������������������0100644�0000764�0000144�00000040612�07405520524�013624� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Process this file with Automake to create Makefile.in. # (c) COPYRIGHT MIT 1995. # Please first read the full copyright statement in the file COPYRIGH. # @(#) $Id: Makefile.am,v 1.38 2025/09/01 12:18:52 kahan Exp $ # .h files are distributed but originally are made from the # self-documenting hypertext files. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_alias = @build_alias@ build_triplet = @build@ host_alias = @host_alias@ host_triplet = @host@ target_alias = @target_alias@ target_triplet = @target@ AR = @AR@ AS = @AS@ A_STDIO = @A_STDIO@ CC = @CC@ CHMOD = @CHMOD@ COMPRESS = @COMPRESS@ CP = @CP@ CVS = @CVS@ CVS2SQL = @CVS2SQL@ DLLTOOL = @DLLTOOL@ EXEEXT = @EXEEXT@ HTLIBXML = @HTLIBXML@ HTSQL = @HTSQL@ HTSQLLOG = @HTSQLLOG@ HTWAIS = @HTWAIS@ HTXML = @HTXML@ HTZLIB = @HTZLIB@ LIBTOOL = @LIBTOOL@ LIBWWWMD5 = @LIBWWWMD5@ LIBWWWSQL = @LIBWWWSQL@ LIBWWWSSL = @LIBWWWSSL@ LIBWWWWAIS = @LIBWWWWAIS@ LIBWWWXML = @LIBWWWXML@ LIBWWWZIP = @LIBWWWZIP@ LN_S = @LN_S@ LWWWMD5 = @LWWWMD5@ LWWWSQL = @LWWWSQL@ LWWWSSL = @LWWWSSL@ LWWWWAIS = @LWWWWAIS@ LWWWXML = @LWWWXML@ LWWWZIP = @LWWWZIP@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ PURIFY_CACHE = @PURIFY_CACHE@ RANLIB = @RANLIB@ RM = @RM@ SED = @SED@ SHOWXML = @SHOWXML@ SSLINC = @SSLINC@ TAR = @TAR@ VERSION = @VERSION@ WWWMD5 = @WWWMD5@ WWWSQL = @WWWSQL@ WWWSSL = @WWWSSL@ WWWSSLEX = @WWWSSLEX@ WWWWAIS = @WWWWAIS@ WWWXML = @WWWXML@ WWWZIP = @WWWZIP@ XMLPARSE = @XMLPARSE@ XMLTOK = @XMLTOK@ ac_afsws_fs_found = @ac_afsws_fs_found@ ac_bn = @ac_bn@ ac_sys_afs_sysname = @ac_sys_afs_sysname@ have_perl = @have_perl@ have_resolv_conf = @have_resolv_conf@ have_rlogin = @have_rlogin@ have_telnet = @have_telnet@ have_tn3270 = @have_tn3270@ icondir = @icondir@ subdirs = @subdirs@ SUFFIXES = .html BUILT_SOURCES = COPYRIGH EXTRA_DIST = $(BUILT_SOURCES) README.html INSTALL.html COPYRIGHT.html PATCHES.html LICENSE.html # This is our install script provided by Soren Sandmann bin_SCRIPTS = libwww-config # We do not have _all_ GNU files so add this to avoid warnings AUTOMAKE_OPTIONS = foreign # These are the sub directories SUBDIRS = config modules Library PICS-client LineMode Robot ComLine WinCom Icons # Tag before making distribution. Also, don't make a distribution if # checks fail. CVSSTUFF = config modules Library PICS-client LineMode Robot ComLine WinCom Icons Makefile.am acconfig.h acinclude.m4 aclocal.m4 wwwconf.h.in configure.in # If not indicated otherwise then use this to make the CVS diff with PREVIOUS_VERSION = @PREVIOUS_VERSION@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = wwwconf.h CONFIG_CLEAN_FILES = libwww-config w3c-libwww.spec SCRIPTS = $(bin_SCRIPTS) DIST_COMMON = ./stamp-h.in ChangeLog Makefile.am Makefile.in acconfig.h \ acinclude.m4 aclocal.m4 configure configure.in libwww-config.in \ w3c-libwww.spec.in wwwconf.h.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .html $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status $(ACLOCAL_M4): configure.in acinclude.m4 cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) wwwconf.h: stamp-h @if test ! -f $@; then \ rm -f stamp-h; \ $(MAKE) stamp-h; \ else :; fi stamp-h: $(srcdir)/wwwconf.h.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES= CONFIG_HEADERS=wwwconf.h \ $(SHELL) ./config.status @echo timestamp > stamp-h 2> /dev/null $(srcdir)/wwwconf.h.in: $(srcdir)/stamp-h.in @if test ! -f $@; then \ rm -f $(srcdir)/stamp-h.in; \ $(MAKE) $(srcdir)/stamp-h.in; \ else :; fi $(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h cd $(top_srcdir) && $(AUTOHEADER) @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null mostlyclean-hdr: clean-hdr: distclean-hdr: -rm -f wwwconf.h maintainer-clean-hdr: libwww-config: $(top_builddir)/config.status libwww-config.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status w3c-libwww.spec: $(top_builddir)/config.status w3c-libwww.spec.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_SCRIPTS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ else if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ else :; fi; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) list='$(bin_SCRIPTS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) wwwconf.h.in $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)wwwconf.h.in$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags wwwconf.h.in $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist -rm -rf $(distdir) GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz mkdir $(distdir)/=build mkdir $(distdir)/=inst dc_install_base=`cd $(distdir)/=inst && pwd`; \ cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) dist -rm -rf $(distdir) @banner="$(distdir).tar.gz is ready for distribution"; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes" dist: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) dist-all: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive all-recursive-am: wwwconf.h $(MAKE) $(AM_MAKEFLAGS) all-recursive install-exec-am: install-binSCRIPTS install-exec-local install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binSCRIPTS uninstall: uninstall-recursive all-am: Makefile $(SCRIPTS) wwwconf.h all-redirect: all-recursive-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-hdr clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-hdr distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive -rm -f config.status .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ uninstall-binSCRIPTS install-binSCRIPTS install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ install-exec-local install-exec-am install-exec install-data-am \ install-data install-am install uninstall-am uninstall all-redirect \ all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean legal : $(BUILT_SOURCES) @echo Generated built sources # We need to install the config.h header file as well. As this file # is platform specific, we do not install it with the other libwww include files install-exec-local: @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(includedir) $(INSTALL_DATA) $(top_builddir)/$(CONFIG_HEADER) $(DESTDIR)$(includedir)/$(CONFIG_HEADER); # Extra distribution files in zip format and in compress dist-hook: chmod -R a+r $(distdir) zip -rq $(distdir).zip $(distdir) $(TAR) chof $(distdir).tar $(distdir) compress -f $(distdir).tar cvs-tag: cvs -q tag -F `echo "Release-$(VERSION)" | sed 's/\./-/g'` $(CVSSTUFF) cvs-export-member: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ rm -rf $$subdir/member; \ cvs export -d $$subdir/member \ -r `echo "Release-$(VERSION)" | sed 's/\./-/g'` WWW/$$subdir; \ done && test -z "$$fail" cvs-export-pub: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ rm -rf $$subdir/pub; \ cvs export -d $$subdir/pub \ -r `echo "Release-$(VERSION)" | sed 's/\./-/g'` WWW/$$subdir; \ done && test -z "$$fail" cvs-diff: thisver=`echo "Release-$(VERSION)" | sed 's/\./-/g'`; \ prevver=`echo "Release-$(PREVIOUS_VERSION)" | sed 's/\./-/g'`; \ cvs -f diff -w -c -r $$prevver -r $$thisver $(CVSSTUFF) \ > $(PACKAGE)-$(PREVIOUS_VERSION)-$(VERSION).diff # Generate the include files (normally done automaticly) inc: for subdir in $(SUBDIRS); do \ target=`echo $@ | sed s/-recursive//`; \ echo making $$target in $$subdir; \ (cd $$subdir/src && $(MAKE) $$target) \ || case "$(MFLAGS)" in *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" # # Hypertext supplied in text format # $(top_srcdir)/COPYRIGH : $(top_srcdir)/COPYRIGHT.html ifdef WWW -$(WWW) -p -na $(top_srcdir)/COPYRIGHT.html \ -o $(top_srcdir)/COPYRIGH endif # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������libwww/configure������������������������������������������������������������������������������������0100755�0000764�0000144�00000713530�07405520527�013477� 0����������������������������������������������������������������������������������������������������ustar �daniel��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # From configure.in Id: configure.in,v 1.89 2025/12/14 11:49:06 kahan Exp # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 # # Check to make sure that the build environment is sane. # # Like AC_CONFIG_HEADER, but automatically create stamp file. # serial 40 AC_PROG_LIBTOOL # AC_LIBTOOL_DLOPEN - enable checks for dlopen support # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's # AC_ENABLE_SHARED - implement the --enable-shared flag # Usage: AC_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_DISABLE_SHARED - set the default shared flag to --disable-shared # AC_ENABLE_STATIC - implement the --enable-static flag # Usage: AC_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_DISABLE_STATIC - set the default static flag to --disable-static # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install # AC_PROG_LD - find the path to the GNU or non-GNU linker # AC_PROG_NM - find the path to a BSD-compatible name lister # AC_CHECK_LIBM - check for math library # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for # the libltdl convenience library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-convenience to the # configure arguments. Note that LIBLTDL and INCLTDL are not # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not # provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed # with '${top_builddir}/' and INCLTDL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for # the libltdl installable library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-install to the configure # arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is # AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed # libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed # with '${top_srcdir}/' (note the single quotes!). If your package is # not flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --enable-shared[=PKGS] build shared libraries [default=yes]" ac_help="$ac_help --enable-static[=PKGS] build static libraries [default=yes]" ac_help="$ac_help --enable-fast-install[=PKGS] optimize for fast installation [default=yes]" ac_help="$ac_help --with-gnu-ld assume the C compiler uses GNU ld [default=no]" ac_help="$ac_help --disable-libtool-lock avoid locking (might break parallel builds)" ac_help="$ac_help --with-x use the X Window System" ac_help="$ac_help --with-wais[=PATH] Compile with support for direct WAIS access." ac_help="$ac_help --with-zlib[=PATH] Compile with zlib compress/decompress support." ac_help="$ac_help --with-regex[=PATH] Compile with POSIC regex library support." ac_help="$ac_help --with-socks Compile with SOCKS firewall traversal support." ac_help="$ac_help --with-socks5[=PATH] Compile with SOCKS5 firewall traversal support." ac_help="$ac_help --with-socks4[=PATH] Compile with SOCKS4 firewall traversal support." ac_help="$ac_help --with-mysql[=PATH] Compile with support for mysql access." ac_help="$ac_help --with-expat[=PATH] Compile with support for expat." ac_help="$ac_help --with-md5[=PATH] Compile with support for md5." ac_help="$ac_help --with-ssl[=PATH] Link with OpenSSL." ac_help="$ac_help --enable-signals use internal libwww signal handler." ac_help="$ac_help --disable-nagle Turning off Nagle's algorithm." ac_help="$ac_help --enable-autorules Enabling acceptance of rule files without user interaction." ac_help="$ac_help --disable-pipelining Turning off HTTP/1.1 Pipelining." ac_help="$ac_help --enable-mux Enabling MUX as transport for HTTP." ac_help="$ac_help --enable-reentrant define _REENTRANT to enable reentrant system calls" ac_help="$ac_help --enable-posix define _POSIX_SOURCE" ac_help="$ac_help --enable-cyrillic include support for Cyrillic in line mode browser" # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=Library # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi ac_aux_dir= for ac_dir in config $srcdir/config; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in config $srcdir/config" 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Do some error checking and defaulting for the host and target type. # The inputs are: # configure --host=HOST --target=TARGET --build=BUILD NONOPT # # The rules are: # 1. You are not allowed to specify --host, --target, and nonopt at the # same time. # 2. Host defaults to nonopt. # 3. If nonopt is not specified, then host defaults to the current host, # as determined by config.guess. # 4. Target and build default to nonopt. # 5. If nonopt is not specified, then target and build default to host. # The aliases save the names the user supplied, while $host etc. # will get canonicalized. case $host---$target---$nonopt in NONE---*---* | *---NONE---* | *---*---NONE) ;; *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; esac # Make sure we can run config.sub. if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 echo "configure:782: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 echo "configure:803: checking target system type" >&5 target_alias=$target case "$target_alias" in NONE) case $nonopt in NONE) target_alias=$host_alias ;; *) target_alias=$nonopt ;; esac ;; esac target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 echo "configure:821: checking build system type" >&5 build_alias=$build case "$build_alias" in NONE) case $nonopt in NONE) build_alias=$host_alias ;; *) build_alias=$nonopt ;; esac ;; esac build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$build" 1>&6 test "$host_alias" != "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- if test "$program_transform_name" = s,x,x,; then program_transform_name= else # Double any \ or $. echo might interpret backslashes. cat <<\EOF_SED > conftestsed s,\\,\\\\,g; s,\$,$$,g EOF_SED program_transform_name="`echo $program_transform_name|sed -f conftestsed`" rm -f conftestsed fi test "$program_prefix" != NONE && program_transform_name="s,^,${program_prefix},; $program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" # sed with no file args requires a program. test "$program_transform_name" = "" && program_transform_name="s,x,x," PACKAGE=w3c-libwww cat >> confdefs.h <<EOF #define W3C_PACKAGE "$PACKAGE" EOF VERSION=5.3.2 cat >> confdefs.h <<EOF #define W3C_VERSION "$VERSION" EOF #dnl for CVS to be able to make a release diff PREVIOUS_VERSION=5.3.1 # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:893: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo "configure:946: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { echo "configure: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" 1>&2; exit 1; } fi test "$2" = conftestfile ) then # Ok. : else { echo "configure: error: newly created file is older than distributed files! Check your system clock" 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:984: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi PACKAGE=$PACKAGE VERSION=$VERSION if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } fi cat >> confdefs.h <<EOF #define PACKAGE "$PACKAGE" EOF cat >> confdefs.h <<EOF #define VERSION "$VERSION" EOF missing_dir=`cd $ac_aux_dir && pwd` echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 echo "configure:1030: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (aclocal --version) < /dev/null > /dev/null 2>&1; then ACLOCAL=aclocal echo "$ac_t""found" 1>&6 else ACLOCAL="$missing_dir/missing aclocal" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 echo "configure:1043: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoconf --version) < /dev/null > /dev/null 2>&1; then AUTOCONF=autoconf echo "$ac_t""found" 1>&6 else AUTOCONF="$missing_dir/missing autoconf" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 echo "configure:1056: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (automake --version) < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake echo "$ac_t""found" 1>&6 else AUTOMAKE="$missing_dir/missing automake" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 echo "configure:1069: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoheader --version) < /dev/null > /dev/null 2>&1; then AUTOHEADER=autoheader echo "$ac_t""found" 1>&6 else AUTOHEADER="$missing_dir/missing autoheader" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 echo "configure:1082: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (makeinfo --version) < /dev/null > /dev/null 2>&1; then MAKEINFO=makeinfo echo "$ac_t""found" 1>&6 else MAKEINFO="$missing_dir/missing makeinfo" echo "$ac_t""missing" 1>&6 fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1103: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1133: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1184: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:1216: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF #line 1227 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:1232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:1258: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:1263: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <<EOF #ifdef __GNUC__ yes; #endif EOF if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1272: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:1291: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 echo "configure:1323: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then echo "$ac_t""yes" 1>&6 ISC=yes # If later tests want to check for ISC. cat >> confdefs.h <<\EOF #define _POSIX_SOURCE 1 EOF if test "$GCC" = yes; then CC="$CC -posix" else CC="$CC -Xp" fi else echo "$ac_t""no" 1>&6 ISC= fi echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 echo "configure:1344: checking for Cygwin environment" >&5 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1349 "configure" #include "confdefs.h" int main() { #ifndef __CYGWIN__ #define __CYGWIN__ __CYGWIN32__ #endif return __CYGWIN__; ; return 0; } EOF if { (eval echo configure:1360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_cygwin=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_cygwin=no fi rm -f conftest* rm -f conftest* fi echo "$ac_t""$ac_cv_cygwin" 1>&6 CYGWIN= test "$ac_cv_cygwin" = yes && CYGWIN=yes echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 echo "configure:1376: checking for mingw32 environment" >&5 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1381 "configure" #include "confdefs.h" int main() { return __MINGW32__; ; return 0; } EOF if { (eval echo configure:1388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mingw32=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_mingw32=no fi rm -f conftest* rm -f conftest* fi echo "$ac_t""$ac_cv_mingw32" 1>&6 MINGW32= test "$ac_cv_mingw32" = yes && MINGW32=yes echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 echo "configure:1406: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$CYGWIN" = yes || test "$MINGW32" = yes; then ac_cv_exeext=.exe else rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= if { (eval echo configure:1416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in *.c | *.o | *.obj) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done else { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } fi rm -f conftest* test x"${ac_cv_exeext}" = x && ac_cv_exeext=no fi fi EXEEXT="" test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} echo "$ac_t""${ac_cv_exeext}" 1>&6 ac_exeext=$EXEEXT # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case "$enableval" in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$ac_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case "$enableval" in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$ac_save_ifs" ;; esac else enable_static=yes fi # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case "$enableval" in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$ac_save_ifs" ;; esac else enable_fast_install=yes fi # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1507: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$ac_cv_prog_gcc" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 echo "configure:1546: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 echo "configure:1570: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 echo "configure:1573: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then ac_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else ac_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$ac_cv_path_LD" if test -n "$LD"; then echo "$ac_t""$LD" 1>&6 else echo "$ac_t""no" 1>&6 fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 echo "configure:1608: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then ac_cv_prog_gnu_ld=yes else ac_cv_prog_gnu_ld=no fi fi echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 echo "configure:1624: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$NM"; then # Let the user override the test. ac_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -B" break elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -p" break else ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm fi fi NM="$ac_cv_path_NM" echo "$ac_t""$NM" 1>&6 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo "configure:1660: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftestdata if ln -s X conftestdata 2>/dev/null then rm -f conftestdata ac_cv_prog_LN_S="ln -s" else ac_cv_prog_LN_S=ln fi fi LN_S="$ac_cv_prog_LN_S" if test "$ac_cv_prog_LN_S" = "ln -s"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$target" in NONE) lt_target="$host" ;; *) lt_target="$target" ;; esac # Check for any special flags to pass to ltconfig. # # the following will cause an existing older ltconfig to fail, so # we ignore this at the expense of the cache file... Checking this # will just take longer ... bummer! #libtool_flags="--cache-file=$cache_file" # test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" : fi test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" # Some flags need to be propagated to the compiler or linker for good # libtool support. case "$lt_target" in *-*-irix6*) # Find out which ABI we are using. echo '#line 1714 "configure"' > conftest.$ac_ext if { (eval echo configure:1715: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case "`/usr/bin/file conftest.o`" in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 echo "configure:1736: checking whether the C compiler needs -belf" >&5 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1741 "configure" #include "confdefs.h" int main() { ; return 0; } EOF if { (eval echo configure:1748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* lt_cv_cc_needs_belf=no fi rm -f conftest* fi echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac # Save cache, so that ltconfig can load it cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache # Actually configure libtool. ac_aux_dir is where install-sh is found. CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ || { echo "configure: error: libtool configure failed" 1>&2; exit 1; } # Reload cache, that may have been modified by ltconfig if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Redirect the config.log output again, so that the ltconfig log is not # clobbered by the next message. exec 5>>./config.log echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:1850: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:1888: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:1942: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF #line 1957 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1963: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext <<EOF #line 1974 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext <<EOF #line 1991 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 # If we find X, set shell vars x_includes and x_libraries to the # paths, otherwise set no_x=yes. # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 echo "configure:2026: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" : fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then # Both variables are already set. have_x=yes else if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=NO ac_x_libraries=NO rm -fr conftestdir if mkdir conftestdir; then cd conftestdir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat > Imakefile <<'EOF' acfindx: @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' EOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && test -f $ac_im_libdir/libX11.$ac_extension; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case "$ac_im_incroot" in /usr/include) ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;; esac case "$ac_im_usrlibdir" in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;; esac fi cd .. rm -fr conftestdir fi if test "$ac_x_includes" = NO; then # Guess where to find include files, by looking for this one X11 .h file. test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h # First, try using that file with no special directory specified. cat > conftest.$ac_ext <<EOF #line 2088 "configure" #include "confdefs.h" #include <$x_direct_test_include> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2093: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* # We can compile using X headers with no special include directory. ac_x_includes= else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* # Look for the header file in a standard set of common directories. # Check X11 before X11Rn because it is often a symlink to the current release. for ac_dir in \ /usr/X11/include \ /usr/X11R6/include \ /usr/X11R5/include \ /usr/X11R4/include \ \ /usr/include/X11 \ /usr/include/X11R6 \ /usr/include/X11R5 \ /usr/include/X11R4 \ \ /usr/local/X11/include \ /usr/local/X11R6/include \ /usr/local/X11R5/include \ /usr/local/X11R4/include \ \ /usr/local/include/X11 \ /usr/local/include/X11R6 \ /usr/local/include/X11R5 \ /usr/local/include/X11R4 \ \ /usr/X386/include \ /usr/x386/include \ /usr/XFree86/include/X11 \ \ /usr/include \ /usr/local/include \ /usr/unsupported/include \ /usr/athena/include \ /usr/local/x11r5/include \ /usr/lpp/Xamples/include \ \ /usr/openwin/include \ /usr/openwin/share/include \ ; \ do if test -r "$ac_dir/$x_direct_test_include"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest* fi # $ac_x_includes = NO if test "$ac_x_libraries" = NO; then # Check for the libraries. test -z "$x_direct_test_library" && x_direct_test_library=Xt test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <<EOF #line 2162 "configure" #include "confdefs.h" int main() { ${x_direct_test_function}() ; return 0; } EOF if { (eval echo configure:2169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. ac_x_libraries= else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="$ac_save_LIBS" # First see if replacing the include by lib works. # Check X11 before X11Rn because it is often a symlink to the current release. for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \ /usr/X11/lib \ /usr/X11R6/lib \ /usr/X11R5/lib \ /usr/X11R4/lib \ \ /usr/lib/X11 \ /usr/lib/X11R6 \ /usr/lib/X11R5 \ /usr/lib/X11R4 \ \ /usr/local/X11/lib \ /usr/local/X11R6/lib \ /usr/local/X11R5/lib \ /usr/local/X11R4/lib \ \ /usr/local/lib/X11 \ /usr/local/lib/X11R6 \ /usr/local/lib/X11R5 \ /usr/local/lib/X11R4 \ \ /usr/X386/lib \ /usr/x386/lib \ /usr/XFree86/lib/X11 \ \ /usr/lib \ /usr/local/lib \ /usr/unsupported/lib \ /usr/athena/lib \ /usr/local/x11r5/lib \ /usr/lpp/Xamples/lib \ /lib/usr/lib/X11 \ \ /usr/openwin/lib \ /usr/openwin/share/lib \ ; \ do for ac_extension in a so sl; do if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f conftest* fi # $ac_x_libraries = NO if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then # Didn't find X anywhere. Cache the known absence of X. ac_cv_have_x="have_x=no" else # Record where we found X for the cache. ac_cv_have_x="have_x=yes \ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" fi fi fi eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then echo "$ac_t""$have_x" 1>&6 no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6 fi icondir=$datadir/$PACKAGE PURIFY_CACHE=/tmp/purify.cache echo $ac_n "checking whether to define additional compiler specific flags""... $ac_c" 1>&6 echo "configure:2263: checking whether to define additional compiler specific flags" >&5 case "$target" in alpha-dec*) if test "$CC" = "cc"; then CFLAGS="$CFLAGS -std1" echo "$ac_t""Digital Unix's cc" 1>&6 fi ;; hp*) if test "$CC" = "cc"; then CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE" echo "$ac_t""HT-UX's cc" 1>&6 fi ;; i386-next-nextstep*) CFLAGS="$CFLAGS -D_POSIX_SOURCE" echo "$ac_t""NextStep and OpenStep require _POSIX_SOURCE defined. This may cause some compilation warnings about pre-compiled headers but that should be OK" 1>&6 ;; *) echo "$ac_t""no" 1>&6 ;; esac for ac_prog in telnet do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2291: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_have_telnet'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$have_telnet"; then ac_cv_prog_have_telnet="$have_telnet" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_have_telnet="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi have_telnet="$ac_cv_prog_have_telnet" if test -n "$have_telnet"; then echo "$ac_t""$have_telnet" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$have_telnet" && break done if test -n "$have_telnet" ; then cat >> confdefs.h <<EOF #define TELNET_PROGRAM "$have_telnet" EOF fi for ac_prog in rlogin do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2331: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_have_rlogin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$have_rlogin"; then ac_cv_prog_have_rlogin="$have_rlogin" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_have_rlogin="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi have_rlogin="$ac_cv_prog_have_rlogin" if test -n "$have_rlogin"; then echo "$ac_t""$have_rlogin" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$have_rlogin" && break done if test -n "$have_rlogin" ; then cat >> confdefs.h <<EOF #define RLOGIN_PROGRAM "$have_rlogin" EOF fi for ac_prog in tn3270 x3270 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2371: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_have_tn3270'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$have_tn3270"; then ac_cv_prog_have_tn3270="$have_tn3270" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_have_tn3270="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi have_tn3270="$ac_cv_prog_have_tn3270" if test -n "$have_tn3270"; then echo "$ac_t""$have_tn3270" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$have_tn3270" && break done if test -n "$have_tn3270" ; then cat >> confdefs.h <<EOF #define TN3270_PROGRAM "$have_tn3270" EOF fi for ac_prog in perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2411: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_have_perl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$have_perl"; then ac_cv_prog_have_perl="$have_perl" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_have_perl="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi have_perl="$ac_cv_prog_have_perl" if test -n "$have_perl"; then echo "$ac_t""$have_perl" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$have_perl" && break done if test ! -n "$have_perl" ; then { echo "configure: error: "Perl needs to be installed in order to compile libwww"" 1>&2; exit 1; } fi # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2447: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_RM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$RM" in /*) ac_cv_path_RM="$RM" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_RM="$RM" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_RM="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_RM" && ac_cv_path_RM="rm" ;; esac fi RM="$ac_cv_path_RM" if test -n "$RM"; then echo "$ac_t""$RM" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2483: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$AR" in /*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_AR="$AR" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_AR="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_AR" && ac_cv_path_AR="ar" ;; esac fi AR="$ac_cv_path_AR" if test -n "$AR"; then echo "$ac_t""$AR" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "mkdir", so it can be a program name with args. set dummy mkdir; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2519: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MKDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$MKDIR" in /*) ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_MKDIR="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MKDIR" && ac_cv_path_MKDIR="mkdir" ;; esac fi MKDIR="$ac_cv_path_MKDIR" if test -n "$MKDIR"; then echo "$ac_t""$MKDIR" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "chmod", so it can be a program name with args. set dummy chmod; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2555: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CHMOD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$CHMOD" in /*) ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_CHMOD="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_CHMOD" && ac_cv_path_CHMOD="chmod" ;; esac fi CHMOD="$ac_cv_path_CHMOD" if test -n "$CHMOD"; then echo "$ac_t""$CHMOD" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "cp", so it can be a program name with args. set dummy cp; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2591: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$CP" in /*) ac_cv_path_CP="$CP" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_CP="$CP" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_CP="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_CP" && ac_cv_path_CP="cp" ;; esac fi CP="$ac_cv_path_CP" if test -n "$CP"; then echo "$ac_t""$CP" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "tar", so it can be a program name with args. set dummy tar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2627: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_TAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$TAR" in /*) ac_cv_path_TAR="$TAR" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_TAR="$TAR" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_TAR="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_TAR" && ac_cv_path_TAR="tar" ;; esac fi TAR="$ac_cv_path_TAR" if test -n "$TAR"; then echo "$ac_t""$TAR" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "cvs", so it can be a program name with args. set dummy cvs; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2663: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CVS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$CVS" in /*) ac_cv_path_CVS="$CVS" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_CVS="$CVS" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_CVS="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_CVS" && ac_cv_path_CVS="cvs" ;; esac fi CVS="$ac_cv_path_CVS" if test -n "$CVS"; then echo "$ac_t""$CVS" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2699: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_SED'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$SED" in /*) ac_cv_path_SED="$SED" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_SED="$SED" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_SED="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_SED" && ac_cv_path_SED="sed" ;; esac fi SED="$ac_cv_path_SED" if test -n "$SED"; then echo "$ac_t""$SED" 1>&6 else echo "$ac_t""no" 1>&6 fi for ac_prog in gzip compress do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2737: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_COMPRESS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$COMPRESS" in /*) ac_cv_path_COMPRESS="$COMPRESS" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_COMPRESS="$COMPRESS" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_COMPRESS="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi COMPRESS="$ac_cv_path_COMPRESS" if test -n "$COMPRESS"; then echo "$ac_t""$COMPRESS" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$COMPRESS" && break done test -n "$COMPRESS" || COMPRESS="compress" echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo "configure:2774: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftestdata if ln -s X conftestdata 2>/dev/null then rm -f conftestdata ac_cv_prog_LN_S="ln -s" else ac_cv_prog_LN_S=ln fi fi LN_S="$ac_cv_prog_LN_S" if test "$ac_cv_prog_LN_S" = "ln -s"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "resolv.conf", so it can be a program name with args. set dummy resolv.conf; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2798: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_have_resolv_conf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$have_resolv_conf" in /*) ac_cv_path_have_resolv_conf="$have_resolv_conf" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_have_resolv_conf="$have_resolv_conf" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="/etc" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_have_resolv_conf="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi have_resolv_conf="$ac_cv_path_have_resolv_conf" if test -n "$have_resolv_conf"; then echo "$ac_t""$have_resolv_conf" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -n "$have_resolv_conf" ; then cat >> confdefs.h <<EOF #define RESOLV_CONF "$have_resolv_conf" EOF fi cat >> confdefs.h <<\EOF #define CACHE_FILE_PREFIX "/usr/wsrc/" EOF echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6 echo "configure:2843: checking for socket in -lsocket" >&5 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <<EOF #line 2851 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket(); int main() { socket() ; return 0; } EOF if { (eval echo configure:2862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <<EOF #define $ac_tr_lib 1 EOF LIBS="-lsocket $LIBS" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 echo "configure:2890: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <<EOF #line 2898 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect(); int main() { connect() ; return 0; } EOF if { (eval echo configure:2909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo inet | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <<EOF #define $ac_tr_lib 1 EOF LIBS="-linet $LIBS" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for t_accept in -lnsl""... $ac_c" 1>&6 echo "configure:2937: checking for t_accept in -lnsl" >&5 ac_lib_var=`echo nsl'_'t_accept | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <<EOF #line 2945 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char t_accept(); int main() { t_accept() ; return 0; } EOF if { (eval echo configure:2956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <<EOF #define $ac_tr_lib 1 EOF LIBS="-lnsl $LIBS" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 echo "configure:2984: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <<EOF #line 2992 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen(); int main() { dlopen() ; return 0; } EOF if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo dl | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <<EOF #define $ac_tr_lib 1 EOF LIBS="-ldl $LIBS" else echo "$ac_t""no" 1>&6 fi for ac_hdr in appkit/appkit.h appkit.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3035: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3040 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3045: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in arpa/inet.h inet.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3075: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3080 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3085: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in net/errno.h sys/errno.h errno.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3115: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3120 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3125: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in netinet/in.h in.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3155: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3160 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in netinet/tcp.h tcp.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3195: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3200 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3205: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/fcntl.h fcntl.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3235: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3240 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3245: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/file.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3275: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3280 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3285: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/ioctl.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3315: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3320 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/ipc.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3355: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3360 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3365: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/limits.h limits.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3395: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3400 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/machine.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3435: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3440 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3445: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/resource.h resource.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3475: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3480 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3485: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/select.h select.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3515: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3520 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3525: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/socket.h socket.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3555: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3560 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3565: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/stat.h stat.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3595: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3600 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/syslog syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3635: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3640 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3645: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/systeminfo.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3675: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3680 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3685: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/time.h time.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3715: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3720 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3725: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/types.h types.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3755: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3760 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3765: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in sys/unistd.h unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3795: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3800 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3805: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in wais/wais.h wais.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3835: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3840 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3845: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in bsdtime.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3875: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3880 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3885: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in bsdtypes.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3915: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3920 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3925: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in ctype.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3955: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3960 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3965: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in cursesX.h curses.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3995: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4000 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in dn.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4035: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4040 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4045: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in dnetdb.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4075: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4080 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4085: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in grp.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4115: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4120 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4125: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in libc.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4155: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4160 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in malloc.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4195: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4200 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4205: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in manifest.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4235: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4240 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4245: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in memory.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4275: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4280 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4285: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in netdb.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4315: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4320 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in pwd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4355: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4360 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4365: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in rxposix.h regex.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4395: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4400 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in stdefs.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4435: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4440 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4445: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in stdio.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4475: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4480 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4485: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in stdlib.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4515: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4520 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4525: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in string.h strings.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4555: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4560 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4565: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in termios.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4595: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4600 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done for ac_hdr in unixlib.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4635: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4640 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4645: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 echo "configure:4676: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4681 "configure" #include "confdefs.h" #include <sys/types.h> #include <$ac_hdr> int main() { DIR *dirp = 0; ; return 0; } EOF if { (eval echo configure:4689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF ac_header_dirent=$ac_hdr; break else echo "$ac_t""no" 1>&6 fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 echo "configure:4714: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <<EOF #line 4722 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir(); int main() { opendir() ; return 0; } EOF if { (eval echo configure:4733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -ldir" else echo "$ac_t""no" 1>&6 fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 echo "configure:4755: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <<EOF #line 4763 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir(); int main() { opendir() ; return 0; } EOF if { (eval echo configure:4774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lx" else echo "$ac_t""no" 1>&6 fi fi for ac_hdr in dir.h direct.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:4800: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4805 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4810: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <<EOF #define $ac_tr_hdr 1 EOF else echo "$ac_t""no" 1>&6 fi done echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:4836: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4841 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext <<EOF #line 4866 "configure" #include "confdefs.h" #include <string.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext <<EOF #line 4884 "configure" #include "confdefs.h" #include <stdlib.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext <<EOF #line 4905 "configure" #include "confdefs.h" #include <ctype.h> #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:4916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 echo "configure:4940: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4945 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/wait.h> #ifndef WEXITSTATUS #define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) #endif #ifndef WIFEXITED #define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main() { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF if { (eval echo configure:4961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_sys_wait_h=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6 if test $ac_cv_header_sys_wait_h = yes; then cat >> confdefs.h <<\EOF #define HAVE_SYS_WAIT_H 1 EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo "configure:4982: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4987 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/time.h> #include <time.h> int main() { struct tm *tp; ; return 0; } EOF if { (eval echo configure:4996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_time=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_time" 1>&6 if test $ac_cv_header_time = yes; then cat >> confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 echo "configure:5017: checking whether stat file-mode macros are broken" >&5 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5022 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/stat.h> #if defined(S_ISBLK) && defined(S_IFDIR) # if S_ISBLK (S_IFDIR) You lose. # endif #endif #if defined(S_ISBLK) && defined(S_IFCHR) # if S_ISBLK (S_IFCHR) You lose. # endif #endif #if defined(S_ISLNK) && defined(S_IFREG) # if S_ISLNK (S_IFREG) You lose. # endif #endif #if defined(S_ISSOCK) && defined(S_IFREG) # if S_ISSOCK (S_IFREG) You lose. # endif #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "You lose" >/dev/null 2>&1; then rm -rf conftest* ac_cv_header_stat_broken=yes else rm -rf conftest* ac_cv_header_stat_broken=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_stat_broken" 1>&6 if test $ac_cv_header_stat_broken = yes; then cat >> confdefs.h <<\EOF #define STAT_MACROS_BROKEN 1 EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 echo "configure:5074: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5079 "configure" #include "confdefs.h" #include <sys/types.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "uid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uid_t=yes else rm -rf conftest* ac_cv_type_uid_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_uid_t" 1>&6 if test $ac_cv_type_uid_t = no; then cat >> confdefs.h <<\EOF #define uid_t int EOF cat >> confdefs.h <<\EOF #define gid_t int EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 echo "configure:5108: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5113 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_pid_t=yes else rm -rf conftest* ac_cv_type_pid_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_pid_t" 1>&6 if test $ac_cv_type_pid_t = no; then cat >> confdefs.h <<\EOF #define pid_t int EOF fi echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6 echo "configure:5141: checking type of array argument to getgroups" >&5 if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_type_getgroups=cross else cat > conftest.$ac_ext <<EOF #line 5149 "configure" #include "confdefs.h" /* Thanks to Mike Rendell for this test. */ #include <sys/types.h> #define NGID 256 #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) main() { gid_t gidset[NGID]; int i, n; union { gid_t gval; long lval; } val; val.lval = -1; for (i = 0; i < NGID; i++) gidset[i] = val.gval; n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, gidset); /* Exit non-zero if getgroups seems to require an array of ints. This happens when gid_t is short but getgroups modifies an array of ints. */ exit ((n > 0 && gidset[n] != val.gval) ? 1 : 0); } EOF if { (eval echo configure:5174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_type_getgroups=gid_t else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_type_getgroups=int fi rm -fr conftest* fi if test $ac_cv_type_getgroups = cross; then cat > conftest.$ac_ext <<EOF #line 5188 "configure" #include "confdefs.h" #include <unistd.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "getgroups.*int.*gid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_getgroups=gid_t else rm -rf conftest* ac_cv_type_getgroups=int fi rm -f conftest* fi fi echo "$ac_t""$ac_cv_type_getgroups" 1>&6 cat >> confdefs.h <<EOF #define GETGROUPS_T $ac_cv_type_getgroups EOF echo $ac_n "checking for mode_t""... $ac_c" 1>&6 echo "configure:5212: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5217 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_mode_t=yes else rm -rf conftest* ac_cv_type_mode_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_mode_t" 1>&6 if test $ac_cv_type_mode_t = no; then cat >> confdefs.h <<\EOF #define mode_t int EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo "configure:5245: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5250 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 echo "configure:5278: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5283 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main() { int i; ; return 0; } EOF if { (eval echo configure:5300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_type_signal=int fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_signal" 1>&6 cat >> confdefs.h <<EOF #define RETSIGTYPE $ac_cv_type_signal EOF echo $ac_n "checking for BOOLEAN""... $ac_c" 1>&6 echo "configure:5320: checking for BOOLEAN" >&5 if eval "test \"`echo '$''{'ac_cv_type_BOOLEAN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5325 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])BOOLEAN[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_BOOLEAN=yes else rm -rf conftest* ac_cv_type_BOOLEAN=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_BOOLEAN" 1>&6 if test $ac_cv_type_BOOLEAN = no; then cat >> confdefs.h <<\EOF #define BOOLEAN char EOF fi echo $ac_n "checking for u_char""... $ac_c" 1>&6 echo "configure:5353: checking for u_char" >&5 if eval "test \"`echo '$''{'ac_cv_type_u_char'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5358 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])u_char[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_u_char=yes else rm -rf conftest* ac_cv_type_u_char=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_u_char" 1>&6 if test $ac_cv_type_u_char = no; then cat >> confdefs.h <<\EOF #define u_char unsigned char EOF fi echo $ac_n "checking for u_short""... $ac_c" 1>&6 echo "configure:5386: checking for u_short" >&5 if eval "test \"`echo '$''{'ac_cv_type_u_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5391 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])u_short[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_u_short=yes else rm -rf conftest* ac_cv_type_u_short=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_u_short" 1>&6 if test $ac_cv_type_u_short = no; then cat >> confdefs.h <<\EOF #define u_short unsigned short EOF fi echo $ac_n "checking for u_long""... $ac_c" 1>&6 echo "configure:5419: checking for u_long" >&5 if eval "test \"`echo '$''{'ac_cv_type_u_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5424 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])u_long[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_u_long=yes else rm -rf conftest* ac_cv_type_u_long=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_u_long" 1>&6 if test $ac_cv_type_u_long = no; then cat >> confdefs.h <<\EOF #define u_long unsigned long EOF fi echo $ac_n "checking size of char""... $ac_c" 1>&6 echo "configure:5453: checking size of char" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 5461 "configure" #include "confdefs.h" #include <stdio.h> main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(char)); exit(0); } EOF if { (eval echo configure:5472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_char=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_char=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_char" 1>&6 cat >> confdefs.h <<EOF #define SIZEOF_CHAR $ac_cv_sizeof_char EOF echo $ac_n "checking size of char *""... $ac_c" 1>&6 echo "configure:5492: checking size of char *" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_char_p'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 5500 "configure" #include "confdefs.h" #include <stdio.h> main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(char *)); exit(0); } EOF if { (eval echo configure:5511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_char_p=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_char_p=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_char_p" 1>&6 cat >> confdefs.h <<EOF #define SIZEOF_CHAR_P $ac_cv_sizeof_char_p EOF echo $ac_n "checking size of int""... $ac_c" 1>&6 echo "configure:5531: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_int=4 else cat > conftest.$ac_ext <<EOF #line 5539 "configure" #include "confdefs.h" #include <stdio.h> main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); exit(0); } EOF if { (eval echo configure:5550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_int=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_int" 1>&6 cat >> confdefs.h <<EOF #define SIZEOF_INT $ac_cv_sizeof_int EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 echo "configure:5570: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long=4 else cat > conftest.$ac_ext <<EOF #line 5578 "configure" #include "confdefs.h" #include <stdio.h> main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); exit(0); } EOF if { (eval echo configure:5589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long" 1>&6 cat >> confdefs.h <<EOF #define SIZEOF_LONG $ac_cv_sizeof_long EOF echo $ac_n "checking for whether time_t is long""... $ac_c" 1>&6 echo "configure:5609: checking for whether time_t is long" >&5 if eval "test \"`echo '$''{'ac_cv_c_long_time_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 5617 "configure" #include "confdefs.h" #include <time.h> int main() { exit(sizeof(time_t) == sizeof(long)); } EOF if { (eval echo configure:5623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_long_time_t=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_long_time_t=yes fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_c_long_time_t" 1>&6 if test $ac_cv_c_long_time_t = yes; then cat >> confdefs.h <<\EOF #define HAVE_LONG_TIME_T 1 EOF fi echo $ac_n "checking for whether size_t is long""... $ac_c" 1>&6 echo "configure:5647: checking for whether size_t is long" >&5 if eval "test \"`echo '$''{'ac_cv_c_long_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 5655 "configure" #include "confdefs.h" #include <stddef.h> int main() { exit(sizeof(size_t) == sizeof(int)); } EOF if { (eval echo configure:5661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_long_size_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_long_size_t=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_c_long_size_t" 1>&6 if test $ac_cv_c_long_size_t = yes; then cat >> confdefs.h <<\EOF #define HAVE_LONG_SIZE_T 1 EOF fi echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:5686: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5691 "configure" #include "confdefs.h" int main() { /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:5740: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF #define const EOF fi echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 echo "configure:5761: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext <<EOF #line 5768 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/param.h> int main() { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } EOF if { (eval echo configure:5779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext <<EOF #line 5783 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/param.h> int main() { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } EOF if { (eval echo configure:5794: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_bigendian=no fi rm -f conftest* else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* if test $ac_cv_c_bigendian = unknown; then if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 5814 "configure" #include "confdefs.h" main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); } EOF if { (eval echo configure:5827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_bigendian=yes fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_c_bigendian" 1>&6 if test $ac_cv_c_bigendian = yes; then cat >> confdefs.h <<\EOF #define WORDS_BIGENDIAN 1 EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 echo "configure:5851: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <<EOF #line 5858 "configure" #include "confdefs.h" #ifdef __CHAR_UNSIGNED__ yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* ac_cv_c_char_unsigned=yes else rm -rf conftest* ac_cv_c_char_unsigned=no fi rm -f conftest* else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 5880 "configure" #include "confdefs.h" /* volatile prevents gcc2 from optimizing the test away on sparcs. */ #if !defined(__STDC__) || __STDC__ != 1 #define volatile #endif main() { volatile char c = 255; exit(c < 0); } EOF if { (eval echo configure:5890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_char_unsigned=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_c_char_unsigned" 1>&6 if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then cat >> confdefs.h <<\EOF #define __CHAR_UNSIGNED__ 1 EOF fi echo $ac_n "checking for long double""... $ac_c" 1>&6 echo "configure:5914: checking for long double" >&5 if eval "test \"`echo '$''{'ac_cv_c_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then ac_cv_c_long_double=yes else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 5925 "configure" #include "confdefs.h" int main() { /* The Stardent Vistra knows sizeof(long double), but does not support it. */ long double foo = 0.0; /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ exit(sizeof(long double) < sizeof(double)); } EOF if { (eval echo configure:5933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_long_double=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_long_double=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_c_long_double" 1>&6 if test $ac_cv_c_long_double = yes; then cat >> confdefs.h <<\EOF #define HAVE_LONG_DOUBLE 1 EOF fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 echo "configure:5958: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5963 "configure" #include "confdefs.h" #include <sys/types.h> #include <time.h> int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF if { (eval echo configure:5971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm=sys/time.h fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_tm" 1>&6 if test $ac_cv_struct_tm = sys/time.h; then cat >> confdefs.h <<\EOF #define TM_IN_SYS_TIME 1 EOF fi echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6 echo "configure:5992: checking for tm_gmtoff in struct tm" >&5 if eval "test \"`echo '$''{'ac_cv_struct_gmtoff'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 5997 "configure" #include "confdefs.h" #include <sys/types.h> #include <$ac_cv_struct_tm> int main() { struct tm tm; tm.tm_gmtoff; ; return 0; } EOF if { (eval echo configure:6005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_gmtoff=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_gmtoff=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_gmtoff" 1>&6 if test $ac_cv_struct_gmtoff = yes; then cat >> confdefs.h <<\EOF #define HAVE_TM_GMTOFF 1 EOF fi echo $ac_n "checking for time.h that defines timezone""... $ac_c" 1>&6 echo "configure:6026: checking for time.h that defines timezone" >&5 if eval "test \"`echo '$''{'ac_cv_extern_timezone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6031 "configure" #include "confdefs.h" #include <time.h> int main() { return timezone; ; return 0; } EOF if { (eval echo configure:6038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_extern_timezone=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_extern_timezone=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_extern_timezone" 1>&6 if test $ac_cv_extern_timezone = yes; then cat >> confdefs.h <<\EOF #define HAVE_TIMEZONE 1 EOF fi echo $ac_n "checking for time.h that defines altzone""... $ac_c" 1>&6 echo "configure:6059: checking for time.h that defines altzone" >&5 if eval "test \"`echo '$''{'ac_cv_extern_altzone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6064 "configure" #include "confdefs.h" #include <time.h> int main() { return altzone; ; return 0; } EOF if { (eval echo configure:6071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_extern_altzone=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_extern_altzone=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_extern_altzone" 1>&6 if test $ac_cv_extern_altzone = yes; then cat >> confdefs.h <<\EOF #define HAVE_ALTZONE 1 EOF fi echo $ac_n "checking for time.h that defines daylight""... $ac_c" 1>&6 echo "configure:6092: checking for time.h that defines daylight" >&5 if eval "test \"`echo '$''{'ac_cv_extern_daylight'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6097 "configure" #include "confdefs.h" #include <time.h> int main() { return daylight; ; return 0; } EOF if { (eval echo configure:6104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_extern_daylight=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_extern_daylight=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_extern_daylight" 1>&6 if test $ac_cv_extern_daylight = yes; then cat >> confdefs.h <<\EOF #define HAVE_DAYLIGHT 1 EOF fi if test $ac_cv_extern_timezone = yes; then echo $ac_n "checking if timezone is backwards""... $ac_c" 1>&6 echo "configure:6126: checking if timezone is backwards" >&5 if eval "test \"`echo '$''{'ac_cv_backwards_timezone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_backwards_timezone=cross-compiling else cat > conftest.$ac_ext <<EOF #line 6134 "configure" #include "confdefs.h" main(){ extern long timezone; switch( timezone/3600 ) { /* OK: */ case 5: case 6: case 7: case 8: /* USA */ case 0: case -1: case -2: /* Europe */ exit(0); /* Backwards: */ case -5: case -6: case -7: case -8: /* USA */ case 1: case 2: /* Europe */ exit(1); /* Other country -- default to ok: */ default: exit(0); } return 0;} EOF if { (eval echo configure:6153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_backwards_timezone=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_backwards_timezone=yes fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_backwards_timezone" 1>&6 if test $ac_cv_backwards_timezone = yes; then cat >> confdefs.h <<\EOF #define NEGATIVE_TIMEZONE 1 EOF fi fi echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 echo "configure:6177: checking for tm_zone in struct tm" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6182 "configure" #include "confdefs.h" #include <sys/types.h> #include <$ac_cv_struct_tm> int main() { struct tm tm; tm.tm_zone; ; return 0; } EOF if { (eval echo configure:6190: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm_zone=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_tm_zone" 1>&6 if test "$ac_cv_struct_tm_zone" = yes; then cat >> confdefs.h <<\EOF #define HAVE_TM_ZONE 1 EOF else echo $ac_n "checking for tzname""... $ac_c" 1>&6 echo "configure:6210: checking for tzname" >&5 if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6215 "configure" #include "confdefs.h" #include <time.h> #ifndef tzname /* For SGI. */ extern char *tzname[]; /* RS6000 and others reject char **tzname. */ #endif int main() { atoi(*tzname); ; return 0; } EOF if { (eval echo configure:6225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_var_tzname=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_var_tzname=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_var_tzname" 1>&6 if test $ac_cv_var_tzname = yes; then cat >> confdefs.h <<\EOF #define HAVE_TZNAME 1 EOF fi fi echo $ac_n "checking for winsize structure""... $ac_c" 1>&6 echo "configure:6247: checking for winsize structure" >&5 if eval "test \"`echo '$''{'ac_cv_struct_winsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6252 "configure" #include "confdefs.h" #ifdef HAVE_TERMIOS_H #include <termios.h> #endif #ifdef HAVE_SYS_IOCTL_H #include <sys/ioctl.h> #endif int main() { struct winsize foo; ; return 0; } EOF if { (eval echo configure:6266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_winsize=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_winsize=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_winsize" 1>&6 if test $ac_cv_struct_winsize = yes ; then cat >> confdefs.h <<\EOF #define HAVE_WINSIZE 1 EOF fi echo $ac_n "checking for vprintf""... $ac_c" 1>&6 echo "configure:6288: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6293 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char vprintf(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char vprintf(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_vprintf) || defined (__stub___vprintf) choke me #else vprintf(); #endif ; return 0; } EOF if { (eval echo configure:6316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_vprintf=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_VPRINTF 1 EOF else echo "$ac_t""no" 1>&6 fi if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 echo "configure:6340: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6345 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char _doprnt(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char _doprnt(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub__doprnt) || defined (__stub____doprnt) choke me #else _doprnt(); #endif ; return 0; } EOF if { (eval echo configure:6368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func__doprnt=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DOPRNT 1 EOF else echo "$ac_t""no" 1>&6 fi fi echo $ac_n "checking for strftime""... $ac_c" 1>&6 echo "configure:6393: checking for strftime" >&5 if eval "test \"`echo '$''{'ac_cv_func_strftime'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6398 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char strftime(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strftime(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_strftime) || defined (__stub___strftime) choke me #else strftime(); #endif ; return 0; } EOF if { (eval echo configure:6421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_strftime=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_strftime=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'strftime`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_STRFTIME 1 EOF else echo "$ac_t""no" 1>&6 # strftime is in -lintl on SCO UNIX. echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6 echo "configure:6443: checking for strftime in -lintl" >&5 ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <<EOF #line 6451 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strftime(); int main() { strftime() ; return 0; } EOF if { (eval echo configure:6462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_STRFTIME 1 EOF LIBS="-lintl $LIBS" else echo "$ac_t""no" 1>&6 fi fi for ac_func in getcwd gethostname getdomainname getwd \ select socket strerror strtol opendir getpid strchr memcpy \ getlogin getpass fcntl readdir sysinfo ioctl chdir tempnam \ getsockopt setsockopt \ gettimeofday mktime timegm tzset do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:6495: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6500 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:6523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <<EOF #define $ac_tr_func 1 EOF else echo "$ac_t""no" 1>&6 fi done echo $ac_n "checking for unlink""... $ac_c" 1>&6 echo "configure:6548: checking for unlink" >&5 if eval "test \"`echo '$''{'ac_cv_func_unlink'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6553 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char unlink(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char unlink(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_unlink) || defined (__stub___unlink) choke me #else unlink(); #endif ; return 0; } EOF if { (eval echo configure:6576: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_unlink=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_unlink=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'unlink`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 echo $ac_n "checking for remove""... $ac_c" 1>&6 echo "configure:6594: checking for remove" >&5 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 6599 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_remove) || defined (__stub___remove) choke me #else remove(); #endif ; return 0; } EOF if { (eval echo configure:6622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_remove=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_remove=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define unlink remove EOF else echo "$ac_t""no" 1>&6 fi fi echo $ac_n "checking whether to support direct WAIS access.""... $ac_c" 1>&6 echo "configure:6648: checking whether to support direct WAIS access." >&5 # Check whether --with-wais or --without-wais was given. if test "${with_wais+set}" = set; then withval="$with_wais" case "$withval" in no) echo "$ac_t""no" 1>&6 HTWAIS="" WWWWAIS="" LWWWWAIS="" LIBWWWWAIS="" ;; *) echo "$ac_t""yes" 1>&6 if test "x$withval" = "xyes"; then withval="/usr/local/lib/wais/wais.a /usr/local/lib/wais/client.a" fi LIBS="$withval -lm $LIBS" cat >> confdefs.h <<\EOF #define HT_DIRECT_WAIS 1 EOF cat > conftest.$ac_ext <<EOF #line 6671 "configure" #include "confdefs.h" int main() { makeDocID(); ; return 0; } EOF if { (eval echo configure:6678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* { echo "configure: error: Could not find one or more of the $withval libraries. You must first install WAIS." 1>&2; exit 1; } fi rm -f conftest* HTWAIS="HTWAIS.lo" WWWWAIS="libwwwwais.la" LWWWWAIS="-lwwwwais.la" LIBWWWWAIS='${top_builddir}/Library/src/libwwwwais.la' ;; esac else echo "$ac_t""no" 1>&6 HTWAIS="" WWWWAIS="" LWWWWAIS="" LIBWWWWAIS="" fi echo $ac_n "checking whether to support zlib compress/decompress""... $ac_c" 1>&6 echo "configure:6708: checking whether to support zlib compress/decompress" >&5 # Check whether --with-zlib or --without-zlib was given. if test "${with_zlib+set}" = set; then withval="$with_zlib" case "$withval" in no) echo "$ac_t""no" 1>&6 HTZLIB="" WWWZIP="" LWWWZIP="" LIBWWWZIP="" ;; *) echo "$ac_t""yes" 1>&6 if test "x$withval" = "xyes"; then withval="-lz" LIBS="$LIBS $withval" else echo $ac_n "checking for $withval""... $ac_c" 1>&6 echo "configure:6727: checking for $withval" >&5 LP=`dirname $withval` LN=`basename $withval | sed 's/lib\(.*\)\.a/\1/g'` echo "$ac_t""-L$LP -l$LN" 1>&6 LIBS="$LIBS -L$LP -l$LN" fi cat >> confdefs.h <<\EOF #define HT_ZLIB 1 EOF cat > conftest.$ac_ext <<EOF #line 6739 "configure" #include "confdefs.h" int main() { zlibVersion(); ; return 0; } EOF if { (eval echo configure:6746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* { echo "configure: error: Could not find the $withval library. You must first install zlib." 1>&2; exit 1; } fi rm -f conftest* HTZLIB="HTZip.lo" WWWZIP="libwwwzip.la" LWWWZIP="-lwwwzip" LIBWWWZIP='${top_builddir}/Library/src/libwwwzip.la' ;; esac else echo "$ac_t""no" 1>&6 HTZLIB="" WWWZIP="" LWWWZIP="" LIBWWWZIP="" fi echo $ac_n "checking whether to support POSIX regex""... $ac_c" 1>&6 echo "configure:6776: checking whether to support POSIX regex" >&5 # Check whether --with-regex or --without-regex was given. if test "${with_regex+set}" = set; then withval="$with_regex" case "$withval" in no) echo "$ac_t""no" 1>&6 ;; *) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_POSIX_REGEX 1 EOF if test "x$withval" = "xyes"; then echo $ac_n "checking for regexec in -lrx""... $ac_c" 1>&6 echo "configure:6792: checking for regexec in -lrx" >&5 ac_lib_var=`echo rx'_'regexec | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lrx $LIBS" cat > conftest.$ac_ext <<EOF #line 6800 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char regexec(); int main() { regexec() ; return 0; } EOF if { (eval echo configure:6811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="-lrx $LIBS" else echo "$ac_t""no" 1>&6 fi else echo $ac_n "checking for $withval""... $ac_c" 1>&6 echo "configure:6833: checking for $withval" >&5 LP=`dirname $withval` LN=`basename $withval | sed 's/lib\(.*\)\.a/\1/g'` echo "$ac_t""-L$LP -l$LN" 1>&6 LIBS="$LIBS -L$LP -l$LN" cat > conftest.$ac_ext <<EOF #line 6840 "configure" #include "confdefs.h" int main() { regexec(); ; return 0; } EOF if { (eval echo configure:6847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* { echo "configure: error: Could not find the $withval library. You must first install regex." 1>&2; exit 1; } fi rm -f conftest* fi ;; esac else echo "$ac_t""no" 1>&6 fi # borrowed from SSH - thanks! echo $ac_n "checking whether to support SOCKS""... $ac_c" 1>&6 echo "configure:6867: checking whether to support SOCKS" >&5 # Check whether --with-socks or --without-socks was given. if test "${with_socks+set}" = set; then withval="$with_socks" case "$withval" in no) echo "$ac_t""no" 1>&6 ;; yes) echo "$ac_t""yes" 1>&6 echo $ac_n "checking for SOCKSconnect in -lsocks5""... $ac_c" 1>&6 echo "configure:6878: checking for SOCKSconnect in -lsocks5" >&5 ac_lib_var=`echo socks5'_'SOCKSconnect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocks5 $LIBS" cat > conftest.$ac_ext <<EOF #line 6886 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char SOCKSconnect(); int main() { SOCKSconnect() ; return 0; } EOF if { (eval echo configure:6897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 socks=5 LIBS="-lsocks5 $LIBS" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for Rconnect in -lsocks""... $ac_c" 1>&6 echo "configure:6919: checking for Rconnect in -lsocks" >&5 ac_lib_var=`echo socks'_'Rconnect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocks $LIBS" cat > conftest.$ac_ext <<EOF #line 6927 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Rconnect(); int main() { Rconnect() ; return 0; } EOF if { (eval echo configure:6938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 socks=4 LIBS="-lsocks $LIBS" else echo "$ac_t""no" 1>&6 { echo "configure: error: Could not find socks library. You must first install socks." 1>&2; exit 1; } fi fi ;; esac else echo "$ac_t""no" 1>&6 fi if test "x$socks" = "x"; then echo $ac_n "checking whether to support SOCKS5""... $ac_c" 1>&6 echo "configure:6974: checking whether to support SOCKS5" >&5 # Check whether --with-socks5 or --without-socks5 was given. if test "${with_socks5+set}" = set; then withval="$with_socks5" case "$withval" in no) echo "$ac_t""no" 1>&6 ;; *) echo "$ac_t""yes" 1>&6 socks=5 if test "x$withval" = "xyes"; then withval="-lsocks5" LIBS="$withval $LIBS" else echo $ac_n "checking for $withval""... $ac_c" 1>&6 echo "configure:6990: checking for $withval" >&5 LP=`dirname $withval` LN=`basename $withval | sed 's/lib\(.*\)\.a/\1/g'` echo "$ac_t""-L$LP -l$LN" 1>&6 LIBS="$LIBS -L$LP -l$LN" fi cat > conftest.$ac_ext <<EOF #line 6998 "configure" #include "confdefs.h" int main() { SOCKSconnect(); ; return 0; } EOF if { (eval echo configure:7005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* { echo "configure: error: Could not find the $withval library. You must first install socks5." 1>&2; exit 1; } fi rm -f conftest* ;; esac else echo "$ac_t""no" 1>&6 fi fi if test "x$socks" = "x"; then echo $ac_n "checking whether to support SOCKS4""... $ac_c" 1>&6 echo "configure:7025: checking whether to support SOCKS4" >&5 # Check whether --with-socks4 or --without-socks4 was given. if test "${with_socks4+set}" = set; then withval="$with_socks4" case "$withval" in no) echo "$ac_t""no" 1>&6 ;; *) echo "$ac_t""yes" 1>&6 socks=4 if test "x$withval" = "xyes"; then withval="-lsocks" LIBS="$withval $LIBS" else echo $ac_n "checking for $withval""... $ac_c" 1>&6 echo "configure:7041: checking for $withval" >&5 LP=`dirname $withval` LN=`basename $withval | sed 's/lib\(.*\)\.a/\1/g'` echo "$ac_t""-L$LP -l$LN" 1>&6 LIBS="$LIBS -L$LP -l$LN" fi cat > conftest.$ac_ext <<EOF #line 7049 "configure" #include "confdefs.h" int main() { Rconnect(); ; return 0; } EOF if { (eval echo configure:7056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* { echo "configure: error: Could not find the $withval library. You must first install socks." 1>&2; exit 1; } fi rm -f conftest* ;; esac else echo "$ac_t""no" 1>&6 fi fi if test "x$socks" = "x4"; then cat >> confdefs.h <<\EOF #define SOCKS 1 EOF cat >> confdefs.h <<\EOF #define SOCKS4 1 EOF fi if test "x$socks" = "x5"; then cat >> confdefs.h <<\EOF #define SOCKS 1 EOF cat >> confdefs.h <<\EOF #define SOCKS5 1 EOF fi echo $ac_n "checking whether to support mysql access.""... $ac_c" 1>&6 echo "configure:7097: checking whether to support mysql access." >&5 # Check whether --with-mysql or --without-mysql was given. if test "${with_mysql+set}" = set; then withval="$with_mysql" case "$withval" in no) echo "$ac_t""no" 1>&6 HTSQL="" HTSQLLOG="" WWWSQL="" LWWWSQL="" LIBWWWSQL="" CVS2SQL="" ;; *) echo "$ac_t""yes" 1>&6 if test "x$withval" = "xyes"; then if test -f '/usr/local/lib/mysql/libmysqlclient.a'; then echo $ac_n "checking for "/usr/local/lib/mysql/libmysqlclient.a"""... $ac_c" 1>&6 echo "configure:7116: checking for "/usr/local/lib/mysql/libmysqlclient.a"" >&5 LP=`dirname "/usr/local/lib/mysql/libmysqlclient.a"` LN=`basename "/usr/local/lib/mysql/libmysqlclient.a" | sed 's/lib\(.*\)\.a/\1/g'` echo "$ac_t""-L$LP -l$LN" 1>&6 LIBS="$LIBS -L$LP -l$LN" elif test -f '/usr/lib/mysql/libmysqlclient.a'; then echo $ac_n "checking for "/usr/lib/mysql/libmysqlclient.a"""... $ac_c" 1>&6 echo "configure:7124: checking for "/usr/lib/mysql/libmysqlclient.a"" >&5 LP=`dirname "/usr/lib/mysql/libmysqlclient.a"` LN=`basename "/usr/lib/mysql/libmysqlclient.a" | sed 's/lib\(.*\)\.a/\1/g'` echo "$ac_t""-L$LP -l$LN" 1>&6 LIBS="$LIBS -L$LP -l$LN" else { echo "configure: error: Could not find the mysql client library." 1>&2; exit 1; } fi else echo $ac_n "checking for $withval""... $ac_c" 1>&6 echo "configure:7135: checking for $withval" >&5 LP=`dirname $withval` LN=`basename $withval | sed 's/lib\(.*\)\.a/\1/g'` echo "$ac_t""-L$LP -l$LN" 1>&6 LIBS="$LIBS -L$LP -l$LN" fi cat >> confdefs.h <<\EOF #define HT_MYSQL 1 EOF HTSQL="HTSQL.lo" HTSQLLOG="HTSQLLog.lo" WWWSQL="libwwwsql.la" LWWWSQL="-lwwwsql" LIBWWWSQL='${top_builddir}/Library/src/libwwwsql.la' CVS2SQL="cvs2sql" ;; esac else echo "$ac_t""no" 1>&6 HTSQL="" HTSQLLOG="" WWWSQL="" LWWWSQL="" LIBWWWSQL="" CVS2SQL="" fi echo $ac_n "checking whether we include the Expat XML parser.""... $ac_c" 1>&6 echo "configure:7173: checking whether we include the Expat XML parser." >&5 # Check whether --with-expat or --without-expat was given. if test "${with_expat+set}" = set; then withval="$with_expat" case "$withval" in no) echo "$ac_t""no" 1>&6 HTXML="" HTLIBXML="" XMLTOK="" XMLPARSE="" WWWXML="" LWWWXML="" LIBWWWXML="" SHOWXML="" ;; *) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_EXPAT 1 EOF HTXML="HTXML.lo" HTLIBXML='${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la' XMLTOK="libxmltok.la" XMLPARSE="libxmlparse.la" WWWXML="libwwwxml.la" LWWWXML="-lwwwxml -lxmltok -lxmlparse" LIBWWWXML='${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la' SHOWXML="showxml ptri stri rdf_parse_file rdf_parse_buffer" ;; esac else echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_EXPAT 1 EOF HTXML="HTXML.lo" HTLIBXML='${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la' XMLTOK="libxmltok.la" XMLPARSE="libxmlparse.la" WWWXML="libwwwxml.la" LWWWXML="-lwwwxml -lxmltok -lxmlparse" LIBWWWXML='${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la' SHOWXML="showxml ptri stri rdf_parse_file rdf_parse_buffer" fi # for old style big library # for old style big library echo $ac_n "checking whether we include MD5 support for HTTP Digest Authentication.""... $ac_c" 1>&6 echo "configure:7232: checking whether we include MD5 support for HTTP Digest Authentication." >&5 # Check whether --with-md5 or --without-md5 was given. if test "${with_md5+set}" = set; then withval="$with_md5" case "$withval" in no) echo "$ac_t""no" 1>&6 WWWMD5="" LWWWMD5="" LIBWWWMD5="" ;; *) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_MD5 1 EOF WWWMD5="libmd5.la" LWWWMD5="-lmd5" LIBWWWMD5='${top_builddir}/modules/md5/libmd5.la' ;; esac else echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_MD5 1 EOF WWWMD5="libmd5.la" LWWWMD5="-lmd5" LIBWWWMD5='${top_builddir}/modules/md5/libmd5.la' fi echo $ac_n "checking whether we can find OpenSSL""... $ac_c" 1>&6 echo "configure:7271: checking whether we can find OpenSSL" >&5 if test -d '/usr/local/ssl/lib'; then ssllib="-L/usr/local/ssl/lib -lssl -lcrypto" else ssllib="-L/usr/lib -lssl -lcrypto" fi if test -d '/usr/local/ssl/include'; then sslinc="-I/usr/local/ssl/include" elif test -d '/usr/local/openssl/include'; then sslinc="-I/usr/local/openssl/include" elif test -d '/usr/local/include/openssl'; then sslinc="-I/usr/local/include/openssl" elif test -d '/usr/include/ssl'; then sslinc="-I/usr/include/ssl" elif test -d '/usr/include/openssl'; then sslinc="-I/usr/include/openssl" else sslinc="" fi WWWSSL="" SSLINC="" LIBSSL="" LWWWSSL="" LIBWWWSSL="" WWWSSLEX="" # Check whether --with-ssl or --without-ssl was given. if test "${with_ssl+set}" = set; then withval="$with_ssl" case "$withval" in no) echo "$ac_t""no" 1>&6 ;; *) if test "x$withval" = "xyes"; then withval=$ssllib SSLINC=$sslinc fi LIBS="$LIBS $withval" cat > conftest.$ac_ext <<EOF #line 7310 "configure" #include "confdefs.h" int main() { SSL_library_init(); ; return 0; } EOF if { (eval echo configure:7317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* { echo "configure: error: Could not find the $withval libraries. You must first install openSSL." 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 WWWSSL="libwwwssl.la" LWWWSSL="-lwwwssl" LIBWWWSSL='${top_builddir}/Library/src/SSL/libwwwssl.la' WWWSSLEX="wwwssl" ;; esac else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether to use internal signal handlers""... $ac_c" 1>&6 echo "configure:7344: checking whether to use internal signal handlers" >&5 # Check whether --enable-signals or --disable-signals was given. if test "${enable_signals+set}" = set; then enableval="$enable_signals" case "${enableval}" in no) echo "$ac_t""no" 1>&6 ;; *) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define WWWLIB_SIG 1 EOF ;; esac else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether to disable Nagle's algorithm""... $ac_c" 1>&6 echo "configure:7367: checking whether to disable Nagle's algorithm" >&5 # Check whether --enable-nagle or --disable-nagle was given. if test "${enable_nagle+set}" = set; then enableval="$enable_nagle" case "${enableval}" in no) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_NO_NAGLE 1 EOF ;; *) echo "$ac_t""no" 1>&6 ;; esac else echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_NO_NAGLE 1 EOF fi echo $ac_n "checking whether to accept new rule files without asking an end user.""... $ac_c" 1>&6 echo "configure:7394: checking whether to accept new rule files without asking an end user." >&5 # Check whether --enable-autorules or --disable-autorules was given. if test "${enable_autorules+set}" = set; then enableval="$enable_autorules" case "${enableval}" in yes) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_AUTOMATIC_RULES 1 EOF ;; *) echo "$ac_t""no" 1>&6 ;; esac else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether to disable HTTP/1.1 pipelining""... $ac_c" 1>&6 echo "configure:7417: checking whether to disable HTTP/1.1 pipelining" >&5 # Check whether --enable-pipelining or --disable-pipelining was given. if test "${enable_pipelining+set}" = set; then enableval="$enable_pipelining" case "${enableval}" in no) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_NO_PIPELINING 1 EOF ;; *) echo "$ac_t""no" 1>&6 ;; esac else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether to use MUX as transport for HTTP.""... $ac_c" 1>&6 echo "configure:7441: checking whether to use MUX as transport for HTTP." >&5 # Check whether --enable-mux or --disable-mux was given. if test "${enable_mux+set}" = set; then enableval="$enable_mux" case "${enableval}" in yes) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_MUX 1 EOF ;; *) echo "$ac_t""no" 1>&6 ;; esac else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether to define _REENTRANT""... $ac_c" 1>&6 echo "configure:7464: checking whether to define _REENTRANT" >&5 # Check whether --enable-reentrant or --disable-reentrant was given. if test "${enable_reentrant+set}" = set; then enableval="$enable_reentrant" case "${enableval}" in no) echo "$ac_t""no" 1>&6 ac_cv_reentrant=no ;; *) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HT_REENTRANT 1 EOF CFLAGS="$CFLAGS -D_REENTRANT" ac_cv_reentrant=yes ;; esac else echo "$ac_t""no" 1>&6 fi if test "$ac_cv_reentrant" = "yes"; then echo $ac_n "checking for ctime_r""... $ac_c" 1>&6 echo "configure:7491: checking for ctime_r" >&5 if test -z "$ac_cv_ctime_args"; then cat > conftest.$ac_ext <<EOF #line 7494 "configure" #include "confdefs.h" #include <time.h> int main() { time_t clock; char buf[26]; ctime_r(&clock, buf); ; return 0; } EOF if { (eval echo configure:7505: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_ctime_args=2 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_ctime_args" ; then cat > conftest.$ac_ext <<EOF #line 7516 "configure" #include "confdefs.h" #include <time.h> int main() { time_t clock; char buf[26]; ctime_r(&clock, buf, 26); ; return 0; } EOF if { (eval echo configure:7527: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_ctime_args=3 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_ctime_args"; then echo "$ac_t""no" 1>&6 have_missing_r_funcs="$have_missing_r_funcs ctime_r" else if test "$ac_cv_ctime_args" = 2; then cat >> confdefs.h <<\EOF #define HAVE_CTIME_R_2 1 EOF elif test "$ac_cv_ctime_args" = 3; then cat >> confdefs.h <<\EOF #define HAVE_CTIME_R_3 1 EOF fi echo "$ac_t""yes, and it takes $ac_cv_ctime_args arguments" 1>&6 fi echo $ac_n "checking for readdir_r""... $ac_c" 1>&6 echo "configure:7555: checking for readdir_r" >&5 if test -z "$ac_cv_readdir_args"; then cat > conftest.$ac_ext <<EOF #line 7558 "configure" #include "confdefs.h" #include <sys/types.h> #if defined(HAVE_DIRENT_H) # include <dirent.h> # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if defined(HAVE_SYS_NDIR_H) # include <sys/ndir.h> # endif # if defined(HAVE_SYS_DIR_H) # include <sys/dir.h> # endif # if defined(HAVE_NDIR_H) # include <ndir.h> # endif #endif int main() { struct dirent dir, *dirp; DIR *mydir; dirp = readdir_r(mydir, &dir); ; return 0; } EOF if { (eval echo configure:7587: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_readdir_args=2 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_readdir_args"; then cat > conftest.$ac_ext <<EOF #line 7599 "configure" #include "confdefs.h" #include <sys/types.h> #if defined(HAVE_DIRENT_H) # include <dirent.h> # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if defined(HAVE_SYS_NDIR_H) # include <sys/ndir.h> # endif # if defined(HAVE_SYS_DIR_H) # include <sys/dir.h> # endif # if defined(HAVE_NDIR_H) # include <ndir.h> # endif #endif int main() { struct dirent dir, *dirp; DIR *mydir; int rc; rc = readdir_r(mydir, &dir, &dirp); ; return 0; } EOF if { (eval echo configure:7628: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_readdir_args=3 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_readdir_args"; then echo "$ac_t""no" 1>&6 have_missing_r_funcs="$have_missing_r_funcs readdir_r" else if test "$ac_cv_readdir_args" = 2; then cat >> confdefs.h <<\EOF #define HAVE_READDIR_R_2 1 EOF elif test "$ac_cv_readdir_args" = 3; then cat >> confdefs.h <<\EOF #define HAVE_READDIR_R_3 1 EOF fi echo "$ac_t""yes, and it takes $ac_cv_readdir_args arguments" 1>&6 fi echo $ac_n "checking for gethostbyname_r""... $ac_c" 1>&6 echo "configure:7657: checking for gethostbyname_r" >&5 if test -z "$ac_cv_gethostbyname_args"; then cat > conftest.$ac_ext <<EOF #line 7660 "configure" #include "confdefs.h" #include <sys/types.h> #include <netdb.h> int main() { struct hostent *hp; struct hostent h; char *name; char buffer[10]; int h_errno; hp = gethostbyname_r(name, &h, buffer, 10, &h_errno); ; return 0; } EOF if { (eval echo configure:7675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_gethostbyname_args=5 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_gethostbyname_args"; then cat > conftest.$ac_ext <<EOF #line 7686 "configure" #include "confdefs.h" #include <sys/types.h> #include <netdb.h> int main() { struct hostent h; struct hostent_data hdata; char *name; int rc; rc = gethostbyname_r(name, &h, &hdata); ; return 0; } EOF if { (eval echo configure:7700: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_gethostbyname_args=3 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_gethostbyname_args"; then cat > conftest.$ac_ext <<EOF #line 7711 "configure" #include "confdefs.h" #include <sys/types.h> #include <netdb.h> int main() { struct hostent h; struct hostent *hp; char *name; char buf[10]; int rc; int h_errno; rc = gethostbyname_r(name, &h, buf, 10, &hp, &h_errno); ; return 0; } EOF if { (eval echo configure:7729: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_gethostbyname_args=6 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_gethostbyname_args"; then echo "$ac_t""no" 1>&6 have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r" else if test "$ac_cv_gethostbyname_args" = 3; then cat >> confdefs.h <<\EOF #define HAVE_GETHOSTBYNAME_R_3 1 EOF elif test "$ac_cv_gethostbyname_args" = 5; then cat >> confdefs.h <<\EOF #define HAVE_GETHOSTBYNAME_R_5 1 EOF elif test "$ac_cv_gethostbyname_args" = 6; then cat >> confdefs.h <<\EOF #define HAVE_GETHOSTBYNAME_R_6 1 EOF fi echo "$ac_t""yes, and it takes $ac_cv_gethostbyname_args arguments" 1>&6 fi echo $ac_n "checking for gethostbyaddr_r""... $ac_c" 1>&6 echo "configure:7762: checking for gethostbyaddr_r" >&5 if test -z "$ac_cv_gethostbyaddr_args"; then cat > conftest.$ac_ext <<EOF #line 7765 "configure" #include "confdefs.h" #include <sys/types.h> #include <netdb.h> int main() { char * address; int length; int type; struct hostent h; struct hostent_data hdata; int rc; rc = gethostbyaddr_r(address, length, type, &h, &hdata); ; return 0; } EOF if { (eval echo configure:7782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_gethostbyaddr_args=5 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_gethostbyaddr_args"; then cat > conftest.$ac_ext <<EOF #line 7794 "configure" #include "confdefs.h" #include <sys/types.h> #include <netdb.h> int main() { char * address; int length; int type; struct hostent h; char buffer[10]; int buflen; int h_errnop; struct hostent * hp; hp = gethostbyaddr_r(address, length, type, &h, buffer, buflen, &h_errnop); ; return 0; } EOF if { (eval echo configure:7815: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_gethostbyaddr_args=7 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_gethostbyaddr_args"; then cat > conftest.$ac_ext <<EOF #line 7827 "configure" #include "confdefs.h" #include <sys/types.h> #include <netdb.h> int main() { char * address; int length; int type; struct hostent h; char buffer[10]; int buflen; int h_errnop; struct hostent * hp; int rc; rc = gethostbyaddr_r(address, length, type, &h, buffer, buflen, &hp, &h_errnop); ; return 0; } EOF if { (eval echo configure:7849: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_gethostbyaddr_args=8 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test -z "$ac_cv_gethostbyaddr_args"; then echo "$ac_t""no" 1>&6 have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r" else if test "$ac_cv_gethostbyaddr_args" = 5; then cat >> confdefs.h <<\EOF #define HAVE_GETHOSTBYADDR_R_5 1 EOF elif test "$ac_cv_gethostbyaddr_args" = 7; then cat >> confdefs.h <<\EOF #define HAVE_GETHOSTBYADDR_R_7 1 EOF elif test "$ac_cv_gethostbyaddr_args" = 8; then cat >> confdefs.h <<\EOF #define HAVE_GETHOSTBYADDR_R_8 1 EOF fi echo "$ac_t""yes, and it takes $ac_cv_gethostbyaddr_args arguments" 1>&6 fi echo $ac_n "checking for getlogin_r""... $ac_c" 1>&6 echo "configure:7882: checking for getlogin_r" >&5 if test -z "$ac_cv_getlogin_r_style"; then if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 7888 "configure" #include "confdefs.h" #include <unistd.h> int main() { char name[1024]; int len=1024; int rc; char *login; name[0]='\0'; rc = getlogin_r(name, len); if(rc == 0 && name[0] != '\0') { return 0; /* returns zero on success */ } else if(rc != 0 && name[0] == '\0') { return 0; /* returns errno on failure */ } else if(rc == 0 && name[0] == '\0') { return 0; /* can't tell */ } else if(rc != 0 && name[0] != '\0') { return 1; /* returns pointer on success */ } } EOF if { (eval echo configure:7922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_getlogin_r_style=1 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_getlogin_r_style=2 fi rm -fr conftest* fi fi if test -z "$ac_cv_getlogin_r_style"; then echo "$ac_t""no" 1>&6 have_missing_r_funcs="$have_missing_r_funcs getlogin_r" else if test $ac_cv_getlogin_r_style = 1; then cat >> confdefs.h <<\EOF #define GETLOGIN_R_RETURNS_INT 1 EOF echo "$ac_t""yes, and it returns an int" 1>&6 elif test $ac_cv_getlogin_r_style = 2; then cat >> confdefs.h <<\EOF #define GETLOGIN_R_RETURNS_POINTER 1 EOF echo "$ac_t""yes, and it returns a pointer" 1>&6 else echo "$ac_t""no: result is $ac_cv_getlogin_r_style" 1>&6 have_missing_r_funcs="$have_missing_r_funcs getlogin_r" fi fi if test -n "$have_missing_r_funcs"; then echo "configure: warning: missing reentrant functions: $have_missing_r_funcs" 1>&2 fi fi echo $ac_n "checking whether to define _POSIX_SOURCE""... $ac_c" 1>&6 echo "configure:7966: checking whether to define _POSIX_SOURCE" >&5 # Check whether --enable-posix or --disable-posix was given. if test "${enable_posix+set}" = set; then enableval="$enable_posix" case "${enableval}" in no) echo "$ac_t""no" 1>&6 ;; *) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define _POSIX_SOURCE 1 EOF CFLAGS="$CFLAGS -D_POSIX_SOURCE" ;; esac else echo "$ac_t""no" 1>&6 fi # Check whether --enable-cyrillic or --disable-cyrillic was given. if test "${enable_cyrillic+set}" = set; then enableval="$enable_cyrillic" cat >> confdefs.h <<\EOF #define CYRILLIC 1 EOF A_STDIO="a_stdio.o" else A_STDIO="" fi trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS <<EOF #! /bin/sh # Generated automatically by configure. # Run this file to recreate the current configuration. # This directory was configured as follows, # on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile libwww-config w3c-libwww.spec config/Makefile modules/Makefile modules/expat/Makefile modules/expat/xmltok/Makefile modules/expat/xmlparse/Makefile modules/md5/Makefile Library/Makefile Library/User/Makefile Library/User/Patch/Makefile Library/User/Architecture/Makefile Library/User/Using/Makefile Library/User/Guide/Makefile Library/User/Style/Makefile Library/User/Platform/Makefile Library/Test/Makefile Library/Test/User/Makefile Library/Test/src/Makefile Library/src/Makefile Library/src/windows/Makefile Library/src/vms/Makefile Library/src/SSL/Makefile Library/src/SSL/windows/Makefile Library/Examples/Makefile Library/cvs2sql/Makefile Library/External/Makefile PICS-client/Makefile PICS-client/User/Makefile PICS-client/src/Makefile PICS-client/src/windows/Makefile LineMode/Makefile LineMode/User/Makefile LineMode/src/Makefile LineMode/src/windows/Makefile LineMode/src/vms/Makefile Robot/Makefile Robot/User/Makefile Robot/src/Makefile Robot/tcl/Makefile Robot/src/windows/Makefile ComLine/Makefile ComLine/User/Makefile ComLine/src/Makefile ComLine/src/windows/Makefile WinCom/Makefile WinCom/hlp/Makefile WinCom/res/Makefile Icons/Makefile Icons/WWW/Makefile Icons/32x32/Makefile Icons/internal/Makefile wwwconf.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <<EOF # Protect against being on the right side of a sed subst in config.status. sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g s%@host_vendor@%$host_vendor%g s%@host_os@%$host_os%g s%@target@%$target%g s%@target_alias@%$target_alias%g s%@target_cpu@%$target_cpu%g s%@target_vendor@%$target_vendor%g s%@target_os@%$target_os%g s%@build@%$build%g s%@build_alias@%$build_alias%g s%@build_cpu@%$build_cpu%g s%@build_vendor@%$build_vendor%g s%@build_os@%$build_os%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@PREVIOUS_VERSION@%$PREVIOUS_VERSION%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@ACLOCAL@%$ACLOCAL%g s%@AUTOCONF@%$AUTOCONF%g s%@AUTOMAKE@%$AUTOMAKE%g s%@AUTOHEADER@%$AUTOHEADER%g s%@MAKEINFO@%$MAKEINFO%g s%@SET_MAKE@%$SET_MAKE%g s%@CC@%$CC%g s%@EXEEXT@%$EXEEXT%g s%@RANLIB@%$RANLIB%g s%@LN_S@%$LN_S%g s%@LIBTOOL@%$LIBTOOL%g s%@CPP@%$CPP%g s%@icondir@%$icondir%g s%@PURIFY_CACHE@%$PURIFY_CACHE%g s%@have_telnet@%$have_telnet%g s%@have_rlogin@%$have_rlogin%g s%@have_tn3270@%$have_tn3270%g s%@have_perl@%$have_perl%g s%@RM@%$RM%g s%@AR@%$AR%g s%@MKDIR@%$MKDIR%g s%@CHMOD@%$CHMOD%g s%@CP@%$CP%g s%@TAR@%$TAR%g s%@CVS@%$CVS%g s%@SED@%$SED%g s%@COMPRESS@%$COMPRESS%g s%@have_resolv_conf@%$have_resolv_conf%g s%@HTWAIS@%$HTWAIS%g s%@WWWWAIS@%$WWWWAIS%g s%@LWWWWAIS@%$LWWWWAIS%g s%@LIBWWWWAIS@%$LIBWWWWAIS%g s%@HTZLIB@%$HTZLIB%g s%@WWWZIP@%$WWWZIP%g s%@LWWWZIP@%$LWWWZIP%g s%@LIBWWWZIP@%$LIBWWWZIP%g s%@HTSQL@%$HTSQL%g s%@HTSQLLOG@%$HTSQLLOG%g s%@WWWSQL@%$WWWSQL%g s%@LWWWSQL@%$LWWWSQL%g s%@LIBWWWSQL@%$LIBWWWSQL%g s%@CVS2SQL@%$CVS2SQL%g s%@HTXML@%$HTXML%g s%@HTLIBXML@%$HTLIBXML%g s%@XMLTOK@%$XMLTOK%g s%@XMLPARSE@%$XMLPARSE%g s%@WWWXML@%$WWWXML%g s%@LWWWXML@%$LWWWXML%g s%@LIBWWWXML@%$LIBWWWXML%g s%@SHOWXML@%$SHOWXML%g s%@WWWMD5@%$WWWMD5%g s%@LWWWMD5@%$LWWWMD5%g s%@LIBWWWMD5@%$LIBWWWMD5%g s%@WWWSSL@%$WWWSSL%g s%@SSLINC@%$SSLINC%g s%@LWWWSSL@%$LWWWSSL%g s%@LIBWWWSSL@%$LIBWWWSSL%g s%@WWWSSLEX@%$WWWSSLEX%g s%@A_STDIO@%$A_STDIO%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <<EOF CONFIG_FILES=\${CONFIG_FILES-"Makefile libwww-config w3c-libwww.spec config/Makefile modules/Makefile modules/expat/Makefile modules/expat/xmltok/Makefile modules/expat/xmlparse/Makefile modules/md5/Makefile Library/Makefile Library/User/Makefile Library/User/Patch/Makefile Library/User/Architecture/Makefile Library/User/Using/Makefile Library/User/Guide/Makefile Library/User/Style/Makefile Library/User/Platform/Makefile Library/Test/Makefile Library/Test/User/Makefile Library/Test/src/Makefile Library/src/Makefile Library/src/windows/Makefile Library/src/vms/Makefile Library/src/SSL/Makefile Library/src/SSL/windows/Makefile Library/Examples/Makefile Library/cvs2sql/Makefile Library/External/Makefile PICS-client/Makefile PICS-client/User/Makefile PICS-client/src/Makefile PICS-client/src/windows/Makefile LineMode/Makefile LineMode/User/Makefile LineMode/src/Makefile LineMode/src/windows/Makefile LineMode/src/vms/Makefile Robot/Makefile Robot/User/Makefile Robot/src/Makefile Robot/tcl/Makefile Robot/src/windows/Makefile ComLine/Makefile ComLine/User/Makefile ComLine/src/Makefile ComLine/src/windows/Makefile WinCom/Makefile WinCom/hlp/Makefile WinCom/res/Makefile Icons/Makefile Icons/WWW/Makefile Icons/32x32/Makefile Icons/internal/Makefile "} EOF cat >> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <<EOF CONFIG_HEADERS="wwwconf.h" EOF cat >> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS <<EOF EOF cat >> $CONFIG_STATUS <<\EOF test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h date>stamp-h exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1